OWDevice: Schalter mit Stateformat "Zu" / "Auf"

Begonnen von ritchie, 20 August 2013, 20:12:41

Vorheriges Thema - Nächstes Thema

ritchie

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.

IPU662  Ipfire & Fhem (Homematic + MAX) - Produktiv
Cubietruck (1Wire - USB) - Produktiv

rudolfkoenig

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.

ritchie

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.
IPU662  Ipfire & Fhem (Homematic + MAX) - Produktiv
Cubietruck (1Wire - USB) - Produktiv

ritchie

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

IPU662  Ipfire & Fhem (Homematic + MAX) - Produktiv
Cubietruck (1Wire - USB) - Produktiv