Hauptmenü

Doif funktioniert nicht

Begonnen von saschaev, 31 Juli 2021, 10:27:00

Vorheriges Thema - Nächstes Thema

saschaev

Hallo ich bräuchte Mal eure Hilfe.
Ich möchte eine Solarheizung für meinen Pool Steuern. Habe es mit DOIF probiert , bloß es funktioniert nicht automatisch das die Solarpumpe ein und ausgeschaltet wird.
Vielleicht kann mir jemand einen Tipp geben
.defmod SolartemperaturDifferenz DOIF ([Pool:temperature] < [RuecklaufWP:temperature]) (set Solarpumpe on) DOELSE (set Solarpumpe off)
attr SolartemperaturDifferenz checkall event
attr SolartemperaturDifferenz room Pool

setstate SolartemperaturDifferenz cmd_2
setstate SolartemperaturDifferenz 2021-07-30 17:28:48 cmd 2
setstate SolartemperaturDifferenz 2021-07-30 17:28:48 cmd_event set_cmd_2
setstate SolartemperaturDifferenz 2021-07-30 17:28:48 cmd_nr 2
setstate SolartemperaturDifferenz 2021-07-30 17:23:44 last_cmd cmd_2
setstate SolartemperaturDifferenz 2021-07-30 17:24:43 mode enabled
setstate SolartemperaturDifferenz 2021-07-30 17:28:48 state cmd_2
   

Otto123

#1
Hi,

ich verstehe das attribute checkall nicht komplett, aber es ist in deinem DOIF mit Sicherheit unnötig.
Warum steht ein Punkt vor dem defmod?
Kannst Du bitte ein list SolartemperaturDifferenz und ein list Pool sowie ein list RuecklaufWP posten?

Im übrigen wird das so simpel nicht gut, Du musst eine Hysterese einbauen, sonst "flattert" deine Poolpumpe :)

Du kannst Dich an dem Beispiel "Zweipunktregler a la THRESHOLD" in der DOIF commandref orientieren oder das Modul THRESHOLD nutzen.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

saschaev

Sorry Otto, der Punkt ist w vom Kopieren reingekommen. Ist eigentlich nicht vorhanden.Attribut checkall hab ich irgendwo gelesen und ich es gesetzt habe weil es nicht funktioniert.
Was meinst du mit list machen?

saschaev

Okay hab es rausbekommen was du mit list meinst.
Das DOIF ist auch nur probehalber um zu gucken ob ich es überhaupt hinbekomme.
Sonst hätte ich mir dafür eine Steuerung gekauft, aber Fhem kann ja selbst sowas.


.Internals:
   CFGFN     
   DEF        ([Pool:temperature] < [RuecklaufWP:temperature]) (set Solarpumpe on) DOELSE (set Solarpumpe off)
   FUUID      61030fc4-f33f-9592-a19d-b2d9f044b63764b8
   MODEL      FHEM
   NAME       SolartemperaturDifferenz
   NOTIFYDEV  Pool,global,RuecklaufWP
   NR         1238
   NTFY_ORDER 50-SolartemperaturDifferenz
   STATE      cmd_2
   TYPE       DOIF
   VERSION    20929 2020-01-10 09:44:35
   READINGS:
     2021-07-30 17:28:48   cmd             2
     2021-07-30 17:28:48   cmd_event       set_cmd_2
     2021-07-30 17:28:48   cmd_nr          2
     2021-07-30 17:23:44   last_cmd        cmd_2
     2021-07-30 17:24:43   mode            enabled
     2021-07-30 17:28:48   state           cmd_2
   Regex:
     accu:
     cond:
       Pool:
         0:
           temperature ^Pool$:^temperature:
       RuecklaufWP:
         0:
           temperature ^RuecklaufWP$:^temperature:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'Pool','temperature') < ::ReadingValDoIf($hash,'RuecklaufWP','temperature')
   do:
     0:
       0          set Solarpumpe on
     1:
       0          set Solarpumpe off
   helper:
     DEVFILTER  ^global$|^Pool$|^RuecklaufWP$
     NOTIFYDEV  global|Pool|RuecklaufWP
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   
     timerevent
     timerevents
     timereventsState
     triggerDev
   readings:
     all         Pool:temperature RuecklaufWP:temperature
   uiState:
   uiTable:
Attributes:
   checkall   event
   room       Pool   



Internals:
   CHANGED   
   DEF        28-0120189f37ee
   FUUID      60bd0d48-f33f-9592-c435-72b79987cdc24a4f
   NAME       Pool
   NR         17
   NTFY_ORDER 50-Pool
   STATE      T: 26.5
   TYPE       GPIO4
   READINGS:
     2021-07-31 12:07:59   Temperatur      26.5
     2021-06-21 08:28:33   failures        0
     2021-07-31 12:07:59   state           T: 26.5
     2021-07-31 12:07:59   temperature     26.5
   fhem:
     interfaces temperature
Attributes:
   event-min-interval 3000
   event-on-change-reading Temperatur
   icon       temp_temperature
   userReadings Temperatur { int ( 10 * ReadingsVal("Pool","temperature",0) + 0.5 ) / 10 }

.
Internals:
   CHANGED   
   DEF        28-012019028380
   FUUID      60bd1223-f33f-9592-c9bd-039691beb199aa87
   NAME       RuecklaufWP
   NR         19
   NTFY_ORDER 50-RuecklaufWP
   STATE      T: 26.687
   TYPE       GPIO4
   READINGS:
     2021-07-31 12:10:03   Temperatur      26.7
     2021-06-21 08:28:34   failures        0
     2021-07-31 12:10:03   state           T: 26.687
     2021-07-31 12:10:03   temperature     26.687
   fhem:
     interfaces temperature
Attributes:
   event-min-interval 3000
   event-on-change-reading Temperatur
   icon       temp_temperature
   userReadings Temperatur { int ( 10 * ReadingsVal("RuecklaufWP","temperature",0) + 0.5 ) / 10 }   

Otto123

#4
Wenn Du mich fragst, hast Du erfolgreich die Events für temperature in beiden Devices ausgeknipst. Damit weiß Dein DOIF nicht was so los ist :)
Zitatevent-on-change-reading
Dieses Attribut enthält eine durch Kommata getrennte Liste von "readings". Wenn gesetzt, erzeugen nur Veränderungen der gelisteten "readings" ein Ereignis. Wenn die aktualiserten Werte der gelisteten "readings" identisch sind, wird kein Ereignis generiert.
Du solltest also entweder temperature im DOIF durch Temperatur ersetzen - oder temperature mit in event-on-change-reading aufnehmen.

Tipp: userReadings immer mit trigger definieren!

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

saschaev

Aber wenn ich Set checkall mache dann schaltet es.

Otto123

#6
Weil Du dann der triggernde EVENT bist. Willst Du ja aber bestimmt nicht :)
Zitat... welches ereignis- und zeitgesteuert in Abhängigkeit definierter Bedingungen Anweisungen ausführt.

Ich habe oben noch editiert ...
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

saschaev

Habe mit "Temperatur " ersetzt scheint zu laufen werde jetzt eine Hysterese einsetzen.
Vielen lieben Dank für deine Hilfe.
Ich merke doch immer wieder das ich noch blutiger Anfänger bin.
Versuche es aber zu ändern.

Helmi55

Servus
vielleicht hilft dir das weiter:
defmod di_SOLAR DOIF ([08:00-22:00] and [PoolMaster] eq "on" and [du_Poolheizung] eq "Solar" and ([SolarDiff:state]>[Hysterese:state])) (set SolarPumpe on) DOELSE (set SolarPumpe off)
attr di_SOLAR alias di_SOLAR
attr di_SOLAR room Steuerung
attr di_SOLAR wait 0:60


Poolmaster ist ein dummy Hauptschalter bi mir
du_Poolheizung ist auch ein Dummy und schaltet zwischen Solar und WP

In der hysterese gebe ich an bei welcher Diff zu schalten ist

Gruß
Helmut
System1 fhem 6.1 auf RPi 4B mit 4GB, HMUSBConfig, DS9490R-1Wire, Busware USB 868, Pool-Solarsteuerung mit FHEM. System2 fhem 6.1 auf RPi 4B mit 4GB (Bullseye) mit Busware USB 868 und 433 und HMUARTLGW für Haussteuerung

https://www.flickr.com/photos/canonhelmi/

saschaev

Danke Helmut, werde ich mir auch Mal angucken

Christoph Morrison

Zitat von: Otto123 am 31 Juli 2021, 12:45:49
Tipp: userReadings immer mit trigger definieren!

In diesem Falle würde sogar das FHEM-round mal einen sinnvollen Einsatz finden ;-)

Otto123

@Christoph Mir lag es vorhin quasi "auf der Zunge" - ich war bloß nicht sicher: rundet es denn jetzt oder formatiert es nur?
ZitatReadingsNum(<devicename>,<reading>, <defaultvalue>,<round>)
Gibt die erste Zahl aus dem Readingswert zurück. Falls <round> spezifiziert ist, wird sie auf diese Anzahl von Dezimalstellen gerundet.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Christoph Morrison

Zitat von: Otto123 am 31 Juli 2021, 15:41:00
@Christoph Mir lag es vorhin quasi "auf der Zunge" - ich war bloß nicht sicher: rundet es denn jetzt oder formatiert es nur?

Beides, je nachdem wie viele Nachkommastellen man haben will. Wenn die Anzahl der gewollten Nachkommastellen größer ist als die Länge des Dezimalteils der Zahl die "gerundet" werden soll, wird nicht gerundet und mit 0 aufgefüllt.

Siehe meine grandiosen Beispiele im Wiki: https://wiki.fhem.de/wiki/DevelopmentModuleAPI#ReadingsNum