Hauptmenü

DOIF Temperaturen vergleichen

Begonnen von Ruf023, 08 Dezember 2017, 21:11:15

Vorheriges Thema - Nächstes Thema

Ruf023

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)

fischit

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.

automatisierer

temp11 größer/gleich temp1

müsste dann auch so aussehen

temp11 >= temp1

oder

temp1 <= temp11

Ruf023

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.

Damian

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

automatisierer

#5
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.

Ruf023

Danke euch beiden habe alles so geändert und scheint jetzt stabil zu laufen.