DOIF Solarsteuerung Differenztemperaturregelung Hilfe

Begonnen von matze85, 31 Dezember 2018, 14:19:17

Vorheriges Thema - Nächstes Thema

matze85

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

Jogi

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)
 

matze85

hi jogi danke für deine antwort leider bleibt die pumpe nach wie vor aus

Frank_Huber

Poste mal bitte ein list des DOIF.

Gesendet von meinem Doogee S60 mit Tapatalk


matze85

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

Frank_Huber

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


matze85

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

Frank_Huber

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


matze85

supi ja fühler sind vertauscht gewesen *lach vielen dank es klappt frohes neues danke

Per

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?

matze85

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 .....????

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

matze85

also du meinst > = 1...? aber warum funktioniert es auch so wie ich es im Moment habe ...?

Damian

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.

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

matze85

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)