DOIFELSE mit Auswertung eines Attributes

Begonnen von LuBeDa, 08 März 2017, 20:27:18

Vorheriges Thema - Nächstes Thema

LuBeDa

Hallo,
ich möchte eine Lampe in Abhängigkeit der Helligkeit und des Zustands des Fernsehers zu schalten. Wenn es Dunkel ist und der Fernseher läuft soll die Lampe ausgehen. Wenn es Hell ist oder der Fernseher ausgeschaltet wird soll die Lampe ausgehen.

Damit ich die Lampe auch manuell an/aus schalten kann habe ich bei dem Schalter das Userattr auto hinzugefügt. auto = 1  bedeutet: Die Lampe wurde über DOIF eingeschaltet und soll auch automatisch ausgeschaltet werden.

Wie ist die richtige Abfrage nach dem Attribut [WZIT01:auto] eq "1" funktioniert nicht weil es kein Reading ist.

([SamsungTV_on] eq "present" and [Sonnenstand:light] < 2)
           (set WZIT01 on,attr WZIT01 auto 1)
DOELSEIF ([Sonnenstand:light] > 2 and [WZIT01:auto] eq "1")
           (set WZIT01 off,attr WZIT01 auto 0)
DOELSEIF ([SamsungTV_on] eq "absent" and [WZIT01] eq "on" and [WZIT01:auto] eq "1")
           (set WZIT01 on-for-timer 60,attr WZIT01 auto 0)


Das funktioniert grundsätzlich auch nur die Auswertung des Attributes halt nicht.

Ich habe auch keine Idee wie ich das richtig debugen soll verbose 5 bei dem DOIF bringt keine weitere Angaben.

Fülle mich etwas hilflos ;-)


Damian

#1
Das sollte über Auswertung von Events funktionieren:

["global:ATTR <dein DOIF-Device> userattr auto 1"]
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

willibutz

@LuBeDa
ich habe das gleiche Problem mit einem ganz normalen Reading gelöst.
Einfach "setreading WZIT01 auto 1" in der Kommandozeile eingeben und das Reading ist erstellt.
Mit dem gleichen Befehl z.B. innerhalb des DOIFS kann der Wert des Readings dann auch gesteuert werden. Die Abfrage hast du ja schon.
Ich habe das Reading dann auch in FTUI benutzt um die Bedienung per LOCK zu sperren, wenn AUTO ein ist.

Hoffe das funktioniert bei dir auch einfach so,
Gruß willi

Damian

Zitat von: willibutz am 08 März 2017, 22:02:41
@LuBeDa
ich habe das gleiche Problem mit einem ganz normalen Reading gelöst.
Einfach "setreading WZIT01 auto 1" in der Kommandozeile eingeben und das Reading ist erstellt.
Mit dem gleichen Befehl z.B. innerhalb des DOIFS kann der Wert des Readings dann auch gesteuert werden. Die Abfrage hast du ja schon.
Ich habe das Reading dann auch in FTUI benutzt um die Bedienung per LOCK zu sperren, wenn AUTO ein ist.

Hoffe das funktioniert bei dir auch einfach so,
Gruß willi
Ich finde die Möglichkeit auch eleganter. Man kann inzwischen Readings mit setList als Dropdown-Auswahl innerhalb eines DOIF-Moduls definieren.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Per

Den manuellen Modus kannst du mit
DOIF (on-Bedingung)
DOELSEIF (off-Bedingung)
DOESLEIF ([LAMPE] ne [?$SELF])

attr cmdstate on|off|auto

erfragen.

LuBeDa

Die Variante mit Setreadings funktioniert super.  :) :) :)

Es fällt mir aber immer noch schwer mich an die Schreibweise von FHEM zu gewöhnen. Z.B. mal trennt man Befehle mit ",", mal mit ";" und mal mit ";;".

Das macht es mir als Einsteiger schwer richtig in die Automatisierung einzusteigen, aber FHEM ist alternativlos als Heimautomatisierung.

Ich habe noch keine wirkliche Alternative gefunden. Openhab kann "schöner" automatisieren, dafür sind andere/wichtigere Sachen nicht umsetzbar.

Naja, ich lerne weiter.





Damian

Zitat von: LuBeDa am 10 März 2017, 13:45:01
Es fällt mir aber immer noch schwer mich an die Schreibweise von FHEM zu gewöhnen. Z.B. mal trennt man Befehle mit ",", mal mit ";" und mal mit ";;".

Historisch gewachsen. Um das Problem mit dem Doppeln der Semikolons zu umgehen, benutzt DOIF Komma als Trennzeichen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF