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 ## nothing
Die 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!
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)
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?
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.
Und Du hast Recht; es funktioniert! Tausend Dank!