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
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
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?
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 }
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
Aber wenn ich Set checkall mache dann schaltet es.
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 ...
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.
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
Danke Helmut, werde ich mir auch Mal angucken
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 ;-)
@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.
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