Auslesen der von Werten auf dem HmIPW-DRI32

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

Antworten
Silverstar24
Beiträge: 2
Registriert: 07.06.2022, 12:55
System: CCU und Access Point
Hat sich bedankt: 3 Mal

Auslesen der von Werten auf dem HmIPW-DRI32

Beitrag von Silverstar24 » 07.06.2022, 13:17

Hallo Zusammen

Seit gut einem Jahr betreibe ich meine Heizungssteurung über die Homematic IP Wired Komponenten und der CCU3. Dabei werden alle Daten in CCU-Historian gespeichert und dem Fensterbauer übergeben. Ich hatte Probleme mit Schimmel IN den Fenstern. Das System hat sich ausbezahlt weil ich so die Temperaturen/Feuchtigkeiten innen und aussen an den Fenster Hersteller übermitteln konnte. Das System hat auch über einen DRI-32 die Fenster und Türzustände geloggt und ich bin eindeutig nicht schuld an dem Problem(Lüften). Der Fensterhersteller hat nun auf Garantie mehrere Fensterflügel ausgetauscht.

Nun zur eigentlichen Frage. Inzwischen habe ich das System mit Bewegungsmeldern (HmIPW-SPI) ergänzt und mir die Push Benachrichtigungen für ein Fenster bei Abwesenheit eingerichtet. Ich möchte aber nun ein erstes Script schreiben welches mir alle Fenster überwacht und mich gegebenenfalls bei Statusänderung informiert.(Alarm) Programmiert habe ich schon C++/C# und diverse Bash und SAS Dinge. Trotzdem bin ich neu auf Homematic Programierung.

Hier werde ich aber beim ersten Schritt schon nicht schlau. Trotz suche und Lesen des eq-3 Dokuments.

1. Wie baue ich eine VAR aus mehrere Teilen zusammen?
2. Wieso funktioniert VAR B nicht in meiner Abfrage dem.GetObject().Value? (Auskommentierte Zeilen)

Code: Alles auswählen

integer loop = 0;
while (loop <= 32)
{
   var a = 'HmIP-RF.00171BE99321D5:' + loop; 
   var b = a + '.STATE';
   WriteLine(b);
   !var y = dom.GetObject(b).Value();
   !WriteLine(y);
   loop = loop + 1;
};
Die Ausgabe scheint mir korrekt zu sein

Code: Alles auswählen

HmIP-RF.00171BE99321D5:0.STATE
HmIP-RF.00171BE99321D5:1.STATE
HmIP-RF.00171BE99321D5:2.STATE
HmIP-RF.00171BE99321D5:3.STATE
HmIP-RF.00171BE99321D5:4.STATE
HmIP-RF.00171BE99321D5:5.STATE
HmIP-RF.00171BE99321D5:6.STATE
HmIP-RF.00171BE99321D5:7.STATE
HmIP-RF.00171BE99321D5:8.STATE
HmIP-RF.00171BE99321D5:9.STATE
HmIP-RF.00171BE99321D5:10.STATE
...
Danke auch schon mal

MichaelN
Beiträge: 9679
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 700 Mal
Danksagung erhalten: 1626 Mal

Re: Auslesen der von Werten auf dem HmIPW-DRI32

Beitrag von MichaelN » 07.06.2022, 17:46

Ich bin mir ziemlich sicher, das das Verketten von String mittels # im eq3 Handbuch beschrieben ist.
Und das eine Variablendefinition in einer Schleife keine gute Idee ist, sollte auch in anderen Sprachen so sein?
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

Tyfys
Beiträge: 551
Registriert: 17.04.2021, 17:12
System: CCU
Hat sich bedankt: 27 Mal
Danksagung erhalten: 125 Mal

Re: Auslesen der von Werten auf dem HmIPW-DRI32

Beitrag von Tyfys » 07.06.2022, 19:20

Silverstar24 hat geschrieben:
07.06.2022, 13:17
2. Wieso funktioniert VAR B nicht in meiner Abfrage dem.GetObject().Value? (Auskommentierte Zeilen)
Die CCUx ist manchmal sehr pingelig.

Du baust dir die Kanalnamen von xxxx.0 bis xxxx.32 zusamenn.
Dann fragst du bei diesen Kanälen den Datenpunkt State ab.
Den gibt es im Kanal 0 (Null) aber nicht, daher bricht dann das Script ab.

Wenn du es ein wenig änderst und eine Prüfung mit aufnimmst sollte es gehen:

Code: Alles auswählen

integer loop = 0;
while (loop <= 32)
{
    var a = 'HmIP-RF.00171BE99321D5:' # loop;
    var b = a # '.STATE';
    var y = dom.GetObject(b);
    if (y)
    {
        WriteLine(b);
        WriteLine(y.Value());
    }
    loop = loop + 1;
};

MichaelN hat geschrieben:
07.06.2022, 17:46
das das Verketten von String mittels # im eq3 Handbuch beschrieben ist.
ein paar Zeilen vorher wird das "+" aber auch für String Konkatenation aufgeführt.

MichaelN hat geschrieben:
07.06.2022, 17:46
Variablendefinition in einer Schleife
Die Variable wird ja nicht definiert, nur der Name.
Gruß
Harry

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: Auslesen der von Werten auf dem HmIPW-DRI32

Beitrag von Black » 07.06.2022, 20:09

Wenn die Enumerationsgrenzen bekannt sind, bietet sich auch folgende Syntax an:

Code: Alles auswählen

string ChrNr;
foreach (ChrNr,system.GenerateEnum(0,31)) {
  object oID =dom.GetObject('HmIP-RF.00171BE99321D5:' # ChrNr # '.STATE');
  if (oID) {
    WriteLine(oID.Name());
    WriteLine(oID.Value());
  }
}
Ansonsten ist es wie von Tyfys auch angemerkt, zum einen guter Stil, zum anderen oft notwendig, nach einen GetObject zum einen abzufangen ob sich ein Objekt greifen liess, zum anderen eventuell zu überprüfen, ob der gegriffene Objekttyp dem Typ entspricht, den man auch haben wollte.

EIn ungültiger Zugriff auf ein Object ergibt als Ergebnis ein null, und die Abfrage if (null) ist boolsch false

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

Silverstar24
Beiträge: 2
Registriert: 07.06.2022, 12:55
System: CCU und Access Point
Hat sich bedankt: 3 Mal

Re: Auslesen der von Werten auf dem HmIPW-DRI32

Beitrag von Silverstar24 » 07.06.2022, 21:06

Danke erst einmal für die Hilfreichen Antworten.
MichaelN hat geschrieben:
07.06.2022, 17:46
Ich bin mir ziemlich sicher, das das Verketten von String mittels # im eq3 Handbuch beschrieben ist.
Das mit den # habe ich versucht jedoch habe ich es nicht zum laufen bekommen.
MichaelN hat geschrieben:
07.06.2022, 17:46
Und das eine Variablendefinition in einer Schleife keine gute Idee ist, sollte auch in anderen Sprachen so sein?
Absolut richtig! So hätte ich es eigentlich auch vor vielen Jahren einmal gelernt. Asche auf mein Haupt.Ich habe nur so lange daran rumgebastelt das es irgendwann alt so ausgesehen hat. :roll:
Black hat geschrieben:
07.06.2022, 20:09
Wenn die Enumerationsgrenzen bekannt sind, bietet sich auch folgende Syntax an:

Code: Alles auswählen

string ChrNr;
foreach (ChrNr,system.GenerateEnum(0,31)) {
  object oID =dom.GetObject('HmIP-RF.00171BE99321D5:' # ChrNr # '.STATE');
  if (oID) {
    WriteLine(oID.Name());
    WriteLine(oID.Value());
  }
}
Ansonsten ist es wie von Tyfys auch angemerkt, zum einen guter Stil, zum anderen oft notwendig, nach einen GetObject zum einen abzufangen ob sich ein Objekt greifen liess, zum anderen eventuell zu überprüfen, ob der gegriffene Objekttyp dem Typ entspricht, den man auch haben wollte.

EIn ungültiger Zugriff auf ein Object ergibt als Ergebnis ein null, und die Abfrage if (null) ist boolsch false

Black

Sehr gut, genau so habe ich mir das eigentlich gewünscht. Schön als object welches sich schön weiterverwenden lässt.

Danke für die Antworten, scheint so als hätte ich gerade viel verstanden. Die Zukunft wird es zeigen. :mrgreen:

Antworten

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