<?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=Yokurt</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=Yokurt"/>
	<link rel="alternate" type="text/html" href="http://wiki.fhem.de/wiki/Spezial:Beitr%C3%A4ge/Yokurt"/>
	<updated>2026-04-10T19:05:05Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HomeMatic_Peering_Beispiele&amp;diff=29153</id>
		<title>HomeMatic Peering Beispiele</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HomeMatic_Peering_Beispiele&amp;diff=29153"/>
		<updated>2019-01-18T20:41:32Z</updated>

		<summary type="html">&lt;p&gt;Yokurt: Tippfehler im Kommando &amp;quot;set &amp;lt;device&amp;gt; regSet intKeyVisib visib&amp;quot; korrigiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dieser Artikel beschreibt wie mit FHEM Homematic Sensoren und Aktoren gepeert werden können. Peering ist nicht zu verwechseln mit Pairing, d.h. dem Verknüpfen von Homematic Geräten mit einer Zentrale (wie beispielsweise FHEM). Details zum Pairing findet man [[HomeMatic_Devices_pairen|&#039;&#039;&#039;hier&#039;&#039;&#039;]].&lt;br /&gt;
&lt;br /&gt;
= Grundlagen =&lt;br /&gt;
Beim &#039;&#039;Peering&#039;&#039; (deutsch sinngemäß: Verbindung von Gleichen) handelt es sich um das Verknüpfen von Kanälen (Channels) verschiedender HomeMatic-Geräte, um diese auch ohne Zentrale kommunizieren zu lassen. Nach dem Peering sendet meist ein Sensorkanal (remote, push-button, Bewegungsmelder,...) einen Trigger an einen Aktorkanal des anderen Gerätes. &lt;br /&gt;
Besonderheiten:&lt;br /&gt;
* peeren kann man nur Channels, nicht HomeMatic-Geräte. Die Peer-Listen der verschiedenen Kanäle eines Gerätes sind unabhängig voneinander.&lt;br /&gt;
* gepeert werden immer ein oder mehrere Sensorkanäle mit einem oder mehreren Aktorkanälen&lt;br /&gt;
* der Sensor sendet einen Trigger, evtl. mit einem Zusatzwert. Es ist &#039;&#039;immer&#039;&#039; der Aktorkanal, der festlegt, welche Aktion ergriffen wird. Ein Button kann demnach gleichzeitig ein Einschalter für einen Aktor und ein Ausschalter für einen anderen Aktor sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|&#039;&#039;&#039;Achtung:&#039;&#039;&#039; Das in vielen mitgelieferten HomeMatic-Anleitungen beschriebene Peering von Kanälen ohne Zentrale funktioniert nur, wenn keines der beiden Geräte gepairt ist. Im Folgenden gehen wir davon aus, dass beide Geräte bereits mit einer Homematic-Zentrale (z.B. FHEM) [[HomeMatic_Devices_pairen|gepairt]] sind.}}&lt;br /&gt;
&lt;br /&gt;
== Kommandos ==&lt;br /&gt;
&lt;br /&gt;
=== peerChan ===&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;sensChan&amp;gt; peerChan 0 &amp;lt;actChan&amp;gt; [single|dual] [set|unset]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;peerChan&amp;lt;/code&amp;gt; peert (verbindet) einen Sensorkanal mit einem Aktorkanal.&lt;br /&gt;
Dabei ist &amp;lt;code&amp;gt;&amp;amp;lt;sensChan&amp;amp;gt;&amp;lt;/code&amp;gt; der Name des Sensorkanals und &amp;lt;code&amp;gt;&amp;amp;lt;actChan&amp;amp;gt;&amp;lt;/code&amp;gt; der Name des Aktorkanals.&lt;br /&gt;
&lt;br /&gt;
* Mit dem Schlüsselwort &#039;&#039;single&#039;&#039; wird genau dieser Sensorkanal gepeert. &lt;br /&gt;
* Mit dem Schlüsselwort &#039;&#039;dual&#039;&#039; werden zwei zusammengehörende Sensorkanäle mit dem Aktorkanal verknüpft. Die beiden Sensorkanäle lösen unterschiedliche Aktionen aus, beispielsweise &#039;&#039;an&#039;&#039; und &#039;&#039;aus&#039;&#039;.&lt;br /&gt;
* Das Schlüsselwort &#039;&#039;set&#039;&#039; legt das Peering an, das Schlüsselwort &#039;&#039;unset&#039;&#039; hebt es auf.&lt;br /&gt;
&lt;br /&gt;
Das Kommando unterliegt den allgemeinen [[HomeMatic#Kommunikation|Regeln]]. Es wirkt auf zwei Geräte gleichzeitig, weshalb beide Geräte beobachtet werden sollten – ggf. muss an einem oder beiden Geräten die Anlerntaste gedrückt werden.&lt;br /&gt;
&lt;br /&gt;
=== peerIODev ===&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;actChan&amp;gt; peerIODev &amp;lt;IO&amp;gt; &amp;lt;chan&amp;gt; [set|unset]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;peerIODev&amp;lt;/code&amp;gt; peert (verbindet) einen Aktorkanal mit einem I/O-Device.&lt;br /&gt;
Dabei ist &amp;lt;code&amp;gt;&amp;amp;lt;IO&amp;amp;gt;&amp;lt;/code&amp;gt; der Namen des I/O-Devices und &amp;lt;code&amp;gt;&amp;amp;lt;chan&amp;amp;gt;&amp;lt;/code&amp;gt; die Nummer des virtuellen Kanals ist. Kanäle von 1 bis 50 sind zulässig.&lt;br /&gt;
&lt;br /&gt;
=== peerBulk ===&lt;br /&gt;
&lt;br /&gt;
  set &amp;lt;sensChan&amp;gt; peerBulk &amp;lt;peer1,peer2,...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;peerBulk&amp;lt;/code&amp;gt; dient der Wiederherstellung einer gesicherten Konfiguration.&lt;br /&gt;
Dieser Befehlt erlaubt eine Liste von Peers en-block in ein Gerät zu schreiben. Die Gegenstelle und die Kommunikation der Beiden wird nicht berücksichtigt.&lt;br /&gt;
&lt;br /&gt;
==Sensoren ==&lt;br /&gt;
Ist ein Sensorkanal mit einem Aktorkanal gepeert, gibt es meist nur wenig mögliche Einstellungen. Wichtige Beispiele sind &lt;br /&gt;
* Notwendigkeit, den Peer mit einem burst aufzuwecken (Register peerNeedsBurst). &lt;br /&gt;
* Erwartung von AES-Verschlüsselung/Authentifizierung (Register expectAES).&lt;br /&gt;
&lt;br /&gt;
===LED===&lt;br /&gt;
Ein ungepeerter Sensorkanal signalisiert einen Tastendruck meist mit gelber LED. Ist der Kanal gepeert, wird mit einer grünen LED signalisiert, dass ALLE Peers den Empfang des Triggers bestätigt (d.h. &amp;quot;ACK&amp;quot; gesendet) haben. Sollten nicht alle Peers eine Bestätigung senden, wird mit einer rot LED quittiert. &lt;br /&gt;
&lt;br /&gt;
==Aktoren==&lt;br /&gt;
Ist ein Sensorkanal mit einem Aktorkanal gepeert, muss im Aktorkanal eingestellt werden, welche Trigger gültig sind und welche Aktionen ergriffen werden sollen. Im Channel wird ein Satz Register angelegt, die als Reading mit &#039;&#039;&#039;R-&amp;lt;peername&amp;gt;...&#039;&#039;&#039; zusammengefasst sind. Meist sind 2 Gruppen je Peer vorhanden, eine für langen &#039;&#039;&#039;lg&#039;&#039;&#039; und eine für kurzen &#039;&#039;&#039;sh&#039;&#039;&#039; Tastendruck. Die Register für long und short sind deckungsgleich, bis auf das Register multiExec in der Gruppe long.&lt;br /&gt;
&lt;br /&gt;
Für das Setzen des Wertes im Aktorkanal gilt die Syntax&lt;br /&gt;
   set &amp;lt;actChan&amp;gt; regSet &amp;lt;register&amp;gt; &amp;lt;value&amp;gt; &amp;lt;peername&amp;gt;&lt;br /&gt;
===Condition Table===&lt;br /&gt;
Mit den Registern der Condition Table &#039;&#039;&#039;CT&#039;&#039;&#039; kann man Trigger filtern. So sendet beispielsweise ein Fensterkontakt einen Trigger mit einem Zusatzwert open=200 oder closed=0. Die CT hat 2 Vergleichswerte, &#039;&#039;&#039;Hi&#039;&#039;&#039; und &#039;&#039;&#039;Lo&#039;&#039;&#039;. Der Zusatzwert des Triggers wird entsprechend des Einträgen in der CT verglichen. Ist der Schalter z.B. an, dann wird auf den Eintrag in &#039;&#039;&#039;CTon&#039;&#039;&#039; genutzt. Steht dort &#039;&#039;&#039;geLo&#039;&#039;&#039; wird gprüft, ob der Zusatzwert des triggers grösser oder gleich dem Lo-Wert ist. Ist dies nicht der Fall, wird keine Aktion ausgeführt.&lt;br /&gt;
Register zur Condition Table sind:&lt;br /&gt;
   CtDlyOff |  literal | Jmp on condition from delayOff options:geLo,between,outside,ltLo,geHi,ltHi&lt;br /&gt;
   CtDlyOn  |  literal | Jmp on condition from delayOn options:geLo,between,outside,ltLo,geHi,ltHi&lt;br /&gt;
   CtOff    |  literal | Jmp on condition from off options:geLo,between,outside,ltLo,geHi,ltHi&lt;br /&gt;
   CtOn     |  literal | Jmp on condition from on options:geLo,between,outside,ltLo,geHi,ltHi&lt;br /&gt;
   CtValHi  |0 to 255  | Condition value high for CT table&lt;br /&gt;
   CtValLo  |0 to 255  | Condition value low for CT table&lt;br /&gt;
Remotes liefern keinen Zusatzwert. Die Conditon Table wird nicht genutzt. &lt;br /&gt;
===Jump Table===&lt;br /&gt;
In der Jump Table wird zusammen mit ActionType festgelegt, welche Aktion ein gültiger Trigger ausführen soll. Die Aktion ist vom Gerät abhängig.&lt;br /&gt;
&lt;br /&gt;
===Interne Peers===&lt;br /&gt;
Aktoren können eingebaute oder direkt angeschlossene Taster oder Tasteneingänge haben, die auch als Peers verarbeitet werden. Normalerweise sind diese nicht sichtbar, sie können aber durch Absetzen des Befehls &lt;br /&gt;
  set &amp;lt;device&amp;gt; regSet intKeyVisib visib&lt;br /&gt;
sichtbar und einstelllbar gemacht werden.&lt;br /&gt;
&lt;br /&gt;
==Virtuelle Entities==&lt;br /&gt;
Soll ein FHEM-Befehl bei einem Aktor nicht nur eine Aktion auslösen, muss er mit einem Kanal einer &amp;lt;u&amp;gt;[[HomeMatic#Virtuelle_Entities|virtuellen Entität]]&amp;lt;/u&amp;gt; oder einer &amp;lt;u&amp;gt;[[HomeMatic#IO_Entities|IO Entität]]&amp;lt;/u&amp;gt; gepeert werden. Das Peering erfolgt wie bei realen Homematic-Geräten. Achtung: da diese virtuellen Peers nicht in einem realen Gerät gespeichert werden, ist nach der Definition ein &#039;&#039;&#039;Save config&#039;&#039;&#039; nötig. &amp;lt;br /&amp;gt;&lt;br /&gt;
Dadurch lassen sich nicht nur einfache Befehle je Kanal aussenden, sondern die Peering-Listen in Aktoren nutzen um mit einem Funkbefehl z.B.&lt;br /&gt;
*Schleifen zu starten (z.B. bei Alarmauslösung ein Pulsieren der Beleuchtung, alle x Min eine kurze Unterbrechung, ...)&lt;br /&gt;
*Abläufe zu starten (z.B. Treppenhauslicht mit Vorwarnung bei Dimmern, ...)&lt;br /&gt;
*mehrere Aktoren gleichzeitig schalten zu lassen&lt;br /&gt;
Sonst müsste man für jede Zustandsänderung bzw. für jeden Aktor einen eigenen Befehl senden. Somit reagieren mehrere Aktoren auf ein FHEM-Kommando gleichzeitig.&lt;br /&gt;
&lt;br /&gt;
===IO Entities===&lt;br /&gt;
&amp;lt;u&amp;gt;[[HomeMatic#IO_Entities|IO Entities]]&amp;lt;/u&amp;gt; sind virtuelle Kanäle eines IO-Devices (z.B. [[Virtueller Controller VCCU|VCCU]], [[HM-CFG-LAN|HMLAN]], ...) und können somit gepeert werden. Hierfür gibt es das Kommando [[Homematic Peering Beispiele#peerIODev|peerIODev]].&lt;br /&gt;
&lt;br /&gt;
= Beispiele=&lt;br /&gt;
== Peering der Kanäle einer Fernbedienung mit einem Aktor ==&lt;br /&gt;
Dabei muss beachtet werden, dass auf den Fernbedienungen immer zwei Buttons zusammengehören, also z.B. lock/unlock, open/light oder Btn01/Btn02, Btn03/Btn04. Achtung: Für ein erfolgreiches Peering muss ggf. auf der Fernbedienung die Anlerntaste gedrückt werden.&lt;br /&gt;
&lt;br /&gt;
Bei einem &amp;quot;dual&amp;quot; Peering werden die beiden zusammengehörenden Kanäle der Fernbedienung mit einem Aktorkanal gepeert - einer der Buttons wirkt dann als &amp;quot;on&amp;quot;, der andere als &amp;quot;off&amp;quot;-Schalter.&lt;br /&gt;
&lt;br /&gt;
  set fb_Btn03 peerChan 0 blind&lt;br /&gt;
peert die Buttons Btn03 und Btn04 mit dem Aktorkanal &#039;&#039;blind&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Bei einem &amp;quot;single&amp;quot; Peering wird nur einer der beiden Kanäle der Fernbedienung mit einem Aktorkanal gepeert - als Aktion wird dann im Aktorkanal ein &amp;quot;toggle&amp;quot; eingetragen.&lt;br /&gt;
&lt;br /&gt;
  set fb_Btn07 peerChan 0 blind single&lt;br /&gt;
peert nur den Button Btn07 mit dem Aktorkanal &#039;&#039;blind&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Das Unpeering, also das Löschen einer Paarung, erfolgt z.B. durch den Befehl&lt;br /&gt;
  set fb_Btn07 peerChan 0 blind single unset&lt;br /&gt;
&lt;br /&gt;
== Peering von I/O-Entities ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set blind peerIODev HMLAN1 5&lt;br /&gt;
set blind peerIODev HMLAN1 7 unset&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components|1toolsAndWork]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;br /&gt;
[[Kategorie:Examples]]&lt;/div&gt;</summary>
		<author><name>Yokurt</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HomeMatic_Firmware_Update&amp;diff=17811</id>
		<title>HomeMatic Firmware Update</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HomeMatic_Firmware_Update&amp;diff=17811"/>
		<updated>2016-12-15T19:21:04Z</updated>

		<summary type="html">&lt;p&gt;Yokurt: Das HTTPMOD im define eq3 ist bei dem letzten Update wohl verloren gegangen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Seit 2014 ist es möglich, bei einigen [[HomeMatic]] Komponenten selbst Firmware Updates durchzuführen. Vorher ging das nur per CCU oder durch Einsenden des Gerätes an ELV.&lt;br /&gt;
Dabei gibt es verschiedene Möglichkeiten das Firmware Update durchzuführen. Um in Fhem die aktuelle Firmware nach dem Update angezeigt zu bekommen, ist ein erneutes Pairen mit Fhem notwendig. Es muss aber nicht gelöscht oder zurückgesetzt werden.&lt;br /&gt;
&lt;br /&gt;
== Varianten für Firmwareupdates ==&lt;br /&gt;
=== Firmware Update mit CUL/HM-CFG-USB/HMUARTLGW unter FHEM ===&lt;br /&gt;
FW Updates sind in FHEM möglich. Benötigt wird dafür ein [[CUL]] oder ein [[HM-CFG-USB USB Konfigurations-Adapter|HM-CFG-USB]] oder ein [[HMUARTLGW]]. Mit einem [[HMLAN]] ist ein Update nicht möglich.&lt;br /&gt;
&lt;br /&gt;
Vor dem Update ist sicherzustellen, dass das korrekte IO für das Device genutzt wird (falls mehrere IOs im System zu Verfügung stehen). Siehe Attribut IODev und IOgrp bei der Verwendung einer vCCU. Ein HMLAN kann mit dem Befehl :&amp;lt;code&amp;gt;set &amp;lt;HMLAN Name&amp;gt; close&amp;lt;/code&amp;gt; temporär ausgeschlossen werden.&lt;br /&gt;
&lt;br /&gt;
Um das Update durchführen zu können, wird die in dem entsprechenden Zip/tgz-File vorhandene .eq3-Datei benötigt. Bitte genau darauf achten, dass nicht versehentlich eine falsches Firmware-Datei verwendet wird. Der Vorgang selbst erfolgt mittels folgendem Befehl:&lt;br /&gt;
:&amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; fwUpdate &amp;lt;filename&amp;gt; &amp;lt;nowiki&amp;gt;[&amp;lt;time&amp;gt;]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;filename&amp;gt; ist der Name der .eq3 Datei inklusive absolutem oder relativem Pfad zu fhem-Root.&lt;br /&gt;
Die Angabe von [&amp;lt;time&amp;gt;] ist optional. Es ist die Zeit, die FHEM wartet, bis das Device in den Bootloader-Modus versetzt wird. Bei den meisten Devices ist die Zeit nicht notwendig, da FHEM das Gerät selbst in den Bootloader-Mode versetzen kann.&lt;br /&gt;
&lt;br /&gt;
Bei einigen älteren FW-Versionen wie z.B. bei den [[HM-CC-RT-DN]] v1.0 geht das allerdings nicht automatisch. Um den Flashvorgang zu starten, müssen hier noch die Batterien entfernt werden und beim wiedereinlegen die beiden äußeren Knöpfe gedrückt werden. Jene Zeit, die man für eben diese Aktion benötigt, wird hier eingegeben. &lt;br /&gt;
&lt;br /&gt;
Wichtig: während des Updates können keine weiteren Nachrichten in FHEM von Homematic verarbeitet werden.&lt;br /&gt;
&lt;br /&gt;
Da nach dem Update immer noch die alte FW-Version in FHEM steht, kann man entweder bei einigen Geräten die Version mit&lt;br /&gt;
:&amp;lt;code&amp;gt; set &amp;lt;device&amp;gt; getVersion &amp;lt;/code&amp;gt;&lt;br /&gt;
auslesen oder wenn das Kommando wie z.B. bei den oben genannten Heizkörperventilen nicht zur Verfügung steht, genügt es, am Gerät selbst die Anlerntaste zu drücken (was am Beispiel der RTs bedeutet, dass die Boost-Taste für mindestens drei Sekunden gedrückt werden  muss). Nach der Aktualisierung der Firmware-Information in Fhem, muss die [[Konfiguration]] noch gespeichert werden.&lt;br /&gt;
&lt;br /&gt;
=== Firmware Update mit CUL/HM-CFG-USB unter Linux ===&lt;br /&gt;
Für Linux hat mgernoth ein Updatetool erstellt.&lt;br /&gt;
&lt;br /&gt;
Zunächst muss sichergestellt werden, dass alle benötigten Pakete installiert sind. Um das Tool zu installieren und auszuführen, müssen die folgenden Pakete mit den gezeigten Befehlen installiert werden. Unter Debian:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install libusb-1.0-0-dev git build-essential&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Unter OpenSuse 13.2 64 Bit:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo zypper install libusb-1.0-0-dev git &lt;br /&gt;
sudo zypper install --type pattern devel_basis&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als nächstes wird der Sourcecode für das Tool heruntergeladen (vorher z.B. in den Pfad &amp;lt;code&amp;gt;/usr/src&amp;lt;/code&amp;gt; wechseln):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone git://git.zerfleddert.de/hmcfgusb&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Und mit den Anweisungen&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd hmcfgusb&lt;br /&gt;
make&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
wird daraus eine ausführbare Datei erstellt.&lt;br /&gt;
&lt;br /&gt;
Weiterhin muss die nötige Firmware heruntergeladen und entpackt werden. Die offiziellen Updates gibt es unter [http://www.eq-3.de/downloads.html eq-3 Downloads]. Die Befehle, um beispielsweise die benötigte Datei für die Firmware Version 1.4 des HM-CC-RT-DN zu erhalten lauten:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget http://www.eq-3.de/Downloads/Software/Firmware/hm_cc_rt_dn_update_V1_4_001_141020.tgz&lt;br /&gt;
tar xvzf hm_cc_rt_dn_update_V1_4_001_141020.tgz&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Zu guter Letzt muss noch das Tool mit einigen Parametern und der Seriennummer des HomeMatic Devices aufgerufen werden. Für ein Update mit einem CUL (&amp;lt;code&amp;gt;/dev/ttyACM0&amp;lt;/code&amp;gt; ist in diesem Beispiel die Adresse des CULs) muss folgendes eingegeben werden:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./flash-ota -c /dev/ttyACM0 -f &amp;lt;FirmwareImageName&amp;gt;.eq3 -s &amp;lt;DeviceSerialNo&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Für ein Update mit einem COC muss folgendes eingegeben werden (/dev/ttyAMA0):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./flash-ota -c /dev/ttyAMA0 -f &amp;lt;FirmwareImageName&amp;gt;.eq3 -s &amp;lt;DeviceSerialNo&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Für ein Update mit HM-CFG-USB&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./flash-ota -f &amp;lt;FirmwareImageName&amp;gt;.eq3 -s &amp;lt;DeviceSerialNo&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Nun muss nur noch das HomeMatic Gerät in den Update-Modus versetzt werden. Wie das geht, steht in der jeweils mit der Firmwaredatei gelieferten &amp;quot;readme&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Firmware Update mit HM-CFG-USB unter Windows ===&lt;br /&gt;
Für ein Firmwareupdate unter Windows wird das &amp;quot;HomeMatic Firmware Update Tool&amp;quot; von eq-3 benötigt: [http://www.eq-3.de/downloads.html eQ-3 Downloads]. Zur Zeit ist das Update damit nur mit dem HM-CFG-USB-2 möglich, nicht aber mit dem HM-CFG-LAN oder dem HM-CFG-USB der ersten Generation.&lt;br /&gt;
&lt;br /&gt;
Nach dem Start muss die Seriennummer des HomeMatic-Device eingegeben und die Firmware-Datei ausgewählt werden. Dann wird das Update-Tool durch einen Klick auf den entsprechenden Button in &amp;quot;Bereitschaft&amp;quot; gesetzt und anschließend muss das HomeMatic-Gerät in den Update-Modus versetzt werden. Bei Unterputz-Geräten ist das eventuell gar nicht so einfach, man kann in diesem Fall aber von FHEM aus dem Gerät ein Kommando schicken um es in den Bootloader Modus zu bringen. Dies geht mit dem Befehl&lt;br /&gt;
:&amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; fwUpdate onlyEnterBootLoader&amp;lt;/code&amp;gt;&lt;br /&gt;
Direkt danach sollte das Update Tool mit seiner Arbeit beginnen.&lt;br /&gt;
&lt;br /&gt;
Falls das Update-Tool beim Auswählen der Firmware-Datei abstürzt (&amp;quot;Home Matic Firmware Update Tool funktioniert nicht mehr&amp;quot;), dann stimmt wahrscheinlich etwas mit der Firmware-Datei nicht. Die Datei darf nicht ausgepackt, sondern muss als &amp;quot;.tar.gz&amp;quot;-Datei, so wie sie heruntergeladen wurde, benutzt werden. Es kann Probleme geben, wenn die Datei mit dem Internet Explorer heruntergeladen wurde. Am einfachsten ist es, die Datei mit einem anderen Browser herunterzuladen.&lt;br /&gt;
&lt;br /&gt;
== Mögliche Probleme ==&lt;br /&gt;
Lässt sich die Firmware nicht OTA auf das HomeMatic-Device flashen, kann dies folgende Ursachen haben:&lt;br /&gt;
* Die Fhem-Software ist nicht auf dem neuesten Stand. Bitte vorher ein &#039;&#039;update&#039;&#039; durchführen.&lt;br /&gt;
* &#039;&#039;&#039;Entfernung&#039;&#039;&#039; zwischen Sender und Empfänger &#039;&#039;&#039;zu klein&#039;&#039;&#039;. 1,5 bis 2 m Abstand sollten beide Geräte zueinander mindestens haben.&lt;br /&gt;
* &#039;&#039;&#039;Entfernung&#039;&#039;&#039; zwischen Sender und Empfänger &#039;&#039;&#039;zu groß&#039;&#039;&#039;. Überprüfen Sie die RSSI-Werte des zu flashenden Device. Schlechter als - 70 sollten sie nicht sein (also keine - 75 oder noch kleiner). Ansonsten muss der Abstand für die Dauer des Flashens verringert werden.&lt;br /&gt;
&lt;br /&gt;
== Tool zur Firmware Versionsprüfung ==&lt;br /&gt;
[[Datei:HM-FWUpdate-eQ3.png|mini|400px|right|Beispiel einer Liste der relevanten Firmware Updates&amp;lt;br /&amp;gt;&#039;&#039;&#039;Legende:&#039;&#039;&#039;&amp;lt;br /&amp;gt;1 - Link auf die eQ-3 Download-Seite &amp;lt;br /&amp;gt;2 - Link auf die Details des HTTPMOD Device &amp;lt;br /&amp;gt;3 - Link auf die Details des HomeMatic Device &amp;lt;br /&amp;gt;4 - (Download) Link auf die Firmware Datei &amp;lt;br /&amp;gt;5 - &amp;quot;reread&amp;quot;: Aktualisierung dieser Liste auslösen]]&lt;br /&gt;
Im Fhem-Forum wurden unter dem Titel {{Link2Forum|Topic=47729|LinkText=...Firmware Versionsprüfung}} die erforderlichen Definitionen für ein [[HTTPMOD]]-Device vorgestellt, das &lt;br /&gt;
* für alle HomeMatic Devices der aktuellen Fhem-Umgebung&lt;br /&gt;
* die derzeit benutzte Firmware Version mit&lt;br /&gt;
* einem evtl. auf der eQ-3 Seite verfügbaren Update vergleicht und&lt;br /&gt;
* alle für die aktuelle Installation relevanten Updates in einer Übersicht (siehe Screenshot) darstellt und&lt;br /&gt;
* einmal täglich (alle 86400 Sekunden) automatisch ausgeführt wird; dieses Intervall sollte nicht verkürzt, sondern eher verlängert werden. Im Bedarfsfall kann durch anklicken von &#039;&#039;&#039;&#039;&#039;reread&#039;&#039;&#039;&#039;&#039; eine sofortige Aktualisierung ausgelöst werden.&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Sollte eine alte (vor dem 15.3.2016) Version dieser Definitionen bereits in Benutzung sein (zu erkennen am Vorhandensein von &#039;&#039;&amp;lt;nowiki&amp;gt;reading0[2|3|4|5]*&amp;lt;/nowiki&amp;gt;&#039;&#039;-Attributen), dann wird empfohlen, das Device mit &amp;lt;code&amp;gt;delete eq3&amp;lt;/code&amp;gt; zunächst komplett zu löschen und anschließend neu anzulegen.}}&lt;br /&gt;
Die unten aufgeführten erforderlichen Anweisungen zur Erstellung dieser Übersicht sind&lt;br /&gt;
* im wesentlichen über das Webinterface eingebbar (können aber auch &amp;quot;en bloc&amp;quot; in die fhem.cfg eingetragen werden - auch wenn das eigentlich nicht empfohlen ist)&lt;br /&gt;
* der umfangreiche Perl-Code für das Attribut &#039;&#039;userReadings&#039;&#039; ist dargestellt für die Eingabe über das [[FHEMWEB|Webinterface]]&lt;br /&gt;
* für das Attribut &#039;&#039;stateFormat&#039;&#039; ist die mehrzeilige Eingabe (zumindest derzeit, März 2016) nicht unterstützt, daher wurde der Code in eine Subroutine ausgelagert&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;{{Randnotiz|RNTyp=r|RNText=&#039;&#039;&#039;Wichtige Änderungen:&#039;&#039;&#039;&lt;br /&gt;
22.05.2016 - &#039;&#039;reading01Regex&#039;&#039; und &#039;&#039;reading01Format&#039;&#039; angepasst (eQ-3)&lt;br /&gt;
}}&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Basis-Definitionen für Device eq3 ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
define eq3 HTTPMOD http://www.eq-3.de/service/downloads.html 86400&lt;br /&gt;
attr eq3 userattr enableControlSet event-on-change-reading event-on-update-reading reading01AutoNumLen reading01Format reading01Name reading01RegOpt reading01RegOpt:s,i,g reading01Regex readingMaxAge readingMaxAgeReplacementMode readingMaxAgeReplacementMode:text,expression,delete requestData.* showError showMatched stateFormat userReadings webCmd&lt;br /&gt;
attr eq3 enableControlSet 1&lt;br /&gt;
attr eq3 event-on-change-reading .*&lt;br /&gt;
attr eq3 event-on-update-reading LAST_ERROR,MATCHED_READINGS&lt;br /&gt;
attr eq3 reading01AutoNumLen 2&lt;br /&gt;
attr eq3 reading01Format http://www.eq-3.de/%s&lt;br /&gt;
attr eq3 reading01Name fw_link&lt;br /&gt;
attr eq3 reading01RegOpt g&lt;br /&gt;
attr eq3 reading01Regex &amp;lt;a.href=&amp;quot;(Downloads\/Software\/Firmware\/[^&amp;quot;]+)&lt;br /&gt;
attr eq3 readingMaxAge 10&lt;br /&gt;
attr eq3 readingMaxAgeReplacementMode delete&lt;br /&gt;
attr eq3 requestData.* suchtext=&amp;amp;suche_in=2&amp;amp;downloadart=11&lt;br /&gt;
attr eq3 room eq3&lt;br /&gt;
attr eq3 showError 1&lt;br /&gt;
attr eq3 showMatched 1&lt;br /&gt;
attr eq3 stateFormat {eq3StateFormat}&lt;br /&gt;
attr eq3 webCmd reread&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Definition/Code für Attribut userReadings ===&lt;br /&gt;
Der &amp;quot;Zugang&amp;quot; zur Eingabe des Attributs &#039;&#039;stateFormat&#039;&#039; erfolgt über die Details des Device &#039;&#039;&#039;eq3&#039;&#039;&#039; (URL: ...8083/fhem?detail=eq3).&lt;br /&gt;
[[Datei:HM-FWUpdate-eQ3-userReadings.png|mini|640px|left|&amp;quot;Der Weg&amp;quot; zur Eingabe von &#039;&#039;userReadings&#039;&#039;; durch Klick in das Eingabefeld öffnet sich ein separates Fenster.]]&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;Der Perl-Code, der für das Attribut &#039;&#039;userReadings&#039;&#039; eingegeben werden muss:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
newFwForDevices:MATCHED_READINGS:.* {&lt;br /&gt;
  my $ret = &amp;quot;&amp;quot;;&lt;br /&gt;
  my @data;&lt;br /&gt;
  my @eq3FwList = map{@data = ReadingsVal(&amp;quot;eq3&amp;quot;,&amp;quot;fw_link-&amp;quot;.$_,&amp;quot;?&amp;quot;) =~ m/Firmware\/(.*?)_update_V([\d_]+)_(\d\d)(\d\d)(\d\d)/; &lt;br /&gt;
            $data[0] =~ s/_/-/g;&lt;br /&gt;
            sprintf(&amp;quot;%s:%s:%s.%s.%s:%s&amp;quot;,$data[0],$data[1],$data[4],$data[3],&amp;quot;20&amp;quot;.$data[2],$_);&lt;br /&gt;
            } ReadingsVal(&amp;quot;eq3&amp;quot;,&amp;quot;MATCHED_READINGS&amp;quot;,&amp;quot;?&amp;quot;) =~ m/fw_link-(\d\d)/g;&lt;br /&gt;
            &lt;br /&gt;
  foreach my $dev (devspec2array(&amp;quot;TYPE=CUL_HM:FILTER=DEF=......:FILTER=subType!=(virtual|)&amp;quot;)) {&lt;br /&gt;
    my $md = AttrVal($dev,&amp;quot;model&amp;quot;,&amp;quot;?&amp;quot;);&lt;br /&gt;
    my $v = AttrVal($dev,&amp;quot;firmware&amp;quot;,&amp;quot;0.0&amp;quot;);&lt;br /&gt;
    my ($h,$l) = split(&#039;\.&#039;,$v);&lt;br /&gt;
    foreach my $newFw (grep m/^${md}:/i,@eq3FwList) {&lt;br /&gt;
      my ($nh,$nl,$no,$date,$idx) = $newFw =~ m/^[^:]+:(\d+)_(\d+)_?(\d*):([^:]+):(\d\d)$/;&lt;br /&gt;
      if(($nh &amp;gt; $h) || (($nh == $h) &amp;amp;&amp;amp; ($nl &amp;gt; $l))) {&lt;br /&gt;
        $ret .= &amp;quot;,&amp;quot; if($ret ne &amp;quot;&amp;quot;);&lt;br /&gt;
        $ret .= $dev.&amp;quot; (&amp;quot;.$md.&amp;quot; | fw_&amp;quot;.$v.&amp;quot; =&amp;gt; fw&amp;quot;.$idx.&amp;quot;_&amp;quot;.$nh.&amp;quot;.&amp;quot;.$nl.($no?sprintf(&amp;quot;.%d&amp;quot;,$no):&amp;quot;&amp;quot;).&amp;quot; | &amp;quot;.$date.&amp;quot;)&amp;quot;;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  return ($ret eq &amp;quot;&amp;quot;)?&amp;quot;no fw-updates needed!&amp;quot;:$ret;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Definition/Code für Attribut stateFormat ===&lt;br /&gt;
Da der Code für &#039;&#039;stateFormat&#039;&#039; recht umfangreich ist, wäre er als Einzeiler kaum sinnvoll zu verwalten, würde also ohnehin meistens über einen externen Editor bearbeitet werden. Daher wurde er als eigene (Sub-)Routine mit dem Namen &#039;&#039;eq3StateFormat&#039;&#039; in (z.B.) [[99_myUtils anlegen|99_myUtils]] ausgelagert:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub eq3StateFormat() {&lt;br /&gt;
  my $name = &amp;quot;eq3&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  my $ret =&amp;quot;&amp;quot;;&lt;br /&gt;
  my $lastCheck = ReadingsTimestamp($name,&amp;quot;MATCHED_READINGS&amp;quot;,&amp;quot;???&amp;quot;);&lt;br /&gt;
  $ret .= &#039;&amp;lt;div style=&amp;quot;text-align:left&amp;quot;&amp;gt;&#039;;   &lt;br /&gt;
  $ret .= &#039;last &amp;lt;a title=&amp;quot;eq3-downloads&amp;quot; href=&amp;quot;http://www.eq-3.de/downloads.html&amp;quot;&amp;gt;homematic&amp;lt;/a&amp;gt;-fw-check =&amp;gt; &#039;.$lastCheck;    &lt;br /&gt;
  $ret .= &#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&#039;;    &lt;br /&gt;
  $ret .= &#039;&amp;lt;pre&amp;gt;&#039;;   &lt;br /&gt;
  $ret .= &amp;quot;| device                  | model                   | old_fw | new_fw | release    |\n&amp;quot;;  &lt;br /&gt;
  $ret .= &amp;quot;------------------------------------------------------------------------------------\n&amp;quot;;  &lt;br /&gt;
  my $check = ReadingsVal($name,&amp;quot;newFwForDevices&amp;quot;,&amp;quot;???&amp;quot;);    &lt;br /&gt;
  if($check eq &amp;quot;no fw-updates needed!&amp;quot;) {        &lt;br /&gt;
    $ret .= &#039;| &#039;.$check.&#039;                                                            |&#039;;     &lt;br /&gt;
  } else {         &lt;br /&gt;
    my @devices = split(&#039;,&#039;,$check);         &lt;br /&gt;
    foreach my $devStr (@devices) {&lt;br /&gt;
      my ($dev,$md,$ofw,$idx,$nfw,$date) = $devStr =~ m/^([^\s]+)\s\(([^\s]+)\s\|\sfw_(\d+\.\d+)\s=&amp;gt;\sfw(\d\d)_([\d\.]+)\s\|\s([^\)]+)\)$/;          &lt;br /&gt;
      my $link = ReadingsVal($name,&amp;quot;fw_link-&amp;quot;.$idx,&amp;quot;???&amp;quot;);           &lt;br /&gt;
      $ret .= &#039;| &#039;;          &lt;br /&gt;
      $ret .= &#039;&amp;lt;a href=&amp;quot;/fhem?detail=&#039;.$dev.&#039;&amp;quot;&amp;gt;&#039;;            &lt;br /&gt;
      $ret .= sprintf(&amp;quot;%-23s&amp;quot;,$dev);             &lt;br /&gt;
      $ret .= &#039;&amp;lt;/a&amp;gt;&#039;;            &lt;br /&gt;
      $ret .= &amp;quot; | &amp;quot;;             &lt;br /&gt;
      $ret .= &#039;&amp;lt;b&#039;.(($md eq &amp;quot;?&amp;quot;)?&#039; title=&amp;quot;missing attribute model =&amp;gt; set device in teach mode to receive missing data&amp;quot; style=&amp;quot;color:yellow&amp;quot;&#039;:&#039; style=&amp;quot;color:lightgray&amp;quot;&#039;).&#039;&amp;gt;&#039;;            &lt;br /&gt;
      $ret .= sprintf(&amp;quot;%-23s&amp;quot;,$md);          &lt;br /&gt;
      $ret .= &#039;&amp;lt;/b&amp;gt;&#039;;            &lt;br /&gt;
      $ret .= &amp;quot; | &amp;quot;;             &lt;br /&gt;
      $ret .= &#039;&amp;lt;b&#039;.(($ofw eq &amp;quot;0.0&amp;quot;)?&#039; title=&amp;quot;missing attribute firmware =&amp;gt; set device in teach mode to receive missing data&amp;quot; style=&amp;quot;color:yellow&amp;quot;&#039;:&#039; style=&amp;quot;color:lightgray&amp;quot;&#039;).&#039;&amp;gt;&#039;;              &lt;br /&gt;
      $ret .= sprintf(&amp;quot;%6s&amp;quot;,$ofw);           &lt;br /&gt;
      $ret .= &#039;&amp;lt;/b&amp;gt;&#039;;            &lt;br /&gt;
      $ret .= &amp;quot; | &amp;quot;;             &lt;br /&gt;
      $ret .= &#039;&amp;lt;a title=&amp;quot;eq3-firmware.tgz&amp;quot; href=&amp;quot;&#039;.$link.&#039;&amp;quot;&amp;gt;&#039;;           &lt;br /&gt;
      $ret .= &#039;&amp;lt;b style=&amp;quot;color:red&amp;quot;&amp;gt;&#039;;           &lt;br /&gt;
      $ret .= sprintf(&amp;quot;%6s&amp;quot;,$nfw);           &lt;br /&gt;
      $ret .= &#039;&amp;lt;/b&amp;gt;&#039;;            &lt;br /&gt;
      $ret .= &#039;&amp;lt;/a&amp;gt;&#039;;            &lt;br /&gt;
      $ret .= &amp;quot; | &amp;quot;;             &lt;br /&gt;
      $ret .= sprintf(&amp;quot;%-10s&amp;quot;,$date);            &lt;br /&gt;
      $ret .= &amp;quot; |\n&amp;quot;;        &lt;br /&gt;
    }   &lt;br /&gt;
  }  &lt;br /&gt;
  $ret .= &#039;&amp;lt;/pre&amp;gt;&#039;;  &lt;br /&gt;
  $ret .= &#039;&amp;lt;/div&amp;gt;&#039;;  &lt;br /&gt;
  return $ret;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sondersituationen ===&lt;br /&gt;
[[Datei:HM-FWUpdate-eQ3-check.png|mini|455px|right|Fehlerbedingung: Attribut &#039;&#039;firmware&#039;&#039; nicht gesetzt]]&lt;br /&gt;
Das Tool überprüft gleichzeitig auch bestimmte Rahmenbedingungen, so z.B., ob bei allen HomeMatic Devices die Attribute &#039;&#039;model&#039;&#039; und &#039;&#039;firmware&#039;&#039; gesetzt sind. Sollte das nicht der Fall sein, wird das Device in der Liste &lt;br /&gt;
* mit einem gelben &amp;quot;old_fw&amp;quot; Wert von 0.0 geführt; befindet sich der Mauszeiger über dem &amp;quot;0.0&amp;quot;, wird der Hinweistext &#039;&#039;missing attribute firmware =&amp;gt; set device in teach mode to receive missing data&#039;&#039; angezeigt (siehe Beispiel im Screenshot)&lt;br /&gt;
* mit einem gelben {{Taste|?}} in der Spalte &amp;quot;model&amp;quot; angezeigt; befindet sich der Mauszeiger über dem &amp;quot;?&amp;quot;, wird der Hinweistext &#039;&#039;missing attribute model =&amp;gt; set device in teach mode to receive missing data&#039;&#039; angezeigt&lt;br /&gt;
In diesem Fall sollte bei dem betreffenden Gerät versucht werden, mit &#039;&#039;getConfig&#039;&#039; die Daten zu aktualisieren bzw. vervollständigen.&lt;br /&gt;
&lt;br /&gt;
Darüber hinaus ist zu beachten, dass die Firmware-Version in den HomeMatic Geräten zwei&amp;quot;teilig&amp;quot; (Version.Release) abgelegt ist, die Firmware Update-Dateien jedoch drei&amp;quot;teilige&amp;quot; Versionskennungen (Version_Release_???) haben. Für den Vergleich, ob neue Firmware verfügbar ist, kann natürlich nur die zweiteilige Kennung verwendet werden, eine Änderung im dritten Teil der Versionskennung kann daher nicht automatisch erkannt werden.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [http://www.eq-3.de/downloads.html Firmware Download] Seite von eq-3&lt;br /&gt;
* Forenthread zur {{Link2Forum|Topic=47729|LinkText=&amp;quot;Firmware Versionsprüfung&amp;quot;}}&lt;br /&gt;
* [http://git.zerfleddert.de/hmcfgusb/ Firmware Update Tool] von mgernoth&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Yokurt</name></author>
	</entry>
</feed>