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
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
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