Systemvariable per Skript über DPInfo löschen
Moderator: Co-Administratoren
-
- 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
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
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.
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.
- 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
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
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
-
- 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
Okay, aber prinzipiell sollte es möglich sein, oder?
Nur so als Motivationsstütze.
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.
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.
- 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
möglich ist vieles ^^.
an welcher DpInfo willst du das denn festmachen ?
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
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
-
- 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
Kleines Beispiel. Mittels des nachfolgenden Skripts wird die folgende optionale Systemvariable erzeugt, wenn "svPushImage" mit einem String versehen ist.
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.
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();}
}
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.
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.
- 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
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
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
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
-
- 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
Also über DPInfo() hab ich's schon mal hinbekommen.
Hab mal zwei Testvariablen mit der Beschreibung "TestSV" angelegt.
Mit nachfolgendem Skript werden sie wieder gelöscht.
Das mit den Metadaten habe ich allerdings noch nicht so ganz durchdrungen.
Hab mal zwei Testvariablen mit der Beschreibung "TestSV" angelegt.
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");
}
}
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.
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.
-
- 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
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.
-
- 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
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.
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.
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.