Ich versuche eine Pumpe zu schalten wenn die Temperatur11 Größer ist wie die Temperatur 1
Internals:
CFGFN
DEF ([1wire_temp1:temperature] >= [1wire_Temp11:temperature])
(set Relay_02 on)
DOELSE ## wenn nicht dann off
(set Relay_02 off)
NAME Solar_Pumpe
NR 364
NTFY_ORDER 50-Solar_Pumpe
STATE cmd_1
TYPE DOIF
READINGS:
2017-12-08 21:01:10 Device 1wire_temp1
2017-12-08 20:30:44 cmd 1
2017-12-08 20:30:44 cmd_event 1wire_temp1
2017-12-08 20:30:44 cmd_nr 1
2017-12-08 21:01:10 e_1wire_temp1_temperature 22.437
2017-12-08 20:30:44 state cmd_1
2017-12-08 21:01:10 warning condition c01: Argument "" isn't numeric in numeric ge (>=)
Regex:
condition:
0 ReadingValDoIf($hash,'1wire_temp1','temperature') >= ReadingValDoIf($hash,'1wire_Temp11','temperature')
devices:
0 1wire_temp1 1wire_Temp11
all 1wire_temp1 1wire_Temp11
do:
0:
0 set Relay_02 on
1:
0 set Relay_02 off
helper:
DOIF_Readings_events
DOIF_eventas
event T: 22.437,temperature: 22.437
globalinit 1
last_timer 0
sleeptimer -1
timerdev 1wire_temp1
timerevent T: 22.437,temperature: 22.437
triggerDev 1wire_temp1
timerevents:
T: 22.437
temperature: 22.437
timereventsState:
state: T: 22.437
temperature: 22.437
triggerEvents:
T: 22.437
temperature: 22.437
triggerEventsState:
state: T: 22.437
temperature: 22.437
internals:
itimer:
readings:
0 1wire_temp1:temperature 1wire_Temp11:temperature
all 1wire_temp1:temperature 1wire_Temp11:temperature
trigger:
uiState:
uiTable:
Attributes:
readingList 1wire_temp11_temperature
room Logik
ich kann nur nix mit dieser Meldung anfangen.
2017-12-08 21:01:10 warning condition c01: Argument "" isn't numeric in numeric ge (>=)
oder kann ich das so nicht machen wie ich das geschrieben habe.
([1wire_temp1:temperature] >= [1wire_Temp11:temperature])
(set Relay_02 on)
DOELSE
(set Relay_02 off)
Hi,
du brauchst nur dein LIST <device> in Codetags packen - nicht deine Anmerkungen und vor allem die Frage.
Muss man ja erstmal suchen ...
Ich vermute ja, dass dein Device nicht "1wire_Temp11" sondern "1wire_temp11" heißt.
temp11 größer/gleich temp1
müsste dann auch so aussehen
temp11 >= temp1
oder
temp1 <= temp11
so jetzt kann ich wieder schreiben.
danke @fischit das wahr der Fehler, da hatte ich wohl Tomaten auf den äugen ::)
Funktioniert super nur habe ich bei einer andern Formel die fast gleich ist ein anderes Problem.
Wenn temp_13 größer als temp_9 dann soll Relay_07 auf on gestellt werden.
Wenn temp_13 kleiner als temp_9 dann soll Relay_07 auf off gestellt werden.
Wenn aber temp_8 größer als 30 dann soll Relay_07 auf on gestellt werden.
([1wire_temp13:temperature] >= [1wire_temp9:temperature])
(set Relay_07 on)
DOELSEIF ([1wire_temp8:temperature] >= 30)
(set Relay_07 on)
DOELSE
(set Relay_07 off)
jetzt die Frage.
wenn temp 13 größer ist und Relay_07 auf on gestellt werden soll geht das aber jedesmal wenn der Wert des Fühlers aktualisiert wird schaltet das Relay_07 auf off und nach etwa 2 - 3 Sekunden wieder auf on.
Wie kann ich das ändern denn es soll damit ein Ventil geschaltet werden welches zwischen zwei Tanks verbaut wird um das Tankvolumen zu halbieren.
([1wire_temp13:temperature] >= [1wire_temp9:temperature] or [1wire_temp8:temperature] >= 30)
(set Relay_07 on)
DOELSE
(set Relay_07 off)
Damit hast du nur zwei Zustände. Ohne do always sollte der Zustand stabil bleiben.
du müsstest mal ein list des DOIF posten, wenn es die Zustände annimmt, die du nicht haben willst.
Ich vermute mal, dass dein DOIF durch
[1wire_temp8:temperature]
getriggert wird, die Bedingung wird geprüft, ist nicht wahr und deshalb tritt dein DOELSE ein.
damit das nicht passiert, müsstest du eventuell mal des attribut
checkall event
einbauen. Dann weren alle Bedingungen geprüft und DOELSE tritt erst ein wenn die Bedingungen für cmd1 und cmd2 unwahr sind.
Aber das sind nur Vermutungen. Wenn du unmittelbar nachdem der ungewünschte Zustand eingetreten ist, ein list von dem DOIF machts, dann kann man sehen wodurch der Zustand eingetreten ist.
Danke euch beiden habe alles so geändert und scheint jetzt stabil zu laufen.