Hier gehts zum Shop.

SHRDZM auslesen mittels Homematic-Script

Forumsregeln
In diesem Forum gilt die BNBR – Be Nice, Be Respectful Policy.
Beleidigungen, Diskriminierung, überhebliche Kommentare oder Ähnliches werden nicht geduldet.
Antworten
christianm
Reactions:
Beiträge: 3
Registriert: 2. Feb 2023 08:00

SHRDZM auslesen mittels Homematic-Script

Beitrag von christianm »

@saghon: bitte in eine neue Forum-Kategorie "Homematic" verschieben

Nachdem ich das Glück hatte bei den ersten Testplatinen schon mit an Bord zu sein - danke nochmal dafür - habe ich letztes Jahr schon ein Auslese-Script direkt für Homematic-User ohne Umwege über iobroker, etc. erstellt, welches ich hier mit euch teilen will:

Hinweise befinden sich im Script in den Kommentaren!

Code: Alles auswählen

!FOLGENDE SYSTEMVARIABLEN MÜSSEN ERSTELLT WERDEN BZW. WENN NICHT ALLE BENÖTIGT WERDEN MUSS DAS SCRIPT ENTSPRECHEND ANGEPASST WERDEN
object sv_bezug = dom.GetObject("Stromzähler Bezug");
object sv_einspeisung = dom.GetObject("Stromzähler Einspeisung");
object sv_stromleistung = dom.GetObject("Stromleistung Netzanschluss");
object sv_spannung1 = dom.GetObject("Spannung L1");
object sv_spannung2 = dom.GetObject("Spannung L2");
object sv_spannung3 = dom.GetObject("Spannung L3");
object sv_strom1 = dom.GetObject("Strom L1");
object sv_strom2 = dom.GetObject("Strom L2");
object sv_strom3 = dom.GetObject("Strom L3");
object sv_cosphi = dom.GetObject("Strom Leistungsfaktor");


!NUR FORTFAHREN WENN SHRDZM ERREICHBAR - WIRD MITTELS CUXD-PING GERÄT GETESTET, GGF. DIE SERIENNUMMER ANPASSEN (OPTIONAL)
if (dom.GetObject("CUxD.CUX2803001:6.STATE").Value())
{
string datenpunkte = "timestamp,1.8.0,2.8.0,16.7.0,32.7.0,52.7.0,72.7.0,31.7.0,51.7.0,71.7.0,13.7.0";

!Titel und Einheit nur für WriteLine
string titel = "Timestamp des letzten Datensatzes: ,Stromzähler Bezug: ,Stromzähler Einspeisung: ,Momentanleistung (+Bezug/-Einspeisung): ,Spannung L1: ,Spannung L2: ,Spannung L3: ,Strom L1: ,Strom L2: ,Strom L3: ,Leistungsfaktor: ";
string einheit= ", kWh, kWh, kW, V, V, V, A, A, A, cosPhi";

!CUXD-SYSTEMEXEC GERÄT MUSS EINGERICHTET SEIN, GGF. DIE SERIENNUMMER ANPASSEN
!HIER DIE URL DER REST-AUSGABE DES SHRDZM-MODULS EINTRAGEN UNTER EINFACHEN ANFÜHRUNGSZEICHEN
dom.GetObject("CUxD.CUX2801001:4.CMD_SETS").State("wget --timeout=3 --tries=1 -q -O - 'http://192.168.0.123/getLastData?user=xxxxxxxxxxxx&password=xxxxxxxx'"); 
dom.GetObject("CUxD.CUX2801001:4.CMD_QUERY_RET").State(1);
var stdout = dom.GetObject("CUxD.CUX2801001:4.CMD_RETS").State();

var index = 0;
while(index <=10)
{
string wert = stdout.Substr(stdout.Find(datenpunkte.StrValueByIndex(",",index)),600).StrValueByIndex("\"",2); !"(nur für Notepad++)

if(index<=10){var ausgabe=0.01*wert.ToFloat();}
if(index<=9){var ausgabe=wert.ToFloat();}
if(index<=6){var ausgabe=wert.ToFloat();}
if(index<=3){var ausgabe=0.001*wert.ToFloat();}
if(index==0){var ausgabe=(wert.StrValueByIndex("T",0)#" "#wert.StrValueByIndex("T",1)).ToTime();}
if(index==11){var ausgabe=wert;}

if(index == 0) {var zeit=ausgabe;}
if(index == 1) {var bezug=ausgabe;}
if(index == 2) {var einspeisung=ausgabe;}
if(index == 3) {var stromleistung=ausgabe;}
if(index == 4) {var spannung1=ausgabe;}
if(index == 5) {var spannung2=ausgabe;}
if(index == 6) {var spannung3=ausgabe;}
if(index == 7) {var strom1=ausgabe;}
if(index == 8) {var strom2=ausgabe;}
if(index == 9) {var strom3=ausgabe;}
if(index == 10) {var cosphi=ausgabe;}


!AUSGABE IM "SCRIPT TESTEN"-FENSTER
WriteLine(titel.StrValueByIndex(",",index) # ausgabe # einheit.StrValueByIndex(",",index));

index = index + 1;
}

!NUR FORTFAHREN WENN AUSLESUNG WERTE ENTHÄLT (BEI FEHLAUSLESUNG, VERBINDUNGSPROBLEMEN, ETC.)
if (bezug && einspeisung && spannung1 && spannung2 && spannung3)
{
!SCHREIBEN IN SV NUR WENN SICH WERTE GEÄNDERT HABEN
if (sv_stromleistung.Value() <> stromleistung) {sv_stromleistung.State(stromleistung);}
if (sv_bezug.Value() <> bezug) {sv_bezug.State(bezug);}
if (sv_einspeisung.Value() <> einspeisung) {sv_einspeisung.State(einspeisung);}
if (sv_spannung1.Value() <> spannung1) {sv_spannung1.State(spannung1);}
if (sv_spannung2.Value() <> spannung2) {sv_spannung2.State(spannung2);}
if (sv_spannung3.Value() <> spannung3) {sv_spannung3.State(spannung3);}
if (sv_strom1.Value() <> strom1) {sv_strom1.State(strom1);}
if (sv_strom2.Value() <> strom2) {sv_strom2.State(strom2);}
if (sv_strom3.Value() <> strom3) {sv_strom3.State(strom3);}
if (sv_cosphi.Value() <> cosphi) {sv_cosphi.State(cosphi);}
}


}
else
{
sv_stromleistung.State(0);
sv_spannung1.State(0);
sv_spannung2.State(0);
sv_spannung3.State(0);
sv_strom1.State(0);
sv_strom2.State(0);
sv_strom3.State(0);
sv_cosphi.State(0);
}
Dieses Script dann in einem Programm, dass alle 5 oder 10 Sekunden (oder länger - je nachdem wie gewünscht) ausgeführt wird.
Viel Spaß damit - bei Fragen einfach melden

[Update 02.02.2023: Saghon] Beitrag wie gewünscht nach Homematic verschoben
Antworten