Heizpläne / Temperaturlisten für Thermostate statusabhängig versenden

Begonnen von musicnrw, 01 April 2020, 17:32:30

Vorheriges Thema - Nächstes Thema

musicnrw

Hallo,
ich habe folgende Idee:
Ich habe in FHEM derzeit 3 Anwesenheitsstati definiert, die ich manuell setze: Arbeitstag, FreierTag, NichtZuhause. Die Umschaltung erfolgt über das Widget "Homestatus" https://wiki.fhem.de/wiki/FTUI_Widget_Homestatus; den Status lege ich in einem Dummy "Anwesenheit" ab.
Nun möchte ich, dass meine Heizkörperthermostate (HM-CC-RT-DN) bei einem Statuswechsel mit den entsprechenden Heizplänen programmiert werden. Die entsprechend anzuwendenden Temperaturlisten habe ich in drei einzelnen Dateien abgelegt: Arbeitstag.cfg, FreierTag.cfg, NichtZuhause.cfg. (entsprechend dem Beitag aus dem Wiki https://wiki.fhem.de/wiki/HM-CC-RT-DN_Funk-Heizk%C3%B6rperthermostat#Temperaturlisten.

Wie schaffe ich es, dass bei dem Wechsel des Homestatus, also bei einer Veränderung des Dummies "Anwesenheit", der jeweils entsprechende Heizplan zu den Thermostaten gesendet wird?

Vielen Dank für Eure Hilfe!
Gruß,
Thomas

Jamo

Ich nehme mal an, Du hast nicht nur den Heizkörperthermostat, sondern auch den Raumthermostat HM-TC-IT-WM-W-EU.
Dann lädst zuerst die 3 Profile in deinen HM-TC-IT-WM-W-EU Raumthermostat. Dann kannst Du zwischen den 3 Profilen mit dem Register R-weekPrgSel umstellen: set $device regSet weekPrgSel prog1/prog2/prog3
Ich würde abraten, die Profile immer neu zu laden/versenden, das dauert lange, verursacht zu viel Funktraffic und Du musst immer verifizieren, ob das Profil für alle Tage in Gänze geladen ist.
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

musicnrw

Hallo Jamo,
nein, ich habe keinen Raumthermostat HM-TC-IT-WM-W-EU im Einsatz, nur an den Heizkörpern jeweils die Thermostate.

Gruß,
Thomas

Beta-User

...war das nicht so, dass man dann an dem Thermostat erst umstellen mußte, welche Datei er ranziehen soll (oder die Priorität ändern...? Habe leider grade keine cfg-Auszüge zur Hand und ich mache das (im Moment noch, s.u.) so, dass ich eine Liste habe und dann via notify eine Zuweisung pro Thermostat mache, die eben auf das passende Wochenprofil innerhalb dieser einen Datei verweist).

Neben dem obigen leicht anderen Ansatz hier vielleicht noch ein weiterer, ziemlich anderer Ansatz: Schau dir mal das Modul "weekprofile" an. Dessen Ergebnisse können zwar (afaik) nicht hminfo-konform geprüft werden, aber dafür hat es zwei andere Vorteile:
- Wenn du alles in einem weekprofile-Device abbildest und Topics nutzt, mußt du nur an diesem einen Device das Topic ändern, und es werden alle "Clients" (=HM-(HT/WT-) Thermostate, aber ggf. auch andere Typen...) "beliefert", und zwar so, dass jeweils
- nur der Funkverkehr stattfindet, der wegen der Änderung auch zwingend ist.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

musicnrw

Ich komme da noch nicht wirklich weiter.
Um es vom Ansatz her mal zu testen, habe ich mir in der TabletUI 3 Push-Buttons definiert. Jeder steht für ein Heizplan quasi stellvertretend für den Anwesenheitsstatus).
Dem Button ist folgender Code zugeordnet:
<div data-type="push"
  data-device="dummy1"
  data-fhem-cmd="attr hm configTempFile Arbeitstag.cfg,UrlaubIn.cfg,UrlaubOut.cfg;set hm tempListG restore">
</div>

(Das stammt was die Funktionalität angeht aus dem WIKI: https://wiki.fhem.de/wiki/HomeMatic_HMInfo_TempList/Weekplan)

Und es funktioniert: Wenn ich einen der Button drücke, wird die dem Button zugeordnete Konfiguration der Heizpläne an die Thermostate übertragen.

Nun scheitere ich aber immer noch daran, das Ganze über eine Wenn-Dann-Logik in Abhängigkeit der Anwesenheitszustände, die ich über das Homestatus-Widget definiere, vorzunehmen.
Ich hatte folgendes versucht:
define Heizung_steuern DOIF ([HomeStatus:state] eq "home_home" (data-fhem-cmd="attr hm configTempFile UrlaubIn.cfg,Arbeitstag.cfg,UrlaubOut.cfg;set hm tempListG restore") DOELSEIF ([HomeStatus:state] eq "home_work" (data-fhem-cmd="attr hm configTempFile Arbeitstag.cfg,UrlaubIn.cfg,UrlaubOut.cfg;set hm tempListG restore") DOELSEIF ([HomeStatus:state] eq "away" (data-fhem-cmd="attr hm configTempFile UrlaubOut.cfg,Arbeitstag.cfg,UrlaubIn.cfg;set hm tempListG restore")

Es gibt immer Fehlermeldungen zu diesem DOIF in der Form "missing right brackets".
Wie kann ich die Befehlszeile aus dem Versuch mit den Bush-Buttons
data-fhem-cmd="attr hm configTempFile Arbeitstag.cfg,UrlaubIn.cfg,UrlaubOut.cfg;set hm tempListG restore">
entsprechend in einem DOIF einsetzen?

Gruß,
Thomas



Beta-User

Zu DOIF kann ich nix sagen, aber es ist doch eigentlich glasklar, dass die beiden eigentlichen FHEM-Kommandos diese hier sind:
attr hm configTempFile Arbeitstag.cfg,UrlaubIn.cfg,UrlaubOut.cfg
set hm tempListG restore
Du änderst also durch den Eventhandler einen Attributwert (=> rotes Fragezeichen), und damit die Reihenfolge, in der gesucht wird...

Nun habe ich mal mein notify rausgesucht (macht aber nur Urlaub iSv. alle länger weg):
define Heizung_Ferienmodus notify BW_Ferientag  { Value("BW_Ferientag") ? \
fhem "set Thermostat_Wohnzimmer_.*_Clima tempListTmpl restore FHEM/9999_tempList_edit.cfg:Wohnzimmer_Ferien,\
set Thermostat_Esszimmer_.*_Clima tempListTmpl restore FHEM/9999_tempList_edit.cfg:Esszimmer_Ferien,\
set Thermostat_Buero_Clima tempListTmpl restore FHEM/9999_tempList_edit.cfg:Buero_Ferien,\
set Thermostat_EssZi_Climate regSet weekPrgSel prog2"\
: fhem "set Thermostat_Wohnzimmer_.*_Clima tempListTmpl restore FHEM/9999_tempList_edit.cfg:Wohnzimmer,\
set Thermostat_Esszimmer_.*_Clima tempListTmpl restore FHEM/9999_tempList_edit.cfg:Esszimmer,\
set Thermostat_Buero_Clima tempListTmpl restore FHEM/9999_tempList_edit.cfg:Buero,\
set Thermostat_EssZi_Climate regSet weekPrgSel prog1" }
Ist im Prinzip eine einfache if - else -Perl-Logik (etwas unübersichtlich notiert, bitte ggf. nach Anpassung an deine Bedürfnisse darauf achten, ob du im RAW-Editor die Zeilenumbrüche brauchst oder bei Bearbeitung der DEF eben nicht...).

Hier noch eines für ein Gästezimmer, das ist vermutlich einfacher zu lesen:
define Heizung_Chillraum_Gast notify Gaeste_im_Chillraum:(absent|home) { if ($EVENT eq "home") {\
fhem ("set Thermostat_Chillraum_Clima tempListTmpl restore ./FHEM/9999_tempList_edit.cfg:Chillraum_Gast") \
} else {\
fhem ("set Thermostat_Chillraum_Clima tempListTmpl restore ./FHEM/9999_tempList_edit.cfg:Chillraum") \
} }


Nochmal zur Erinnerung: alle Profile sind in einer File, und dort gibt es dann eben jeweils mehrere Varianten für einen Heizkörper, je nach Bedarf. Da das ohne Attribut auskommt, gibt es keine roten Fragezeichen.

Aber wie gesagt: Ich denke, das kommt bei Gelegenheit weg und wird durch eine reine weekprofile (Topic-) Lösung ersetzt werden. Ist m.E. smarter, ich hatte das damals nur schlicht übersehen/nicht gekannt...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

amenomade

Die beste Lösung ist wie Beta-User schrieb, ein "set" zu benutzen, statt permanent die Attribute zu ändern, was ein "save" dann benötigt.

Aber wegen DOIF: Doku lesen und Syntax einhalten!

define Heizung_steuern DOIF ([HomeStatus:state] eq "home_home") ((attr hm configTempFile UrlaubIn.cfg,Arbeitstag.cfg,UrlaubOut.cfg), set hm tempListG restore) DOELSEIF ([HomeStatus:state] eq "home_work") ((attr hm configTempFile Arbeitstag.cfg,UrlaubIn.cfg,UrlaubOut.cfg), set hm tempListG restore) DOELSEIF ([HomeStatus:state] eq "away") ((attr hm configTempFile UrlaubOut.cfg,Arbeitstag.cfg,UrlaubIn.cfg), set hm tempListG restore")
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

kadettilac89

kennst du das Modul weekprofile? Schau dir das mal an, da kannst du die Pofilie im Browser anlegen, es werden nur Änderungen an das Thermostat gesendet, es gibt einen set Befehl mit dem du "set <profilename> send to device <Thermostat>" senden kannst. Sobald du die Profile hast ist das Setzen pro Devise ein Einzeiler (naja, wenige Zeilen).

Ich nutze kein FTUI aber ich denke du kannst mit einem Button dann ein set absetzen und gut ist.

Ich habe mir über alle Thermostate eine structure gelegt und kann dann mit einem einzigen Befehl auf Urlaub, Homeoffice, ... was halt als Profil definiert ist ... setzen.

Vielleicht eine Überlegung wert wenn du noch am Anfang bist und die Profile erst anlegen willst.

https://forum.fhem.de/index.php/topic,46117.0.html


Beta-User

Danke für die Bestätigung. weekprofile hatte ich ja auch schon genannt, und neben dem Einzeiler pro Heizkörper-Thermostat geht es damit noch einfacher, wenn man das TOPIC-feature da nutzt.
Stellt man ein neues Topic ein, wird das an alle "bekannten" Thermostate verteilt. MMn. ein super Konzept...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

kadettilac89

Nutze weekprofile seit "immer". Hatte Probleme mit den Files und dem Senden an die Thermostate. Ist für mich eines der wichtigsten Module.

Zweimal vorgeschlagen schaden nicht :) Der Fragende ist am Anfang des Setup dann macht es Sinn. Und in deinem langen Text geht die Information leicht unter wenn man sich auf die gepostete Configuration versteift. Ehrlich gesagt habe ich deinen Hinweis überlesen da ich mir nur die Codebeispiele angesehen hatte ...