Servus habe folgendes mit DOIF vor:
Solarpume soll einschalten wenn meine Solarmatte 1°c über der Pooltemperatur liegt und ausschalten wenn die Temperatur gleich ist.
Hab schon folgenden Code aber leider funktionierte mein Testaufbau damit nicht.
([1wire_1:temperature] =1> ) (set Heizungs_Pumpe on) DOELSE ([1wire_2:temperature] =< ) (set Heizungs_Pumpe off)"
danke schonmal für euere Hilfe
gruß matze
Hallo,
bin kein Profi, aber aus meiner Sicht kann das so nicht funktionieren.
Ich würde es mal so probieren und von da aus weiterarbeiten.
([1wire_2:temperature]>([1wire_1:temperature]+1)) (set Heizungs_Pumpe on)
DOELSEIF ([1wire_2:temperature] <=[1wire_1:temperature]) (set Heizungs_Pumpe off)
hi jogi danke für deine antwort leider bleibt die pumpe nach wie vor aus
Poste mal bitte ein list des DOIF.
Gesendet von meinem Doogee S60 mit Tapatalk
DEVICEOVERVIEW
pool_solar
cmd_1
pool_solar INTERNALS
CFGFN
DEF
([1wire_2:temperature]>([1wire_1:temperature]+1)) (set Heizungs_Pumpe on)
DOELSEIF ([1wire_2:temperature] <=[1wire_1:temperature]) (set Heizungs_Pumpe off)
MODEL
FHEM
NAME
pool_solar
NR
353
NTFY_ORDER
50-pool_solar
STATE
cmd_2
TYPE
DOIF
READINGS
Device
1wire_2
2019-01-01 14:00:43
cmd
1
2019-01-01 14:05:55
cmd_event
1wire_1
2019-01-01 14:05:55
cmd_nr
1
2019-01-01 14:05:55
e_1wire_1_temperature
31.875
2019-01-01 14:00:42
e_1wire_2_temperature
17.125
2019-01-01 14:00:43
mode
enabled
2019-01-01 13:58:21
state
cmd_1
2019-01-01 14:05:55
pool_solar
test
ATTRIBUTES
room
test
deleteattr
PROBABLY ASSOCIATED WITH
1wire_1
T: 31.875
GPIO4
1wire_2
T: 17.125
GPIO4
Heizungs_Pumpe
off
RPI_GPIO
Select icon Extend devStateIcon Raw definition Delete this device (pool_solar) Device specific help
Gib mal den Befehl "list solar_pool" ein. Das ist es was ich meinte.
Mir scheint aber du hast Temp_1 und Temp_2 verwechselt.
Gesendet von meinem Doogee S60 mit Tapatalk
Internals:
DEF ([1wire_1:temperature] => ) (set Heizungs_Pumpe on) DOELSE ([1wire_2:temperature] =< ) (set Heizungs_Pumpe off)"
MODEL FHEM
NAME pool_solar
NR 46
NTFY_ORDER 50-pool_solar
STATE cmd_1
TYPE DOIF
READINGS:
2019-01-01 14:27:16 Device 1wire_1
2019-01-01 14:05:55 cmd 1
2019-01-01 14:05:55 cmd_event 1wire_1
2019-01-01 14:05:55 cmd_nr 1
2019-01-01 14:27:16 e_1wire_1_temperature 16.812
2019-01-01 14:03:45 e_1wire_2_temperature 17.125
2019-01-01 13:58:21 mode enabled
2019-01-01 14:05:55 state cmd_1
Regex:
attr:
cmdState:
wait:
waitdel:
condition:
0 ::ReadingValDoIf($hash,'1wire_1','temperature') =>
devices:
0 1wire_1
all 1wire_1
do:
0:
0 set Heizungs_Pumpe on
1:
0 [1wire_2:temperature] =<
1 set Heizungs_Pumpe off
helper:
event T: 16.812,temperature: 16.812
globalinit 1
last_timer 0
sleeptimer -1
timerdev 1wire_1
timerevent T: 16.812,temperature: 16.812
triggerDev 1wire_1
DOIF_eventas:
cmd_nr: 1
cmd: 1
cmd_event: 1wire_1
state: cmd_1
timerevents:
T: 16.812
temperature: 16.812
timereventsState:
state: T: 16.812
temperature: 16.812
triggerEvents:
T: 16.812
temperature: 16.812
triggerEventsState:
state: T: 16.812
temperature: 16.812
internals:
itimer:
perlblock:
readings:
0 1wire_1:temperature
all 1wire_1:temperature
trigger:
uiState:
uiTable:
Attributes:
room test
Do hast das vorgeschlagene DOELSEIF nicht drin.
DOELSE kennt keine Bedingung.
Weiter hat dein Doif doch ausgelöst, es steht auf cmd_1.
Also, DOELSE zu DOELSEIF ändern und testen.
Gesendet von meinem Doogee S60 mit Tapatalk
supi ja fühler sind vertauscht gewesen *lach vielen dank es klappt frohes neues danke
Zitat von: matze85 am 31 Dezember 2018, 14:19:17([1wire_1:temperature] =1> ) (set Heizungs_Pumpe on) DOELSE ([1wire_2:temperature] =< ) (set Heizungs_Pumpe off)"
Ist "=1>" eine Perl- oder eine DOIF-Spezialität? Oder wieso geht das?
keine Ahnung ehrlich gesagt aber es funktioniert oder was ist falsch deiner Meinung nach = 1> ist gleich 1 °c größer schalte die pumpe an .....????
Zitat von: matze85 am 02 Januar 2019, 17:44:10
keine Ahnung ehrlich gesagt aber es funktioniert oder was ist falsch deiner Meinung nach = 1> ist gleich 1 °c größer schalte die pumpe an .....????
Solche Vergleiche sind mir neu. ;)
Für einen Vergleich brauchst du einen Operator ==, <=, >=, >, < und zwei Werte die du miteinander vergleichen möchtest.
z. B.
a > b oder a == b oder a >= b
also du meinst > = 1...? aber warum funktioniert es auch so wie ich es im Moment habe ...?
Du wolltest doch Temperaturdifferenz vergleichen.
D. h. deine Angaben sind nicht nur syntaktisch, sondern auch semantisch falsch. Was da funktioniert oder nicht ist Zufall. Sinnvolle Vergleiche hat Jogi bereits vorgeschlagen.
hab ich doch so gemacht wie jogi vorgeschlagen hat
das ist mein fertiger doif
([1wire_1:temperature]>([1wire_2:temperature]+1)) (set Heizungs_Pumpe on)
DOELSEIF ([1wire_1:temperature] <=[1wire_2:temperature]) (set Heizungs_Pumpe off)
Zitat von: matze85 am 02 Januar 2019, 22:41:27
hab ich doch so gemacht wie jogi vorgeschlagen hat
das ist mein fertiger doif
([1wire_1:temperature]>([1wire_2:temperature]+1)) (set Heizungs_Pumpe on)
DOELSEIF ([1wire_1:temperature] <=[1wire_2:temperature]) (set Heizungs_Pumpe off)
dann hast du uns einen falschen List im Post 7 gestern gepostet.