FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: is2late am 19 Juni 2023, 17:51:19

Titel: (Gelöst) Syntaxfehler?
Beitrag von: is2late am 19 Juni 2023, 17:51:19
Hallo,

ich möchte eine automatische Wassernachspeisung erreichen, wenn der Füllstand der Zisterne unter einen bestimmten Wert sinkt.
Der Befehl zur Nachspeisung scheint zu stimmen, weil er in der Kommandozeile funktioniert. Es hapert wohl an der Bedingung.
Das hier ist mein letzter Stand:
defmod d_Wassernachspeisung DOIF ([Zisterne:measure.content] <5000)({fhem("set Wassernachspeisung manualOverride 1")}) ({fhem("set teleBot message Wassernachlauf startet")}) DOELSE ## nothingDie Readings der Zisterne lauten wie folgt:
define Zisterne SI_Liquid_Check
#   READINGS:

#     2023-06-19 07:10:06   last.measure.content 4000
#     2023-06-19 07:10:06   last.measure.level 0.4
#     2023-06-19 17:46:17   measure.age     2464
#     2023-06-19 17:46:17   measure.content 3600
#     2023-06-19 17:46:17   measure.level   0.36
#     2023-06-19 17:46:17   measure.raw.content 3643.3064
#     2023-06-19 17:46:17   measure.raw.level 0.3643
#     2023-06-19 17:46:17   nextupdate      Mo 19. Jun 2023 - 17:51
#     2023-06-19 17:46:17   nextupdtime     17:51:17
#     2023-06-19 17:46:17   round.percent   45
#     2023-06-19 17:46:17   round10.percent 50
#     2023-06-19 17:46:17   state           3600
#

Sieht jemand meinen Fehler?

Vielen Dank!
Titel: Aw: Syntaxfehler?
Beitrag von: betateilchen am 19 Juni 2023, 18:28:00
Deine Bedingung passt, aber Dein Ausführungsteil dürfte falsch sein. Zuviele Klammern, falsche Syntax.

Abgesehen davon, dass ich sowas nie über DOIF lösen würde, und auch abgesehen davon, dass DOIF ein eigenes Unterforum hat und man nicht die Anfängerfragen dafür bemühen sollte, schlage ich vor, Du probierst einfach mal das, was in der commandref steht, z.B. dass man mehrere Befehle mit Komma trennt.

defmod d_Wassernachspeisung DOIF ([Zisterne:measure.content] <5000)(set Wassernachspeisung manualOverride 1, set teleBot message Wassernachlauf startet)
Titel: Aw: Syntaxfehler?
Beitrag von: is2late am 19 Juni 2023, 19:24:44
Vielen Dank, Betateilchen,
aber es funktioniert nicht:
[code]define d_Wassernachspeisung DOIF ([Zisterne:measure.content] <5000)(set Wassernachspeisung manualOverride 1, set teleBot message Wassernachlauf startet) DOELSE ## nothing
attr d_Wassernachspeisung room GardenaSmart,Geräte
#   DEF        ([Zisterne:measure.content] <5000)(set Wassernachspeisung manualOverride 1, set teleBot message Wassernachlauf startet) DOELSE ## nothing
#   FUUID      6488d153-f33f-a080-1777-f3d027c6a0c432f0
#   MODEL      FHEM
#   NAME       d_Wassernachspeisung
#   NOTIFYDEV  global,Zisterne
#   NR         509
#   NTFY_ORDER 50-d_Wassernachspeisung
#   STATE      initialized
#   TYPE       DOIF
#   eventCount 4
#   READINGS:
#     2023-06-19 19:06:17   Device          Zisterne
#     2023-06-19 19:18:49   cmd             0
#     2023-06-13 22:53:13   cmd_event       d_Wassernachlauf
#     2023-06-13 22:53:13   cmd_nr          1
#     2023-06-13 22:53:13   cmd_seqnr       2
#     2023-06-19 19:06:17   e_Zisterne_measure.content 3700
#     2023-06-19 19:18:49   mode            enabled
#     2023-06-19 19:18:49   state           initialized
#   Regex:
#     accu:
#     bar:
#     barAvg:
#     collect:
#     cond:
#       Zisterne:
#         0:
#           measure.content ^Zisterne$:^measure.content:
#   attr:
#     waitdel:
#   condition:
#     0          ::ReadingValDoIf($hash,'Zisterne','measure.content') <5000
#   do:
#     0:
#       0          set Wassernachspeisung manualOverride 1, set teleBot message Wassernachlauf startet
#     1:
#       0         
#   helper:
#     NOTIFYDEV  global,Zisterne
#     globalinit 1
#     last_timer 0
#     sleeptimer -1
#     timerdev   
#     timerevent
#     timerevents
#     timereventsState
#     triggerDev
#   hmccu:
#   readings:
#     all         Zisterne:measure.content
#   uiState:
#   uiTable:
#
setstate d_Wassernachspeisung initialized
setstate d_Wassernachspeisung 2023-06-19 19:06:17 Device Zisterne
setstate d_Wassernachspeisung 2023-06-19 19:18:49 cmd 0
setstate d_Wassernachspeisung 2023-06-13 22:53:13 cmd_event d_Wassernachlauf
setstate d_Wassernachspeisung 2023-06-13 22:53:13 cmd_nr 1
setstate d_Wassernachspeisung 2023-06-13 22:53:13 cmd_seqnr 2
setstate d_Wassernachspeisung 2023-06-19 19:06:17 e_Zisterne_measure.content 3700
setstate d_Wassernachspeisung 2023-06-19 19:18:49 mode enabled
setstate d_Wassernachspeisung 2023-06-19 19:18:49 state initialized

[/code]

Wenn nicht mit DOIF, wie würdest Du das denn lösen?
Titel: Aw: Syntaxfehler?
Beitrag von: betateilchen am 19 Juni 2023, 19:38:53
Extra wegen Dir habe ich das auf meinem Testsystem angelegt.
Bei mir funktioniert das DOIF so wie ich es gepostet habe, wenn ich drei dummy-devices mit den von Dir genutzten Namen anlege und mit setreading einen Messwert unter 5000 erzeuge.

Lass doch mal das bescheuerte DOELSE weg, wenn danach eh nix mehr kommt.

Zitat von: is2late am 19 Juni 2023, 19:24:44Wenn nicht mit DOIF, wie würdest Du das denn lösen?

Mit einem ordinären notify. Da verstehe ich wenigstens, was warum passiert.
Titel: Aw: Syntaxfehler?
Beitrag von: is2late am 19 Juni 2023, 19:40:13
Und Du hast Recht; es funktioniert! Tausend Dank!