Topic-icon Direkte Anbindung von PHC an Fhem

Mehr
27 Apr 2017 20:41 #1 von Stefan
Direkte Anbindung von PHC an Fhem wurde erstellt von Stefan
Hallo,

ich habe im Fhem-Forum ein neues Modul gepostet, mit dem Fhem per RS485-Adapter direkt am PHC-Modul-Bus hängen kann und von dort Readings erzeugt oder ein Input-Modul simuliert.
Ich habe eine ca. 12 Jahre alte Peha Installation mit einer alten V2 Steuerung (die V1 hat sich zwischendrin mal verabschiedet).
Bei mir funktioniert die Fhem-Anbindung bisher mit EMD, AMD, JRM, FUI, IR und MCC problemlos.
Vielleicht kann es ja noch jemand gebrauchen.

forum.fhem.de/index.php/topic,71011.msg625351.html#msg625351

Gruss
Stefan

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Mehr
28 Apr 2017 11:40 #2 von Andreas
Andreas antwortete auf Direkte Anbindung von PHC an Fhem
Hallo Stefan,

das klingt sehr interessant.
In was ist das Modul implementiert? ist der Source verfügbar?
Ich bin selbst gerade am Programmieren eines ähnlichen Tools mit C, allerdings sollen die Stati und befehle über MQTT zur verfügung gestellt werden.
Im Moment habe ich aber leider gerade keine Zeit für die Weiterentwicklung. Den Bus kann ich schon abhören, nun geht es um die Interpretation der Befehle...

Andreas

PHC STM V2, EMD,AMD,JRM und DIM-Module, Wind, Regen und Sonnen-Sensor, Visualisierung mit OpenHAB

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Mehr
28 Apr 2017 19:32 #3 von Stefan
Stefan antwortete auf Direkte Anbindung von PHC an Fhem
Hallo Andreas,

da Fhem komplett in Perl programmiert ist, ist auch das Modul in Perl programmiert und Open Source.
Hängt an meinem Post im Fhem-Forum.

Das mit der Interpretation der Befehle ist tatsächlich ein Problem. Nicht nur weil Peha nichts veröffentlicht hat, sondern auch weil das Protokoll in meinen Augen ein paar unschöne Eigenschaften hat. Die Nachrichten können eine unterschiedliche Bedeutung haben, je nachdem um welchen Modultyp es geht und ob sie vom STM an ein Modul oder von einem Modul an das STM gehen. Beim Mitlesen am Bus erkennt man ja leider nicht, ob die Nachricht vom STM oder einem anderen Modul initiiert wurde.

Ich habe das so gelöst, dass ich immer eine Nachricht zusammen mit dem zugehörigen Ack betrachte. Dann habe ich im Modul eine Hash-Tabelle (Perl Assoziativ-Array) mit Modultyp, Function code, Länge der Nachricht und Länge des Ack als Schlüssel und dem Namen und den Eigenschaften der Nachricht als Ergebnis-Array.

z.B.:
    'EMD060101' => ['Ein > 2', 'i'],
    'EMD070101' => ['Aus', 'i'],
 
    'EMD020103' => ['LED_Ein', 'o'],
    'EMD030103' => ['LED_Aus', 'o'],
    
    'AMD020102' => ['Ein', 'cba'],
    'AMD030102' => ['Aus', 'cba'],

Wenn der Typ eines Moduls in einer bestimmten Klasse beispielsweise noch unbekannt ist, dann prüfe ich für mitgelesene Nachrichten in dieser Struktur welche Möglichkeiten in Frage kommen und speichere das. So lernt das Modul auch den Typ eines Moduls an einer bestimmten Adresse...

Alternativ kann man natürlich auch die aus der Systemsoftware exportierte Kanalliste importieren. Dann sind die Modultypen bekannt und das Modul kann die Bezeichnungen der Kanäle aus der Systemsoftware verwenden. Das habe ich allerdings optional gemacht.

In C ist das natürlich alles ein bisschen aufwändiger als in einer Skript-Sprache wie Perl.

Gruss
Stefan

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Powered by Kunena Forum