Systemvariable per Skript über DPInfo löschen

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

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

Systemvariable per Skript über DPInfo löschen

Beitrag von dtp » 25.02.2020, 10:44

Ich weiß,

der Betreff ist nicht so toll gewählt, aber mir fiel nichts besseres ein. ;)

Nun, worum geht es? Also, ich lasse in einigen Skripten Systemvariablen automatisch mittels "dom.CreateObject(OT_VARDP)" erzeugen. Wesentliche Grundlage dafür ist der Name der Systemvariablen, den ich mit ".Name("<Variablenname>")" übergebe.

Wenn nun jemand diesen Variablennamen nicht setzt, dann wird die Systemvariable auch nicht erzeugt. Wenn aber jemand bereits eine Systemvariable erzeugt hatte, den Namen aber später nicht mehr setzt, weil er die Systemvariable nicht mehr benutzen will, dann soll sie zukünftig automatisch wieder gelöscht werden. Blöd wird das Ganze, wenn der Name zwischenzeitlich mal geändert wurde. Daher dachte ich mir, es wäre besser, das Löschen nicht über den Namen, sondern über die zusätzlich erzeugte Datenpunktinfo ".DPInfo("<Info zum Datenpunkt>")", die immer gleich bleibt, weil der Skriptuser sie nicht ändern sollte, durchzuführen.

Frage: Geht das irgendwie mit dem ".DeleteObject()"-Befehl? Zusätzlich sollte das Objekt auch nur gelöscht werden, wenn es sich um eine Systemvariable handelt.

Kann ich mit "dom.GetObject(ID_SYSTEM_VARIABLES).Get()" irgendwie die ID einer Systemvariablen mit der Info ".DPInfo("<Info zum Datenpunkt>")" ermitteln, um die Systemvariable dann mit ".DeleteObject()" zu löschen?

Sitze leider aktuell nicht an meinem PC, um es ausprobieren zu können. Aber vielleicht kann der eine oder andere mir die Frage auch direkt beantworten. ;)

Bis dann,

Thorsten
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.

Benutzeravatar
Black
Beiträge: 5480
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: Systemvariable per Skript über DPInfo löschen

Beitrag von Black » 25.02.2020, 10:52

direkt in einem gehts nicht, da wirdt du also durchiterieren und vergleichen müssen
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: 10660
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 321 Mal
Danksagung erhalten: 501 Mal

Re: Systemvariable per Skript über DPInfo löschen

Beitrag von dtp » 25.02.2020, 11:19

Okay, aber prinzipiell sollte es möglich sein, oder?

Nur so als Motivationsstütze. ;)
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.

Benutzeravatar
Black
Beiträge: 5480
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: Systemvariable per Skript über DPInfo löschen

Beitrag von Black » 25.02.2020, 11:21

möglich ist vieles ^^.

an welcher DpInfo willst du das denn festmachen ?
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: 10660
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 321 Mal
Danksagung erhalten: 501 Mal

Re: Systemvariable per Skript über DPInfo löschen

Beitrag von dtp » 25.02.2020, 12:55

Kleines Beispiel. Mittels des nachfolgenden Skripts wird die folgende optionale Systemvariable erzeugt, wenn "svPushImage" mit einem String versehen ist.

Code: Alles auswählen

string svPushImage = ""; ! Link auf ein anzufügendes Bild (z.B. "CCU SV Push Bild"), Voreinstellung: ""

string image = "";
object svObject; object svObjectList;

if(svPushImage){
  svObject = dom.GetObject(ID_SYSTEM_VARIABLES).Get(svPushImage);
  if(!svObject){
    svObjectList = dom.GetObject(ID_SYSTEM_VARIABLES); svObject = dom.CreateObject(OT_VARDP); svObjectList.Add(svObject.ID()); 
    svObject.Name(svPushImage); svObject.DPInfo("Link für ein zu sendendes Bild"); svObject.Internal(false); svObject.Visible(true); 
    svObject.ValueType(ivtString); svObject.ValueSubType(istChar8859); svObject.ValueUnit(""); dom.RTUpdate(true);
  }
  else{image = svObject.Value();}
}
Den Namen der Systemvariablen kann der User selbst wählen. Lässt er ihn leer, wird keine entsprechende Systemvariable angelegt. Unter "svObject.DPInfo()" wird eine Beschreibung vergeben, die eindeutig für die Systemvariable und für etwaige weitere Systemvariablen gleichen Inhalts ist.

Wenn der User jetzt nachträglich "svPushImage" auf "" setzt, dann sollen alle angelegten Systemvariablen mit dieser Beschreibung beim nächsten Aufruf des Skripts gelöscht werden.
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.

Benutzeravatar
Black
Beiträge: 5480
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: Systemvariable per Skript über DPInfo löschen

Beitrag von Black » 25.02.2020, 17:41

Ok... dafür ist das gedacht....

Ich würde mir da an deiner Stellen einen Eintrag in den Metadaten machen...z.b. isPushImage. Da ist die Chance, dass der normale ccu Nutzer das verändert mit ccu webui boardmitteln Mitteln gleich 0.

Zum löschen iteriertst du über die id_system_variables und die mit dem metadateneintrag tillst du.
Die Metadaten selber siehst du ja mit dem sdv.

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: 10660
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 321 Mal
Danksagung erhalten: 501 Mal

Re: Systemvariable per Skript über DPInfo löschen

Beitrag von dtp » 26.02.2020, 08:06

Also über DPInfo() hab ich's schon mal hinbekommen.

Hab mal zwei Testvariablen mit der Beschreibung "TestSV" angelegt.
2020-02-26_08h03_20.png
2020-02-26_08h03_20.png (9.29 KiB) 1304 mal betrachtet
Mit nachfolgendem Skript werden sie wieder gelöscht.

Code: Alles auswählen

string svName;
object svObject;

foreach(svName, dom.GetObject(ID_SYSTEM_VARIABLES).EnumUsedNames()){
  svObject = dom.GetObject(ID_SYSTEM_VARIABLES).Get(svName);
  if(svObject.DPInfo() == "TestSV"){
    dom.DeleteObject(svObject);
    WriteLine("Systemvariable \""#svName#"\" gelöscht");
  }
}
2020-02-26_08h03_55.png
2020-02-26_08h03_55.png (13.49 KiB) 1304 mal betrachtet
Das mit den Metadaten habe ich allerdings noch nicht so ganz durchdrungen. :roll:
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.

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: Systemvariable per Skript über DPInfo löschen

Beitrag von alchy » 26.02.2020, 20:04

dtp hat geschrieben:
25.02.2020, 10:44
Daher dachte ich mir, es wäre besser, das Löschen nicht über den Namen, sondern über die zusätzlich erzeugte Datenpunktinfo ".DPInfo("<Info zum Datenpunkt>")", die immer gleich bleibt, weil der Skriptuser sie nicht ändern sollte, durchzuführen.
Die Beschreibung einer Systemvariable kann aber jeder User auch ganz einfach mal anpassen in der Klickibunti.

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

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

Re: Systemvariable per Skript über DPInfo löschen

Beitrag von dtp » 27.02.2020, 07:31

Das stimmt schon, aber letztlich kann der User alles Mögliche an einer CCU "zerschießen". ;)

Wenn im Skript steht, dass man "nach diesem Hinweis keine Änderungen mehr vornehmen soll", es aber trotzdem tut, dann ist man auch selbst Schuld, wenn's nicht so funktioniert, wie es der Ersteller des Skripts vorgesehen hatte. Das Risiko bleibt einfach.

Ich habe das automatische Löschen nun mal in die aktuelle "Testversion" meiner zPNS-xx eingebaut. Was mich im Moment allerdings etwas stört ist, dass da bei jedem Aufruf des Skripts einige zusätzliche foreach-Schleifen über alle Systemvariablen durchlaufen werden. Eigentlich eine unnötige Belastung des Systems ohne großen Nutzen. Vielleicht nehme ich es daher auch wieder raus.

Besser wäre es, wenn ich statt über alle Systemvariablen iterieren zu müssen, direkt die Systemvariablen mit der entsprechenden DPInfo identifizieren könnte.
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.

Antworten

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