<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>http://wiki.fhem.de/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mikawood</id>
	<title>FHEMWiki - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.fhem.de/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mikawood"/>
	<link rel="alternate" type="text/html" href="http://wiki.fhem.de/wiki/Spezial:Beitr%C3%A4ge/Mikawood"/>
	<updated>2026-05-02T11:45:36Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-PB-2-WM55_2fach-Funk-Wandtaster&amp;diff=21824</id>
		<title>HM-PB-2-WM55 2fach-Funk-Wandtaster</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-PB-2-WM55_2fach-Funk-Wandtaster&amp;diff=21824"/>
		<updated>2017-07-18T10:33:57Z</updated>

		<summary type="html">&lt;p&gt;Mikawood: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HomeMatic HM-PB-2-WM55 2fach-Funk-Wandtaster&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;bitte eintragen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hinweise zur Hardware-Installation ==&lt;br /&gt;
Die Integration in FHEM läuft wie mit allen Komponenten. Den LAN-Adapter in FHEM auf hmPairForSec 60 (Zahl bedeutet die Zeit des Zustands in Sekunden und kann beliebig geändert werden) setzen und den Knopf auf der Rückseite des Schalters drücken. Dann sollte der Schalter wie unten dargestellt in FHEM angelegt werden (wird in die fhem.cfg eingetragen). Je nach Einstellungen in autocreate (http://fhem.de/commandref.html#autocreate) kann es sein, dass auch noch weitere Aktionen ausgeführt wurden.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
&lt;br /&gt;
=== Auszug aus der fhem.cfg ===&lt;br /&gt;
Hier der Originaleintrag aus der fhem.cfg der automatisch erstellt wird (mit den &amp;quot;xxx&amp;quot; habe ich meine Nummer erstetzt):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define CUL_HM_HM_PB_2_WM55_1F1xxx CUL_HM 1F1xxx&lt;br /&gt;
attr CUL_HM_HM_PB_2_WM55_1F1xxx .devInfo 020000&lt;br /&gt;
attr CUL_HM_HM_PB_2_WM55_1F1xxx .stc 40&lt;br /&gt;
attr CUL_HM_HM_PB_2_WM55_1F1xxx firmware 1.1&lt;br /&gt;
attr CUL_HM_HM_PB_2_WM55_1F1xxx model HM-PB-2-WM55&lt;br /&gt;
attr CUL_HM_HM_PB_2_WM55_1F1xxx room Bad&lt;br /&gt;
attr CUL_HM_HM_PB_2_WM55_1F1xxx serialNr KEQ003xxx&lt;br /&gt;
attr CUL_HM_HM_PB_2_WM55_1F1xxx subType pushButton&lt;br /&gt;
define FileLog_CUL_HM_HM_PB_2_WM55_1F1xxx FileLog ./log/CUL_HM_HM_PB_2_WM55_1F1xxx-%Y.log CUL_HM_HM_PB_2_WM55_1F1xxx&lt;br /&gt;
attr FileLog_CUL_HM_HM_PB_2_WM55_1F1xxx logtype text&lt;br /&gt;
attr FileLog_CUL_HM_HM_PB_2_WM55_1F1xxx room CUL_HM&lt;br /&gt;
define CUL_HM_HM_PB_2_WM55_1F1xxx_Btn_01 CUL_HM 1F1xxx01&lt;br /&gt;
attr CUL_HM_HM_PB_2_WM55_1F1xxx_Btn_01 model HM-PB-2-WM55&lt;br /&gt;
attr CUL_HM_HM_PB_2_WM55_1F1xxx_Btn_01 room CUL_HM&lt;br /&gt;
define FileLog_CUL_HM_HM_PB_2_WM55_1F1xxx_Btn_01 FileLog ./log/CUL_HM_HM_PB_2_WM55_1F1xxx_Btn_01-%Y.log CUL_HM_HM_PB_2_WM55_1F1xxx_Btn_01&lt;br /&gt;
attr FileLog_CUL_HM_HM_PB_2_WM55_1F1xxx_Btn_01 logtype text&lt;br /&gt;
attr FileLog_CUL_HM_HM_PB_2_WM55_1F1xxx_Btn_01 room CUL_HM&lt;br /&gt;
define CUL_HM_HM_PB_2_WM55_1F1xxx_Btn_02 CUL_HM 1F1xxx02&lt;br /&gt;
attr CUL_HM_HM_PB_2_WM55_1F1xxx_Btn_02 model HM-PB-2-WM55&lt;br /&gt;
attr CUL_HM_HM_PB_2_WM55_1F1xxx_Btn_02 room CUL_HM&lt;br /&gt;
define FileLog_CUL_HM_HM_PB_2_WM55_1F1xxx_Btn_02 FileLog ./log/CUL_HM_HM_PB_2_WM55_1F1xxx_Btn_02-%Y.log CUL_HM_HM_PB_2_WM55_1F1xxx_Btn_02&lt;br /&gt;
attr FileLog_CUL_HM_HM_PB_2_WM55_1F1xxx_Btn_02 logtype text&lt;br /&gt;
attr FileLog_CUL_HM_HM_PB_2_WM55_1F1xxx_Btn_02 room CUL_HM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bearbeiten ===&lt;br /&gt;
Das ist der Standardeintrag, den fhem automatisch erstellt. Es macht aber Sinn, einiges zu verändern.&lt;br /&gt;
Zum einen sollten die Entities umbenannt werden, um sie besser finden und somit bedienen zu können. Das geht entweder manuell in der fhem.cfg (suche &amp;quot;CUL_HM_HM_PB_2_WM55_1F1xxx&amp;quot; ersetze mit neuem Begriff) oder besser per Befehl:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rename CUL_HM_HM_PB_2_WM55_1F1xxx LichtFlurDev&lt;br /&gt;
rename CUL_HM_HM_PB_2_WM55_1F1xxx_Btn_01 LichtFlur1&lt;br /&gt;
rename CUL_HM_HM_PB_2_WM55_1F1xxx_Btn_02 LichtFlur2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auch ist es nicht sinnvoll, für jede Entity (in diesem Fall 3: Schalter und die beiden Knöpfe) je ein eigenes Logfile anzulegen, auch wenn autocreate das so macht, denn das kostet Performance und Übersichtlichkeit. Das Beispiel unten zeigt, wie die Ereignisse aller drei Entities mitgeschrieben werden - achtet auf das .* am Ende:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define FileLog_LichtFlur FileLog ./log/LichtFlur-%Y.log LichtFlur.*&lt;br /&gt;
attr FileLog_LichtFlur logtype text&lt;br /&gt;
attr FileLog_LichtFlur room CUL_HM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Und jetzt natürlich noch aufräumen und die alten Logfiles entsorgen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
delete FileLog_CUL_HM_HM_PB_2_WM55_1F1xxx&lt;br /&gt;
delete FileLog_CUL_HM_HM_PB_2_WM55_1F1xxx_Btn_01&lt;br /&gt;
delete FileLog_CUL_HM_HM_PB_2_WM55_1F1xxx_Btn_02&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wichtig:&#039;&#039;&#039; Folgende Attribute solltet ihr &#039;&#039;&#039;nicht aendern&#039;&#039;&#039;: .devInfo, .stc, model, firmware, serialNr, subType&lt;br /&gt;
&lt;br /&gt;
Weitere interessante Attribute, die man nutzen sollte (siehe auch commandref)sind:room, group, expert, webCmd: gruppieren und darstellen auf der webseite, autoRegRead: automatisches Lesen der Register (für push-Button sollte es auf 0 stehen)&lt;br /&gt;
&lt;br /&gt;
Letztendlich könnte die &amp;quot;gepflegte&amp;quot; fhem.cfg so aussehen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#====== Das Device&lt;br /&gt;
define LichtFlurDev CUL_HM 1F1xxx&lt;br /&gt;
attr LichtFlurDev .devInfo 020000&lt;br /&gt;
attr LichtFlurDev .stc 40&lt;br /&gt;
attr LichtFlurDev firmware 1.1&lt;br /&gt;
attr LichtFlurDev model HM-PB-2-WM55&lt;br /&gt;
attr LichtFlurDev serialNr KEQ003xxx&lt;br /&gt;
attr LichtFlurDev subType pushButton&lt;br /&gt;
#--- user Attribute zum Device&lt;br /&gt;
attr LichtFlurDev room Flur,Device,Licht&lt;br /&gt;
attr LichtFlurDev group Schalter&lt;br /&gt;
attr LichtFlurDev webCmd statusRequest:getConfig&lt;br /&gt;
attr LichtFlurDev expert 1&lt;br /&gt;
attr LichtFlurDev autoRegRead 0&lt;br /&gt;
#--- erste Taste&lt;br /&gt;
define LichtFlur1 CUL_HM 1F1xxx01&lt;br /&gt;
attr LichtFlur1 model HM-PB-2-WM55&lt;br /&gt;
attr LichtFlur1 room Flur,Button,Licht&lt;br /&gt;
attr LichtFlur1 group Schalter&lt;br /&gt;
#--- zweite Taste&lt;br /&gt;
define LichtFlur2 CUL_HM 1F1xxx02&lt;br /&gt;
attr LichtFlur2 model HM-PB-2-WM55&lt;br /&gt;
attr LichtFlur2 room Flur,Button,Licht&lt;br /&gt;
attr LichtFlur2 group Schalter&lt;br /&gt;
&lt;br /&gt;
define FileLog_LichtFlur FileLog ./log/LichtFlur-%Y.log LichtFlur.*&lt;br /&gt;
attr FileLog_LichtFlur logtype text&lt;br /&gt;
attr FileLog_LichtFlur room logfiles&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mit virtuellem Aktor verbinden ===&lt;br /&gt;
Wenn man den Taster nicht direkt mit einem Aktor verbindet, erhält er keine Rückmeldungen, wird also immer orange und rot blinken, wenn ihr einen Befehl absetzt. Dieser wird zwar von fhem verarbeitet, fhem weiß aber nicht, dass es etwas zurückmelden soll. Daher solltet ihr Euch einen virtuellen Aktor anlegen und den Taster dann mit diesem verbinden:&lt;br /&gt;
&lt;br /&gt;
In der FHEM-Web Oberfläche gebt ihr in der Kommandozeile ein (die hmId kann freigewählt werden, darf aber in echt nicht existieren):&lt;br /&gt;
 define virtueller_Aktor CUL_HM 123456&lt;br /&gt;
sowie:&lt;br /&gt;
 set virtueller_Aktor virtual 2&lt;br /&gt;
&lt;br /&gt;
Jetzt habt ihr einen Virtuellen Aktor mit einem Kanal erstellt, jetzt gilt es noch das ganze mit dem realen Taster zu verbinden. Verbunden werden zuerst die Kanäle und dann wird die ganze Konfiguration am Taster gespeichert:&lt;br /&gt;
&lt;br /&gt;
 set LichtFlur1 peerChan 0 virtueller_Aktor_Btn1 single set&lt;br /&gt;
 set LichtFlur2 peerChan 0 virtueller_Aktor_Btn2 single set&lt;br /&gt;
 set LichtFlurDev getConfig  &lt;br /&gt;
&lt;br /&gt;
und am Taster einmal anlernen drücken, ggf. nochmal ein &amp;lt;code&amp;gt;set LichtFlurDev getConfig&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun drückt einmal einen Button eures Tasters. Wenn alles geklappt hatte, sollte bei Euren Kanälen im State ein (to virtueller_Aktor_Btn1) dahinter stehen und unter den Attributen etwas in den peerIDs auftauchen. Diesen virtuellen Aktor kann man übrigens als Gegenpart für beliebig viele Taster nehmen, ihr braucht also nicht für jeden Taster einen virtuellen Aktor erstellen. Um den virtuellen Aktor zu erweitern einfach ein &amp;lt;code&amp;gt;set virtueller_Aktor virtual &amp;lt;i&amp;gt;[Gesamtanzahl aller Kanäle]&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt; ausführen, schon habt ihr weitere Kanäle die ihr mit euren echten Tastern peeren könnt.&lt;br /&gt;
&lt;br /&gt;
Am Ende umbedingt einmal &amp;quot;Save config&amp;quot; drücken, damit der virtuelle Aktor in der fhem.cfg abgespeichert wird.&lt;br /&gt;
&lt;br /&gt;
=== Mit Rolladenaktor verbinden (peeren) ===&lt;br /&gt;
&lt;br /&gt;
Der HM-PB-2-WM55 kann auch z.B. direkt mit einem [[HM-LC-BL1-FM_Funk-Jalousieaktor|HM-LC-BL1-FM Rollladenaktor]] [[Peering (HomeMatic)|gepeert]] werden. Hierdurch lässt er sich ohne FHEM nutzen. Weitere Infos dazu finden Sie [[HM-LC-BL1-FM_Funk-Jalousieaktor#Peeren_mit_einem_HM-PB-2-WM55|hier]].&lt;br /&gt;
&lt;br /&gt;
== Integration in bestehende Markenschalterprogramme ==&lt;br /&gt;
&lt;br /&gt;
Obwohl der HM-PB-2-WM55, im Gegensatz zu den Funk-Schaltaktoren für Markenschalter (HM-LC-Sw1PBU-FM, HM-LC-Dim1TPBU-FM und HM-LC-Bl1PBU-FM), eigentlich nicht für die Integration in bestehende Markenschalterprogramme geeignet ist, kann man ihn mit etwas Bastelaufwand doch optisch zumindest etwas integrieren.&lt;br /&gt;
&lt;br /&gt;
=== Jung CD 500 ===&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe einer im 3D Drucker selbst gedruckten Adapterplatte und etwas dremeln lässt sich der HM-PB-2-WM55 recht gut in die Jung CD 500 Serie integrieren. Eine bebilderte Anleitung ist [http://www.instructables.com/id/HomeMatic-Wandschalter-mit-Jung-CD500-Blenden hier] zu finden.&lt;br /&gt;
&lt;br /&gt;
== Probleme ==&lt;br /&gt;
&lt;br /&gt;
=== Bausatz: Der Taster lässt sich nicht anlernen / rotes Dauerblinken ===&lt;br /&gt;
Dann stimmt vermutlich etwas mit der Lötung nicht. Am besten insbesondere die Lötungen des Funkmoduls (8 auf jeder Seite überprüfen).&lt;br /&gt;
Am besten mal in der fhem.cfg &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr LANInterface loglevel 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
eintragen und dann die Logdatei anschauen, was dort für Funkverkehr aufgezeichnet wird. Euren Schalter könnt ihr identifizieren, indem ihr den kleineren QR-code auf der Platine des Schalters z.B. mit einem Android Handy und Barcoo auslest. Die App zeigt Euch dann den sechsstelligen Gerätecode an (wenn der Code siebenstellig erscheint, dann die erste Ziffer / Buchtstaben weglassen), den ihr in der Logdatei suchen könnt.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
*[https://files.elv.com/Assets/Produkte/10/1030/103076/Downloads/103076_HM_PB_2_WM55_UM.pdf: Documentation - HM-PB-2-WM55]&lt;br /&gt;
*[http://www.instructables.com/id/HomeMatic-Wandschalter-mit-Jung-CD500-Blenden Instructables.com: Integration in Jung CD 500 Schalterprogramm]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Schalter (Sender)]]&lt;/div&gt;</summary>
		<author><name>Mikawood</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-PB-2-WM55_2fach-Funk-Wandtaster&amp;diff=21823</id>
		<title>HM-PB-2-WM55 2fach-Funk-Wandtaster</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-PB-2-WM55_2fach-Funk-Wandtaster&amp;diff=21823"/>
		<updated>2017-07-18T10:30:40Z</updated>

		<summary type="html">&lt;p&gt;Mikawood: Link updated&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HomeMatic HM-PB-2-WM55 2fach-Funk-Wandtaster&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;bitte eintragen&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hinweise zur Hardware-Installation ==&lt;br /&gt;
Die Integration in FHEM läuft wie mit allen Komponenten. Den LAN-Adapter in FHEM auf hmPairForSec 60 (Zahl bedeutet die Zeit des Zustands in Sekunden und kann beliebig geändert werden) setzen und den Knopf auf der Rückseite des Schalters drücken. Dann sollte der Schalter wie unten dargestellt in FHEM angelegt werden (wird in die fhem.cfg eingetragen). Je nach Einstellungen in autocreate (http://fhem.de/commandref.html#autocreate) kann es sein, dass auch noch weitere Aktionen ausgeführt wurden.&lt;br /&gt;
&lt;br /&gt;
== Hinweise zum Betrieb mit FHEM ==&lt;br /&gt;
&lt;br /&gt;
=== Auszug aus der fhem.cfg ===&lt;br /&gt;
Hier der Originaleintrag aus der fhem.cfg der automatisch erstellt wird (mit den &amp;quot;xxx&amp;quot; habe ich meine Nummer erstetzt):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define CUL_HM_HM_PB_2_WM55_1F1xxx CUL_HM 1F1xxx&lt;br /&gt;
attr CUL_HM_HM_PB_2_WM55_1F1xxx .devInfo 020000&lt;br /&gt;
attr CUL_HM_HM_PB_2_WM55_1F1xxx .stc 40&lt;br /&gt;
attr CUL_HM_HM_PB_2_WM55_1F1xxx firmware 1.1&lt;br /&gt;
attr CUL_HM_HM_PB_2_WM55_1F1xxx model HM-PB-2-WM55&lt;br /&gt;
attr CUL_HM_HM_PB_2_WM55_1F1xxx room Bad&lt;br /&gt;
attr CUL_HM_HM_PB_2_WM55_1F1xxx serialNr KEQ003xxx&lt;br /&gt;
attr CUL_HM_HM_PB_2_WM55_1F1xxx subType pushButton&lt;br /&gt;
define FileLog_CUL_HM_HM_PB_2_WM55_1F1xxx FileLog ./log/CUL_HM_HM_PB_2_WM55_1F1xxx-%Y.log CUL_HM_HM_PB_2_WM55_1F1xxx&lt;br /&gt;
attr FileLog_CUL_HM_HM_PB_2_WM55_1F1xxx logtype text&lt;br /&gt;
attr FileLog_CUL_HM_HM_PB_2_WM55_1F1xxx room CUL_HM&lt;br /&gt;
define CUL_HM_HM_PB_2_WM55_1F1xxx_Btn_01 CUL_HM 1F1xxx01&lt;br /&gt;
attr CUL_HM_HM_PB_2_WM55_1F1xxx_Btn_01 model HM-PB-2-WM55&lt;br /&gt;
attr CUL_HM_HM_PB_2_WM55_1F1xxx_Btn_01 room CUL_HM&lt;br /&gt;
define FileLog_CUL_HM_HM_PB_2_WM55_1F1xxx_Btn_01 FileLog ./log/CUL_HM_HM_PB_2_WM55_1F1xxx_Btn_01-%Y.log CUL_HM_HM_PB_2_WM55_1F1xxx_Btn_01&lt;br /&gt;
attr FileLog_CUL_HM_HM_PB_2_WM55_1F1xxx_Btn_01 logtype text&lt;br /&gt;
attr FileLog_CUL_HM_HM_PB_2_WM55_1F1xxx_Btn_01 room CUL_HM&lt;br /&gt;
define CUL_HM_HM_PB_2_WM55_1F1xxx_Btn_02 CUL_HM 1F1xxx02&lt;br /&gt;
attr CUL_HM_HM_PB_2_WM55_1F1xxx_Btn_02 model HM-PB-2-WM55&lt;br /&gt;
attr CUL_HM_HM_PB_2_WM55_1F1xxx_Btn_02 room CUL_HM&lt;br /&gt;
define FileLog_CUL_HM_HM_PB_2_WM55_1F1xxx_Btn_02 FileLog ./log/CUL_HM_HM_PB_2_WM55_1F1xxx_Btn_02-%Y.log CUL_HM_HM_PB_2_WM55_1F1xxx_Btn_02&lt;br /&gt;
attr FileLog_CUL_HM_HM_PB_2_WM55_1F1xxx_Btn_02 logtype text&lt;br /&gt;
attr FileLog_CUL_HM_HM_PB_2_WM55_1F1xxx_Btn_02 room CUL_HM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bearbeiten ===&lt;br /&gt;
Das ist der Standardeintrag, den fhem automatisch erstellt. Es macht aber Sinn, einiges zu verändern.&lt;br /&gt;
Zum einen sollten die Entities umbenannt werden, um sie besser finden und somit bedienen zu können. Das geht entweder manuell in der fhem.cfg (suche &amp;quot;CUL_HM_HM_PB_2_WM55_1F1xxx&amp;quot; ersetze mit neuem Begriff) oder besser per Befehl:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rename CUL_HM_HM_PB_2_WM55_1F1xxx LichtFlurDev&lt;br /&gt;
rename CUL_HM_HM_PB_2_WM55_1F1xxx_Btn_01 LichtFlur1&lt;br /&gt;
rename CUL_HM_HM_PB_2_WM55_1F1xxx_Btn_02 LichtFlur2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auch ist es nicht sinnvoll, für jede Entity (in diesem Fall 3: Schalter und die beiden Knöpfe) je ein eigenes Logfile anzulegen, auch wenn autocreate das so macht, denn das kostet Performance und Übersichtlichkeit. Das Beispiel unten zeigt, wie die Ereignisse aller drei Entities mitgeschrieben werden - achtet auf das .* am Ende:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define FileLog_LichtFlur FileLog ./log/LichtFlur-%Y.log LichtFlur.*&lt;br /&gt;
attr FileLog_LichtFlur logtype text&lt;br /&gt;
attr FileLog_LichtFlur room CUL_HM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Und jetzt natürlich noch aufräumen und die alten Logfiles entsorgen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
delete FileLog_CUL_HM_HM_PB_2_WM55_1F1xxx&lt;br /&gt;
delete FileLog_CUL_HM_HM_PB_2_WM55_1F1xxx_Btn_01&lt;br /&gt;
delete FileLog_CUL_HM_HM_PB_2_WM55_1F1xxx_Btn_02&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wichtig:&#039;&#039;&#039; Folgende Attribute solltet ihr &#039;&#039;&#039;nicht aendern&#039;&#039;&#039;: .devInfo, .stc, model, firmware, serialNr, subType&lt;br /&gt;
&lt;br /&gt;
Weitere interessante Attribute, die man nutzen sollte (siehe auch commandref)sind:room, group, expert, webCmd: gruppieren und darstellen auf der webseite, autoRegRead: automatisches Lesen der Register (für push-Button sollte es auf 0 stehen)&lt;br /&gt;
&lt;br /&gt;
Letztendlich könnte die &amp;quot;gepflegte&amp;quot; fhem.cfg so aussehen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#====== Das Device&lt;br /&gt;
define LichtFlurDev CUL_HM 1F1xxx&lt;br /&gt;
attr LichtFlurDev .devInfo 020000&lt;br /&gt;
attr LichtFlurDev .stc 40&lt;br /&gt;
attr LichtFlurDev firmware 1.1&lt;br /&gt;
attr LichtFlurDev model HM-PB-2-WM55&lt;br /&gt;
attr LichtFlurDev serialNr KEQ003xxx&lt;br /&gt;
attr LichtFlurDev subType pushButton&lt;br /&gt;
#--- user Attribute zum Device&lt;br /&gt;
attr LichtFlurDev room Flur,Device,Licht&lt;br /&gt;
attr LichtFlurDev group Schalter&lt;br /&gt;
attr LichtFlurDev webCmd statusRequest:getConfig&lt;br /&gt;
attr LichtFlurDev expert 1&lt;br /&gt;
attr LichtFlurDev autoRegRead 0&lt;br /&gt;
#--- erste Taste&lt;br /&gt;
define LichtFlur1 CUL_HM 1F1xxx01&lt;br /&gt;
attr LichtFlur1 model HM-PB-2-WM55&lt;br /&gt;
attr LichtFlur1 room Flur,Button,Licht&lt;br /&gt;
attr LichtFlur1 group Schalter&lt;br /&gt;
#--- zweite Taste&lt;br /&gt;
define LichtFlur2 CUL_HM 1F1xxx02&lt;br /&gt;
attr LichtFlur2 model HM-PB-2-WM55&lt;br /&gt;
attr LichtFlur2 room Flur,Button,Licht&lt;br /&gt;
attr LichtFlur2 group Schalter&lt;br /&gt;
&lt;br /&gt;
define FileLog_LichtFlur FileLog ./log/LichtFlur-%Y.log LichtFlur.*&lt;br /&gt;
attr FileLog_LichtFlur logtype text&lt;br /&gt;
attr FileLog_LichtFlur room logfiles&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mit virtuellem Aktor verbinden ===&lt;br /&gt;
Wenn man den Taster nicht direkt mit einem Aktor verbindet, erhält er keine Rückmeldungen, wird also immer orange und rot blinken, wenn ihr einen Befehl absetzt. Dieser wird zwar von fhem verarbeitet, fhem weiß aber nicht, dass es etwas zurückmelden soll. Daher solltet ihr Euch einen virtuellen Aktor anlegen und den Taster dann mit diesem verbinden:&lt;br /&gt;
&lt;br /&gt;
In der FHEM-Web Oberfläche gebt ihr in der Kommandozeile ein (die hmId kann freigewählt werden, darf aber in echt nicht existieren):&lt;br /&gt;
 define virtueller_Aktor CUL_HM 123456&lt;br /&gt;
sowie:&lt;br /&gt;
 set virtueller_Aktor virtual 2&lt;br /&gt;
&lt;br /&gt;
Jetzt habt ihr einen Virtuellen Aktor mit einem Kanal erstellt, jetzt gilt es noch das ganze mit dem realen Taster zu verbinden. Verbunden werden zuerst die Kanäle und dann wird die ganze Konfiguration am Taster gespeichert:&lt;br /&gt;
&lt;br /&gt;
 set LichtFlur1 peerChan 0 virtueller_Aktor_Btn1 single set&lt;br /&gt;
 set LichtFlur2 peerChan 0 virtueller_Aktor_Btn2 single set&lt;br /&gt;
 set LichtFlurDev getConfig  &lt;br /&gt;
&lt;br /&gt;
und am Taster einmal anlernen drücken, ggf. nochmal ein &amp;lt;code&amp;gt;set LichtFlurDev getConfig&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nun drückt einmal einen Button eures Tasters. Wenn alles geklappt hatte, sollte bei Euren Kanälen im State ein (to virtueller_Aktor_Btn1) dahinter stehen und unter den Attributen etwas in den peerIDs auftauchen. Diesen virtuellen Aktor kann man übrigens als Gegenpart für beliebig viele Taster nehmen, ihr braucht also nicht für jeden Taster einen virtuellen Aktor erstellen. Um den virtuellen Aktor zu erweitern einfach ein &amp;lt;code&amp;gt;set virtueller_Aktor virtual &amp;lt;i&amp;gt;[Gesamtanzahl aller Kanäle]&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt; ausführen, schon habt ihr weitere Kanäle die ihr mit euren echten Tastern peeren könnt.&lt;br /&gt;
&lt;br /&gt;
Am Ende umbedingt einmal &amp;quot;Save config&amp;quot; drücken, damit der virtuelle Aktor in der fhem.cfg abgespeichert wird.&lt;br /&gt;
&lt;br /&gt;
=== Mit Rolladenaktor verbinden (peeren) ===&lt;br /&gt;
&lt;br /&gt;
Der HM-PB-2-WM55 kann auch z.B. direkt mit einem [[HM-LC-BL1-FM_Funk-Jalousieaktor|HM-LC-BL1-FM Rollladenaktor]] [[Peering (HomeMatic)|gepeert]] werden. Hierdurch lässt er sich ohne FHEM nutzen. Weitere Infos dazu finden Sie [[HM-LC-BL1-FM_Funk-Jalousieaktor#Peeren_mit_einem_HM-PB-2-WM55|hier]].&lt;br /&gt;
&lt;br /&gt;
== Integration in bestehende Markenschalterprogramme ==&lt;br /&gt;
&lt;br /&gt;
Obwohl der HM-PB-2-WM55, im Gegensatz zu den Funk-Schaltaktoren für Markenschalter (HM-LC-Sw1PBU-FM, HM-LC-Dim1TPBU-FM und HM-LC-Bl1PBU-FM), eigentlich nicht für die Integration in bestehende Markenschalterprogramme geeignet ist, kann man ihn mit etwas Bastelaufwand doch optisch zumindest etwas integrieren.&lt;br /&gt;
&lt;br /&gt;
=== Jung CD 500 ===&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe einer im 3D Drucker selbst gedruckten Adapterplatte und etwas dremeln lässt sich der HM-PB-2-WM55 recht gut in die Jung CD 500 Serie integrieren. Eine bebilderte Anleitung ist [http://www.instructables.com/id/HomeMatic-Wandschalter-mit-Jung-CD500-Blenden hier] zu finden.&lt;br /&gt;
&lt;br /&gt;
== Probleme ==&lt;br /&gt;
&lt;br /&gt;
=== Bausatz: Der Taster lässt sich nicht anlernen / rotes Dauerblinken ===&lt;br /&gt;
Dann stimmt vermutlich etwas mit der Lötung nicht. Am besten insbesondere die Lötungen des Funkmoduls (8 auf jeder Seite überprüfen).&lt;br /&gt;
Am besten mal in der fhem.cfg &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr LANInterface loglevel 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
eintragen und dann die Logdatei anschauen, was dort für Funkverkehr aufgezeichnet wird. Euren Schalter könnt ihr identifizieren, indem ihr den kleineren QR-code auf der Platine des Schalters z.B. mit einem Android Handy und Barcoo auslest. Die App zeigt Euch dann den sechsstelligen Gerätecode an (wenn der Code siebenstellig erscheint, dann die erste Ziffer / Buchtstaben weglassen), den ihr in der Logdatei suchen könnt.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
*[https://files.elv.com/Assets/Produkte/10/1030/103076/Downloads/103076_HM_PB_2_WM55_UM.pdf]&lt;br /&gt;
*[http://www.instructables.com/id/HomeMatic-Wandschalter-mit-Jung-CD500-Blenden Instructables.com: Integration in Jung CD 500 Schalterprogramm]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Schalter (Sender)]]&lt;/div&gt;</summary>
		<author><name>Mikawood</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=EBUS&amp;diff=17125</id>
		<title>EBUS</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=EBUS&amp;diff=17125"/>
		<updated>2016-11-09T09:36:54Z</updated>

		<summary type="html">&lt;p&gt;Mikawood: /* Platine bestücken */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Randnotiz|RNTyp=r|RNText=Die Verwendung des EBUS zur &#039;&#039;Ansteuerung&#039;&#039; eines Heizungssystems kann dieses bei unsachgemäßer Anwendung beschädigen. Für unmittelbare oder mittelbare Folgen, die sich aus dem Nachbau des Interfaces oder der Verwendung der hier zur Verfügung gestellten Information ergeben, übernimmt der Autor keine Haftung.}}Dieser Artikel beschreibt die Ankopplung von Heizungssysteme mit eBus-Interface an FHEM.&lt;br /&gt;
&lt;br /&gt;
Der eBus ist eine bei vielen Heizungssystemen vorhandene serielle Schnittstelle mit zwei Leitungen. Verwendet werden dabei 2400 Baud als Geschwindigkeit und die beiden Signalpegel&lt;br /&gt;
*logisch 1: 15–24 V&lt;br /&gt;
*logisch 0: 9–12 V&lt;br /&gt;
&lt;br /&gt;
[[Datei:EBUS-Adapter-aufgebaut.png|thumb|left|alt=eBus Platine]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fertig aufgebaute eBus Platine, bereit für den Einsatz mit eBusd!&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Interface=&lt;br /&gt;
==Schaltung==&lt;br /&gt;
[[Datei:EBUS_Interface_Schaltung.png|thumb|left|alt=eBus-USB Interface]]&lt;br /&gt;
Eine direkte Ankopplung des eBus an FHEM via Pegelwandlung und serielle Schnittstelle ist nicht empfehlenswert, stattdessen wurde der Weg beschritten, einen separaten Raspberry Pi (Modell B) an den eBus zu koppeln und darauf die Software &#039;&#039;eBusd&#039;&#039; laufen zu lassen. Diese wird dann in einer beliebigen FHEM-Instanz als ECMD-Device definiert und somit per Telnet abgefragt.&lt;br /&gt;
&lt;br /&gt;
Hierbei wird ein kommerziell für ca. 6,00 € erhältliches USB-Modul mit ein paar Zusatzbauteilen im Wert von ca. 5,00 € versehen. Das Interface hat die folgenden Eigenschaften:&lt;br /&gt;
*Verpolungssicherer eBus-Anschluss&lt;br /&gt;
*Galvanische Trennung zwischen eBus und USB &lt;br /&gt;
Die Bauteile sind unkritisch und können durch äquivalente Teile ersetzt werden. Allerdings sollte bei der Zenerdiode auf eine Belastbarkeit mit 1,3 W geachtet werden, und beim USB-Modul darauf, dass dieses einen FTDI-Chip enthält.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Achtung:&#039;&#039;&#039; Der Autor übernimmt keine Haftung für die Anwendung dieser Schaltung. Zur Vermeidung von Schäden durch unsachgemäße Bedienung des Heizungssystems wird ausdrücklich empfohlen, nur die lesende Hälfte des Interfaces nachzubauen und sich auf ein passives Lauschen auf dem EBUS zu beschränken. Dazu einfach den Zweig mit Darlington-Transistor aus der Schaltung nicht einbauen.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Schaltung des eBus von Prof. Dr. Peter A. Henning ist eine bewährte Schaltung die von zahlreichen Anwendern bereits nachgebaut wurde. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Eigenbau (Lochrasterplatine)==&lt;br /&gt;
[[Datei:EBUS_Adapter_Lochrasterplatine.png|thumb|left|alt=Platine]]&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel eines Aufbaues auf einer Lochrasterplatine.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Platine==&lt;br /&gt;
Auf Basis der oben genannten Schaltung, wurde im [http://forum.fhem.de/index.php/topic,46098.0.html FHEM Forum] ein Platinenlayout erstellt und produziert. Die dazu benötigten Gerberfiles können [http://forum.fhem.de/index.php/topic,45127.msg370647.html#msg370647 hier] heruntergeladen werden. Der Autor des Layouts hat dies mit der Freeware Version von EAGLE erstellt, d.h. die Files können bei allen Platinenherstellern eingereicht werden (keine Lizenz eines bestimmten Herstellers notwendig).&lt;br /&gt;
[[Datei:EBUS_Adapter_Platine.png|thumb|left|alt=Platine]]&lt;br /&gt;
Diese Beschreibung sollte hauptsächlich für Personen dienen, bei denen es nicht das tägliche Brot ist elektronische Schaltungen in Betrieb zu nehmen. Ich setze hier voraus, dass der Umgang mit einem Lötkolben klar ist. Wer noch nie gelötet hat, sollte besser einen Bekannten ersuchen der das schon gemacht hat.&lt;br /&gt;
Nachfolgend wird beschrieben, wie eine Platine mit den Bauteilen bestückt wird.&lt;br /&gt;
Am einfachsten ist es einen fertigen Adapter zu kaufen.&lt;br /&gt;
Siehe dazu auch den [http://forum.fhem.de/index.php/topic,46098.0.html Link aus dem Forum]:&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Platine bestücken===&lt;br /&gt;
[[Datei:EBUS_Adapter_Bestueckung.png|thumb|left|alt=Platine bestücken]]&lt;br /&gt;
Bei der Bestückung sollte darauf geachtet werden mit den niedrigsten Bauteilen zuerst zu beginnen, sonst fallen sie beim verlöten ständig heraus. Wer die Farbcodes der Widerstände nicht auswendig kennt sollte diese vorher mit einem Meßgerät (Ohmmeter) messen. Nach den Dioden und Widerständen können die IC Sockel eingelötet werden, hier sollte lediglich auf die Einkerbung laut Bestückungsaufdruck geachtet werden. Zum Schluß noch die restlichen Bauteile. Nach einer genauen Sichtkontrolle (verbogene Beinchen des IC, Kurzschlüsse beim Löten, richtige Polung) können noch die ICS eingesetzt werden. Diese können auf einer flachen Unterlage etwas vorgebogen werden, damit sie leichter in den Sockel passen.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Achtung&#039;&#039;&#039;: der IC 4011 ist ein Cmos Schaltkreis und ist empfindlich gegen statische Aufladungen, daher die Beinchen nicht mit dem Finger berühren, bzw. ein Antistatikband am Arm verwenden.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Bestückung der Widerstände bei Platine V1.6&lt;br /&gt;
 R1 = 3k3&lt;br /&gt;
 R2 = 1k0&lt;br /&gt;
 R3 = 20k Poti&lt;br /&gt;
 R4 = 10k (auf der Platine nicht beschriftet, links neben R2)&lt;br /&gt;
 R5 = 470&lt;br /&gt;
 R6 = 22k&lt;br /&gt;
 R7 = 100k (auf der Platine nicht beschriftet, links unten liegt quer)&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[https://secure.reichelt.de/index.html?&amp;amp;ACTION=20&amp;amp;AWKID=1161469&amp;amp;PROVID=2084 Warenkorb der benötigten Bauteile von Reichelt]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Platine Messpunkte===&lt;br /&gt;
[[Datei:EBUS_Adapter_Messpunkte.png|thumb|left|alt=Platine messen]]&lt;br /&gt;
Hier abgebildet der Schaltplan mit einigen wichtigen Spannungen für den Testbetrieb am Netzgerät. Bitte beachtet den Widerstand am Eingang des eBus und die Anschaltung der behelfsmäßigen Led zur Abstimmung. Spätestens dann, wenn die Schaltung Fehler zeigt, wird man über so einen Versuchsaufbau nicht herum kommen. Damit kann in Ruhe die Schaltung getestet und gemessen werden. Defekte Bauteile oder fehlerhafte Lötstellen sollten dann schnell gefunden werden.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan zeigt einige wichtigen Spannungen für den Testbetrieb am Netzgerät. &lt;br /&gt;
Bei dem Versuchsaufbau ist insbesondere auf den Einsatz eines korrekten Vorwiderstands, am Eingang des eBus und die Anschaltung der behelfsmäßigen LED (zur Abstimmung), zu beachten (nur zur Abstimmhilfe).&lt;br /&gt;
&lt;br /&gt;
===Poti abgleichen===&lt;br /&gt;
Zur ersten Justierung des Potis, wird der eBusd Dienst genutzt. Das Vorgehen sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
1) &#039;&#039;&#039;eBus Dienst stoppen&#039;&#039;&#039; - Das kann mit der folgenden Kommandozeile bewerkstelligt werden:&lt;br /&gt;
 service ebusd stop&lt;br /&gt;
2) &#039;&#039;&#039;eBus Dienst&#039;&#039;&#039;, jedoch mit minimalen Parametern und ohne eBusd Konfigurationsdateien (CSV-Files), mit der folgenden Kommandozeile erneut starten:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; &amp;lt;DEVICE&amp;gt; Muss zuvor durch den entsprechenden USB-Port (siehe [[#USB Device und Port unter Linux ermitteln|USB Device und Port unter Linux ermitteln]]) z.B. /dev/ttyUSB0 ersetzt werden.&#039;&#039;&lt;br /&gt;
 ebusd -f -c /tmp --logareas bus --loglevel info -d &amp;lt;DEVICE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) Der eBusd Dienst läuft nun im &#039;&#039;&#039;Vordergrund&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
4) &#039;&#039;&#039;Einem zweiten Terminal öffnen&#039;&#039;&#039; und den folgenden Befehl ausführen:&lt;br /&gt;
 ebusctl raw&lt;br /&gt;
&lt;br /&gt;
Mit dem Befehl erhält man im Terminalfenster die empfangenen Bytes als Hex, die wie folgt aussehen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
2015-12-24 12:07:16.955 [bus notice] &amp;lt;aa&lt;br /&gt;
2015-12-24 12:07:17.001 [bus notice] &amp;lt;aa&lt;br /&gt;
2015-12-24 12:07:17.047 [bus notice] &amp;lt;aa&lt;br /&gt;
2015-12-24 12:07:17.093 [bus notice] &amp;lt;aa&lt;br /&gt;
2015-12-24 12:07:17.097 [bus notice] &amp;lt;10&lt;br /&gt;
2015-12-24 12:07:17.102 [bus notice] &amp;lt;50&lt;br /&gt;
2015-12-24 12:07:17.107 [bus notice] &amp;lt;b5&lt;br /&gt;
2015-12-24 12:07:17.111 [bus notice] &amp;lt;04&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Wenn gerade kein Gerät den Bus nutzt, dann sollten ca. 20 Zeilen pro Sekunde ausgegeben werden und zwar mit &amp;quot;&amp;lt;aa&amp;quot; (im Beispiel die oberen 4 Zeilen).&lt;br /&gt;
&lt;br /&gt;
Sobald ein Gerät den eBus nutzt, tauchen neben &amp;quot;&amp;lt;aa&amp;quot; auch andere HEX Werte auf (im Beispiel die unteren 4 Zeilen). Diese Werte können ignoriert werden.&lt;br /&gt;
&lt;br /&gt;
Wichtig bei der Poti Einstellung ist, dass vor allem die regulären &amp;quot;aa&amp;quot;s zu sehen sind. Tauchen die &amp;quot;aa&amp;quot;s auf, dann kann davon ausgegangen werden, dass der Poti korrekt eigestellt ist. Ist dies der Fall, dann kann der eBusd Dienst regulär gestartet werden.&lt;br /&gt;
Dabei muss der im Vordergrund laufende eBusd Prozess (siehe Punkt 2) mit der Tastenkombination STRG+C abgebrochen und der folgende Befehl in der Kommandozeile ausgeführt werden:&lt;br /&gt;
 service ebusd start&lt;br /&gt;
Anschließend erscheint eine Meldung, die einen erfolgreichen Start des Dienstes signalisiert.&lt;br /&gt;
 [ ok ] Starting ebusd: ebusd.&lt;br /&gt;
&lt;br /&gt;
===Bekannte Fehler=== &lt;br /&gt;
Das Logfile ist zur Inbetriebnahme unerlässlich und kann (z.B. mit [[#PSPad|PSPad]]) ausgelesen werden. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
2015-12-22 16:27:34.195 [bus notice] signal acquired&lt;br /&gt;
2015-12-22 16:28:12.029 [bus error] signal lost&lt;br /&gt;
2015-12-22 16:28:12.339 [bus notice] signal acquired&lt;br /&gt;
2015-12-22 16:28:14.006 [bus error] signal lost&lt;br /&gt;
2015-12-22 16:28:16.372 [bus notice] signal acquired&lt;br /&gt;
2015-12-22 16:28:18.023 [bus error] signal lost&lt;br /&gt;
2015-12-22 16:28:18.729 [bus notice] signal acquired&lt;br /&gt;
2015-12-22 16:28:20.458 [update notice] update myCustom Status01: 43.0;41.0;8.000;41.0;38.0;ok&lt;br /&gt;
2015-12-22 16:28:26.460 [update notice] update bc Mode QQ=10: standby&lt;br /&gt;
2015-12-22 16:28:30.436 [update notice] update myCustom Status01: 41.0;40.0;8.000;41.0;38.0;ok&lt;br /&gt;
2015-12-22 16:28:32.458 [update notice] update broadcast vdatetime QQ=10: 16:24:52;22.12.2015&lt;br /&gt;
2015-12-22 16:28:32.696 [update notice] update myCustom2 Pumpenstatus: ok&lt;br /&gt;
2015-12-22 16:28:36.452 [update notice] update bc Mode QQ=10: standby&lt;br /&gt;
2015-12-22 16:28:40.478 [update notice] update myCustom Status01: 40.0;39.0;7.750;41.0;38.0;ok&lt;br /&gt;
2015-12-22 16:28:42.482 [update notice] update myCustom1 Status11: nosignal;41;5;18;-;-;-;-;8.000&lt;br /&gt;
2015-12-22 16:28:42.753 [update notice] update myCustom Status02: auto;60;70.0;70;54.0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ein typisches Log wenn das Poti noch nicht oder &#039;&#039;&#039;falsch kalibriert&#039;&#039;&#039; wurde.&lt;br /&gt;
Ab dem Eintrag 16:28:20.458 war dann die richtige Stellung gefunden. Das Poti soll daher zunächst ganz nach links (Transistor der Platine ist dann rechts unten) gedreht werden und dann vorsichtig auf etwa 2:00 Uhr. Bei knapp 2:00 Uhr ist bei der Testplatine dann die ideale Stellung. Der Stellbereich ist sehr klein (etwa 1-2 mm), daher einen Schraubendreher verwenden der sehr exakt passt und gleichzeitig mit dem Laptop abfragen starten. Zur Kontrolle dann das Log (var/log/ebusd.log) abfragen. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
2015-11-29 06:26:55.271 [update notice] update myCustom1 Status11: nosignal;40;0;15;-;-;-;-;-0.188&lt;br /&gt;
2015-11-29 06:26:55.541 [update notice] update myCustom Status02: auto;60;70.0;70;54.0&lt;br /&gt;
2015-11-29 06:26:59.293 [update notice] update bc Mode QQ=10: standby&lt;br /&gt;
2015-11-29 06:27:03.323 [update notice] update myCustom Status01: 53.0;45.0;-0.438;47.0;46.0;error&lt;br /&gt;
2015-11-29 06:27:05.268 [update notice] update broadcast outsidetemp QQ=10: -3.188&lt;br /&gt;
2015-11-29 06:27:09.344 [update notice] update bc Mode QQ=10: standby&lt;br /&gt;
2015-11-29 06:27:11.934 [bus error] send to 08: ERR: read timeout, retry&lt;br /&gt;
2015-11-29 06:27:11.981 [bus error] send to 08: ERR: read timeout, retry&lt;br /&gt;
2015-11-29 06:27:12.025 [bus error] send to 08: ERR: read timeout, retry&lt;br /&gt;
2015-11-29 06:27:12.069 [bus error] send to 08: ERR: read timeout&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Fall liegt ein Fehler bei jedem Sendeversuch vor. Ein &amp;quot;bus error&amp;quot; mit timeout sollte nicht (zu oft) zu finden sein. Gut zu sehen sind schon die Broadcast Meldungen, die selbständig über den Bus laufen und vom Konverter schon richtig interpretiert werden. Sollten wie in diesem Fall, die Meldungen nicht mit Texten zu lesen sein fehlen noch die Konfigurationfiles (csv) im Verzeichnis /etc/ebusd. Welche Files hier verwendet werden sollen ist natürlich von der Therme und dem Zubehör abhängig.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Achtung&#039;&#039;&#039;: Der Autor übernimmt keine Haftung für die Anwendung dieser Schaltung. Zur Vermeidung von Schäden durch unsachgemäße Bedienung des Heizungssystems wird ausdrücklich empfohlen, nur lesend auf die Schnittstelle zugreifen.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Kommerzielles Interface==&lt;br /&gt;
Ein kommerzielles Interface für die Umsetzung eBus-&amp;gt;USB ist hier erhältlich:&lt;br /&gt;
[https://www.eservice-online.de/produkte/ebus/ eBus Koppler USB]&lt;br /&gt;
&lt;br /&gt;
=Software=&lt;br /&gt;
Als Software kommt auf dem Raspberry Pi der [https://github.com/john30/ebusd ebusd] = eBus-Dämon zum Einsatz (aktuell im Januar 2016 die Version 2.0). &lt;br /&gt;
&lt;br /&gt;
Der ebusd wird auf dem System (z.B Raspberry Pi) nach der beiliegenden Anleitung übersetzt und installiert.&lt;br /&gt;
&lt;br /&gt;
Wichtigsten Bestandteile (Komponenten) der Installation sind:&lt;br /&gt;
*&#039;&#039;ebusd&#039;&#039; - das eigentliche Programm zur Kommunikation mit dem EBUS&lt;br /&gt;
*&#039;&#039;ebusd-configuration - Dateien im CSV(Comma Separated Value)-Format, die beim Start des eBusd eingelesen und als Kommandos (Befehle) für das Heizungsystem verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Nachfolgend wird die Installation der zwei Komponenten beschrieben.&lt;br /&gt;
&lt;br /&gt;
==eBusd Installation per Debian Package==&lt;br /&gt;
&lt;br /&gt;
===Voraussetzungen===&lt;br /&gt;
wget (ist in der Regel auf vielen Distributionen bereits installiert). Die Installation kann mit der folgenden Kommandozeile nachträglich durchgeführt werden: &lt;br /&gt;
 sudo apt-get install wget&lt;br /&gt;
&lt;br /&gt;
===eBusd installieren===&lt;br /&gt;
Das entsprechende eBusd Debian Package kann [https://github.com/john30/ebusd/releases vom GitHub ebusd] bezogen werden.&lt;br /&gt;
&lt;br /&gt;
Die Installation (&#039;&#039;Stand Januar 2016 - Version 2.0&#039;&#039;) wird wie folgt durchgeführt:&lt;br /&gt;
&lt;br /&gt;
 EBUSDPACKAGE=ebusd-2.0_armhf.deb # &amp;lt;--- Version kann bei Bedarf hier angepasst werden.&lt;br /&gt;
 wget https://github.com/john30/ebusd/releases/download/v2.0/$EBUSDPACKAGE&lt;br /&gt;
 sudo dpkg -i --force-overwrite $EBUSDPACKAGE&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Die eBusd wird dauernd aktualisiert. Aus diesem Grund sollte vor der Installation geprüft werden (siehe den o.g. Link), ob bereits eine neuere Version zur Verfügung steht. Der Name des Debian Packages muss, vor der Ausführung der o.g. Kommandozeilen, an der entsprechenden Stelle angepasst werden.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===eBusd Konfigurationsdateien (CSV-Files)===&lt;br /&gt;
Das entsprechende eBusd Konfigurations Debian Package kann [https://github.com/john30/ebusd-configuration/releases vom GitHub ebusd-configuration] bezogen werden.&lt;br /&gt;
&lt;br /&gt;
Die Installation (&#039;&#039;Stand Januar 2016 - Version 2.0.5aa482c&#039;&#039;) wird wie folgt durchgeführt:&lt;br /&gt;
&lt;br /&gt;
 EBUSDCFGPACKAGE=ebusd-configuration-2.0.5aa482c-de_all.deb # &amp;lt;--- Version kann bei Bedarf hier angepasst werden.&lt;br /&gt;
 wget https://github.com/john30/ebusd-configuration/releases/download/v2.0.1/$EBUSDCFGPACKAGE&lt;br /&gt;
 sudo dpkg -i --force-overwrite $EBUSDCFGPACKAGE&lt;br /&gt;
&lt;br /&gt;
===eBusd starten===&lt;br /&gt;
Nach der erfolgreichen Installation des eBusd und der eBusd Konfigurationsdateien kann nun der Dienst gestartet werden.&lt;br /&gt;
Zuvor muss jedoch der USB-Port des eBus Adapters überprüft werden (siehe auch [[#USB Device und Port unter Linux ermitteln|USB Device und Port unter Linux ermitteln]]). Sollte der USB-Port von dem Standardwert &amp;quot;/dev/ttyUSB0&amp;quot; abweichen, dann muss die Konfiguration &amp;quot;/etc/default/ebusd&amp;quot; angepasst werden.&lt;br /&gt;
Andernfalls kann nun der Dienst mit der folgenden Kommandozeile gestartet werden:&lt;br /&gt;
&lt;br /&gt;
 service ebusd start&lt;br /&gt;
Anschließend erscheint eine Meldung:&lt;br /&gt;
 [ ok ] Starting ebusd: ebusd.&lt;br /&gt;
die einen erfolgreichen Start des Dienstes signalisiert.&lt;br /&gt;
&lt;br /&gt;
===eBusd und Konfigurationsdateien deinstallieren===&lt;br /&gt;
Nachfolgend wird die Deinstallation des eBusd und der eBusd Konfigurationsdateien beschrieben.&lt;br /&gt;
&lt;br /&gt;
Zunächst muss der eBusd Dienst beendet werden, dies erfolgt mit der folgenden Kommandozeile:&lt;br /&gt;
 service ebusd stop&lt;br /&gt;
Anschließend erscheint eine Meldung:&lt;br /&gt;
 [ ok ] Stopping ebusd: ebusd.&lt;br /&gt;
die einen erfolgreichen Stop des Dienstes signalisiert.&lt;br /&gt;
&lt;br /&gt;
Anschließend wird zunächst das Debian Konfigurations Package deinstalliert. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Achtung:&#039;&#039;&#039; Bei der Deinstallation werden alle Konfigurationsdateien (CSV-Files) unwiderruflich gelöscht!&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Deinstallation erfolgt mit der folgenden Kommandozeile:&lt;br /&gt;
 sudo dpkg -r --force-overwrite ebusd-configuration&lt;br /&gt;
&lt;br /&gt;
Das eBusd Debian Package wird mit der folgenden Kommandozeile deinstalliert:&lt;br /&gt;
 sudo dpkg -r --force-overwrite ebusd&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tipp:&#039;&#039;&#039; Mit der folgenden Kommandozeile: &lt;br /&gt;
 dpkg -l | grep &#039;ebusd&#039; &lt;br /&gt;
können die installierten eBusd Debian Packages überprüft werden. &lt;br /&gt;
&lt;br /&gt;
Liefert der Befehl kein Ergebnis, dann kann davon ausgegangen werden, dass kein eBusd Debian Package mehr installiert ist.&lt;br /&gt;
&lt;br /&gt;
==eBusd Installation Build Prozess==&lt;br /&gt;
Möchte man eine aktuelle Entwicklungsversion von eBusd nutzen, weil ein Fehler behoben wurde und für diese Version noch kein Debian Package vorhanden ist, dann kann der eBusd manuell kompiliert werden. Nachfolgend werden die dafür notwendigen Schritte beschrieben.&lt;br /&gt;
&lt;br /&gt;
===Voraussetzungen===&lt;br /&gt;
Zunächst müssen die notwendigen Werkzeuge auf dem System installiert werden. Dies erfolgt mit der nachfolgenden Kommandozeile:&lt;br /&gt;
 apt-get -y install git &amp;amp;&amp;amp; apt-get -y install autoconf &amp;amp;&amp;amp; apt-get -y install automake &amp;amp;&amp;amp; apt-get -y install g++ &amp;amp;&amp;amp; apt-get -y install make&lt;br /&gt;
&lt;br /&gt;
Weiterführende Informationen findet man auch direkt im eBusd [https://github.com/john30/ebusd/wiki/1.-Build-and-install Wiki]!&lt;br /&gt;
&lt;br /&gt;
===eBusd kompilieren ===&lt;br /&gt;
&lt;br /&gt;
Nachdem alle Voraussetzungen erfüllt sind, kann der eBusd auf dem lokalen System kompiliert und installiert werden.&lt;br /&gt;
Dafür sind folgende Schritte notwendig:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;eBusd auschecken&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/john30/ebusd.git &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Den Kompilierungsvorgang starten&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 cd ebusd&lt;br /&gt;
 sudo ./autogen.sh --prefix=/usr&lt;br /&gt;
 sudo make&lt;br /&gt;
 sudo make install&lt;br /&gt;
 sudo cp contrib/debian/default/ebusd /etc/default/ebusd # Konfigurationsdatei für eBusd Startoptionen.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dieser Vorgang kann je nach Geschwindigkeit des Systems ca. 20 Minuten dauern. &lt;br /&gt;
&lt;br /&gt;
Wurde der Vorgang erfolgreich durchgeführt, dann kann mit der folgenden Kommandozeile die Version abgefragt werden:&lt;br /&gt;
&lt;br /&gt;
 ebusd -V&lt;br /&gt;
&lt;br /&gt;
===Autostart von eBusd konfigurieren===&lt;br /&gt;
&lt;br /&gt;
Damit die Austostartroutine auch nach einem Neustart des Systems funktioniert, muss das Dämonstartfile in das entsprechende Verzeichnis kopiert werden.&lt;br /&gt;
Die Konfiguration wird mit der folgenden Kommandozeile durchgeführt:  &lt;br /&gt;
&lt;br /&gt;
 sudo cp contrib/debian/init.d/ebusd /etc/init.d/ebusd   # (Dämonstartfile kopieren)&lt;br /&gt;
&lt;br /&gt;
Der eBusd Dienst kann, wie [[#eBusd starten|hier]] beschrieben, gestartet werden.&lt;br /&gt;
&lt;br /&gt;
===eBusd Logrotate===&lt;br /&gt;
Logrotate ist ein logischer Ablauf was mit dem Logfile geschehen soll. Man kann damit das File täglich komprimieren und das 7 Tage lang, dann erst wieder beginnen es zu überschreiben. Dies ist besonders wichtig, denn sonst würde irgendwann das Logilfe bis zu einer extremen Größe anwachsen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/var/log/ebusd.log {&lt;br /&gt;
     rotate 7&lt;br /&gt;
     copytruncate&lt;br /&gt;
     compress&lt;br /&gt;
     missingok&lt;br /&gt;
     notifempty&lt;br /&gt;
     daily&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Logfile kann in &#039;&#039;&#039;/etc/logrotate.d/ebusd&#039;&#039;&#039; konfiguriert werden.&lt;br /&gt;
In diesem Beispiel wird alle 7 Tage rotiert und die Datei komprimiert, das aktuelle Tagesfile ist unkomprimiert und mit einem Editor lesbar.&lt;br /&gt;
Das Ergebnis aus der oben dargestellten Definition sieht wie folgt aus:&lt;br /&gt;
[[Datei:EBUS_Logfile_logrotate.png|thumb|left|alt=Logfile Ansicht]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Systemüberwachung=&lt;br /&gt;
&lt;br /&gt;
Aufgrund unterschiedlicher Ursachen kann es vorkommen, dass der eBus Dämon seinen Dienst einstellt. Die hätte zufolge, dass der Lese- und Schreibzugriff nicht mehr möglich wäre. Nachfolgend werden zwei Möglichkeiten beschreiben wie eine Überwachung des Systems realisiert und im Störungsfall die Funktionalität wiederhergestellt, werden kann.&lt;br /&gt;
&lt;br /&gt;
==Mithilfe von FHEM==&lt;br /&gt;
&lt;br /&gt;
In FHEM kann man ein Notify einrichten, um bei einem Verbindungsabbruch mehrere Versuche zum Reconnect durchzuführen&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
# fhem.cfg&lt;br /&gt;
define EBUS.N notify (EBUS.*DISCONNECTED.*)|(HK.Hz:A.Temp.*err) { EBUSrecover(&amp;quot;notify EBUS.N&amp;quot;,0)}&lt;br /&gt;
attr EBUS.N group deviceDetector&lt;br /&gt;
attr EBUS.N room Alarm&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das dabei aufgerufene Perl-Programm besteht nur aus wenigen Zeilen und muss in die 99_myUtils.pm kopiert/erweitert werden:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
# 99_myUtils.pm&lt;br /&gt;
sub EBUSrecover($$)&lt;br /&gt;
{   &lt;br /&gt;
  my ($evt,$num) = @_;&lt;br /&gt;
  Log 1,&amp;quot;[EBUS] Recover triggered from $evt, attempt No. $num&amp;quot;;&lt;br /&gt;
  if(Value(&amp;quot;EBUS&amp;quot;) ne &amp;quot;opened&amp;quot;){&lt;br /&gt;
    if( $num &amp;lt; 7){&lt;br /&gt;
      $num++;&lt;br /&gt;
      fhem(&amp;quot;set EBUS reopen&amp;quot;);&lt;br /&gt;
      fhem(&amp;quot;delete EBUSrecoverdly&amp;quot;) if($defs{&amp;quot;EBUSrecoverdly&amp;quot;});&lt;br /&gt;
      fhem(&amp;quot;define EBUSrecoverdly at +00:00:05 {EBUSrecover(&#039;EBUSrecover&#039;,$num)}&amp;quot;);&lt;br /&gt;
    }else{&lt;br /&gt;
      fhem(&amp;quot;set Device.warn EBUS&amp;quot;) &lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mithilfe von Watchdog==&lt;br /&gt;
&lt;br /&gt;
Es empfiehlt sich auch, den ebusd kontinuierlich zu überwachen und ggf. neu zu starten. Mit der nachfolgenden Beschreibung wird alle 5 Sekunden die Existenz des Programms abgefragt und dieses bei einem versagenden Test neu gestartet.&lt;br /&gt;
&lt;br /&gt;
Dazu wird auf dem System nach überall erhältlichen Anleitungen der Watchdog Timer installiert und die Datei /etc/watchdog.conf mit den beiden Parametern&lt;br /&gt;
 test-timeout = 10&lt;br /&gt;
 interval     = 5&lt;br /&gt;
besetzt. Ferner wird die Datei /etc/watchdog.d/ebusd angelegt mit dem Inhalt&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# description: watchdog helper file for ebusd  &lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
&#039;test&#039;)&lt;br /&gt;
       #--- Test for ebusd&lt;br /&gt;
       if [ -s /var/run/ebusd.pid ] ; then&lt;br /&gt;
           RUN=`ps -ef | grep ebusd.*USB0 | grep -v grep`&lt;br /&gt;
           if [ &amp;quot;$RUN&amp;quot; != &amp;quot;&amp;quot; ] ; then            &lt;br /&gt;
              #echo &amp;quot;ebusd is already running&amp;quot;&lt;br /&gt;
              exit 0&lt;br /&gt;
           else&lt;br /&gt;
              echo &amp;quot;ebusd defunct at &amp;quot;`date`&lt;br /&gt;
              exit 1    &lt;br /&gt;
           fi&lt;br /&gt;
       else&lt;br /&gt;
           echo &amp;quot;ebusd not running, return 1 at &amp;quot;`date`&lt;br /&gt;
           exit 1    &lt;br /&gt;
       fi&lt;br /&gt;
       ;;&lt;br /&gt;
&#039;repair&#039;)&lt;br /&gt;
       #-- Restarting ebusd&lt;br /&gt;
       echo &amp;quot;ebusd restarting at &amp;quot;`date`&lt;br /&gt;
       /etc/init.d/ebusd start&lt;br /&gt;
       RETVAL=$?&lt;br /&gt;
       exit 0&lt;br /&gt;
       ;;&lt;br /&gt;
*)&lt;br /&gt;
       exit 0&lt;br /&gt;
       ;;&lt;br /&gt;
esac&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Visualisierung und Steuerung=&lt;br /&gt;
&lt;br /&gt;
==Mit ECMD in FHEM==&lt;br /&gt;
Eine einfache aber sichere Anbindung des eBusd an Fhem kann mit ECMD durchgeführt werden. Es ist egal ob eBusd auf dem selben Raspberry wie Fhem läuft oder ein eigener Raspberry dafür verwendet wird. Die gezeigten Beispiele sind nur eine der Möglichkeiten die zum Ziel führen, sollen aber sicher und schnell zu den ersten Erfolgen führen.&lt;br /&gt;
&lt;br /&gt;
===ECMD in FHEM aktivieren===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
# fhem.cfg&lt;br /&gt;
define EBUS ECMD telnet &#039;&#039;&#039;ip-raspi-ebusd&#039;&#039;&#039;:8888   # IP Adresse ebusd einsetzen!!!&lt;br /&gt;
attr EBUS classdefs bai00.class=/opt/fhem/FHEM/bai00.cfg&lt;br /&gt;
attr EBUS icon usb&lt;br /&gt;
attr EBUS requestSeparator 000&lt;br /&gt;
attr EBUS room Vaillant&lt;br /&gt;
&lt;br /&gt;
# Die Definition von ECMD, &amp;quot;ip-raspi-ebusd&amp;quot; muss durch die IP-Adresse ersetzt werden. Beispiel:&lt;br /&gt;
define EBUS ECMD telnet 192.168.0.10:8888&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Die Kommunikation erfolgt über Telnet und  8888 ist das Port über welches kommuniziert werden soll.&lt;br /&gt;
&lt;br /&gt;
===ECMD Devices definieren===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
# fhem.cfg&lt;br /&gt;
define Vorlauf ECMDDevice bai00.class&lt;br /&gt;
attr Vorlauf IODev EBUS&lt;br /&gt;
attr Vorlauf group Vaillant&lt;br /&gt;
attr Vorlauf icon sani_supply_temp&lt;br /&gt;
attr Vorlauf room Vaillant&lt;br /&gt;
&lt;br /&gt;
define Ruecklauf ECMDDevice bai00.class&lt;br /&gt;
attr Ruecklauf IODev EBUS&lt;br /&gt;
attr Ruecklauf group Vaillant&lt;br /&gt;
attr Ruecklauf icon sani_return_temp&lt;br /&gt;
attr Ruecklauf room Vaillant&lt;br /&gt;
&lt;br /&gt;
define PumpeWatt ECMDDevice bai00.class&lt;br /&gt;
attr PumpeWatt IODev EBUS&lt;br /&gt;
attr PumpeWatt group Vaillant&lt;br /&gt;
attr PumpeWatt icon measure_power&lt;br /&gt;
attr PumpeWatt room Vaillant&lt;br /&gt;
&lt;br /&gt;
define Fanspeed ECMDDevice bai00.class&lt;br /&gt;
attr Fanspeed IODev EBUS&lt;br /&gt;
attr Fanspeed group Vaillant&lt;br /&gt;
attr Fanspeed icon vent_ventilation_level_automatic&lt;br /&gt;
attr Fanspeed room Vaillant&lt;br /&gt;
&lt;br /&gt;
define HKurve ECMDDevice bai00.class&lt;br /&gt;
attr HKurve IODev EBUS&lt;br /&gt;
attr HKurve group Vaillant&lt;br /&gt;
attr HKurve icon temp_control&lt;br /&gt;
attr HKurve room Vaillant&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Jeder Messwert der von eBusd abgefragt werden soll, muss dazu ein ECMDDevice erstellt werden. Hier ein paar Beispiele mit Vorlauf, Rücklauf, Leistung der Pumpe, Ventilatorgeschwindigkeit und der Heizkurve.&lt;br /&gt;
&lt;br /&gt;
[[Datei:EBUS_Daten_Heizung.png|thumb|left|alt=EBUS-USB Interface]]&lt;br /&gt;
Zu jedem ECMDDevice muss es eine Classdefinition in der bai00.cfg geben. Der Name &amp;quot;bai00.cfg&amp;quot; ist frei gewählt und wird in diesen Beispielen verwendet.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ECMD Classdefinition===&lt;br /&gt;
&lt;br /&gt;
Um eine Klasse zu definieren muss der dazu benötigte Code in eine eigene Datei (hier bai00.cfg) geschrieben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
################## bai00.cfg ###############&lt;br /&gt;
# &lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
# Aussentemperatur&lt;br /&gt;
get Aussentemp cmd {&amp;quot;r -f outsidetemp temp\n&amp;quot;}&lt;br /&gt;
get Aussentemp expect &amp;quot;.*\n*&amp;quot;&lt;br /&gt;
get Aussentemp postproc { $_ }&lt;br /&gt;
#&lt;br /&gt;
# vorlauftemperatur&lt;br /&gt;
get Vorlauf cmd {&amp;quot;r -m 10 status01 temp1.0\n&amp;quot;}&lt;br /&gt;
get Vorlauf expect &amp;quot;\d+\.\d+\n\n&amp;quot;&lt;br /&gt;
get Vorlauf postproc { sprintf(&amp;quot;%5.1f&amp;quot;,$_) }&lt;br /&gt;
#&lt;br /&gt;
# Ruecklauftemperatur&lt;br /&gt;
get Ruecklauf cmd {&amp;quot;r -m 10 status01 temp1.1\n&amp;quot;}&lt;br /&gt;
get Ruecklauf expect &amp;quot;\d+\.\d+\n\n&amp;quot;&lt;br /&gt;
get Ruecklauf postproc { sprintf(&amp;quot;%5.1f&amp;quot;,$_) }&lt;br /&gt;
#&lt;br /&gt;
# Pumpenleistung&lt;br /&gt;
get PumpeWatt cmd {&amp;quot;r -f PumpPower\n&amp;quot;}&lt;br /&gt;
get PumpeWatt expect &amp;quot;\d+\n\n&amp;quot;&lt;br /&gt;
get PumpeWatt postproc { sprintf(&amp;quot;%5.0f&amp;quot;,$_) }&lt;br /&gt;
#&lt;br /&gt;
# Fanspeed&lt;br /&gt;
get Fanspeed cmd {&amp;quot;r -f SDFanSpeed\n&amp;quot;}&lt;br /&gt;
get Fanspeed expect &amp;quot;\d+\n\n&amp;quot;&lt;br /&gt;
get Fanspeed postproc { sprintf(&amp;quot;%5.0f&amp;quot;,$_) }  &lt;br /&gt;
#&lt;br /&gt;
# Heizkurve lesen&lt;br /&gt;
get HKurve cmd {&amp;quot;r -f Hc1HeatCurve\n&amp;quot;}&lt;br /&gt;
get HKurve expect &amp;quot;\d+\.\d+\n&amp;quot;&lt;br /&gt;
get HKurve postproc { sprintf(&amp;quot;%3.1f&amp;quot;,$_) }&lt;br /&gt;
#&lt;br /&gt;
# HeizkurveSchreiben&lt;br /&gt;
get HeizkurveSchreiben cmd {&amp;quot;write 430 Hc1HeatCurve &amp;quot;.Value(&amp;quot;HeizkurveEinstellen&amp;quot;).&amp;quot;\n&amp;quot;}&lt;br /&gt;
get HeizkurveSchreiben expect &amp;quot;.*\n\n&amp;quot;&lt;br /&gt;
get HeizkurveSchreiben postproc  { $_ } &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für jeden Device wird hier festgelegt wie die Befehls Syntax der Abfrage auszusehen hat (cmd) und wie die Ergebnisse zu filtern sind (expect), wie soll das Ausgabeformat sein (postproc). Diese Definitionen bitte in einer neuen Datei &amp;quot;bai00.cfg&amp;quot; speichern.&lt;br /&gt;
&lt;br /&gt;
===ECMD Zyklische Abfrage===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
# Abfrage Timersteuerung, fhem.cfg&lt;br /&gt;
define EBUS.Timer at +*00:15:00 get Aussentemp Aussentemp;;get Vorlauf Vorlauf;;get Ruecklauf Ruecklauf;;get PumpeWatt PumpeWatt;get Fanspeed Fanspeed;;get PumpeWatt PumpeWatt;;get HKurve HKurve&lt;br /&gt;
attr EBUS.Timer group VaillantControl&lt;br /&gt;
attr EBUS.Timer icon time_timer&lt;br /&gt;
attr EBUS.Timer room Vaillant&lt;br /&gt;
attr EBUS.Timer verbose 0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die Daten auch zyklisch vom eBus abholen zu können, wird ein Timer gesetzt. Hier wird alle 15 Minuten abgefragt.&lt;br /&gt;
Tipp: unwichtige Daten wie Druck oder irgendwelche Zähler definiert man in einem zweiten Timer, welcher dann zB. auf 1 Stunde getriggert wird. So wird die Häufigkeit des Zugriffs auf den eBus entlastet.&lt;br /&gt;
&lt;br /&gt;
===ECMD Solar, Warmwasser und Heizkreis===&lt;br /&gt;
&lt;br /&gt;
====ECMD Beispiel Solar====&lt;br /&gt;
Im nachfolgenden Beispiel wird der EBUS über das Modul ECMD angebunden und mit drei Klassen von Kommandos versehen. IP Adresse ist jene des Device wo der eBusd läuft. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
define EBUS ECMD telnet 192.168.0.192:8888&lt;br /&gt;
attr EBUS classdefs HK.SOL.class=/opt/fhem/FHEM/ebus_solar.cfg:HK.WW.class=/opt/fhem/FHEM/ebus_ww.cfg:HK.Hz.class=/opt/fhem/FHEM/ebus_hz.cfg&lt;br /&gt;
attr EBUS room System&lt;br /&gt;
#--&lt;br /&gt;
define HK.Hz ECMDDevice HK.Hz.class&lt;br /&gt;
attr HK.Hz IODev EBUS&lt;br /&gt;
attr HK.Hz group heating&lt;br /&gt;
attr HK.Hz room Verbrauch&lt;br /&gt;
#--&lt;br /&gt;
define HK.WW ECMDDevice HK.WW.class&lt;br /&gt;
attr HK.WW IODev EBUS&lt;br /&gt;
attr HK.WW group heating&lt;br /&gt;
attr HK.WW room Verbrauch&lt;br /&gt;
#--&lt;br /&gt;
define HK.SOL ECMDDevice HK.SOL.class&lt;br /&gt;
attr HK.SOL IODev EBUS&lt;br /&gt;
attr HK.SOL group solarGenerator&lt;br /&gt;
attr HK.SOL room Solaranlage&lt;br /&gt;
#--&lt;br /&gt;
# Diese drei Klassen werden als separate Files mit den in der EBUS-Definition stehenden Dateinamen &#039;&#039;ebus_hz.cfg&#039;&#039;, &#039;&#039;ebus_ww.cfg&#039;&#039; sowie &#039;&#039;ebus_solar.cfg&#039;&#039; angelegt. Alle drei ECMD-Devices werden nun zyklisch (z.B. jede Minute) abgefragt mit&lt;br /&gt;
define EBUS.Timer at +*00:01:00 get HK.Hz A.Temp;;get HK.Hz state;;get HK.WW state;;get HK.SOL state&lt;br /&gt;
attr EBUS.Timer group heatingControl&lt;br /&gt;
attr EBUS.Timer room Verbrauch&lt;br /&gt;
attr EBUS.Timer verbose 0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====ECMD Classdefinition Heizkreis====&lt;br /&gt;
Die erste Datei definiert die FHEM-Readings für die Abfrage von Außentemperatur und Heizkreis:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
# Außentemperatur&lt;br /&gt;
get A.Temp cmd {&amp;quot;cyc broad temp\n&amp;quot;}&lt;br /&gt;
get A.Temp expect &amp;quot;.*&amp;quot;&lt;br /&gt;
get A.Temp postproc { my $rval;\&lt;br /&gt;
 if(($_ eq &amp;quot;&amp;quot;)||($_ eq &amp;quot;no data stored&amp;quot;) ){\&lt;br /&gt;
   $rval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
 }else{\&lt;br /&gt;
   $rval=sprintf(&amp;quot;%5.2f °C&amp;quot;,$_);\&lt;br /&gt;
 }\&lt;br /&gt;
$rval; }&lt;br /&gt;
# Heizkeis HK1&lt;br /&gt;
get state cmd {&amp;quot;cyc mv HK1_temp\n&amp;quot;}&lt;br /&gt;
get state expect &amp;quot;.*&amp;quot;&lt;br /&gt;
get state postproc { my ($bval,$rval,$tval,$pval,$qval,$sval,$xval,$zval);\&lt;br /&gt;
my $hash  = $defs{&amp;quot;%NAME&amp;quot;};\&lt;br /&gt;
 if( ($_ eq &amp;quot;&amp;quot;)||($_ eq &amp;quot;no data stored&amp;quot;) ){\&lt;br /&gt;
    $bval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
    $rval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
    $tval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
    $pval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
    $qval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
    $sval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
    $xval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
    $zval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
 }else{\&lt;br /&gt;
    my @values=split(&#039; &#039;,$_);\&lt;br /&gt;
    if( $values[0] &amp;lt; 15 ){\&lt;br /&gt;
       $bval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
       $rval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
       $tval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
       $pval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
       $qval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
       $sval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
       $xval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
       $zval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
    } else { \&lt;br /&gt;
       $bval = HzBedarf();\&lt;br /&gt;
       $rval = sprintf(&amp;quot;%5.2f °C&amp;quot;,$values[0]);\&lt;br /&gt;
       $tval = sprintf(&amp;quot;%5.2f °C&amp;quot;,$values[1]);\&lt;br /&gt;
       if( $values[2] == 0 ){\&lt;br /&gt;
          $pval = &amp;quot;OFF&amp;quot;;\&lt;br /&gt;
          $qval = &amp;quot;0 0&amp;quot;;\&lt;br /&gt;
       }elsif( $values[2] == 1 ){\&lt;br /&gt;
          $pval = &amp;quot;ON (HK)&amp;quot;;\&lt;br /&gt;
          $qval = &amp;quot;80 0&amp;quot;;\&lt;br /&gt;
       }elsif( $values[2] == 2 ){\&lt;br /&gt;
          $pval = &amp;quot;ON (WW)&amp;quot;;\&lt;br /&gt;
          $qval = &amp;quot;0 80&amp;quot;;\&lt;br /&gt;
       }else{\&lt;br /&gt;
          $pval = &amp;quot;unknown&amp;quot;;\&lt;br /&gt;
          $qval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
       }\&lt;br /&gt;
       $sval = sprintf(&amp;quot;%d&amp;quot;,$values[2]);\&lt;br /&gt;
       $xval = sprintf(&amp;quot;%5.2f %5.2f %s %5.2f&amp;quot;,\&lt;br /&gt;
         $values[0],$values[1],$qval,$bval);\&lt;br /&gt;
       $zval = sprintf(&amp;quot;VL.T %5.2f °C, RL.T %5.2f °C, %s&amp;quot;,\&lt;br /&gt;
         $values[0],$values[1],$pval);\&lt;br /&gt;
    }\&lt;br /&gt;
  }\&lt;br /&gt;
readingsSingleUpdate($hash, &amp;quot;VL.T&amp;quot;, $rval, 1);\&lt;br /&gt;
readingsSingleUpdate($hash, &amp;quot;RL.T&amp;quot;, $tval, 1);\&lt;br /&gt;
readingsSingleUpdate($hash, &amp;quot;Pumpe&amp;quot;, $pval, 1); \&lt;br /&gt;
readingsSingleUpdate($hash, &amp;quot;Pumpe.P&amp;quot;, $qval, 1); \&lt;br /&gt;
readingsSingleUpdate($hash, &amp;quot;Bedarf&amp;quot;, $bval, 1); \&lt;br /&gt;
readingsSingleUpdate($hash, &amp;quot;Status&amp;quot;, $sval, 1);\&lt;br /&gt;
readingsSingleUpdate($hash, &amp;quot;reading&amp;quot;, $xval, 1);\&lt;br /&gt;
$zval; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====ECMD Classdefinition Warmwasserkreis====&lt;br /&gt;
Die zweite Datei definiert die FHEM-Readings für den Warmwasserkreis:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
# Warmwasserkreis&lt;br /&gt;
get state cmd {&amp;quot;cyc broad getstatus_WW\n&amp;quot;}&lt;br /&gt;
get state expect &amp;quot;.*&amp;quot;&lt;br /&gt;
get state postproc { my ($rval,$tval,$bval,$pval,$xval,$zval);\&lt;br /&gt;
my $hash  = $defs{&amp;quot;%NAME&amp;quot;};\&lt;br /&gt;
 if( ($_ eq &amp;quot;&amp;quot;)||($_ eq &amp;quot;no data stored&amp;quot;) ){\&lt;br /&gt;
    $rval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
    $tval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
    $bval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
    $pval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
    $xval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
    $zval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
 }else{\&lt;br /&gt;
    my @values=split(&#039; &#039;,$_);\&lt;br /&gt;
    if( $values[1] &amp;lt; 15 ){\&lt;br /&gt;
       $rval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
       $tval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
       $bval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
       $pval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
       $xval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
       $zval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
    }else {\&lt;br /&gt;
       $rval = sprintf(&amp;quot;%5.2f °C&amp;quot;,$values[0]);\&lt;br /&gt;
       $tval = sprintf(&amp;quot;%5.2f °C&amp;quot;,$values[1]);\&lt;br /&gt;
       $bval = ($values[2] == 80) ? &amp;quot;ON (WW)&amp;quot; : &amp;quot;OFF&amp;quot;;\&lt;br /&gt;
       $pval = ($values[3] == 1) ? &amp;quot;ON&amp;quot; : &amp;quot;OFF&amp;quot;;\&lt;br /&gt;
       $xval = sprintf(&amp;quot;%5.2f %5.2f %5.2f %d %d&amp;quot;,\&lt;br /&gt;
        $values[0],0.0,$values[1],$values[2],$values[3]);\&lt;br /&gt;
       $zval = sprintf(&amp;quot;SF1.T %5.2f °C, %s&amp;quot;,\&lt;br /&gt;
        $values[0],$pval);\&lt;br /&gt;
    }\&lt;br /&gt;
  }\&lt;br /&gt;
$zval; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====ECMD Classdefinition Solarkreis====&lt;br /&gt;
Die dritte Datei definiert die FHEM-Readings für den Solarkreis:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
# Solarkreis&lt;br /&gt;
get state cmd {&amp;quot;cyc broad getstatus_SOL\n&amp;quot;}&lt;br /&gt;
get state expect &amp;quot;.*&amp;quot;&lt;br /&gt;
get state postproc { my ($rval,$pval,$qval,$lval,$yval,$xval,$zval);\&lt;br /&gt;
my $hash  = $defs{&amp;quot;%NAME&amp;quot;};\&lt;br /&gt;
 if( ($_ eq &amp;quot;&amp;quot;)||($_ eq &amp;quot;no data stored&amp;quot;) ){\&lt;br /&gt;
    $rval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
    $pval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
    $qval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
    $lval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
    $yval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
    $xval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
    $zval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
 }else{\&lt;br /&gt;
    my @values=split(&#039; &#039;,$_);\&lt;br /&gt;
    $rval = sprintf(&amp;quot;%5.2f °C&amp;quot;,$values[0]);\&lt;br /&gt;
    $pval = ($values[1] == 1)?&amp;quot;ON&amp;quot;:&amp;quot;OFF&amp;quot;;\&lt;br /&gt;
    $qval = ($values[1] == 1)?65:0;\&lt;br /&gt;
    $lval = sprintf(&amp;quot;%5.2f %%&amp;quot;,$values[2]);\&lt;br /&gt;
    $yval = sprintf(&amp;quot;%d&amp;quot;,$values[3]);\&lt;br /&gt;
    $xval = sprintf(&amp;quot;%5.2f %d %5.2f %d&amp;quot;,\&lt;br /&gt;
      $values[0],$qval,$values[2],$values[3]);\&lt;br /&gt;
    $zval = sprintf(&amp;quot;Coll.T %5.2f °C, %s&amp;quot;,\&lt;br /&gt;
      $values[0],$pval);\&lt;br /&gt;
 }\&lt;br /&gt;
readingsSingleUpdate($hash, &amp;quot;Coll.T&amp;quot;, $rval, 1);\&lt;br /&gt;
readingsSingleUpdate($hash, &amp;quot;Pumpe&amp;quot;, $pval, 1);\&lt;br /&gt;
readingsSingleUpdate($hash, &amp;quot;Pumpe.P&amp;quot;, $qval.&amp;quot; W&amp;quot;, 1);\&lt;br /&gt;
readingsSingleUpdate($hash, &amp;quot;Load&amp;quot;,  $lval, 1);\&lt;br /&gt;
readingsSingleUpdate($hash, &amp;quot;Yield&amp;quot;, $yval, 1);\&lt;br /&gt;
readingsSingleUpdate($hash, &amp;quot;reading&amp;quot;, $xval, 1);\&lt;br /&gt;
$zval; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ECMD Classdefinition Heizkurve===&lt;br /&gt;
&lt;br /&gt;
Diese Klassendefinition muss in der bai00.cfg gespeichert (angehängt) werden.&lt;br /&gt;
in diesem Beispiel wurde sie für die Vaillant Calormatic 430 definiert, bei einer Calormatic 470 muss der Text entsprechend geändert werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
# HeizkurveSchreiben Calormatic 430, bai00.cfg&lt;br /&gt;
get HeizkurveSchreiben cmd {&amp;quot;write -c 430 Hc1HeatCurve &amp;quot;.Value(&amp;quot;HeizkurveEinstellen&amp;quot;).&amp;quot;\n&amp;quot;}&lt;br /&gt;
get HeizkurveSchreiben expect &amp;quot;.*\n\n&amp;quot;&lt;br /&gt;
get HeizkurveSchreiben postproc  { $_ }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Heizkurve schreiben===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
#fhem.cfg&lt;br /&gt;
define HeizkurveEinstellen dummy&lt;br /&gt;
attr HeizkurveEinstellen group Heizkurve_Einstellen&lt;br /&gt;
attr HeizkurveEinstellen icon temp_control&lt;br /&gt;
attr HeizkurveEinstellen room Vaillant,Heizung&lt;br /&gt;
attr HeizkurveEinstellen setList state:0.20,0.40,0.50,0.60,0.70,0.80,0.90,1.00,1.10,1.20,1.30,1.40,1.50,1.60,1.70&lt;br /&gt;
attr HeizkurveEinstellen webCmd state&lt;br /&gt;
&lt;br /&gt;
define HeizkurveSchreiben_Click notify HeizkurveEinstellen {\&lt;br /&gt;
 fhem(&amp;quot;get HeizkurveSchreiben HeizkurveSchreiben&amp;quot;);;\&lt;br /&gt;
}&lt;br /&gt;
attr HeizkurveSchreiben_Click group heatingControl&lt;br /&gt;
attr HeizkurveSchreiben_Click room Vaillant&lt;br /&gt;
&lt;br /&gt;
define HeizkurveSchreiben ECMDDevice bai00.class&lt;br /&gt;
attr HeizkurveSchreiben IODev EBUS&lt;br /&gt;
attr HeizkurveSchreiben group Heizkurve_Einstellen&lt;br /&gt;
attr HeizkurveSchreiben room Vaillant&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein kleines Demo wie man via ECMD und eBus die Daten zurück in die Register der Therme (Calormatic) schreiben kann. Hier wird die Heizkurve verstellt.&lt;br /&gt;
Ein Dummy wird definiert und über eine setList werden die verschiedenen Kurven vorgegeben. Dank setList kann es zu keinen unerlaubten Eingaben kommen. Über den notify wird die Heizkurve dann schließlich gesetzt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:EBUS_Heizkurve_Einstellen.png|thumb|left|alt=EBUS-USB Interface]]&lt;br /&gt;
Vorsicht: überlegt euch bitte gut was ihr zurück schreiben wollt, es kann unter Umständen gefährlich für eure Hardware oder Gesundheit werden (zB: Warmwasser auf über 60 Grad). Alles was hier durchgeführt wird, führt ihr auf eigene Verantwortung durch.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Wochenprogramme===&lt;br /&gt;
Ein gerne benutztes Feature ist die Änderung der Zeitprogramme des Heizgerätes in FHEM. Die Visualisierung  ist etwas komplexer weil alles x 7 ist und hier Steuerzeichen beim Zusammensetzen des Sendestrings vorkommen die nicht direkt übergeben werden können. Einzelne Timer können damit nicht geschrieben werden, daher wird bei jeder Timereingabe der komplette String geschrieben. Der Einfachheit halber und wegen der Übersicht sind nur 2 Tagesprogramme (Timer) im Beispielcode vorgesehen (die Calormatic kann 3).&lt;br /&gt;
[[Datei:EBUS_Timerprogramme.png|thumb|left|alt=Wochentimer]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#####################&lt;br /&gt;
#  Timer-Programme  #&lt;br /&gt;
#####################&lt;br /&gt;
get Mo cmd {&amp;quot;r -f hc1Timer.Monday\n&amp;quot;}&lt;br /&gt;
get Mo expect &amp;quot;.*\n\n&amp;quot;&lt;br /&gt;
get Mo postproc { Vaillant_Timer($_); }&lt;br /&gt;
get Di cmd {&amp;quot;r -f hc1Timer.Tuesday\n&amp;quot;}&lt;br /&gt;
get Di expect &amp;quot;.*\n\n&amp;quot;&lt;br /&gt;
get Di postproc { Vaillant_Timer($_); }&lt;br /&gt;
get Mi cmd {&amp;quot;r -f hc1Timer.Wednesday\n&amp;quot;}&lt;br /&gt;
get Mi expect &amp;quot;.*\n\n&amp;quot;&lt;br /&gt;
get Mi postproc { Vaillant_Timer($_); }&lt;br /&gt;
get Do cmd {&amp;quot;r -f hc1Timer.Thursday\n&amp;quot;}&lt;br /&gt;
get Do expect &amp;quot;.*\n\n&amp;quot;&lt;br /&gt;
get Do postproc { Vaillant_Timer($_); }&lt;br /&gt;
get Fr cmd {&amp;quot;r -f hc1Timer.Friday\n&amp;quot;}&lt;br /&gt;
get Fr expect &amp;quot;.*\n\n&amp;quot;&lt;br /&gt;
get Fr postproc { Vaillant_Timer($_); }&lt;br /&gt;
get Sa cmd {&amp;quot;r -f hc1Timer.Saturday\n&amp;quot;}&lt;br /&gt;
get Sa expect &amp;quot;.*\n\n&amp;quot;&lt;br /&gt;
get Sa postproc { Vaillant_Timer($_); }&lt;br /&gt;
get So cmd {&amp;quot;r -f hc1Timer.Sunday\n&amp;quot;}&lt;br /&gt;
get So expect &amp;quot;.*\n\n&amp;quot;&lt;br /&gt;
get So postproc { Vaillant_Timer($_); }&lt;br /&gt;
get ZeitfensterSchreibenMo cmd {&amp;quot;write -c 430 hc1Timer.Monday &amp;quot;.ReadingsVal(&amp;quot;TimeMo&amp;quot;,&amp;quot;HHMM1&amp;quot;,0) . chr(59) . ReadingsVal(&amp;quot;TimeMo&amp;quot;,&amp;quot;HHMM2&amp;quot;,0) . chr(59) . ReadingsVal(&amp;quot;TimeMo&amp;quot;,&amp;quot;HHMM3&amp;quot;,0) . chr(59) . ReadingsVal(&amp;quot;TimeMo&amp;quot;,&amp;quot;HHMM4&amp;quot;,0) . chr(59) . &amp;quot;24:00&amp;quot; . chr(59) . &amp;quot;24:00&amp;quot; . chr(59) . &amp;quot;selected\n&amp;quot;}&lt;br /&gt;
get ZeitfensterSchreibenMo expect &amp;quot;.*\n\n&amp;quot;&lt;br /&gt;
get ZeitfensterSchreibenMo postproc  { $_ }&lt;br /&gt;
get ZeitfensterSchreibenDi cmd {&amp;quot;write -c 430 hc1Timer.Tuesday &amp;quot;.ReadingsVal(&amp;quot;TimeDi&amp;quot;,&amp;quot;HHMM1&amp;quot;,0) . chr(59) . ReadingsVal(&amp;quot;TimeDi&amp;quot;,&amp;quot;HHMM2&amp;quot;,0) . chr(59) . ReadingsVal(&amp;quot;TimeDi&amp;quot;,&amp;quot;HHMM3&amp;quot;,0) . chr(59) . ReadingsVal(&amp;quot;TimeDi&amp;quot;,&amp;quot;HHMM4&amp;quot;,0) . chr(59) . &amp;quot;24:00&amp;quot; . chr(59) . &amp;quot;24:00&amp;quot; . chr(59) . &amp;quot;selected\n&amp;quot;}&lt;br /&gt;
get ZeitfensterSchreibenDi expect &amp;quot;.*\n\n&amp;quot;&lt;br /&gt;
get ZeitfensterSchreibenDi postproc  { $_ }&lt;br /&gt;
get ZeitfensterSchreibenMi cmd {&amp;quot;write -c 430 hc1Timer.Wednesday &amp;quot;.ReadingsVal(&amp;quot;TimeMi&amp;quot;,&amp;quot;HHMM1&amp;quot;,0) . chr(59) . ReadingsVal(&amp;quot;TimeMi&amp;quot;,&amp;quot;HHMM2&amp;quot;,0) . chr(59) . ReadingsVal(&amp;quot;TimeMi&amp;quot;,&amp;quot;HHMM3&amp;quot;,0) . chr(59) . ReadingsVal(&amp;quot;TimeMi&amp;quot;,&amp;quot;HHMM4&amp;quot;,0) . chr(59) . &amp;quot;24:00&amp;quot; . chr(59) . &amp;quot;24:00&amp;quot; . chr(59) . &amp;quot;selected\n&amp;quot;}&lt;br /&gt;
get ZeitfensterSchreibenMi expect &amp;quot;.*\n\n&amp;quot;&lt;br /&gt;
get ZeitfensterSchreibenMi postproc  { $_ }&lt;br /&gt;
get ZeitfensterSchreibenDo cmd {&amp;quot;write -c 430 hc1Timer.Thursday &amp;quot;.ReadingsVal(&amp;quot;TimeDo&amp;quot;,&amp;quot;HHMM1&amp;quot;,0) . chr(59) . ReadingsVal(&amp;quot;TimeDo&amp;quot;,&amp;quot;HHMM2&amp;quot;,0) . chr(59) . ReadingsVal(&amp;quot;TimeDo&amp;quot;,&amp;quot;HHMM3&amp;quot;,0) . chr(59) . ReadingsVal(&amp;quot;TimeDo&amp;quot;,&amp;quot;HHMM4&amp;quot;,0) . chr(59) . &amp;quot;24:00&amp;quot; . chr(59) . &amp;quot;24:00&amp;quot; . chr(59) . &amp;quot;selected\n&amp;quot;}&lt;br /&gt;
get ZeitfensterSchreibenDo expect &amp;quot;.*\n\n&amp;quot;&lt;br /&gt;
get ZeitfensterSchreibenDo postproc  { $_ }&lt;br /&gt;
get ZeitfensterSchreibenFr cmd {&amp;quot;write -c 430 hc1Timer.Friday &amp;quot;.ReadingsVal(&amp;quot;TimeFr&amp;quot;,&amp;quot;HHMM1&amp;quot;,0) . chr(59) . ReadingsVal(&amp;quot;TimeFr&amp;quot;,&amp;quot;HHMM2&amp;quot;,0) . chr(59) . ReadingsVal(&amp;quot;TimeFr&amp;quot;,&amp;quot;HHMM3&amp;quot;,0) . chr(59) . ReadingsVal(&amp;quot;TimeFr&amp;quot;,&amp;quot;HHMM4&amp;quot;,0) . chr(59) . &amp;quot;24:00&amp;quot; . chr(59) . &amp;quot;24:00&amp;quot; . chr(59) . &amp;quot;selected\n&amp;quot;}&lt;br /&gt;
get ZeitfensterSchreibenFr expect &amp;quot;.*\n\n&amp;quot;&lt;br /&gt;
get ZeitfensterSchreibenFr postproc  { $_ }&lt;br /&gt;
get ZeitfensterSchreibenSa cmd {&amp;quot;write -c 430 hc1Timer.Saturday &amp;quot;.ReadingsVal(&amp;quot;TimeSa&amp;quot;,&amp;quot;HHMM1&amp;quot;,0) . chr(59) . ReadingsVal(&amp;quot;TimeSa&amp;quot;,&amp;quot;HHMM2&amp;quot;,0) . chr(59) . ReadingsVal(&amp;quot;TimeSa&amp;quot;,&amp;quot;HHMM3&amp;quot;,0) . chr(59) . ReadingsVal(&amp;quot;TimeSa&amp;quot;,&amp;quot;HHMM4&amp;quot;,0) . chr(59) . &amp;quot;24:00&amp;quot; . chr(59) . &amp;quot;24:00&amp;quot; . chr(59) . &amp;quot;selected\n&amp;quot;}&lt;br /&gt;
get ZeitfensterSchreibenSa expect &amp;quot;.*\n\n&amp;quot;&lt;br /&gt;
get ZeitfensterSchreibenSa postproc  { $_ }&lt;br /&gt;
get ZeitfensterSchreibenSo cmd {&amp;quot;write -c 430 hc1Timer.Sunday &amp;quot;.ReadingsVal(&amp;quot;TimeSo&amp;quot;,&amp;quot;HHMM1&amp;quot;,0) . chr(59) . ReadingsVal(&amp;quot;TimeSo&amp;quot;,&amp;quot;HHMM2&amp;quot;,0) . chr(59) . ReadingsVal(&amp;quot;TimeSo&amp;quot;,&amp;quot;HHMM3&amp;quot;,0) . chr(59) . ReadingsVal(&amp;quot;TimeSo&amp;quot;,&amp;quot;HHMM4&amp;quot;,0) . chr(59) . &amp;quot;24:00&amp;quot; . chr(59) . &amp;quot;24:00&amp;quot; . chr(59) . &amp;quot;selected\n&amp;quot;}&lt;br /&gt;
get ZeitfensterSchreibenSo expect &amp;quot;.*\n\n&amp;quot;&lt;br /&gt;
get ZeitfensterSchreibenSo postproc  { $_ }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dieses Beispiel ist für eine Vaillant Calormatic 430, bei einer Calormatic 470 müssen die entsprechenden Zeilen angepasst werden (write -c 430....) .&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#########################################################&lt;br /&gt;
#&lt;br /&gt;
#                      Vaillant_Timer&lt;br /&gt;
# Datenstring = 03:30;19:30;20:00;20:00;20:00;20:00;Mo-Fr&lt;br /&gt;
#########################################################&lt;br /&gt;
# 99_myUtils.pm&lt;br /&gt;
sub Vaillant_Timer($)&lt;br /&gt;
{&lt;br /&gt;
 my @values=split(/[; ]/,$_);&lt;br /&gt;
 #-- suppress leading zero ?&lt;br /&gt;
 for(my $i=0;$i&amp;lt;7;$i++){ &lt;br /&gt;
   $values[$i]=~s/^0//;&lt;br /&gt;
 }&lt;br /&gt;
 my $sval=sprintf(&amp;quot;%s-%s&amp;quot;,$values[0],$values[1]);&lt;br /&gt;
 $sval  .=sprintf(&amp;quot;, %s-%s&amp;quot;,$values[2],$values[3])&lt;br /&gt;
   if($values[2] ne $values[3]);&lt;br /&gt;
 $sval  .=sprintf(&amp;quot;, %s-%s&amp;quot;,$values[4],$values[5])&lt;br /&gt;
   if($values[4] ne $values[5]);&lt;br /&gt;
 return $sval;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oben gezeigtes Beispiel benötigt den Vaillant_Timer (von Prof. Peter Henning). Dieser Code muss in die 99_myUtils.pm gespeichert werden. Unter diesem [http://forum.fhem.de/index.php/topic,41064.msg336911.html#msg336911 Link] gibt es weiterreichende Informationen zu diesem Thema.&lt;br /&gt;
&lt;br /&gt;
==GAEBUS==&lt;br /&gt;
&lt;br /&gt;
GAEBUS ist ein Perl Modul welches es in FHEM ermöglicht sämtliche Daten des eBus bequem zu konfigurieren.&lt;br /&gt;
Das Protokoll ist ebenso wie bei ECMD Telnet, aber die Einrichtung unterscheidet sich sehr stark und wird von den meisten Anwendern einfacher empfunden. Allerdings ist im derzeitigen Entwicklungsstand der GAEBUS noch nicht so flexibel wie ECMD. Das betrifft vor allem die Datenfilterung und Datenformatierung.&lt;br /&gt;
&lt;br /&gt;
Eine genaue Installations- und Einrichtungsanleitung kann aus diesem [http://forum.fhem.de/index.php/topic,46098.msg381580.html#msg381580 Forums-Thread] entnommen werden.&lt;br /&gt;
&lt;br /&gt;
Den Diskussionsthread des Autors findet man [http://forum.fhem.de/index.php/topic,41064.msg332654.html#msg332654 hier].&lt;br /&gt;
&lt;br /&gt;
==FHEM Tablet UI (FTUI)==&lt;br /&gt;
&lt;br /&gt;
Die [http://forum.fhem.de/index.php/board,71.0.html Tablet-UI] ist ein ansprechendes HTML Frontend welches durch intensive Betreuung des Autors sehr gepflegt wird. Mit sogenannten Widgets kann hier auch für ungeübte schnell ein optisch ansprechendes Ergebnis erzielt werden. Die Tablet-UI stellt mit ihren Widgets direkt die Verbindung zu den Readings in Fhem her. Alle Messwerte die hier dargestellt werden sollen, müssen daher vorher in Fhem bereits definiert werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:EBUSD_FTUI.png|thumb|left|alt=eBus Platine]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der komplette Demo-Code der abgebildeten Seite kann hier downgeloadet werden: [http://forum.fhem.de/index.php/topic,46098.msg383071.html#msg383071 Tablet-UI]&lt;br /&gt;
&lt;br /&gt;
=Tipps &amp;amp; Tricks=&lt;br /&gt;
&lt;br /&gt;
==eBusd Bedeutung der Telegramme==&lt;br /&gt;
&lt;br /&gt;
Der ebusd wird entweder über &#039;&#039;ebusctl&#039;&#039; oder über &#039;&#039;telnet&#039;&#039; durch Klartextkommandos abgefragt, die lauten z.B. &#039;&#039;read -c broadcast outsidetemp&#039;&#039;.&lt;br /&gt;
*In CSV-Dateien in /etc/ebusd wird festgelegt, in welche bzw. aus welcher binären Folge ein Kommando übersetzt wird. Konkret handelt es sich z.B. bei &#039;&#039;read -c broadcast outsidetemp&#039;&#039; um die Außentemperatur, die im Heizungssystem zyklisch als Broadcast gesendet wird und vom ebusd einfach mitgelesen wird.&lt;br /&gt;
*Für unterschiedliche Heizungssysteme werden unterschiedliche CSV-Dateien benötigt. &lt;br /&gt;
Für die Übersetzung der binären Daten in den Klartext ist es notwendig die entsprechenden Konfigurationsdateien(CSV-Files) zu installieren.&lt;br /&gt;
Den aktuellen Stand dieser Dateien findet ihr im [https://github.com/john30/ebusd-configuration/releases GIT von John].&lt;br /&gt;
&lt;br /&gt;
Desweiteren kann der eBusd gestartet werden, und zwar mit den Optionen -f (läuft im Vordergrund) und --loglevel debug (alles wird geloggt). Diese Optionen produzieren Unmengen an Daten und damit werden auch alle empfangenen Telegramme protokolliert, z.B.  &lt;br /&gt;
 10feb5160301f00d44&lt;br /&gt;
Hierin bedeutet&lt;br /&gt;
{|&lt;br /&gt;
|Byte&lt;br /&gt;
|Bedeutung&lt;br /&gt;
|hier&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|Adresse des Senders&lt;br /&gt;
|Zentrale&lt;br /&gt;
|-&lt;br /&gt;
|0xfe&lt;br /&gt;
|Adresse des Empfängers&lt;br /&gt;
|Alle Geräte&lt;br /&gt;
|-&lt;br /&gt;
|0xb5&lt;br /&gt;
|Herstellercode&lt;br /&gt;
|Vaillant&lt;br /&gt;
|-&lt;br /&gt;
|0x16&lt;br /&gt;
|Klasse des Kommandos&lt;br /&gt;
|Broadcast&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|Anzahl Datenbytes&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|Bedeutung des Wertes&lt;br /&gt;
|outsidetemp = Außentemperatur&lt;br /&gt;
|-&lt;br /&gt;
|0xf0&lt;br /&gt;
|LSB des Wertes&lt;br /&gt;
|240&lt;br /&gt;
|-&lt;br /&gt;
|0x0d&lt;br /&gt;
|MSB des Wertes&lt;br /&gt;
|12&lt;br /&gt;
|-&lt;br /&gt;
|0x44&lt;br /&gt;
|CRC&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
Damit ergibt sich in diesem Falle eine Außentemperatur von (12*256 + 240)/256 = 12,9375 Grad Celsius. In der zugehörigen CSV-Datei wird dem ebusd diese Übersetzung mitgeteilt durch eine Zeile der Form&lt;br /&gt;
 u,broadcast,outsidetemp,Außentemperatur,,FE,B516,01,temp2,m,D2B,,°C,Temperatur&lt;br /&gt;
Diese CSV-Dateien können z.B. mit OpenOffice aus einem Spreadsheet generiert werden, indem dieses als CSV-Datei mit Separator &amp;quot;,&amp;quot; gespeichert wird. &lt;br /&gt;
*Bei einem vollkommen unbekannten Heizungssystem sollte man den Hersteller fragen, welche Codes er verwendet&lt;br /&gt;
*Für Vaillant- und Wolf- Heizungssysteme liegen in dem oben genannten Verzeichnis ein paar Beispiele vor, die man als Ausgangspunkt nehmen kann.&lt;br /&gt;
&lt;br /&gt;
==Serieller Konverter==&lt;br /&gt;
&lt;br /&gt;
[[Datei:EBUS_RS232_Konverter.png|thumb|left|alt=eBus Platine]]&lt;br /&gt;
Es hat sich als nicht praktikabel erwiesen, den eBus mit einem Pegelwandler direkt an den seriellen GPIO-Port des Raspberry Pi anzuschließen. Die ständig einlaufenden Synchronisationssignale auf dem eBus, sowie die interne Verarbeitung der GPIO-Signale im Raspberry führen zu einer intolerablen Latenz, d.h., die eBus-Signale kommen verspätet bei der Software eBusd an (bis zu 90 Minuten wurden beobachtet). Stattdessen sollte grundsätzlich ein Seriell-USB-Konverter verwendet werden und der Raspberry Pi über einen USB-Port mit dem eBus verbunden werden.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==USB Device und Port unter Linux ermitteln==&lt;br /&gt;
&lt;br /&gt;
Die einfachste Art den USB Device zu ermitteln erfolgt direkt am Raspberry Pi mit dem Befehl &amp;quot;lsusb&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 pi@raspberry2 ~ $ lsusb&lt;br /&gt;
 Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.&lt;br /&gt;
 Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub&lt;br /&gt;
 Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.&lt;br /&gt;
 Bus 001 Device 004: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC&lt;br /&gt;
&lt;br /&gt;
in diesem Beispiel ist das der Device 004, dieser FT232 lauscht am eBus und ist mit dem eBus-Konverter verbunden.&lt;br /&gt;
&lt;br /&gt;
Der USB Port kann mit der folgenden Kommandozeile ermittelt werden:&lt;br /&gt;
 sudo dmesg | grep -i tty&lt;br /&gt;
Die Ausgabe sieht wie folgt aus:&lt;br /&gt;
 [553999.530995] usb 1-1.3: FTDI USB Serial Device converter now attached to &#039;&#039;&#039;ttyUSB0&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==eBusd==&lt;br /&gt;
===Prüfen der eBusd Konfigurationsdateien===&lt;br /&gt;
Mit dem Parameter &amp;quot;&#039;&#039;&#039;--checkconfig --scanconfig&#039;&#039;&#039;&amp;quot; kann die Installation der benutzten CSV Dateien am Raspberyy Pi überprüft werden. Vor allem wird hier angezeigt wieviele Messages übersetzt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
pi@raspberry2 ~ $ ebusd --checkconfig --scanconfig&lt;br /&gt;
2016-01-22 17:14:12.619 [main notice] Performing configuration check...&lt;br /&gt;
2016-01-22 17:14:19.336 [main notice] found messages: 4440 (416 conditional on 89 conditions, 2 poll, 64 update)&lt;br /&gt;
&lt;br /&gt;
pi@raspberry2 ~ $ ebusctl info&lt;br /&gt;
version: ebusd 2.0.0ea7efc&lt;br /&gt;
signal: acquired&lt;br /&gt;
symbol rate: 24&lt;br /&gt;
masters: 3&lt;br /&gt;
messages: 426&lt;br /&gt;
address 03: master #3&lt;br /&gt;
address 08: slave #3, scanned &amp;quot;MF=Vaillant;ID=BAI00;SW=0518;HW=7401&amp;quot;, loaded  &amp;quot;vaillant/08.bai.HW7401.csv&amp;quot;&lt;br /&gt;
address 10: master #6&lt;br /&gt;
address 15: slave #6, scanned &amp;quot;MF=Vaillant;ID=43000;SW=0215;HW=2002&amp;quot;, loaded &amp;quot;vaillant/15.430.csv&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Info hingegen zeigt genau welche CSV Dateien geladen worden sind und ihre Soft- und Hardewareversion.&lt;br /&gt;
&lt;br /&gt;
===Bedeutung von &amp;quot;unknown MS&amp;quot; in der eBusd Logdatei===&lt;br /&gt;
Der Autor des eBus Dämons ist ständig bemüht die Geräte der unterschiedlichen Hersteller alle zu erfassen und so die Konfigurationsdateien zu ergänzen. Je nach Hard- und Softwarekonfiguration können  Broadcast Meldungen vom eBus kommen die in der _broadcast.csv noch nicht übersetzt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
2015-12-30 21:48:57.662 [update notice] unknown MS cmd: 1008b5110101 / 09404210004a620000ff&lt;br /&gt;
2015-12-30 21:48:59.670 [update notice] unknown BC cmd: 10feb516080001492130120315&lt;br /&gt;
2015-12-30 21:48:59.923 [update notice] unknown MS cmd: 1008b512020064 / 00&lt;br /&gt;
2015-12-30 21:49:01.711 [update notice] unknown MS cmd: 1008b5100900003c7affff00ff00 / 0101&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Meldungen haben in der Regel für den weiteren Verlauf der Kommunikation über den eBus keinen Einfluß und ist keine Fehlfunktion der Schaltung oder Platine!&lt;br /&gt;
&lt;br /&gt;
===Bedeutung von &amp;quot;signal lost&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
pi@raspberrypi /etc/init.d $ sudo ebusd -f -c /tmp --logareas bus --loglevel info -d /dev/ttyUSB0&lt;br /&gt;
2016-01-18 22:38:56.348 [bus notice] signal acquired&lt;br /&gt;
2016-01-18 22:38:56.477 [bus notice] new master 10, master count 2&lt;br /&gt;
2016-01-18 22:38:56.481 [bus notice] new master 3f, master count 3&lt;br /&gt;
2016-01-18 22:39:02.051 [bus error] signal lost&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei dieser Meldung verliert der USB Konverter nach 20-Sekunden die Verbindung zum Raspberry Pi und produziert dann den Logeintrag.&lt;br /&gt;
[http://forum.fhem.de/index.php/topic,46098.msg394313.html#msg394313 Lösungvorschlag]&lt;br /&gt;
&lt;br /&gt;
===ERR: unable to load===&lt;br /&gt;
&lt;br /&gt;
 2016-01-17 19:04:03.961 [main error] unable to load scan config 08: no file from /etc/ebusd/vaillant with prefix 08. matches ID &amp;quot;bai00&amp;quot;, SW0604, HW5502&lt;br /&gt;
&lt;br /&gt;
Ebusd wird gestartet, findet aber ein Konfigurations File (CSV) nicht.&lt;br /&gt;
&lt;br /&gt;
Die eBusd Konfigurationsdateien könne nach [[#eBusd Konfigurationsdateien (CSV-Files)|diesem]] Vorgehen installiert werden.&lt;br /&gt;
Die Konfigurationsdateien aus dem Git neu laden und installieren.&lt;br /&gt;
[http://forum.fhem.de/index.php/topic,46098.msg394270.html#msg394270 Lösungvorschlag]&lt;br /&gt;
&lt;br /&gt;
===ERR: duplicate Entry===&lt;br /&gt;
&lt;br /&gt;
===ERR: End of input reached===&lt;br /&gt;
&lt;br /&gt;
Die CSV Dateien wurden [http://forum.fhem.de/index.php/topic,46098.msg383450/topicseen.html#msg383450 fehlerhaft installiert] oder sind defekt!&lt;br /&gt;
Eine Neuinstallation dieser Dateien ist erforderlich!&lt;br /&gt;
&lt;br /&gt;
 Error reading &amp;quot;/etc/ebusd/vaillant/05.vd3.csv&amp;quot; line 1 field 1 value &amp;quot;05.vd4.csv&amp;quot;: ERR: end of input reached&lt;br /&gt;
 Erroneous item is here:&lt;br /&gt;
 05.vd4.csv&lt;br /&gt;
  ^&lt;br /&gt;
 Error reading &amp;quot;/etc/ebusd/vaillant/15.hep.csv&amp;quot; line 1 field 1 value &amp;quot;15.sdr_p.csv&amp;quot;: ERR: end of input reached&lt;br /&gt;
 Erroneous item is here:&lt;br /&gt;
 15.sdr_p.csv&lt;br /&gt;
  ^&lt;br /&gt;
&lt;br /&gt;
===BUS ERR send to 15===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
2016-01-16 19:20:28.575 [bus notice] new master 03, master count 4&lt;br /&gt;
2016-01-16 19:20:28.575 [update notice] unknown MS cmd: 1008b513020508 / 00&lt;br /&gt;
2016-01-16 19:20:29.413 [update notice] unknown MS cmd: 100ab504010d / 054201008037&lt;br /&gt;
2016-01-16 19:20:32.398 [bus error] send to 08: ERR: read timeout, retry&lt;br /&gt;
2016-01-16 19:20:33.005 [bus error] send to 08: ERR: read timeout, retry&lt;br /&gt;
2016-01-16 19:20:33.613 [bus error] send to 08: ERR: read timeout, retry&lt;br /&gt;
2016-01-16 19:20:34.859 [bus error] send to 08: ERR: read timeout&lt;br /&gt;
2016-01-16 19:20:34.859 [main error] scan config 08 message: ERR: read timeout&lt;br /&gt;
2016-01-16 19:20:37.017 [main notice] read common config file /etc/ebusd/vaillant/scan.csv&lt;br /&gt;
2016-01-16 19:20:37.019 [main notice] read common config file /etc/ebusd/vaillant/broadcast.csv&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Fehlermeldung (read timeout) kann verschiedene Ursachen haben, meist liegt der Fehler in einer fehlerhaften Verkabelung.&lt;br /&gt;
[http://forum.fhem.de/index.php/topic,46098.msg393547.html#msg393547 Lösungsvorschlag]&lt;br /&gt;
&lt;br /&gt;
=Systemarchitektur / Systemdesign=&lt;br /&gt;
Es muss sich jeder vorher überlegen, ob man für den eBus einen eigenen Rechner Raspberry Pi nimmt, oder auf der bestehenden FHEM Installation laufen lassen will. Eine Trennung bietet mehrere Vorteile die dann speziell im Testbetrieb den normalen Smart-Home Betrieb nicht beinflussen.&lt;br /&gt;
[[Datei:EBUS_Konfiguration.png|thumb|left|alt=eBus Konfiguration]]&lt;br /&gt;
Hier eine Konfiguration von Fhem und das Zusammenspiel mit eBusd via ECMD. Das soll aber jeder so handhaben wie es am Besten in das eigene Konzept passt.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Werkzeuge / Tools=&lt;br /&gt;
&lt;br /&gt;
==PSPad==&lt;br /&gt;
[http://www.pspad.com/de/ Pspad] ist ein besonders auf Programmierer zugeschnittener unicode-fähiger Editor für Microsoft Windows, welcher in der Lage ist auch per FTP die Dateien direkt zu editieren und zu schreiben ohne den Umweg sie vorher kopieren zu müssen! Besonders wichtig ist neben einem Syntaxhighlighter das er Linuxkonform ist und die Steuerzeichen am Zeilenende richtig interpretiert.&lt;br /&gt;
&lt;br /&gt;
Hier zwei wichtige Infos zur Einrichtung des PSPad.&lt;br /&gt;
&lt;br /&gt;
[[Datei:EBUS_PSPad_FTP.png|thumb|left|alt=eBus Platine]]&lt;br /&gt;
&lt;br /&gt;
Im Tab &amp;quot;&#039;&#039;&#039;FTP&#039;&#039;&#039;&amp;quot; unten mit der rechten Maustaste auf die weiße Fläche klicken und in dem neu geöffneten Fenster &amp;quot;FTP verbinden&amp;quot; wählen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:EBUS_PSPad_FTP2.png|thumb|left|alt=eBus Platine]]&lt;br /&gt;
Es öffnet sich ein Fenster mit den Verbindungsdaten des FTP Servers. Nicht vergessen, das unten markierte Häckchen &amp;quot;&#039;&#039;&#039;Verbindung halten&#039;&#039;&#039; ...&amp;quot; zu markieren. Es wird dann alle 60 Sekunden ein NOOP Signal gesendet und die Verbindung wird nach einem Timeout nicht jedes Mal beendet.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Filezilla==&lt;br /&gt;
Ebenso wie PSPad wird es für viele Arbeiten am Raspberry und eBusd eine Erleichterung sein manche Dateien direkt zu kopieren oder am PC zu sichern.&lt;br /&gt;
[https://filezilla-project.org/ Filezilla] beherrscht ebenfalls das &#039;&#039;&#039;FTP Protokoll&#039;&#039;&#039; und speichert die Verbindungsdaten in einem Profil.&lt;br /&gt;
&lt;br /&gt;
[[Datei:EBUS_Filezilla_FTP.png|thumb|left|alt=eBus Platine]]&lt;br /&gt;
Links oben öffnet man den Servermanager und wählt (links unten) &amp;quot;neuer Server&amp;quot;. Man gibt die Verbindungsdaten des Raspberry ein und drückt &amp;quot;speichern&amp;quot;. Das Verbindungs Profil steht nun im Servermanager als &amp;quot;Raspberry&amp;quot; zur Verfügung und die Verbindung kann nun mit einem Doppelklick geöffnet werden. Dateien können nun durch einfaches Drag &amp;amp; Drop zwischen linken (lokales Laufwerk am PC) und rechten Dateifenster (in diesem Fall Raspberry) bequem kopiert werden.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Putty==&lt;br /&gt;
[http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html PuTTY] ist ein SSH Client welcher neben Secure Shell auch Telnet, Remote login und eine serielle Schnittstelle enthält. Als Tipp sei hier erwähnt, dass hier einige sehr nützliche Features zur Verfügung stehen:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;rechte Maustaste&#039;&#039;&#039; = Zwischenablage wird ins Terminalfenster kopiert &lt;br /&gt;
* &#039;&#039;&#039;Text mit Maus markieren&#039;&#039;&#039; = in Zwischenablage kopieren&lt;br /&gt;
* &#039;&#039;&#039;Pfeiltasten Auf/Ab&#039;&#039;&#039; = die letzten Befehle wiederholen, durch die Liste steppen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:EBUS_Putty.png|thumb|left|alt=eBus Platine]]&lt;br /&gt;
Ebenso können mit Putty mehrere Terminalfenster parallel geöffnet werden. Diese Methode ist bei der Kalibrierung des Potis im Raw-Modus sehr von Vorteil.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Weiterführende Links=&lt;br /&gt;
Diskussionsthread aus dem Forum:&lt;br /&gt;
*[http://forum.fhem.de/index.php/topic,46098.0.html eBus Schaltung in Betrieb nehmen!]&lt;br /&gt;
*[http://forum.fhem.de/index.php/topic,29737.0.html Läuft: Heizung mit eBus-Schnittstelle]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Other Components]]&lt;br /&gt;
[[Kategorie:Heizungssteuerung]]&lt;br /&gt;
[[Kategorie:Interfaces]]&lt;/div&gt;</summary>
		<author><name>Mikawood</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:EBUS_Adapter_Bestueckung.png&amp;diff=17124</id>
		<title>Datei:EBUS Adapter Bestueckung.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:EBUS_Adapter_Bestueckung.png&amp;diff=17124"/>
		<updated>2016-11-09T09:30:37Z</updated>

		<summary type="html">&lt;p&gt;Mikawood: Mikawood lud eine neue Version von Datei:EBUS Adapter Bestueckung.png hoch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mikawood</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:EBUS_Adapter_Bestueckung.png&amp;diff=17123</id>
		<title>Datei:EBUS Adapter Bestueckung.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:EBUS_Adapter_Bestueckung.png&amp;diff=17123"/>
		<updated>2016-11-09T09:30:13Z</updated>

		<summary type="html">&lt;p&gt;Mikawood: Mikawood lud eine neue Version von Datei:EBUS Adapter Bestueckung.png hoch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mikawood</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:EBUS_Adapter_Bestueckung.png&amp;diff=17122</id>
		<title>Datei:EBUS Adapter Bestueckung.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:EBUS_Adapter_Bestueckung.png&amp;diff=17122"/>
		<updated>2016-11-09T09:29:01Z</updated>

		<summary type="html">&lt;p&gt;Mikawood: Mikawood lud eine neue Version von Datei:EBUS Adapter Bestueckung.png hoch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mikawood</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:EBUS_Adapter_Bestueckung.png&amp;diff=17121</id>
		<title>Datei:EBUS Adapter Bestueckung.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:EBUS_Adapter_Bestueckung.png&amp;diff=17121"/>
		<updated>2016-11-09T09:25:37Z</updated>

		<summary type="html">&lt;p&gt;Mikawood: Mikawood lud eine neue Version von Datei:EBUS Adapter Bestueckung.png hoch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mikawood</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:EBUS_Adapter_Platine.png&amp;diff=17114</id>
		<title>Datei:EBUS Adapter Platine.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:EBUS_Adapter_Platine.png&amp;diff=17114"/>
		<updated>2016-11-08T08:01:19Z</updated>

		<summary type="html">&lt;p&gt;Mikawood: Mikawood lud eine neue Version von Datei:EBUS Adapter Platine.png hoch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mikawood</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:EBUS_Adapter_Platine.png&amp;diff=17113</id>
		<title>Datei:EBUS Adapter Platine.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:EBUS_Adapter_Platine.png&amp;diff=17113"/>
		<updated>2016-11-08T07:59:40Z</updated>

		<summary type="html">&lt;p&gt;Mikawood: Mikawood lud eine neue Version von Datei:EBUS Adapter Platine.png hoch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mikawood</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:EBUS_Adapter_Platine.png&amp;diff=17112</id>
		<title>Datei:EBUS Adapter Platine.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:EBUS_Adapter_Platine.png&amp;diff=17112"/>
		<updated>2016-11-08T07:57:22Z</updated>

		<summary type="html">&lt;p&gt;Mikawood: Mikawood lud eine neue Version von Datei:EBUS Adapter Platine.png hoch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mikawood</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=EBUS&amp;diff=17106</id>
		<title>EBUS</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=EBUS&amp;diff=17106"/>
		<updated>2016-11-07T19:10:49Z</updated>

		<summary type="html">&lt;p&gt;Mikawood: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Randnotiz|RNTyp=r|RNText=Die Verwendung des EBUS zur &#039;&#039;Ansteuerung&#039;&#039; eines Heizungssystems kann dieses bei unsachgemäßer Anwendung beschädigen. Für unmittelbare oder mittelbare Folgen, die sich aus dem Nachbau des Interfaces oder der Verwendung der hier zur Verfügung gestellten Information ergeben, übernimmt der Autor keine Haftung.}}Dieser Artikel beschreibt die Ankopplung von Heizungssysteme mit eBus-Interface an FHEM.&lt;br /&gt;
&lt;br /&gt;
Der eBus ist eine bei vielen Heizungssystemen vorhandene serielle Schnittstelle mit zwei Leitungen. Verwendet werden dabei 2400 Baud als Geschwindigkeit und die beiden Signalpegel&lt;br /&gt;
*logisch 1: 15–24 V&lt;br /&gt;
*logisch 0: 9–12 V&lt;br /&gt;
&lt;br /&gt;
[[Datei:EBUS-Adapter-aufgebaut.png|thumb|left|alt=eBus Platine]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fertig aufgebaute eBus Platine, bereit für den Einsatz mit eBusd!&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Interface=&lt;br /&gt;
==Schaltung==&lt;br /&gt;
[[Datei:EBUS_Interface_Schaltung.png|thumb|left|alt=eBus-USB Interface]]&lt;br /&gt;
Eine direkte Ankopplung des eBus an FHEM via Pegelwandlung und serielle Schnittstelle ist nicht empfehlenswert, stattdessen wurde der Weg beschritten, einen separaten Raspberry Pi (Modell B) an den eBus zu koppeln und darauf die Software &#039;&#039;eBusd&#039;&#039; laufen zu lassen. Diese wird dann in einer beliebigen FHEM-Instanz als ECMD-Device definiert und somit per Telnet abgefragt.&lt;br /&gt;
&lt;br /&gt;
Hierbei wird ein kommerziell für ca. 6,00 € erhältliches USB-Modul mit ein paar Zusatzbauteilen im Wert von ca. 5,00 € versehen. Das Interface hat die folgenden Eigenschaften:&lt;br /&gt;
*Verpolungssicherer eBus-Anschluss&lt;br /&gt;
*Galvanische Trennung zwischen eBus und USB &lt;br /&gt;
Die Bauteile sind unkritisch und können durch äquivalente Teile ersetzt werden. Allerdings sollte bei der Zenerdiode auf eine Belastbarkeit mit 1,3 W geachtet werden, und beim USB-Modul darauf, dass dieses einen FTDI-Chip enthält.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Achtung:&#039;&#039;&#039; Der Autor übernimmt keine Haftung für die Anwendung dieser Schaltung. Zur Vermeidung von Schäden durch unsachgemäße Bedienung des Heizungssystems wird ausdrücklich empfohlen, nur die lesende Hälfte des Interfaces nachzubauen und sich auf ein passives Lauschen auf dem EBUS zu beschränken. Dazu einfach den Zweig mit Darlington-Transistor aus der Schaltung nicht einbauen.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Schaltung des eBus von Prof. Dr. Peter A. Henning ist eine bewährte Schaltung die von zahlreichen Anwendern bereits nachgebaut wurde. &lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Eigenbau (Lochrasterplatine)==&lt;br /&gt;
[[Datei:EBUS_Adapter_Lochrasterplatine.png|thumb|left|alt=Platine]]&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel eines Aufbaues auf einer Lochrasterplatine.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Platine==&lt;br /&gt;
Auf Basis der oben genannten Schaltung, wurde im [http://forum.fhem.de/index.php/topic,46098.0.html FHEM Forum] ein Platinenlayout erstellt und produziert. Die dazu benötigten Gerberfiles können [http://forum.fhem.de/index.php/topic,45127.msg370647.html#msg370647 hier] heruntergeladen werden. Der Autor des Layouts hat dies mit der Freeware Version von EAGLE erstellt, d.h. die Files können bei allen Platinenherstellern eingereicht werden (keine Lizenz eines bestimmten Herstellers notwendig).&lt;br /&gt;
[[Datei:EBUS_Adapter_Platine.png|thumb|left|alt=Platine]]&lt;br /&gt;
Diese Beschreibung sollte hauptsächlich für Personen dienen, bei denen es nicht das tägliche Brot ist elektronische Schaltungen in Betrieb zu nehmen. Ich setze hier voraus, dass der Umgang mit einem Lötkolben klar ist. Wer noch nie gelötet hat, sollte besser einen Bekannten ersuchen der das schon gemacht hat.&lt;br /&gt;
Nachfolgend wird beschrieben, wie eine Platine mit den Bauteilen bestückt wird.&lt;br /&gt;
Am einfachsten ist es einen fertigen Adapter zu kaufen.&lt;br /&gt;
Siehe dazu auch den [http://forum.fhem.de/index.php/topic,46098.0.html Link aus dem Forum]:&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Platine bestücken===&lt;br /&gt;
[[Datei:EBUS_Adapter_Bestueckung.png|thumb|left|alt=Platine bestücken]]&lt;br /&gt;
Bei der Bestückung sollte darauf geachtet werden mit den niedrigsten Bauteilen zuerst zu beginnen, sonst fallen sie beim verlöten ständig heraus. Wer die Farbcodes der Widerstände nicht auswendig kennt sollte diese vorher mit einem Meßgerät (Ohmmeter) messen. Nach den Dioden und Widerständen können die IC Sockel eingelötet werden, hier sollte lediglich auf die Einkerbung laut Bestückungsaufdruck geachtet werden. Zum Schluß noch die restlichen Bauteile. Nach einer genauen Sichtkontrolle (verbogene Beinchen des IC, Kurzschlüsse beim Löten, richtige Polung) können noch die ICS eingesetzt werden. Diese können auf einer flachen Unterlage etwas vorgebogen werden, damit sie leichter in den Sockel passen.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Achtung&#039;&#039;&#039;: der IC 4011 ist ein Cmos Schaltkreis und ist empfindlich gegen statische Aufladungen, daher die Beinchen nicht mit dem Finger berühren, bzw. ein Antistatikband am Arm verwenden.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Bestückung der Widerstände bei Platine V1.6&lt;br /&gt;
 R1 = 3k3&lt;br /&gt;
 R2 = 1k0&lt;br /&gt;
 R4 = 10k (nicht beschriftet, links neben R2)&lt;br /&gt;
 R5 = 470&lt;br /&gt;
 R6 = 22k&lt;br /&gt;
 R7 = 100k (nicht beschriftet, links unten liegt quer)&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[https://secure.reichelt.de/index.html?&amp;amp;ACTION=20&amp;amp;AWKID=1161469&amp;amp;PROVID=2084 Warenkorb der benötigten Bauteile von Reichelt]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Platine Messpunkte===&lt;br /&gt;
[[Datei:EBUS_Adapter_Messpunkte.png|thumb|left|alt=Platine messen]]&lt;br /&gt;
Hier abgebildet der Schaltplan mit einigen wichtigen Spannungen für den Testbetrieb am Netzgerät. Bitte beachtet den Widerstand am Eingang des eBus und die Anschaltung der behelfsmäßigen Led zur Abstimmung. Spätestens dann, wenn die Schaltung Fehler zeigt, wird man über so einen Versuchsaufbau nicht herum kommen. Damit kann in Ruhe die Schaltung getestet und gemessen werden. Defekte Bauteile oder fehlerhafte Lötstellen sollten dann schnell gefunden werden.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Schaltplan zeigt einige wichtigen Spannungen für den Testbetrieb am Netzgerät. &lt;br /&gt;
Bei dem Versuchsaufbau ist insbesondere auf den Einsatz eines korrekten Vorwiderstands, am Eingang des eBus und die Anschaltung der behelfsmäßigen LED (zur Abstimmung), zu beachten (nur zur Abstimmhilfe).&lt;br /&gt;
&lt;br /&gt;
===Poti abgleichen===&lt;br /&gt;
Zur ersten Justierung des Potis, wird der eBusd Dienst genutzt. Das Vorgehen sieht wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
1) &#039;&#039;&#039;eBus Dienst stoppen&#039;&#039;&#039; - Das kann mit der folgenden Kommandozeile bewerkstelligt werden:&lt;br /&gt;
 service ebusd stop&lt;br /&gt;
2) &#039;&#039;&#039;eBus Dienst&#039;&#039;&#039;, jedoch mit minimalen Parametern und ohne eBusd Konfigurationsdateien (CSV-Files), mit der folgenden Kommandozeile erneut starten:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; &amp;lt;DEVICE&amp;gt; Muss zuvor durch den entsprechenden USB-Port (siehe [[#USB Device und Port unter Linux ermitteln|USB Device und Port unter Linux ermitteln]]) z.B. /dev/ttyUSB0 ersetzt werden.&#039;&#039;&lt;br /&gt;
 ebusd -f -c /tmp --logareas bus --loglevel info -d &amp;lt;DEVICE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) Der eBusd Dienst läuft nun im &#039;&#039;&#039;Vordergrund&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
4) &#039;&#039;&#039;Einem zweiten Terminal öffnen&#039;&#039;&#039; und den folgenden Befehl ausführen:&lt;br /&gt;
 ebusctl raw&lt;br /&gt;
&lt;br /&gt;
Mit dem Befehl erhält man im Terminalfenster die empfangenen Bytes als Hex, die wie folgt aussehen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
2015-12-24 12:07:16.955 [bus notice] &amp;lt;aa&lt;br /&gt;
2015-12-24 12:07:17.001 [bus notice] &amp;lt;aa&lt;br /&gt;
2015-12-24 12:07:17.047 [bus notice] &amp;lt;aa&lt;br /&gt;
2015-12-24 12:07:17.093 [bus notice] &amp;lt;aa&lt;br /&gt;
2015-12-24 12:07:17.097 [bus notice] &amp;lt;10&lt;br /&gt;
2015-12-24 12:07:17.102 [bus notice] &amp;lt;50&lt;br /&gt;
2015-12-24 12:07:17.107 [bus notice] &amp;lt;b5&lt;br /&gt;
2015-12-24 12:07:17.111 [bus notice] &amp;lt;04&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Wenn gerade kein Gerät den Bus nutzt, dann sollten ca. 20 Zeilen pro Sekunde ausgegeben werden und zwar mit &amp;quot;&amp;lt;aa&amp;quot; (im Beispiel die oberen 4 Zeilen).&lt;br /&gt;
&lt;br /&gt;
Sobald ein Gerät den eBus nutzt, tauchen neben &amp;quot;&amp;lt;aa&amp;quot; auch andere HEX Werte auf (im Beispiel die unteren 4 Zeilen). Diese Werte können ignoriert werden.&lt;br /&gt;
&lt;br /&gt;
Wichtig bei der Poti Einstellung ist, dass vor allem die regulären &amp;quot;aa&amp;quot;s zu sehen sind. Tauchen die &amp;quot;aa&amp;quot;s auf, dann kann davon ausgegangen werden, dass der Poti korrekt eigestellt ist. Ist dies der Fall, dann kann der eBusd Dienst regulär gestartet werden.&lt;br /&gt;
Dabei muss der im Vordergrund laufende eBusd Prozess (siehe Punkt 2) mit der Tastenkombination STRG+C abgebrochen und der folgende Befehl in der Kommandozeile ausgeführt werden:&lt;br /&gt;
 service ebusd start&lt;br /&gt;
Anschließend erscheint eine Meldung, die einen erfolgreichen Start des Dienstes signalisiert.&lt;br /&gt;
 [ ok ] Starting ebusd: ebusd.&lt;br /&gt;
&lt;br /&gt;
===Bekannte Fehler=== &lt;br /&gt;
Das Logfile ist zur Inbetriebnahme unerlässlich und kann (z.B. mit [[#PSPad|PSPad]]) ausgelesen werden. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
2015-12-22 16:27:34.195 [bus notice] signal acquired&lt;br /&gt;
2015-12-22 16:28:12.029 [bus error] signal lost&lt;br /&gt;
2015-12-22 16:28:12.339 [bus notice] signal acquired&lt;br /&gt;
2015-12-22 16:28:14.006 [bus error] signal lost&lt;br /&gt;
2015-12-22 16:28:16.372 [bus notice] signal acquired&lt;br /&gt;
2015-12-22 16:28:18.023 [bus error] signal lost&lt;br /&gt;
2015-12-22 16:28:18.729 [bus notice] signal acquired&lt;br /&gt;
2015-12-22 16:28:20.458 [update notice] update myCustom Status01: 43.0;41.0;8.000;41.0;38.0;ok&lt;br /&gt;
2015-12-22 16:28:26.460 [update notice] update bc Mode QQ=10: standby&lt;br /&gt;
2015-12-22 16:28:30.436 [update notice] update myCustom Status01: 41.0;40.0;8.000;41.0;38.0;ok&lt;br /&gt;
2015-12-22 16:28:32.458 [update notice] update broadcast vdatetime QQ=10: 16:24:52;22.12.2015&lt;br /&gt;
2015-12-22 16:28:32.696 [update notice] update myCustom2 Pumpenstatus: ok&lt;br /&gt;
2015-12-22 16:28:36.452 [update notice] update bc Mode QQ=10: standby&lt;br /&gt;
2015-12-22 16:28:40.478 [update notice] update myCustom Status01: 40.0;39.0;7.750;41.0;38.0;ok&lt;br /&gt;
2015-12-22 16:28:42.482 [update notice] update myCustom1 Status11: nosignal;41;5;18;-;-;-;-;8.000&lt;br /&gt;
2015-12-22 16:28:42.753 [update notice] update myCustom Status02: auto;60;70.0;70;54.0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier ein typisches Log wenn das Poti noch nicht oder &#039;&#039;&#039;falsch kalibriert&#039;&#039;&#039; wurde.&lt;br /&gt;
Ab dem Eintrag 16:28:20.458 war dann die richtige Stellung gefunden. Das Poti soll daher zunächst ganz nach links (Transistor der Platine ist dann rechts unten) gedreht werden und dann vorsichtig auf etwa 2:00 Uhr. Bei knapp 2:00 Uhr ist bei der Testplatine dann die ideale Stellung. Der Stellbereich ist sehr klein (etwa 1-2 mm), daher einen Schraubendreher verwenden der sehr exakt passt und gleichzeitig mit dem Laptop abfragen starten. Zur Kontrolle dann das Log (var/log/ebusd.log) abfragen. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
2015-11-29 06:26:55.271 [update notice] update myCustom1 Status11: nosignal;40;0;15;-;-;-;-;-0.188&lt;br /&gt;
2015-11-29 06:26:55.541 [update notice] update myCustom Status02: auto;60;70.0;70;54.0&lt;br /&gt;
2015-11-29 06:26:59.293 [update notice] update bc Mode QQ=10: standby&lt;br /&gt;
2015-11-29 06:27:03.323 [update notice] update myCustom Status01: 53.0;45.0;-0.438;47.0;46.0;error&lt;br /&gt;
2015-11-29 06:27:05.268 [update notice] update broadcast outsidetemp QQ=10: -3.188&lt;br /&gt;
2015-11-29 06:27:09.344 [update notice] update bc Mode QQ=10: standby&lt;br /&gt;
2015-11-29 06:27:11.934 [bus error] send to 08: ERR: read timeout, retry&lt;br /&gt;
2015-11-29 06:27:11.981 [bus error] send to 08: ERR: read timeout, retry&lt;br /&gt;
2015-11-29 06:27:12.025 [bus error] send to 08: ERR: read timeout, retry&lt;br /&gt;
2015-11-29 06:27:12.069 [bus error] send to 08: ERR: read timeout&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Fall liegt ein Fehler bei jedem Sendeversuch vor. Ein &amp;quot;bus error&amp;quot; mit timeout sollte nicht (zu oft) zu finden sein. Gut zu sehen sind schon die Broadcast Meldungen, die selbständig über den Bus laufen und vom Konverter schon richtig interpretiert werden. Sollten wie in diesem Fall, die Meldungen nicht mit Texten zu lesen sein fehlen noch die Konfigurationfiles (csv) im Verzeichnis /etc/ebusd. Welche Files hier verwendet werden sollen ist natürlich von der Therme und dem Zubehör abhängig.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Achtung&#039;&#039;&#039;: Der Autor übernimmt keine Haftung für die Anwendung dieser Schaltung. Zur Vermeidung von Schäden durch unsachgemäße Bedienung des Heizungssystems wird ausdrücklich empfohlen, nur lesend auf die Schnittstelle zugreifen.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Kommerzielles Interface==&lt;br /&gt;
Ein kommerzielles Interface für die Umsetzung eBus-&amp;gt;USB ist hier erhältlich:&lt;br /&gt;
[https://www.eservice-online.de/produkte/ebus/ eBus Koppler USB]&lt;br /&gt;
&lt;br /&gt;
=Software=&lt;br /&gt;
Als Software kommt auf dem Raspberry Pi der [https://github.com/john30/ebusd ebusd] = eBus-Dämon zum Einsatz (aktuell im Januar 2016 die Version 2.0). &lt;br /&gt;
&lt;br /&gt;
Der ebusd wird auf dem System (z.B Raspberry Pi) nach der beiliegenden Anleitung übersetzt und installiert.&lt;br /&gt;
&lt;br /&gt;
Wichtigsten Bestandteile (Komponenten) der Installation sind:&lt;br /&gt;
*&#039;&#039;ebusd&#039;&#039; - das eigentliche Programm zur Kommunikation mit dem EBUS&lt;br /&gt;
*&#039;&#039;ebusd-configuration - Dateien im CSV(Comma Separated Value)-Format, die beim Start des eBusd eingelesen und als Kommandos (Befehle) für das Heizungsystem verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Nachfolgend wird die Installation der zwei Komponenten beschrieben.&lt;br /&gt;
&lt;br /&gt;
==eBusd Installation per Debian Package==&lt;br /&gt;
&lt;br /&gt;
===Voraussetzungen===&lt;br /&gt;
wget (ist in der Regel auf vielen Distributionen bereits installiert). Die Installation kann mit der folgenden Kommandozeile nachträglich durchgeführt werden: &lt;br /&gt;
 sudo apt-get install wget&lt;br /&gt;
&lt;br /&gt;
===eBusd installieren===&lt;br /&gt;
Das entsprechende eBusd Debian Package kann [https://github.com/john30/ebusd/releases vom GitHub ebusd] bezogen werden.&lt;br /&gt;
&lt;br /&gt;
Die Installation (&#039;&#039;Stand Januar 2016 - Version 2.0&#039;&#039;) wird wie folgt durchgeführt:&lt;br /&gt;
&lt;br /&gt;
 EBUSDPACKAGE=ebusd-2.0_armhf.deb # &amp;lt;--- Version kann bei Bedarf hier angepasst werden.&lt;br /&gt;
 wget https://github.com/john30/ebusd/releases/download/v2.0/$EBUSDPACKAGE&lt;br /&gt;
 sudo dpkg -i --force-overwrite $EBUSDPACKAGE&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Die eBusd wird dauernd aktualisiert. Aus diesem Grund sollte vor der Installation geprüft werden (siehe den o.g. Link), ob bereits eine neuere Version zur Verfügung steht. Der Name des Debian Packages muss, vor der Ausführung der o.g. Kommandozeilen, an der entsprechenden Stelle angepasst werden.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===eBusd Konfigurationsdateien (CSV-Files)===&lt;br /&gt;
Das entsprechende eBusd Konfigurations Debian Package kann [https://github.com/john30/ebusd-configuration/releases vom GitHub ebusd-configuration] bezogen werden.&lt;br /&gt;
&lt;br /&gt;
Die Installation (&#039;&#039;Stand Januar 2016 - Version 2.0.5aa482c&#039;&#039;) wird wie folgt durchgeführt:&lt;br /&gt;
&lt;br /&gt;
 EBUSDCFGPACKAGE=ebusd-configuration-2.0.5aa482c-de_all.deb # &amp;lt;--- Version kann bei Bedarf hier angepasst werden.&lt;br /&gt;
 wget https://github.com/john30/ebusd-configuration/releases/download/v2.0.1/$EBUSDCFGPACKAGE&lt;br /&gt;
 sudo dpkg -i --force-overwrite $EBUSDCFGPACKAGE&lt;br /&gt;
&lt;br /&gt;
===eBusd starten===&lt;br /&gt;
Nach der erfolgreichen Installation des eBusd und der eBusd Konfigurationsdateien kann nun der Dienst gestartet werden.&lt;br /&gt;
Zuvor muss jedoch der USB-Port des eBus Adapters überprüft werden (siehe auch [[#USB Device und Port unter Linux ermitteln|USB Device und Port unter Linux ermitteln]]). Sollte der USB-Port von dem Standardwert &amp;quot;/dev/ttyUSB0&amp;quot; abweichen, dann muss die Konfiguration &amp;quot;/etc/default/ebusd&amp;quot; angepasst werden.&lt;br /&gt;
Andernfalls kann nun der Dienst mit der folgenden Kommandozeile gestartet werden:&lt;br /&gt;
&lt;br /&gt;
 service ebusd start&lt;br /&gt;
Anschließend erscheint eine Meldung:&lt;br /&gt;
 [ ok ] Starting ebusd: ebusd.&lt;br /&gt;
die einen erfolgreichen Start des Dienstes signalisiert.&lt;br /&gt;
&lt;br /&gt;
===eBusd und Konfigurationsdateien deinstallieren===&lt;br /&gt;
Nachfolgend wird die Deinstallation des eBusd und der eBusd Konfigurationsdateien beschrieben.&lt;br /&gt;
&lt;br /&gt;
Zunächst muss der eBusd Dienst beendet werden, dies erfolgt mit der folgenden Kommandozeile:&lt;br /&gt;
 service ebusd stop&lt;br /&gt;
Anschließend erscheint eine Meldung:&lt;br /&gt;
 [ ok ] Stopping ebusd: ebusd.&lt;br /&gt;
die einen erfolgreichen Stop des Dienstes signalisiert.&lt;br /&gt;
&lt;br /&gt;
Anschließend wird zunächst das Debian Konfigurations Package deinstalliert. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Achtung:&#039;&#039;&#039; Bei der Deinstallation werden alle Konfigurationsdateien (CSV-Files) unwiderruflich gelöscht!&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Deinstallation erfolgt mit der folgenden Kommandozeile:&lt;br /&gt;
 sudo dpkg -r --force-overwrite ebusd-configuration&lt;br /&gt;
&lt;br /&gt;
Das eBusd Debian Package wird mit der folgenden Kommandozeile deinstalliert:&lt;br /&gt;
 sudo dpkg -r --force-overwrite ebusd&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tipp:&#039;&#039;&#039; Mit der folgenden Kommandozeile: &lt;br /&gt;
 dpkg -l | grep &#039;ebusd&#039; &lt;br /&gt;
können die installierten eBusd Debian Packages überprüft werden. &lt;br /&gt;
&lt;br /&gt;
Liefert der Befehl kein Ergebnis, dann kann davon ausgegangen werden, dass kein eBusd Debian Package mehr installiert ist.&lt;br /&gt;
&lt;br /&gt;
==eBusd Installation Build Prozess==&lt;br /&gt;
Möchte man eine aktuelle Entwicklungsversion von eBusd nutzen, weil ein Fehler behoben wurde und für diese Version noch kein Debian Package vorhanden ist, dann kann der eBusd manuell kompiliert werden. Nachfolgend werden die dafür notwendigen Schritte beschrieben.&lt;br /&gt;
&lt;br /&gt;
===Voraussetzungen===&lt;br /&gt;
Zunächst müssen die notwendigen Werkzeuge auf dem System installiert werden. Dies erfolgt mit der nachfolgenden Kommandozeile:&lt;br /&gt;
 apt-get -y install git &amp;amp;&amp;amp; apt-get -y install autoconf &amp;amp;&amp;amp; apt-get -y install automake &amp;amp;&amp;amp; apt-get -y install g++ &amp;amp;&amp;amp; apt-get -y install make&lt;br /&gt;
&lt;br /&gt;
Weiterführende Informationen findet man auch direkt im eBusd [https://github.com/john30/ebusd/wiki/1.-Build-and-install Wiki]!&lt;br /&gt;
&lt;br /&gt;
===eBusd kompilieren ===&lt;br /&gt;
&lt;br /&gt;
Nachdem alle Voraussetzungen erfüllt sind, kann der eBusd auf dem lokalen System kompiliert und installiert werden.&lt;br /&gt;
Dafür sind folgende Schritte notwendig:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;eBusd auschecken&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/john30/ebusd.git &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Den Kompilierungsvorgang starten&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 cd ebusd&lt;br /&gt;
 sudo ./autogen.sh --prefix=/usr&lt;br /&gt;
 sudo make&lt;br /&gt;
 sudo make install&lt;br /&gt;
 sudo cp contrib/debian/default/ebusd /etc/default/ebusd # Konfigurationsdatei für eBusd Startoptionen.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dieser Vorgang kann je nach Geschwindigkeit des Systems ca. 20 Minuten dauern. &lt;br /&gt;
&lt;br /&gt;
Wurde der Vorgang erfolgreich durchgeführt, dann kann mit der folgenden Kommandozeile die Version abgefragt werden:&lt;br /&gt;
&lt;br /&gt;
 ebusd -V&lt;br /&gt;
&lt;br /&gt;
===Autostart von eBusd konfigurieren===&lt;br /&gt;
&lt;br /&gt;
Damit die Austostartroutine auch nach einem Neustart des Systems funktioniert, muss das Dämonstartfile in das entsprechende Verzeichnis kopiert werden.&lt;br /&gt;
Die Konfiguration wird mit der folgenden Kommandozeile durchgeführt:  &lt;br /&gt;
&lt;br /&gt;
 sudo cp contrib/debian/init.d/ebusd /etc/init.d/ebusd   # (Dämonstartfile kopieren)&lt;br /&gt;
&lt;br /&gt;
Der eBusd Dienst kann, wie [[#eBusd starten|hier]] beschrieben, gestartet werden.&lt;br /&gt;
&lt;br /&gt;
===eBusd Logrotate===&lt;br /&gt;
Logrotate ist ein logischer Ablauf was mit dem Logfile geschehen soll. Man kann damit das File täglich komprimieren und das 7 Tage lang, dann erst wieder beginnen es zu überschreiben. Dies ist besonders wichtig, denn sonst würde irgendwann das Logilfe bis zu einer extremen Größe anwachsen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/var/log/ebusd.log {&lt;br /&gt;
     rotate 7&lt;br /&gt;
     copytruncate&lt;br /&gt;
     compress&lt;br /&gt;
     missingok&lt;br /&gt;
     notifempty&lt;br /&gt;
     daily&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Logfile kann in &#039;&#039;&#039;/etc/logrotate.d/ebusd&#039;&#039;&#039; konfiguriert werden.&lt;br /&gt;
In diesem Beispiel wird alle 7 Tage rotiert und die Datei komprimiert, das aktuelle Tagesfile ist unkomprimiert und mit einem Editor lesbar.&lt;br /&gt;
Das Ergebnis aus der oben dargestellten Definition sieht wie folgt aus:&lt;br /&gt;
[[Datei:EBUS_Logfile_logrotate.png|thumb|left|alt=Logfile Ansicht]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Systemüberwachung=&lt;br /&gt;
&lt;br /&gt;
Aufgrund unterschiedlicher Ursachen kann es vorkommen, dass der eBus Dämon seinen Dienst einstellt. Die hätte zufolge, dass der Lese- und Schreibzugriff nicht mehr möglich wäre. Nachfolgend werden zwei Möglichkeiten beschreiben wie eine Überwachung des Systems realisiert und im Störungsfall die Funktionalität wiederhergestellt, werden kann.&lt;br /&gt;
&lt;br /&gt;
==Mithilfe von FHEM==&lt;br /&gt;
&lt;br /&gt;
In FHEM kann man ein Notify einrichten, um bei einem Verbindungsabbruch mehrere Versuche zum Reconnect durchzuführen&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
# fhem.cfg&lt;br /&gt;
define EBUS.N notify (EBUS.*DISCONNECTED.*)|(HK.Hz:A.Temp.*err) { EBUSrecover(&amp;quot;notify EBUS.N&amp;quot;,0)}&lt;br /&gt;
attr EBUS.N group deviceDetector&lt;br /&gt;
attr EBUS.N room Alarm&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das dabei aufgerufene Perl-Programm besteht nur aus wenigen Zeilen und muss in die 99_myUtils.pm kopiert/erweitert werden:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
# 99_myUtils.pm&lt;br /&gt;
sub EBUSrecover($$)&lt;br /&gt;
{   &lt;br /&gt;
  my ($evt,$num) = @_;&lt;br /&gt;
  Log 1,&amp;quot;[EBUS] Recover triggered from $evt, attempt No. $num&amp;quot;;&lt;br /&gt;
  if(Value(&amp;quot;EBUS&amp;quot;) ne &amp;quot;opened&amp;quot;){&lt;br /&gt;
    if( $num &amp;lt; 7){&lt;br /&gt;
      $num++;&lt;br /&gt;
      fhem(&amp;quot;set EBUS reopen&amp;quot;);&lt;br /&gt;
      fhem(&amp;quot;delete EBUSrecoverdly&amp;quot;) if($defs{&amp;quot;EBUSrecoverdly&amp;quot;});&lt;br /&gt;
      fhem(&amp;quot;define EBUSrecoverdly at +00:00:05 {EBUSrecover(&#039;EBUSrecover&#039;,$num)}&amp;quot;);&lt;br /&gt;
    }else{&lt;br /&gt;
      fhem(&amp;quot;set Device.warn EBUS&amp;quot;) &lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mithilfe von Watchdog==&lt;br /&gt;
&lt;br /&gt;
Es empfiehlt sich auch, den ebusd kontinuierlich zu überwachen und ggf. neu zu starten. Mit der nachfolgenden Beschreibung wird alle 5 Sekunden die Existenz des Programms abgefragt und dieses bei einem versagenden Test neu gestartet.&lt;br /&gt;
&lt;br /&gt;
Dazu wird auf dem System nach überall erhältlichen Anleitungen der Watchdog Timer installiert und die Datei /etc/watchdog.conf mit den beiden Parametern&lt;br /&gt;
 test-timeout = 10&lt;br /&gt;
 interval     = 5&lt;br /&gt;
besetzt. Ferner wird die Datei /etc/watchdog.d/ebusd angelegt mit dem Inhalt&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# description: watchdog helper file for ebusd  &lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
&#039;test&#039;)&lt;br /&gt;
       #--- Test for ebusd&lt;br /&gt;
       if [ -s /var/run/ebusd.pid ] ; then&lt;br /&gt;
           RUN=`ps -ef | grep ebusd.*USB0 | grep -v grep`&lt;br /&gt;
           if [ &amp;quot;$RUN&amp;quot; != &amp;quot;&amp;quot; ] ; then            &lt;br /&gt;
              #echo &amp;quot;ebusd is already running&amp;quot;&lt;br /&gt;
              exit 0&lt;br /&gt;
           else&lt;br /&gt;
              echo &amp;quot;ebusd defunct at &amp;quot;`date`&lt;br /&gt;
              exit 1    &lt;br /&gt;
           fi&lt;br /&gt;
       else&lt;br /&gt;
           echo &amp;quot;ebusd not running, return 1 at &amp;quot;`date`&lt;br /&gt;
           exit 1    &lt;br /&gt;
       fi&lt;br /&gt;
       ;;&lt;br /&gt;
&#039;repair&#039;)&lt;br /&gt;
       #-- Restarting ebusd&lt;br /&gt;
       echo &amp;quot;ebusd restarting at &amp;quot;`date`&lt;br /&gt;
       /etc/init.d/ebusd start&lt;br /&gt;
       RETVAL=$?&lt;br /&gt;
       exit 0&lt;br /&gt;
       ;;&lt;br /&gt;
*)&lt;br /&gt;
       exit 0&lt;br /&gt;
       ;;&lt;br /&gt;
esac&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Visualisierung und Steuerung=&lt;br /&gt;
&lt;br /&gt;
==Mit ECMD in FHEM==&lt;br /&gt;
Eine einfache aber sichere Anbindung des eBusd an Fhem kann mit ECMD durchgeführt werden. Es ist egal ob eBusd auf dem selben Raspberry wie Fhem läuft oder ein eigener Raspberry dafür verwendet wird. Die gezeigten Beispiele sind nur eine der Möglichkeiten die zum Ziel führen, sollen aber sicher und schnell zu den ersten Erfolgen führen.&lt;br /&gt;
&lt;br /&gt;
===ECMD in FHEM aktivieren===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
# fhem.cfg&lt;br /&gt;
define EBUS ECMD telnet &#039;&#039;&#039;ip-raspi-ebusd&#039;&#039;&#039;:8888   # IP Adresse ebusd einsetzen!!!&lt;br /&gt;
attr EBUS classdefs bai00.class=/opt/fhem/FHEM/bai00.cfg&lt;br /&gt;
attr EBUS icon usb&lt;br /&gt;
attr EBUS requestSeparator 000&lt;br /&gt;
attr EBUS room Vaillant&lt;br /&gt;
&lt;br /&gt;
# Die Definition von ECMD, &amp;quot;ip-raspi-ebusd&amp;quot; muss durch die IP-Adresse ersetzt werden. Beispiel:&lt;br /&gt;
define EBUS ECMD telnet 192.168.0.10:8888&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Die Kommunikation erfolgt über Telnet und  8888 ist das Port über welches kommuniziert werden soll.&lt;br /&gt;
&lt;br /&gt;
===ECMD Devices definieren===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
# fhem.cfg&lt;br /&gt;
define Vorlauf ECMDDevice bai00.class&lt;br /&gt;
attr Vorlauf IODev EBUS&lt;br /&gt;
attr Vorlauf group Vaillant&lt;br /&gt;
attr Vorlauf icon sani_supply_temp&lt;br /&gt;
attr Vorlauf room Vaillant&lt;br /&gt;
&lt;br /&gt;
define Ruecklauf ECMDDevice bai00.class&lt;br /&gt;
attr Ruecklauf IODev EBUS&lt;br /&gt;
attr Ruecklauf group Vaillant&lt;br /&gt;
attr Ruecklauf icon sani_return_temp&lt;br /&gt;
attr Ruecklauf room Vaillant&lt;br /&gt;
&lt;br /&gt;
define PumpeWatt ECMDDevice bai00.class&lt;br /&gt;
attr PumpeWatt IODev EBUS&lt;br /&gt;
attr PumpeWatt group Vaillant&lt;br /&gt;
attr PumpeWatt icon measure_power&lt;br /&gt;
attr PumpeWatt room Vaillant&lt;br /&gt;
&lt;br /&gt;
define Fanspeed ECMDDevice bai00.class&lt;br /&gt;
attr Fanspeed IODev EBUS&lt;br /&gt;
attr Fanspeed group Vaillant&lt;br /&gt;
attr Fanspeed icon vent_ventilation_level_automatic&lt;br /&gt;
attr Fanspeed room Vaillant&lt;br /&gt;
&lt;br /&gt;
define HKurve ECMDDevice bai00.class&lt;br /&gt;
attr HKurve IODev EBUS&lt;br /&gt;
attr HKurve group Vaillant&lt;br /&gt;
attr HKurve icon temp_control&lt;br /&gt;
attr HKurve room Vaillant&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Jeder Messwert der von eBusd abgefragt werden soll, muss dazu ein ECMDDevice erstellt werden. Hier ein paar Beispiele mit Vorlauf, Rücklauf, Leistung der Pumpe, Ventilatorgeschwindigkeit und der Heizkurve.&lt;br /&gt;
&lt;br /&gt;
[[Datei:EBUS_Daten_Heizung.png|thumb|left|alt=EBUS-USB Interface]]&lt;br /&gt;
Zu jedem ECMDDevice muss es eine Classdefinition in der bai00.cfg geben. Der Name &amp;quot;bai00.cfg&amp;quot; ist frei gewählt und wird in diesen Beispielen verwendet.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ECMD Classdefinition===&lt;br /&gt;
&lt;br /&gt;
Um eine Klasse zu definieren muss der dazu benötigte Code in eine eigene Datei (hier bai00.cfg) geschrieben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
################## bai00.cfg ###############&lt;br /&gt;
# &lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
# Aussentemperatur&lt;br /&gt;
get Aussentemp cmd {&amp;quot;r -f outsidetemp temp\n&amp;quot;}&lt;br /&gt;
get Aussentemp expect &amp;quot;.*\n*&amp;quot;&lt;br /&gt;
get Aussentemp postproc { $_ }&lt;br /&gt;
#&lt;br /&gt;
# vorlauftemperatur&lt;br /&gt;
get Vorlauf cmd {&amp;quot;r -m 10 status01 temp1.0\n&amp;quot;}&lt;br /&gt;
get Vorlauf expect &amp;quot;\d+\.\d+\n\n&amp;quot;&lt;br /&gt;
get Vorlauf postproc { sprintf(&amp;quot;%5.1f&amp;quot;,$_) }&lt;br /&gt;
#&lt;br /&gt;
# Ruecklauftemperatur&lt;br /&gt;
get Ruecklauf cmd {&amp;quot;r -m 10 status01 temp1.1\n&amp;quot;}&lt;br /&gt;
get Ruecklauf expect &amp;quot;\d+\.\d+\n\n&amp;quot;&lt;br /&gt;
get Ruecklauf postproc { sprintf(&amp;quot;%5.1f&amp;quot;,$_) }&lt;br /&gt;
#&lt;br /&gt;
# Pumpenleistung&lt;br /&gt;
get PumpeWatt cmd {&amp;quot;r -f PumpPower\n&amp;quot;}&lt;br /&gt;
get PumpeWatt expect &amp;quot;\d+\n\n&amp;quot;&lt;br /&gt;
get PumpeWatt postproc { sprintf(&amp;quot;%5.0f&amp;quot;,$_) }&lt;br /&gt;
#&lt;br /&gt;
# Fanspeed&lt;br /&gt;
get Fanspeed cmd {&amp;quot;r -f SDFanSpeed\n&amp;quot;}&lt;br /&gt;
get Fanspeed expect &amp;quot;\d+\n\n&amp;quot;&lt;br /&gt;
get Fanspeed postproc { sprintf(&amp;quot;%5.0f&amp;quot;,$_) }  &lt;br /&gt;
#&lt;br /&gt;
# Heizkurve lesen&lt;br /&gt;
get HKurve cmd {&amp;quot;r -f Hc1HeatCurve\n&amp;quot;}&lt;br /&gt;
get HKurve expect &amp;quot;\d+\.\d+\n&amp;quot;&lt;br /&gt;
get HKurve postproc { sprintf(&amp;quot;%3.1f&amp;quot;,$_) }&lt;br /&gt;
#&lt;br /&gt;
# HeizkurveSchreiben&lt;br /&gt;
get HeizkurveSchreiben cmd {&amp;quot;write 430 Hc1HeatCurve &amp;quot;.Value(&amp;quot;HeizkurveEinstellen&amp;quot;).&amp;quot;\n&amp;quot;}&lt;br /&gt;
get HeizkurveSchreiben expect &amp;quot;.*\n\n&amp;quot;&lt;br /&gt;
get HeizkurveSchreiben postproc  { $_ } &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für jeden Device wird hier festgelegt wie die Befehls Syntax der Abfrage auszusehen hat (cmd) und wie die Ergebnisse zu filtern sind (expect), wie soll das Ausgabeformat sein (postproc). Diese Definitionen bitte in einer neuen Datei &amp;quot;bai00.cfg&amp;quot; speichern.&lt;br /&gt;
&lt;br /&gt;
===ECMD Zyklische Abfrage===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
# Abfrage Timersteuerung, fhem.cfg&lt;br /&gt;
define EBUS.Timer at +*00:15:00 get Aussentemp Aussentemp;;get Vorlauf Vorlauf;;get Ruecklauf Ruecklauf;;get PumpeWatt PumpeWatt;get Fanspeed Fanspeed;;get PumpeWatt PumpeWatt;;get HKurve HKurve&lt;br /&gt;
attr EBUS.Timer group VaillantControl&lt;br /&gt;
attr EBUS.Timer icon time_timer&lt;br /&gt;
attr EBUS.Timer room Vaillant&lt;br /&gt;
attr EBUS.Timer verbose 0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die Daten auch zyklisch vom eBus abholen zu können, wird ein Timer gesetzt. Hier wird alle 15 Minuten abgefragt.&lt;br /&gt;
Tipp: unwichtige Daten wie Druck oder irgendwelche Zähler definiert man in einem zweiten Timer, welcher dann zB. auf 1 Stunde getriggert wird. So wird die Häufigkeit des Zugriffs auf den eBus entlastet.&lt;br /&gt;
&lt;br /&gt;
===ECMD Solar, Warmwasser und Heizkreis===&lt;br /&gt;
&lt;br /&gt;
====ECMD Beispiel Solar====&lt;br /&gt;
Im nachfolgenden Beispiel wird der EBUS über das Modul ECMD angebunden und mit drei Klassen von Kommandos versehen. IP Adresse ist jene des Device wo der eBusd läuft. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
define EBUS ECMD telnet 192.168.0.192:8888&lt;br /&gt;
attr EBUS classdefs HK.SOL.class=/opt/fhem/FHEM/ebus_solar.cfg:HK.WW.class=/opt/fhem/FHEM/ebus_ww.cfg:HK.Hz.class=/opt/fhem/FHEM/ebus_hz.cfg&lt;br /&gt;
attr EBUS room System&lt;br /&gt;
#--&lt;br /&gt;
define HK.Hz ECMDDevice HK.Hz.class&lt;br /&gt;
attr HK.Hz IODev EBUS&lt;br /&gt;
attr HK.Hz group heating&lt;br /&gt;
attr HK.Hz room Verbrauch&lt;br /&gt;
#--&lt;br /&gt;
define HK.WW ECMDDevice HK.WW.class&lt;br /&gt;
attr HK.WW IODev EBUS&lt;br /&gt;
attr HK.WW group heating&lt;br /&gt;
attr HK.WW room Verbrauch&lt;br /&gt;
#--&lt;br /&gt;
define HK.SOL ECMDDevice HK.SOL.class&lt;br /&gt;
attr HK.SOL IODev EBUS&lt;br /&gt;
attr HK.SOL group solarGenerator&lt;br /&gt;
attr HK.SOL room Solaranlage&lt;br /&gt;
#--&lt;br /&gt;
# Diese drei Klassen werden als separate Files mit den in der EBUS-Definition stehenden Dateinamen &#039;&#039;ebus_hz.cfg&#039;&#039;, &#039;&#039;ebus_ww.cfg&#039;&#039; sowie &#039;&#039;ebus_solar.cfg&#039;&#039; angelegt. Alle drei ECMD-Devices werden nun zyklisch (z.B. jede Minute) abgefragt mit&lt;br /&gt;
define EBUS.Timer at +*00:01:00 get HK.Hz A.Temp;;get HK.Hz state;;get HK.WW state;;get HK.SOL state&lt;br /&gt;
attr EBUS.Timer group heatingControl&lt;br /&gt;
attr EBUS.Timer room Verbrauch&lt;br /&gt;
attr EBUS.Timer verbose 0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====ECMD Classdefinition Heizkreis====&lt;br /&gt;
Die erste Datei definiert die FHEM-Readings für die Abfrage von Außentemperatur und Heizkreis:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
# Außentemperatur&lt;br /&gt;
get A.Temp cmd {&amp;quot;cyc broad temp\n&amp;quot;}&lt;br /&gt;
get A.Temp expect &amp;quot;.*&amp;quot;&lt;br /&gt;
get A.Temp postproc { my $rval;\&lt;br /&gt;
 if(($_ eq &amp;quot;&amp;quot;)||($_ eq &amp;quot;no data stored&amp;quot;) ){\&lt;br /&gt;
   $rval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
 }else{\&lt;br /&gt;
   $rval=sprintf(&amp;quot;%5.2f °C&amp;quot;,$_);\&lt;br /&gt;
 }\&lt;br /&gt;
$rval; }&lt;br /&gt;
# Heizkeis HK1&lt;br /&gt;
get state cmd {&amp;quot;cyc mv HK1_temp\n&amp;quot;}&lt;br /&gt;
get state expect &amp;quot;.*&amp;quot;&lt;br /&gt;
get state postproc { my ($bval,$rval,$tval,$pval,$qval,$sval,$xval,$zval);\&lt;br /&gt;
my $hash  = $defs{&amp;quot;%NAME&amp;quot;};\&lt;br /&gt;
 if( ($_ eq &amp;quot;&amp;quot;)||($_ eq &amp;quot;no data stored&amp;quot;) ){\&lt;br /&gt;
    $bval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
    $rval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
    $tval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
    $pval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
    $qval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
    $sval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
    $xval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
    $zval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
 }else{\&lt;br /&gt;
    my @values=split(&#039; &#039;,$_);\&lt;br /&gt;
    if( $values[0] &amp;lt; 15 ){\&lt;br /&gt;
       $bval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
       $rval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
       $tval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
       $pval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
       $qval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
       $sval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
       $xval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
       $zval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
    } else { \&lt;br /&gt;
       $bval = HzBedarf();\&lt;br /&gt;
       $rval = sprintf(&amp;quot;%5.2f °C&amp;quot;,$values[0]);\&lt;br /&gt;
       $tval = sprintf(&amp;quot;%5.2f °C&amp;quot;,$values[1]);\&lt;br /&gt;
       if( $values[2] == 0 ){\&lt;br /&gt;
          $pval = &amp;quot;OFF&amp;quot;;\&lt;br /&gt;
          $qval = &amp;quot;0 0&amp;quot;;\&lt;br /&gt;
       }elsif( $values[2] == 1 ){\&lt;br /&gt;
          $pval = &amp;quot;ON (HK)&amp;quot;;\&lt;br /&gt;
          $qval = &amp;quot;80 0&amp;quot;;\&lt;br /&gt;
       }elsif( $values[2] == 2 ){\&lt;br /&gt;
          $pval = &amp;quot;ON (WW)&amp;quot;;\&lt;br /&gt;
          $qval = &amp;quot;0 80&amp;quot;;\&lt;br /&gt;
       }else{\&lt;br /&gt;
          $pval = &amp;quot;unknown&amp;quot;;\&lt;br /&gt;
          $qval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
       }\&lt;br /&gt;
       $sval = sprintf(&amp;quot;%d&amp;quot;,$values[2]);\&lt;br /&gt;
       $xval = sprintf(&amp;quot;%5.2f %5.2f %s %5.2f&amp;quot;,\&lt;br /&gt;
         $values[0],$values[1],$qval,$bval);\&lt;br /&gt;
       $zval = sprintf(&amp;quot;VL.T %5.2f °C, RL.T %5.2f °C, %s&amp;quot;,\&lt;br /&gt;
         $values[0],$values[1],$pval);\&lt;br /&gt;
    }\&lt;br /&gt;
  }\&lt;br /&gt;
readingsSingleUpdate($hash, &amp;quot;VL.T&amp;quot;, $rval, 1);\&lt;br /&gt;
readingsSingleUpdate($hash, &amp;quot;RL.T&amp;quot;, $tval, 1);\&lt;br /&gt;
readingsSingleUpdate($hash, &amp;quot;Pumpe&amp;quot;, $pval, 1); \&lt;br /&gt;
readingsSingleUpdate($hash, &amp;quot;Pumpe.P&amp;quot;, $qval, 1); \&lt;br /&gt;
readingsSingleUpdate($hash, &amp;quot;Bedarf&amp;quot;, $bval, 1); \&lt;br /&gt;
readingsSingleUpdate($hash, &amp;quot;Status&amp;quot;, $sval, 1);\&lt;br /&gt;
readingsSingleUpdate($hash, &amp;quot;reading&amp;quot;, $xval, 1);\&lt;br /&gt;
$zval; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====ECMD Classdefinition Warmwasserkreis====&lt;br /&gt;
Die zweite Datei definiert die FHEM-Readings für den Warmwasserkreis:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
# Warmwasserkreis&lt;br /&gt;
get state cmd {&amp;quot;cyc broad getstatus_WW\n&amp;quot;}&lt;br /&gt;
get state expect &amp;quot;.*&amp;quot;&lt;br /&gt;
get state postproc { my ($rval,$tval,$bval,$pval,$xval,$zval);\&lt;br /&gt;
my $hash  = $defs{&amp;quot;%NAME&amp;quot;};\&lt;br /&gt;
 if( ($_ eq &amp;quot;&amp;quot;)||($_ eq &amp;quot;no data stored&amp;quot;) ){\&lt;br /&gt;
    $rval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
    $tval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
    $bval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
    $pval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
    $xval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
    $zval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
 }else{\&lt;br /&gt;
    my @values=split(&#039; &#039;,$_);\&lt;br /&gt;
    if( $values[1] &amp;lt; 15 ){\&lt;br /&gt;
       $rval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
       $tval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
       $bval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
       $pval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
       $xval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
       $zval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
    }else {\&lt;br /&gt;
       $rval = sprintf(&amp;quot;%5.2f °C&amp;quot;,$values[0]);\&lt;br /&gt;
       $tval = sprintf(&amp;quot;%5.2f °C&amp;quot;,$values[1]);\&lt;br /&gt;
       $bval = ($values[2] == 80) ? &amp;quot;ON (WW)&amp;quot; : &amp;quot;OFF&amp;quot;;\&lt;br /&gt;
       $pval = ($values[3] == 1) ? &amp;quot;ON&amp;quot; : &amp;quot;OFF&amp;quot;;\&lt;br /&gt;
       $xval = sprintf(&amp;quot;%5.2f %5.2f %5.2f %d %d&amp;quot;,\&lt;br /&gt;
        $values[0],0.0,$values[1],$values[2],$values[3]);\&lt;br /&gt;
       $zval = sprintf(&amp;quot;SF1.T %5.2f °C, %s&amp;quot;,\&lt;br /&gt;
        $values[0],$pval);\&lt;br /&gt;
    }\&lt;br /&gt;
  }\&lt;br /&gt;
$zval; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====ECMD Classdefinition Solarkreis====&lt;br /&gt;
Die dritte Datei definiert die FHEM-Readings für den Solarkreis:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
# Solarkreis&lt;br /&gt;
get state cmd {&amp;quot;cyc broad getstatus_SOL\n&amp;quot;}&lt;br /&gt;
get state expect &amp;quot;.*&amp;quot;&lt;br /&gt;
get state postproc { my ($rval,$pval,$qval,$lval,$yval,$xval,$zval);\&lt;br /&gt;
my $hash  = $defs{&amp;quot;%NAME&amp;quot;};\&lt;br /&gt;
 if( ($_ eq &amp;quot;&amp;quot;)||($_ eq &amp;quot;no data stored&amp;quot;) ){\&lt;br /&gt;
    $rval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
    $pval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
    $qval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
    $lval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
    $yval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
    $xval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
    $zval = &amp;quot;err&amp;quot;;\&lt;br /&gt;
 }else{\&lt;br /&gt;
    my @values=split(&#039; &#039;,$_);\&lt;br /&gt;
    $rval = sprintf(&amp;quot;%5.2f °C&amp;quot;,$values[0]);\&lt;br /&gt;
    $pval = ($values[1] == 1)?&amp;quot;ON&amp;quot;:&amp;quot;OFF&amp;quot;;\&lt;br /&gt;
    $qval = ($values[1] == 1)?65:0;\&lt;br /&gt;
    $lval = sprintf(&amp;quot;%5.2f %%&amp;quot;,$values[2]);\&lt;br /&gt;
    $yval = sprintf(&amp;quot;%d&amp;quot;,$values[3]);\&lt;br /&gt;
    $xval = sprintf(&amp;quot;%5.2f %d %5.2f %d&amp;quot;,\&lt;br /&gt;
      $values[0],$qval,$values[2],$values[3]);\&lt;br /&gt;
    $zval = sprintf(&amp;quot;Coll.T %5.2f °C, %s&amp;quot;,\&lt;br /&gt;
      $values[0],$pval);\&lt;br /&gt;
 }\&lt;br /&gt;
readingsSingleUpdate($hash, &amp;quot;Coll.T&amp;quot;, $rval, 1);\&lt;br /&gt;
readingsSingleUpdate($hash, &amp;quot;Pumpe&amp;quot;, $pval, 1);\&lt;br /&gt;
readingsSingleUpdate($hash, &amp;quot;Pumpe.P&amp;quot;, $qval.&amp;quot; W&amp;quot;, 1);\&lt;br /&gt;
readingsSingleUpdate($hash, &amp;quot;Load&amp;quot;,  $lval, 1);\&lt;br /&gt;
readingsSingleUpdate($hash, &amp;quot;Yield&amp;quot;, $yval, 1);\&lt;br /&gt;
readingsSingleUpdate($hash, &amp;quot;reading&amp;quot;, $xval, 1);\&lt;br /&gt;
$zval; }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ECMD Classdefinition Heizkurve===&lt;br /&gt;
&lt;br /&gt;
Diese Klassendefinition muss in der bai00.cfg gespeichert (angehängt) werden.&lt;br /&gt;
in diesem Beispiel wurde sie für die Vaillant Calormatic 430 definiert, bei einer Calormatic 470 muss der Text entsprechend geändert werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
# HeizkurveSchreiben Calormatic 430, bai00.cfg&lt;br /&gt;
get HeizkurveSchreiben cmd {&amp;quot;write -c 430 Hc1HeatCurve &amp;quot;.Value(&amp;quot;HeizkurveEinstellen&amp;quot;).&amp;quot;\n&amp;quot;}&lt;br /&gt;
get HeizkurveSchreiben expect &amp;quot;.*\n\n&amp;quot;&lt;br /&gt;
get HeizkurveSchreiben postproc  { $_ }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Heizkurve schreiben===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
#fhem.cfg&lt;br /&gt;
define HeizkurveEinstellen dummy&lt;br /&gt;
attr HeizkurveEinstellen group Heizkurve_Einstellen&lt;br /&gt;
attr HeizkurveEinstellen icon temp_control&lt;br /&gt;
attr HeizkurveEinstellen room Vaillant,Heizung&lt;br /&gt;
attr HeizkurveEinstellen setList state:0.20,0.40,0.50,0.60,0.70,0.80,0.90,1.00,1.10,1.20,1.30,1.40,1.50,1.60,1.70&lt;br /&gt;
attr HeizkurveEinstellen webCmd state&lt;br /&gt;
&lt;br /&gt;
define HeizkurveSchreiben_Click notify HeizkurveEinstellen {\&lt;br /&gt;
 fhem(&amp;quot;get HeizkurveSchreiben HeizkurveSchreiben&amp;quot;);;\&lt;br /&gt;
}&lt;br /&gt;
attr HeizkurveSchreiben_Click group heatingControl&lt;br /&gt;
attr HeizkurveSchreiben_Click room Vaillant&lt;br /&gt;
&lt;br /&gt;
define HeizkurveSchreiben ECMDDevice bai00.class&lt;br /&gt;
attr HeizkurveSchreiben IODev EBUS&lt;br /&gt;
attr HeizkurveSchreiben group Heizkurve_Einstellen&lt;br /&gt;
attr HeizkurveSchreiben room Vaillant&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein kleines Demo wie man via ECMD und eBus die Daten zurück in die Register der Therme (Calormatic) schreiben kann. Hier wird die Heizkurve verstellt.&lt;br /&gt;
Ein Dummy wird definiert und über eine setList werden die verschiedenen Kurven vorgegeben. Dank setList kann es zu keinen unerlaubten Eingaben kommen. Über den notify wird die Heizkurve dann schließlich gesetzt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:EBUS_Heizkurve_Einstellen.png|thumb|left|alt=EBUS-USB Interface]]&lt;br /&gt;
Vorsicht: überlegt euch bitte gut was ihr zurück schreiben wollt, es kann unter Umständen gefährlich für eure Hardware oder Gesundheit werden (zB: Warmwasser auf über 60 Grad). Alles was hier durchgeführt wird, führt ihr auf eigene Verantwortung durch.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Wochenprogramme===&lt;br /&gt;
Ein gerne benutztes Feature ist die Änderung der Zeitprogramme des Heizgerätes in FHEM. Die Visualisierung  ist etwas komplexer weil alles x 7 ist und hier Steuerzeichen beim Zusammensetzen des Sendestrings vorkommen die nicht direkt übergeben werden können. Einzelne Timer können damit nicht geschrieben werden, daher wird bei jeder Timereingabe der komplette String geschrieben. Der Einfachheit halber und wegen der Übersicht sind nur 2 Tagesprogramme (Timer) im Beispielcode vorgesehen (die Calormatic kann 3).&lt;br /&gt;
[[Datei:EBUS_Timerprogramme.png|thumb|left|alt=Wochentimer]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#####################&lt;br /&gt;
#  Timer-Programme  #&lt;br /&gt;
#####################&lt;br /&gt;
get Mo cmd {&amp;quot;r -f hc1Timer.Monday\n&amp;quot;}&lt;br /&gt;
get Mo expect &amp;quot;.*\n\n&amp;quot;&lt;br /&gt;
get Mo postproc { Vaillant_Timer($_); }&lt;br /&gt;
get Di cmd {&amp;quot;r -f hc1Timer.Tuesday\n&amp;quot;}&lt;br /&gt;
get Di expect &amp;quot;.*\n\n&amp;quot;&lt;br /&gt;
get Di postproc { Vaillant_Timer($_); }&lt;br /&gt;
get Mi cmd {&amp;quot;r -f hc1Timer.Wednesday\n&amp;quot;}&lt;br /&gt;
get Mi expect &amp;quot;.*\n\n&amp;quot;&lt;br /&gt;
get Mi postproc { Vaillant_Timer($_); }&lt;br /&gt;
get Do cmd {&amp;quot;r -f hc1Timer.Thursday\n&amp;quot;}&lt;br /&gt;
get Do expect &amp;quot;.*\n\n&amp;quot;&lt;br /&gt;
get Do postproc { Vaillant_Timer($_); }&lt;br /&gt;
get Fr cmd {&amp;quot;r -f hc1Timer.Friday\n&amp;quot;}&lt;br /&gt;
get Fr expect &amp;quot;.*\n\n&amp;quot;&lt;br /&gt;
get Fr postproc { Vaillant_Timer($_); }&lt;br /&gt;
get Sa cmd {&amp;quot;r -f hc1Timer.Saturday\n&amp;quot;}&lt;br /&gt;
get Sa expect &amp;quot;.*\n\n&amp;quot;&lt;br /&gt;
get Sa postproc { Vaillant_Timer($_); }&lt;br /&gt;
get So cmd {&amp;quot;r -f hc1Timer.Sunday\n&amp;quot;}&lt;br /&gt;
get So expect &amp;quot;.*\n\n&amp;quot;&lt;br /&gt;
get So postproc { Vaillant_Timer($_); }&lt;br /&gt;
get ZeitfensterSchreibenMo cmd {&amp;quot;write -c 430 hc1Timer.Monday &amp;quot;.ReadingsVal(&amp;quot;TimeMo&amp;quot;,&amp;quot;HHMM1&amp;quot;,0) . chr(59) . ReadingsVal(&amp;quot;TimeMo&amp;quot;,&amp;quot;HHMM2&amp;quot;,0) . chr(59) . ReadingsVal(&amp;quot;TimeMo&amp;quot;,&amp;quot;HHMM3&amp;quot;,0) . chr(59) . ReadingsVal(&amp;quot;TimeMo&amp;quot;,&amp;quot;HHMM4&amp;quot;,0) . chr(59) . &amp;quot;24:00&amp;quot; . chr(59) . &amp;quot;24:00&amp;quot; . chr(59) . &amp;quot;selected\n&amp;quot;}&lt;br /&gt;
get ZeitfensterSchreibenMo expect &amp;quot;.*\n\n&amp;quot;&lt;br /&gt;
get ZeitfensterSchreibenMo postproc  { $_ }&lt;br /&gt;
get ZeitfensterSchreibenDi cmd {&amp;quot;write -c 430 hc1Timer.Tuesday &amp;quot;.ReadingsVal(&amp;quot;TimeDi&amp;quot;,&amp;quot;HHMM1&amp;quot;,0) . chr(59) . ReadingsVal(&amp;quot;TimeDi&amp;quot;,&amp;quot;HHMM2&amp;quot;,0) . chr(59) . ReadingsVal(&amp;quot;TimeDi&amp;quot;,&amp;quot;HHMM3&amp;quot;,0) . chr(59) . ReadingsVal(&amp;quot;TimeDi&amp;quot;,&amp;quot;HHMM4&amp;quot;,0) . chr(59) . &amp;quot;24:00&amp;quot; . chr(59) . &amp;quot;24:00&amp;quot; . chr(59) . &amp;quot;selected\n&amp;quot;}&lt;br /&gt;
get ZeitfensterSchreibenDi expect &amp;quot;.*\n\n&amp;quot;&lt;br /&gt;
get ZeitfensterSchreibenDi postproc  { $_ }&lt;br /&gt;
get ZeitfensterSchreibenMi cmd {&amp;quot;write -c 430 hc1Timer.Wednesday &amp;quot;.ReadingsVal(&amp;quot;TimeMi&amp;quot;,&amp;quot;HHMM1&amp;quot;,0) . chr(59) . ReadingsVal(&amp;quot;TimeMi&amp;quot;,&amp;quot;HHMM2&amp;quot;,0) . chr(59) . ReadingsVal(&amp;quot;TimeMi&amp;quot;,&amp;quot;HHMM3&amp;quot;,0) . chr(59) . ReadingsVal(&amp;quot;TimeMi&amp;quot;,&amp;quot;HHMM4&amp;quot;,0) . chr(59) . &amp;quot;24:00&amp;quot; . chr(59) . &amp;quot;24:00&amp;quot; . chr(59) . &amp;quot;selected\n&amp;quot;}&lt;br /&gt;
get ZeitfensterSchreibenMi expect &amp;quot;.*\n\n&amp;quot;&lt;br /&gt;
get ZeitfensterSchreibenMi postproc  { $_ }&lt;br /&gt;
get ZeitfensterSchreibenDo cmd {&amp;quot;write -c 430 hc1Timer.Thursday &amp;quot;.ReadingsVal(&amp;quot;TimeDo&amp;quot;,&amp;quot;HHMM1&amp;quot;,0) . chr(59) . ReadingsVal(&amp;quot;TimeDo&amp;quot;,&amp;quot;HHMM2&amp;quot;,0) . chr(59) . ReadingsVal(&amp;quot;TimeDo&amp;quot;,&amp;quot;HHMM3&amp;quot;,0) . chr(59) . ReadingsVal(&amp;quot;TimeDo&amp;quot;,&amp;quot;HHMM4&amp;quot;,0) . chr(59) . &amp;quot;24:00&amp;quot; . chr(59) . &amp;quot;24:00&amp;quot; . chr(59) . &amp;quot;selected\n&amp;quot;}&lt;br /&gt;
get ZeitfensterSchreibenDo expect &amp;quot;.*\n\n&amp;quot;&lt;br /&gt;
get ZeitfensterSchreibenDo postproc  { $_ }&lt;br /&gt;
get ZeitfensterSchreibenFr cmd {&amp;quot;write -c 430 hc1Timer.Friday &amp;quot;.ReadingsVal(&amp;quot;TimeFr&amp;quot;,&amp;quot;HHMM1&amp;quot;,0) . chr(59) . ReadingsVal(&amp;quot;TimeFr&amp;quot;,&amp;quot;HHMM2&amp;quot;,0) . chr(59) . ReadingsVal(&amp;quot;TimeFr&amp;quot;,&amp;quot;HHMM3&amp;quot;,0) . chr(59) . ReadingsVal(&amp;quot;TimeFr&amp;quot;,&amp;quot;HHMM4&amp;quot;,0) . chr(59) . &amp;quot;24:00&amp;quot; . chr(59) . &amp;quot;24:00&amp;quot; . chr(59) . &amp;quot;selected\n&amp;quot;}&lt;br /&gt;
get ZeitfensterSchreibenFr expect &amp;quot;.*\n\n&amp;quot;&lt;br /&gt;
get ZeitfensterSchreibenFr postproc  { $_ }&lt;br /&gt;
get ZeitfensterSchreibenSa cmd {&amp;quot;write -c 430 hc1Timer.Saturday &amp;quot;.ReadingsVal(&amp;quot;TimeSa&amp;quot;,&amp;quot;HHMM1&amp;quot;,0) . chr(59) . ReadingsVal(&amp;quot;TimeSa&amp;quot;,&amp;quot;HHMM2&amp;quot;,0) . chr(59) . ReadingsVal(&amp;quot;TimeSa&amp;quot;,&amp;quot;HHMM3&amp;quot;,0) . chr(59) . ReadingsVal(&amp;quot;TimeSa&amp;quot;,&amp;quot;HHMM4&amp;quot;,0) . chr(59) . &amp;quot;24:00&amp;quot; . chr(59) . &amp;quot;24:00&amp;quot; . chr(59) . &amp;quot;selected\n&amp;quot;}&lt;br /&gt;
get ZeitfensterSchreibenSa expect &amp;quot;.*\n\n&amp;quot;&lt;br /&gt;
get ZeitfensterSchreibenSa postproc  { $_ }&lt;br /&gt;
get ZeitfensterSchreibenSo cmd {&amp;quot;write -c 430 hc1Timer.Sunday &amp;quot;.ReadingsVal(&amp;quot;TimeSo&amp;quot;,&amp;quot;HHMM1&amp;quot;,0) . chr(59) . ReadingsVal(&amp;quot;TimeSo&amp;quot;,&amp;quot;HHMM2&amp;quot;,0) . chr(59) . ReadingsVal(&amp;quot;TimeSo&amp;quot;,&amp;quot;HHMM3&amp;quot;,0) . chr(59) . ReadingsVal(&amp;quot;TimeSo&amp;quot;,&amp;quot;HHMM4&amp;quot;,0) . chr(59) . &amp;quot;24:00&amp;quot; . chr(59) . &amp;quot;24:00&amp;quot; . chr(59) . &amp;quot;selected\n&amp;quot;}&lt;br /&gt;
get ZeitfensterSchreibenSo expect &amp;quot;.*\n\n&amp;quot;&lt;br /&gt;
get ZeitfensterSchreibenSo postproc  { $_ }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dieses Beispiel ist für eine Vaillant Calormatic 430, bei einer Calormatic 470 müssen die entsprechenden Zeilen angepasst werden (write -c 430....) .&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
#########################################################&lt;br /&gt;
#&lt;br /&gt;
#                      Vaillant_Timer&lt;br /&gt;
# Datenstring = 03:30;19:30;20:00;20:00;20:00;20:00;Mo-Fr&lt;br /&gt;
#########################################################&lt;br /&gt;
# 99_myUtils.pm&lt;br /&gt;
sub Vaillant_Timer($)&lt;br /&gt;
{&lt;br /&gt;
 my @values=split(/[; ]/,$_);&lt;br /&gt;
 #-- suppress leading zero ?&lt;br /&gt;
 for(my $i=0;$i&amp;lt;7;$i++){ &lt;br /&gt;
   $values[$i]=~s/^0//;&lt;br /&gt;
 }&lt;br /&gt;
 my $sval=sprintf(&amp;quot;%s-%s&amp;quot;,$values[0],$values[1]);&lt;br /&gt;
 $sval  .=sprintf(&amp;quot;, %s-%s&amp;quot;,$values[2],$values[3])&lt;br /&gt;
   if($values[2] ne $values[3]);&lt;br /&gt;
 $sval  .=sprintf(&amp;quot;, %s-%s&amp;quot;,$values[4],$values[5])&lt;br /&gt;
   if($values[4] ne $values[5]);&lt;br /&gt;
 return $sval;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oben gezeigtes Beispiel benötigt den Vaillant_Timer (von Prof. Peter Henning). Dieser Code muss in die 99_myUtils.pm gespeichert werden. Unter diesem [http://forum.fhem.de/index.php/topic,41064.msg336911.html#msg336911 Link] gibt es weiterreichende Informationen zu diesem Thema.&lt;br /&gt;
&lt;br /&gt;
==GAEBUS==&lt;br /&gt;
&lt;br /&gt;
GAEBUS ist ein Perl Modul welches es in FHEM ermöglicht sämtliche Daten des eBus bequem zu konfigurieren.&lt;br /&gt;
Das Protokoll ist ebenso wie bei ECMD Telnet, aber die Einrichtung unterscheidet sich sehr stark und wird von den meisten Anwendern einfacher empfunden. Allerdings ist im derzeitigen Entwicklungsstand der GAEBUS noch nicht so flexibel wie ECMD. Das betrifft vor allem die Datenfilterung und Datenformatierung.&lt;br /&gt;
&lt;br /&gt;
Eine genaue Installations- und Einrichtungsanleitung kann aus diesem [http://forum.fhem.de/index.php/topic,46098.msg381580.html#msg381580 Forums-Thread] entnommen werden.&lt;br /&gt;
&lt;br /&gt;
Den Diskussionsthread des Autors findet man [http://forum.fhem.de/index.php/topic,41064.msg332654.html#msg332654 hier].&lt;br /&gt;
&lt;br /&gt;
==FHEM Tablet UI (FTUI)==&lt;br /&gt;
&lt;br /&gt;
Die [http://forum.fhem.de/index.php/board,71.0.html Tablet-UI] ist ein ansprechendes HTML Frontend welches durch intensive Betreuung des Autors sehr gepflegt wird. Mit sogenannten Widgets kann hier auch für ungeübte schnell ein optisch ansprechendes Ergebnis erzielt werden. Die Tablet-UI stellt mit ihren Widgets direkt die Verbindung zu den Readings in Fhem her. Alle Messwerte die hier dargestellt werden sollen, müssen daher vorher in Fhem bereits definiert werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:EBUSD_FTUI.png|thumb|left|alt=eBus Platine]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der komplette Demo-Code der abgebildeten Seite kann hier downgeloadet werden: [http://forum.fhem.de/index.php/topic,46098.msg383071.html#msg383071 Tablet-UI]&lt;br /&gt;
&lt;br /&gt;
=Tipps &amp;amp; Tricks=&lt;br /&gt;
&lt;br /&gt;
==eBusd Bedeutung der Telegramme==&lt;br /&gt;
&lt;br /&gt;
Der ebusd wird entweder über &#039;&#039;ebusctl&#039;&#039; oder über &#039;&#039;telnet&#039;&#039; durch Klartextkommandos abgefragt, die lauten z.B. &#039;&#039;read -c broadcast outsidetemp&#039;&#039;.&lt;br /&gt;
*In CSV-Dateien in /etc/ebusd wird festgelegt, in welche bzw. aus welcher binären Folge ein Kommando übersetzt wird. Konkret handelt es sich z.B. bei &#039;&#039;read -c broadcast outsidetemp&#039;&#039; um die Außentemperatur, die im Heizungssystem zyklisch als Broadcast gesendet wird und vom ebusd einfach mitgelesen wird.&lt;br /&gt;
*Für unterschiedliche Heizungssysteme werden unterschiedliche CSV-Dateien benötigt. &lt;br /&gt;
Für die Übersetzung der binären Daten in den Klartext ist es notwendig die entsprechenden Konfigurationsdateien(CSV-Files) zu installieren.&lt;br /&gt;
Den aktuellen Stand dieser Dateien findet ihr im [https://github.com/john30/ebusd-configuration/releases GIT von John].&lt;br /&gt;
&lt;br /&gt;
Desweiteren kann der eBusd gestartet werden, und zwar mit den Optionen -f (läuft im Vordergrund) und --loglevel debug (alles wird geloggt). Diese Optionen produzieren Unmengen an Daten und damit werden auch alle empfangenen Telegramme protokolliert, z.B.  &lt;br /&gt;
 10feb5160301f00d44&lt;br /&gt;
Hierin bedeutet&lt;br /&gt;
{|&lt;br /&gt;
|Byte&lt;br /&gt;
|Bedeutung&lt;br /&gt;
|hier&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|Adresse des Senders&lt;br /&gt;
|Zentrale&lt;br /&gt;
|-&lt;br /&gt;
|0xfe&lt;br /&gt;
|Adresse des Empfängers&lt;br /&gt;
|Alle Geräte&lt;br /&gt;
|-&lt;br /&gt;
|0xb5&lt;br /&gt;
|Herstellercode&lt;br /&gt;
|Vaillant&lt;br /&gt;
|-&lt;br /&gt;
|0x16&lt;br /&gt;
|Klasse des Kommandos&lt;br /&gt;
|Broadcast&lt;br /&gt;
|-&lt;br /&gt;
|0x03&lt;br /&gt;
|Anzahl Datenbytes&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|0x01&lt;br /&gt;
|Bedeutung des Wertes&lt;br /&gt;
|outsidetemp = Außentemperatur&lt;br /&gt;
|-&lt;br /&gt;
|0xf0&lt;br /&gt;
|LSB des Wertes&lt;br /&gt;
|240&lt;br /&gt;
|-&lt;br /&gt;
|0x0d&lt;br /&gt;
|MSB des Wertes&lt;br /&gt;
|12&lt;br /&gt;
|-&lt;br /&gt;
|0x44&lt;br /&gt;
|CRC&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
Damit ergibt sich in diesem Falle eine Außentemperatur von (12*256 + 240)/256 = 12,9375 Grad Celsius. In der zugehörigen CSV-Datei wird dem ebusd diese Übersetzung mitgeteilt durch eine Zeile der Form&lt;br /&gt;
 u,broadcast,outsidetemp,Außentemperatur,,FE,B516,01,temp2,m,D2B,,°C,Temperatur&lt;br /&gt;
Diese CSV-Dateien können z.B. mit OpenOffice aus einem Spreadsheet generiert werden, indem dieses als CSV-Datei mit Separator &amp;quot;,&amp;quot; gespeichert wird. &lt;br /&gt;
*Bei einem vollkommen unbekannten Heizungssystem sollte man den Hersteller fragen, welche Codes er verwendet&lt;br /&gt;
*Für Vaillant- und Wolf- Heizungssysteme liegen in dem oben genannten Verzeichnis ein paar Beispiele vor, die man als Ausgangspunkt nehmen kann.&lt;br /&gt;
&lt;br /&gt;
==Serieller Konverter==&lt;br /&gt;
&lt;br /&gt;
[[Datei:EBUS_RS232_Konverter.png|thumb|left|alt=eBus Platine]]&lt;br /&gt;
Es hat sich als nicht praktikabel erwiesen, den eBus mit einem Pegelwandler direkt an den seriellen GPIO-Port des Raspberry Pi anzuschließen. Die ständig einlaufenden Synchronisationssignale auf dem eBus, sowie die interne Verarbeitung der GPIO-Signale im Raspberry führen zu einer intolerablen Latenz, d.h., die eBus-Signale kommen verspätet bei der Software eBusd an (bis zu 90 Minuten wurden beobachtet). Stattdessen sollte grundsätzlich ein Seriell-USB-Konverter verwendet werden und der Raspberry Pi über einen USB-Port mit dem eBus verbunden werden.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==USB Device und Port unter Linux ermitteln==&lt;br /&gt;
&lt;br /&gt;
Die einfachste Art den USB Device zu ermitteln erfolgt direkt am Raspberry Pi mit dem Befehl &amp;quot;lsusb&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 pi@raspberry2 ~ $ lsusb&lt;br /&gt;
 Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.&lt;br /&gt;
 Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub&lt;br /&gt;
 Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.&lt;br /&gt;
 Bus 001 Device 004: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC&lt;br /&gt;
&lt;br /&gt;
in diesem Beispiel ist das der Device 004, dieser FT232 lauscht am eBus und ist mit dem eBus-Konverter verbunden.&lt;br /&gt;
&lt;br /&gt;
Der USB Port kann mit der folgenden Kommandozeile ermittelt werden:&lt;br /&gt;
 sudo dmesg | grep -i tty&lt;br /&gt;
Die Ausgabe sieht wie folgt aus:&lt;br /&gt;
 [553999.530995] usb 1-1.3: FTDI USB Serial Device converter now attached to &#039;&#039;&#039;ttyUSB0&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==eBusd==&lt;br /&gt;
===Prüfen der eBusd Konfigurationsdateien===&lt;br /&gt;
Mit dem Parameter &amp;quot;&#039;&#039;&#039;--checkconfig --scanconfig&#039;&#039;&#039;&amp;quot; kann die Installation der benutzten CSV Dateien am Raspberyy Pi überprüft werden. Vor allem wird hier angezeigt wieviele Messages übersetzt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
pi@raspberry2 ~ $ ebusd --checkconfig --scanconfig&lt;br /&gt;
2016-01-22 17:14:12.619 [main notice] Performing configuration check...&lt;br /&gt;
2016-01-22 17:14:19.336 [main notice] found messages: 4440 (416 conditional on 89 conditions, 2 poll, 64 update)&lt;br /&gt;
&lt;br /&gt;
pi@raspberry2 ~ $ ebusctl info&lt;br /&gt;
version: ebusd 2.0.0ea7efc&lt;br /&gt;
signal: acquired&lt;br /&gt;
symbol rate: 24&lt;br /&gt;
masters: 3&lt;br /&gt;
messages: 426&lt;br /&gt;
address 03: master #3&lt;br /&gt;
address 08: slave #3, scanned &amp;quot;MF=Vaillant;ID=BAI00;SW=0518;HW=7401&amp;quot;, loaded  &amp;quot;vaillant/08.bai.HW7401.csv&amp;quot;&lt;br /&gt;
address 10: master #6&lt;br /&gt;
address 15: slave #6, scanned &amp;quot;MF=Vaillant;ID=43000;SW=0215;HW=2002&amp;quot;, loaded &amp;quot;vaillant/15.430.csv&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Info hingegen zeigt genau welche CSV Dateien geladen worden sind und ihre Soft- und Hardewareversion.&lt;br /&gt;
&lt;br /&gt;
===Bedeutung von &amp;quot;unknown MS&amp;quot; in der eBusd Logdatei===&lt;br /&gt;
Der Autor des eBus Dämons ist ständig bemüht die Geräte der unterschiedlichen Hersteller alle zu erfassen und so die Konfigurationsdateien zu ergänzen. Je nach Hard- und Softwarekonfiguration können  Broadcast Meldungen vom eBus kommen die in der _broadcast.csv noch nicht übersetzt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
2015-12-30 21:48:57.662 [update notice] unknown MS cmd: 1008b5110101 / 09404210004a620000ff&lt;br /&gt;
2015-12-30 21:48:59.670 [update notice] unknown BC cmd: 10feb516080001492130120315&lt;br /&gt;
2015-12-30 21:48:59.923 [update notice] unknown MS cmd: 1008b512020064 / 00&lt;br /&gt;
2015-12-30 21:49:01.711 [update notice] unknown MS cmd: 1008b5100900003c7affff00ff00 / 0101&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Meldungen haben in der Regel für den weiteren Verlauf der Kommunikation über den eBus keinen Einfluß und ist keine Fehlfunktion der Schaltung oder Platine!&lt;br /&gt;
&lt;br /&gt;
===Bedeutung von &amp;quot;signal lost&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
pi@raspberrypi /etc/init.d $ sudo ebusd -f -c /tmp --logareas bus --loglevel info -d /dev/ttyUSB0&lt;br /&gt;
2016-01-18 22:38:56.348 [bus notice] signal acquired&lt;br /&gt;
2016-01-18 22:38:56.477 [bus notice] new master 10, master count 2&lt;br /&gt;
2016-01-18 22:38:56.481 [bus notice] new master 3f, master count 3&lt;br /&gt;
2016-01-18 22:39:02.051 [bus error] signal lost&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei dieser Meldung verliert der USB Konverter nach 20-Sekunden die Verbindung zum Raspberry Pi und produziert dann den Logeintrag.&lt;br /&gt;
[http://forum.fhem.de/index.php/topic,46098.msg394313.html#msg394313 Lösungvorschlag]&lt;br /&gt;
&lt;br /&gt;
===ERR: unable to load===&lt;br /&gt;
&lt;br /&gt;
 2016-01-17 19:04:03.961 [main error] unable to load scan config 08: no file from /etc/ebusd/vaillant with prefix 08. matches ID &amp;quot;bai00&amp;quot;, SW0604, HW5502&lt;br /&gt;
&lt;br /&gt;
Ebusd wird gestartet, findet aber ein Konfigurations File (CSV) nicht.&lt;br /&gt;
&lt;br /&gt;
Die eBusd Konfigurationsdateien könne nach [[#eBusd Konfigurationsdateien (CSV-Files)|diesem]] Vorgehen installiert werden.&lt;br /&gt;
Die Konfigurationsdateien aus dem Git neu laden und installieren.&lt;br /&gt;
[http://forum.fhem.de/index.php/topic,46098.msg394270.html#msg394270 Lösungvorschlag]&lt;br /&gt;
&lt;br /&gt;
===ERR: duplicate Entry===&lt;br /&gt;
&lt;br /&gt;
===ERR: End of input reached===&lt;br /&gt;
&lt;br /&gt;
Die CSV Dateien wurden [http://forum.fhem.de/index.php/topic,46098.msg383450/topicseen.html#msg383450 fehlerhaft installiert] oder sind defekt!&lt;br /&gt;
Eine Neuinstallation dieser Dateien ist erforderlich!&lt;br /&gt;
&lt;br /&gt;
 Error reading &amp;quot;/etc/ebusd/vaillant/05.vd3.csv&amp;quot; line 1 field 1 value &amp;quot;05.vd4.csv&amp;quot;: ERR: end of input reached&lt;br /&gt;
 Erroneous item is here:&lt;br /&gt;
 05.vd4.csv&lt;br /&gt;
  ^&lt;br /&gt;
 Error reading &amp;quot;/etc/ebusd/vaillant/15.hep.csv&amp;quot; line 1 field 1 value &amp;quot;15.sdr_p.csv&amp;quot;: ERR: end of input reached&lt;br /&gt;
 Erroneous item is here:&lt;br /&gt;
 15.sdr_p.csv&lt;br /&gt;
  ^&lt;br /&gt;
&lt;br /&gt;
===BUS ERR send to 15===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
2016-01-16 19:20:28.575 [bus notice] new master 03, master count 4&lt;br /&gt;
2016-01-16 19:20:28.575 [update notice] unknown MS cmd: 1008b513020508 / 00&lt;br /&gt;
2016-01-16 19:20:29.413 [update notice] unknown MS cmd: 100ab504010d / 054201008037&lt;br /&gt;
2016-01-16 19:20:32.398 [bus error] send to 08: ERR: read timeout, retry&lt;br /&gt;
2016-01-16 19:20:33.005 [bus error] send to 08: ERR: read timeout, retry&lt;br /&gt;
2016-01-16 19:20:33.613 [bus error] send to 08: ERR: read timeout, retry&lt;br /&gt;
2016-01-16 19:20:34.859 [bus error] send to 08: ERR: read timeout&lt;br /&gt;
2016-01-16 19:20:34.859 [main error] scan config 08 message: ERR: read timeout&lt;br /&gt;
2016-01-16 19:20:37.017 [main notice] read common config file /etc/ebusd/vaillant/scan.csv&lt;br /&gt;
2016-01-16 19:20:37.019 [main notice] read common config file /etc/ebusd/vaillant/broadcast.csv&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Fehlermeldung (read timeout) kann verschiedene Ursachen haben, meist liegt der Fehler in einer fehlerhaften Verkabelung.&lt;br /&gt;
[http://forum.fhem.de/index.php/topic,46098.msg393547.html#msg393547 Lösungsvorschlag]&lt;br /&gt;
&lt;br /&gt;
=Systemarchitektur / Systemdesign=&lt;br /&gt;
Es muss sich jeder vorher überlegen, ob man für den eBus einen eigenen Rechner Raspberry Pi nimmt, oder auf der bestehenden FHEM Installation laufen lassen will. Eine Trennung bietet mehrere Vorteile die dann speziell im Testbetrieb den normalen Smart-Home Betrieb nicht beinflussen.&lt;br /&gt;
[[Datei:EBUS_Konfiguration.png|thumb|left|alt=eBus Konfiguration]]&lt;br /&gt;
Hier eine Konfiguration von Fhem und das Zusammenspiel mit eBusd via ECMD. Das soll aber jeder so handhaben wie es am Besten in das eigene Konzept passt.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Werkzeuge / Tools=&lt;br /&gt;
&lt;br /&gt;
==PSPad==&lt;br /&gt;
[http://www.pspad.com/de/ Pspad] ist ein besonders auf Programmierer zugeschnittener unicode-fähiger Editor für Microsoft Windows, welcher in der Lage ist auch per FTP die Dateien direkt zu editieren und zu schreiben ohne den Umweg sie vorher kopieren zu müssen! Besonders wichtig ist neben einem Syntaxhighlighter das er Linuxkonform ist und die Steuerzeichen am Zeilenende richtig interpretiert.&lt;br /&gt;
&lt;br /&gt;
Hier zwei wichtige Infos zur Einrichtung des PSPad.&lt;br /&gt;
&lt;br /&gt;
[[Datei:EBUS_PSPad_FTP.png|thumb|left|alt=eBus Platine]]&lt;br /&gt;
&lt;br /&gt;
Im Tab &amp;quot;&#039;&#039;&#039;FTP&#039;&#039;&#039;&amp;quot; unten mit der rechten Maustaste auf die weiße Fläche klicken und in dem neu geöffneten Fenster &amp;quot;FTP verbinden&amp;quot; wählen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:EBUS_PSPad_FTP2.png|thumb|left|alt=eBus Platine]]&lt;br /&gt;
Es öffnet sich ein Fenster mit den Verbindungsdaten des FTP Servers. Nicht vergessen, das unten markierte Häckchen &amp;quot;&#039;&#039;&#039;Verbindung halten&#039;&#039;&#039; ...&amp;quot; zu markieren. Es wird dann alle 60 Sekunden ein NOOP Signal gesendet und die Verbindung wird nach einem Timeout nicht jedes Mal beendet.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Filezilla==&lt;br /&gt;
Ebenso wie PSPad wird es für viele Arbeiten am Raspberry und eBusd eine Erleichterung sein manche Dateien direkt zu kopieren oder am PC zu sichern.&lt;br /&gt;
[https://filezilla-project.org/ Filezilla] beherrscht ebenfalls das &#039;&#039;&#039;FTP Protokoll&#039;&#039;&#039; und speichert die Verbindungsdaten in einem Profil.&lt;br /&gt;
&lt;br /&gt;
[[Datei:EBUS_Filezilla_FTP.png|thumb|left|alt=eBus Platine]]&lt;br /&gt;
Links oben öffnet man den Servermanager und wählt (links unten) &amp;quot;neuer Server&amp;quot;. Man gibt die Verbindungsdaten des Raspberry ein und drückt &amp;quot;speichern&amp;quot;. Das Verbindungs Profil steht nun im Servermanager als &amp;quot;Raspberry&amp;quot; zur Verfügung und die Verbindung kann nun mit einem Doppelklick geöffnet werden. Dateien können nun durch einfaches Drag &amp;amp; Drop zwischen linken (lokales Laufwerk am PC) und rechten Dateifenster (in diesem Fall Raspberry) bequem kopiert werden.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Putty==&lt;br /&gt;
[http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html PuTTY] ist ein SSH Client welcher neben Secure Shell auch Telnet, Remote login und eine serielle Schnittstelle enthält. Als Tipp sei hier erwähnt, dass hier einige sehr nützliche Features zur Verfügung stehen:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;rechte Maustaste&#039;&#039;&#039; = Zwischenablage wird ins Terminalfenster kopiert &lt;br /&gt;
* &#039;&#039;&#039;Text mit Maus markieren&#039;&#039;&#039; = in Zwischenablage kopieren&lt;br /&gt;
* &#039;&#039;&#039;Pfeiltasten Auf/Ab&#039;&#039;&#039; = die letzten Befehle wiederholen, durch die Liste steppen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:EBUS_Putty.png|thumb|left|alt=eBus Platine]]&lt;br /&gt;
Ebenso können mit Putty mehrere Terminalfenster parallel geöffnet werden. Diese Methode ist bei der Kalibrierung des Potis im Raw-Modus sehr von Vorteil.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Weiterführende Links=&lt;br /&gt;
Diskussionsthread aus dem Forum:&lt;br /&gt;
*[http://forum.fhem.de/index.php/topic,46098.0.html eBus Schaltung in Betrieb nehmen!]&lt;br /&gt;
*[http://forum.fhem.de/index.php/topic,29737.0.html Läuft: Heizung mit eBus-Schnittstelle]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Other Components]]&lt;br /&gt;
[[Kategorie:Heizungssteuerung]]&lt;br /&gt;
[[Kategorie:Interfaces]]&lt;/div&gt;</summary>
		<author><name>Mikawood</name></author>
	</entry>
</feed>