Variablenwert mit DOIF erkennen

Begonnen von ChHerrm, 10 September 2015, 17:51:37

Vorheriges Thema - Nächstes Thema

ChHerrm

Hallo!
Ich habe eine Frage zu folgender Thematik: Ich möchte aus einer Datei einen Wert auslesen (0 oder 1). Ist der Wert 1, soll ein dummy gesetzt werden, mit dem ich dann weiterarbeiten kann. Die Datei, aus der gelesen wird, beinhaltet einfach nur: Anw1. Diese erhält den Wert von Python mit write("Anw") und write("1").
So weit ist mein Programm:


define Anwauslesen CustomReadings
attr Anwauslesen readingDefinitions Anwes:qx(tail -10 /opt/fhem/log/Anwesenstatus.log | grep -E Anw | cut -b 4-23 2>&1)

define Anwesenh readingsGroup Anwauslesen:<%temp_temperature>,<Anwesenheitsnr>,Anwes
attr Anwesenh group Betriebstemperatur
attr Anwesenh noheading 1
attr Anwesenh nostate 1
attr Anwesenh notime 1
attr Anwesenh room System
attr Anwesenh valueFormat { 'Anwes' => ': %.f'}

define S4dummy10 dummy

define Werterkennung DOIF ([Anwes] = 1) (set S4dummy10 on) DOELSE (set S4dummy10 off)
attr Werterkennung do always



Der dummy wird aber auf keinen Zustand gesetzt, weder on noch off. Egal ob ich es = 1 , == 1, > 0 oder eq "1" schreibe. Der Wert selbst wird aber vernünftig dargestellt und erkannt. Nur in einer DOIF-Anweisung funktioniert es mit diesen Schreibweisen nicht :-\
Sieht jemand den Fehler??

Amenophis86

wo hast du denn überhaupt "Anwes" definiert?
Ich sehe nur "Anwauslesen" und "Anwesenh" und nirgends die Definition von "Anwes", welches du in deinem DOIF ansprichst. DOIF reagiert immer auf den genauen Namen des Devices oder auf Readings mittels : D.h. Entweder [Device] = ... oder [Device:Reading] = ...
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

ChHerrm

Stimmt, es muss Anwesenh heißen, danke. Jetzt wird immerhin schon der Dummy gesetzt, jedoch auf off, obwohl der Wert von Anwesenh 1 ist. Es geht wieder nicht mit =, == oder eq. Auch wenn ich z.B. <2 angebe, wird das scheinbar nicht als eine Zahl erkannt. Also muss es wohl irgendwie am Format o.Ä. liegen oder?

define Anwauslesen CustomReadings
attr Anwauslesen readingDefinitions Anwes:qx(tail -10 /opt/fhem/log/Anwesenstatus.log | grep -E Anw | cut -b 4-23 2>&1)

define Anwesenh readingsGroup Anwauslesen:<%temp_temperature>,<Anwesenheitsnr>,Anwes
attr Anwesenh group Betriebstemperatur
attr Anwesenh noheading 1
attr Anwesenh nostate 1
attr Anwesenh notime 1
attr Anwesenh room System
attr Anwesenh valueFormat { 'Anwes' => ': %.f'}

define S4dummy10 dummy

define Werterkennung DOIF ([Anwesenh] = 1) (set S4dummy10 on) DOELSE (set S4dummy10 off)
attr Werterkennung do always



igami

ist Anwesenh nicht die readingsGroup?
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

ChHerrm

Ja das ist es. Aber mit welcher der Variablen kann ich sonst einen Vergleich ausführen?
Folgendes habe ich ja momentan zur Auswahl:

Anwauslesen = CustomReadings
Anwesenh = readingsGroup
Anwes = Textinhalt auf die Zahl 1 gekürzt

Mit welchem Vergleich kann ich das Problem sonst lösen?

igami

Zitat von: ChHerrm am 10 September 2015, 21:12:41
Ja das ist es. Aber mit welcher der Variablen kann ich sonst einen Vergleich ausführen?
Woher soll ich wissen auf was du prüfen willst? Wo steht denn die 1 oder 0 aus der Datei? Darauf musst du prüfen. Die readingsGroup dürfte den Wert Initialized haben.
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

ChHerrm

Okay dann nochmal von vorne:

Ich schreibe in die Datei /opt/fhem/log/Anwesenstatus.log entweder Anw1 oder Anw0 rein. Auch nur eine 1 oder nur eine 0 wären denkbar, wenn sich das besser auslesen lassen würden. Aber ich möchte diese Werte einfach auslesen. Das gelingt mir auch mit der Variablen Anwes. Aber wenn ich mit der einen Vergleich durchführe, also [Anwes] = 1 o.Ä. komme ich zu keinem Ergebnis bzw. scheint nichts erkannt zu werden. Der zu schaltende Dummy reagiert dann nicht :-\ :-\

igami

[Anwes] gibt den wert vom Internal STATE von Anwes zurück, was du willst ist aber den Wert vom Reading Anwes vom device Anwauslesen. Du solltest dir die Commandref vom DOIF noch einmal durchlesen.
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

ChHerrm

Ah alles klar, das war der richtige Denkanstoß. So geht es jetzt:
define Werterkennung DOIF ([Anwauslesen:Anwes] == 1) (set S4dummy10 on) DOELSE (set S4dummy10 off)

Besten Dank! ;D