[neues feature] WeekdayTimer mit weekprofile steuern

Begonnen von Beta-User, 19 November 2019, 13:26:15

Vorheriges Thema - Nächstes Thema

dlehmann69

Hallo Jungs,

könnt ihr mir einen gedanklichen Anstoss geben. Das mit dem weekprofile und den Topics habe ich verstanden.

Mir fehlt nur noch eine Idee, wie ich mit dem WDT die jeweiligen Profile aktiviere. Das mit den Tagen und Zeiten brauche ich ja nicht mehr, kommt aus dem Profil. Wie aktiviert ihr die jeweiligen Profile zur entsprechenden Zeit mit dem WDT? Habt ihr da mal Beispiele für mich?

Danke schon mal im Voraus.
FHEM 6.0 Development auf Ubuntu 20.04 GIGABYTE GB-BACE mit Intel(R) Celeron(R) CPU N3150
CUL 3.4 FW 1.53 868 MHz für FS20, FHT
CUL 3.4 FW 1.66 868 MHz für HM
configDB; DbLog
FHT80, FS20, HMS, EM1000WZ, FHTTF, HM-LC-Sw1-DR; Lightify; HM-CC-RT-DN; HM-TC-IT-WM-W-EU; HM-SEC-SCO

persching

Hallo dlehmann69,
ich mach das z.B. für Nachtabsenkung so gelöst:

Topic: Nachtabsenkung Name: Alle

define Absenkung_DI DOIF ([Absenkung] eq "true") ({ WDTsetTopic("Nachtabsenkung","Alle") }) DOELSE ({ WDTsetTopic("Arbeitstag","Alle") })

Dazu dann in myUtils:

sub WDTsetTopic($$)
{
my ($myTopic,$myName) = @_;
my (@allWDT) = devspec2array("TYPE=WeekdayTimer");
if ($myName eq "Alle")
{
foreach(@allWDT)
{
fhem("set $_ weekprofile WP_Thermostate:$myTopic:$myName");
}
fhem("set WP_Thermostate restore_topic $myTopic");
}
else
{
my $myWDT = "WDT_".$myName;
fhem("set $myWDT weekprofile WP_Thermostate:$myTopic:$myName");
}
}


WP_Thermostate = weekprofile
Die Namen der WDT sind "WDT_Name" (z.B. Wohnzimmer)

Ruft man { WDTsetTopic("Urlaub","Wohnzimmer") } auf wird das Topic "Urlaub" mit dem Namen "Wohnzimmer" aktiviert, verwendet man als Name "Alle" dann werden alle Weekdaytimer in der Schleife aufgerufen und ein Topic für alle gesetzt.

Vielleicht kannst du etwas in dieser Art auch für dein Umfeld umsetzen.

guhu

Hallo,
das Beispiel mit der Nachtabsenkung verstehe ich nicht. Die Nachtabsenkung hat ja eher was mit bestimmten Zeiten zu tun, die habe ich einfach im Profil drin.

Erstmal vielen Dank für die Arbeit, das ist genau das, was ich brauchen kann.

Bei mir kommt das zum Einsatz bei den Kindern. Diese sind nur sporadisch zu Hause (Studenten). Ich nutze das Modul Homemode, das ich nur wärmstens empfehlen kann, da ich damit fast alle Doifs ablösen konnte.
Die Zimmer der beiden sind immer auf 16°C bei Abwesenheit. Wenn sie da sind, ist das entsprechende Temperaturprofil aktiviert. Das gin bisher nur mit einem Disable des WDT, nun geht es durch umschalten des Profils.

Ich habe also entsprechende Profile "Anwesend" und "Abwesend" (= konstant 16°C).

In Homemode habe ich nun bei den entsprechenden present bzw. absent-Einträgen eingestellt, dass der entsprechende Profil absent bzw. present im WDT mit set wdt weekprofile default:present bzw. default:abesent umgeschaltet werden. Das war es dann!

Was ich noch lösen wollte: wenn jeder aus dem Haus ist, mache ich eine generelle Absenkung um 2°C, wenn jemand da ist, muss das entsprechend wieder umgestellt werden. Das könnte man jetzt mit entsprechenden Profilen machen, aber das ist ja ziemlich mühselig. Hat da jemand eine elegante Lösung für?

FHEM 5.9 auf Synology DS918+ (in Docker), HM-CFG-USB2 mit hmlan, HM-CC-RT-DN, HM-SEC-SC-2, nanoCUL,a-culfw,deCONZ,Brennenstuhl-Steckdosen,-FB
Module:ENIGMA2,SONOS,FRITZBOX,FB_CALLLIST,WDT_TIMER,VCONTROL300,WITHINGS

persching

Zitat von: guhu am 10 Januar 2020, 20:25:55
Hallo,
das Beispiel mit der Nachtabsenkung verstehe ich nicht. Die Nachtabsenkung hat ja eher was mit bestimmten Zeiten zu tun, die habe ich einfach im Profil drin.

Die klassische Nachtabsenkung ist in der Heizungssteuerung hinterlegt. Beispielsweise von 22.30 - 4.30 Uhr. Das ist bei meiner Vissmann Gasheizung aber nur über 7°C Außentemperatur gültig. Fällt die Temperatur darunter wird die Zeit verkürzt. Bei ca. 0°C und weniger ist die Heizung durchgehend an. Temperatur ist dann in den Schlafräumen ist dann 19.5 °C eingestellt und je nachdem fällt die Temperatur auch darunter.
Das Thermostat versucht da natürlich entgegen zu steuern und lernt daraus auch. Was regelmäßig zu übersteuern führt. Die MAX Thermostate sind diesbezüglich bescheiden. Darum wirke ich dem entgegen indem ich die Thermostate auf 17°C absenken, wenn die Gasheizung aus ist.

Vielleicht ein sehr spezielles Problem von mir...

Beta-User

Zitat von: guhu am 10 Januar 2020, 20:25:55
Erstmal vielen Dank für die Arbeit, das ist genau das, was ich brauchen kann.
Danke für die Rückmeldung!
Tut immer wieder gut zu hören, dass das mit der Kombi der beiden Module eine gute Idee war :) .

ZitatWas ich noch lösen wollte: wenn jeder aus dem Haus ist, mache ich eine generelle Absenkung um 2°C, wenn jemand da ist, muss das entsprechend wieder umgestellt werden. Das könnte man jetzt mit entsprechenden Profilen machen, aber das ist ja ziemlich mühselig. Hat da jemand eine elegante Lösung für?
Weiß nicht, ob es elegant ist, aber du könntest im Command Perl verwenden und damit $EVENT ändern (2 abziehen), wenn alle weg sind; ich arbeite zwar (noch) nicht mit Residents, aber es dürfte ja ein Resident-Reading geben, das du abfragen kannst, oder?
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

guhu

FHEM 5.9 auf Synology DS918+ (in Docker), HM-CFG-USB2 mit hmlan, HM-CC-RT-DN, HM-SEC-SC-2, nanoCUL,a-culfw,deCONZ,Brennenstuhl-Steckdosen,-FB
Module:ENIGMA2,SONOS,FRITZBOX,FB_CALLLIST,WDT_TIMER,VCONTROL300,WITHINGS

dlehmann69

Danke schön Mal für die Tipps.

Aber irgendwie stehe ich noch auf dem Schlauch. Heute habe ich wdt definiert mit Angabe von Tag|Zeit|Temperatur. Wie sieht an einem Beispiel die Definition mit weekprofile aus? Prinzipiell könnte man die Profile ja auch ohne wdt aktivieren. Was ist dann der Vorteil von wdt.

Sorry noch Mal aber hier blockiert mein logischer Verstand im Moment.
FHEM 6.0 Development auf Ubuntu 20.04 GIGABYTE GB-BACE mit Intel(R) Celeron(R) CPU N3150
CUL 3.4 FW 1.53 868 MHz für FS20, FHT
CUL 3.4 FW 1.66 868 MHz für HM
configDB; DbLog
FHT80, FS20, HMS, EM1000WZ, FHTTF, HM-LC-Sw1-DR; Lightify; HM-CC-RT-DN; HM-TC-IT-WM-W-EU; HM-SEC-SCO

guhu

Hi,
ich habe im weekprofil weekprf (ohne Topics) verschiedene Profile definiert. Nennen wir sie pr1, pr2, pr3.
Dann habe ich im WDT definiert:

define WDT  HzThrmst8_Clima weekprofile:weekprf:true

wobei HrzThmrst8 ein HM-Thermostat ist. Damit ist dem WDT das weekprofile zugeordnet.

Du kannst dann die verschiedenen Profile durch

set WDT weekprofile weekprf:default:pr1

das spezielle Profil aktivieren. Diesen set-Befehl kannst du zu jeder Zeit, z. B. in einem notify oder doif aufrufen und aktivieren.

default steht da, weil ich ohne topics arbeite.
FHEM 5.9 auf Synology DS918+ (in Docker), HM-CFG-USB2 mit hmlan, HM-CC-RT-DN, HM-SEC-SC-2, nanoCUL,a-culfw,deCONZ,Brennenstuhl-Steckdosen,-FB
Module:ENIGMA2,SONOS,FRITZBOX,FB_CALLLIST,WDT_TIMER,VCONTROL300,WITHINGS

Beta-User

Zitat von: dlehmann69 am 11 Januar 2020, 09:41:57
Prinzipiell könnte man die Profile ja auch ohne wdt aktivieren. Was ist dann der Vorteil von wdt.
Na ja, es gibt Zielgeräte (Thermostate), die keine Profile verwalten können, z.B. eQ-3-Bluetooth oder (manche?) Z-Wave's. Da braucht man eine Zwischenschicht wie eben WDT.
Dann wird das Profil@WDT auch nicht an den Thermostat übertragen, was credits spart (v.a. bei MAX wichtig)  und ggf. auch den EEPROM-Speicher; da hat man dann ggf. v.a., wenn man "kurzfirstiger reagieren will" (PRESENCE) kein schlechtes Gefühl...

Aber wie oft: es gibt viele Wege zum Ziel, mMn. ist das gg. der klassischen WDT-Definition einfacher, weil man pro Thermostat nur einen WDT benötigt. Ob überhaupt ein WDT benötigt wird, muß jeder selbst wissen...
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

Beta-User

#69
Zitat von: moustic999 am 16 Dezember 2019, 12:56:19
as said, WeekdayTimer already supports using the mode directly, so the most missing thing from weekprofile is the fhemweb editor.
FYI: Latest preview of WDT includes an option to map e.g. temperatures to KNX-specific synatax, see
https://forum.fhem.de/index.php/topic,111401.msg1113061.html#msg1113061 for details (the cref is in english, the KNX example was derived from the eventMap in this thread as reference).

Hope this helps as a workaround for use of weekprofile+WDT+KNX devices...
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

Wardancer

Hi,

versuche mich gerade daran zu verstehen, wie ich weekprofiles einsetzen könnte. Gibt es mittlerweile ein Beispiel, was jemand einmal posten könnte? Ein einfaches ohne Profile wäre ja schonmal ein Anfang. Ich stehe gerade auf dem Schlauch was ich jetzt wo, wie eintragen müsste und wie ich die WDT-Device(s?) einstellen müsste damit is klappt.

Danke für jeden Denkanstoß :)

guhu

Hier ein Beispiel für meinen Flur:
defmod HCF WeekdayTimer HzThrmst7_Clima weekprofile:weekprf:true {\
my $offset= ReadingsVal("HControl","offset",0);;\
my $tmp=$EVENT - $offset;;\
if ($tmp < 14) { $tmp=$EVENT;;}\
fhem "set $NAME desired-temp $tmp"\
}\

attr HCF userattr Heating_Control Heating_Control_map structexclude weekprofile
attr HCF alias Flur
attr HCF commandTemplate 1
attr HCF disable 0
attr HCF group Heizplan
attr HCF room Flur,Heizung
attr HCF switchInThePast 1

setstate HCF 20.0
setstate HCF 2021-01-01 08:30:00 currValue 20.0
setstate HCF 2020-10-12 21:51:02 disabled 0
setstate HCF 2021-01-01 08:30:00 nextUpdate 2021-01-01 21:00:00
setstate HCF 2021-01-01 08:30:00 nextValue 16.0
setstate HCF 2021-01-01 08:30:00 state 20.0
setstate HCF 2021-01-01 06:00:00 weekprofiles weekprf:default:FlurHO
FHEM 5.9 auf Synology DS918+ (in Docker), HM-CFG-USB2 mit hmlan, HM-CC-RT-DN, HM-SEC-SC-2, nanoCUL,a-culfw,deCONZ,Brennenstuhl-Steckdosen,-FB
Module:ENIGMA2,SONOS,FRITZBOX,FB_CALLLIST,WDT_TIMER,VCONTROL300,WITHINGS

Wardancer

Danke!

soweit ich das jetzt verstanden habe, braucht man weiterhin ein WDT pro Thermostat ( wegen dem Device, was man schalten möchte ), aber wieviele Weeprofiles gibts denn dann sinnvollerweise? Wie habt ihr das gelöst? Ein Weekprofile pro Thermostat, oder pro Thermostat-Gruppe? macht ihr das über Profile? Und wo kommen jetzt die Topics ins Spiel? Topics wären wohl dann sinnvoll, wenn man noch eine Urlaubsschaltung, oder einen Party-Mode möchte, oder?

guhu

ich habe alles in einem Device, ohne Topics gemacht. KISS
FHEM 5.9 auf Synology DS918+ (in Docker), HM-CFG-USB2 mit hmlan, HM-CC-RT-DN, HM-SEC-SC-2, nanoCUL,a-culfw,deCONZ,Brennenstuhl-Steckdosen,-FB
Module:ENIGMA2,SONOS,FRITZBOX,FB_CALLLIST,WDT_TIMER,VCONTROL300,WITHINGS

Beta-User

#74
Zitat von: guhu am 01 Januar 2021, 22:12:26
ich habe alles in einem Device, ohne Topics gemacht. KISS
Danke mal für die Rückmeldung, dass auch das stressfrei funktioniert.

Gedacht hatte ich das aber MIT Topics, und ich finde, das ist ebenfalls simpel, wenn man's mal verstanden hat...

Mal eine Erweiterung des Code-Beispiels:

1. Verbindung vom weekprofile-Device (weekprf) zum WeekdayTimer herstellen:
attr HCF weekprofile FlurUnter der "entity" "Flur" ist dann (mind. der Heizkörper "HzThrmst7_Clima") bekannt. Das könnten auch mehrere sein.

2. weekprofile-Device (weekprf) für Topic-Nutzung zulassen:
attr weekprf useTopics 1


3. Beispiele für Profile im topic:entity-Format (weekprofiles ist mein weekprofile-Device):
get weekprofiles profile_data default:Flurliefert:

{"Mon":{"temp":["19.0","21.5","20.5","21.0","19.0"],"time":["05:30","08:00","12:30","22:00","24:00"]},"Thu":{"temp":["19.0","21.5","20.5","21.0","19.0"],"time":["05:30","08:00","12:30","22:00","24:00"]},"Fri":{"temp":["19.0","21.5","20.5","21.0","19.0"],"time":["05:30","08:00","12:30","23:00","24:00"]},"Tue":{"time":["05:30","08:00","12:30","22:00","24:00"],"temp":["19.0","21.5","20.5","21.0","19.0"]},"Wed":{"time":["05:30","08:00","12:30","22:00","24:00"],"temp":["19.0","21.5","20.5","21.0","19.0"]},"Sun":{"time":["06:00","22:30","24:00"],"temp":["19.0","22.0","19.0"]},"Sat":{"temp":["19.0","22.0","20.5"],"time":["06:00","22:30","24:00"]}}
get weekprofiles profile_data Ferien:Flur
{"Tue":{"temp":["19.5","22.5","21.0","22.5","20.0"],"time":["06:30","07:30","09:00","22:30","24:00"]},"Wed":{"time":["06:30","07:30","09:00","22:30","24:00"],"temp":["19.5","22.5","21.0","22.5","20.0"]},"Sat":{"time":["06:30","07:30","09:00","22:30","24:00"],"temp":["19.0","20.0","21.0","22.0","20.0"]},"Sun":{"time":["06:30","07:30","09:00","22:30","24:00"],"temp":["19.0","20.0","21.0","22.5","20.0"]},"Thu":{"time":["06:30","07:30","09:00","22:30","24:00"],"temp":["19.5","22.5","21.0","22.5","20.0"]},"Mon":{"temp":["19.5","22.5","21.0","22.5","20.0"],"time":["06:30","07:30","09:00","22:30","24:00"]},"Fri":{"time":["06:30","07:30","09:00","22:30","24:00"],"temp":["19.5","22.5","21.0","22.5","20.0"]}} (Das ist weekprofile-intern nur eine Referenz auf ein anderes Profil).
Du kannst dann ja testweise diese Daten einfach mal nehmen und beide Profile mal als Musterprofile in weekprf anlegen. Das geht mit den obigen JSON schnell und einfach, z.B.:
set weekprofiles profile_data Ferien:Flur {"Tue":{"temp":["19.5","22.5","21.0","22.5","20.0"],"time":["06:30","07:30","09:00","22:30","24:00"]},"Wed":{"time":["06:30","07:30","09:00","22:30","24:00"],"temp":["19.5","22.5","21.0","22.5","20.0"]},"Sat":{"time":["06:30","07:30","09:00","22:30","24:00"],"temp":["19.0","20.0","21.0","22.0","20.0"]},"Sun":{"time":["06:30","07:30","09:00","22:30","24:00"],"temp":["19.0","20.0","21.0","22.5","20.0"]},"Thu":{"time":["06:30","07:30","09:00","22:30","24:00"],"temp":["19.5","22.5","21.0","22.5","20.0"]},"Mon":{"temp":["19.5","22.5","21.0","22.5","20.0"],"time":["06:30","07:30","09:00","22:30","24:00"]},"Fri":{"time":["06:30","07:30","09:00","22:30","24:00"],"temp":["19.5","22.5","21.0","22.5","20.0"]}}

Hier hatte ich dazu auch mal was geschrieben:
Zitat von: Beta-User am 23 Dezember 2020, 10:14:04
In das Eingabefeld (so man das überhaupt direkt nutzen will...!?!) gehören:
set <m2-devicename> weekprofile <weekprofile-devicename> <weekprofile-identifier>
<weekprofile-identifier> ist dabei ein Paar aus <topic>:<entity>.

Rund um diesen Beitrag sollte da etwas mehr dazu zu finden sein, gilt hier 1:1 genauso.

Kurzfassung:
(Mind.) ein weekprofile-Device muss existieren, dort sollte useTopics aktiviert sein.
Dann sollte es da einige Profile geben, wobei eben immer das, was "dasselbe Ziel" hat, unter einer "entity" gruppiert wird.
Im m2-Device sollte diese "entity" dann im Attribut "weekprofile" angegeben sein, damit weekprofile seine "Clients" darüber findet. (Im Moment sollte da der Name des m2-Device drin stehen, das kann man aber ändern). Nach jeder Anpassung des Attributs bitte einmal die DEF des m2-Device anfassen, damit weekprofile seine Clients aktualisiert.

Dann kann man über einen Topic-Wechsel direkt alle Clients ansteuern, weekprofile sendet dann genau den passenden Befehl an die "Schnittstelle" weekprofile-setter am m2-Device.
Ist zwar zu MQTT2_DEVICE, aber die Funktionalität ist hier wie dort identisch...

Es wäre gut, wenn jemand mal eine kleine Muster-Implementierung für's Wiki liefern würde; ich fand das ganze auch relativ komplex, bis das erst mal stand. Jetzt ist es so einfach, wie ich mir das ursprünglich mal gedacht hatte.

An der Stelle mal mein Testcode (!) für den Spirit. Der ist im Hauswirtschaftsraum, der hin und wieder auch zum Wäschetrocknen genutzt wird. Dann soll da geheizt werden, sonst nur ein Grundlevel gehalten, die Umschaltung der Topics macht ein THRESHOLD, der auf die Raumsensor-humidity "hört". Dabei macht es keinen Unterschied, ob da nur der eine WDT diese "entity" repräsentiert, oder ob es mehrere sind (oder auch "echte" HK-Thermostate direkt addressiert werden, was weekprofile ja auch kann), oder ob dann noch weitere Device da sind, die dieselben Topics kennen:get weekprofiles profile_data normal:Abstellkammer
{"Sat":{"time":["08:00","10:00","12:00","13:00","17:00","18:00","24:00"],"temp":["18.0","19.0","18.5","19.0","18.0","18.5","18.0"]},"Sun":{"temp":["18.0","19.0","18.5","19.0","18.0","18.5","18.0"],"time":["08:10","10:10","12:10","13:10","17:10","18:10","24:00"]},"Tue":{"time":["08:00","10:00","12:00","13:00","17:00","18:00","24:00"],"temp":["18.0","19.0","18.5","19.0","18.0","18.5","18.0"]},"Wed":{"time":["08:00","10:00","12:00","13:00","17:00","18:00","24:00"],"temp":["18.0","19.0","18.5","19.0","18.0","18.5","18.0"]},"Fri":{"time":["08:00","10:00","12:00","13:00","17:00","18:00","24:00"],"temp":["18.0","19.0","18.5","19.0","18.0","18.5","18.0"]},"Thu":{"time":["08:00","10:00","12:00","13:00","17:00","18:00","24:00"],"temp":["18.0","19.0","18.5","19.0","18.0","18.5","18.0"]},"Mon":{"time":["08:00","10:00","12:00","13:00","17:00","18:00","24:00"],"temp":["18.0","19.0","18.5","19.0","18.0","18.5","18.0"]}}get weekprofiles profile_data Trocknen:Abstellkammer{"Sat":{"time":["24:00"],"temp":["22.0"]},"Sun":{"temp":["22.0"],"time":["24:00"]},"Wed":{"temp":["22.0"],"time":["24:00"]},"Tue":{"time":["24:00"],"temp":["22.0"]},"Fri":{"time":["24:00"],"temp":["22.0"]},"Mon":{"time":["24:00"],"temp":["22.0"]},"Thu":{"time":["24:00"],"temp":["22.0"]}}defmod thd_Abstellkammer THRESHOLD Raumfuehler_Abstellkammer:humidity:3:60 weekprofiles |set @ restore_topic Trocknen|set @ restore_topic normal|0
attr thd_Abstellkammer desiredActivate 1
attr thd_Abstellkammer state_cmd1_gt on
attr thd_Abstellkammer state_cmd2_lt off


Kurz: man kann mit einem einzigen kurzen Befehl den kompletten Heizmodus eines Gebäudes umstellen, indem man das Topic wechselt. Ich finde das eher KISS als dann jeden WDT oder Thermostaten einzeln anfassen zu müssen ;) .
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