Seite 2 von 3

Re: CCU3-Script - Alle HKT auf Urlaubsmodus

Verfasst: 09.11.2021, 18:53
von Baxxy
Liest man mal "queer Beet" im Web zum Thema findet man auch keine funktionierende Lösung sondern stößt eher auf die gleichen Probleme.
Die "beste Option" hier was funktionierendes zu bekommen ist m.E. den Funktionsaufruf beim Setzen des Urlaubsmodus über die WebUI zu replizieren.
Gefunden habe ich in der webui.js z.B. folgendes:

Code: Alles auswählen

partyModeDialog = new PartyModeDialog(translateKey("partyModeDialogTitle"), htmlContent, oPartyValues,function(result) {

        var self = event.data.that;
        var iface = self.iface,
          chAddress = self.chAddress;

        if (result == 1) {
          conInfo("SET PARTYMODE");
          var oPartyMode = self.formatPartyMode(this.getPartyModeObject());

          var partyTimeStart =
            oPartyMode.startYear + "_" + oPartyMode.startMonth + "_" + oPartyMode.startDay + " " + oPartyMode.startHour + ":" + oPartyMode.startMin,
          partyTimeEnd =
            oPartyMode.stopYear + "_" + oPartyMode.stopMonth + "_" + oPartyMode.stopDay + " " + oPartyMode.stopHour + ":" + oPartyMode.stopMin;

          homematic("Interface.putParamset",{'interface': iface, 'address' : chAddress, 'paramsetKey' : 'VALUES', 'set':
            [
              {name:'SET_POINT_MODE', type: 'int', value: "2"},
              {name:'SET_POINT_TEMPERATURE', type: 'double', value: oPartyMode.temp},
              {name:'PARTY_TIME_START', type: 'string', value: partyTimeStart},
              {name:'PARTY_TIME_END', type: 'string', value: partyTimeEnd}
            ]
          });
Sieht mir so aus als würden alle 4 Parameter mittels putParamset an das Gerät übergeben.
Also habe ich das mal mit Hilfe von Black's SDV "nachgebaut".
Sieht dann so aus...

Code: Alles auswählen

!- PutParamset Zuweisung vom SDV V4.08.01A LCL für Gerät: HmIP-STHD
string stdErr=""; string stdOut=""; string TCL="";
TCL= TCL # " {SET_POINT_MODE {i4 2}}";
TCL= TCL # " {SET_POINT_TEMPERATURE {double 12.50}}";
TCL= TCL # " {PARTY_TIME_START {2021_11_09 18:00}}";
TCL= TCL # " {PARTY_TIME_END {2021_11_09 19:15}}";
object oCHANNEL= dom.GetObject (ID_CHANNELS).Get ("HmIP-STHD Dev2_514:1 - Bedienung");
object oIFace= dom.GetObject (oCHANNEL.Interface () );
string sTCL= ^puts [xmlrpc ^ #oIFace.InterfaceUrl()# ^/ putParamset [list string \"^#oCHANNEL.Address()#^\"] [list string \"VALUES\"] [list struct \"^#TCL#^\"]]^;
system.Exec ("/bin/sh -c 'echo \"load tclrpc.so; " # sTCL # "\" |tclsh'",&stdOut,&stdErr);
... und scheint tatsächlich zu funktionieren.
STHD_Party_Mode_per_Script.JPG

Re: CCU3-Script - Alle HKT auf Urlaubsmodus

Verfasst: 09.11.2021, 19:07
von Black
Gute Lösung.

das führt zu einem Übertragen "in einem Rutsch" und braucht nicht 4 Einzelübertragungen. Das VALUES hast du auch drin.

Black

Re: CCU3-Script - Alle HKT auf Urlaubsmodus

Verfasst: 09.11.2021, 19:26
von Baxxy
Black hat geschrieben:
09.11.2021, 19:07
Übertragen "in einem Rutsch"
Alles andere hat irgendwie nie korrekt funktioniert.
Black hat geschrieben:
09.11.2021, 19:07
VALUES
Hatte erstmal die "Homematic IP Legacy API (XML-RPC-Schnittstelle)" - Dokumentation durchgearbeitet. Da war das "VALUES" schnell klar. Nur das set Array habe ich nicht hinbekommen. Zum Glück fiel mir dann ein das der SDV sowas ja locker aus dem Ärmel schüttelt. :mrgreen:

Grüße, Baxxy

Re: CCU3-Script - Alle HKT auf Urlaubsmodus

Verfasst: 10.11.2021, 20:45
von yakamoneye21
Baxxy hat geschrieben:
09.11.2021, 18:53
Sieht mir so aus als würden alle 4 Parameter mittels putParamset an das Gerät übergeben.
Also habe ich das mal mit Hilfe von Black's SDV "nachgebaut".
Unglaublich, das funktioniert tatsächlich. Es kommen genau die Werte an, die man einträgt, und nicht das 1999-Kauderwelsch, das kommt, wenn man es nacheinander überträgt...

Vielen vielen Dank, diesen Script-Schnippsel werde ich so in mein Programm übernehmen. Dann kann ich endlich von meiner AIO Creator Fernbedienung aus den Urlaubsmodus setzen.

Re: CCU3-Script - Alle HKT auf Urlaubsmodus

Verfasst: 12.11.2021, 19:06
von yakamoneye21
Ich habe mich zu früh gefreut...

Das Script an sich funktioniert. Aber nur solange, wie ich es im "Test-Fenster" laufen lassen. Möchte ich es jetzt in einem Programm speichern, wurde es einfach nicht übernommen. Ich habe dann Zeile für Zeile rein kopiert und gespeichert. Es stellt sich raus: sobald ich ein "Caret" (neues Wort, gestern gelernt - dieses Zeichen: ^) schreibe, speichert er einfach nicht.

Ich habe jetzt versucht zu verstehen, was genau das Caret in der einen Zeile zu bedeuten hat. Ich würde sagen es ersetzt Hochkommata und fasst einen String zusammen bzw. trennt String von Variablen. Kann mir das vielleicht noch jemand erklären? Müsste ein String nicht immer von Hochkommata begrenzt sein (bin beruflich in anderen Scriptsprachen unterwegs, würde mich aber nicht als "Programmierer" bezeichnen...)?

Ich habe jetzt schon verschiedenes versucht, habe versucht die Zeichen irgendwie zu ersetzten, aber dann reagiert das Script gar nicht mehr. Wie kann ich so ein Script in der CCU in ein Programm einbauen? Irgendwelche Lösungen?

Danke nochmals in die Runde vorab für jeden hilfreichen Vorschlag!

Re: CCU3-Script - Alle HKT auf Urlaubsmodus

Verfasst: 12.11.2021, 19:10
von Black
yakamoneye21 hat geschrieben:
12.11.2021, 19:06
(...)Danke nochmals in die Runde vorab für jeden hilfreichen Vorschlag!
joa, da war was, die original ccu3 hatte da so ein kleines problem mit scripten, die das ^enthalten.

du hast da folgende Lösungsmöglichkeiten:

a:) CCU3 patchen
b:) Raspberrymatic nutzen (hat in aktuellen Versionen das Problem nicht mehr)
c:) einen externen Editor bzw Entwicklungsumgebung nutzen, ein entsprechend guter Editor hat kein Problem damit, sowohl Scripte zum Editieren aus der CCU zu ziehen als auch diese wieder zurückzuschreiben.

Black

Re: CCU3-Script - Alle HKT auf Urlaubsmodus

Verfasst: 12.11.2021, 19:23
von Tyfys
Zu dem Caret Problem hatte ich eine Idee.

Vielleicht probierst du dies mal aus

Re: CCU3-Script - Alle HKT auf Urlaubsmodus

Verfasst: 12.11.2021, 19:32
von MichaelN
Es sollte doch gehen, wenn du das ^ durch ein ' ersetzt.

Re: CCU3-Script - Alle HKT auf Urlaubsmodus

Verfasst: 12.11.2021, 19:38
von yakamoneye21
Tyfys hat geschrieben:
12.11.2021, 19:23
Zu dem Caret Problem hatte ich eine Idee.

Vielleicht probierst du dies mal aus
Danke schonmal für den Link. Das hatte ich gestern Abend schon gefunden, und so umgesetzt: aus

Code: Alles auswählen

string sTCL= ^puts [xmlrpc ^ #oIFace.InterfaceUrl()# ^/ putParamset [list string \"^#oCHANNEL.Address()#^\"] [list string \"VALUES\"] [list struct \"^#TCL#^\"]]^;
habe ich das gemacht:

Code: Alles auswählen

string caret =  dom.GetObject("Caret").Value();
string sTCL= caret#puts [xmlrpc #caret #oIFace.InterfaceUrl()# caret#/ putParamset [list string \"#caret#oCHANNEL.Address()#caret#\"] [list string \"VALUES\"] [list struct \"#caret#TCL#caret#\"]]#caret;
So funktioniert es aber leider nicht, das Script lässt sich zwar jetzt speichern, tut aber nichts mehr.

Re: CCU3-Script - Alle HKT auf Urlaubsmodus

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

Deshalb der Rat mit dem Hochkomma.