Homematic Script mit eigenen Funktionen

Homematic-, TCL- und Shell-Script, Toolchain, C, etc.

Moderator: Co-Administratoren

Antworten
peter99
Beiträge: 2
Registriert: 08.09.2014, 21:34

Homematic Script mit eigenen Funktionen

Beitrag von peter99 » 08.09.2014, 22:08

Hallo!

Ich bin seit kurzem Besitzer einer CCU2 und möchte eigene Skripte schreiben, um meine Heizungsthermostate zu steuern. Ich habe mich schon ein wenige eingelesen und versuche aktuell eine eigene Funktion mit Parametern zu erstellen. Dazu habe ich unter /usr/local eine Datei angelegt:

Code: Alles auswählen

function ::setCurrentTemperature()
{
   if( system.IsVar("roomName") )
   {
      object t = dom.GetObject( system.GetVar("roomName") + "_H" );
      var address = t.Address();
      WriteLine("F1");
   }
   WriteLine("F2");
}
Diese versuche ich nun aus der WebUI aufzurufen, indem ich dort dieses Script erstellen möchte:

Code: Alles auswählen

system.CacheMode(0);
string roomName = "Kitchen";
WriteLine("C1");
Call ("../../usr/local/scripts/heating.fn::setCurrentTemperature()");
WriteLine("C2");
Dabei bin ich auf mehrere Probleme gestoßen:

Wenn ich das Script oben über das Fenster "Skript testen" ausführe, bekomme ich folgende Ausgaben: C1, F1, F2. Das letzte WriteLine (C2) taucht in der Ausgabe leider nicht auf. Die Funktion wird also ausgeführt, das aufrufende Script wird aber nicht zu Ende ausgeführt.

Daneben kann ich das Script nicht speichern. Ich kann es eingeben und auch die Fehlerprüfung gibt keine Probleme aus. Sobald ich das (WebUI-)Script aber über den OK-Button speichern will, hängt sich irgendein Prozess der CCU2 auf. Nach einem Reboot per SSH sind die Änderungen im Homematic-Script innerhalb des WebUI-Scriptes dann verschwunden, es wurde also nicht mal gespeichert.

Irgendwie bin ich gerade ratlos, woran es liegen könnte. Hat irgendjemand eine Idee?

hobbyquaker
Beiträge: 3978
Registriert: 12.07.2009, 20:01
Hat sich bedankt: 17 Mal
Danksagung erhalten: 176 Mal
Kontaktdaten:

Re: Homematic Script mit eigenen Funktionen

Beitrag von hobbyquaker » 08.09.2014, 22:41

Schließ mal deine Funktionsdefinition mit einem return; ab. Ich weiss nicht ob es das Problem löst, aber mein Bauchgefühl sagt mir das könnte es sein. (Habe selbst nie mit Regascript-Funktionen gearbeitet).
Du solltest dabei allerdings auch immer im Hinterkopf behalten: function :: und Call() sind undokumentierte, offiziell von eQ3 nicht-unterstützte Funktionen. Vielleicht kann man sie benutzen, vielleicht aber auch nicht ;)
Grundsätzlich rate ich allerdings eh (zugegeben etwas polemisch) davon ab Regascripts einzusetzen, aber das ist ein anderes Thema ;-)

peter99
Beiträge: 2
Registriert: 08.09.2014, 21:34

Re: Homematic Script mit eigenen Funktionen

Beitrag von peter99 » 08.09.2014, 22:51

Ich hatte es auch schon mit einem return probiert. Leider ohne Erfolg, die CCU2 hängt sich auch dann auf.

Langsam scheint mir auch, dass mein bisheriger Ansatz mit viel Frickelei verbunden sein wird. Aber alles in einem (duplizierten) Script in der WebUI zu machen, ist irgendwie auch keine so tolle Alternative. Und Tcl-Scripte... Dann vielleicht doch lieber die XML-RPC-API. Mal schauen, vielleich hat ja noch jemand eine Idee.

Irgendwie würde ich langsam gerne mit der eigentlichen Programmierung anfangen...

hobbyquaker
Beiträge: 3978
Registriert: 12.07.2009, 20:01
Hat sich bedankt: 17 Mal
Danksagung erhalten: 176 Mal
Kontaktdaten:

Re: Homematic Script mit eigenen Funktionen

Beitrag von hobbyquaker » 08.09.2014, 23:05

peter99 hat geschrieben:Irgendwie würde ich langsam gerne mit der eigentlichen Programmierung anfangen...
Dann wiederhole ich nochmal meine polemische Aussage: ich rate grundsätzlich vom Einsatz von Regascripts ab.

Schau Dir doch mal OpenHAB, IP-Symcon, CCU.IO oder gleich ioBroker an. Damit kann man sein Smarthome "vernünftig" programmieren. (Was meiner Meinung nach mit Regascripts nicht wirklich möglich ist)

dotwin
Beiträge: 1
Registriert: 25.12.2018, 22:01
Danksagung erhalten: 1 Mal

Re: Homematic Script mit eigenen Funktionen

Beitrag von dotwin » 25.12.2018, 22:08

Auch wenn es inzwischen wahrscheinlich niemanden mehr interessiert...

Ich habe Deinen Versuch nachgestellt und herausgefunden wie es geht.
Es war lediglich der Pfad falsch!

So geht's... :D

Code: Alles auswählen

Call ("../usr/local/scripts/heating.fn::setCurrentTemperature()");

Antworten

Zurück zu „Softwareentwicklung für die HomeMatic CCU“