HM-LC-Sw1PBU-FM Alternative Firmware mit VSCode und PlatformIO flashen

Aus FHEMWiki
Version vom 14. August 2022, 21:31 Uhr von JochenSi (Diskussion | Beiträge) (→‎FHEM-Modul laden: Fehler in Link korrigiert)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen
X mark.svg!!! ACHTUNG !!!
  • Vorsicht 230V! Lebensgefahr!
  • Nicht mit 230V verbinden, wenn man das Gehäuse offen hat oder mit dem ISP verbunden ist!
  • Bei den hier gezeigten Modifikationen geht die Garantie verloren und das Gerät verliert seine Zertifizierungen!
  • Sie tun dies auf eigene Gefahr! Keine Garantie auf Erfolg!
  • Es besteht keine Möglichkeit ohne Hilfe des Herstellers auf die Originalfirmware zurückzukehren!


Clock - Under Construction.svg An dieser Seite wird momentan noch gearbeitet.


Anleitung zum aufspielen einer alternativen Firmware auf den HM-LC-Sw1PBU-FM mittels Microsoft's Visual Studio Code und PlatformIO sowie des DIAMEX USB ISP-Programmer für Atmel AVR (andere ISPs sind natürlich auch möglich von mir aber ungetestet).

Vorwort

Dieser Artikel entsteht, da der Hauptartikel zu diesem Thema sehr umfangreich ist, Anfänger mit seinen Möglichkeiten erschlagen kann und z.Z. noch nicht auf die Möglichkeit mit VSCode und Platform IO eingeht. Des Weiteren sind die Möglichkeiten des VSCode incl. PlatformIO auch sehr umfangreich. Um es anderen einfacher zu machen, wird hier die Vorgehensweise erklärt.

Diese Anleitung bezieht sich auf diesen riesigen Thread und auf die von Verkehrsrot erstellte Toolchain für PlatformIO.

Außerdem soll an dieser Stelle auch auf die Anleitung HM-LC-Sw1PBU-FM Alternative Firmware am Raspi bauen u. flashen verwiesen werden, wenn man keine weitere Hardware wie z.B. DIAMEX kaufen möchte.

Vorteile der alternativen Firmware

  • Aufbau einer Kreuz- Wechselschaltung nähere Infos siehe Hauptartikel - Neue Funktionen
  • frei nutzbare Funktion der Schaltwippe des SchaltAktors um z.B. Programmabhängig etwas ganz anderes schalten zu können.
  • frei nutzbare Funktion des 230V Relais des Schaltaktors um nicht mehr (immer) mit der Schaltwippe das Relais schalten zu müssen.

Benötigtes Werkzeug

  • Elektroniklötkolben (keine Bratpfanne) ;-)
  • Torx-Schraubendreher Größe xxxx
  • ein bischen Lötzinn
  • ISP-Programmer z.B. DIAMAX
  • 6pol. mehrfarbiges Flachbandkabel mit Pfostenbuchse und offenem Ende

Schritt für Schritt Anleitung

VSCode & Git installieren

Linux MINT (Debian)

  1. Terminal öffnen
  2. sudo apt update
  3. sudo apt install code git

Windows 10

  1. Visual Studio Code downloaden
  2. Installieren durch Doppelklick auf die Datei VSCodeUserSetup-x64-xyz.exe
  3. Git für Windows downloaden
  4. Installieren durch Doppelklick auf die Datei Git-x.yy.z-64bit.exe
  5. Während der Installation auf die Frage: "Choosing the default editor used by Git" "Use Visual Studio Code as Git's default editor" auswählen
  6. Die restlichen Fragen auf den Voreinstellungen lassen

Mac

Mangels Mac ist diese Stelle frei. Wenn jemand helfen will, gerne im Forum melden.

VSCode starten & Einstellungen anpassen

  1. VSCode auf die übliche Weise des Betriebssystems starten
  2. Nach dem Start in die Extensions wechseln (Strg + Umschalt + x)
  3. Wer mag kann hier die deutsche Sprachdatei suchen und installieren. Einfach "german" in die Suche eingeben und den ersten Eintrag mittels "Install" auswählen. Hiernach ist ein Neustart von VSCode notwendig.
  4. Nun wieder in die Extensions wechseln, nach "platformio" suchen und installieren. Das Ergebnis mit dem Ameisenkopf und dem Text "PlatformIO IDE" ist das richtige. Die Installation dauert einen Moment.
  5. Nach einem Neustart von VSCode sollte man in der linken Toolbar den Ameisenkopf und in der horizontalen blauen (Windows) bzw. lila (Linux) Toolbar ein Häuschen sehen. Klickt man auf es gehen die Fenster von PlatformIO auf.

Quellcode der Firmware downloaden

Der Quellcode der alternativen Firmware wird mittels Git heruntergeladen. Dazu folgende Schritte durchführen:

  1. In den Explorer von VSCode wechseln (Strg + Umschalt + e)
  2. Hier auf Clone Repository klicken und in das Textfeld ganz oben in dem VSCode Fenster "https://github.com/cyberman54/HM_LC_Sw1PBU_FM" eingeben und mit Enter bestätigen. Nun noch einen Speicherort auf eurem Rechner festlegen und schon werden die Daten geladen. (Dieser Punkt funktioniert bei mir (JochenSi) nicht mehr, da es anscheinend einer Änderung an der GUI in VS Code gegeben hat. Wenn jemand hierbei helfen kann, bitte im Forum melden.)
  3. VSCode fragt danach, ob das Repository geöffnet werden soll was, man nun macht. Im Explorer wird nun der Projektbaum HM_LC_SW1PBU_FM aufgehen.

Hardware vorbereiten

------ VORSICHT die folgenden Schritte nur durchführen, wenn man sicher im Umgang mit Netzspannung ist. Wenn man unsicher ist, bitte einen Fachmann fragen!! VORSICHT 230V LEBENSGEFAHR ------

  1. Wenn der zu flashende HM-LC-Sw1PBU-FM schon in FHEM angelernt ist bitte folgende Daten von der Deviceseite in FHEM (nicht von einer Kanalseite) notieren:
    • Aus dem Bereich: Internals den Wert von "DEF" z.B. 1AF234
    • Aus dem Bereich Readings den Wert von "D-serialNr:" z.B. LEQ1234567
  2. Wenn das Gerät noch nicht in FHEM eingebunden ist wie andere Geräte in FHEM anlernen und die Punkte aus 1. ermitteln.
  3. Nun das Gerät aus FHEM und auch alle Peerings löschen.
  4. Das Gerät ausbauen und von der Spannungsversorgung komplett abklemmen.
  5. Das Gehäuse vorsichtig öffnen, die Platine mit den Anschlussklemmen nach oben aus der Stiftleiste herausziehen und die Trennplatte herausnehmen.
  6. Mit dem Torx-Schraubenzieher die zwei kleinen Schrauben herausschrauben und sicher aufbewahren.
  7. Die untere Platine herausnehmen, eventuell mit Hilfe eines kleinen Schraubendrehers durch die Wippenöffnung herausdrücken. Achtung hierbei nicht das kleine durchsichtige Plastikteil verlieren.
  8. Das offene Ende des Flachbandkabels entsprechend dem Foto isp.jpg an den Messpunkten anlöten. Das Foto kann in VSCode -> Explorer -> HM_LS_SW1PBU_FM -> hardware -> isp.jpg angeschaut werden.
Anschluss Platine Signal Anschluss 6pol. Pfostenbuchse Diamex
MP2 3,3V Pin2 - VCC
MP3 Reset Pin5 - RESET
MP4 MOSI - Master Out Slave In Pin4 - MOSI
MP5 MISO - Master In Slave Out Pin1 - MISO
MP6 CLK - Clock Pin3 - SCK
MP15 GND - Ground Pin6 - GND
  1. Pfostenbuchsen entsprechen oben stehender Tabelle am ISP-Programmer anschließen.
  2. Notieren welcher Atmel Mega (quadartischer Chip) auf der Platine verbaut ist. Mir sind 2 Varianten bekannt:
    • Mega 644
    • Mega 644pa
  3. Nochmalige Erinnerung. Keinesfalls jetzt zusammenbauen und an 230V anschließen!!! Lebens- & Brandgefahr!!!

Quellcode für den aktuellen HM-LC-Sw1PBU-FM konfigurieren

  1. Anhand der notierten Chiparten in der Datei: "VSCode -> Explorer -> HM_LS_SW1PBU_FM -> platformio.ini" folgendes am Eintrag "board" angeben:
    • Mega644 -> ATmega644a
    • Mega644pa - ATmega644p
  2. Anhand der Notizen die "D-serialNr:" & "DEF" in "VSCode -> Explorer -> HM_LS_SW1PBU_FM -> src -> Register.h" an den folgenden Stellen abändern:
Änderungen
Original aus Quellcode /* Serial ID 10 byte */ 'K', 'E', 'Q', '0', '0', '0', '0', '0', '0', '1',
Beispiel von oben /* Serial ID 10 byte */ 'L', 'E', 'Q', '1', '2', '3', '4', '5', '6', '7',
Original aus Quellcode const uint8_t HMID[3] = {0x29, 0xF2, 0x6E};
Beispiel von oben const uint8_t HMID[3] = {0x1A, 0xF2, 0x34}
  1. Zur Erkennung von schwachen Verbrauchern ist der Stromschwellwert auf 500 gestellt. Eventuell muss man den für sich größer oder kleiner stellen sollte der Kanal Device_Switch_02 unkontrolliert "on" und "off" gehen. Im Quellcode vom Hauptartikel steht der Wert auf 5000. Zu finden ist der Parameter unter: "VSCode -> Explorer -> HM_LS_SW1PBU_FM -> src -> Asksin_HM_LC_Sw1PBU_FM.cpp"

Quellcode flashen

  1. Setzt man den DIAMEX ISP ein so müssen der Dip-Schalter 1 auf "OFF" und 2 auf "ON" gestellt werden. Dies ist bei der DIAMEX ISP Version V3/16 die Einstellung für 3,3V und der ISP versorgt den Atmel Mega 644(pa) mit Strom.
  2. Zur Kontrolle ob alles zum flashen bereit ist kann man in der blauen bzw. lila Toolbar auf den Hacken neben dem Häuschen klicken. Hiermit kompiliert VSCode die Firmware.
  3. Wenn keine Fehlermeldungen kommen kann man auf den Pfeil nach rechts direkt neben dem Hacken klicken. Jetzt wird nochmal kompiliert und dann auf die Platine übertragen.
    • Linux User werden an dieser stelle sehr warscheinlich folgende oder eine ähnliche Warnung bekommen:
Warning! Your `/etc/udev/rules.d/99-platformio-udev.rules` are outdated. Please update or reinstall them.
More details: https://docs.platformio.org/page/faq.html#platformio-udev-rules
  • Dies wird behoben indem man eine Konsole öffnet und folgende Befehle ausführt:
curl -fsSL https://raw.githubusercontent.com/platformio/platformio-core/master/scripts/99-platformio-udev.rules | sudo tee /etc/udev/rules.d/99-platformio-udev.rules
sudo service udev restart
  • Und bei Linux MINT/Ubuntu bzw. Debian noch folgende Befehle ausführen und danach den Rechner einmal neu starten:
sudo usermod -a -G dialout $USER
sudo usermod -a -G plugdev $USER
  • Nun sollte unter Linux das flashen (Punkt 3) funktionieren.

FHEM-Modul laden

Um den Schaltaktor in FHEM nutzen zu können, muss ein FHEM-Modul in das Verzeichnis .FHEM kopiert werden. Das FHEM-Modul ist hier zu finden: "VSCode -> Explorer -> HM_LS_SW1PBU_FM -> fhem -> HM_Config_LC_Sw1PBU_FM_CustomFW.pm Je nach FHEM-Server-Betriebssystem muss der FHEM-Server auf die Moduldatei zugreifen dürfen. Wie man die Datei auf den Server kopiert, die Rechte einstellt und Zugriff auf den Server bekommt, ist von Betriebssystem zu Betriebssystem unterschiedlich zu lösen.

Im folgenden wird davon aus gegangen, dass FHEM auf einem RaspberryPI läuft und es entsprechend der Anleitung für Raspberry Pi installiert wurde.

Die folgenden Befehle sorgen dafür, dass die Moduldatei runtergeladen wird und dem User fhem sowie der Gruppe dialout übergeben wird. Des weiteren wird libswitch-perl installiert ohne das der Schalter nicht funktioniert.

sudo su
cd /opt/fhem/FHEM
wget https://github.com/cyberman54/HM_LC_Sw1PBU_FM/blob/platformio/fhem/HM_Config_LC_Sw1PBU_FM_CustomFW.pm
chown -c fhem:dialout /opt/fhem/FHEM/HM_Config_LC_Sw1PBU_FM_CustomFW.pm
apt install libswitch-perl
reboot

Schalter in FHEM einbinden

  1. Die Schalterplatine sollte noch am DIAMEX angeschlossen sein. Jetzt die Platine neustarten indem man den USB Stecker vom DIAMEX aussteckt einen Moment wartet und wieder einsteckt.
  2. set <Name des IO-Device> hmPairForSec 60
  3. Anlernbutton auf der Platine für mehr als 4 Sekunden drücken. Die grüne LED darf nicht blinken.
  4. Nach ein paar Sekunden sollte in FHEM neben Save config ein "?" erscheinen.
  5. Auf das FHEM-Häuschen oben links klicken oder die Seite anders neuladen.
  6. Im linken Menü sollte jetzt unter CUL_HM das neue Gerät auftauchen. Dieses Gerät sollte nun 4 Kanäle besitzen, die jetzt frei nutzbar sind.
  7. Auf Save config klicken um das neue Gerät in der FHEM-Konfig zu speichern.

Restarbeiten

  1. Programmierkabel ablöten
  2. Das runde durchsichtige Plastikteil mit dem Pin in das Anlernloch des Gehäuses legen.
  3. Platine in das Gehäuse legen und aufpassen, dass die Antenne am Rand liegt.
  4. Sitzt die Platine richtig, mit den Torx Schrauben fixieren.
  5. Trennscheibe einsetzen nicht vergessen
  6. Obere Platine vorsichtig in die Stiftleiste der unteren Platine stecken.
  7. Gehäuse zusammenstecken
  8. Schalter anschließen
  9. Das Gerät kann jetzt mit seinen zwei Button- (Devicename_Btn_01/02), dem Relais- (Devicename_Sw_01) sowie dem Stromsensorkanal (Devicename_Sw_02) mit anderen Geräten gepeert oder in Logiken genutzt werden.
  10. ACHTUNG - Wenn nicht mindestens ein Button des Schalters mit dem Relais gepeert wird oder keine FHEM-Logik zwischen den Buttons und dem Relais besteht, schaltet das Relais nicht, wenn die Buttons gedrückt werden.

Bekannte Probleme

Bei mir (JochenSi) verliert der Schalter seine Peers, wenn es zu einem (längeren) Stromausfall kommt und muss neu gepeert werden. Wenn die Buttons/Relais via FHEM überwacht/gesteuert werden, tritt der Fehler nicht auf. Allerdings lässt sich dann nichts schalten wenn FHEM mal ausfällt.