Hallo Zusammen,
ich habe einen OWDevice, welcher mir als Status einen Text melden soll.
Hier mein Versuch, welcher aber nicht wirklich arbeitet... (Syntax Fehler)
define flDualInput1 OWDevice 3A.3CAA07000000 5
attr flDualInput1 model DS2413
attr flDualInput1 room Flur
attr flDualInput1 stateFormat { if( ReadingsVal("flDualInput1","Status_A","-") eq '0') { sprint("Zu") } else { sprint("Auf")} , \
if( ReadingsVal("flDualInput1","Status_B","-") eq '0') { sprint ("Zu")} else { sprint("Auf")} ;; }
attr flDualInput1 userReadings Status_A { ReadingsVal("flDualInput1","sensed.A","Auf") }, Status_B { ReadingsVal("flDualInput1","sensed.B","Auf");; }
Kann man innerhalb des State Formats auch eine IF durchführen ? Laut Doc. steht hier {.. perl code } .
Gruss
R.
Ja, allerdings der Ausdruck if...,if... ist mir (und vmtl auch perl) unbekannt.
Das sprintf ist zwar kein Fehler, ich sehe aber die Notwendigkeit nicht.
Stimmt, mein Fehler...
Ursprung ist dieser Teil:
attr klS0Zaehler stateFormat { sprintf("%.3f kWh %.3f kW", ReadingsVal("klS0Zaehler","energy","--.---"), ReadingsVal("klS0Zaehler","power","--.---"));; }
Aber es ist ja auch ein String der hier zurückgegeben wird.
ich versuche jetzt wohl eher so was (ungetestet hier online getippt)
attr flDualInput1 stateFormat { sprintf("A: %s B: %s", getState(ReadingsVal("flDualInput1","sensed.A",0)),getState(ReadingsVal("flDualInput1","sensed.B",0))) ;; }t
Gruss R.
Hier meine Lösung, falls es jemand gebrauchen kann:
für FHEM.cfg
define flDualInput1 OWDevice 3A.XXXXXXXX 5
attr flDualInput1 model DS2413
attr flDualInput1 alias Tuerschalter
attr flDualInput1 room Flur
attr flDualInput1 stateFormat { sprintf("Rechts: %s Links: %s", getBooleanStateOpenClose(ReadingsVal("flDualInput1","sensed.A",0)), getBooleanStateOpenClose(ReadingsVal("flDualInput1","sensed.B",0))) ;; }
attr flDualInput1 userReadings Status_A { ReadingsVal("flDualInput1","sensed.A","-") }, Status_B { ReadingsVal("flDualInput1","sensed.B","-");; }
99_myUtils.pm
#
# get back the given text for a boolean bit, like On/Off
#
sub getBooleanStateOpenClose($)
{
my $stateVar = shift;
my $ret = "unbekannt";
$stateVar=trim($stateVar);
if( $stateVar eq '1')
{
$ret = "Offen";
}
if( $stateVar eq '0')
{
$ret = "Geschlossen";
}
return $ret;
}