CCU3-Script - Alle HKT auf Urlaubsmodus

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

yakamoneye21
Beiträge: 8
Registriert: 07.11.2021, 22:08
System: CCU
Hat sich bedankt: 1 Mal

Re: CCU3-Script - Alle HKT auf Urlaubsmodus

Beitrag von yakamoneye21 » 12.11.2021, 19:51

MichaelN hat geschrieben:
12.11.2021, 19:46
Mit dem Trick kann man das Caret nur innerhalb eines string ersetzen, aber nicht um ihn zu begrenzen.

Deshalb der Rat mit dem Hochkomma.
Entschuldige, ich hab deinen Eintrag überlesen. Das hatte ich gestern auch probiert, hat dann leider auch gar nicht mehr funktioniert.

Ich frage mich ja eben, was das Caret für eine Funktion hat, wenn es an das TCL übergeben wird. Es muss ja einen Grund haben, warum man das so macht und nicht direkt andere übliche String-Begrenzer. Habe ich bisher auch keine Erklärung finden können...
Aktuelles System:
CCU3
7x eTRV-2
6x SWDO
2x STH

MichaelN
Beiträge: 9562
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 696 Mal
Danksagung erhalten: 1608 Mal

Re: CCU3-Script - Alle HKT auf Urlaubsmodus

Beitrag von MichaelN » 12.11.2021, 20:02

Das Caret ist der super delimiter. Damit kannst du auch " und ' einschließen ohne sie zu maskieren.
Warum das hier eingesetzt wird müsste Black oder Baxxy beantworten.

Ich würde einfach die CCU patchen, dann muss man sich nicht mehr ärgern. Oder den SDV benutzen.
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

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

Re: CCU3-Script - Alle HKT auf Urlaubsmodus

Beitrag von Tyfys » 12.11.2021, 20:09

MichaelN hat geschrieben:
12.11.2021, 19:46
Mit dem Trick kann man das Caret nur innerhalb eines string ersetzen, aber nicht um ihn zu begrenzen.

Deshalb der Rat mit dem Hochkomma.
Du hast natürlich recht.

Ich hab mir Baxxys Skript leider nicht ordentlich durchgelesen.
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: CCU3-Script - Alle HKT auf Urlaubsmodus

Beitrag von Black » 12.11.2021, 21:14

MichaelN hat geschrieben:
12.11.2021, 20:02
....
Warum das hier eingesetzt wird müsste Black oder Baxxy beantworten.
Ich würde einfach die CCU patchen, dann muss man sich nicht mehr ärgern. Oder den SDV benutzen.
der SDV, den Baxxy benutzt hatte, um die Syntaxrahmen des scriptes automatisch zu erstellen, muss den Balanceakt machen, Code für 2 verschiedene RegaVersionen (den der CCU, der die "Braking Changes" nicht hat und deren escaping eigentlich buggy ist und den der Raspberrymatik, der das escaping richtig umsetzt., zu erzeugen. EIne Allgemeingültige Form ist diese Codesyntax.

Das Problem, das die CCU mit dem EIngeben dieses Codes hat, ist allerdings CCU eigen. Bei Verwendung des SDV z.B. gibts dieses Problem nicht, dieser wird das Script natürlich korrekt auch in einer originalen ccu2/ccu3 abspeichern.

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

yakamoneye21
Beiträge: 8
Registriert: 07.11.2021, 22:08
System: CCU
Hat sich bedankt: 1 Mal

Re: CCU3-Script - Alle HKT auf Urlaubsmodus

Beitrag von yakamoneye21 » 13.11.2021, 10:58

MichaelN hat geschrieben:
12.11.2021, 20:02
Ich würde einfach die CCU patchen, dann muss man sich nicht mehr ärgern. Oder den SDV benutzen.
Patchen meint die aktuelle Firmware? War bis vor wenigen Tagen auf dem aktuellsten Stand und habe gerade das Update aufgespielt. Bringt aber nichts. Oder ist mit "patchen" was anderes gemeint?

SDV habe ich mir mal geholt und fuchse mich da mal rein. Danke für die Tipps.
Aktuelles System:
CCU3
7x eTRV-2
6x SWDO
2x STH

Benutzeravatar
Baxxy
Beiträge: 10648
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 597 Mal
Danksagung erhalten: 2180 Mal

Re: CCU3-Script - Alle HKT auf Urlaubsmodus

Beitrag von Baxxy » 13.11.2021, 12:12

yakamoneye21 hat geschrieben:
13.11.2021, 10:58
Oder ist mit "patchen" was anderes gemeint?
Ja. Bei RaspberryMatic fließen alle möglichen Optimierungen als "Patches" ein.
Diese sogenannten Patches lassen sich aber auch auf einer CCU3 anwenden so das dort die Optimierungen auch verfügbar sind.
Ist aber nicht mal einfach so gemacht. Eventuell mal nach "Patcher CCU3 Addon" suchen.

Ich hatte den SDV-Code genommen weil ich nicht in der Lage war/bin die 4 Werte gleichzeitig per putParamset zu übergeben.
Trotz Studium der Dokumentationen komme ich mit der Syntax nicht klar. Bin aber auch kein "Coder". :wink:

Einen einzelnen Wert zu schreiben ist einfach...

Code: Alles auswählen

string sn_ch = "000E9A498E8514:1";
object interface = dom.GetObject("HmIP-RF");
xmlrpc.PutParamset(interface,sn_ch,"VALUES","SET_POINT_TEMPERATURE","22.0");
string readout = xmlrpc.GetParamset(interface,sn_ch,"VALUES");
WriteLine(readout);
Ein "Array" mit 2 oder mehr Werten bekomme ich nicht übergeben. Hab auch nirgends Beispiele dafür gefunden.

Grüße, Baxxy

MichaelN
Beiträge: 9562
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 696 Mal
Danksagung erhalten: 1608 Mal

Re: CCU3-Script - Alle HKT auf Urlaubsmodus

Beitrag von MichaelN » 13.11.2021, 16:02

Baxxy hat geschrieben:
13.11.2021, 12:12
Ist aber nicht mal einfach so gemacht
Der Patch ist relativ einfach, da er nur ein paar Zeilen in einer einzigen Datei betrifft.
https://github.com/jens-maus/RaspberryM ... tUse.patch

Aber ja, man muss schon wissen wie man sich auf der CCU einloggt, eine Datei in einen Editor lädt, ändert und wieder ablegt.
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

Ballo
Beiträge: 39
Registriert: 20.12.2015, 17:27
Danksagung erhalten: 1 Mal

Re: CCU3-Script - Alle HKT auf Urlaubsmodus

Beitrag von Ballo » 01.02.2023, 18:27

Hallo,
CCU3 FW 3.67.10

Ich hatte das gleiche Problem wie im Beitrag viewtopic.php?t=70560.
Bei meinen Experimenten hat sich gezeigt, das es den Datenpunkt 'PARTY_MODE_SUBMIT'
hei HMIP Heizung nicht gibt (schade).
Im SystemLog stand bei Verwendung von 'PARTY_MODE_SUBMIT' folgendes:
Feb 1 17:41:26 CCU3-1 local0.err ReGaHss: ERROR: ScriptRuntimeError: var USER_ID=1004; time t_now=system.Date("%F %X").ToTime(); string S_Off=(t_now+7200).ToString(); !object device = dom.GetObject("Schlafzimmer WTH:1"); object device = dom.GetObject("Schlafzimmer Heizung:1"); !string S_Start=(t_now+60).Format("%Y_%m_%d %H:%M"); string S_Start=(t_now).Format("%Y_%m_%d %H:%M"); string S_Stopp=(t_now+7200).Format("%Y_%m_%d %H:%M"); real r_setpoint=15.0; !string SubmitString = "15.0,"#t_now.ToString()#","#(
_now+7200).ToString(); string SubmitString1 = "15.0,"#t_now.Format("%Y_%m_%d %H:%M")#","#(t_now+7200).Format("%Y_%m_%d %H:%M"); !string SubmitString1 = "15.0,"#t_now.Format("%F %H:%M")#","#(t_now+7200).Format("%F %H:%M"); device.DPByHssDP("PARTY_MODE_SUBMIT").State(SubmitString1); !object O=dom.GetObject("Schlafzimmer Heizung:1").DPByHssDP("PARTY_MODE_SUBMIT"); WriteLine(device.DPByHssDP("SET_POINT_MODE").Value()); !quit; !device.DPByHssDP("PARTY_TIME_START").State(S_Start); !device.DPByHssDP("PARTY_TIME_
ND").State(S_S
Also müssen zur Zeit die entsprechden Datenpunkte einzeln beschrieben werden.

Ich habe das mit folgenden Script für eine HMIP-Heizungsgruppe getestet und es hat Funktioniert.
Die Daten werden an die Heizungsgruppe 'Schlafzimmer Heizung:1' gesendet.
Es dauert bei mir bis zu 2 Minuten bis der Urlaubsmode bei allen Geräten Aktiv ist.
Der Datenpunkt 'PARTY_MODE' wird automatisch zurückgesetzt beim verlassen
der Betriebart 'Urlaubsmodus' durch End-Zeitpunkt oder bei Aktivierung Auto, Manu, (Boost?).

Code: Alles auswählen

! HMIP "PARTY_MODE_SUBMIT" gibt es nicht
time t_now=system.Date("%F %X").ToTime();
string S_Off=(t_now+7200).ToString();
object device = dom.GetObject("Schlafzimmer Heizung:1");
string S_Start=(t_now).Format("%Y_%m_%d %H:%M");
string S_Stopp=(t_now+7200).Format("%Y_%m_%d %H:%M");
real r_setpoint=15.0;
string SubmitString1 = "15.0,"#t_now.Format("%Y_%m_%d %H:%M")#","#(t_now+7200).Format("%Y_%m_%d %H:%M");
!device.DPByHssDP("PARTY_MODE_SUBMIT").State(SubmitString1);
!object O=dom.GetObject("Schlafzimmer Heizung:1").DPByHssDP("PARTY_MODE_SUBMIT");
device.DPByHssDP("PARTY_TIME_START").State(S_Start);
device.DPByHssDP("PARTY_TIME_END").State(S_Stopp);
device.DPByHssDP("PARTY_SET_POINT_TEMPERATURE").State(r_setpoint);
device.DPByHssDP("PARTY_MODE").State(true);
Ich hoffe es hilft dem Einen oder Anderen weiter.

Benutzeravatar
Henke
Beiträge: 1500
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 133 Mal
Danksagung erhalten: 304 Mal

Re: CCU3-Script - Alle HKT auf Urlaubsmodus

Beitrag von Henke » 28.03.2024, 00:05

Ballo hat geschrieben:
01.02.2023, 18:27
device.DPByHssDP("PARTY_MODE").State(true);
Kann eigentlich nicht funktionieren, da dieser Datenpunkt read/event ist und nicht zum Setzen verwendet werden kann.
Experimente mit "SET_POINT_MODE" und "CONTROL_MODE" setzen zwar die Werte für den Urlaubsmodus, aber, zumindest unter RasberryMatic, wird der Urlaubsmodus nicht angezeigt.
Das Setzen des Urlaubsmodus über ein CCU-Programm geht bei mir überhaupt nicht. Da werden andere Daten erwartet und es ist nicht möglich ein Startdatum anzugeben.
Auf der anderen Seite ist es trivial über RPC in NodeRed und daher weiß ich, das Konzept funktioniert einwandfrei.
Der richtige Weg ist die Baxxy Lösung auf Basis von Blacks TCL Export, doch dort haben wird das "^"/Caret Problem.
Aufgrund der Struktur der Daten bei der Parameterübergabe, bin ich auf folgende (kreative?) Lösung gestoßen (ersetze "\"" durch "{" bzw. "}"):

Code: Alles auswählen

string sChannel = "U-Büro WTH-2:1";
string sUrlaubStart = "2024_03_27 14:20";
string sUrlaubEnde = "2024_03_30 19:10";
real rSollTehmperatur = 10.5;

!- PutParamset VALUES-Zuweisung vom SDV V5.03.01B LCL für Gerät: HmIP-WTH-2
string stdErr=""; string stdOut="";
string TCL="";
TCL=TCL#" {SET_POINT_TEMPERATURE {double $SollTemp}}"; !Datentyp Float beachten ! Wertebereich: 4.500000°C ... 30.500000°C
TCL=TCL#" {SET_POINT_MODE {i4 2}}"; !Datentyp Integer beachten ! Wertebereich: 0 ... 3
TCL=TCL#" {PARTY_TIME_START {string {$UlStart}}}"; !Datentyp String beachten ! Keine Anführungszeichen setzen
TCL=TCL#" {PARTY_TIME_END {string {$UlEnd}}}"; !Datentyp String beachten ! Keine Anführungszeichen setzen

TCL = TCL.Replace( "$UlStart", sUrlaubStart );
TCL = TCL.Replace( "$UlEnd", sUrlaubEnde );
TCL = TCL.Replace( "$SollTemp", rSollTehmperatur.ToString(1) );

object oCHANNEL= dom.GetObject (ID_CHANNELS).Get (sChannel);
object oIFace= dom.GetObject (oCHANNEL.Interface () );
string sTCL= "load tclrpc.so; puts [xmlrpc " #oIFace.InterfaceUrl()# "/ putParamset [list string {"#oCHANNEL.Address()#"}] [list string {VALUES}] [list struct {"#TCL#"}]]";
!WriteLine ("/bin/sh -c 'echo \"" # sTCL # "\" '");
system.Exec ("/bin/sh -c 'echo \"" # sTCL # "\" |tclsh'",&stdOut,&stdErr);
!system.Exec ("/bin/sh -c 'echo \"" # sTCL # "\" '",&stdOut,&stdErr);
!WriteLine (stdOut);
WriteLine (stdErr);
NOTAM:
Das sollte eigentlich auch bei anderen TCL Aufrufen so laufen und dürfte das eine oder andere Problem beseitigen.

PS:
Getestet auf RasberryMatic, Kontrolle Standard CCU wäre gut.

PS2:
Was ist SET_POINT_MODE 3 eigentlich?
0 = Auto
1 = Manu
2 = Urlaub
3 = ?

Antworten

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