CCU Script anlegen von Systemvariablen mit Kanalzuordnung

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

avolkmer
Beiträge: 47
Registriert: 27.12.2017, 15:57

CCU Script anlegen von Systemvariablen mit Kanalzuordnung

Beitrag von avolkmer » 15.02.2018, 23:02

Hallo,

ich würde gerne per Script SystemVariablen anlegen, aber gleich mit einer Kanalzuordnung.
Mit folgendem Code lege ich die Variable an, aber wie kann ich die Variable gleich einem Kanal zuordnen?

Danke!

Code: Alles auswählen

string  svName = "testVarNumber";
object  svObj  = dom.GetObject(svName);
 
if (!svObj){   
    object svObjects = dom.GetObject(ID_SYSTEM_VARIABLES);
 
    svObj = dom.CreateObject(OT_VARDP);
 
    svObjects.Add(svObj.ID());
 
    svObj.Name(svName);   
    svObj.ValueType(ivtFloat);
    svObj.ValueSubType(istGeneric);
     
    svObj.DPInfo("Variable number for test");
    svObj.ValueUnit("°C");
    svObj.ValueMin(-100);
    svObj.ValueMax(100);
    svObj.State(15);
    svObj.Internal(false);
    svObj.Visible(true);
 
    dom.RTUpdate(false);
}
 
WriteLine(svObj.Value().ToString());


mabel
Beiträge: 65
Registriert: 02.07.2015, 17:58
Hat sich bedankt: 2 Mal

Re: CCU Script anlegen von Systemvariablen mit Kanalzuordnung

Beitrag von mabel » 07.08.2020, 02:06

hallo avolkmer

stehe gerade vor dem gleichen Problem. Hast du eine Lösung.
Alternativ kann die Kanalzuweisung auch später erfolgen, aber halt in einem Script.
Bitte auch den Rest der Gemeinde um Hinweise - habe nach tagelangem Suchen alles mögliche gefunden, aber nichts hierzu.
mabel

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

Re: CCU Script anlegen von Systemvariablen mit Kanalzuordnung

Beitrag von Black » 07.08.2020, 06:40

das ganze ist eigentlich nicht so schwer...

zuerst nochmal eine Anmerkung, das dom.RTUpdate (false); , welches wohl von einer Publikation aus dem www stammt, ist unsauber bis unrichtig, die Methode erwartet ein integer, nun ist nun zufälligerweise false bei impliziet Wandlung =0, aber das muss ja nicht für alle Ewigkeiten so auch sein, haben wir ja schon paarmal erlebt sowas.

also dom.RTUpdate (0) ist da korrekter.

zu dem kanal zu ordnen einer Sysvar, das besteht aus 2 Schritten.

Code: Alles auswählen

object oChan= channels.Get ("IchBinDerKanalname");
object oSys=dom.GetObject (ID_SYSTEM_VARIABLES).Get ("IchBInDieSystemvariable");
1. die Sysvar muss dem Kanal zugefügt werden.
das geht mit

Code: Alles auswählen

oChan.DPs().Add (oSys);
2. Die SysVar muss den bezug auf den Kanal bekommen

Code: Alles auswählen

oSys.Channel (oChan.ID() );
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

mabel
Beiträge: 65
Registriert: 02.07.2015, 17:58
Hat sich bedankt: 2 Mal

Re: CCU Script anlegen von Systemvariablen mit Kanalzuordnung

Beitrag von mabel » 07.08.2020, 10:15

Hallo Black
danke für den Tipp, werde ich heute Abend gleich mal testen (mit deinem Editor, danke auch für die schnelle Zusendung des Lizenzschlüssels)

mabel
Beiträge: 65
Registriert: 02.07.2015, 17:58
Hat sich bedankt: 2 Mal

Re: CCU Script anlegen von Systemvariablen mit Kanalzuordnung

Beitrag von mabel » 07.08.2020, 21:18

Hallo Black,
wie gesagt, super Tipp - funktioniert.
Danke noch mal für die 4 Programmzeilen. :D
mabel

66er
Beiträge: 3083
Registriert: 23.08.2015, 11:06
System: CCU
Hat sich bedankt: 116 Mal
Danksagung erhalten: 111 Mal

Re: CCU Script anlegen von Systemvariablen mit Kanalzuordnung

Beitrag von 66er » 09.01.2022, 09:26

Hallo zusammen,

ich muß das Thema nochmal aufgreifen.

Seit längerem nutze ich eben diese 4 Zeilen in verschiedenen Skripten erfolgreich.

Bevor ich meine Skripte publiziere, sind sie mehrfach auf meiner Test-CCU2 (Firmware und CUxD-Version aktuell) erfolgreich getestet.

Hier ein Beispiel:

Code: Alles auswählen

object oChan= channels.Get (""#shtrvk1name#"");
object oSys=dom.GetObject (ID_SYSTEM_VARIABLES).Get (""#shtrvtitmp#"");
oChan.DPs().Add (oSys);
oSys.Channel (oChan.ID() );
Nach Rückmeldung eines Users mit CCU3 , die Zuordnung zum Kanal würde nicht erfolgen, habe ich einen Gegentest auf einer meiner Produktiv CCU3 gemacht. Diese laufen mit Firmware 3.51.6 und CUxD 2.4. Auch hier erfolgt die Zuordnung reibungslos.

Wurde eventuell in neueren Firmwareversionen etwas verändert, was eine Änderung an der Syntax nötig macht?

Der betroffene User gab mir die Möglichkeit, mir das per AnyDesk anzuschauen. Einen Fehler auf seiner CCU3 (CCU3: 3.59.6 CUxD: 2.6) hinsichtlich Einsatz meines Skriptes, welches auch bis auf die Kanalzuordnung bei Ihm auch läuft, doppelte Kanalnamen, SV-Namen und Programmnamen kann ich ausschließen.

Oder hat jemand sonst eine Idee, warum es nicht in allen Konstellationen der Homematic-Welten funktioniert?

Danke für jede Hilfe, jede Anregung.

Schönen Sonntag.
Stefan

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

Re: CCU Script anlegen von Systemvariablen mit Kanalzuordnung

Beitrag von Black » 09.01.2022, 09:32

Und beides (sysvars und channel) gibt es unter dem Namen?

Warum das ""# am Anfang und am Ende?
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

66er
Beiträge: 3083
Registriert: 23.08.2015, 11:06
System: CCU
Hat sich bedankt: 116 Mal
Danksagung erhalten: 111 Mal

Re: CCU Script anlegen von Systemvariablen mit Kanalzuordnung

Beitrag von 66er » 09.01.2022, 10:27

Hallo Black,

ja, beides gibt es.

Der Kanal wird händisch benamt und dieser Namen in einem Setup-Teil des Gesamtskriptes eingetragen. Die Variable wird im Skript erzeugt und anschließend dem Kanal zugewiesen, z.B.:

Code: Alles auswählen

var shtrvtitmp =  shtrvname + "_Temperatur-Ist" ;
!WriteLine(shtrvtitmp) ;

 string sName= ""#shtrvtitmp#"";
if (!dom.GetObject (ID_SYSTEM_VARIABLES).Get (sName)) {
  object svObj = dom.CreateObject(OT_VARDP,sName);
  svObj.DPInfo("autom. angelegt durch Skript TRV");
  svObj.ValueUnit("°C");
  dom.GetObject (ID_SYSTEM_VARIABLES).Add(svObj);
  svObj.ValueType(ivtFloat);
  svObj.ValueSubType(istGeneric);
  svObj.ValueMin(0);
  svObj.ValueMax(35);
  svObj.State (0);
  dom.RTUpdate(0);


object oChan= channels.Get (""#shtrvk1name#"");
object oSys=dom.GetObject (ID_SYSTEM_VARIABLES).Get (""#shtrvtitmp#"");
oChan.DPs().Add (oSys);
oSys.Channel (oChan.ID() );



Daher erklären sich auch die ""# bzw. #""

Wie gesagt läuft es ja auch auf meiner CCU2 und CCU3.

Außer der aktuelleren Versionen beim anderen User habe ich keinen Anhalt.

Vielen Dank für Deine Unterstützung.

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

Re: CCU Script anlegen von Systemvariablen mit Kanalzuordnung

Beitrag von Black » 09.01.2022, 11:12

Ich hab deinen CodeAbschnitt mal kurz in den SDV Editor geladen

klammer.png

Ich denke ja mal, dass die Variable "shtrvname" die hier gelb markiert ist und die der Editor als nicht deklariert anmeckert, weiter oben definiert ist.
Auffallend ist aber:
er meckert eine fehlende Klammer zu an ? das wäre auch logisch passend, die gehört meiner Meinung nach hinter das dom.RTUpdate(0);
check das mal.

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

66er
Beiträge: 3083
Registriert: 23.08.2015, 11:06
System: CCU
Hat sich bedankt: 116 Mal
Danksagung erhalten: 111 Mal

Re: CCU Script anlegen von Systemvariablen mit Kanalzuordnung

Beitrag von 66er » 09.01.2022, 11:18

Gecheckt.

Die Klammer habe ich hinter der Kanalzuweisung. Der SDV prüft das Gesamtskript als "Test Skript erfolgreich".

Sorry, dass ich die nicht mit kopiert hatte.

Antworten

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