Hallo zusammen,
ich hänge etwas bei obiger Fragestellung.
Vorab, commandref und Wiki habe ich bereits dazu angeschaut, die entsprechenden Links dahin kenne ich demnach.
Mein Anliegen:
Ich möchte eine eigene Steuerung meiner Heizung realisieren und dabei den Zeitschaltuhreingang der Heizung benutzen. Technisch funktioniert das, dazu gibt es keine Fragen.
Die Steuerung kennt damit nur ein und aus. Bei ein legt sie volle Lotte los, bei aus ist Ruhe. Dauernd ein macht keinen Sinn, denn dann läuft sie bei hohen und mittleren Temperaturen in die Taktung.
Was mir vorschwebt, ist ein Reading eines DOIF-Devices, das entsprechend der Außentemperatur (liegt als Reading eines anderen Devices vor), prozentual, oder in Schritten 0%, 10%, 20%, ... 100% den Zeitbereich einer Stunde auf den Wert 1 gesetzt wird, und den Rest der Stunde den Wert 0 hat. Das Setzen eines Readings ist mir klar, mir fehlt im Kern die Bedingung dazu.
Dieses Readings würde ich dann gerne nutzen, um die Heizung zu steuern, dazu habe ich auch keine Fragen.
Viele Grüße Gisbert
defmod anteil DOIF { [:00];;\
my $beginTemp=-10;; ##entspricht 100 %\
my $endTemp=15;; ##entspricht 0 %\
my $curTemp=[?outsensor:temperature];;\
my $m=-100/($endTemp-$beginTemp);;\
my $n=100-$m*$beginTemp;;\
my $prop=$m*$curTemp+$n;;\
my $duration=3600*$prop/100;;\
set_State(1);;\
set_Exec("timer",$duration,"set_State 0");;\
}
Hallo Damian,
dein Lösung funktioniert wunderbar zur Festlegung des Zeitintervalls.
Ich möchte das Ergebnis des state an ein MQTT_DEVICE senden, welches dann den Wert published.
Im FHEM-Modus würde das das so im Ausführungsteil funktionieren:
set <MQTT_DEVICE> <Reading> <value>
Es funktioniert ganz sicher, wenn <value> einen Wert hat, also null oder 1, allerdings bin ich mir nicht sicher, ob <value> auch mit ReadingsVal, also so ReadingsVal($name,'state','') funktioniert.
Zusätzlich möchte/kann ich nicht das Reading state zum MQTT_DEVICE senden, da dort state bereits für was anderes verwendet wird.
Gibt es dafür auch eine Lösung, d.h. Setzen eines Readings inkl. Event bei einem anderen Device?
Viele Grüße Gisbert
Zitat von: Gisbert am 04 Oktober 2021, 20:46:56
Hallo Damian,
dein Lösung funktioniert wunderbar zur Festlegung des Zeitintervalls.
Ich möchte das Ergebnis des state an ein MQTT_DEVICE senden, welches dann den Wert published.
Im FHEM-Modus würde das das so im Ausführungsteil funktionieren:
set <MQTT_DEVICE> <Reading> <value>
Es funktioniert ganz sicher, wenn <value> einen Wert hat, also null oder 1, allerdings bin ich mir nicht sicher, ob <value> auch mit ReadingsVal, also so ReadingsVal($name,'state','') funktioniert.
Zusätzlich möchte/kann ich nicht das Reading state zum MQTT_DEVICE senden, da dort state bereits für was anderes verwendet wird.
Gibt es dafür auch eine Lösung, d.h. Setzen eines Readings inkl. Event bei einem anderen Device?
Viele Grüße Gisbert
Das kannst du ganz einfach, wie in Perl üblich, machen:
statt
set_State (1);
fhem("set my_mqtt_device my_reading 1");
und
statt
set_Exec("timer",$duration,"set_State 0")
set_Exec("timer",$duration,"fhem('set my_mqtt_device my_reading 0')")
Hallo Damian,
cool - und vielen Dank; da hab ich wieder ein bißchen dazu gelernt.
Viele Grüße Gisbert