Hallo.
Möchte gerne etwas schalten wenn zustand kleiner als "lock_5" ist.
Und erst dann abschalten wenn Zustand grösser als "lock_5" ist.
DEF (([lock_1] - [lock_2]) >3 and [lock_3] < [lock_4]
or (([lock_1] - [lock_2]) <3 and [lock_5] <20)) (set test_3 on)
DOELSEIF (([lock_3] < [lock_1] and [lock_3] > [lock_4])
or (([lock_1] - [lock_2]) <3 and [lock_5] >50)
or [lock_3] < [lock_6]) (set test_3 off)
DOELSE
Die erste Funktion passt , aber sobald sich der mindestwert ändert schaltet sich cmd1 aus.
warum? müsste doch auf >50 warten. oder?
Internals:
DEF (([lock_1] - [lock_2]) >3 and [lock_3] < [lock_4]
or (([lock_1] - [lock_2]) <3 and [lock_5] <20)) (set test_3 on)
DOELSEIF (([lock_3] < [lock_1] and [lock_3] > [lock_4])
or (([lock_1] - [lock_2]) <3 and [lock_5] >50)
or [lock_3] < [lock_6]) (set test_3 off)
DOELSE
NAME DI_test
NR 136
NTFY_ORDER 50-DI_test
STATE off
TYPE DOIF
READINGS:
2024-01-06 09:51:49 Device lock_2
2024-01-06 09:51:49 cmd 2
2024-01-06 09:51:49 cmd_event lock_2
2024-01-06 09:51:49 cmd_nr 2
2024-01-06 09:51:49 e_lock_2_STATE 97
2024-01-06 09:51:25 mode enabled
2024-01-06 09:51:49 state off
Regex:
condition:
0 (InternalDoIf($hash,'lock_1','STATE') - InternalDoIf($hash,'lock_2','STATE')) >3 and InternalDoIf($hash,'lock_3','STATE') < InternalDoIf($hash,'lock_4','STATE') or ((InternalDoIf($hash,'lock_1','STATE') - InternalDoIf($hash,'lock_2','STATE')) <3 and InternalDoIf($hash,'lock_5','STATE') <20)
1 (InternalDoIf($hash,'lock_3','STATE') < InternalDoIf($hash,'lock_1','STATE') and InternalDoIf($hash,'lock_3','STATE') > InternalDoIf($hash,'lock_4','STATE')) or ((InternalDoIf($hash,'lock_1','STATE') - InternalDoIf($hash,'lock_2','STATE')) <3 and InternalDoIf($hash,'lock_5','STATE') >50) or InternalDoIf($hash,'lock_3','STATE') < InternalDoIf($hash,'lock_6','STATE')
devices:
0 lock_1 lock_2 lock_3 lock_4 lock_5
1 lock_3 lock_1 lock_4 lock_2 lock_5 lock_6
all lock_1 lock_2 lock_3 lock_4 lock_5 lock_6
do:
0:
0 set test_3 on
1:
0 set test_3 off
2:
0
helper:
DOIF_Readings_events
DOIF_eventas
event 97
globalinit 1
last_timer 0
sleeptimer -1
timerdev lock_2
timerevent 97
triggerDev lock_2
timerevents:
97
timereventsState:
state: 97
triggerEvents:
97
triggerEventsState:
state: 97
internals:
0 lock_1:STATE lock_2:STATE lock_3:STATE lock_4:STATE lock_5:STATE
1 lock_3:STATE lock_1:STATE lock_4:STATE lock_2:STATE lock_5:STATE lock_6:STATE
all lock_1:STATE lock_2:STATE lock_3:STATE lock_4:STATE lock_5:STATE lock_6:STATE
itimer:
readings:
trigger:
uiState:
uiTable:
Attributes:
cmdState on|off|3
room dummy,test
Wegen des DOELSE. Trifft keine der Bedingungen zu, tritt "ansonsten" in Kraft.
Zitat von: Per am 06 Januar 2024, 10:28:20Wegen des DOELSE. Trifft keine der Bedingungen zu, tritt "ansonsten" in Kraft.
Hallo.
Nein, cmd2 schlägt zu. lock_5 mit 21 genügt. warum aber? soll doch erst >50 zuschlagen.
Du hast 3 durch or verbundene Terme, einer reicht, es muss nicht der mit Lock_5 sein.
glaube Lösung gefunden
DEF (([lock_1] - [lock_2]) >3 and [lock_3] < [lock_4]
or (([lock_1] - [lock_2]) <3 and [lock_5] <20)) (set test_3 on)
DOELSEIF (([lock_3] < [lock_1] and [lock_3] > [lock_4])
or [lock_3] < [lock_6]) (set test_3 off)
DOELSEIF ([lock_1] - [lock_2] <3 and [lock_5] >50) (set test_3 off)
Das wird außer dir keiner beurteilen können, denn deine "Prosa" entspricht nicht annähernd dem Code und die Namen der Variablen sind nicht sprechend. Aber wenn es passt, dann ist es ok.
sooo, jetzt passt das ganze.
Hintergrund:
Wenn Strompreis gewissen Wert hat und mind. 3cent Unterschied als soll geschalten werden. Wenn aber Akku unter definiertem-SOC gefallen ist, und der Strompreis weniger als 3 cent Unterschied hat, soll nachgeladen werden bis zu 50%.
dürfte so klappen.
minimum = Ø mindestpreis + mittlerer Preis
mindest = minimum heute/morgen
Durchschnitt = mittlerer Preis
((([Strompreis:minimum] - [Strompreis:min]) >3 and [Strompreis:now] < ([Strompreis:minimum] and [mindest]))
or ([Strompreis:minimum] - [Strompreis:min] <3 and [PylonTech_mSOC] <19 and [Strompreis:now] < [mindest])) (set Strom_billig on,set laden_billig on)
DOELSEIF ((([Strompreis:minimum] - [Strompreis:min]) <3 and [Strompreis:now] < ([Strompreis:minimum] and [mindest]))
or (([Strompreis:now] > [Strompreis:minimum] or [Strompreis:now] > [mindest]) and [Strompreis:now] < [Strompreis:Durchschnitt])) (set Strom_billig on,set laden_billig off)
DOELSEIF (([Strompreis:minimum] - [Strompreis:min]) <3 and [PylonTech_mSOC] >50) (set Strom_billig on, set laden_billig off)
DOELSEIF ([Strompreis:now] > [mindest]) (set Strom_billig off, set laden_billig off)
bin so nicht der Meister im DOIF, ginge evt. spärlicher.
[Strompreis:now] < ([Strompreis:minimum] and [mindest])
diese Angabe macht in der Informatik keinen richtigen Sinn, du meinst vermutlich das hier:
[Strompreis:now] < [Strompreis:minimum] and [Strompreis:now] < [mindest]
vielleicht aber mit oder statt mit and.