FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: ChHerrm am 10 September 2015, 17:51:37

Titel: Variablenwert mit DOIF erkennen
Beitrag von: ChHerrm am 10 September 2015, 17:51:37
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??
Titel: Antw:Variablenwert mit DOIF erkennen
Beitrag von: Amenophis86 am 10 September 2015, 19:23:07
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] = ...
Titel: Antw:Variablenwert mit DOIF erkennen
Beitrag von: ChHerrm am 10 September 2015, 20:13:43
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


Titel: Antw:Variablenwert mit DOIF erkennen
Beitrag von: igami am 10 September 2015, 20:55:30
ist Anwesenh nicht die readingsGroup?
Titel: Antw:Variablenwert mit DOIF erkennen
Beitrag 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?
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?
Titel: Antw:Variablenwert mit DOIF erkennen
Beitrag von: igami am 10 September 2015, 21:18:14
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.
Titel: Antw:Variablenwert mit DOIF erkennen
Beitrag von: ChHerrm am 10 September 2015, 21:32:37
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 :-\ :-\
Titel: Antw:Variablenwert mit DOIF erkennen
Beitrag von: igami am 10 September 2015, 22:13:11
[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.
Titel: Antw:Variablenwert mit DOIF erkennen
Beitrag von: ChHerrm am 11 September 2015, 10:16:58
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