FHEM Forum

FHEM - Anwendungen => Heizungssteuerung/Raumklima => Thema gestartet von: flmma am 01 November 2018, 10:19:39

Titel: [gelöst] ebusd - Aus Byte ein Bitmuster (einzelne Zustände) decodieren
Beitrag von: flmma am 01 November 2018, 10:19:39
Hallo,

stehe leider gerade ziemlich auf der Leitung...


von meiner Heizungssteuerung (ELCO Logon M) konnte ich bereits einige für mich wertvolle Werte abfragen, nun scheitere ich aber beim decodieren eines Bytes (Bitmuster von Zuständen):
Byte     Kurzbeschreibung     Langbeschreibung
11        Status                      Bit0: BWR_active
                                           Bit1: Pump release
                                           Bit2: Boiler 1 in operation
                                           ...
                                           Bit6: TBF_connect

Für jedes Bit würde ich gerne einen eigenes Device in FHEM anlegen und den Zustand aktualisieren.
Habe bis jetzt nur broadcast entziffert, meine broadcast.csv sieht für diese Message folgend aus:
b,,Status,Status,,,0801,,kesseltemp,,temp2,,,Kesselisttemp,bwtemp,,temp2,,,Warmwassertemp,emissiontest,,ign:1,,,Emissionstest,heatflags,,BI0;BI1;BI2;BI3;BI4;BI5;BI6,,,Zustand,returnflowtemp,,temp2,,,Ruecklauftemp,,,,,,,,,,,,,,,,,,,,,

Ich denke, dass mein Syntax (fett markierter Teil) in der broadcast.csv für meinen Zweck falsch ist, oder?
Auch der Befehl zum Abfragen eines Bits (ebusctl read Status heatflag:0 ?) ist mir unklar.

Danke für Eure Unterstützung!

lg
Michi



Titel: Antw:ebusd - Aus Byte ein Bitmuster (einzelne Zustände) decodieren
Beitrag von: flmma am 02 November 2018, 22:14:11
Hallo,

bin auch für Alternativvorschläge, falls sich das über den EBUSD nicht realisieren lässt, offen.
z.B: Auslesen des Status Dezimal und dann eine Routine, welche die einzelnen Devices setzt,  mit Übergabeparameter (DezimalStatus).

Danke!

lg
Michi
Titel: Antw:ebusd - Aus Byte ein Bitmuster (einzelne Zustände) decodieren
Beitrag von: flmma am 04 November 2018, 08:30:04
Hallo,

habe es selbst gelöst, wahrscheinlich nicht die eleganteste Art, aber es funktioniert.
Zur Dokumentation für weitere Suchende

-neues Modul unter /opt/fhem/FHEM/99_myUtils.pm angelegt:
package main;
use strict;
use warnings;
use POSIX;
sub
myUtils_Initialize($$)
{
   my ($hash) = @_;
}
sub myUtils_DecodeStatus($) {
        my $Rest=0;
        my ($obj) = @_;
        printf("\nin myUtils_DecodeStatus:");
        printf($obj);
    if( $obj >= 64 ){
        fhem( "setstate Warmwasserfuehleract on");
        $Rest = $obj - 64;
        }
    else {
        fhem( "setstate Warmwasserfuehleract off");
        }
    if( $Rest >= 32 ){
        fhem( "setstate Warmwasserladung on");
        $Rest = $Rest - 32;
        }
    else {
        fhem( "setstate Warmwasserladung off");
        }
    if( $Rest >= 16 ){
        fhem( "setstate Ladepumpeact on");
        $Rest = $Rest - 16;
        }
   else {
        fhem( "setstate Ladepumpeact off");
        }
    if( $Rest >= 8 ){
        fhem( "setstate Boiler2act on");
        $Rest = $Rest - 8;
        }
   else {
        fhem( "setstate Boiler2act off");
        }
    if( $Rest >= 4 ){
        fhem( "setstate Boiler1act on");
        $Rest = $Rest - 4;
        }
   else {
        fhem( "setstate Boiler1act off");
        }
    if( $Rest >= 2 ){
        fhem( "setstate Pumpenfreigabe on");
        $Rest = $Rest - 2;
        }
   else {
        fhem( "setstate Pumpenfreigabe off");
        }
    if( $Rest == 1 ){
        fhem( "setstate Warmwassercontrolleract on");
        }
   else {
        fhem( "setstate Warmwassercontrolleract off");
        }
}
1;


Der Aufruf erfolgt per Notify, definiert in der fhem.cfg, folgend:
#Notify für Status aktualisierung
define NewHeatflags notify heatflags {myUtils_DecodeStatus($EVTPART1)}


lg
Michi