HM Skript 1x global ablegen statt dutzendfach in verschiedenen Programmen?

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

Antworten
Wookbert
Beiträge: 224
Registriert: 10.05.2013, 18:40
Hat sich bedankt: 3 Mal
Danksagung erhalten: 1 Mal

HM Skript 1x global ablegen statt dutzendfach in verschiedenen Programmen?

Beitrag von Wookbert » 16.02.2020, 08:57

Ich habe ein HM Skript (ca. 40 Zeilen/2.500 Zeichen), welches ich — bis auf zwei Eingangsvariablen — unverändert dutzendfach in verschiedenen Programm verwende.

Jetzt ist mir die Idee gekommen, ob es nicht vielleicht möglich wäre, den unveränderten Teil irgendwie global auf der RaspberryMatic abzulegen (z.B. als Systemvariable, Typ Zeichenkette), und dann im jeweiligen Programm das Skript aufzurufen (bei Systemvariable z.B. per dom.GetObject(Systemvariable).Value()).

Das hätte den riesigen Vorteil, daß man bei Änderungen am Skript, nur an einer Stelle das eine Skript ändern muss, statt Dutzendfach das geänderte Skript in den diversen Programmen einfügen und abspeichern zu müssen.

Geht sowas? Gibt es da Anleitungen / zuverlässig erprobte Methoden?

Idee wäre darüberhinaus, das Skript per Programm in die Systemvariable zu schieben (um einen Neustart der RaspberryMatic „überstehen“ zu können).

Meine bisherigen Versuche sind gescheitert:
  • Systemvariable (Typ Werteliste) akzeptiert nichts in der Länge bzw. stolpert über die Formatierung samt Semikolons und wirft — bei kürzeren Segmenten — die Formatierung über den Haufen
  • Systemvariable (Typ Zeichenkette) kriege ich per Programm nicht gefüttert: Das Systemzustand-Textfeld im Programm spuckt sich bei der Länge des Skripttextes selbst auf die Füße. Und wenn ich es per Skript und dom.GetObject(Systemvariable).State("Hier mein 40-zeiliges Skript") versuche, stolpere ich über die Formatierung.
Danke vorab!

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

Re: HM Skript 1x global ablegen statt dutzendfach in verschiedenen Programmen?

Beitrag von Black » 16.02.2020, 09:53

es gibt mehrere Ansätze...

einen text als Programm in einer sysvar zu halten halte ich für suboptimal.. Zum einen wie du schon sagstest die Formatierungen, zum anderen musst du diesen text auch zum ausführen kriegen. Klar, das geht, Stichwort synthetische programme, selber die benötigten Objects anlegen und in der Singledestination dann das Script aus der Sysvar hinterlegen und dann das Synthetische Programm ausführen. Kann man machen, muss man aber nicht.

Zweite möglichkeit ist via include und call, aber auch das ist eher nichts für Anfänger und kann Fehleranfällig sein. (Stichwort Caching)

Dritte Möglichkeit, die ich gerne Verwende ist ein Programm, das durch eine Systemvariable typ string getriggert wird, und in dieser systemvariable die parameter für dieses quasi Unterprogramm drinstehen. So arbeitet u.A. auch meine Rollosteuerung für das Haus.

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

Benutzeravatar
stan23
Beiträge: 2042
Registriert: 13.12.2016, 21:14
System: Alternative CCU (auf Basis OCCU)
Wohnort: Altmühltal
Hat sich bedankt: 586 Mal
Danksagung erhalten: 337 Mal
Kontaktdaten:

Re: HM Skript 1x global ablegen statt dutzendfach in verschiedenen Programmen?

Beitrag von stan23 » 16.02.2020, 10:59

dtp macht es mit seinem zentralen Push-Nachrichten-Programm (zPNP) so:

Code: Alles auswählen

! +++++ zPNP ausführen +++++
(dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushText)).State(message);
(dom.GetObject(ID_PROGRAMS).Get(zPNP)).ProgramExecute();
Ob es einen Unterschied in der Ausführung der Skripte gibt, ob man auf die Änderung der SysVar triggert oder ein Programm per ProgramExecute aufruft, kann ich dir nicht beantworten. Interessieren würde es mich aber :)
Viele Grüße
Marco

RaspberryMatic als VM auf einem NUC mit Proxmox und USB-Funkmodul
~80 Geräte (HM, HmIP, HMW, HBW, AskSin)

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

Re: HM Skript 1x global ablegen statt dutzendfach in verschiedenen Programmen?

Beitrag von Black » 16.02.2020, 19:34

yap, das entspricht Part 3, nur ohne trigger und mit execute. Das mit dem triggern war früher ein Bug (jens hat es letztes jahr auf der RMatik gefixt, ob es auf einer CCU3 bzw CCU2 auch gefixt ist weiss ich nicht (falscher Conditiontype () bei Stringvergleich, aus dem Grunde kein Triggern)

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

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

Re: HM Skript 1x global ablegen statt dutzendfach in verschiedenen Programmen?

Beitrag von Black » 16.02.2020, 19:36

yap, das entspricht Part 3, nur ohne trigger und mit execute. Das mit dem triggern war früher ein Bug (jens hat es letztes jahr auf der RMatik gefixt, ob es auf einer CCU3 bzw CCU2 auch gefixt ist weiss ich nicht (falscher Conditiontype () bei Stringvergleich, aus dem Grunde kein Triggern)

Beiträge ab hier

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

Antworten

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