<?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=Klinki</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=Klinki"/>
	<link rel="alternate" type="text/html" href="http://wiki.fhem.de/wiki/Spezial:Beitr%C3%A4ge/Klinki"/>
	<updated>2026-05-01T07:58:46Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-LC-Sw1PBU-FM_Alternative_Firmware&amp;diff=23467</id>
		<title>HM-LC-Sw1PBU-FM Alternative Firmware</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-LC-Sw1PBU-FM_Alternative_Firmware&amp;diff=23467"/>
		<updated>2017-12-07T07:45:32Z</updated>

		<summary type="html">&lt;p&gt;Klinki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Randnotiz|RNTyp=r|RNText=Bei den hier gezeigten Modifikationen geht die Garantie verloren und das Gerät verliert seine Zertifizierungen!}}&lt;br /&gt;
Um die alternative Firmware auf den [[HM-LC-Sw1PBU-FM Unterputz-Schaltaktor 1-fach‎|HM-LC-Sw1PBU-FM]]  flashen zu können, muss das Gerät geöffnet und ein Programmer angelötet werden. &lt;br /&gt;
&lt;br /&gt;
== Neue Funktionen ==&lt;br /&gt;
* Der Taster kann mit anderen Geräten [[Homematic Peering Beispiele|gepeert]] werden. Das ist mit der Originalfirmware nicht möglich.&lt;br /&gt;
* Die alternative Firmware hat eine Stromerkennung, die hardwaretechnisch immer vorhanden ist, aber von der eQ-3 Firmware nicht benutzt wird. Es ist möglich, damit eine Wechselschaltung zu implementieren.&lt;br /&gt;
&lt;br /&gt;
Folgende Kanäle sind jetzt verfügbar&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!  Kanal&lt;br /&gt;
!  Bezeichnung&lt;br /&gt;
|- &lt;br /&gt;
|  Button_1&lt;br /&gt;
|  Taster oben &lt;br /&gt;
|-&lt;br /&gt;
|  Button_2&lt;br /&gt;
|  Taster unten&lt;br /&gt;
|-&lt;br /&gt;
|  Switch_1&lt;br /&gt;
|  der Switch_01 (Kanal 3 des Aktors) ist der virtuellen Kanal. &amp;lt;br&amp;gt;Wenn man den einschaltet, brennt das Licht, er berücksichtigt also einen ggf. schon bestehenden Stromfluss.&amp;lt;br&amp;gt;Wenn man den Ausschaltet, geht das Licht aus, wenn es nicht schon aus war. &amp;lt;br&amp;gt;Er zeigt weiterhin an, ob das Licht gerade an oder aus ist.  &lt;br /&gt;
|-&lt;br /&gt;
|  Switch_2&lt;br /&gt;
|  der Switch_02 ist das Relais und funktioniert so , wie die HM-eigene Firmware vorher auch funktioniert hat. &amp;lt;br&amp;gt;Relais an/aus. Den braucht man also &amp;quot;eigentlich nicht&amp;quot;.&lt;br /&gt;
|}&lt;br /&gt;
== Hinweis zum Einbau ==&lt;br /&gt;
Bei Einsatz in einer Wechselschaltung (oder Kreuz- und Wechselschaltung) ist der HM Schaltaktor immer auf der Seite der Verkabelung einzubauen, wo die ungeschaltete Phase zugeführt wird. Bei Einbau auf der Seite, die zur Lampe abgeht, funktioniert es nicht, da in diesem Fall im ausgeschalteten Zustand der HM-Switch stromlos ist. Es ist also nicht gleichgültig, an welchem Ende einer (Kreuz- und) Wechselschalter-Kette der HM-Switch eingebaut werden muss.&lt;br /&gt;
&lt;br /&gt;
== Integration des Schalters in FHEM ==&lt;br /&gt;
===Vorbereitungen===&lt;br /&gt;
Für die alternative Firmware existiert ein eigenes Modul. Dieses ist als Erstes zu installieren bzw nach ./FHEM zu kopieren:&lt;br /&gt;
:[https://github.com/jabdoa2/Asksin_HM_LC_Sw1PBU_FM/blob/master/fhem/99_Asksin_HM_LC_Sw1PBU_FM_CustomFW.pm 99_Asksin_HM_LC_Sw1PBU_FM_CustomFW.pm] &lt;br /&gt;
&lt;br /&gt;
=== Anlernen ===&lt;br /&gt;
In FHEM ist der HomeMatic-[[CUL]] in den Anlernmodus zu bringen. Der ConfigButton des Schalters ist nun länger als vier Sekunden zu drücken. Wichtig: die LED darf nach Loslassen des Button nicht aufblinken; sie gibt keine Rückmeldung über den Status des Anlernvorgangs.&lt;br /&gt;
&lt;br /&gt;
Nach dem Anlernen sollte nochmal die aktuelle Config ausgelesen werden. Das kann ein paar Sekunden dauern und ist abgeschlossen, sobald der &amp;quot;state&amp;quot; = &amp;quot;cmds done&amp;quot; ist.&lt;br /&gt;
 set &amp;lt;HM-LC-SW1PBU-FM_Device&amp;gt; getConfig&lt;br /&gt;
&lt;br /&gt;
Möchte man erneut pairen, so geht dies am einfachsten mit:&lt;br /&gt;
 set &amp;lt;HM-LC-SW1PBU-FM_Device&amp;gt; regSet pairCentral &amp;lt;123456&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Schalter wie einen &amp;quot;normalen&amp;quot; Schalter wirken zu lassen, müssen noch die Buttons mit dem Switch [[Peering (HomeMatic)|gepeert]] werden. Danach bewirkt ein Tastendruck nach oben ein Einschalten, und ein Druck nach unten ein Ausschalten. Unterlässt man diesen Schritt, passiert bei einem Tastendruck am angeschlossenen Verbraucher nichts.&lt;br /&gt;
 set &amp;lt;HM-LC-SW1PBU-FM_Btn_01 peerChan 0 &amp;lt;HM-LC-SW1PBU-FM_Sw_01 dual set &lt;br /&gt;
&lt;br /&gt;
Das erzeugt automatisch ein Peering zwischen deinen beiden internen Tastern und dem Kanal 3 (Sw_01). Damit sollte der Schalter eigentlich schon funktionieren &lt;br /&gt;
&lt;br /&gt;
Falls nicht, dann setzt man im Device das Register intKeyVisib auf &amp;quot;visib&amp;quot; und macht ein getConfig auf Kanal 3. Dort sieht man dann die Listen der Peers und erkennt, was dort ein Tastendruck bewirkt. In den Jump Targets (z.B . R-self01-shSwJtDlyOff) usw. muss dann bei dem Button, mit dem man &#039;&#039;&#039;AUS&#039;&#039;&#039;schalten will überall OFF stehen, und bei dem anderen Button entsprechend On.&lt;br /&gt;
&lt;br /&gt;
Noch einfacher wäre es, falls vorhanden, ein Registerset von einem schon wie gewünscht konfigurierten Schalter (das kann auch einer mit Standard-FW sein) zu kopieren. Das geht mit dem Modul hminfo.&lt;br /&gt;
&lt;br /&gt;
=== Reset ===&lt;br /&gt;
Um den Schalter zu resetten ist der ConfigButton 2x hintereinander für &amp;gt; 4sek zu drücken. Auch hier liefert die LED keinerlei Rückmeldung über den Status. Blinks die LED trotzdem auf, so wurde das Drücken des Buttons nicht als &amp;quot;lang&amp;quot; erkannt.&lt;br /&gt;
Alternativ kann ein Reset über FHEM ausgelöst werden:&lt;br /&gt;
 set &amp;lt;HM-LC-SW1PBU-FM_Device&amp;gt; reset&lt;br /&gt;
&lt;br /&gt;
=== Advanced settings ===&lt;br /&gt;
Interne Peers&lt;br /&gt;
Ein Kanal kann interne Peers haben. Beispiele sind die meisten Schalter oder Dimmer an welchen direkt ein mechanischer Schalter angeschlossen werden kann, oder ein Bedienschalter direkt eingebaut ist. Die Firmware (FW) des Kanals behandelt diesen wie einen externen Peer, nur ist er automatisch eingerichtet. Es stehen die identischen Register wie bei &#039;normalen&#039; Peers zu Verfügung. Diese Peers sind nicht automatisch sichtbar, können aber sichtbar geschaltet werden. Hierzu ist das&lt;br /&gt;
Register &#039;&#039;&#039;intKeyVisib&#039;&#039;&#039; auf &#039;&#039;visib&#039;&#039; zu setzen (siehe HM-Konfiguration)-siehe auch getConfig. Danach kann man das Verhalten der „eingebauten Peers“ auslesen und verändern wie von jedem anderen Peer auch. Die internen Peers werden &#039;&#039;&#039;selfxx&#039;&#039;&#039; benannt (self01, self02,...). &lt;br /&gt;
&lt;br /&gt;
 regSet &amp;lt;HM-LC-SW1PBU-FM_Sw_01&amp;gt; intKeyVisib visib&lt;br /&gt;
 set &amp;lt;HM-LC-SW1PBU-FM_SW_01&amp;gt; getConfig&lt;br /&gt;
&lt;br /&gt;
Beispiel: Schaut man in die Readings des Devices und sieht ein: &#039;&#039;&#039;R-self01-shActionType   off&#039;&#039;&#039; bedeutet dies, dass der Button 1 (der nach &amp;quot;oben&amp;quot;) deaktiviert ist für diesen Peer und somit keine Funktion hat. Dieser ist auf &amp;quot;jmpToTarget&amp;quot; zu setzen und dann noch die folgenden auf &amp;quot;on&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
* R-self01-shSwJtDlyOff   &lt;br /&gt;
* R-self01-shSwJtDlyOn   &lt;br /&gt;
* R-self01-shSwJtOff   &lt;br /&gt;
* R-self01-shSwJtOn   &lt;br /&gt;
&lt;br /&gt;
Für Button 2 das selbe, aber eben nicht &amp;quot;on&amp;quot; sondern off.&lt;br /&gt;
Natürlich kann man es auch anders nutzen. Z.b. einen Button als Toggle und den anderen Button für etwas völlig anderes. Das ist ja das schöne, dass dies bei der CustomFW möglich ist.&lt;br /&gt;
&lt;br /&gt;
Beispiel das ein kurzer Tastendruck - oben oder unten - ein Toggle bewirkt:&lt;br /&gt;
 set &amp;lt;HM_LC_Sw1PBU_FM_Sw_01&amp;gt; regSet shActionType  jmpToTarget self01;&lt;br /&gt;
 set &amp;lt;HM_LC_Sw1PBU_FM_Sw_01&amp;gt; regSet shSwJtOn      dlyOff      self01;&lt;br /&gt;
 set &amp;lt;HM_LC_Sw1PBU_FM_Sw_01&amp;gt; regSet shSwJtOff     dlyOn       self01;&lt;br /&gt;
 set &amp;lt;HM_LC_Sw1PBU_FM_Sw_01&amp;gt; regSet shSwJtDlyOn   on          self01;&lt;br /&gt;
 set &amp;lt;HM_LC_Sw1PBU_FM_Sw_01&amp;gt; regSet shSwJtDlyOff  off         self01;&lt;br /&gt;
 &lt;br /&gt;
 set &amp;lt;HM_LC_Sw1PBU_FM_Sw_01&amp;gt; regSet shActionType  jmpToTarget self02;&lt;br /&gt;
 set &amp;lt;HM_LC_Sw1PBU_FM_Sw_01&amp;gt; regSet shSwJtOn      dlyOff      self02;&lt;br /&gt;
 set &amp;lt;HM_LC_Sw1PBU_FM_Sw_01&amp;gt; regSet shSwJtOff     dlyOn       self02;&lt;br /&gt;
 set &amp;lt;HM_LC_Sw1PBU_FM_Sw_01&amp;gt; regSet shSwJtDlyOn   on          self02;&lt;br /&gt;
 set &amp;lt;HM_LC_Sw1PBU_FM_Sw_01&amp;gt; regSet shSwJtDlyOff  off         self02;&lt;br /&gt;
&lt;br /&gt;
== Vorgehen zum Flashen ==&lt;br /&gt;
=== Anpassung des Strom-Schwellwertes bei LowCurrent Verbrauchern ===&lt;br /&gt;
Werden am Schalter nur sehr schwache Verbraucher angeschlossen,  so kann u.U. die Statuserkennung (Verbraucher an/aus) nicht korrekt funktionieren. Ändern kann man das in Asksin_HM_LC_Sw1PBU_FM.ino, und zwar hier: &lt;br /&gt;
 const unsigned long minImpulsLength = 5000;&lt;br /&gt;
Dabei entsprechen anscheinend die 5000 dem Schwellwert 500, die kann man jetzt z.B. auf 500 setzen, also Schwellwert 50.&lt;br /&gt;
&lt;br /&gt;
Man muss ein wenig aufpassen, das nicht zu niedrig zu setzen, damit es zu keinen Fehlerkennungen bei Spannungsspitzen im Hausnetz kommt... Beim Autor ist im ausgeschalteten Zustand der Lampe der Wert aber deutlich unter 50...&lt;br /&gt;
 &lt;br /&gt;
=== Vorbereitung der Platine des Schalters ===&lt;br /&gt;
An der fertigen Platine sind an den folgenden Kontakten Kabel zum Anschluss an das Programmiergerät anzulöten.  &amp;lt;br&amp;gt;&lt;br /&gt;
Wenn man den HM-LC-SW1PBU-FM vor sich liegen hat, liegen die Pins in folgender Reihenfolge:&lt;br /&gt;
:Reihe 1: MP3 / MP5 / MP6&lt;br /&gt;
:Reihe 2: MP15 / MP4 / MP2&lt;br /&gt;
&lt;br /&gt;
=== Anschluss der einzelnen PINs bei Verwendung der GPIO-Ports des Raspberry PI ===&lt;br /&gt;
 [[Raspberry Pi|Raspberry]] PIN | Beschreibung | HM-LC-Sw1PBU-FM&lt;br /&gt;
 --------------|--------------|----------------&lt;br /&gt;
    Pin #17    |    3,3V      |    MP2&lt;br /&gt;
    Pin #19    |    MOSI      |    MP4&lt;br /&gt;
    Pin #21    |    MISO      |    MP5&lt;br /&gt;
    Pin #23    |    SCLK      |    MP6&lt;br /&gt;
    Pin #24    |    Reset     |    MP3&lt;br /&gt;
    Pin #25    |    GND       |    MP15&lt;br /&gt;
&lt;br /&gt;
=== Anschluss der einzelnen PIns bei Nutzung eines ISP-Programmers ===&lt;br /&gt;
Bei Nutzung eines &amp;quot;MySmartUSB light&amp;quot; ist dieser vorher mittels mitgeliefertem Windowsprogramm auf 3V zu umzustellen.&lt;br /&gt;
  ISP-6 PIN   | Beschreibung | HM-LC-Sw1PBU-FM&lt;br /&gt;
 -------------|--------------|----------------&lt;br /&gt;
    Pin #2    |    3,3V      |    MP2&lt;br /&gt;
    Pin #4    |    MOSI      |    MP4&lt;br /&gt;
    Pin #1    |    MISO      |    MP5&lt;br /&gt;
    Pin #3    |    SCLK      |    MP6&lt;br /&gt;
    Pin #5    |    Reset     |    MP3&lt;br /&gt;
    Pin #6    |    GND       |    MP15&lt;br /&gt;
&lt;br /&gt;
Wichtig beim [[Raspberry Pi]] ist, dass man nicht die von Raspbian ausgelieferte Version des &#039;avrdude&#039; nutzen kann, sondern eine adaptierte Version verwendet werden muss.&lt;br /&gt;
Alle notwendigen Dateien zum Flashen (bereits alles fertig und lauffähig) inkl. einem kleinen HowTo sind im unten stehenden Link &#039;Flashen mit RaspberryPi&#039; vorhanden.&lt;br /&gt;
&lt;br /&gt;
=== Vorwort zum flashen per avrdude ===&lt;br /&gt;
Alle folgenden avrdude befehle beziehen sich in der Reihenfolge auf folgende Programmer. Es ist für den jeweiligen Programmer nur der betreffende Befehle abzusetzen&lt;br /&gt;
 * Raspberry Pi&lt;br /&gt;
 * MySmartUSB light (MyAVR)&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Konfiguration der Fuses kann jederzeit ausgelesen werden mit folgendem Befehl:&lt;br /&gt;
 avrdude -p m644 -P gpio -c gpio -v&lt;br /&gt;
 avrdude -p m644 -c stk500v2 -P /dev/ttyUSB0 -v&lt;br /&gt;
&lt;br /&gt;
=== Bootloader bauen ===&lt;br /&gt;
1) Dirks bootloader-umgebung clonen/downloaden https://github.com/kc-GitHub/Asksin_OTA_Bootloader&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2) devicedaten des Schalters (Serial, HMID) in devices/HM-LC-Sw1PBU-FM.h mit den Originaldaten ersetzen und typ=0xF0A9 setzen (modelnummer des schalters mit alternativer firmware). Damit sind die Daten im flash verewigt und man braucht sich eigentlich nicht mehr darum zu kümmern. Bei einem nächsten Bootloader update kann man ein beliebiges bootloader.eq3 file ota flashen. Trotzdem behält der Bootloader seine daten.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
3) Bootloader bauen:&amp;lt;br&amp;gt;&lt;br /&gt;
 make clean HM_LC_Sw1PBU_FM_8k&lt;br /&gt;
&lt;br /&gt;
=== Bootloader flashen ===&lt;br /&gt;
Anschließend muss man nun die Fuses korrekt mit unlock(wichtig) setzen:&lt;br /&gt;
&lt;br /&gt;
 avrdude -p m644 -P gpio -c gpio -U lfuse:w:0xFD:m -U hfuse:w:0xD8:m -U lock:w:0x3F:m&lt;br /&gt;
 avrdude -p m644 -c stk500v2 -P /dev/ttyUSB0 -U lfuse:w:0xFD:m -U hfuse:w:0xD8:m -U lock:w:0x3F:m&lt;br /&gt;
&lt;br /&gt;
und final den Bootloader flashen &lt;br /&gt;
 avrdude -p m644 -P gpio -c gpio -U flash:w:bootloader_HM-LC-Sw1PBU-FM_8k.hex&lt;br /&gt;
 avrdude -p m644 -c stk500v2 -P /dev/ttyUSB0 -U flash:w:bootloader_HM-LC-Sw1PBU-FM_8k.hex&lt;br /&gt;
&lt;br /&gt;
=== Firmware bauen ===&lt;br /&gt;
==== 1. Firmware mit arduino-IDE ====&lt;br /&gt;
&#039;&#039;Hinweis:&#039;&#039; Die folgenden Schritte wurden auf einem Raspberry Pi 2 mit Debian Jessie durchgeführt und folgen größtenteils der howtoBuild.txt von Mr.P aus [https://owncloud.isengard.at/index.php/s/8992affb68e8c1dcbe532152628ad9a5]&lt;br /&gt;
* In manchen Adruino-IDE Umgebungen werden Builds gelöscht, bevor sie auf die Hardware gespielt werden. Das muss verhindert werden! Bei Raspbian Jessie und dem User pi befinden sich die Voreinstellungen der IDE in /home/pi/.arduino/preferences.txt. Dort folgende Änderungen machen, bzw. Einträge hinzufügen &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
build.path=/home/pi/build&lt;br /&gt;
...&lt;br /&gt;
export.delete_target_folder=false&lt;br /&gt;
...&lt;br /&gt;
preproc.save_build_files=true&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Auf den raspi in den Ordner &#039;&#039;/usr/share/arduino/hardware&#039;&#039; wechseln. Hardware-Board für den ATMega644 laden &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone https://github.com/jabdoa2/jabduino&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Arduino im grafischen Frontend (oder X-Terminal) starten. unter &amp;lt;File&amp;gt;/&amp;lt;Preferences&amp;gt; findet man den Sketchbook-Ordner&lt;br /&gt;
* Über die Konsole in den Sketchbook-Ordner wechseln. Für User &amp;quot;pi&amp;quot; idR &#039;&#039;/home/pi/sketchbook&#039;&#039;&lt;br /&gt;
* Dort die Firmware-Quellen einfügen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone https://github.com/jabdoa2/Asksin_HM_LC_Sw1PBU_FM.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Wieder in die Arduino-Umgebung wechseln, unter &amp;lt;File&amp;gt;/&amp;lt;Sketchbook&amp;gt;/&amp;lt;Asksin_HM_LC_Sw1PBU_FM&amp;gt; öffnen&lt;br /&gt;
* unter &amp;lt;Tools&amp;gt;/&amp;lt;Board&amp;gt; &amp;quot;Jabduino ATmega644A&amp;quot; auswählen&lt;br /&gt;
* In der Datei &#039;&#039;Asksin_HM_LC_Sw1PBU_FM&#039;&#039; den Wert in Zeile 64 eventuell &amp;quot;const unsigned long minImpulsLength = 5000;&amp;quot; ändern. Der dort eingetragene Wert gilt als Schwellwert, wann der Schalter erkennen soll, dass ein angeschlossener Wechselschalter gedrückt wurde und somit erkannt wird, dass Strom fließt.&lt;br /&gt;
* in der Datei &#039;&#039;Register.h&#039;&#039; in Zeile 22 den Wert von HMID[3] ändern. Z.B.: &amp;quot;const uint8_t  HMID[3]     = { 0x20, 0x85, 0x57 };     // 208557&amp;quot;&lt;br /&gt;
Zusätzlich kann die eigene Zentrale bereits als Default-Wert in den Schalter eingetragen werden. Dadurch entfällt ein unter Umständen notwendiges Peering. Dafür muss die Zeile 347 von &#039;//#define firstLoad&#039; in &#039;#define firstLoad&#039; geändert werden&lt;br /&gt;
In den Zeilen 354 bis 356 die Werte für die FHEM-Zentral-ID einfügen (Reading: D-HMIdOriginal   2CC71D)&lt;br /&gt;
reg.ch_0.pairCentral[0] = 0x2C;&lt;br /&gt;
reg.ch_0.pairCentral[1] = 0xC7;&lt;br /&gt;
reg.ch_0.pairCentral[2] = 0x1D;&lt;br /&gt;
Auch andere Default-Werte wie Peerings und Schaltverhalten können an dieser Stelle verändert werden. Sollte das nicht gewünscht sein, sind diese Zeilen entweder auszukommentieren oder einfach zu löschen.&lt;br /&gt;
* Alle Dateien speichern&lt;br /&gt;
* &amp;lt;Sketch&amp;gt;/&amp;lt;Verifiy/Compile&amp;gt; alles kompilieren&lt;br /&gt;
* Im oben definierten Build-Path (/home/pi/build) sollte jetzt eine Datei &#039;&#039;Asksin_HM_LC_Sw1PBU_FM.cpp.hex&#039;&#039; stehen. Das ist unsere fertige Firmware, die auf den Schalter geflasht werden muss&lt;br /&gt;
&lt;br /&gt;
=== Firmware über Raspberry Pi flashen ===&lt;br /&gt;
* Hinweis: In älteren Beschreibungen findet man häufig die Ziel-Plattform m644. Diese unterscheidet sich praktisch in der Stromaufnahme des Chips, führt beim avrdude aber zu &#039;&#039;&#039;Fehlermeldungen&#039;&#039;&#039;, deshalb auf &#039;&#039;&#039;m6444p&#039;&#039;&#039; achten&lt;br /&gt;
* 1. &#039;&#039;&#039;Fuses&#039;&#039;&#039; setzen&lt;br /&gt;
&#039;&#039;avrdude -p m644p -P gpio -c gpio -U lfuse:w:0xFD:m -U hfuse:w:0xD8:m&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
avrdude: AVR device initialized and ready to accept instructions&lt;br /&gt;
Reading | ################################################## | 100% 0.00s&lt;br /&gt;
avrdude: Device signature = 0x1e960a&lt;br /&gt;
avrdude: reading input file &amp;quot;0xFD&amp;quot;&lt;br /&gt;
avrdude: writing lfuse (1 bytes):&lt;br /&gt;
Writing | ################################################## | 100% 0.00s&lt;br /&gt;
avrdude: 1 bytes of lfuse written&lt;br /&gt;
avrdude: verifying lfuse memory against 0xFD:&lt;br /&gt;
avrdude: load data lfuse data from input file 0xFD:&lt;br /&gt;
avrdude: input file 0xFD contains 1 bytes&lt;br /&gt;
avrdude: reading on-chip lfuse data:&lt;br /&gt;
Reading | ################################################## | 100% 0.00s&lt;br /&gt;
avrdude: verifying ...&lt;br /&gt;
avrdude: 1 bytes of lfuse verified&lt;br /&gt;
avrdude: reading input file &amp;quot;0xD8&amp;quot;&lt;br /&gt;
avrdude: writing hfuse (1 bytes):&lt;br /&gt;
Writing | ################################################## | 100% 0.00s&lt;br /&gt;
avrdude: 1 bytes of hfuse written&lt;br /&gt;
avrdude: verifying hfuse memory against 0xD8:&lt;br /&gt;
avrdude: load data hfuse data from input file 0xD8:&lt;br /&gt;
avrdude: input file 0xD8 contains 1 bytes&lt;br /&gt;
avrdude: reading on-chip hfuse data:&lt;br /&gt;
Reading | ################################################## | 100% 0.00s&lt;br /&gt;
avrdude: verifying ...&lt;br /&gt;
avrdude: 1 bytes of hfuse verified&lt;br /&gt;
avrdude: safemode: Fuses OK&lt;br /&gt;
avrdude done.  Thank you.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* 2. &#039;&#039;&#039;Bootloader&#039;&#039;&#039; flashen (falls noch nicht geschehen, wie  [[HM-LC-Sw1PBU-FM_Alternative_Firmware#Bootloader_flashen|oben]] beschrieben)&lt;br /&gt;
&#039;&#039;avrdude -p m644p -P gpio -c gpio -U flash:w:bootloader_HM-LC-Sw1PBU-FM.hex&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
avrdude: AVR device initialized and ready to accept instructions&lt;br /&gt;
Reading | ################################################## | 100% 0.00s&lt;br /&gt;
avrdude: Device signature = 0x1e960a&lt;br /&gt;
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed&lt;br /&gt;
         To disable this feature, specify the -D option.&lt;br /&gt;
avrdude: erasing chip&lt;br /&gt;
avrdude: reading input file &amp;quot;bootloader_HM-LC-Sw1PBU-FM.hex&amp;quot;&lt;br /&gt;
avrdude: input file bootloader_HM-LC-Sw1PBU-FM.hex auto detected as Intel Hex&lt;br /&gt;
avrdude: writing flash (61372 bytes):&lt;br /&gt;
Writing | ################################################## | 100% 30.86s&lt;br /&gt;
avrdude: 61372 bytes of flash written&lt;br /&gt;
avrdude: verifying flash memory against bootloader_HM-LC-Sw1PBU-FM.hex:&lt;br /&gt;
avrdude: load data flash data from input file bootloader_HM-LC-Sw1PBU-FM.hex:&lt;br /&gt;
avrdude: input file bootloader_HM-LC-Sw1PBU-FM.hex auto detected as Intel Hex&lt;br /&gt;
avrdude: input file bootloader_HM-LC-Sw1PBU-FM.hex contains 61372 bytes&lt;br /&gt;
avrdude: reading on-chip flash data:&lt;br /&gt;
Reading | ################################################## | 100% 28.95s&lt;br /&gt;
avrdude: verifying ...&lt;br /&gt;
avrdude: 61372 bytes of flash verified&lt;br /&gt;
avrdude: safemode: Fuses OK&lt;br /&gt;
avrdude done.  Thank you.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* 3. &#039;&#039;&#039;Firmware&#039;&#039;&#039; flashen (aus der Arduino-IDE)&lt;br /&gt;
&#039;&#039;avrdude -p m644p -P gpio -c gpio -U flash:w:Asksin_HM_LC_Sw1PBU_FM.cpp.hex&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
avrdude: AVR device initialized and ready to accept instructions&lt;br /&gt;
Reading | ################################################## | 100% 0.00s&lt;br /&gt;
avrdude: Device signature = 0x1e960a&lt;br /&gt;
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed&lt;br /&gt;
         To disable this feature, specify the -D option.&lt;br /&gt;
avrdude: erasing chip&lt;br /&gt;
avrdude: reading input file &amp;quot;Asksin_HM_LC_Sw1PBU_FM.cpp.hex&amp;quot;&lt;br /&gt;
avrdude: input file Asksin_HM_LC_Sw1PBU_FM.cpp.hex auto detected as Intel Hex&lt;br /&gt;
avrdude: writing flash (19042 bytes):&lt;br /&gt;
Writing | ################################################## | 100% 9.79s&lt;br /&gt;
avrdude: 19042 bytes of flash written&lt;br /&gt;
avrdude: verifying flash memory against Asksin_HM_LC_Sw1PBU_FM.cpp.hex:&lt;br /&gt;
avrdude: load data flash data from input file Asksin_HM_LC_Sw1PBU_FM.cpp.hex:&lt;br /&gt;
avrdude: input file Asksin_HM_LC_Sw1PBU_FM.cpp.hex auto detected as Intel Hex&lt;br /&gt;
avrdude: input file Asksin_HM_LC_Sw1PBU_FM.cpp.hex contains 19042 bytes&lt;br /&gt;
avrdude: reading on-chip flash data:&lt;br /&gt;
Reading | ################################################## | 100% 9.28s&lt;br /&gt;
avrdude: verifying ...&lt;br /&gt;
avrdude: 19042 bytes of flash verified&lt;br /&gt;
avrdude: safemode: Fuses OK&lt;br /&gt;
avrdude done.  Thank you.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oder man flasht die Firmware, wie im folgenden Abschnitt beschrieben, OTA (over the air). Das funktioniert mit dem Bootloader natürlich nicht. Dieser kann nur über einen Programmer oder Raspberry Pi auf den Schalter geflasht werden.&lt;br /&gt;
Der Vorteil bei OTA ist, dass für ein Update der Firmware der Schalter nicht mehr ausgebaut werden müsste.&lt;br /&gt;
&lt;br /&gt;
=== Firmware OTA flashen ===&lt;br /&gt;
====1. Konvertieren in das eq3 Format====&lt;br /&gt;
Konvertieren der Hex-Datei in das eq3 format mittels [https://github.com/kc-GitHub/Wettersensor/blob/master/Contrib/hex2eq3.php hex2eq3.php] (die php-cli muss installiert sein)&lt;br /&gt;
&lt;br /&gt;
 php hex2eq3.php --inFile Asksin_HM_LC_Sw1PBU_FM.cpp.hex --outFile HM_LC_Sw1PBU_FM.eq3 --spmPageSize 256 --hexEndAddress 0xDFFE --outFormat eq3 --withCrcCheck --pathTo-srec_cat /usr/bin/srec_cat&lt;br /&gt;
&lt;br /&gt;
====2. Flashvorgang starten====&lt;br /&gt;
Im flash-ota Tool eq3 das Device, die File- und Seriennummer eingeben&amp;lt;br&amp;gt;&lt;br /&gt;
Solltet ihr mittels CUL, COC oder HM-CFG-USB-2 direkt auf eurem Raspberry flashen, könnt ihr das bereitgestellte [https://owncloud.isengard.at/public.php?service=files&amp;amp;t=8992affb68e8c1dcbe532152628ad9a5&amp;amp;path=%2F&amp;amp;files=flash-ota&amp;amp;download flash-ota Binary] verwenden. Ansonsten einfach [https://git.zerfleddert.de/cgi-bin/gitweb.cgi/hmcfgusb herunterladen] und für euer System selbst kompilieren:&lt;br /&gt;
&lt;br /&gt;
Wenn ihr einen HM-CFG-USB-2 verwendet, wird flash-ota mittels:&lt;br /&gt;
 flash-ota -f firmware_HM-LC-Sw1PBU-FM.eq3 -s &amp;lt;SerialNr&amp;gt;&lt;br /&gt;
gestartet. Bei Verwendung eines CUL oder COC, muss das Device mit angegeben werden:&lt;br /&gt;
 flash-ota -f firmware_HM-LC-Sw1PBU-FM.eq3 -s &amp;lt;SerialNr&amp;gt; -c /dev/ttyAMA0 # für den COC&lt;br /&gt;
 flash-ota -f firmware_HM-LC-Sw1PBU-FM.eq3 -s &amp;lt;SerialNr&amp;gt; -c /dev/ttyACM0 # für den CUL&lt;br /&gt;
&lt;br /&gt;
====3. Bootloader aktivieren====&lt;br /&gt;
Zum Abschluss muss der Bootloader im Device/Schalter aktiviert werden. Dazu ist das Device zu resetten:&amp;lt;br&amp;gt;&lt;br /&gt;
* Netzversorgung vom schalter ausschalten, config taster drücken und halten, spannung einschalten und weiterhin gedrückt halten bis erstes blinken erscheint. &amp;lt;br&amp;gt;&lt;br /&gt;
oder falls das Device bereits in FHEM angelegt und gepaired ist:&amp;lt;br&amp;gt;&lt;br /&gt;
* Device in fhem ein &amp;quot;set &amp;lt;device&amp;gt; reset&amp;quot; absetzen, danach innerhalb von 10sek die ConfigTaste für ???-sek drücken&lt;br /&gt;
* Dies funktioniert mit der Firmware ohne Änderungen definitiv nicht. Es löst ausschließlich einen Werksreset im Schalter aus&lt;br /&gt;
Um den Bootloader am Schalter selbst zu aktivieren, ohne den Schalter stromlos zu machen, muss die Firmware, hier &#039;&#039;&#039;Asksin_HM_LC_Sw1PBU_FM.ino&#039;&#039;&#039; und &#039;&#039;&#039;register.h&#039;&#039;&#039;, gemäß {{Link2Forum|Topic=18071|Message=275891|LinkText=Forum}} (&#039;&#039;&#039;Danke&#039;&#039;&#039; Frank!) angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Nach diesen Änderungen hat der Schalter unter anderem ein Bootmenü mit 3 Menüoptionen:&lt;br /&gt;
* Option 1: Manueller Reboot &#039;&#039;&#039;-&amp;gt; diese ist zu wählen&#039;&#039;&#039;&lt;br /&gt;
* Option 2: enable software reboot (fhem kann durch set fwupdate das Booten einleiten, weiterführende Lektüre {{Link2Forum|Topic=23329|LinkText=hier}}.&lt;br /&gt;
* Option 3: disable software reboot (das automatische Booten wird verhindert, default)&lt;br /&gt;
Man gelangt in das Menü, indem man das lange Drücken des Config-Tasters über die ersten 3 Sekunden verlängert. Alle 3 Sekunden erfolgt ein Umschalten in die nächste Bootmenüoption.&lt;br /&gt;
&lt;br /&gt;
Die augenblickliche Option wird durch Blinken angezeigt:&lt;br /&gt;
* Option 1 1x blinken&lt;br /&gt;
* Option 2 2x blinken&lt;br /&gt;
* Option 3 3x blinken&lt;br /&gt;
Nach der 3. Option gelangt man wieder zur 1. Option, usw ... &amp;lt;br&amp;gt;&lt;br /&gt;
Wird der Config-Taster nach dem jeweiligen Blinken losgelassen, wird die entsprechende Menüoption ausgeführt.&lt;br /&gt;
&lt;br /&gt;
Jetzt sollte man beim Flashtool etwas sehen. Während des flashens blinkt auch die LED auf dem Schalter analog den übertragenen Datenblöcken&lt;br /&gt;
&lt;br /&gt;
===Bootloader OTA flashen===&lt;br /&gt;
Soll später ein neuer Bootloader mit neuen Features installiert werden, so kann dieser ebenfalls OTA geflashed werden ohne Schalter ausbauen und Löten.&lt;br /&gt;
&lt;br /&gt;
Der Bootloader ist zu bauen wie im Abschnitt zuvor erklärt. Anschließend mit dem hex2eq3 Tool konvertiert:&lt;br /&gt;
 php contrib\hex2eq3.php --inFile Bootloader-AskSin-OTA-HM_LC_Sw1PBU_FM_8k.hex --outFile Bootloader-AskSin-OTA-HM_LC_Sw1PBU_FM_8k.eq3 --spmPageSize 256 --hexEndAddress 0xDFFE --outFormat eq3 --markAsBootloaderUpdate --withCrcCheck --pathTo-srec_cat /usr/bin/srec_cat&lt;br /&gt;
Der anschließende OTA Flashvorgang erfolgt analog dem Firmware-OTA-Flash wie weiter oben beschrieben&lt;br /&gt;
&lt;br /&gt;
=== UART nutzen ===&lt;br /&gt;
Für Debuggingausgaben für Entwickler: Statt /dev/ttyXXX das eigene Interface einfügen:&lt;br /&gt;
* /dev/ttyUSB0 (USB Interface)&lt;br /&gt;
* /dev/ttyAMA0 (Raspberry PI)&lt;br /&gt;
* /dev/ttyS0 (normaler Serieller Port)&lt;br /&gt;
&lt;br /&gt;
Öffnen&lt;br /&gt;
* Direkt in der Arduino IDE (Tools -&amp;gt; Serial Monitor)&lt;br /&gt;
* Mit &#039;&#039;screen&#039;&#039;&lt;br /&gt;
 screen /dev/ttyXXX 57600,CS8,ixon,ixoff&lt;br /&gt;
* Mit &#039;&#039;minicom&#039;&#039;&lt;br /&gt;
 sudo apt-get install minicom&lt;br /&gt;
 minicom -b 57600 -o -D /dev/ttyXXX -w&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Firmware: [https://github.com/jabdoa2/Asksin_HM_LC_Sw1PBU_FM]&lt;br /&gt;
* Bootloader: [https://github.com/jabdoa2/Asksin_OTA_Bootloader]&lt;br /&gt;
* Arduino Port für Atmega 644: [https://github.com/jabdoa2/jabduino]&lt;br /&gt;
* Firmware bauen und flashen mit dem RaspberryPi: [https://owncloud.isengard.at/public.php?service=files&amp;amp;t=8992affb68e8c1dcbe532152628ad9a5]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Schalter (Sender)]]&lt;br /&gt;
[[Kategorie:Schalter (Empfänger)]]&lt;/div&gt;</summary>
		<author><name>Klinki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-LC-Sw1PBU-FM_Alternative_Firmware_am_Raspi_bauen_u._flashen&amp;diff=17178</id>
		<title>HM-LC-Sw1PBU-FM Alternative Firmware am Raspi bauen u. flashen</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-LC-Sw1PBU-FM_Alternative_Firmware_am_Raspi_bauen_u._flashen&amp;diff=17178"/>
		<updated>2016-11-11T11:36:29Z</updated>

		<summary type="html">&lt;p&gt;Klinki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 1fach Schaltaktor HM-LC-Sw1PBU-FM mit alternativer Firmware =&lt;br /&gt;
* Sinn und Zweck: Der Schalter bietet mit der alternativen Firmware die Möglichkeit ihn in Wechselschaltungen zu integrieren. In einer normalen Wechselschaltung ist es nicht möglich, den Schaltzustand der Lampe zu erkennen. Das Funktioniert nur wenn der Schaltzustand(Leistungsaufnahme) von Funkschalter erkannt werden kann.&lt;br /&gt;
* Vorwort: Dieser Artikel ist eigentlich nur eine Zusammenfassung dessen, was bereits in [[HM-LC-Sw1PBU-FM_Alternative_Firmware#Bootloader_flashen | HM-LC-Sw1PBU-FM_Alternative_Firmware#Bootloader_flashen]] steht! Dort stammen auch alle Tools, Hilfsprogramme und Informationen her.&lt;br /&gt;
Ich habe ledigleich alles auf das Flashen am Raspberry Pi ausgerichtet. Mein Dank gilt den Programmierern der Firmware und allen Leuten, die das Projekt mit- und weiterentwickelt haben.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung ==&lt;br /&gt;
* Windows 7 Desktop-Rechner mit Browser, Text-Editor, puTTY und WinSCP. Man kann zwar alle Schritte auch direkt auf dem Raspi durchführen - ich finde den Windows-Rechner aber praktischer&lt;br /&gt;
* Raspbian Jessie mit Pixel downloaden [https://www.raspberrypi.org/downloads/raspbian/]. Kernel 4.4 Release 2016 09 23&lt;br /&gt;
** Mit WinDiskImager auf min. 8GB SD-Karte spielen, s. auch [http://www.raspberry-projects.com/pi/pi-operating-systems/win32diskimager]&lt;br /&gt;
* Raspberry Pi 2B&lt;br /&gt;
** Die Pins des Raspi müssen nach folgendem Schema mit den Lötpads des HM-LC-Sw1PBU-FM verbunden werden. Die Messpunkte (MP) befinden sich auf der inneren, festgeschraubten, Platine des HM-Schalters&lt;br /&gt;
 [[Raspberry Pi|Raspberry]] PIN | Beschreibung | HM-LC-Sw1PBU-FM&lt;br /&gt;
 --------------|--------------|----------------&lt;br /&gt;
    Pin #17    |    3,3V      |    MP2&lt;br /&gt;
    Pin #19    |    MOSI      |    MP4&lt;br /&gt;
    Pin #21    |    MISO      |    MP5&lt;br /&gt;
    Pin #23    |    SCLK      |    MP6&lt;br /&gt;
    Pin #24    |    Reset     |    MP3&lt;br /&gt;
    Pin #25    |    GND       |    MP15&lt;br /&gt;
** Hinweis: Den Schalter während des gesamten Prozesses &#039;&#039;&#039;nicht mit 230V verbinden&#039;&#039;&#039;. Während des gesamtem Flash-Vorgangs kann die Spannungsvorsorgung aus dem Raspi genutzt werden&lt;br /&gt;
* Nachdem Raspbian sich installiert hat, geht man auf die Linux-Konsole. Entweder direkt oder per puTTY über SSH. Auf dem Raspi arbeite ich gerne als User root, deswegen vergebe ich diesem ein Passwort:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo passwd root&lt;br /&gt;
// user root werden&lt;br /&gt;
su - root&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Raspi OS updaten&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get update &amp;amp;&amp;amp; apt-get upgrade &amp;amp;&amp;amp; apt-get dist-upgrade&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Software installieren: C-Compiler, arduino-IDE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install arduino gcc-avr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* (Optional) Über &#039;&#039;raspi-config -&amp;gt; Internationialisation Options&#039;&#039; Keyboard-Layout, Locale, Timezone anpassen&lt;br /&gt;
* Über &#039;&#039;raspi-config -&amp;gt; Advanced Options&#039;&#039; SPI, Serial, I2C ausschalten (falls aktiv)&lt;br /&gt;
* reboot&lt;br /&gt;
* Verzeichnis für Downloads auf dem Raspi erstellen und dorthin wechseln&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /root/hm_switch&lt;br /&gt;
mkdir /root/hm_switch/flash&lt;br /&gt;
cd /root/hm_switch&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Bootloader-Umgebung herunterladen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone https://github.com/jabdoa2/Asksin_OTA_Bootloader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Firmware herunterladen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone https://github.com/jabdoa2/Asksin_HM_LC_Sw1PBU_FM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Dateien aus [https://seafile.partec.org/d/b6590a5a45/] herunterladen und auf dem Raspi in&#039;s erstellte Verzeichnis &#039;&#039;/root/hm_switch&#039;&#039; kopieren. Da ich nicht weiß, wie man per wget Dateien eines Cloud-Servers auf einer Linux-Maschine kopiert, führe ich diesen Vorgang mit WinSCP durch.&lt;br /&gt;
** Das Modul 99_Asksin_HM_LC_Sw1PBU_FM_CustomFW.pm muss in die fhem-Installation (/opt/fehm/FHEM) kopiert werden. Ansonsten wird der Schalter beim &#039;&#039;&#039;Anlernen nicht erkannt&#039;&#039;&#039;&lt;br /&gt;
* Da die Programming-Software aus dem original Repository nicht verwendet werden kann, muss die Version aus dem Dowload installiert werden&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dpkg -i avrdude_5.10-4_armhf.deb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* In der .conf steht die Definition der Anschlüsse für den Raspi. Diese entpacken und nach /etc kopieren&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gunzip avrdude.conf.gz &amp;amp;&amp;amp; cp avrdude.conf /etc/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Arduino-IDE einrichten /Firmware bauen==&lt;br /&gt;
* Die IDE wird zum späteren Kompilieren der Firmware benötigt - es ist keine Arduino-Hardware erforderlich!&lt;br /&gt;
* Build-Pfad für Arduino-IDE erstellen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /home/pi/build &amp;amp;&amp;amp; chmod -R 777 /home/pi/build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* In den Ordner &#039;&#039;/usr/share/arduino/hardware&#039;&#039; wechseln und Hardware-Board für den ATMega644 laden &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/share/arduino/hardware&lt;br /&gt;
git clone https://github.com/jabdoa2/jabduino&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Um alle Pfade und Dateien zu erzeugen, muss die Arduino-IDE aufgerufen und anschließend direkt wieder geschlossen werden. Das kann man in der grafischen Umgebung des Raspis, oder über ein entferntes X-Terminal tun.&lt;br /&gt;
* In manchen Adruino-IDE Umgebungen werden Builds gelöscht, bevor sie auf die Hardware gespielt werden. Das muss verhindert werden! Bei Raspbian Jessie und dem User pi befinden sich die Voreinstellungen der IDE in &#039;&#039;/home/pi/.arduino/preferences.txt&#039;&#039;. Über die Konsole dort folgende Änderungen machen, bzw. Einträge hinzufügen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
build.path=/home/pi/build&lt;br /&gt;
...&lt;br /&gt;
export.delete_target_folder=false&lt;br /&gt;
...&lt;br /&gt;
preproc.save_build_files=true&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Firmware-Quellen in den Sketchbook-Ordner von User &#039;&#039;pi&#039;&#039; kopieren und Rechte für alle setzen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp -R /root/hm_switch/Asksin_HM_LC_Sw1PBU_FM/ /home/pi/sketchbook/ &amp;amp;&amp;amp; chmod -R 777 /home/pi/sketchbook/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Wieder in die grafische IDE wechseln&lt;br /&gt;
** &#039;&#039;Tools -&amp;gt; Board -&amp;gt;&#039;&#039; &amp;quot;Jabduino ATmega644A&amp;quot; auswählen &lt;br /&gt;
** &#039;&#039;File -&amp;gt; Sketchbook -&amp;gt; &#039;&#039; &amp;quot;Asksin_HM_LC_Sw1PBU_FM&amp;quot; öffnen&lt;br /&gt;
** In der Datei Asksin_HM_LC_Sw1PBU_FM den Wert in Zeile 64 eventuell &amp;quot;const unsigned long minImpulsLength = 5000;&amp;quot; ändern. Der dort eingetragene Wert gilt als Schwellwert, wann der Schalter erkennen soll, dass ein angeschlossener Wechselschalter gedrückt wurde und somit erkannt wird, dass Strom fließt. &lt;br /&gt;
** In der Datei &#039;&#039;Register.h&#039;&#039; in Zeile 22 den Wert von HMID[3] ändern. &lt;br /&gt;
Zusätzlich kann die eigene Zentrale bereits als Default-Wert in den Schalter eingetragen werden. Dadurch entfällt ein unter Umständen notwendiges Peering. Dafür muss die Zeile 347 von //#define firstLoad&#039; in &#039;#define firstLoad&#039; geändert werden In den Zeilen 354 bis 356 die Werte für die FHEM-Zentral-ID einfügen (Reading: D-HMIdOriginal 2CC71D) reg.ch_0.pairCentral[0] = 0x2C; reg.ch_0.pairCentral[1] = 0xC7; reg.ch_0.pairCentral[2] = 0x1D; Auch andere Default-Werte wie Peerings und Schaltverhalten können an dieser Stelle verändert werden. Sollte das nicht gewünscht sein, sind diese Zeilen entweder auszukommentieren oder einfach zu löschen. &lt;br /&gt;
** Beispiel (Auszug aus Register.h mit Zeilenangaben)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;16&amp;gt;/* Serial ID       10 byte */  &#039;K&#039;,&#039;E&#039;,&#039;Q&#039;,&#039;0&#039;,&#039;0&#039;,&#039;0&#039;,&#039;0&#039;,&#039;0&#039;,&#039;0&#039;,&#039;7&#039;, // serial ID, needed for pairing&lt;br /&gt;
&amp;lt;22&amp;gt;       const uint8_t  HMID[3]     = { 0x08, 0x15, 0x07 };     // 081507&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
** Die beiden geänderten Dateien speichern und mit &#039;&#039;Sketch -&amp;gt; Überprüfen / Kompilieren&#039;&#039; kompilieren. Im unteren Fenster auf Fehlermeldungen achten!&lt;br /&gt;
** Wenn dies funktioniert hat, sollte im Ordner &#039;&#039;/home/pi/build&#039;&#039; die Datei &#039;&#039;Asksin_HM_LC_Sw1PBU_FM.cpp.hex&#039;&#039; mit aktuellem Datum erzeugt worden sein.&lt;br /&gt;
&lt;br /&gt;
== Bootloader ==&lt;br /&gt;
* Datei /root/hm_switch/Asksin_OTA_Bootloader/devices/HM-LC-Sw1PBU-FM.h editieren und dabei Seriennummer, HMID und die Typ setzen. Seriennummer und HMID müssen in eurer Umgebung eindeutig sein, Typ ist: &#039;&#039;&#039;0xF0A9&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /root/hm_switch/Asksin_OTA_Bootloader/devices/HM-LC-Sw1PBU-FM.h&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
** Beispiel: HMID -&amp;gt; 081507, Seriennummer: KEQ0000007&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/ The model type (not used from bootloader)&lt;br /&gt;
#define HM_TYPE              0xF0, 0xA9&lt;br /&gt;
// 10 bytes serial number. Must be unique for each device&lt;br /&gt;
#define HM_SERIAL            &#039;K&#039;, &#039;E&#039;, &#039;Q&#039;, &#039;0&#039;, &#039;0&#039;, &#039;0&#039;, &#039;0&#039;, &#039;0&#039;, &#039;0&#039;, &#039;7&#039;&lt;br /&gt;
// 3 bytes The device address (hm_id)&lt;br /&gt;
#define HM_ID                0x08, 0x15, 0x07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Eine Verzeichnisebene höher und Bootloader bauen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /root/hm_switch/Asksin_OTA_Bootloader/&lt;br /&gt;
make clean HM_LC_Sw1PBU_FM_8k&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dabei sollte die Datei &#039;&#039;bootloader_HM-LC-Sw1PBU-FM.hex&#039;&#039; herauskommen. Diese wird später auf den Schalter geflasht&lt;br /&gt;
&lt;br /&gt;
== Flashen ==&lt;br /&gt;
* Erzeugte Bootloader-Datei und Firmware in ein Verzeichnis kopieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp /home/pi/build/Asksin_HM_LC_Sw1PBU_FM.cpp.hex /root/hm_switch/flash/firmware.hex &amp;amp;&amp;amp; cp /root/hm_switch/Asksin_OTA_Bootloader/Bootloader-AskSin-OTA-HM_LC_Sw1PBU_FM_8k.hex /root/hm_switch/flash/bootloader.hex&lt;br /&gt;
cd /root/hm_switch/flash/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Hinweis: In älteren Beschreibungen findet man häufig die Ziel-Plattform m644. Diese Unterscheidet sich praktisch in der Stromaufnahme des Chips, führt beim avrdude aber zu &#039;&#039;&#039;Fehlermeldungen&#039;&#039;&#039;, deshalb auf &#039;&#039;&#039;m6444p&#039;&#039;&#039; achten&lt;br /&gt;
* &#039;&#039;&#039;Fuses&#039;&#039;&#039; setzen&lt;br /&gt;
&#039;&#039;avrdude -p m644p -P gpio -c gpio -U lfuse:w:0xFD:m -U hfuse:w:0xD8:m -U lock:w:0x3F:m&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
avrdude: AVR device initialized and ready to accept instructions&lt;br /&gt;
Reading | ################################################## | 100% 0.00s&lt;br /&gt;
avrdude: Device signature = 0x1e960a&lt;br /&gt;
avrdude: reading input file &amp;quot;0xFD&amp;quot;&lt;br /&gt;
avrdude: writing lfuse (1 bytes):&lt;br /&gt;
Writing | ################################################## | 100% 0.00s&lt;br /&gt;
avrdude: 1 bytes of lfuse written&lt;br /&gt;
avrdude: verifying lfuse memory against 0xFD:&lt;br /&gt;
avrdude: load data lfuse data from input file 0xFD:&lt;br /&gt;
avrdude: input file 0xFD contains 1 bytes&lt;br /&gt;
avrdude: reading on-chip lfuse data:&lt;br /&gt;
Reading | ################################################## | 100% 0.00s&lt;br /&gt;
avrdude: verifying ...&lt;br /&gt;
avrdude: 1 bytes of lfuse verified&lt;br /&gt;
avrdude: reading input file &amp;quot;0xD8&amp;quot;&lt;br /&gt;
avrdude: writing hfuse (1 bytes):&lt;br /&gt;
Writing | ################################################## | 100% 0.00s&lt;br /&gt;
avrdude: 1 bytes of hfuse written&lt;br /&gt;
avrdude: verifying hfuse memory against 0xD8:&lt;br /&gt;
avrdude: load data hfuse data from input file 0xD8:&lt;br /&gt;
avrdude: input file 0xD8 contains 1 bytes&lt;br /&gt;
avrdude: reading on-chip hfuse data:&lt;br /&gt;
Reading | ################################################## | 100% 0.00s&lt;br /&gt;
avrdude: verifying ...&lt;br /&gt;
avrdude: 1 bytes of hfuse verified&lt;br /&gt;
avrdude: safemode: Fuses OK&lt;br /&gt;
avrdude done.  Thank you.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Bootloader&#039;&#039;&#039; flashen&lt;br /&gt;
&#039;&#039;avrdude -p m644p -P gpio -c gpio -U flash:w:bootloader.hex&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
avrdude: AVR device initialized and ready to accept instructions&lt;br /&gt;
Reading | ################################################## | 100% 0.00s&lt;br /&gt;
avrdude: Device signature = 0x1e960a&lt;br /&gt;
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed&lt;br /&gt;
         To disable this feature, specify the -D option.&lt;br /&gt;
avrdude: erasing chip&lt;br /&gt;
avrdude: reading input file &amp;quot;bootloader_HM-LC-Sw1PBU-FM.hex&amp;quot;&lt;br /&gt;
avrdude: input file bootloader_HM-LC-Sw1PBU-FM.hex auto detected as Intel Hex&lt;br /&gt;
avrdude: writing flash (61372 bytes):&lt;br /&gt;
Writing | ################################################## | 100% 30.86s&lt;br /&gt;
avrdude: 61372 bytes of flash written&lt;br /&gt;
avrdude: verifying flash memory against bootloader_HM-LC-Sw1PBU-FM.hex:&lt;br /&gt;
avrdude: load data flash data from input file bootloader_HM-LC-Sw1PBU-FM.hex:&lt;br /&gt;
avrdude: input file bootloader_HM-LC-Sw1PBU-FM.hex auto detected as Intel Hex&lt;br /&gt;
avrdude: input file bootloader_HM-LC-Sw1PBU-FM.hex contains 61372 bytes&lt;br /&gt;
avrdude: reading on-chip flash data:&lt;br /&gt;
Reading | ################################################## | 100% 28.95s&lt;br /&gt;
avrdude: verifying ...&lt;br /&gt;
avrdude: 61372 bytes of flash verified&lt;br /&gt;
avrdude: safemode: Fuses OK&lt;br /&gt;
avrdude done.  Thank you.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Firmware&#039;&#039;&#039; flashen (aus der Arduino-IDE)&lt;br /&gt;
&#039;&#039;avrdude -p m644p -P gpio -c gpio -U flash:w:firmware.hex&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
avrdude: AVR device initialized and ready to accept instructions&lt;br /&gt;
Reading | ################################################## | 100% 0.00s&lt;br /&gt;
avrdude: Device signature = 0x1e960a&lt;br /&gt;
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed&lt;br /&gt;
         To disable this feature, specify the -D option.&lt;br /&gt;
avrdude: erasing chip&lt;br /&gt;
avrdude: reading input file &amp;quot;Asksin_HM_LC_Sw1PBU_FM.cpp.hex&amp;quot;&lt;br /&gt;
avrdude: input file Asksin_HM_LC_Sw1PBU_FM.cpp.hex auto detected as Intel Hex&lt;br /&gt;
avrdude: writing flash (19042 bytes):&lt;br /&gt;
Writing | ################################################## | 100% 9.79s&lt;br /&gt;
avrdude: 19042 bytes of flash written&lt;br /&gt;
avrdude: verifying flash memory against Asksin_HM_LC_Sw1PBU_FM.cpp.hex:&lt;br /&gt;
avrdude: load data flash data from input file Asksin_HM_LC_Sw1PBU_FM.cpp.hex:&lt;br /&gt;
avrdude: input file Asksin_HM_LC_Sw1PBU_FM.cpp.hex auto detected as Intel Hex&lt;br /&gt;
avrdude: input file Asksin_HM_LC_Sw1PBU_FM.cpp.hex contains 19042 bytes&lt;br /&gt;
avrdude: reading on-chip flash data:&lt;br /&gt;
Reading | ################################################## | 100% 9.28s&lt;br /&gt;
avrdude: verifying ...&lt;br /&gt;
avrdude: 19042 bytes of flash verified&lt;br /&gt;
avrdude: safemode: Fuses OK&lt;br /&gt;
avrdude done.  Thank you.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Schalter (Sender)]]&lt;br /&gt;
[[Kategorie:Schalter (Empfänger)]]&lt;/div&gt;</summary>
		<author><name>Klinki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-LC-Sw1PBU-FM_Alternative_Firmware_am_Raspi_bauen_u._flashen&amp;diff=17177</id>
		<title>HM-LC-Sw1PBU-FM Alternative Firmware am Raspi bauen u. flashen</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-LC-Sw1PBU-FM_Alternative_Firmware_am_Raspi_bauen_u._flashen&amp;diff=17177"/>
		<updated>2016-11-11T11:33:23Z</updated>

		<summary type="html">&lt;p&gt;Klinki: /* Arduino-IDE einrichten /Firmware bauen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 1fach Schaltaktor HM-LC-Sw1PBU-FM mit alternativer Firmware =&lt;br /&gt;
* Sinn und Zweck: Der Schalter bietet mit der alternativen Firmware die Möglichkeit ihn in Wechselschaltungen zu integrieren. In einer normalen Wechselschaltung ist es nicht möglich, den Schaltzustand der Lampe zu erkennen. Das Funktioniert nur wenn der Schaltzustand(Leistungsaufnahme) von Funkschalter erkannt werden kann.&lt;br /&gt;
* Vorwort: Dieser Artikel ist eigentlich nur eine Zusammenfassung dessen, was bereits in [[HM-LC-Sw1PBU-FM_Alternative_Firmware#Bootloader_flashen | HM-LC-Sw1PBU-FM_Alternative_Firmware#Bootloader_flashen]] steht! Dort stammen auch alle Tools, Hilfsprogramme und Informationen her.&lt;br /&gt;
Ich habe ledigleich alles auf das Flashen am Raspberry Pi ausgerichtet. Mein Dank gilt den Programmierern der Firmware und allen Leuten, die das Projekt mit- und weiterentwickelt haben.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung ==&lt;br /&gt;
* Windows 7 Desktop-Rechner mit Browser, Text-Editor, puTTY und WinSCP. Man kann zwar alle Schritte auch direkt auf dem Raspi durchführen - ich finde den Windows-Rechner aber praktischer&lt;br /&gt;
* Raspbian Jessie mit Pixel downloaden [https://www.raspberrypi.org/downloads/raspbian/]. Kernel 4.4 Release 2016 09 23&lt;br /&gt;
** Mit WinDiskImager auf min. 8GB SD-Karte spielen, s. auch [http://www.raspberry-projects.com/pi/pi-operating-systems/win32diskimager]&lt;br /&gt;
* Raspberry Pi 2B&lt;br /&gt;
** Die Pins des Raspi müssen nach folgendem Schema mit den Lötpads des HM-LC-Sw1PBU-FM verbunden werden. Die Messpunkte (MP) befinden sich auf der inneren, festgeschraubten, Platine des HM-Schalters&lt;br /&gt;
 [[Raspberry Pi|Raspberry]] PIN | Beschreibung | HM-LC-Sw1PBU-FM&lt;br /&gt;
 --------------|--------------|----------------&lt;br /&gt;
    Pin #17    |    3,3V      |    MP2&lt;br /&gt;
    Pin #19    |    MOSI      |    MP4&lt;br /&gt;
    Pin #21    |    MISO      |    MP5&lt;br /&gt;
    Pin #23    |    SCLK      |    MP6&lt;br /&gt;
    Pin #24    |    Reset     |    MP3&lt;br /&gt;
    Pin #25    |    GND       |    MP15&lt;br /&gt;
** Hinweis: Den Schalter während des gesamten Prozesses &#039;&#039;&#039;nicht mit 230V verbinden&#039;&#039;&#039;. Während des gesamtem Flash-Vorgangs kann die Spannungsvorsorgung aus dem Raspi genutzt werden&lt;br /&gt;
* Nachdem Raspbian sich installiert hat, geht man auf die Linux-Konsole. Entweder direkt oder per puTTY über SSH. Auf dem Raspi arbeite ich gerne als User root, deswegen vergebe ich diesem ein Passwort:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo passwd root&lt;br /&gt;
// user root werden&lt;br /&gt;
su - root&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Raspi OS updaten&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get update &amp;amp;&amp;amp; apt-get upgrade &amp;amp;&amp;amp; apt-get dist-upgrade&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Software installieren: C-Compiler, arduino-IDE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install arduino gcc-avr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* (Optional) Über &#039;&#039;raspi-config -&amp;gt; Internationialisation Options&#039;&#039; Keyboard-Layout, Locale, Timezone anpassen&lt;br /&gt;
* Über &#039;&#039;raspi-config -&amp;gt; Advanced Options&#039;&#039; SPI, Serial, I2C ausschalten (falls aktiv)&lt;br /&gt;
* reboot&lt;br /&gt;
* Verzeichnis für Downloads auf dem Raspi erstellen und dorthin wechseln&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /root/hm_switch&lt;br /&gt;
mkdir /root/hm_switch/flash&lt;br /&gt;
cd /root/hm_switch&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Bootloader-Umgebung herunterladen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone https://github.com/jabdoa2/Asksin_OTA_Bootloader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Firmware herunterladen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone https://github.com/jabdoa2/Asksin_HM_LC_Sw1PBU_FM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Dateien aus [https://seafile.partec.org/d/b6590a5a45/] herunterladen und auf dem Raspi in&#039;s erstellte Verzeichnis &#039;&#039;/root/hm_switch&#039;&#039; kopieren. Da ich nicht weiß, wie man per wget Dateien eines Cloud-Servers auf einer Linux-Maschine kopiert, führe ich diesen Vorgang mit WinSCP durch.&lt;br /&gt;
** Das Modul 99_Asksin_HM_LC_Sw1PBU_FM_CustomFW.pm muss in die fhem-Installation (/opt/fehm/FHEM) kopiert werden. Ansonsten wird der Schalter beim &#039;&#039;&#039;Anlernen nicht erkannt&#039;&#039;&#039;&lt;br /&gt;
* Da die Programming-Software aus dem original Repository nicht verwendet werden kann, muss die Version aus dem Dowload installiert werden&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dpkg -i avrdude_5.10-4_armhf.deb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* In der .conf steht die Definition der Anschlüsse für den Raspi. Diese entpacken und nach /etc kopieren&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gunzip avrdude.conf.gz &amp;amp;&amp;amp; cp avrdude.conf /etc/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Arduino-IDE einrichten /Firmware bauen==&lt;br /&gt;
* Die IDE wird zum späteren Kompilieren der Firmware benötigt - es ist keine Arduino-Hardware erforderlich!&lt;br /&gt;
* Build-Pfad für Arduino-IDE erstellen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /home/pi/build &amp;amp;&amp;amp; chmod -R 777 /home/pi/build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* In den Ordner &#039;&#039;/usr/share/arduino/hardware&#039;&#039; wechseln und Hardware-Board für den ATMega644 laden &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/share/arduino/hardware&lt;br /&gt;
git clone https://github.com/jabdoa2/jabduino&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Um alle Pfade und Dateien zu erzeugen, muss die Arduino-IDE aufgerufen und anschließend direkt wieder geschlossen werden. Das kann man in der grafischen Umgebung des Raspis, oder über ein entferntes X-Terminal tun.&lt;br /&gt;
* In manchen Adruino-IDE Umgebungen werden Builds gelöscht, bevor sie auf die Hardware gespielt werden. Das muss verhindert werden! Bei Raspbian Jessie und dem User pi befinden sich die Voreinstellungen der IDE in &#039;&#039;/home/pi/.arduino/preferences.txt&#039;&#039;. Über die Konsole dort folgende Änderungen machen, bzw. Einträge hinzufügen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
build.path=/home/pi/build&lt;br /&gt;
...&lt;br /&gt;
export.delete_target_folder=false&lt;br /&gt;
...&lt;br /&gt;
preproc.save_build_files=true&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Firmware-Quellen in den Sketchbook-Ordner von User &#039;&#039;pi&#039;&#039; kopieren und Rechte für alle setzen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp -R Asksin_HM_LC_Sw1PBU_FM/ /home/pi/sketchbook/ &amp;amp;&amp;amp; chmod -R 777 /home/pi/sketchbook/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Wieder in die grafische IDE wechseln&lt;br /&gt;
** &#039;&#039;Tools -&amp;gt; Board -&amp;gt;&#039;&#039; &amp;quot;Jabduino ATmega644A&amp;quot; auswählen &lt;br /&gt;
** &#039;&#039;File -&amp;gt; Sketchbook -&amp;gt; &#039;&#039; &amp;quot;Asksin_HM_LC_Sw1PBU_FM&amp;quot; öffnen&lt;br /&gt;
** In der Datei Asksin_HM_LC_Sw1PBU_FM den Wert in Zeile 64 eventuell &amp;quot;const unsigned long minImpulsLength = 5000;&amp;quot; ändern. Der dort eingetragene Wert gilt als Schwellwert, wann der Schalter erkennen soll, dass ein angeschlossener Wechselschalter gedrückt wurde und somit erkannt wird, dass Strom fließt. &lt;br /&gt;
** In der Datei &#039;&#039;Register.h&#039;&#039; in Zeile 22 den Wert von HMID[3] ändern. &lt;br /&gt;
Zusätzlich kann die eigene Zentrale bereits als Default-Wert in den Schalter eingetragen werden. Dadurch entfällt ein unter Umständen notwendiges Peering. Dafür muss die Zeile 347 von //#define firstLoad&#039; in &#039;#define firstLoad&#039; geändert werden In den Zeilen 354 bis 356 die Werte für die FHEM-Zentral-ID einfügen (Reading: D-HMIdOriginal 2CC71D) reg.ch_0.pairCentral[0] = 0x2C; reg.ch_0.pairCentral[1] = 0xC7; reg.ch_0.pairCentral[2] = 0x1D; Auch andere Default-Werte wie Peerings und Schaltverhalten können an dieser Stelle verändert werden. Sollte das nicht gewünscht sein, sind diese Zeilen entweder auszukommentieren oder einfach zu löschen. &lt;br /&gt;
** Beispiel (Auszug aus Register.h mit Zeilenangaben)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;16&amp;gt;/* Serial ID       10 byte */  &#039;K&#039;,&#039;E&#039;,&#039;Q&#039;,&#039;0&#039;,&#039;0&#039;,&#039;0&#039;,&#039;0&#039;,&#039;0&#039;,&#039;0&#039;,&#039;7&#039;, // serial ID, needed for pairing&lt;br /&gt;
&amp;lt;22&amp;gt;       const uint8_t  HMID[3]     = { 0x08, 0x15, 0x07 };     // 081507&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
** Die beiden geänderten Dateien speichern und mit &#039;&#039;Sketch -&amp;gt; Überprüfen / Kompilieren&#039;&#039; kompilieren. Im unteren Fenster auf Fehlermeldungen achten!&lt;br /&gt;
** Wenn dies funktioniert hat, sollte im Ordner &#039;&#039;/home/pi/build&#039;&#039; die Datei &#039;&#039;Asksin_HM_LC_Sw1PBU_FM.cpp.hex&#039;&#039; mit aktuellem Datum erzeugt worden sein.&lt;br /&gt;
&lt;br /&gt;
== Bootloader ==&lt;br /&gt;
* Datei /root/hm_switch/Asksin_OTA_Bootloader/devices/HM-LC-Sw1PBU-FM.h editieren und dabei Seriennummer, HMID und die Typ setzen. Seriennummer und HMID müssen in eurer Umgebung eindeutig sein, Typ ist: &#039;&#039;&#039;0xF0A9&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /root/hm_switch/Asksin_OTA_Bootloader/devices/HM-LC-Sw1PBU-FM.h&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
** Beispiel: HMID -&amp;gt; 081507, Seriennummer: KEQ0000007&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/ The model type (not used from bootloader)&lt;br /&gt;
#define HM_TYPE              0xF0, 0xA9&lt;br /&gt;
// 10 bytes serial number. Must be unique for each device&lt;br /&gt;
#define HM_SERIAL            &#039;K&#039;, &#039;E&#039;, &#039;Q&#039;, &#039;0&#039;, &#039;0&#039;, &#039;0&#039;, &#039;0&#039;, &#039;0&#039;, &#039;0&#039;, &#039;7&#039;&lt;br /&gt;
// 3 bytes The device address (hm_id)&lt;br /&gt;
#define HM_ID                0x08, 0x15, 0x07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Eine Verzeichnisebene höher und Bootloader bauen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /root/hm_switch/Asksin_OTA_Bootloader/&lt;br /&gt;
make clean HM_LC_Sw1PBU_FM_8k&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dabei sollte die Datei &#039;&#039;bootloader_HM-LC-Sw1PBU-FM.hex&#039;&#039; herauskommen. Diese wird später auf den Schalter geflasht&lt;br /&gt;
&lt;br /&gt;
== Flashen ==&lt;br /&gt;
* Erzeugte Bootloader-Datei und Firmware in ein Verzeichnis kopieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp /home/pi/build/Asksin_HM_LC_Sw1PBU_FM.cpp.hex /root/hm_switch/flash/firmware.hex &amp;amp;&amp;amp; cp /root/hm_switch/Asksin_OTA_Bootloader/Bootloader-AskSin-OTA-HM_LC_Sw1PBU_FM_8k.hex /root/hm_switch/flash/bootloader.hex&lt;br /&gt;
cd /root/hm_switch/flash/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Hinweis: In älteren Beschreibungen findet man häufig die Ziel-Plattform m644. Diese Unterscheidet sich praktisch in der Stromaufnahme des Chips, führt beim avrdude aber zu &#039;&#039;&#039;Fehlermeldungen&#039;&#039;&#039;, deshalb auf &#039;&#039;&#039;m6444p&#039;&#039;&#039; achten&lt;br /&gt;
* &#039;&#039;&#039;Fuses&#039;&#039;&#039; setzen&lt;br /&gt;
&#039;&#039;avrdude -p m644p -P gpio -c gpio -U lfuse:w:0xFD:m -U hfuse:w:0xD8:m -U lock:w:0x3F:m&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
avrdude: AVR device initialized and ready to accept instructions&lt;br /&gt;
Reading | ################################################## | 100% 0.00s&lt;br /&gt;
avrdude: Device signature = 0x1e960a&lt;br /&gt;
avrdude: reading input file &amp;quot;0xFD&amp;quot;&lt;br /&gt;
avrdude: writing lfuse (1 bytes):&lt;br /&gt;
Writing | ################################################## | 100% 0.00s&lt;br /&gt;
avrdude: 1 bytes of lfuse written&lt;br /&gt;
avrdude: verifying lfuse memory against 0xFD:&lt;br /&gt;
avrdude: load data lfuse data from input file 0xFD:&lt;br /&gt;
avrdude: input file 0xFD contains 1 bytes&lt;br /&gt;
avrdude: reading on-chip lfuse data:&lt;br /&gt;
Reading | ################################################## | 100% 0.00s&lt;br /&gt;
avrdude: verifying ...&lt;br /&gt;
avrdude: 1 bytes of lfuse verified&lt;br /&gt;
avrdude: reading input file &amp;quot;0xD8&amp;quot;&lt;br /&gt;
avrdude: writing hfuse (1 bytes):&lt;br /&gt;
Writing | ################################################## | 100% 0.00s&lt;br /&gt;
avrdude: 1 bytes of hfuse written&lt;br /&gt;
avrdude: verifying hfuse memory against 0xD8:&lt;br /&gt;
avrdude: load data hfuse data from input file 0xD8:&lt;br /&gt;
avrdude: input file 0xD8 contains 1 bytes&lt;br /&gt;
avrdude: reading on-chip hfuse data:&lt;br /&gt;
Reading | ################################################## | 100% 0.00s&lt;br /&gt;
avrdude: verifying ...&lt;br /&gt;
avrdude: 1 bytes of hfuse verified&lt;br /&gt;
avrdude: safemode: Fuses OK&lt;br /&gt;
avrdude done.  Thank you.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Bootloader&#039;&#039;&#039; flashen&lt;br /&gt;
&#039;&#039;avrdude -p m644p -P gpio -c gpio -U flash:w:bootloader.hex&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
avrdude: AVR device initialized and ready to accept instructions&lt;br /&gt;
Reading | ################################################## | 100% 0.00s&lt;br /&gt;
avrdude: Device signature = 0x1e960a&lt;br /&gt;
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed&lt;br /&gt;
         To disable this feature, specify the -D option.&lt;br /&gt;
avrdude: erasing chip&lt;br /&gt;
avrdude: reading input file &amp;quot;bootloader_HM-LC-Sw1PBU-FM.hex&amp;quot;&lt;br /&gt;
avrdude: input file bootloader_HM-LC-Sw1PBU-FM.hex auto detected as Intel Hex&lt;br /&gt;
avrdude: writing flash (61372 bytes):&lt;br /&gt;
Writing | ################################################## | 100% 30.86s&lt;br /&gt;
avrdude: 61372 bytes of flash written&lt;br /&gt;
avrdude: verifying flash memory against bootloader_HM-LC-Sw1PBU-FM.hex:&lt;br /&gt;
avrdude: load data flash data from input file bootloader_HM-LC-Sw1PBU-FM.hex:&lt;br /&gt;
avrdude: input file bootloader_HM-LC-Sw1PBU-FM.hex auto detected as Intel Hex&lt;br /&gt;
avrdude: input file bootloader_HM-LC-Sw1PBU-FM.hex contains 61372 bytes&lt;br /&gt;
avrdude: reading on-chip flash data:&lt;br /&gt;
Reading | ################################################## | 100% 28.95s&lt;br /&gt;
avrdude: verifying ...&lt;br /&gt;
avrdude: 61372 bytes of flash verified&lt;br /&gt;
avrdude: safemode: Fuses OK&lt;br /&gt;
avrdude done.  Thank you.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Firmware&#039;&#039;&#039; flashen (aus der Arduino-IDE)&lt;br /&gt;
&#039;&#039;avrdude -p m644p -P gpio -c gpio -U flash:w:firmware.hex&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
avrdude: AVR device initialized and ready to accept instructions&lt;br /&gt;
Reading | ################################################## | 100% 0.00s&lt;br /&gt;
avrdude: Device signature = 0x1e960a&lt;br /&gt;
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed&lt;br /&gt;
         To disable this feature, specify the -D option.&lt;br /&gt;
avrdude: erasing chip&lt;br /&gt;
avrdude: reading input file &amp;quot;Asksin_HM_LC_Sw1PBU_FM.cpp.hex&amp;quot;&lt;br /&gt;
avrdude: input file Asksin_HM_LC_Sw1PBU_FM.cpp.hex auto detected as Intel Hex&lt;br /&gt;
avrdude: writing flash (19042 bytes):&lt;br /&gt;
Writing | ################################################## | 100% 9.79s&lt;br /&gt;
avrdude: 19042 bytes of flash written&lt;br /&gt;
avrdude: verifying flash memory against Asksin_HM_LC_Sw1PBU_FM.cpp.hex:&lt;br /&gt;
avrdude: load data flash data from input file Asksin_HM_LC_Sw1PBU_FM.cpp.hex:&lt;br /&gt;
avrdude: input file Asksin_HM_LC_Sw1PBU_FM.cpp.hex auto detected as Intel Hex&lt;br /&gt;
avrdude: input file Asksin_HM_LC_Sw1PBU_FM.cpp.hex contains 19042 bytes&lt;br /&gt;
avrdude: reading on-chip flash data:&lt;br /&gt;
Reading | ################################################## | 100% 9.28s&lt;br /&gt;
avrdude: verifying ...&lt;br /&gt;
avrdude: 19042 bytes of flash verified&lt;br /&gt;
avrdude: safemode: Fuses OK&lt;br /&gt;
avrdude done.  Thank you.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Schalter (Sender)]]&lt;br /&gt;
[[Kategorie:Schalter (Empfänger)]]&lt;/div&gt;</summary>
		<author><name>Klinki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-LC-Sw1PBU-FM_Alternative_Firmware_am_Raspi_bauen_u._flashen&amp;diff=17176</id>
		<title>HM-LC-Sw1PBU-FM Alternative Firmware am Raspi bauen u. flashen</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-LC-Sw1PBU-FM_Alternative_Firmware_am_Raspi_bauen_u._flashen&amp;diff=17176"/>
		<updated>2016-11-11T11:24:41Z</updated>

		<summary type="html">&lt;p&gt;Klinki: Die Seite wurde neu angelegt: „= 1fach Schaltaktor HM-LC-Sw1PBU-FM mit alternativer Firmware = * Sinn und Zweck: Der Schalter bietet mit der alternativen Firmware die Möglichkeit ihn in Wec…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 1fach Schaltaktor HM-LC-Sw1PBU-FM mit alternativer Firmware =&lt;br /&gt;
* Sinn und Zweck: Der Schalter bietet mit der alternativen Firmware die Möglichkeit ihn in Wechselschaltungen zu integrieren. In einer normalen Wechselschaltung ist es nicht möglich, den Schaltzustand der Lampe zu erkennen. Das Funktioniert nur wenn der Schaltzustand(Leistungsaufnahme) von Funkschalter erkannt werden kann.&lt;br /&gt;
* Vorwort: Dieser Artikel ist eigentlich nur eine Zusammenfassung dessen, was bereits in [[HM-LC-Sw1PBU-FM_Alternative_Firmware#Bootloader_flashen | HM-LC-Sw1PBU-FM_Alternative_Firmware#Bootloader_flashen]] steht! Dort stammen auch alle Tools, Hilfsprogramme und Informationen her.&lt;br /&gt;
Ich habe ledigleich alles auf das Flashen am Raspberry Pi ausgerichtet. Mein Dank gilt den Programmierern der Firmware und allen Leuten, die das Projekt mit- und weiterentwickelt haben.&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung ==&lt;br /&gt;
* Windows 7 Desktop-Rechner mit Browser, Text-Editor, puTTY und WinSCP. Man kann zwar alle Schritte auch direkt auf dem Raspi durchführen - ich finde den Windows-Rechner aber praktischer&lt;br /&gt;
* Raspbian Jessie mit Pixel downloaden [https://www.raspberrypi.org/downloads/raspbian/]. Kernel 4.4 Release 2016 09 23&lt;br /&gt;
** Mit WinDiskImager auf min. 8GB SD-Karte spielen, s. auch [http://www.raspberry-projects.com/pi/pi-operating-systems/win32diskimager]&lt;br /&gt;
* Raspberry Pi 2B&lt;br /&gt;
** Die Pins des Raspi müssen nach folgendem Schema mit den Lötpads des HM-LC-Sw1PBU-FM verbunden werden. Die Messpunkte (MP) befinden sich auf der inneren, festgeschraubten, Platine des HM-Schalters&lt;br /&gt;
 [[Raspberry Pi|Raspberry]] PIN | Beschreibung | HM-LC-Sw1PBU-FM&lt;br /&gt;
 --------------|--------------|----------------&lt;br /&gt;
    Pin #17    |    3,3V      |    MP2&lt;br /&gt;
    Pin #19    |    MOSI      |    MP4&lt;br /&gt;
    Pin #21    |    MISO      |    MP5&lt;br /&gt;
    Pin #23    |    SCLK      |    MP6&lt;br /&gt;
    Pin #24    |    Reset     |    MP3&lt;br /&gt;
    Pin #25    |    GND       |    MP15&lt;br /&gt;
** Hinweis: Den Schalter während des gesamten Prozesses &#039;&#039;&#039;nicht mit 230V verbinden&#039;&#039;&#039;. Während des gesamtem Flash-Vorgangs kann die Spannungsvorsorgung aus dem Raspi genutzt werden&lt;br /&gt;
* Nachdem Raspbian sich installiert hat, geht man auf die Linux-Konsole. Entweder direkt oder per puTTY über SSH. Auf dem Raspi arbeite ich gerne als User root, deswegen vergebe ich diesem ein Passwort:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo passwd root&lt;br /&gt;
// user root werden&lt;br /&gt;
su - root&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Raspi OS updaten&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get update &amp;amp;&amp;amp; apt-get upgrade &amp;amp;&amp;amp; apt-get dist-upgrade&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Software installieren: C-Compiler, arduino-IDE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install arduino gcc-avr&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* (Optional) Über &#039;&#039;raspi-config -&amp;gt; Internationialisation Options&#039;&#039; Keyboard-Layout, Locale, Timezone anpassen&lt;br /&gt;
* Über &#039;&#039;raspi-config -&amp;gt; Advanced Options&#039;&#039; SPI, Serial, I2C ausschalten (falls aktiv)&lt;br /&gt;
* reboot&lt;br /&gt;
* Verzeichnis für Downloads auf dem Raspi erstellen und dorthin wechseln&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /root/hm_switch&lt;br /&gt;
mkdir /root/hm_switch/flash&lt;br /&gt;
cd /root/hm_switch&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Bootloader-Umgebung herunterladen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone https://github.com/jabdoa2/Asksin_OTA_Bootloader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Firmware herunterladen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone https://github.com/jabdoa2/Asksin_HM_LC_Sw1PBU_FM&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Dateien aus [https://seafile.partec.org/d/b6590a5a45/] herunterladen und auf dem Raspi in&#039;s erstellte Verzeichnis &#039;&#039;/root/hm_switch&#039;&#039; kopieren. Da ich nicht weiß, wie man per wget Dateien eines Cloud-Servers auf einer Linux-Maschine kopiert, führe ich diesen Vorgang mit WinSCP durch.&lt;br /&gt;
** Das Modul 99_Asksin_HM_LC_Sw1PBU_FM_CustomFW.pm muss in die fhem-Installation (/opt/fehm/FHEM) kopiert werden. Ansonsten wird der Schalter beim &#039;&#039;&#039;Anlernen nicht erkannt&#039;&#039;&#039;&lt;br /&gt;
* Da die Programming-Software aus dem original Repository nicht verwendet werden kann, muss die Version aus dem Dowload installiert werden&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dpkg -i avrdude_5.10-4_armhf.deb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* In der .conf steht die Definition der Anschlüsse für den Raspi. Diese entpacken und nach /etc kopieren&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gunzip avrdude.conf.gz &amp;amp;&amp;amp; cp avrdude.conf /etc/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Arduino-IDE einrichten /Firmware bauen==&lt;br /&gt;
* Die IDE wird zum späteren Kompilieren der Firmware benötigt - es ist keine Arduino-Hardware erforderlich!&lt;br /&gt;
* Build-Pfad für Arduino-IDE erstellen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /root/hm_switch/Asksin_HM_LC_Sw1PBU_FM/build &amp;amp;&amp;amp; chmod -R 777 /root/hm_switch/Asksin_HM_LC_Sw1PBU_FM/build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* In den Ordner &#039;&#039;/usr/share/arduino/hardware&#039;&#039; wechseln und Hardware-Board für den ATMega644 laden &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /usr/share/arduino/hardware&lt;br /&gt;
git clone https://github.com/jabdoa2/jabduino&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Um alle Pfade und Dateien zu erzeugen, muss die Arduino-IDE aufgerufen und anschließend direkt wieder geschlossen werden. Das kann man in der grafischen Umgebung des Raspis, oder über ein entferntes X-Terminal tun.&lt;br /&gt;
* In manchen Adruino-IDE Umgebungen werden Builds gelöscht, bevor sie auf die Hardware gespielt werden. Das muss verhindert werden! Bei Raspbian Jessie und dem User pi befinden sich die Voreinstellungen der IDE in &#039;&#039;/home/pi/.arduino/preferences.txt&#039;&#039;. Über die Konsole dort folgende Änderungen machen, bzw. Einträge hinzufügen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
build.path=/home/pi/build&lt;br /&gt;
...&lt;br /&gt;
export.delete_target_folder=false&lt;br /&gt;
...&lt;br /&gt;
preproc.save_build_files=true&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Firmware-Quellen in den Sketchbook-Ordner von User &#039;&#039;pi&#039;&#039; kopieren und Rechte für alle setzen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp -R Asksin_HM_LC_Sw1PBU_FM/ /home/pi/sketchbook/ &amp;amp;&amp;amp; chmod -R 777 /home/pi/sketchbook/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Wieder in die grafische IDE wechseln&lt;br /&gt;
** &#039;&#039;Tools -&amp;gt; Board -&amp;gt;&#039;&#039; &amp;quot;Jabduino ATmega644A&amp;quot; auswählen &lt;br /&gt;
** &#039;&#039;File -&amp;gt; Sketchbook -&amp;gt; &#039;&#039; &amp;quot;Asksin_HM_LC_Sw1PBU_FM&amp;quot; öffnen&lt;br /&gt;
** In der Datei Asksin_HM_LC_Sw1PBU_FM den Wert in Zeile 64 eventuell &amp;quot;const unsigned long minImpulsLength = 5000;&amp;quot; ändern. Der dort eingetragene Wert gilt als Schwellwert, wann der Schalter erkennen soll, dass ein angeschlossener Wechselschalter gedrückt wurde und somit erkannt wird, dass Strom fließt. &lt;br /&gt;
** In der Datei &#039;&#039;Register.h&#039;&#039; in Zeile 22 den Wert von HMID[3] ändern. &lt;br /&gt;
Zusätzlich kann die eigene Zentrale bereits als Default-Wert in den Schalter eingetragen werden. Dadurch entfällt ein unter Umständen notwendiges Peering. Dafür muss die Zeile 347 von //#define firstLoad&#039; in &#039;#define firstLoad&#039; geändert werden In den Zeilen 354 bis 356 die Werte für die FHEM-Zentral-ID einfügen (Reading: D-HMIdOriginal 2CC71D) reg.ch_0.pairCentral[0] = 0x2C; reg.ch_0.pairCentral[1] = 0xC7; reg.ch_0.pairCentral[2] = 0x1D; Auch andere Default-Werte wie Peerings und Schaltverhalten können an dieser Stelle verändert werden. Sollte das nicht gewünscht sein, sind diese Zeilen entweder auszukommentieren oder einfach zu löschen. &lt;br /&gt;
** Beispiel (Auszug aus Register.h mit Zeilenangaben)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;16&amp;gt;/* Serial ID       10 byte */  &#039;K&#039;,&#039;E&#039;,&#039;Q&#039;,&#039;0&#039;,&#039;0&#039;,&#039;0&#039;,&#039;0&#039;,&#039;0&#039;,&#039;0&#039;,&#039;7&#039;, // serial ID, needed for pairing&lt;br /&gt;
&amp;lt;22&amp;gt;       const uint8_t  HMID[3]     = { 0x08, 0x15, 0x07 };     // 081507&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
** Die beiden geänderten Dateien speichern und mit &#039;&#039;Sketch -&amp;gt; Überprüfen / Kompilieren&#039;&#039; kompilieren. Im unteren Fenster auf Fehlermeldungen achten!&lt;br /&gt;
** Wenn dies funktioniert hat, sollte im Ordner &#039;&#039;/home/pi/build&#039;&#039; die Datei &#039;&#039;Asksin_HM_LC_Sw1PBU_FM.cpp.hex&#039;&#039; mit aktuellem Datum erzeugt worden sein.&lt;br /&gt;
&lt;br /&gt;
== Bootloader ==&lt;br /&gt;
* Datei /root/hm_switch/Asksin_OTA_Bootloader/devices/HM-LC-Sw1PBU-FM.h editieren und dabei Seriennummer, HMID und die Typ setzen. Seriennummer und HMID müssen in eurer Umgebung eindeutig sein, Typ ist: &#039;&#039;&#039;0xF0A9&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /root/hm_switch/Asksin_OTA_Bootloader/devices/HM-LC-Sw1PBU-FM.h&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
** Beispiel: HMID -&amp;gt; 081507, Seriennummer: KEQ0000007&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/ The model type (not used from bootloader)&lt;br /&gt;
#define HM_TYPE              0xF0, 0xA9&lt;br /&gt;
// 10 bytes serial number. Must be unique for each device&lt;br /&gt;
#define HM_SERIAL            &#039;K&#039;, &#039;E&#039;, &#039;Q&#039;, &#039;0&#039;, &#039;0&#039;, &#039;0&#039;, &#039;0&#039;, &#039;0&#039;, &#039;0&#039;, &#039;7&#039;&lt;br /&gt;
// 3 bytes The device address (hm_id)&lt;br /&gt;
#define HM_ID                0x08, 0x15, 0x07&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Eine Verzeichnisebene höher und Bootloader bauen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /root/hm_switch/Asksin_OTA_Bootloader/&lt;br /&gt;
make clean HM_LC_Sw1PBU_FM_8k&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dabei sollte die Datei &#039;&#039;bootloader_HM-LC-Sw1PBU-FM.hex&#039;&#039; herauskommen. Diese wird später auf den Schalter geflasht&lt;br /&gt;
&lt;br /&gt;
== Flashen ==&lt;br /&gt;
* Erzeugte Bootloader-Datei und Firmware in ein Verzeichnis kopieren:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp /home/pi/build/Asksin_HM_LC_Sw1PBU_FM.cpp.hex /root/hm_switch/flash/firmware.hex &amp;amp;&amp;amp; cp /root/hm_switch/Asksin_OTA_Bootloader/Bootloader-AskSin-OTA-HM_LC_Sw1PBU_FM_8k.hex /root/hm_switch/flash/bootloader.hex&lt;br /&gt;
cd /root/hm_switch/flash/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Hinweis: In älteren Beschreibungen findet man häufig die Ziel-Plattform m644. Diese Unterscheidet sich praktisch in der Stromaufnahme des Chips, führt beim avrdude aber zu &#039;&#039;&#039;Fehlermeldungen&#039;&#039;&#039;, deshalb auf &#039;&#039;&#039;m6444p&#039;&#039;&#039; achten&lt;br /&gt;
* &#039;&#039;&#039;Fuses&#039;&#039;&#039; setzen&lt;br /&gt;
&#039;&#039;avrdude -p m644p -P gpio -c gpio -U lfuse:w:0xFD:m -U hfuse:w:0xD8:m -U lock:w:0x3F:m&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
avrdude: AVR device initialized and ready to accept instructions&lt;br /&gt;
Reading | ################################################## | 100% 0.00s&lt;br /&gt;
avrdude: Device signature = 0x1e960a&lt;br /&gt;
avrdude: reading input file &amp;quot;0xFD&amp;quot;&lt;br /&gt;
avrdude: writing lfuse (1 bytes):&lt;br /&gt;
Writing | ################################################## | 100% 0.00s&lt;br /&gt;
avrdude: 1 bytes of lfuse written&lt;br /&gt;
avrdude: verifying lfuse memory against 0xFD:&lt;br /&gt;
avrdude: load data lfuse data from input file 0xFD:&lt;br /&gt;
avrdude: input file 0xFD contains 1 bytes&lt;br /&gt;
avrdude: reading on-chip lfuse data:&lt;br /&gt;
Reading | ################################################## | 100% 0.00s&lt;br /&gt;
avrdude: verifying ...&lt;br /&gt;
avrdude: 1 bytes of lfuse verified&lt;br /&gt;
avrdude: reading input file &amp;quot;0xD8&amp;quot;&lt;br /&gt;
avrdude: writing hfuse (1 bytes):&lt;br /&gt;
Writing | ################################################## | 100% 0.00s&lt;br /&gt;
avrdude: 1 bytes of hfuse written&lt;br /&gt;
avrdude: verifying hfuse memory against 0xD8:&lt;br /&gt;
avrdude: load data hfuse data from input file 0xD8:&lt;br /&gt;
avrdude: input file 0xD8 contains 1 bytes&lt;br /&gt;
avrdude: reading on-chip hfuse data:&lt;br /&gt;
Reading | ################################################## | 100% 0.00s&lt;br /&gt;
avrdude: verifying ...&lt;br /&gt;
avrdude: 1 bytes of hfuse verified&lt;br /&gt;
avrdude: safemode: Fuses OK&lt;br /&gt;
avrdude done.  Thank you.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Bootloader&#039;&#039;&#039; flashen&lt;br /&gt;
&#039;&#039;avrdude -p m644p -P gpio -c gpio -U flash:w:bootloader.hex&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
avrdude: AVR device initialized and ready to accept instructions&lt;br /&gt;
Reading | ################################################## | 100% 0.00s&lt;br /&gt;
avrdude: Device signature = 0x1e960a&lt;br /&gt;
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed&lt;br /&gt;
         To disable this feature, specify the -D option.&lt;br /&gt;
avrdude: erasing chip&lt;br /&gt;
avrdude: reading input file &amp;quot;bootloader_HM-LC-Sw1PBU-FM.hex&amp;quot;&lt;br /&gt;
avrdude: input file bootloader_HM-LC-Sw1PBU-FM.hex auto detected as Intel Hex&lt;br /&gt;
avrdude: writing flash (61372 bytes):&lt;br /&gt;
Writing | ################################################## | 100% 30.86s&lt;br /&gt;
avrdude: 61372 bytes of flash written&lt;br /&gt;
avrdude: verifying flash memory against bootloader_HM-LC-Sw1PBU-FM.hex:&lt;br /&gt;
avrdude: load data flash data from input file bootloader_HM-LC-Sw1PBU-FM.hex:&lt;br /&gt;
avrdude: input file bootloader_HM-LC-Sw1PBU-FM.hex auto detected as Intel Hex&lt;br /&gt;
avrdude: input file bootloader_HM-LC-Sw1PBU-FM.hex contains 61372 bytes&lt;br /&gt;
avrdude: reading on-chip flash data:&lt;br /&gt;
Reading | ################################################## | 100% 28.95s&lt;br /&gt;
avrdude: verifying ...&lt;br /&gt;
avrdude: 61372 bytes of flash verified&lt;br /&gt;
avrdude: safemode: Fuses OK&lt;br /&gt;
avrdude done.  Thank you.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Firmware&#039;&#039;&#039; flashen (aus der Arduino-IDE)&lt;br /&gt;
&#039;&#039;avrdude -p m644p -P gpio -c gpio -U flash:w:firmware.hex&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
avrdude: AVR device initialized and ready to accept instructions&lt;br /&gt;
Reading | ################################################## | 100% 0.00s&lt;br /&gt;
avrdude: Device signature = 0x1e960a&lt;br /&gt;
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed&lt;br /&gt;
         To disable this feature, specify the -D option.&lt;br /&gt;
avrdude: erasing chip&lt;br /&gt;
avrdude: reading input file &amp;quot;Asksin_HM_LC_Sw1PBU_FM.cpp.hex&amp;quot;&lt;br /&gt;
avrdude: input file Asksin_HM_LC_Sw1PBU_FM.cpp.hex auto detected as Intel Hex&lt;br /&gt;
avrdude: writing flash (19042 bytes):&lt;br /&gt;
Writing | ################################################## | 100% 9.79s&lt;br /&gt;
avrdude: 19042 bytes of flash written&lt;br /&gt;
avrdude: verifying flash memory against Asksin_HM_LC_Sw1PBU_FM.cpp.hex:&lt;br /&gt;
avrdude: load data flash data from input file Asksin_HM_LC_Sw1PBU_FM.cpp.hex:&lt;br /&gt;
avrdude: input file Asksin_HM_LC_Sw1PBU_FM.cpp.hex auto detected as Intel Hex&lt;br /&gt;
avrdude: input file Asksin_HM_LC_Sw1PBU_FM.cpp.hex contains 19042 bytes&lt;br /&gt;
avrdude: reading on-chip flash data:&lt;br /&gt;
Reading | ################################################## | 100% 9.28s&lt;br /&gt;
avrdude: verifying ...&lt;br /&gt;
avrdude: 19042 bytes of flash verified&lt;br /&gt;
avrdude: safemode: Fuses OK&lt;br /&gt;
avrdude done.  Thank you.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Schalter (Sender)]]&lt;br /&gt;
[[Kategorie:Schalter (Empfänger)]]&lt;/div&gt;</summary>
		<author><name>Klinki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=HM-LC-Sw1PBU-FM_Alternative_Firmware&amp;diff=17126</id>
		<title>HM-LC-Sw1PBU-FM Alternative Firmware</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=HM-LC-Sw1PBU-FM_Alternative_Firmware&amp;diff=17126"/>
		<updated>2016-11-09T10:18:05Z</updated>

		<summary type="html">&lt;p&gt;Klinki: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Randnotiz|RNTyp=r|RNText=Bei den hier gezeigten Modifikationen geht die Garantie verloren und das Gerät verliert seine Zertifizierungen!}}&lt;br /&gt;
Um die alternative Firmware auf den [[HM-LC-Sw1PBU-FM Unterputz-Schaltaktor 1-fach‎|HM-LC-Sw1PBU-FM]]  flashen zu können, muss das Gerät geöffnet und ein Programmer angelötet werden. &lt;br /&gt;
&lt;br /&gt;
== Neue Funktionen ==&lt;br /&gt;
* Der Taster kann mit anderen Geräten [[Homematic Peering Beispiele|gepeert]] werden. Das ist mit der Originalfirmware nicht möglich.&lt;br /&gt;
* Die alternative Firmware hat eine Stromerkennung, die hardwaretechnisch immer vorhanden ist, aber von der eQ-3 Firmware nicht benutzt wird. Es ist möglich, damit eine Wechselschaltung zu implementieren.&lt;br /&gt;
&lt;br /&gt;
Folgende Kanäle sind jetzt verfügbar&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!  Kanal&lt;br /&gt;
!  Bezeichnung&lt;br /&gt;
|- &lt;br /&gt;
|  Button_1&lt;br /&gt;
|  Taster oben &lt;br /&gt;
|-&lt;br /&gt;
|  Button_2&lt;br /&gt;
|  Taster unten&lt;br /&gt;
|-&lt;br /&gt;
|  Switch_1&lt;br /&gt;
|  der Switch_01 (Kanal 3 des Aktors) ist der virtuellen Kanal. &amp;lt;br&amp;gt;Wenn man den einschaltet, brennt das Licht, er berücksichtigt also einen ggf. schon bestehenden Stromfluss.&amp;lt;br&amp;gt;Wenn man den Ausschaltet, geht das Licht aus, wenn es nicht schon aus war. &amp;lt;br&amp;gt;Er zeigt weiterhin an, ob das Licht gerade an oder aus ist.  &lt;br /&gt;
|-&lt;br /&gt;
|  Switch_2&lt;br /&gt;
|  der Switch_02 ist das Relais und funktioniert so , wie die HM-eigene Firmware vorher auch funktioniert hat. &amp;lt;br&amp;gt;Relais an/aus. Den braucht man also &amp;quot;eigentlich nicht&amp;quot;.&lt;br /&gt;
|}&lt;br /&gt;
== Hinweis zum Einbau ==&lt;br /&gt;
Bei Einsatz in einer Wechselschaltung (oder Kreuz- und Wechselschaltung) ist der HM Schaltaktor immer auf der Seite der Verkabelung einzubauen, wo die ungeschaltete Phase zugeführt wird. Bei Einbau auf der Seite, die zur Lampe abgeht, funktioniert es nicht, da in diesem Fall im ausgeschalteten Zustand der HM-Switch stromlos ist. Es ist also nicht gleichgültig, an welchem Ende einer (Kreuz- und) Wechselschalter-Kette der HM-Switch eingebaut werden muss.&lt;br /&gt;
&lt;br /&gt;
== Integration des Schalters in FHEM ==&lt;br /&gt;
===Vorbereitungen===&lt;br /&gt;
Für die alternative Firmware existiert ein eigenes Modul. Dieses ist als Erstes zu installieren bzw nach ./FHEM zu kopieren:&lt;br /&gt;
:[https://github.com/jabdoa2/Asksin_HM_LC_Sw1PBU_FM/blob/master/fhem/99_Asksin_HM_LC_Sw1PBU_FM_CustomFW.pm 99_Asksin_HM_LC_Sw1PBU_FM_CustomFW.pm] &lt;br /&gt;
&lt;br /&gt;
=== Anlernen ===&lt;br /&gt;
In FHEM ist der HomeMatic-[[CUL]] in den Anlernmodus zu bringen. Der ConfigButton des Schalters ist nun länger als vier Sekunden zu drücken. Wichtig: die LED darf nach Loslassen des Button nicht aufblinken; sie gibt keine Rückmeldung über den Status des Anlernvorgangs.&lt;br /&gt;
&lt;br /&gt;
Nach dem Anlernen sollte nochmal die aktuelle Config ausgelesen werden. Das kann ein paar Sekunden dauern und ist abgeschlossen, sobald der &amp;quot;state&amp;quot; = &amp;quot;cmds done&amp;quot; ist.&lt;br /&gt;
 set &amp;lt;HM-LC-SW1PBU-FM_Device&amp;gt; getConfig&lt;br /&gt;
&lt;br /&gt;
Möchte man erneut pairen, so geht dies am einfachsten mit:&lt;br /&gt;
 set &amp;lt;HM-LC-SW1PBU-FM_Device&amp;gt; regSet pairCentral &amp;lt;123456&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Schalter wie einen &amp;quot;normalen&amp;quot; Schalter wirken zu lassen, müssen noch die Buttons mit dem Switch [[Peering (HomeMatic)|gepeert]] werden. Danach bewirkt ein Tastendruck nach oben ein Einschalten, und ein Druck nach unten ein Ausschalten. Unterlässt man diesen Schritt, passiert bei einem Tastendruck am angeschlossenen Verbraucher nichts.&lt;br /&gt;
 set &amp;lt;HM-LC-SW1PBU-FM_Btn_01 peerChan 0 &amp;lt;HM-LC-SW1PBU-FM_Sw_01 dual set &lt;br /&gt;
&lt;br /&gt;
Das erzeugt automatisch ein Peering zwischen deinen beiden internen Tastern und dem Kanal 3 (Sw_01). Damit sollte der Schalter eigentlich schon funktionieren &lt;br /&gt;
&lt;br /&gt;
Falls nicht, dann setzt man im Device das Register intKeyVisib auf &amp;quot;visib&amp;quot; und macht ein getConfig auf Kanal 3. Dort sieht man dann die Listen der Peers und erkennt, was dort ein Tastendruck bewirkt. In den Jump Targets (z.B . R-self01-shSwJtDlyOff) usw. muss dann bei dem Button, mit dem man &#039;&#039;&#039;AUS&#039;&#039;&#039;schalten will überall OFF stehen, und bei dem anderen Button entsprechend On.&lt;br /&gt;
&lt;br /&gt;
Noch einfacher wäre es, falls vorhanden, ein Registerset von einem schon wie gewünscht konfigurierten Schalter (das kann auch einer mit Standard-FW sein) zu kopieren. Das geht mit dem Modul hminfo.&lt;br /&gt;
&lt;br /&gt;
=== Reset ===&lt;br /&gt;
Um den Schalter zu resetten ist der ConfigButton 2x hintereinander für &amp;gt; 4sek zu drücken. Auch hier liefert die LED keinerlei Rückmeldung über den Status. Blinks die LED trotzdem auf, so wurde das Drücken des Buttons nicht als &amp;quot;lang&amp;quot; erkannt.&lt;br /&gt;
Alternativ kann ein Reset über FHEM ausgelöst werden:&lt;br /&gt;
 set &amp;lt;HM-LC-SW1PBU-FM_Device&amp;gt; reset&lt;br /&gt;
&lt;br /&gt;
=== Advanced settings ===&lt;br /&gt;
Interne Peers&lt;br /&gt;
Ein Kanal kann interne Peers haben. Beispiele sind die meisten Schalter oder Dimmer an welchen direkt ein mechanischer Schalter angeschlossen werden kann, oder ein Bedienschalter direkt eingebaut ist. Die Firmware (FW) des Kanals behandelt diesen wie einen externen Peer, nur ist er automatisch eingerichtet. Es stehen die identischen Register wie bei &#039;normalen&#039; Peers zu Verfügung. Diese Peers sind nicht automatisch sichtbar, können aber sichtbar geschaltet werden. Hierzu ist das&lt;br /&gt;
Register &#039;&#039;&#039;intKeyVisib&#039;&#039;&#039; auf &#039;&#039;visib&#039;&#039; zu setzen (siehe HM-Konfiguration)-siehe auch getConfig. Danach kann man das Verhalten der „eingebauten Peers“ auslesen und verändern wie von jedem anderen Peer auch. Die internen Peers werden &#039;&#039;&#039;selfxx&#039;&#039;&#039; benannt (self01, self02,...). &lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;HM-LC-SW1PBU-FM_Sw_01&amp;gt; intKeyVisib visib&lt;br /&gt;
 set &amp;lt;HM-LC-SW1PBU-FM_SW_01&amp;gt; getConfig&lt;br /&gt;
&lt;br /&gt;
Beispiel: Schaut man in die Readings des Devices und sieht ein: &#039;&#039;&#039;R-self01-shActionType   off&#039;&#039;&#039; bedeutet dies, dass der Button 1 (der nach &amp;quot;oben&amp;quot;) deaktiviert ist für diesen Peer und somit keine Funktion hat. Dieser ist auf &amp;quot;jmpToTarget&amp;quot; zu setzen und dann noch die folgenden auf &amp;quot;on&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
* R-self01-shSwJtDlyOff   &lt;br /&gt;
* R-self01-shSwJtDlyOn   &lt;br /&gt;
* R-self01-shSwJtOff   &lt;br /&gt;
* R-self01-shSwJtOn   &lt;br /&gt;
&lt;br /&gt;
Für Button 2 das selbe, aber eben nicht &amp;quot;on&amp;quot; sondern off.&lt;br /&gt;
Natürlich kann man es auch anders nutzen. Z.b. einen Button als Toggle und den anderen Button für etwas völlig anderes. Das ist ja das schöne, dass dies bei der CustomFW möglich ist.&lt;br /&gt;
&lt;br /&gt;
Beispiel das ein kurzer Tastendruck - oben oder unten - ein Toggle bewirkt:&lt;br /&gt;
 set &amp;lt;HM_LC_Sw1PBU_FM_Sw_01&amp;gt; regSet shActionType  jmpToTarget self01;&lt;br /&gt;
 set &amp;lt;HM_LC_Sw1PBU_FM_Sw_01&amp;gt; regSet shSwJtOn      dlyOff      self01;&lt;br /&gt;
 set &amp;lt;HM_LC_Sw1PBU_FM_Sw_01&amp;gt; regSet shSwJtOff     dlyOn       self01;&lt;br /&gt;
 set &amp;lt;HM_LC_Sw1PBU_FM_Sw_01&amp;gt; regSet shSwJtDlyOn   on          self01;&lt;br /&gt;
 set &amp;lt;HM_LC_Sw1PBU_FM_Sw_01&amp;gt; regSet shSwJtDlyOff  off         self01;&lt;br /&gt;
 &lt;br /&gt;
 set &amp;lt;HM_LC_Sw1PBU_FM_Sw_01&amp;gt; regSet shActionType  jmpToTarget self02;&lt;br /&gt;
 set &amp;lt;HM_LC_Sw1PBU_FM_Sw_01&amp;gt; regSet shSwJtOn      dlyOff      self02;&lt;br /&gt;
 set &amp;lt;HM_LC_Sw1PBU_FM_Sw_01&amp;gt; regSet shSwJtOff     dlyOn       self02;&lt;br /&gt;
 set &amp;lt;HM_LC_Sw1PBU_FM_Sw_01&amp;gt; regSet shSwJtDlyOn   on          self02;&lt;br /&gt;
 set &amp;lt;HM_LC_Sw1PBU_FM_Sw_01&amp;gt; regSet shSwJtDlyOff  off         self02;&lt;br /&gt;
&lt;br /&gt;
== Vorgehen zum Flashen ==&lt;br /&gt;
=== Anpassung des Strom-Schwellwertes bei LowCurrent Verbrauchern ===&lt;br /&gt;
Werden am Schalter nur sehr schwache Verbraucher angeschlossen,  so kann u.U. die Statuserkennung (Verbraucher an/aus) nicht korrekt funktionieren. Ändern kann man das in Asksin_HM_LC_Sw1PBU_FM.ino, und zwar hier: &lt;br /&gt;
 const unsigned long minImpulsLength = 5000;&lt;br /&gt;
Dabei entsprechen anscheinend die 5000 dem Schwellwert 500, die kann man jetzt z.B. auf 500 setzen, also Schwellwert 50.&lt;br /&gt;
&lt;br /&gt;
Man muss ein wenig aufpassen, das nicht zu niedrig zu setzen, damit es zu keinen Fehlerkennungen bei Spannungsspitzen im Hausnetz kommt... Beim Autor ist im ausgeschalteten Zustand der Lampe der Wert aber deutlich unter 50...&lt;br /&gt;
 &lt;br /&gt;
=== Vorbereitung der Platine des Schalters ===&lt;br /&gt;
An der fertigen Platine sind an den folgenden Kontakten Kabel zum Anschluss an das Programmiergerät anzulöten.  &amp;lt;br&amp;gt;&lt;br /&gt;
Wenn man den HM-LC-SW1PBU-FM vor sich liegen hat, liegen die Pins in folgender Reihenfolge:&lt;br /&gt;
:Reihe 1: MP3 / MP5 / MP6&lt;br /&gt;
:Reihe 2: MP15 / MP4 / MP2&lt;br /&gt;
&lt;br /&gt;
=== Anschluss der einzelnen PINs bei Verwendung der GPIO-Ports des Raspberry PI ===&lt;br /&gt;
 [[Raspberry Pi|Raspberry]] PIN | Beschreibung | HM-LC-Sw1PBU-FM&lt;br /&gt;
 --------------|--------------|----------------&lt;br /&gt;
    Pin #17    |    3,3V      |    MP2&lt;br /&gt;
    Pin #19    |    MOSI      |    MP4&lt;br /&gt;
    Pin #21    |    MISO      |    MP5&lt;br /&gt;
    Pin #23    |    SCLK      |    MP6&lt;br /&gt;
    Pin #24    |    Reset     |    MP3&lt;br /&gt;
    Pin #25    |    GND       |    MP15&lt;br /&gt;
&lt;br /&gt;
=== Anschluss der einzelnen PIns bei Nutzung eines ISP-Programmers ===&lt;br /&gt;
Bei Nutzung eines &amp;quot;MySmartUSB light&amp;quot; ist dieser vorher mittels mitgeliefertem Windowsprogramm auf 3V zu umzustellen.&lt;br /&gt;
  ISP-6 PIN   | Beschreibung | HM-LC-Sw1PBU-FM&lt;br /&gt;
 -------------|--------------|----------------&lt;br /&gt;
    Pin #2    |    3,3V      |    MP2&lt;br /&gt;
    Pin #4    |    MOSI      |    MP4&lt;br /&gt;
    Pin #1    |    MISO      |    MP5&lt;br /&gt;
    Pin #3    |    SCLK      |    MP6&lt;br /&gt;
    Pin #5    |    Reset     |    MP3&lt;br /&gt;
    Pin #6    |    GND       |    MP15&lt;br /&gt;
&lt;br /&gt;
Wichtig beim [[Raspberry Pi]] ist, dass man nicht die von Raspbian ausgelieferte Version des &#039;avrdude&#039; nutzen kann, sondern eine adaptierte Version verwendet werden muss.&lt;br /&gt;
Alle notwendigen Dateien zum Flashen (bereits alles fertig und lauffähig) inkl. einem kleinen HowTo sind im unten stehenden Link &#039;Flashen mit RaspberryPi&#039; vorhanden.&lt;br /&gt;
&lt;br /&gt;
=== Vorwort zum flashen per avrdude ===&lt;br /&gt;
Alle folgenden avrdude befehle beziehen sich in der Reihenfolge auf folgende Programmer. Es ist für den jeweiligen Programmer nur der betreffende Befehle abzusetzen&lt;br /&gt;
 * Raspberry Pi&lt;br /&gt;
 * MySmartUSB light (MyAVR)&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Konfiguration der Fuses kann jederzeit ausgelesen werden mit folgendem Befehl:&lt;br /&gt;
 avrdude -p m644 -P gpio -c gpio -v&lt;br /&gt;
 avrdude -p m644 -c stk500v2 -P /dev/ttyUSB0 -v&lt;br /&gt;
&lt;br /&gt;
=== Bootloader bauen ===&lt;br /&gt;
1) Dirks bootloader-umgebung clonen/downloaden https://github.com/kc-GitHub/Asksin_OTA_Bootloader&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2) devicedaten des Schalters (Serial, HMID) in devices/HM-LC-Sw1PBU-FM.h mit den Originaldaten ersetzen und typ=0xF0A9 setzen (modelnummer des schalters mit alternativer firmware). Damit sind die Daten im flash verewigt und man braucht sich eigentlich nicht mehr darum zu kümmern. Bei einem nächsten Bootloader update kann man ein beliebiges bootloader.eq3 file ota flashen. Trotzdem behält der Bootloader seine daten.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
3) Bootloader bauen:&amp;lt;br&amp;gt;&lt;br /&gt;
 make clean HM_LC_Sw1PBU_FM_8k&lt;br /&gt;
&lt;br /&gt;
=== Bootloader flashen ===&lt;br /&gt;
Anschließend muss man nun die Fuses korrekt mit unlock(wichtig) setzen:&lt;br /&gt;
&lt;br /&gt;
 avrdude -p m644 -P gpio -c gpio -U lfuse:w:0xFD:m -U hfuse:w:0xD8:m -U lock:w:0x3F:m&lt;br /&gt;
 avrdude -p m644 -c stk500v2 -P /dev/ttyUSB0 -U lfuse:w:0xFD:m -U hfuse:w:0xD8:m -U lock:w:0x3F:m&lt;br /&gt;
&lt;br /&gt;
und final den Bootloader flashen &lt;br /&gt;
 avrdude -p m644 -P gpio -c gpio -U flash:w:bootloader_HM-LC-Sw1PBU-FM_8k.hex&lt;br /&gt;
 avrdude -p m644 -c stk500v2 -P /dev/ttyUSB0 -U flash:w:bootloader_HM-LC-Sw1PBU-FM_8k.hex&lt;br /&gt;
&lt;br /&gt;
=== Firmware bauen ===&lt;br /&gt;
==== 1. Firmware mit arduino-IDE ====&lt;br /&gt;
&#039;&#039;Hinweis:&#039;&#039; Die folgenden Schritte wurden auf einem Raspberry Pi 2 mit Debian Jessie durchgeführt und folgen größtenteils der howtoBuild.txt von Mr.P aus [https://owncloud.isengard.at/index.php/s/8992affb68e8c1dcbe532152628ad9a5]&lt;br /&gt;
* In manchen Adruino-IDE Umgebungen werden Builds gelöscht, bevor sie auf die Hardware gespielt werden. Das muss verhindert werden! Bei Raspbian Jessie und dem User pi befinden sich die Voreinstellungen der IDE in /home/pi/.arduino/preferences.txt. Dort folgende Änderungen machen, bzw. Einträge hinzufügen &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
build.path=/home/pi/build&lt;br /&gt;
...&lt;br /&gt;
export.delete_target_folder=false&lt;br /&gt;
...&lt;br /&gt;
preproc.save_build_files=true&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Auf den raspi in den Ordner &#039;&#039;/usr/share/arduino/hardware&#039;&#039; wechseln. Hardware-Board für den ATMega644 laden &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone https://github.com/jabdoa2/jabduino&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Arduino im grafischen Frontend (oder X-Terminal) starten. unter &amp;lt;File&amp;gt;/&amp;lt;Preferences&amp;gt; findet man den Sketchbook-Ordner&lt;br /&gt;
* Über die Konsole in den Sketchbook-Ordner wechseln. Für User &amp;quot;pi&amp;quot; idR &#039;&#039;/home/pi/sketchbook&#039;&#039;&lt;br /&gt;
* Dort die Firmware-Quellen einfügen&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone https://github.com/jabdoa2/Asksin_HM_LC_Sw1PBU_FM.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Wieder in die Arduino-Umgebung wechseln, unter &amp;lt;File&amp;gt;/&amp;lt;Sketchbook&amp;gt;/&amp;lt;Asksin_HM_LC_Sw1PBU_FM&amp;gt; öffnen&lt;br /&gt;
* unter &amp;lt;Tools&amp;gt;/&amp;lt;Board&amp;gt; &amp;quot;Jabduino ATmega644A&amp;quot; auswählen&lt;br /&gt;
* In der Datei &#039;&#039;Asksin_HM_LC_Sw1PBU_FM&#039;&#039; den Wert in Zeile 64 eventuell &amp;quot;const unsigned long minImpulsLength = 5000;&amp;quot; ändern. Der dort eingetragene Wert gilt als Schwellwert, wann der Schalter erkennen soll, dass ein angeschlossener Wechselschalter gedrückt wurde und somit erkannt wird, dass Strom fließt.&lt;br /&gt;
* in der Datei &#039;&#039;Register.h&#039;&#039; in Zeile 22 den Wert von HMID[3] ändern. Z.B.: &amp;quot;const uint8_t  HMID[3]     = { 0x20, 0x85, 0x57 };     // 208557&amp;quot;&lt;br /&gt;
Zusätzlich kann die eigene Zentrale bereits als Default-Wert in den Schalter eingetragen werden. Dadurch entfällt ein unter Umständen notwendiges Peering. Dafür muss die Zeile 347 von &#039;//#define firstLoad&#039; in &#039;#define firstLoad&#039; geändert werden&lt;br /&gt;
In den Zeilen 354 bis 356 die Werte für die FHEM-Zentral-ID einfügen (Reading: D-HMIdOriginal   2CC71D)&lt;br /&gt;
reg.ch_0.pairCentral[0] = 0x2C;&lt;br /&gt;
reg.ch_0.pairCentral[1] = 0xC7;&lt;br /&gt;
reg.ch_0.pairCentral[2] = 0x1D;&lt;br /&gt;
Auch andere Default-Werte wie Peerings und Schaltverhalten können an dieser Stelle verändert werden. Sollte das nicht gewünscht sein, sind diese Zeilen entweder auszukommentieren oder einfach zu löschen.&lt;br /&gt;
* Alle Dateien speichern&lt;br /&gt;
* &amp;lt;Sketch&amp;gt;/&amp;lt;Verifiy/Compile&amp;gt; alles kompilieren&lt;br /&gt;
* Im oben definierten Build-Path (/home/pi/build) sollte jetzt eine Datei &#039;&#039;Asksin_HM_LC_Sw1PBU_FM.cpp.hex&#039;&#039; stehen. Das ist unsere fertige Firmware, die auf den Schalter geflasht werden muss&lt;br /&gt;
&lt;br /&gt;
=== Firmware über Raspberry Pi flashen ===&lt;br /&gt;
* Hinweis: In älteren Beschreibungen findet man häufig die Ziel-Plattform m644. Diese unterscheidet sich praktisch in der Stromaufnahme des Chips, führt beim avrdude aber zu &#039;&#039;&#039;Fehlermeldungen&#039;&#039;&#039;, deshalb auf &#039;&#039;&#039;m6444p&#039;&#039;&#039; achten&lt;br /&gt;
* 1. &#039;&#039;&#039;Fuses&#039;&#039;&#039; setzen&lt;br /&gt;
&#039;&#039;avrdude -p m644p -P gpio -c gpio -U lfuse:w:0xFD:m -U hfuse:w:0xD8:m&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
avrdude: AVR device initialized and ready to accept instructions&lt;br /&gt;
Reading | ################################################## | 100% 0.00s&lt;br /&gt;
avrdude: Device signature = 0x1e960a&lt;br /&gt;
avrdude: reading input file &amp;quot;0xFD&amp;quot;&lt;br /&gt;
avrdude: writing lfuse (1 bytes):&lt;br /&gt;
Writing | ################################################## | 100% 0.00s&lt;br /&gt;
avrdude: 1 bytes of lfuse written&lt;br /&gt;
avrdude: verifying lfuse memory against 0xFD:&lt;br /&gt;
avrdude: load data lfuse data from input file 0xFD:&lt;br /&gt;
avrdude: input file 0xFD contains 1 bytes&lt;br /&gt;
avrdude: reading on-chip lfuse data:&lt;br /&gt;
Reading | ################################################## | 100% 0.00s&lt;br /&gt;
avrdude: verifying ...&lt;br /&gt;
avrdude: 1 bytes of lfuse verified&lt;br /&gt;
avrdude: reading input file &amp;quot;0xD8&amp;quot;&lt;br /&gt;
avrdude: writing hfuse (1 bytes):&lt;br /&gt;
Writing | ################################################## | 100% 0.00s&lt;br /&gt;
avrdude: 1 bytes of hfuse written&lt;br /&gt;
avrdude: verifying hfuse memory against 0xD8:&lt;br /&gt;
avrdude: load data hfuse data from input file 0xD8:&lt;br /&gt;
avrdude: input file 0xD8 contains 1 bytes&lt;br /&gt;
avrdude: reading on-chip hfuse data:&lt;br /&gt;
Reading | ################################################## | 100% 0.00s&lt;br /&gt;
avrdude: verifying ...&lt;br /&gt;
avrdude: 1 bytes of hfuse verified&lt;br /&gt;
avrdude: safemode: Fuses OK&lt;br /&gt;
avrdude done.  Thank you.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* 2. &#039;&#039;&#039;Bootloader&#039;&#039;&#039; flashen (falls noch nicht geschehen, wie  [[HM-LC-Sw1PBU-FM_Alternative_Firmware#Bootloader_flashen|oben]] beschrieben)&lt;br /&gt;
&#039;&#039;avrdude -p m644p -P gpio -c gpio -U flash:w:bootloader_HM-LC-Sw1PBU-FM.hex&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
avrdude: AVR device initialized and ready to accept instructions&lt;br /&gt;
Reading | ################################################## | 100% 0.00s&lt;br /&gt;
avrdude: Device signature = 0x1e960a&lt;br /&gt;
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed&lt;br /&gt;
         To disable this feature, specify the -D option.&lt;br /&gt;
avrdude: erasing chip&lt;br /&gt;
avrdude: reading input file &amp;quot;bootloader_HM-LC-Sw1PBU-FM.hex&amp;quot;&lt;br /&gt;
avrdude: input file bootloader_HM-LC-Sw1PBU-FM.hex auto detected as Intel Hex&lt;br /&gt;
avrdude: writing flash (61372 bytes):&lt;br /&gt;
Writing | ################################################## | 100% 30.86s&lt;br /&gt;
avrdude: 61372 bytes of flash written&lt;br /&gt;
avrdude: verifying flash memory against bootloader_HM-LC-Sw1PBU-FM.hex:&lt;br /&gt;
avrdude: load data flash data from input file bootloader_HM-LC-Sw1PBU-FM.hex:&lt;br /&gt;
avrdude: input file bootloader_HM-LC-Sw1PBU-FM.hex auto detected as Intel Hex&lt;br /&gt;
avrdude: input file bootloader_HM-LC-Sw1PBU-FM.hex contains 61372 bytes&lt;br /&gt;
avrdude: reading on-chip flash data:&lt;br /&gt;
Reading | ################################################## | 100% 28.95s&lt;br /&gt;
avrdude: verifying ...&lt;br /&gt;
avrdude: 61372 bytes of flash verified&lt;br /&gt;
avrdude: safemode: Fuses OK&lt;br /&gt;
avrdude done.  Thank you.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* 3. &#039;&#039;&#039;Firmware&#039;&#039;&#039; flashen (aus der Arduino-IDE)&lt;br /&gt;
&#039;&#039;avrdude -p m644p -P gpio -c gpio -U flash:w:Asksin_HM_LC_Sw1PBU_FM.cpp.hex&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
avrdude: AVR device initialized and ready to accept instructions&lt;br /&gt;
Reading | ################################################## | 100% 0.00s&lt;br /&gt;
avrdude: Device signature = 0x1e960a&lt;br /&gt;
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed&lt;br /&gt;
         To disable this feature, specify the -D option.&lt;br /&gt;
avrdude: erasing chip&lt;br /&gt;
avrdude: reading input file &amp;quot;Asksin_HM_LC_Sw1PBU_FM.cpp.hex&amp;quot;&lt;br /&gt;
avrdude: input file Asksin_HM_LC_Sw1PBU_FM.cpp.hex auto detected as Intel Hex&lt;br /&gt;
avrdude: writing flash (19042 bytes):&lt;br /&gt;
Writing | ################################################## | 100% 9.79s&lt;br /&gt;
avrdude: 19042 bytes of flash written&lt;br /&gt;
avrdude: verifying flash memory against Asksin_HM_LC_Sw1PBU_FM.cpp.hex:&lt;br /&gt;
avrdude: load data flash data from input file Asksin_HM_LC_Sw1PBU_FM.cpp.hex:&lt;br /&gt;
avrdude: input file Asksin_HM_LC_Sw1PBU_FM.cpp.hex auto detected as Intel Hex&lt;br /&gt;
avrdude: input file Asksin_HM_LC_Sw1PBU_FM.cpp.hex contains 19042 bytes&lt;br /&gt;
avrdude: reading on-chip flash data:&lt;br /&gt;
Reading | ################################################## | 100% 9.28s&lt;br /&gt;
avrdude: verifying ...&lt;br /&gt;
avrdude: 19042 bytes of flash verified&lt;br /&gt;
avrdude: safemode: Fuses OK&lt;br /&gt;
avrdude done.  Thank you.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oder man flasht die Firmware, wie im folgenden Abschnitt beschrieben, OTA (over the air). Das funktioniert mit dem Bootloader natürlich nicht. Dieser kann nur über einen Programmer oder Raspberry Pi auf den Schalter geflasht werden.&lt;br /&gt;
Der Vorteil bei OTA ist, dass für ein Update der Firmware der Schalter nicht mehr ausgebaut werden müsste.&lt;br /&gt;
&lt;br /&gt;
=== Firmware OTA flashen ===&lt;br /&gt;
====1. Konvertieren in das eq3 Format====&lt;br /&gt;
Konvertieren der Hex-Datei in das eq3 format mittels [https://github.com/kc-GitHub/Wettersensor/blob/master/Contrib/hex2eq3.php hex2eq3.php] (die php-cli muss installiert sein)&lt;br /&gt;
&lt;br /&gt;
 php hex2eq3.php --inFile Asksin_HM_LC_Sw1PBU_FM.cpp.hex --outFile HM_LC_Sw1PBU_FM.eq3 --spmPageSize 256 --hexEndAddress 0xDFFE --outFormat eq3 --withCrcCheck --pathTo-srec_cat /usr/bin/srec_cat&lt;br /&gt;
&lt;br /&gt;
====2. Flashvorgang starten====&lt;br /&gt;
Im flash-ota Tool eq3 das Device, die File- und Seriennummer eingeben&amp;lt;br&amp;gt;&lt;br /&gt;
Solltet ihr mittels CUL, COC oder HM-CFG-USB-2 direkt auf eurem Raspberry flashen, könnt ihr das bereitgestellte [https://owncloud.isengard.at/public.php?service=files&amp;amp;t=8992affb68e8c1dcbe532152628ad9a5&amp;amp;path=%2F&amp;amp;files=flash-ota&amp;amp;download flash-ota Binary] verwenden. Ansonsten einfach [https://git.zerfleddert.de/cgi-bin/gitweb.cgi/hmcfgusb herunterladen] und für euer System selbst kompilieren:&lt;br /&gt;
&lt;br /&gt;
Wenn ihr einen HM-CFG-USB-2 verwendet, wird flash-ota mittels:&lt;br /&gt;
 flash-ota -f firmware_HM-LC-Sw1PBU-FM.eq3 -s &amp;lt;SerialNr&amp;gt;&lt;br /&gt;
gestartet. Bei Verwendung eines CUL oder COC, muss das Device mit angegeben werden:&lt;br /&gt;
 flash-ota -f firmware_HM-LC-Sw1PBU-FM.eq3 -s &amp;lt;SerialNr&amp;gt; -c /dev/ttyAMA0 # für den COC&lt;br /&gt;
 flash-ota -f firmware_HM-LC-Sw1PBU-FM.eq3 -s &amp;lt;SerialNr&amp;gt; -c /dev/ttyACM0 # für den CUL&lt;br /&gt;
&lt;br /&gt;
====3. Bootloader aktivieren====&lt;br /&gt;
Zum Abschluss muss der Bootloader im Device/Schalter aktiviert werden. Dazu ist das Device zu resetten:&amp;lt;br&amp;gt;&lt;br /&gt;
* Netzversorgung vom schalter ausschalten, config taster drücken und halten, spannung einschalten und weiterhin gedrückt halten bis erstes blinken erscheint. &amp;lt;br&amp;gt;&lt;br /&gt;
oder falls das Device bereits in FHEM angelegt und gepaired ist:&amp;lt;br&amp;gt;&lt;br /&gt;
* Device in fhem ein &amp;quot;set &amp;lt;device&amp;gt; reset&amp;quot; absetzen, danach innerhalb von 10sek die ConfigTaste für ???-sek drücken&lt;br /&gt;
* Dies funktioniert mit der Firmware ohne Änderungen definitiv nicht. Es löst ausschließlich einen Werksreset im Schalter aus&lt;br /&gt;
Um den Bootloader am Schalter selbst zu aktivieren, ohne den Schalter stromlos zu machen, muss die Firmware, hier &#039;&#039;&#039;Asksin_HM_LC_Sw1PBU_FM.ino&#039;&#039;&#039; und &#039;&#039;&#039;register.h&#039;&#039;&#039;, gemäß {{Link2Forum|Topic=18071|Message=275891|LinkText=Forum}} (&#039;&#039;&#039;Danke&#039;&#039;&#039; Frank!) angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Nach diesen Änderungen hat der Schalter unter anderem ein Bootmenü mit 3 Menüoptionen:&lt;br /&gt;
* Option 1: Manueller Reboot &#039;&#039;&#039;-&amp;gt; diese ist zu wählen&#039;&#039;&#039;&lt;br /&gt;
* Option 2: enable software reboot (fhem kann durch set fwupdate das Booten einleiten, weiterführende Lektüre {{Link2Forum|Topic=23329|LinkText=hier}}.&lt;br /&gt;
* Option 3: disable software reboot (das automatische Booten wird verhindert, default)&lt;br /&gt;
Man gelangt in das Menü, indem man das lange Drücken des Config-Tasters über die ersten 3 Sekunden verlängert. Alle 3 Sekunden erfolgt ein Umschalten in die nächste Bootmenüoption.&lt;br /&gt;
&lt;br /&gt;
Die augenblickliche Option wird durch Blinken angezeigt:&lt;br /&gt;
* Option 1 1x blinken&lt;br /&gt;
* Option 2 2x blinken&lt;br /&gt;
* Option 3 3x blinken&lt;br /&gt;
Nach der 3. Option gelangt man wieder zur 1. Option, usw ... &amp;lt;br&amp;gt;&lt;br /&gt;
Wird der Config-Taster nach dem jeweiligen Blinken losgelassen, wird die entsprechende Menüoption ausgeführt.&lt;br /&gt;
&lt;br /&gt;
Jetzt sollte man beim Flashtool etwas sehen. Während des flashens blinkt auch die LED auf dem Schalter analog den übertragenen Datenblöcken&lt;br /&gt;
&lt;br /&gt;
===Bootloader OTA flashen===&lt;br /&gt;
Soll später ein neuer Bootloader mit neuen Features installiert werden, so kann dieser ebenfalls OTA geflashed werden ohne Schalter ausbauen und Löten.&lt;br /&gt;
&lt;br /&gt;
Der Bootloader ist zu bauen wie im Abschnitt zuvor erklärt. Anschließend mit dem hex2eq3 Tool konvertiert:&lt;br /&gt;
 php contrib\hex2eq3.php --inFile Bootloader-AskSin-OTA-HM_LC_Sw1PBU_FM_8k.hex --outFile Bootloader-AskSin-OTA-HM_LC_Sw1PBU_FM_8k.eq3 --spmPageSize 256 --hexEndAddress 0xDFFE --outFormat eq3 --markAsBootloaderUpdate --withCrcCheck --pathTo-srec_cat /usr/bin/srec_cat&lt;br /&gt;
Der anschließende OTA Flashvorgang erfolgt analog dem Firmware-OTA-Flash wie weiter oben beschrieben&lt;br /&gt;
&lt;br /&gt;
=== UART nutzen ===&lt;br /&gt;
Für Debuggingausgaben für Entwickler: Statt /dev/ttyXXX das eigene Interface einfügen:&lt;br /&gt;
* /dev/ttyUSB0 (USB Interface)&lt;br /&gt;
* /dev/ttyAMA0 (Raspberry PI)&lt;br /&gt;
* /dev/ttyS0 (normaler Serieller Port)&lt;br /&gt;
&lt;br /&gt;
Öffnen&lt;br /&gt;
* Direkt in der Arduino IDE (Tools -&amp;gt; Serial Monitor)&lt;br /&gt;
* Mit &#039;&#039;screen&#039;&#039;&lt;br /&gt;
 screen /dev/ttyXXX 57600,CS8,ixon,ixoff&lt;br /&gt;
* Mit &#039;&#039;minicom&#039;&#039;&lt;br /&gt;
 sudo apt-get install minicom&lt;br /&gt;
 minicom -b 57600 -o -D /dev/ttyXXX -w&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Firmware: [https://github.com/jabdoa2/Asksin_HM_LC_Sw1PBU_FM]&lt;br /&gt;
* Bootloader: [https://github.com/jabdoa2/Asksin_OTA_Bootloader]&lt;br /&gt;
* Arduino Port für Atmega 644: [https://github.com/jabdoa2/jabduino]&lt;br /&gt;
* Firmware bauen und flashen mit dem RaspberryPi: [https://owncloud.isengard.at/public.php?service=files&amp;amp;t=8992affb68e8c1dcbe532152628ad9a5]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:HomeMatic Components]]&lt;br /&gt;
[[Kategorie:Schalter (Sender)]]&lt;br /&gt;
[[Kategorie:Schalter (Empfänger)]]&lt;/div&gt;</summary>
		<author><name>Klinki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Einrichten_knxd_mit_MDT_SCN-IP000.02&amp;diff=15058</id>
		<title>Einrichten knxd mit MDT SCN-IP000.02</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Einrichten_knxd_mit_MDT_SCN-IP000.02&amp;diff=15058"/>
		<updated>2016-04-12T09:30:39Z</updated>

		<summary type="html">&lt;p&gt;Klinki: Die Seite wurde neu angelegt: „= Vorwort =  Im Rahmen einer Machbarkeitsstudie ging es um das Thema Zählererfassung im betrieblichen Umfeld. Dazu sollten diverse Techniken und Bus-Systeme m…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Vorwort = &lt;br /&gt;
Im Rahmen einer Machbarkeitsstudie ging es um das Thema Zählererfassung im betrieblichen Umfeld. Dazu sollten diverse Techniken und Bus-Systeme mit einbezogen werden. &lt;br /&gt;
Als eine Art (halb privates) Nebenprojekt kam auch die Verknüpfung zwischen fhem und einem KNX-Zählerbaustein zum Einsatz.&lt;br /&gt;
Es gibt hier im Wiki zwar schon die Beschreibung [[Einrichten_von_eibd_für_das_Weinzierl_IP_730_Interface]], aber diese beschäftigt sich mit anderer Hardware und dem eib-daemon.&lt;br /&gt;
&lt;br /&gt;
= Voraussetzungen =&lt;br /&gt;
==Hardware==&lt;br /&gt;
** MDT IP-Interface SCN-IP000.02. Wird später als IP-Tunneling-Device verwendet. Adresse wird über DHCP bezogen. &#039;&#039;&#039;Sollte geändert werden&#039;&#039;&#039;&lt;br /&gt;
** MDT 4fach Binäreingang BE-04000.01. Dient als Zählermodul&lt;br /&gt;
** MDT Spannungsversorgung STV-0160.01. Achtung! Es kann keine Standard 24V Spannungsversorgung verwendet werden, da diese nicht die für KNX benötigte Drossel enthält&lt;br /&gt;
==Software==&lt;br /&gt;
** fhem 5.7 Installation auf Raspberry Pi 3, gemäß Anleitung (folgt!), &#039;&#039;&#039;Raspian Jessie&#039;&#039;&#039;&lt;br /&gt;
** ETS 5.0 wird für die Konfiguration der KNX-Komponenten benötigt. Kostenfreie Demo-Lizenz. Beschränkt auf 5 Geräte. Download von [https://knx.org/knx-de/software/ets/herunterladen/index.php KNX.org] &lt;br /&gt;
** Katalog-Datei für die ETS vom Binär-Eingang. Quelle: [http://www.mdt.de/Downloads_Produktdatenbanken.html MDT-Homepage]&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
* KNX-Daemon für Linux. Als Leitfaden diente [http://www.fhemwiki.de/wiki/Knxd Fhem-Wiki]&lt;br /&gt;
** Zusätzliche Pakete installieren (als root oder sudo benutzen)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install debhelper cdbs automake libtool libusb-1.0-0-dev git-core build-essential libsystemd-daemon-dev dh-systemd &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
**  lib pthsem herunterladen und installieren&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget https://www.auto.tuwien.ac.at/~mkoegler/pth/pthsem_2.0.8.tar.gz&lt;br /&gt;
tar xzf pthsem_2.0.8.tar.gz&lt;br /&gt;
cd pthsem-2.0.8&lt;br /&gt;
dpkg-buildpackage -b -uc&lt;br /&gt;
cd ..&lt;br /&gt;
sudo dpkg -i libpthsem*.deb &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
** KNXD herunterladen und installieren&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone https://github.com/knxd/knxd.git&lt;br /&gt;
cd knxd&lt;br /&gt;
dpkg-buildpackage -b -uc&lt;br /&gt;
cd ..&lt;br /&gt;
sudo dpkg -i knxd_*.deb knxd-tools_*.deb &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
** &#039;&#039;/etc/knxd.conf&#039;&#039; anlegen. Relevant ist nur die letzte Zeile. Die originale Datei enthält eine für das System nicht funktionierende Konfiguration. Daher wird der gesamte Inhalt der Datei hier dokumentiert.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# configuration for knxd.service&lt;br /&gt;
#KNXD_OPTS=&amp;quot;-u /tmp/eib -b ip:&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# The default options are &amp;quot;-u /tmp/eib -b ip:&amp;quot;&lt;br /&gt;
# which tell knxd to route between all of&lt;br /&gt;
#  /tmp/eib (legacy socket (-u))&lt;br /&gt;
#  multicast client (-b ip:).&lt;br /&gt;
# The knxd.socket file also tells knxd to listen to&lt;br /&gt;
#  /run/eib (socket activation via systemd)&lt;br /&gt;
#  TCP port 6720 (socket activation via systemd)&lt;br /&gt;
&lt;br /&gt;
# *** DO NOT use &amp;quot;-u&amp;quot; / &amp;quot;-u /run/knx&amp;quot; or &amp;quot;-i&amp;quot; / &amp;quot;-i 6720&amp;quot; here.&lt;br /&gt;
# Systemd already does that on behalf of knxd, via &#039;knx.socket&#039;.&lt;br /&gt;
&lt;br /&gt;
# If you have KNX hardware on a serial port or USB, add the appropriate&lt;br /&gt;
# &amp;quot;-b TYPE:…&amp;quot; option. In this case, you probably want to set up a multicast&lt;br /&gt;
# server, not a client (i.e. use &amp;quot;-D -T -R -S&amp;quot;, not &amp;quot;-b ip:&amp;quot;).&lt;br /&gt;
# DO NOT use both.&lt;br /&gt;
#&lt;br /&gt;
# If your KNX hardware is a KNX/IP gateway that doesn&#039;t do multicast,&lt;br /&gt;
# use &amp;quot;-b ipt:192.168.1.2&amp;quot; (or its DNS name) to talk to it.&lt;br /&gt;
#&lt;br /&gt;
# KNX MUST NOT have more than one path between any two devices. Thus,&lt;br /&gt;
# you need to make sure that the KNX/IP gateway does not route multicast&lt;br /&gt;
# before you use both &amp;quot;-S&amp;quot; and &amp;quot;-b ipt:&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
# The default bus address of knxd is 0.0.1. If that&#039;s in use in your KNX&lt;br /&gt;
# network (or if you run more than one knxd on your network), set a&lt;br /&gt;
# different address (-e 15.0.99).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Run `knxd --help` to get a complete list of available options and drivers.&lt;br /&gt;
&lt;br /&gt;
## DO NOT use the following options:&lt;br /&gt;
## -i           -- /lib/systemd/system/knxd.socket does this for us&lt;br /&gt;
## -u /run/knx  -- likewise&lt;br /&gt;
## -d           -- /lib/systemd/system/knxd.service expects knxd to run in the foreground&lt;br /&gt;
&lt;br /&gt;
###############################################################################&lt;br /&gt;
# This file is ignored when NOT using systemd: edit /etc/default/knxd instead #&lt;br /&gt;
###############################################################################&lt;br /&gt;
KNXD_OPTS=&amp;quot;-e 1.0.240  -b ipt:192.168.0.88&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die &#039;&#039;192.168.0.88&#039;&#039; ist exemplarisch für die IP-Adresse eures KNX-Gateways.&lt;br /&gt;
&lt;br /&gt;
** Der Daemon sollte auch einem Jessie-System mit dem System starten.&lt;br /&gt;
Der Status des KNX-Dienstes kann mit &#039;&#039;systemctl status knxd.service&#039;&#039; geprüft werden. Die Ausgabe sollte so ähnlich aussehen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@rasspi-fhem99:~# systemctl status knxd.service&lt;br /&gt;
● knxd.service - KNX Daemon&lt;br /&gt;
   Loaded: loaded (/lib/systemd/system/knxd.service; enabled)&lt;br /&gt;
   Active: active (running) since Mo 2016-04-11 13:35:53 CEST; 14s ago&lt;br /&gt;
 Main PID: 1258 (knxd)&lt;br /&gt;
   CGroup: /system.slice/knxd.service&lt;br /&gt;
           └─1258 /usr/bin/knxd -e 1.0.240 -b ipt:192.168.0.88&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Wichtig ist, dass die IP-Adresse des Gateways und die eib-Adresse (1.0.240) in der letzten Zeile stehen.&lt;br /&gt;
&lt;br /&gt;
Der Dienst kann auch manuell gestartet und gestoppt werden:&lt;br /&gt;
Start:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
systemctl start knxd.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Beenden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
systemctl stop knxd.service&lt;br /&gt;
systemctl stop knxd.socket&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Achtung! wird der Dienst beendet während fhem in benutzt, &#039;&#039;&#039;hängt sich fhem auf&#039;&#039;&#039; und muss neu gestartet werden.&lt;br /&gt;
&lt;br /&gt;
* Definition des IP-Gateways in fhem:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define KNX TUL eibd:192.168.0.1 1.0.240&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;192.168.0.1&#039;&#039; Adresse des KNX-Daemons, i.d.R. localhost&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;1.0.240&#039;&#039; EIB-Adresse für FHEM/KNXD&lt;br /&gt;
&lt;br /&gt;
Nach dem fhem-Neustart sollte das neue Device &amp;quot;KNX&amp;quot; den Status &amp;quot;Initialized&amp;quot; haben.&lt;br /&gt;
&lt;br /&gt;
= Installation/Konfiguration ETS=&lt;br /&gt;
Die ETS wird benötigt um KNX-Sensoren/Aktoren zu parametrieren und ihnen EIB-konforme Adressen zuzuweisen.&lt;br /&gt;
Ich empfehle an dieser Stelle das Dokument &amp;quot;Grundlagenwissen zum KNX Standard&amp;quot;, welches von [https://www.google.de/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;ved=0ahUKEwi9w-O74ojMAhVBfxoKHeXKByAQFggkMAA&amp;amp;url=http%3A%2F%2Fwww.knx.org%2Ffileadmin%2Fdownloads%2F08%2520-%2520KNX%2520Flyers%2FGrundlagenwissen%2520zum%2520KNX%2520Standard%2FGrundlagenwissen_zum_KNX_Standard_German.pdf&amp;amp;usg=AFQjCNETdgrIp23RbSTx-E8Q0qFuNH1hBw&amp;amp;cad=rja KNX.org] heruntergeladen werden kann.&lt;br /&gt;
&lt;br /&gt;
==Einrichtung des Binäreingangs BE-04000-01 in ETS==&lt;br /&gt;
* Bevor der Binär-Eingang benutzt werden kann,  muss dieser in ETS konfiguriert werden.&lt;br /&gt;
Dazu wird in ETS zunächst ein Projekt angelegt. Als &amp;quot;Linientyp&amp;quot; wird TP (Twisted Pair) definiert.&lt;br /&gt;
Das IP-Gateway wird von der ETS selbstständig gefunden.&lt;br /&gt;
* Bevor das Gerät selbst in ETS angezeigt werden kann, muss eine Struktur für das Gerät erzeugt werden:&lt;br /&gt;
[[Datei:Ets struktur.png]]&lt;br /&gt;
&lt;br /&gt;
1 Gebäudestruktur: Haus -&amp;gt; Keller -&amp;gt; Unterverteilung&lt;br /&gt;
&lt;br /&gt;
2 Adressstruktur:  &amp;quot;1 Haupt&amp;quot; -&amp;gt; &amp;quot;1/1 Mittel&amp;quot; -&amp;gt; &amp;quot;1/1/1 Schalter&amp;quot;   1.1.1 ist demnach die spätere Adresse für Schalteingang A des 4fach Geräts&lt;br /&gt;
&lt;br /&gt;
3 Katalog-Import: Hier wird der Katalog für das Gerät importiert. Dieser wird dann per DragNDrop auf die erstellte Struktur &amp;quot;Unterverteilung&amp;quot; gezogen&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Jetzt kann das Gerät &amp;quot;Binäreingang 4-fach...&amp;quot; parametriert werden. Dazu im mittleren Fenster den Reiter &amp;quot;Parameter&amp;quot; wählen&lt;br /&gt;
[[Datei:Geraet parametrieren.png]]&lt;br /&gt;
&lt;br /&gt;
Hier kann jetzt für jeden Eingang des Bausteins die entsprechende Funktion eingestellt werden, z.B. Schalter, Zähler, usw.&lt;br /&gt;
* Aus dem unteren Fenster werden nun per Drag N Drop die erstellten Gruppenadressen auf die jeweiligen Eingänge des Geräts gezogen. Damit wird auch die EIB-Adresse für jeden Eingang festgelegt.&lt;br /&gt;
* Jetzt muss das Gerät noch programmiert werden. Dazu Programmieren -&amp;gt; Physikalische Adresse und Applikationsprogramm&lt;br /&gt;
&lt;br /&gt;
== Installation/Konfiguration fhem==&lt;br /&gt;
* In fhem sollten jetzt die neu erzeugten EIB-Geräte angezeigt werden. Voraussetzung ist ein aktiviertes AutoCreate in &#039;&#039;fhem.cfg&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define autocreate autocreate&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*[[Datei:Fhem eib.png]]&lt;br /&gt;
&lt;br /&gt;
* Der Schalteingang wird als Glühbirne dargestellt&lt;br /&gt;
* Beim Zählereingang steht nur der Zählerstand als HEX-Zahl. In der ETS lässt sich für den Zähleingang festlegen, wie oft er Counter-Werte übertragen soll, z.B. alle 30 Impulse sollen übermittelt werden&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: Examples]]&lt;br /&gt;
[[Kategorie:EIB/KNX]]&lt;/div&gt;</summary>
		<author><name>Klinki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:Fhem_eib.png&amp;diff=15057</id>
		<title>Datei:Fhem eib.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:Fhem_eib.png&amp;diff=15057"/>
		<updated>2016-04-12T09:24:53Z</updated>

		<summary type="html">&lt;p&gt;Klinki: EIB-Devices in fhem&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;EIB-Devices in fhem&lt;/div&gt;</summary>
		<author><name>Klinki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:Geraet_parametrieren.png&amp;diff=15056</id>
		<title>Datei:Geraet parametrieren.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:Geraet_parametrieren.png&amp;diff=15056"/>
		<updated>2016-04-12T09:24:12Z</updated>

		<summary type="html">&lt;p&gt;Klinki: Gerät in ETS parametrieren&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Gerät in ETS parametrieren&lt;/div&gt;</summary>
		<author><name>Klinki</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:Ets_struktur.png&amp;diff=15055</id>
		<title>Datei:Ets struktur.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:Ets_struktur.png&amp;diff=15055"/>
		<updated>2016-04-12T09:21:48Z</updated>

		<summary type="html">&lt;p&gt;Klinki: Überblick über die Struktur der ETS-Software&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Überblick über die Struktur der ETS-Software&lt;/div&gt;</summary>
		<author><name>Klinki</name></author>
	</entry>
</feed>