FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Gisbert am 02 Oktober 2021, 12:18:02

Titel: [gelöst] Zeitschaltuhr in Abhängigkeit von Vorgabe realisieren
Beitrag von: Gisbert am 02 Oktober 2021, 12:18:02
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​
Titel: Antw:Zeitschaltuhr in Abhängigkeit von Vorgabe realisieren
Beitrag von: Damian am 02 Oktober 2021, 16:32:08
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");;\
}
Titel: Antw:Zeitschaltuhr in Abhängigkeit von Vorgabe realisieren
Beitrag 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
Titel: Antw:Zeitschaltuhr in Abhängigkeit von Vorgabe realisieren
Beitrag von: Damian am 04 Oktober 2021, 21:01:38
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')")
Titel: Antw:Zeitschaltuhr in Abhängigkeit von Vorgabe realisieren
Beitrag von: Gisbert am 04 Oktober 2021, 21:16:55
Hallo Damian,

cool - und vielen Dank; da hab ich wieder ein bißchen dazu gelernt.

Viele Grüße Gisbert