Heizungs-Wochenprofile setzen (Gerätetypunabhängig und auch über Aufzählungen wie Gewerke Räume)

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

Benutzeravatar
Black
Beiträge: 5463
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 418 Mal
Danksagung erhalten: 1069 Mal
Kontaktdaten:

Heizungs-Wochenprofile setzen (Gerätetypunabhängig und auch über Aufzählungen wie Gewerke Räume)

Beitrag von Black » 26.01.2020, 13:24

Auf unserem Letzten Stammtisch stellte ich für einen unserer Mitgleider eine Lösung vor, mit einfachen Mitteln nur auf der CCU geräteunabhäng Heizprofile umschalten zu können

Aufgabenstellung war, durch einen trigger (wie z.b.direktTaste, tastendruck in einer Externen Visu) ein oder auch mehrere Heizelemente bzw auch gruppen in ihrem Wochenprogramm zu ändern. Das ganze sollte auch möglich sein, wenn logisch zusammenhängende Elemente in einer gruppe, gewerk, favorit angegeben sind, die Teilnehmer dieser Aufzählung funkhygenisch sauber auf das neue Wochenprogramm zu stellen, egal, ob es eine Gruppe ein classic oder ein IP Element ist.

Definitionsbereich:
Die folgende Lösung von mir läuft unter folgenden Voraussetungen:
1.Das system ist eine raspberrymatic - Grund: Benutzung von Statedelay.
Alternativ wäre es möglich dies auch auf meine TCL Timerpipe umzuschreiben, definitv baucht es aber dann den equalThan patch.
2. Wenn gewerke, Räume oder favoriten als namen angegeben werden muss dies unter dom eindeutig sein. gibt es einen gleichlautenden Raum und gewerk, ist die Funktion Glücksache.

Wenn 1 +2 Erfüllt sind:
dann
Schritt 1: Anlegen einer Systemvariablen typ Stirng, bei mir heisst diese:
CMD_SubProcHeatProfile
Sysvar.JPG
Schritt 2:
Anlegen eines Programmes, welches beim Ändern deisr Systemvariablen ein Script auslöst:
PRG.JPG
Schritt 3:
in diesem prramm ein Script schreiben and er stelle wo Script steht unter sonst:

Code: Alles auswählen

!- Aufruf als Unterprogramm in der Systemvariablen neu
!- Erster Wert: Datenpunkt, zweiter Wert: das Value
!- Trennzeichen ein ;
!- Achtung: Läuft wegen StateDelay nur auf einer Raspberrymatik
!- by Black in 2020
object osrc= dom.GetObject ("$src$");
object oDev; object oIFace;
string stdErr; string stdOut;
string sEnum;
object oDP;
if (osrc) {
  if (osrc.Type() == OT_VARDP) {
    string cmd= osrc.State ();
    object oDP= dom.GetObject (web.webGetValueFromList (cmd,0));
    string value= web.webGetValueFromList (cmd,1).ToInteger ();
    if (oDP) { !- der erste Wert muss eine gültige Object ID gewesen sein
      if (oDP.Type()== OT_ENUM) {
        !- Es ist eine Aufzählung, dann also verzögert die einelnen Punkte triggern
        integer iDelay=500;
        system.Exec ("logger -t SETHEATPROFILE -p user.debug [Aufzählung Start mit " # oDP.Count ()# " Einträgen]");
        WriteLine (oDP # ", " # oDP.EnumIDs () );
        foreach (sEnum,oDP.EnumIDs () ) {
           WriteLine (sEnum);
           osrc.State ((sEnum # ";" # value.ToString () ), iDelay, false);
           iDelay= iDelay+5000;
        }
      } else {
         if (oDP.Type()== OT_DEVICE) {oDev= oDP; }
         elseif (oDP.Type () == OT_CHANNEL) {oDev= dom.GetObject (oDP.Device () ); }
         if (oDev) {
            oIFace= interfaces.Get (oDev.Interface () );
            if ((oIFace.Name ()== "HmIP-RF") || ((oIFace.Name ()== "VirtualDevices") && (oDev.HssType() == "HmIP-HEATING" )) ) {
               !- Ein IP gerät gefunden
               foreach (sEnum,oDev.Channels().EnumIDs () ) {
                  oDP= dom.GetObject (sEnum).DPByControl ("HEATING_CONTROL_HMIP.ACTIVE_PROFILE"); ;
                  if (oDP) { oDP.State (value); system.Exec ("logger -t SETHEATPROFILE -p user.debug [" # oDev.Name() # " auf Profil " # (value).ToString () #"]");}
               }
            }
            elseif (((oIFace.Name ()== "BidCos-RF") && (oDev.Label()=="HM-TC-IT-WM-W-EU")) || ((oIFace.Name ()== "VirtualDevices") && (oDev.HssType() == "HM-CC-VG-1" )) ) {
               !- Ein Gerät gefunden, das Masterset braucht
               xmlrpc.PutParamset (oDev.Interface (),oDev.Address(),"MASTER","WEEK_PROGRAM_POINTER",(value-1));
               system.Exec ("logger -t SETHEATPROFILE -p user.debug [" # oDev.Name() # " auf Profil " # value.ToString () #"]");
            }
            else  {system.Exec ("logger -t SETHEATPROFILE -p user.debug [ERROR " # oDev.ID () # "  enthält kein gültiges Heizprofil]"); }
         }
      }
    }
  }
}   
Funktionsweise:

Das Script ist rebootfest und auch imun gegen manuelles starten: in den beiden fällen referenziert $src$ einen null-Pointer, was abgefragt wird und zu keiner Funktion führt.

Diese Routine arbeitet quasi als Unterprogramm und wird aufgerufen, indem die unter schritt 1 definierte Systemvariable beschrieben wird:
Syntax dom.GetObject (ID_SYSTEM_VARIABLES).Get ("CMD_SubProcHeatProfile").State ("%ID;%WEEKPRG");
%ID: entweder die ISEID eines gerätes, Channels das ein heizprogramm hat oder die IseID eines gewerkes, Favortien, Raumes. Der Name ist auch zulässig:
%WEEKPRG: Wochenprogramm, so wie es in der WebUI verwendet wird, also 1,2 oder 3

ACHTUNG: GAAAANZ WICHITG: als trenner zwischen %ID und %WEEKPRG ein Symikolon ; <<-- sonst Scriptruntimeerror

damit sind beispielsweise folgende aufrufe sinnig:
Heizung sei ein gewerk mit 3 Geräten:
dom.GetObject (ID_SYSTEM_VARIABLES).Get ("CMD_SubProcHeatProfile").State ("Heizung;1");

Im Log sieht man, das das script Das Gewerk aufgelöst hat und dann zeitlich nacheinander die einzelnen Geräte setzt, hier bei mir ein classic WT, ein IP-HT und eine IP gruppe.

LOG.JPG

@NimmNenKeks, Systemprotokoll ist übrigens die neue Funktion, über die wir am Stammtisch diskutiert hatten, als wir uns durch original syslog gewühlt haben. nun geht bequemes, konfigurierbares Fitern ^^

Vielleicht hat einer ja auch einen ähnlich gelagerten Anwendungsfall und kann so etwas gebrauchen.

Schönes Wochenende, Black

Edit: Grund Typo im Schreibtext von ID_SYSTEM_VARIABLES
Zuletzt geändert von Black am 25.09.2022, 21:51, insgesamt 2-mal geändert.
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

PHundhausen
Beiträge: 102
Registriert: 20.02.2019, 10:42
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 37 Mal
Danksagung erhalten: 4 Mal

Re: Heizungs-Wochenprofile setzen (Gerätetypunabhängig und auch über Aufzählungen wie Gewerke Räume)

Beitrag von PHundhausen » 27.01.2020, 13:00

Hallo,

ich war leider beim Treffen nicht dabei und bin mir über weitere Hintergrundinfos dazu nicht im klaren.

Ich habe eine ähnliche Aufgabenstellung auf meiner CCU2 ohne Fremdmittel wie folgt gelöst:

1) Eine Variable "Gast anwesend" angelegt
2) Ein Programm erstellt, daß auf die Änderung der Variable reagiert

Wird "Gast anwesend" auf "Ja" gesetzt, wird das Heizprofil auf automatisch, Profil 1 gesetzt

Wird "Gast anwesend" auf "Nein" gesetzt, wird das Heizprofil auf manuell, 18° gesetzt

Geändert werden die Werte der Heizgruppe, die notwendige Verteilung macht die Heizgruppe intern selber

Umgeschaltet wird einfach durch Umänderung des Variablen-Inhalts, dieses kann man ja auch über eine beliebige Taste manuell steuern.
------------------------------------------
Stand 27.01.2024:

Home (RaspberryMatic auf RP4 mit HB-RF-ETH): 1203 Kanäle in 202 Geräten und 16 CUxD-Kanäle in 1 CUxD-Geräten
Office (RaspberryMatic auf CCU3): 359 Kanäle in 51 Geräten und 16 CUxD-Kanäle in 1 CUxD-Geräten:
------------------------------------------

Benutzeravatar
Black
Beiträge: 5463
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 418 Mal
Danksagung erhalten: 1069 Mal
Kontaktdaten:

Re: Heizungs-Wochenprofile setzen (Gerätetypunabhängig und auch über Aufzählungen wie Gewerke Räume)

Beitrag von Black » 28.01.2020, 12:16

Nun, es kommt da auf die Aufgabenstellung an. Dies ist eine Lösung wenn gemischte Gruppen vorhanden sind und vorranging nach Schichtplan, bzw Normalbetrieb / Ferien bzw Feiertag gefahren wird.

Black
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

dtp
Beiträge: 10655
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 320 Mal
Danksagung erhalten: 501 Mal

Re: Heizungs-Wochenprofile setzen (Gerätetypunabhängig und auch über Aufzählungen wie Gewerke Räume)

Beitrag von dtp » 05.01.2021, 10:13

Danke für das Skript @Black.

Werde ich mir mal an meine Bedürfnisse anpassen, denn ich genau danach hatte ich hier gesucht. :wink:

Vielleicht stehe ich auch etwas auf dem Schlauch, aber es soll ja die Möglichkeit geben, die Wochenprogramme einer HMIP-Heizungsgruppe auch direkt per WebUI-Programm ändern zu können. Dort finde ich aber nur den Punkt Profil mit deutlich mehr Integerwerten.
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

kokel
Beiträge: 7
Registriert: 24.11.2021, 15:47
System: sonstige
Hat sich bedankt: 2 Mal

Re: Heizungs-Wochenprofile setzen (Gerätetypunabhängig und auch über Aufzählungen wie Gewerke Räume)

Beitrag von kokel » 25.09.2022, 17:39

Hi @Black,

vielen Dank für das Script. Das ist genau das wonach ich suche. Leider bekomme ich es nicht zum laufen.
Ich betreibe eine CCU3 mit Raspberrymatic (Version 3.65.8.20220831).

Ich habe Heizungsgruppen für alle Räume, in denen in der Regel je ein Heizungsthermostat, Wandthermostat und ein Fensterkontakt drin ist.
Im Gewerk "Heizung" ist alles drin, neben den Gruppen zusätzlich nochmal die einzelnen Thermostate, Kontakte, etc. Habe HM-Bidcos und HMIP "gemischt".

Ist es ein Problem, wenn im Gewerk neben den Heizungsgruppen die Thermostate nochmal zusätzlich drin sind, wird das dann doppelt gesetzt?
Black hat geschrieben:
26.01.2020, 13:24
damit sind beispielsweise folgende aufrufe sinnig:
Heizung sei ein gewerk mit 3 Geräten:
dom.GetObject (ID_SYSTEMVARIABLES).Get ("CMD_SubProcHeatProfile").State ("Heizung;1");
Muss ich nun z.B. "Heizung;1" in die Variable schreiben oder "dom.GetObject (ID_SYSTEMVARIABLES).Get ("CMD_SubProcHeatProfile").State ("Heizung;1");"?

Bei mir tut sich auf jeden Fall nichts, wenn die Variable befülle. Oder muss das Script noch irgendwie anders getriggert werden?

Leider kann ich SDV nicht nutzen, weil es nur unter Windows läuft, wenn ich das richtig verstanden habe. Hier bei mir habe ich nur Linux im Einsatz.

Bin für jede Hilfe dankbar.

Danke und Grüße, Kokel
hmscript01.png
hmscript02.png
hmscript02.png (16.5 KiB) 776 mal betrachtet
hmscript03.png

Benutzeravatar
Black
Beiträge: 5463
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 418 Mal
Danksagung erhalten: 1069 Mal
Kontaktdaten:

Re: Heizungs-Wochenprofile setzen (Gerätetypunabhängig und auch über Aufzählungen wie Gewerke Räume)

Beitrag von Black » 25.09.2022, 20:12

Ist der Name "Heizung" eindeutig in deinem System ?

wenn nicht, kann es sein, das die Rega irgendein (das mti der kleinsten ID) Objekt greift welches den Namen Heizung hat.

Das Script müsste ins Systemprotokoll schreiben.

Der SDV ist nur unter WIndows programmiert. Unter Linux ist das Thread Handling intern komplett anders (ein paar "spezielle" Unis existieren auch nur für WIndows) so dass ich das portieren auf Linux erstmal auf den jüngsten Tag verschoben habe

Black
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

Tyfys
Beiträge: 531
Registriert: 17.04.2021, 17:12
System: CCU
Hat sich bedankt: 26 Mal
Danksagung erhalten: 121 Mal

Re: Heizungs-Wochenprofile setzen (Gerätetypunabhängig und auch über Aufzählungen wie Gewerke Räume)

Beitrag von Tyfys » 25.09.2022, 21:04

Mir ist nur aufgefallen :


muss dieses Statement: ( falls es überhaupt benutzt wird)

Code: Alles auswählen

dom.GetObject (ID_SYSTEMVARIABLES).Get ("CMD_SubProcHeatProfile").State ("Heizung;1");"
nicht so sein:

Code: Alles auswählen

dom.GetObject (ID_SYSTEM_VARIABLES).Get ("CMD_SubProcHeatProfile").State ("Heizung;1");"
also mit Unterstrich zwischen SYSTEM und VARIABLES ??
Gruß
Harry

Benutzeravatar
Black
Beiträge: 5463
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 418 Mal
Danksagung erhalten: 1069 Mal
Kontaktdaten:

Re: Heizungs-Wochenprofile setzen (Gerätetypunabhängig und auch über Aufzählungen wie Gewerke Räume)

Beitrag von Black » 25.09.2022, 21:19

Yup, Typo im freien Schreibtext. Ist im 1 Thread berichtigt

Thnx, Black
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

Tyfys
Beiträge: 531
Registriert: 17.04.2021, 17:12
System: CCU
Hat sich bedankt: 26 Mal
Danksagung erhalten: 121 Mal

Re: Heizungs-Wochenprofile setzen (Gerätetypunabhängig und auch über Aufzählungen wie Gewerke Räume)

Beitrag von Tyfys » 25.09.2022, 21:25

de rien

aber
Black hat geschrieben:
26.01.2020, 13:24
Diese Routine arbeitet quasi als Unterprogramm und wird aufgerufen, indem die unter schritt 1 definierte Systemvariable beschrieben wird:
Syntax dom.GetObject (ID_SYSTEMVARIABLES).Get ("CMD_SubProcHeatProfile").State ("%ID;%WEEKPRG");
da hast es auch noch übersehen.
Gruß
Harry

Benutzeravatar
Black
Beiträge: 5463
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 418 Mal
Danksagung erhalten: 1069 Mal
Kontaktdaten:

Re: Heizungs-Wochenprofile setzen (Gerätetypunabhängig und auch über Aufzählungen wie Gewerke Räume)

Beitrag von Black » 25.09.2022, 22:07

Tyfys hat geschrieben:
25.09.2022, 21:25
da hast es auch noch übersehen.
done
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

Antworten

Zurück zu „HomeMatic Zentrale (CCU / CCU2 / CCU3 / Charly)“