Variable lässt sich nicht löschen....

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

Xel66
Beiträge: 14164
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 585 Mal
Danksagung erhalten: 1500 Mal

Re: Variable lässt sich nicht löschen....

Beitrag von Xel66 » 07.11.2017, 09:30

anli hat geschrieben:Für denjenigen, der das Problem später einmal hat eine Alternative:
Vielen Dank für das Lösen dieser zwei Probleme (1x unlöschbare Variable und 1x geistiges Eigentum), denn ich halte auch die Weitergabe des Originalscripts per PN zumindest für eine Grauzone, auch wenn demjenigen, der das Problem hat, damit geholfen wird. Kann es aber nachvollziehen, denn man will helfen und hat ggf. das Werkzeug.

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

Benutzeravatar
anli
Beiträge: 4326
Registriert: 10.06.2009, 14:01
Wohnort: 20 Min. nördlich von Hannover und bei Bremen
Hat sich bedankt: 1 Mal
Danksagung erhalten: 23 Mal
Kontaktdaten:

Re: Variable lässt sich nicht löschen....

Beitrag von anli » 07.11.2017, 16:09

Xel66 hat geschrieben:denn ich halte auch die Weitergabe des Originalscripts per PN zumindest für eine Grauzone
Ja, das sehe ich auch so. Ich habe mein Skript daher noch um einen Lizenzteil ergänzt :-)
Herzliche Grüße, anli

Alle Angaben ohne Gewähr und Haftung meinerseits. Verwendung der von mir zur Verfügung gestellten Downloads auf eigene Gefahr. Ich bitte um Verständnis, dass ich aus zeitlichen Gründen keine unaufgeforderte Hilfestellung per PN/Mail geben kann. Bitte allgemeine Fragen ins Forum stellen, hier können viele fähige User viel schneller helfen.

Homematic-Manager v2: einfaches Tool zum Erstellen von Direktverknüpfungen und Bearbeiten von Gerätenamen, -parametern etc. für Homematic und HomematicIP (Alternative diesbzgl. zur WebUI)

Einsteiger-Hilfeerweiterter Skript-Parser

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

Re: Variable lässt sich nicht löschen....

Beitrag von alchy » 07.11.2017, 17:23

Ich erhielt den Hinweis von BadenPower, das dein gepostetes Script den ein oder anderen Fallstrick beinhaltet.
  • Zum einen löscht du Objekte in der foreach-schleife direkt aus der Referenz auf .UserSharedObjects, was dazu führt, dass fehlerhafte hintereinanderstehende Objekte nicht gelöscht werden, da die Array-Position ja um 1 verringert wird, aber der Indexzähler schon auf der nächsten Position steht.
  • Zum anderen kann dein Script keine "schlafenden" Geistervariablen ermitteln und entsprechend löschen.
Zumindest den zweiten Teil konnte ich verifizieren, da ich noch eigene Schläfer auf der CCU hatte.

Der geneigte User kann dies mit folgendem Script prüfen, welches ich mit ausdrücklicher Genehmigung hier veröffentlichen darf und vor allem auch soll.

Code: Alles auswählen

!Geistervariablen aller Benutzer ermitteln
! homematic-forum.de by BadenPower
object lUsers = dom.GetObject(ID_USERS);
object lSysVars = dom.GetObject(ID_SYSTEM_VARIABLES);
object lUser;
string lEnum1 = "";
string lEnum2 = "";
object lEnumObj2;
integer lCountWrong = 0;
integer lCountDeleted = 0;
if((lUsers) && (lSysVars))
{
  foreach(lEnum1,lUsers.EnumIDs())
  {
    lUser = lUsers.Get(lEnum1);
    !WriteLine("User-Objekt: " # lEnum1 # "/" # lUser);
    if(lUser)
    {
      foreach(lEnum2,lUser.UserSharedObjects())
      {   
        lEnumObj2 = dom.GetObject(lEnum2);
        !WriteLine("Enum2-Objekt: " # lEnum2 # "/" # lEnumObj2);
        if(lEnumObj2)
        {
          if(    (!lSysVars.Get(lEnum2))
              || (    (lEnumObj2.Type() <> OT_ALARMDP)
                   && (lEnumObj2.Type() <> OT_VARDP)
                 )
            )
          {
            !Geistervariable falscher Typ
            WriteLine("Fehler:");
            WriteLine("Benutzername: " # lUser.Name() # " mit der ID: " # lUser.ID())
            WriteLine("Objekt mit dem Objekttyp " # lEnumObj2.TypeName() # " und der ID " # lEnum2 # " gefunden!");
            WriteLine("Objektname: " # lEnumObj2.Name());
            WriteLine("");
            lCountWrong = lCountWrong + 1;
          }
        }
        else
        {        
          !Geistervariable ID nicht auf der CCU vorhanden
          WriteLine("Fehler:");
          WriteLine("Benutzername: " # lUser.Name() # " mit der ID: " # lUser.ID())
          WriteLine("nicht vorhandenes Objekt mit der ID " # lEnum2 # " gefunden!");
          WriteLine("");
          lCountDeleted = lCountDeleted + 1;          
        }
      }
    }
  }
  if((lCountDeleted == 0) && (lCountWrong == 0))
  {
    WriteLine("Keine Fehler gefunden!");
  }
  else
  {
    WriteLine( (lCountDeleted  + lCountWrong).ToString(0)  # " Fehler gefunden!");
  }
}
WriteLine("Abfrage beendet");
Warum betone ich vor allem soll :?:
BadenPower hat von sich aus Kontakt mit mir aufgenommen und hat mich darauf hingewiesen das der Fehler dort besteht.
Nein, überhaupt nicht um mit dem Finger auf irgend wen zu zeigen :!: Nein, er hat mich auch nicht darum gebeten, hier Propaganda zu betreiben.
Er wollte den Forum Usern helfen. und ich füge noch hinzu: trotz allem
Ich denke, das ist ihm hoch anzurechnen. Vielen Dank @ BadenPower


[EDIT]


Und hier noch als logische Konsequenz das entsprechende Script, welches die Geistervariablen aller User auch löscht.
Ebenso mit Genehmigung und ausdrücklichen Wunsch zur Veröffentlichung von BadenPower, um zu helfen.

viewtopic.php?f=31&t=40217#p398318

Bitte dort weiter schreiben zum Script.




Sollte es in Zukunft nötig sein, an den Scripten Änderungen durchzuführen, kann ich es besser updaten.
BadenPower kann es ja nicht. :oops:

Alchy
Zuletzt geändert von alchy am 13.11.2017, 23:01, insgesamt 3-mal geändert.
Grund: [EDIT] Script entfernt

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.

Benutzeravatar
Homoran
Beiträge: 8613
Registriert: 02.07.2013, 15:29
Wohnort: Köln
Danksagung erhalten: 4 Mal

Re: Variable lässt sich nicht löschen....

Beitrag von Homoran » 07.11.2017, 18:40

alchy hat geschrieben: Vielen Dank @ BadenPower
DANKE!


Gruß
Rainer
Alle meine Hinweise sind auf eigene Gefahr umzusetzen. Immer einen Fachmann zu Rate ziehen!

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: Variable lässt sich nicht löschen....

Beitrag von Black » 07.11.2017, 18:52

Auch von mir ein Thnx und Anerkennung für das Script.
mit Sicherheit wird es in Zukuft dem ein oder anderen ein Neuaufsetzen des Systems ersparen.

greetz, 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

Gluehwurm
Beiträge: 12434
Registriert: 19.03.2014, 00:37
System: in Planung
Hat sich bedankt: 105 Mal
Danksagung erhalten: 380 Mal

Re: Variable lässt sich nicht löschen....

Beitrag von Gluehwurm » 07.11.2017, 21:45

alchy hat geschrieben:Er wollte den Forum Usern helfen. und ich füge noch hinzu: trotz allem
Was muss denn getan werden, um den Schwachsinn hier endlich rückgängig zu machen? Oder läuft das jetzt weiter über alchy, Silke, vielleicht noch andere Verwandte und deren Bekannte und Freunde?

Vielleicht auf Knien bei Hobbyquaker anrutschen, nur, damit er nicht merkt, daß er mind. die gleiche Schuld hat?


Gruß
Bruno

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

Re: Variable lässt sich nicht löschen....

Beitrag von alchy » 07.11.2017, 22:38

Ich habe in >meinen Beitrag< auch das "Geistervariablen löschen" Script eingefügt.
Bitte meine Bitte am Ende des Posts beachten, danke.

Damit ist *IMHO* den Forenusern zukünftig sehr geholfen, da dieses Problem "Geistervariablen"schon sehr lange lösungslos durch das Forum "geisterte" :mrgreen:
bis BadenPower die Lösung präsentierte.

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.

mule
Beiträge: 1169
Registriert: 06.07.2010, 00:24
Hat sich bedankt: 3 Mal
Danksagung erhalten: 35 Mal

Re: Variable lässt sich nicht löschen....

Beitrag von mule » 07.11.2017, 23:51

Interessantes Script. Danke dafür! Ich habe es einmal testweise ausgeführt und es hat 8 "Geistervariablen" gefunden. Da ich nicht einfach irgendwelche Dinge in der Rega löschen wollte, ohne es nachzuvollziehen, habe ich es einmal anhand der Rega verifiziert. Eventuell ist es ja für den ein oder anderen von Interesse:
Bei den gefundenen 8 "Geistervariablen" handelt es sich eigentlich nicht um "Geistervariablen" (zumindest würde ich es so nicht betiteln), sondern um tote Object-Links die ins Leere führen, da das Objekt nicht mehr existiert. Anscheinend hatte (oder hat?) EQ3 da wohl einen netten Bug in der Rega.
Wie man unten sehen kann, sind dem User "Admin" insgesamt 20 verschiedene "oid"s zugeordnet. Hierbei handelt es sich um Verweise auf Systemvariablen die man auf Userebene in der Systemsteuerung dem jeweiligen User zwecks Anzeige der Systemvariablen auf der Startseite zuordnen kann. 8 dieser oids führen bei mir aber mittlerweile ins Leere und werden daher vom Script korrekterweise angemeckert. Somit alles korrekt und die Verweise können gelöscht werden..

Code: Alles auswählen

</obj>
<userlevel>8</userlevel>
<password></password>
<name></name>
<firstname>Admin</firstname>
<title></title>
<desc></desc>
<mail>xxx</mail>
<pop3svr></pop3svr>
<pop3port></pop3port>
<pop3name></pop3name>
<pop3pwd></pop3pwd>
<language></language>
<favorite>65535</favorite>
<helpmode>0</helpmode>
<showlog>1</showlog>
<phone></phone>
<client>0</client>
<usr-sobj>
<count>20</count>
<oid>4417</oid>
<oid>16874</oid>
<oid>20749</oid>
<oid>22235</oid>
<oid>24185</oid>
<oid>23549</oid>
<oid>23184</oid>
<oid>29909</oid>
<oid>31275</oid>
<oid>31408</oid>
<oid>37693</oid>
<oid>38054</oid>
<oid>38139</oid>
<oid>38976</oid>
<oid>38819</oid>
<oid>42831</oid>
<oid>43092</oid>
<oid>45049</oid>
<oid>44066</oid>
<oid>61239</oid>
</usr-sobj>
<easylinkmode>0</easylinkmode>
<pwmd5>xxxxx</pwmd5>
</user>
<oid>1010</oid>
<user>
<obj>
Aktuelle Projekte:
Direkter SMS-Versand und -Empfang über CCU2&Raspberrymatic ohne Cloud:
viewtopic.php?f=31&t=39483

Automower (G2) steuern über Homematic per WLAN:
viewtopic.php?f=31&t=7295

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

Re: Variable lässt sich nicht löschen....

Beitrag von alchy » 08.11.2017, 00:07

Es gibt eben Geistervariablen und Schläfer.
BadenPower hat >> H I E R << mal eine sehr gute Erklärung dafür gepostet.

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.

mule
Beiträge: 1169
Registriert: 06.07.2010, 00:24
Hat sich bedankt: 3 Mal
Danksagung erhalten: 35 Mal

Re: Variable lässt sich nicht löschen....

Beitrag von mule » 08.11.2017, 00:13

Ja, die Erklärung passt genau. Danke für den Link!
Da hat dann aber einer der Entwickler geschlafen, wenn die entsprechenden Object-Links nicht vollständig entfernt werden, wenn das zugehörige Object gelöscht wird. Das sind ja dann Basics im Bereich Object-Handling. Wenn diese Basics schon buggy sind, dann will ich nicht wirklich wissen, was da noch so in der Regadom rumschwirrt.
Weißt Du eventuell, ob dieser Bug mittlerweile behoben wurde?
Aktuelle Projekte:
Direkter SMS-Versand und -Empfang über CCU2&Raspberrymatic ohne Cloud:
viewtopic.php?f=31&t=39483

Automower (G2) steuern über Homematic per WLAN:
viewtopic.php?f=31&t=7295

Antworten

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