SDV V3.08.06 Scripterstellung und Objektinspektor / Changer CCU/RM

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

Gerti
Beiträge: 1022
Registriert: 28.01.2016, 18:06

Re: SDV V3.08.01B Scripterstellung und Objektinspektor / Changer CCU/RM

Beitrag von Gerti » 05.05.2019, 08:05

Ausgewertete Programme: 155
Auswertung ConditionsTypes
18 ivtObjectId
19 ivtSystemId
16 ivtInteger
24 ivtCurrentDate
20 ivtString
---------------
Auswertung DestinationTypes
19 ivtSystemId
16 ivtInteger
20 ivtString
18 ivtObjectId
---------------
Die Ausgabe davon bitte posten, danke für deine Mithilfe, Black

finerider
Beiträge: 29
Registriert: 15.06.2011, 11:26

Re: SDV V3.08.01B Scripterstellung und Objektinspektor / Changer CCU/RM

Beitrag von finerider » 05.05.2019, 08:24

Ausgewertete Programme: 50
Auswertung ConditionsTypes
19 ivtSystemId
16 ivtInteger
24 ivtCurrentDate
18 ivtObjectId
20 ivtString
---------------
Auswertung DestinationTypes
20 ivtString
18 ivtObjectId
19 ivtSystemId
16 ivtInteger
---------------
Viele Grüße

Thilo - aka finerider

System: CCU3 FW 3.45.7 m. ext. Antenne "DualBeam" - Anbindung weniger FS20 über CUxD
Systeminfos: ... - Syslog-Server - SDV_V30805HF2 - Homematic Manager 2.5.0
Addons: XML-API 1.20 - HomeMatic Script Executor v1.8 - WebMatic 2.2.3 - Programme drucken 1.2a HQ WebUI 2.5.7 - E-Mail 1.6.8c - CUx-Daemon 2.2.0

Benutzeravatar
Black
Beiträge: 1485
Registriert: 12.09.2015, 22:31
Wohnort: Wegberg
Kontaktdaten:

Re: SDV V3.08.01B Scripterstellung und Objektinspektor / Changer CCU/RM

Beitrag von Black » 05.05.2019, 09:23

Danke, das Bestätigt das, was ich auch bei mir beobachtet habe, unter welchen Bedingungen ich eine ID-Substitution machen muss. Dann kann ich dass nun in den getter der entsprechenden property packen.

Thnx, Black
Die Wahrheit ist ein Chor aus Wind
Meine Seite, ok noch bisschen im Aufbau

RaspberryMatic 3.45.7.20190507 mit Groundplane Antennenmod (Mein Grundstück ist halt etwas gross)
jede Menge Sensoren und Aktoren, Logamatic 2107 Gateway zum Buderus Kessel
ioBroker unter ProxMox auf NUC als Hauptsteuersystem und Visualisierung
Script Time Scheduler V1.3
SDV 3.08.06 Scripteditor und Objektinspektor

Benutzeravatar
Black
Beiträge: 1485
Registriert: 12.09.2015, 22:31
Wohnort: Wegberg
Kontaktdaten:

Re: SDV V3.08.01B Scripterstellung und Objektinspektor / Changer CCU/RM

Beitrag von Black » 05.05.2019, 20:16

sooo... Dank eines vernünftigen RAD ist auch mal eben schnell eine Testumgebung geschrieben. Das Ergebnis ist nun also das, was ich haben wollte:

Aus dem JSON, dessen Generierung auch einige hier mit überprüft haben, danke dafür nochmal , macht dieses kleine testprogramm, was nur als schnelltest für die Classes dient, ein HMScript, welches wieder ein Programm erzeugt, das dem entspricht, aus dem das JSON erzeugt wurde,

Also ein Backup Restore, allerdings als 2-pass aufgebaut. ID´s werden substituiert in Namen / Seriennummern, ebenso wird am Anfang überprüft, ob alle benötigen Kanäle, Devices, Datenpunkte, Systemvariablen auf der CCU vorhanden sind, wo das restore gestartet werden soll.

Bevor ich die Classes nun in den SDV einbaue werd ich vorher noch bisschen testen.

Restore1.jpg

Die reine Laufzeit für
- Parsen des JSON Strings (ca 6000 zeichen) in ein JSON Object
- Erzeugen des Programmcodes Test auf Vorhandensein der Datenpunkte / Variablen inkl Substitution der ID´s im programmtext
- stringQuoting (was ein Kotz)
dauerte auf einer gemütlich Laufenden I5-NUC Windows Maschine: 2.9 ms. (gemessen in einer for 1 to 1000 generierschleife ).Der Compilercode ist also etwas schneller als wenn ich ein Generierscript auf der CCU laufen lassen würde. ^^

so, nu ist aber Schicht, nächste woche gehts weiter

Black
Die Wahrheit ist ein Chor aus Wind
Meine Seite, ok noch bisschen im Aufbau

RaspberryMatic 3.45.7.20190507 mit Groundplane Antennenmod (Mein Grundstück ist halt etwas gross)
jede Menge Sensoren und Aktoren, Logamatic 2107 Gateway zum Buderus Kessel
ioBroker unter ProxMox auf NUC als Hauptsteuersystem und Visualisierung
Script Time Scheduler V1.3
SDV 3.08.06 Scripteditor und Objektinspektor

Bratmaxe
Beiträge: 1348
Registriert: 28.05.2015, 12:48
Wohnort: Willich

Re: SDV V3.08.01B Scripterstellung und Objektinspektor / Changer CCU/RM

Beitrag von Bratmaxe » 06.05.2019, 07:57

Black hat geschrieben:
28.04.2019, 19:01
....Das Backup ist komplett Ise-ID unabhängig, es wird vorher ein Code in dem restore Programm erzeugt, der verifiziert das die benötigten geräte beim einspielen des Backups vorhanden sind (SerNr und HSSType) ebenso die benötigten Systemvariablen (name und ValueType müssen passen). zeitmodule erzeugt der SDV selber.....

Black
Könnte man diese Backupdatei so manipulieren, das nun ein anderes Gerät verwendet wird? Also z.B. Statt HM-LC-Sw2PBU-FM den Selbstbauaktor HB-LC-Sw2PBU-FM? Das würde ja den Austausch eines Aktors zu einem anderen deutlich vereinfachen, da die Tauschfunktion ja nur denselben Typ anbietet, selbst wenn ein anderer Typ fast gleich wäre.
Gruß Carsten

Benutzeravatar
Black
Beiträge: 1485
Registriert: 12.09.2015, 22:31
Wohnort: Wegberg
Kontaktdaten:

Re: SDV V3.08.01B Scripterstellung und Objektinspektor / Changer CCU/RM

Beitrag von Black » 06.05.2019, 09:07

joa, es wird gehen... und zwar über den Umweg des erstellten und abgespeicherten JSONs.

das Format (hat sich gegenüber der ersten version noch etwas geändert) sieht so aus:
JSONdemo.txt
(4.79 KiB) 12-mal heruntergeladen

Das ist im übrigen mein Test und Spieleprogramm. diese Datei wird als optionaler Zusatz zu dem HM Script erzeugt werden können und auch gespeichert werden können. Mit einem JSOn Editor, ich benutze immer diesen Online Editor https://jsoneditoronline.org, kannst du im linken Fenster den JSOn String eingeben und durch klick auf den Pfeil rechts parsen lassen. Für dich zum manuellen Manipulieren interessant ist der Reiter Datapoints, dort ist gelistet ist der Bezug zwischen den verwendetetn IseIDs und den tatsächlichen Systemvariablen, Kanälen, Geräten.
JSON1.jpg
In diesem Beispiel z.B. ein Türkontakt.
Änderungen sollten und dürfen nur im Bereich Datapoints gemacht werden, die ID DARF NICHT geändert werden im JSON, darüber substituiert dann der SDV im pass2 die richtigen Zugriffe für das HMScript.

JSON2.jpg

Damit gehen folgende Manipulationen:
1. ich habe ein Ersatzgerät, gleicher Typ, logischer weise andere Seriennummer, Device und Kanäle haben dann aber gleiche Namen wie das Altgerät.
dann
- Suchen unter Datapoints, bis ich den Datenpunkt dort in dem Array gefunden hab. Dort könnte ich nun wild die Seriennumer tauschen und gut ist.
- Zu dem Datenpunkt gibts aber auch einen Kanal. in dem Bild da drüber. auch hier kontrollieren, hat er den gleichen Namen, gut.
- Aus dem Teil nun wirder durch Pfeil links string generieren. diesen kopieren, abspeichern. im SDV dann JSON import und er generiert daraus ein programm, welches das neue Gerät beinhaltet. (DatenTyp des Datenpunktes müssen natürlich passen, sonst weist er beim restore ab.

2. Ich habe ein HM Drehgriffkontakt und möchte den gerne gegen ein HM-IP Drehgriffkontakt tauschen.
auch hier das gleiche Spiel
suchen der Datenpoints, korrektes Angeben des Namens, (Der HSSTYP mus natürlich auch passen, aus :0.Unreach ein :1. Level zu machen geht zwar ist aber ein garant für Müll.
WICHTIG: das geht auch bei Heizungs, Temperatursensoren etc, dabei aber auf jeden fall kontrollieren, dass der richtige Kanal mitgezogen wird, den dann auch ändern. es geht nicht bei: ich hätte 2 datenpunkte, die in einem Kanal liegen. das neue gerät hätte die beiden Datenpunkte, aber in 2 untershciedlichen Kanälen. auch dies könnte man verbiegen, das wird dann aber so kompliziert, das die Erfolgsaussichten gering sind)

3. Diese Manipulationen sind nicht Anfängertauglich. Es wird zwar sehr vieles abgefangen, trotzdem ist es möglich, ein Programm erzeugen zu lassen, was definitv nur Müll macht. Aus dem Grunde wird JSON Import auf mindestens Level 6 liegen. Man sollte dabei definitiv wissen was man tut

Im übrigen kurze Statusmeldung, die bisher noch in dem Externen Testprogramm verwendete pass2-Class kann ein funktionierendes programm aus einem JSON in der CCU anlegen. Backup Restore funktioniert also schonmal.

Black
Die Wahrheit ist ein Chor aus Wind
Meine Seite, ok noch bisschen im Aufbau

RaspberryMatic 3.45.7.20190507 mit Groundplane Antennenmod (Mein Grundstück ist halt etwas gross)
jede Menge Sensoren und Aktoren, Logamatic 2107 Gateway zum Buderus Kessel
ioBroker unter ProxMox auf NUC als Hauptsteuersystem und Visualisierung
Script Time Scheduler V1.3
SDV 3.08.06 Scripteditor und Objektinspektor

Gerti
Beiträge: 1022
Registriert: 28.01.2016, 18:06

Re: SDV V3.08.01B Scripterstellung und Objektinspektor / Changer CCU/RM

Beitrag von Gerti » 06.05.2019, 09:13

Hi!
Black hat geschrieben:
03.05.2019, 21:44
@gerti
so eine brachial aktion verspricht nix gutes. natürlich kann man bei CreateObject als dritten Parameter die ID mitgeben, wo es angelegt werden soll.
aber das gesamte interne genöle der Devices dann händisch zusammenzubasteln ?
da würde ich eher liste der programme bilden, die das Device verwendet. von denen dann backup herstellen. (wird der SDV bald können).
dann das Device löschen. neu anlegen...
Black
Habe ich heute mal probiert, geht nicht ;-)
Nachdem ich das zuvor abgelernte Device wieder angelernt habe, hat es dieselben IDs bekommen, die es vorher schon hatte :-(

Gruß,
Gerti

Benutzeravatar
Black
Beiträge: 1485
Registriert: 12.09.2015, 22:31
Wohnort: Wegberg
Kontaktdaten:

Re: SDV V3.08.01B Scripterstellung und Objektinspektor / Changer CCU/RM

Beitrag von Black » 06.05.2019, 09:22

Gerti hat geschrieben:
06.05.2019, 09:13
Hi!
Habe ich heute mal probiert, geht nicht ;-)
Nachdem ich das zuvor abgelernte Device wieder angelernt habe, hat es dieselben IDs bekommen, die es vorher schon hatte :-(
Gruß,
Gerti
dann ärger ihn mal:

schreibe dir die IDs von 2 oder 3 Kanälen des Devices auf.

lösche das Device

erzeuge über Script 3 Systemvariablen, die auf genau diesen Adressen liegen
dazu

object oSVs = dom.GetObject (ID_SYSTEM_VARIABLES);
object oID= dom.CreateObject (OT_VARDP,"Blockade1","ID des Kanales, den ich belegen will");
oSVs.Add (oID.ID() );
object oID= dom.CreateObject (OT_VARDP,"Blockade2","ID des Kanales, den ich belegen will");
oSVs.Add (oID.ID() );
object oID= dom.CreateObject (OT_VARDP,"Blockade3","ID des Kanales, den ich belegen will");
oSVs.Add (oID.ID() );

vorher backup machen natürlich, danach mal versuchen gerät neu anzulernen, das sollte nun ja neue Nummern bekommen, da ja die Nummern belegt sind von vorher.

wenn geklappt hat, im SDV die 3 sysvars wieder löschen

wenn nicht, bakcup zurückspielen ^^ :lol:

black
Die Wahrheit ist ein Chor aus Wind
Meine Seite, ok noch bisschen im Aufbau

RaspberryMatic 3.45.7.20190507 mit Groundplane Antennenmod (Mein Grundstück ist halt etwas gross)
jede Menge Sensoren und Aktoren, Logamatic 2107 Gateway zum Buderus Kessel
ioBroker unter ProxMox auf NUC als Hauptsteuersystem und Visualisierung
Script Time Scheduler V1.3
SDV 3.08.06 Scripteditor und Objektinspektor

Gerti
Beiträge: 1022
Registriert: 28.01.2016, 18:06

Re: SDV V3.08.01B Scripterstellung und Objektinspektor / Changer CCU/RM

Beitrag von Gerti » 06.05.2019, 18:10

Hi!

Probiere ich am Wochenende mal aus ;-)

Gruß,
Gerti

Benutzeravatar
Black
Beiträge: 1485
Registriert: 12.09.2015, 22:31
Wohnort: Wegberg
Kontaktdaten:

Re: SDV V3.08.01B Scripterstellung und Objektinspektor / Changer CCU/RM

Beitrag von Black » 07.05.2019, 20:28

Bratmaxe hat geschrieben:
06.05.2019, 07:57

Könnte man diese Backupdatei so manipulieren, das nun ein anderes Gerät verwendet wird? Also z.B. Statt HM-LC-Sw2PBU-FM den Selbstbauaktor HB-LC-Sw2PBU-FM? Das würde ja den Austausch eines Aktors zu einem anderen deutlich vereinfachen, da die Tauschfunktion ja nur denselben Typ anbietet, selbst wenn ein anderer Typ fast gleich wäre.
so ich habe mein Konzept nochmal überdacht auch im Hinblick auf die möglichkeit, in einem vom SDV erstellten Backup Programm händisch und möglichst einfach manipulationen vornehmen zu können (Im Hinblick auf Geräte tauschen, oder Namen von Systemvariablen tauschen) Damit wäre ein WebUi Programm austausch auch zwischen Nutzern möglich.

Es gibt ja mehrere Ansätze:
1. eins zu eins mit festen IDs arbeiten. Für den Programmierer die einfachste Lösung, Praktisch bedeutet das: nicht für Systemumzug zu gebrauchen, da dort auch bei gleichem gerät mit gleicher Seriennummer eine andere ID vergeben worden sein kann (bzw aller höchster wahrscheinlichkeit nach auch ist).

2. mit substitierten , von SDV in den jeweiligen Befehl eingebauten symbolischen Adressen (Syvarname, Kanalname, Datenpunktname)
mittlerer Aufwand für den programmierer, bei händischer Manipulation muss im gazen programm die einträge vertauscht werden.
Hatte ich schon laufen ^^

3. auch hier wieder substituiert, aber vom SDV in den jeweiligen Befehl eingebauten Symbolischen Adressen als aus bezug aus einer Adressliste, die am Anfang vom SDv erzeugt angelegt wurde.
der Programmierer kriegt dabei das kotzen.
Bei einer Manipulaton z.b. müsste bei einem Roladenaktor oder einem Thermostat in der KanalListe nur der symbolische Name geändert werden. Beim zusammensetzen des Programmes greift der SDV immer das richtige Element aus der Liste (aber wehe jemand verändert die Listenreihefolge !!)

Ich neige mittlerweile zu Version 3:

so sähe die ListenVariable der Kanäle aus:

Code: Alles auswählen

string sCHNList= "DI_ATELIER_TUER:1\tHmIP-BSL 001A58A9A2801C:6\tHmIP-BSL 001A58A9A2801C:12";   
Im Programmcode würde dann aus dem reinen JSON eintrag {"ID":1465,"Name":"DI_ATELIER_TUER:1"} zum einen die o.g. sCHNList erzeugt zum anderen bei jedem zugriff, wo der Kanal benögt wird, ein IndexBezug auf diese Liste gesetzt, so dass Zentral nur noch an der einen Stelle geändert werden müsste:

Code: Alles auswählen

oSCND.ConditionChannel (channels.Get ((sCHNList.StrValueByIndex ("\t",0))).ID () );  !- 0. Element aus Channellist [DI_ATELIER_TUER:1]
oSCND.LeftValType(18);
oSCND.LeftVal (channels.Get ((sCHNList.StrValueByIndex ("\t",0))).ID ()).DPByHssDP ("STATE").ID () ); !- 0. Element aus Channellist [DI_ATELIER_TUER:1] 
Die kommendare was wie Substituiert wurde, schreibt der SDV in den programmtext.
Es wird eine eine quell bzw Ziel ID zerrupft, was es ist und demendsprechend dann eine symbolische Adressierung zusammengesetzt

Ganz zu Anfang läuft dann über die Listen noch ein Test auf Vorhanden und richtiger Typ bzw ValueType.

Ist es das was dir so vorstellst ? die Idee ist gar nicht mal so übel..

Black
Die Wahrheit ist ein Chor aus Wind
Meine Seite, ok noch bisschen im Aufbau

RaspberryMatic 3.45.7.20190507 mit Groundplane Antennenmod (Mein Grundstück ist halt etwas gross)
jede Menge Sensoren und Aktoren, Logamatic 2107 Gateway zum Buderus Kessel
ioBroker unter ProxMox auf NUC als Hauptsteuersystem und Visualisierung
Script Time Scheduler V1.3
SDV 3.08.06 Scripteditor und Objektinspektor

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“