Hauptmenü

(Gelöst) Syntaxfehler?

Begonnen von is2late, 19 Juni 2023, 17:51:19

Vorheriges Thema - Nächstes Thema

is2late

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!
Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox

betateilchen

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)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

is2late

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?
Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox

betateilchen

#3
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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

is2late

Und Du hast Recht; es funktioniert! Tausend Dank!
Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox