[gelöst] Alternative FW für HM-LC-SW2PBU-FM / schalten & peeren

Begonnen von weini, 14 März 2020, 20:00:56

Vorheriges Thema - Nächstes Thema

weini

Hallo zusammen!

Ich habe in meiner Küche auf der einen Seite für die Schrankbeleuchtung einen Wandausgang der über den bestehenen Lichtschalter schaltbar ist. An der anderen Wand ist auch ein Schrank mit Schrankbeleuchtung, dort habe ich aber nur eine ungeschaltete Steckdose.
Ich möchte mit meinem Lichtschalter beide Schrankbeleuchtungen schalten.

Nun habe ich mir eine Schaltsteckdose HM-LC-SW1-PL-DN-R1 besorgt und den konventionellen Lichtschalter durch einen HM-LC-SW2PBU-FM ersetzt. Der schaltet auch weiterhin die direkt angschlossene Seite, kann aber nicht den HM-LC-SW1-PL-DN-R1 ansteuern (kein peering vorgesehen).

Als Notlösung habe ich mir mit einem Notify beholfen, aber eigentlich wollte ich genau keine solche Krücke, sondern eine robuste direkte Ansteuerung ohne Zeitverzug.

Nach etwas Recherche habe ich verstanden, dass ich eigentlich eine Mischung aus HM-LC-SW2PBU-FM und HM-RC-2-PBU-FM suche: Zum einen direkt schalten aber zusätzlich auch peering fähig. Gibt es so etwas von HM nicht oder übersehe ich gerade etwas?

LG, weini

MadMax-FHEM

Für den HM-LC-Sw1PBU gibt es eine alternative FW, die kann was du willst: https://wiki.fhem.de/wiki/HM-LC-Sw1PBU-FM_Alternative_Firmware

Habe aber keine Ahnung, ob es auch eine für den von dir verwendeten Aktor gibt...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

weini

Das würde das Problem lösen, nur brauche ich leider einen 2-fach Schalter.
Ich gehe mal auf die Suche, ob es für den HM-LC-SW2PBU-FM auch eine Lösung gibt.

frank

bei hmip aktoren sind die zusätzlich vorhandenen taster wohl grundsätzlich mit externen aktoren peerbar.
jedenfalls soweit ich das "zwischen den zeilen" aus diversen infos rauslesen konnte.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

weini

#4
@Frank: Danke dir, aber ich habe bei mir alles auf "classic" und möchte HMIP möglichst vermeiden.

Habe tatsächlich eine custom Firmware für den HM-LC-Sw2PBU-FM gefunden: https://github.com/jp112sdl/Beispiel_AskSinPP/tree/master/examples/HB-LC-Sw2PBU-FM
Wenn ich es richtig verstehe, dann brauche ich die hier https://github.com/jp112sdl/JP-HB-Devices-addon verlinkte Komponente nicht (ich nutze keine CCU, nur FHEM). Die Frage ist aber, ob die Custom FW durch FHEM unterstützt wird?

weini

Mittlerweile habe ich mir etliches "zusammenrecherchiert".
Die FW konnte ich übersetzen. Ehe ich mich aber an einen Flash wage, hätte ich gerne die Original-FW um diese im Notfall zurückflashen zu können.

Leider finde ich aktuell keinen Weg, die FW für den HM-LC-SW2PBU-FM von der q3 Website herunterzuladen.
Auch https://ccu3-update.homematic.com/firmware/download?cmd=download&serial=0&product=HM-LC-Sw2PBU-FM läuft ins leere.

Wie bekomme ich denn die Original-FW her?
Und kann ich diese überhaupt zurückflashen, wenn die Custom-FW nicht funktionieren sollte?

weini

Mittlerweile haben ich meinen HM-LC-SW2PBU-FM mit der Custom Firmware am Laufen. Einzig die Statusaktualisierung in FHEM funktioniert noch nicht.

Falls jemand vor dem selben Problem steht, hier ist mein bisheriger Lösungsweg:

  • Custom FW auf Basis der AskSinPP ist hier verfügbar: https://github.com/jp112sdl/Beispiel_AskSinPP/tree/master/examples/HB-LC-Sw2PBU-FM
  • Hinweis: Diese Custom-FW bietet die Möglichkeit, die Buttons als separate Kanäle mit anderen Aktoren zu peeren. Sie hat aber nicht die Funktion zur Strommessung wie man sie für den Aufbau einer Wechselschaltung braucht. Mir ging es um ersteres, da passte das perfekt! Wenn jemand die Wechselschaltung benötigt, dann gibt es nur für den HM-LC-SW1PBU-FM eine Lösung in dem oben im HM Forum angepinnten Thread. Das ist aber ein anderer Software-Stack.
  • Aktuelle Arduino IDE installieren.
  • Bibliotheken ergänzen:
    AskSinPP hier downloaden: https://github.com/pa-pa/AskSinPP und das ZIP als Bibliothek hinzufügen.
    "EnableInterrupt" in der Bibliotheksverwaltung aktivieren.
    "Low-Power" NICHT einfach aktivieren, sondern über den Link in der Bibliotheksverwaltung von der Github Seite die neueste Version downloaden und als ZIP hinzufügen (mindestens 1.7 ist notwendig). Wenn zuvor die Bibliothek in einer niedrigeren Version aus der Bibliotheksverwaltung installiert wurde, dann diese manuell entfernen (unter Dokumente\Arduino\Libraries das Unterverzeichnis löschen).
  • Im Sketch ggf. Serial und HMID aktualiseren sowie die Einstellungen unter "Werkzeuge" so vornehmen, wie im Kommentarblock am Anfang des Sketches angegeben.
    Bootloader kann unter "Werkzeuge" auf "no" gesetzt werden.
  • Sketch sollte jetzt fehlerfrei kompilieren
  • USPASP Programmer für das Flashen nutzen (vermutliche gehen auch andere, ein einfacher UART geht aber nicht).
    Den Programme wie her beschrieben verdrahten: https://github.com/jabdoa2/Asksin_HM_LC_Sw1PBU_FM.
    Unter Windows braucht man die usblibK, um den USBASP direkt aus der Arduino IDE nutzen zu können: https://zadig.akeo.ie/
    . Bei der Installation die richtige Library auswählen.
  • Achtung: Wenn ihr flasht, dann gibt es keinen Weg zurück zu originalen q3 Firmware.
  • Der Sketch kann damit direkt über die Arduino IDE hochgeladen werden. Ihr müsst euch keine Gedanken über Fuses und Bootloader machen. Man kann wohl einen OTA Bootloader installieren, das habe ich aber nicht gemacht, da der Sketch "fertig" entwickelt ist und ich keine Updates erwarten würde.
  • Für die Einbindung in FHEM habe ich mich hier bedient: https://github.com/pa-pa/AskSinPP/tree/master/examples/custom/contrib/FHEM
    In HMConfig_AskSinPPCustom.pm fehlt noch die Definition für den HM-LC-SW2PBU-FM. Diese habe ich mit Hilfe von papa wie folgt ergänzt:
$HMConfig::culHmModel{"F336"} = {name=>"HM-LC-Sw2PBU-FM-CustomFW",st=>'custom',cyc=>'',rxt=>'',lst=>'1,3:1p.2p,4:3p.4p',chn=>"Sw:1:2,Btn:3:4"};
$HMConfig::culHmChanSets{"HM-LC-Sw2PBU-FM-CustomFW00"}{fwUpdate} ="<filename>";
$HMConfig::culHmChanSets{"HM-LC-Sw2PBU-FM-CustomFW01"} = $HMConfig::culHmSubTypeSets{"switch"};
$HMConfig::culHmChanSets{"HM-LC-Sw2PBU-FM-CustomFW02"} = $HMConfig::culHmSubTypeSets{"switch"};
$HMConfig::culHmChanSets{"HM-LC-Sw2PBU-FM-CustomFW03"} = $HMConfig::culHmSubTypeSets{"THSensor"};
$HMConfig::culHmChanSets{"HM-LC-Sw2PBU-FM-CustomFW04"} = $HMConfig::culHmSubTypeSets{"THSensor"};
$HMConfig::culHmRegChan{"HM-LC-Sw2PBU-FM-CustomFW01"}  = $HMConfig::culHmRegType{switch};
$HMConfig::culHmRegChan{"HM-LC-Sw2PBU-FM-CustomFW02"}  = $HMConfig::culHmRegType{switch};
$HMConfig::culHmRegChan{"HM-LC-Sw2PBU-FM-CustomFW03"}  = $HMConfig::culHmRegType{remote};
$HMConfig::culHmRegChan{"HM-LC-Sw2PBU-FM-CustomFW04"}  = $HMConfig::culHmRegType{remote};
$customMsg{"HM-LC-Sw2PBU-FM-CustomFW"} = sub {
  my ($msg,$target) = @_;
  return $msg->processRemote if $msg->isRemote;
  return $msg->processSwitchStatus($target) if $msg->isStatus;
  return ();
};

    Ich habe dabei von dem vorhandenen Code für den HM-LC-Sw2-FM-CustomFW abgekupfert und die Kanäle für den HM-LC-SW2PBU-FM umsortiert.[/li]
  • Damit kann der Schalter in FHEM gepairt werden, es können die Peerings mit den Buttons eingerichtet werden und die Switches können geschaltet werden.

Vielen lieben Dank an alle, die hier so eine tolle Vorarbeit geleistet haben.

Ein Schönheitsfehler ist noch, dass der Status in den Sw-Kanälen nicht korrekt dargestellt wird. Wenn über den Schalter geschaltet wird, dann finden überhaupt keine Aktualisierung statt. Wenn von FHEM aus geschaltet wird, dann bleibt der Status in "set_on" bzw. "set_off" hängen. Ich vermute, dass hier in der HMConfig_AskSinPPCustom.pm ein Fehler ist oder Code fehlt. Es könnte sein, dass ich das "lst=>'1,3:1p.2p,4:3p.4p'" nicht richtig von der Vorlage "umgebaut" habe oder dass in "sub CUL_HM_Parsecustom" noch Code für den HM-LC-SW2PBU-FM ergänzt werden muss.
Vielleicht kann da jemenad mit mehr CUL_HM Background als ich nochmal einen Blick drauf werfen.

papa

Du musst in der Definition unbedingt "custom" verwenden.

$HMConfig::culHmModel{"F336"} = {name=>"HM-LC-Sw2PBU-FM-CustomFW",st=>'custom',cyc=>'',rxt=>'',lst=>'1,3:1p.2p,4:3p.4p',chn=>"Sw:1:2,Btn:3:4"};


Außerdem musst die die Eventbehandlung noch einfügen - das hier müsste gehen:

$customMsg{"HM-LC-Sw2PBU-FM-CustomFW"} = sub {
  my ($msg,$target) = @_;
  return $msg->processRemote if $msg->isRemote;
  return $msg->processSwitchStatus($target) if $msg->isStatus;
  return ();
};


Wenn das alles funktioniert, dann bitte eine Pull-Request stellen.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

weini

Damit bekomme ich jetzt nur noch einen Kanal angezeigt:

Hier der Code aus HMConfig_AskSinPPCustom.pm:
$HMConfig::culHmModel{"F336"} = {name=>"HM-LC-Sw2PBU-FM-CustomFW",st=>'custom',cyc=>'',rxt=>'',lst=>'1,3:1p.2p,4:3p.4p',chn=>"Sw:1:2,Btn:3:4"};
$HMConfig::culHmChanSets{"HM-LC-Sw2PBU-FM-CustomFW00"}{fwUpdate} ="<filename>";
$HMConfig::culHmChanSets{"HM-LC-Sw2PBU-FM-CustomFW01"} = $HMConfig::culHmSubTypeSets{"switch"};
$HMConfig::culHmChanSets{"HM-LC-Sw2PBU-FM-CustomFW02"} = $HMConfig::culHmSubTypeSets{"switch"};
$HMConfig::culHmChanSets{"HM-LC-Sw2PBU-FM-CustomFW03"} = $HMConfig::culHmSubTypeSets{"THSensor"};
$HMConfig::culHmChanSets{"HM-LC-Sw2PBU-FM-CustomFW04"} = $HMConfig::culHmSubTypeSets{"THSensor"};
$HMConfig::culHmRegChan{"HM-LC-Sw2PBU-FM-CustomFW01"}  = $HMConfig::culHmRegType{switch};
$HMConfig::culHmRegChan{"HM-LC-Sw2PBU-FM-CustomFW02"}  = $HMConfig::culHmRegType{switch};
$HMConfig::culHmRegChan{"HM-LC-Sw2PBU-FM-CustomFW03"}  = $HMConfig::culHmRegType{remote};
$HMConfig::culHmRegChan{"HM-LC-Sw2PBU-FM-CustomFW04"}  = $HMConfig::culHmRegType{remote};
$customMsg{"HM-LC-Sw2PBU-FM-CustomFW"} = sub {
  my ($msg,$target) = @_;
  return $msg->processRemote if $msg->isRemote;
  return $msg->processSwitchStatus($target) if $msg->isStatus;
  return ();
};


Und hier das List vom Device:
Internals:
   DEF        F33617
   FUUID      5e763686-f33f-73da-85ed-4b12723240d4dded
   IODev      hmUART
   LASTInputDev hmUART
   MSGCNT     2
   NAME       Kuch_Lichtschalter
   NOTIFYDEV  global
   NR         515
   NTFY_ORDER 50-Kuch_Lichtschalter
   STATE      CMDs_done
   TYPE       CUL_HM
   channel_01 Kuch_Lichtschalter_Sw_Decke
   hmUART_MSGCNT 2
   hmUART_RAWMSG 0501003816A210F33617D3AA780601000041
   hmUART_RSSI -56
   hmUART_TIME 2020-03-22 11:27:19
   lastMsg    No:16 - t:10 s:F33617 d:D3AA78 0601000041
   protLastRcv 2020-03-22 11:27:19
   protRcv    2 last_at:2020-03-22 11:27:19
   protSnd    2 last_at:2020-03-22 11:27:19
   protState  CMDs_done
   rssi_at_hmUART cnt:2 min:-56 max:-55 avg:-55.5 lst:-56
   rssi_hmUART cnt:1 min:-65 max:-65 avg:-65 lst:-65
   READINGS:
     2020-03-21 18:39:36   CommandAccepted no
     2020-03-21 17:08:38   D-firmware      1.0
     2020-03-21 17:08:38   D-serialNr      PEQ0638046
     2020-03-21 19:49:34   PairedTo        0xD3AA78
     2020-03-21 17:08:45   R-pairCentral   0xD3AA78
     2020-03-21 17:04:31   powerOn         2020-03-21 17:04:31
     2020-03-22 11:27:19   state           CMDs_done
     2020-03-22 11:27:19   trigger         Short_20
     2020-03-22 11:27:19   trigger_cnt     20
   helper:
     BNO        20
     BNOCNT     1
     HM_CMDNR   22
     mId        no
     supp_Pair_Rep 0
     tmplChg    0
     expert:
       def        1
       det        1
       raw        0
       tpl        0
     io:
       newChn     +F33617,00,01,00
       nextSend   1584872839.92489
       rxt        0
       vccu       hm_VCCU
       p:
         F33617
         00
         01
         00
       prefIO:
         hmUART
     mRssi:
       mNo        16
       io:
         hmUART:
           -50
           -50
     prt:
       bErr       0
       sProc      0
       rspWait:
     q:
       qReqConf   
       qReqStat   
     role:
       dev        1
     rpt:
       IO         hmUART
       flg        A
       ts         1584872839.63123
       ack:
         HASH(0x6d88860)
         168002D3AA78F3361700
     rssi:
       at_hmUART:
         avg        -55.5
         cnt        2
         lst        -56
         max        -55
         min        -56
       hmUART:
         avg        -65
         cnt        1
         lst        -65
         max        -65
         min        -65
     tmpl:
Attributes:
   IODev      hmUART
   IOgrp      hm_VCCU:hmUART
   autoReadReg 4_reqStatus
   expert     1_allReg
   firmware   1.0
   group      Licht
   model      HM-LC-Sw2PBU-FM-CustomFW
   room       Küche
   serialNr   PEQ0638046
   subType    no
   webCmd     getConfig:clear msgEvents

weini

Ok, andere Problemursache:
Global symbol "%customMsg" requires explicit package name (did you forget to declare "my %customMsg"?) at ./FHEM/HMConfig_AskSinPPCustom.pm line 37.

Habe in meiner Installation mal nach "customMsg" ge-grep´d und nichts gefunden. Wo sollte die Struktur denn deklariert sein?

papa

https://github.com/pa-pa/AskSinPP/blob/46f97d73cbae903f7248943032aaf96cbafd3136/examples/custom/contrib/FHEM/HMConfig_AskSinPPCustom.pm#L8

Deine HMConfig_AskSinPPCustom.pm nicht aktuell ? Sonst immer mal mit nem Neustart probieren, wenn Änderungen in der HMConfig_AskSinPPCustom.pm nicht fuktionieren.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

weini

Irgendwie habe ich tatsächlich einen alten Stand der HMConfig_AskSinPPCustom.pm erwischt. Keine Ahnung wie, unter dem oben angegebenen Link ist die neueste Version.

Mit folgender Ergänzung in der HMConfig_AskSinPPCustom.pm läuft der Schalter jetzt auch in FHEM perfekt:
$HMConfig::culHmModel{"F336"} = {name=>"HM-LC-Sw2PBU-FM-CustomFW",st=>'custom',cyc=>'',rxt=>'',lst=>'1,3:1p.2p,4:3p.4p',chn=>"Sw:1:2,Btn:3:4"};
$HMConfig::culHmChanSets{"HM-LC-Sw2PBU-FM-CustomFW00"}{fwUpdate} ="<filename>";
$HMConfig::culHmChanSets{"HM-LC-Sw2PBU-FM-CustomFW01"} = $HMConfig::culHmSubTypeSets{"switch"};
$HMConfig::culHmChanSets{"HM-LC-Sw2PBU-FM-CustomFW02"} = $HMConfig::culHmSubTypeSets{"switch"};
$HMConfig::culHmChanSets{"HM-LC-Sw2PBU-FM-CustomFW03"} = $HMConfig::culHmSubTypeSets{"THSensor"};
$HMConfig::culHmChanSets{"HM-LC-Sw2PBU-FM-CustomFW04"} = $HMConfig::culHmSubTypeSets{"THSensor"};
$HMConfig::culHmRegChan{"HM-LC-Sw2PBU-FM-CustomFW01"}  = $HMConfig::culHmRegType{switch};
$HMConfig::culHmRegChan{"HM-LC-Sw2PBU-FM-CustomFW02"}  = $HMConfig::culHmRegType{switch};
$HMConfig::culHmRegChan{"HM-LC-Sw2PBU-FM-CustomFW03"}  = $HMConfig::culHmRegType{remote};
$HMConfig::culHmRegChan{"HM-LC-Sw2PBU-FM-CustomFW04"}  = $HMConfig::culHmRegType{remote};
$customMsg{"HM-LC-Sw2PBU-FM-CustomFW"} = sub {
  my ($msg,$target) = @_;
  return $msg->processRemote if $msg->isRemote;
  return $msg->processSwitchStatus($target) if $msg->isStatus;
  return ();
};


Ich aktualisiere jetzt gleich noch meinen obigen Post und dann versuche ich noch, einen Pull-Request hinzubekommen.
@Papa: Nochmals vielen Dank dir!

papa

Zitat von: weini am 22 März 2020, 14:57:19
Ich aktualisiere jetzt gleich noch meinen obigen Post und dann versuche ich noch, einen Pull-Request hinzubekommen.
@Papa: Nochmals vielen Dank dir!
Danke - Pull-Request ist gemerged
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire