FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Der_müde_Joe am 07 September 2017, 19:34:07

Titel: [Gelöst] DOIF Abfrage - Syntax Problem
Beitrag von: Der_müde_Joe am 07 September 2017, 19:34:07
Hallo,

folgender Code soll die Rolläden selbstständig bei Regen schließen, sofern ich wach bin.

define Rollo_Regen_Ja DOIF (([wach] eq "on") and ([if($value{KS300:IR*}] eq "yes")) (set K2_Rollo position 80)
attr Rollo_Regen_Ja room Kind_2
define Rollo_Regen_Nein DOIF (([wach] eq "on") and ([if($value{KS300:IR*}] eq "no")) (set K2_Rollo position 0)
attr Rollo_Regen_Nein room Kind_2


der Dummy wach wird morgens nach dem aufstehen eingeschaltet. Das klappt auch soweit. Aber ich bekomme es nicht hin, das Reading vom KS300 für Regen auszulesen. Kann mir da einer mal einen Wink geben?

Folgende Infos liefert der KS300 im STATE
T: 16.0 H: 72 W: 0.2 R: 398.6 IR: no Wi: 0 D: 11.0

Und es gibt noch unter READINGS
israining       no

Danke schonmal.

Joe
Titel: Antw:DOIF Abfrage - Syntax Problem
Beitrag von: Rolfg am 07 September 2017, 21:59:28
Hallo Joe,

Das geht mit einem Doif. DOELSEIF. Am besten schaust du mal in die commanref unter Doif.
Gruß Rolf
Titel: Antw:DOIF Abfrage - Syntax Problem
Beitrag von: Otto123 am 07 September 2017, 22:05:21
Dein Syntax ist ziemlich "speziell", versuch mal 
([if($value{KS300:IR*}] eq "no") -> [KS300:israining] eq "no"

Gruß Otto
Titel: Antw:DOIF Abfrage - Syntax Problem
Beitrag von: Amenophis86 am 07 September 2017, 23:20:37
Oder posten einfach mal ein List von KS300, wie hier: https://forum.fhem.de/index.php/topic,71806.0.html erklärt. Dann kann man viel leichter helfen.
Titel: Antw:DOIF Abfrage - Syntax Problem
Beitrag von: Der_müde_Joe am 08 September 2017, 07:40:46
Hallo,

danke für die vielen Anregungen.

ein list KS300 ergibt:

Internals:
   CODE       1234
   CUL_0_MSGCNT 158
   CUL_0_RAWMSG 810d04xx4027a0017133109800226c
   CUL_0_RSSI -71.5
   CUL_0_TIME 2017-09-08 07:34:17
   DEF        1234
   IODev      CUL_0
   LASTInputDev CUL_0
   MSGCNT     158
   NAME       KS300
   NR         45
   RAINUNIT   255
   STATE      T: 13.3  H: 90  W: 0.8  R: 400.4  IR: no  Wi: 0 D: 11.7
   TYPE       KS300
   WINDUNIT   1
   Readings:
     2017-09-08 07:34:17   avg_day         T: 13.1  H: 88  W: 0.0  R: 1.8
     2017-09-08 00:04:24   avg_month       T: 14.7  H: 48  W: 35.2  R: 18.9
     2017-09-08 07:34:17   checksum        c
     2017-09-08 07:34:17   cum_day         2017-09-08 00:04:24 T: 353440.9  H: 2392007  W: 976.7  R: 398.6
     2017-09-08 00:04:24   cum_month       7 T: 103.2  H: 336  W: 246.3  R: 18.9
     2017-09-08 07:34:17   dewpoint        11.7
     2017-09-08 07:34:17   humidity        90
     2017-09-08 07:34:17   israining       no
     2017-09-08 07:34:17   rain            400.4
     2017-09-08 07:34:17   rain_raw        1570
     2017-09-08 07:34:17   rain_raw_adj    1570
     2017-09-08 07:34:17   state           T: 13.3  H: 90  W: 0.8  R: 400.4  IR: no  Wi: 0
     2017-09-08 07:34:17   temperature     13.3
     2017-09-08 07:34:17   tsecs           1504848857.49854
     2017-09-08 07:34:17   type_raw        7
     2017-09-08 07:34:17   unknown3        1
     2017-09-08 07:34:17   wind            0.8
     2017-09-08 07:34:17   windIndex       0
Attributes:
   IODev      CUL_0
   room       Out


Ich habe das nun mal entsprechend Otto123´s Vorschlag angepasst. Leider erhalte ich dann eine Fehlermeldung beim Speichern der .cfg

Rollo_Regen_Ja DOIF: no right bracket: (([wach] eq "on") and ([if($value{KS300:IR*}] eq "yes")) (set K2_Rollo position 80) Rollo_Regen_Nein DOIF: no right bracket: (([wach] eq "on") and ([if($value{KS300:IR*}] eq "no")) (set K2_Rollo position 0)

Danke schonmal
Titel: Antw:DOIF Abfrage - Syntax Problem
Beitrag von: mw77 am 08 September 2017, 09:23:11
Also ich sehe nicht das du Ottos Vorschlag genommen hast.
Der entscheidende Teil war dies
Zitat[KS300:israining] eq "no"
und das hier
Zitat([if($value{KS300:IR*}] eq "no")
meinte Otto mit speziell.
Also du wirfst da irgendetwas durcheinander Doif, notify was auch immer, also am besten wirklich nochmal in die Commandref zu Doif gucken.
Dein zweiter Teil im Doif Rollo_Regen_Nein DOIF: no right bracket: kann so auch nicht funktionieren, dafür wäre dann das Doelseif,
wie Rolfg ja auch schon geschrieben hat. Steht aber alles in der Commandref.
Titel: Antw:DOIF Abfrage - Syntax Problem
Beitrag von: Otto123 am 08 September 2017, 09:29:06
Vielleicht hätte ich drastischer sagen sollen, Deine Abfrage im define ist komplett Blödsinn? So könnte es klappen.
define Rollo_Regen_Ja DOIF ([wach] eq "on" and [KS300:israining] eq "yes") (set K2_Rollo position 80)
define Rollo_Regen_Nein DOIF ([wach] eq "on" and [KS300:israining] eq "no") (set K2_Rollo position 0)

Titel: Antw:DOIF Abfrage - Syntax Problem
Beitrag von: Der_müde_Joe am 08 September 2017, 13:03:32
Hallo,

ich bitte vielmals um Entschuldigung. Ich bin total verpeilt gewesen. Ich habe heute Morgen anstatt das richtige von Otto aus dem Beitrag von ihm mein altes kopiert. Es war scheinbar einfach zu früh und ich hatte ein mega Brett vorm Kopf.

Ich danke euch, dass ihr so viel Gedult mit mir hattet und nun warte ich auf Regen. Zumindest die Fehlermeldung ist schon mal weg. Danke, dass ihr Anfängern wie mir so unter die Arme greift und eure private Freizeit dafür opfert.

Ich melde mich nach dem nächsten Regen wieder und sage, ob es klappt oder nicht.

Lieben Gruß
Joe
Titel: Antw:DOIF Abfrage - Syntax Problem
Beitrag von: Amenophis86 am 08 September 2017, 13:07:13
wenn du etwas testen willst, dann kannst du auch machen in dem du mit "setreading" oder mit "trigger" arbeitest, bei DOIF auch mit direktem setzen des Command (cmd_1 etc). Erklärungen dazu erhälst du in der CommandRef.
Titel: Antw:DOIF Abfrage - Syntax Problem
Beitrag von: pc1246 am 08 September 2017, 13:13:22
Zitat von: Der_müde_Joe am 08 September 2017, 07:40:46

Leider erhalte ich dann eine Fehlermeldung beim Speichern der .cfg

Moin
Ich will hier mal den Finger heben! Du haettest wahrscheinlich einen Teil viel schneller selbst gemerkt, wenn du das in dem DOIF selst editiert haettest, als in der .cfg rumzutippen. Viele hier verstehen da keinen Spass, weil man demjenigen dann manchmal sehr schwer helfen kann!
Gruss Christoph
Titel: Antw:DOIF Abfrage - Syntax Problem
Beitrag von: Der_müde_Joe am 20 September 2017, 09:21:32
Moin,

bitte entschuldigt die späte Rückmeldung. Ich bin sehr begeistert, da das was ich wollte nun geht. Deshalb erstmal danke für eure Hilfe.

Leider hat sich wie so oft in der Automatisierung daraus ein neues Problem ergeben. Wenn es nämlich nur mieselt, signalisiert die Wetterstation immer mal wieder Regen und immer mal wieder auch kein Regen. So fährt das Rollo die ganze Zeit rauf und runter. Deshalb würde ich gerne den Rollo öffnen Befehl noch etwas anpassen und sagen, wenn es 45 Minuten nicht geregnet hat, dann fahre hoch. Mir ist aber nicht klar, wie ich eine Zeitspanne erzeuge und somit mehrere zurückliegende Einträge überprüfe. Ich bin gerne gewillt mich einzulesen, aber ich bräuchte mal einen Hinweis, welcher Befehl dazu überhaupt am sinnvollsten an zu wenden ist.

Lieben Gruß
Jens
Titel: Antw:DOIF Abfrage - Syntax Problem
Beitrag von: CBSnake am 20 September 2017, 09:31:59
Moin Jens,

schau mal in der Commandref, bei DOIF ist ein Beispiel mit der Waschmaschine (Verzögerungen von Timern):

"Benachrichtigung "Waschmaschine fertig", wenn Verbrauch mindestens 5 Minuten unter 2 Watt"

Das solltest doch leicht auf deinen Regen umbiegen können ;-)

Auch das danach Beschriebene "Zurücksetzen des Waittimers für das gleiche Kommando" könntest du nutzen.

Grüße
Achim
Titel: Antw:DOIF Abfrage - Syntax Problem
Beitrag von: Frank_Huber am 20 September 2017, 09:36:10
im DOIF gibt es das Attribut "cmdpause"
https://fhem.de/commandref_DE.html#DOIF_cmdpause
damit solltest Du das in den Griff bekommen

aber bedenke: Was passiert wenn aus dem nieseln ein stärkerer Regen wird?
Du solltest nur eine Richtung verzögern...
Titel: Antw:DOIF Abfrage - Syntax Problem
Beitrag von: Der_müde_Joe am 21 September 2017, 19:35:18
Hallo,

Danke für die Hinweise. Ich verzögere natürlich nur das Hochfahren. Hatte ich ja auch oben schon geschrieben.

Das Beispiel habe ich auch gefunden:
define di_washer DOIF ([power:watt]<2) ({system("wmail washer finished")})
attr di_washer wait 300

Wenn ich das jetzt richtig verstehe, müsste das bei mir so ausschauen:
define Rollo_Regen_Nein DOIF ([wach] eq "on" and [KS300:israining] eq "no") (set K2_Rollo position 0)
attr Rollo_Regen_Nein wait 1800


So müsste er jetzt eine halbe Stunde warten, bevor er nach Ende des Regens wieder hoch fährt. Aber was ich nicht verstehe ist, wieso der Countdown abgebrochen wird, wenn dazwischen ein Regen Ja Befehl kommt. Ich dachte das Attr Wait würde nur verzögern aber nicht prüfen, ob dauerhaft die Bedingung erfüllt ist. Scheinbar habe ich mich da geirrt und das mit einem Timer verwechselt. Vielen Dank für die umfangreiche Hilfe. Nun bin ich mit meinem Rolladen erstmal glücklich. Sofern es funktioniert setze ich den Tread noch auf gelöst.

LG Jens
Titel: Antw:DOIF Abfrage - Syntax Problem
Beitrag von: Frank_Huber am 21 September 2017, 19:41:07
Poste mal die ganze definition (raw config) in code tags.
Der doif arbeitet weiter, da wird dann ein anderer Zweig wahr und schickt seine Befehle.

Gesendet von meinem S3_32 mit Tapatalk

Titel: Antw:DOIF Abfrage - Syntax Problem
Beitrag von: Damian am 21 September 2017, 20:58:46
Zitat von: Der_müde_Joe am 21 September 2017, 19:35:18
Hallo,

Danke für die Hinweise. Ich verzögere natürlich nur das Hochfahren. Hatte ich ja auch oben schon geschrieben.

Das Beispiel habe ich auch gefunden:
define di_washer DOIF ([power:watt]<2) ({system("wmail washer finished")})
attr di_washer wait 300

Wenn ich das jetzt richtig verstehe, müsste das bei mir so ausschauen:
define Rollo_Regen_Nein DOIF ([wach] eq "on" and [KS300:israining] eq "no") (set K2_Rollo position 0)
attr Rollo_Regen_Nein wait 1800

So müsste er jetzt eine halbe Stunde warten, bevor er nach Ende des Regens wieder hoch fährt. Aber was ich nicht verstehe ist, wieso der Countdown abgebrochen wird, wenn dazwischen ein Regen Ja Befehl kommt. Ich dachte das Attr Wait würde nur verzögern aber nicht prüfen, ob dauerhaft die Bedingung erfüllt ist. Scheinbar habe ich mich da geirrt und das mit einem Timer verwechselt. Vielen Dank für die umfangreiche Hilfe. Nun bin ich mit meinem Rolladen erstmal glücklich. Sofern es funktioniert setze ich den Tread noch auf gelöst.

LG Jens

bei Regen "ja", wird das DOIF-Modul getriggert und geht in den Sonst-Fall (cmd_2) - damit bricht der wait-Timer ab.