Benötige Hilfe! Skript für Umstellung Bezug/Einspeisung Stromzähler

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

dtp
Beiträge: 10660
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 321 Mal
Danksagung erhalten: 501 Mal

Re: Benötige Hilfe! Skript für Umstellung Bezug/Einspeisung Stromzähler

Beitrag von dtp » 23.06.2022, 10:56

Tobisco hat geschrieben:
23.06.2022, 09:07
leider schreibt er keine werte.
In dem von dir gezeigten Screenshot werden auch keine Werte ausgegeben. Da wird nur geprüft, ob das Skript Fehler aufweist. Du musst es dazu schon unter "Programme & Zentralenverknüpfung" durch Klick auf den Button "Skript" ausführen.
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

Tobisco
Beiträge: 16
Registriert: 12.01.2022, 13:15
System: CCU
Hat sich bedankt: 4 Mal
Danksagung erhalten: 1 Mal

Re: Benötige Hilfe! Skript für Umstellung Bezug/Einspeisung Stromzähler

Beitrag von Tobisco » 23.06.2022, 11:34

Michael du hast recht ich verstehe nur Bahnhof

Bildschirmfoto 2022-06-23 um 11.27.51.png
Stromzaeler_Bezug - Strom aktuell: 20168.313782
Stromzaeler_Bezug - Strom bisher: 20168.313599

Meitest du das so?

Das Programm habe ich manuell gestartet...

Tobisco
Beiträge: 16
Registriert: 12.01.2022, 13:15
System: CCU
Hat sich bedankt: 4 Mal
Danksagung erhalten: 1 Mal

Re: Benötige Hilfe! Skript für Umstellung Bezug/Einspeisung Stromzähler

Beitrag von Tobisco » 23.06.2022, 11:53

Hallo Michael

du hast recht ich verstehe nur Bahnhof, das Programm habe ich manuell gestartet.

Wenn ich das Skript teste kommt:

Stromzaeler_Bezug - Strom aktuell: 20168.330475
Stromzaeler_Bezug - Strom bisher: 20168.319672
Bildschirmfoto 2022-06-23 um 11.27.51.png
Ich versuche nochmal meinen Plan zu erklären...

Mein IEC Energie-Zähler sendet alle 3 minuten Zählerstand: Einspeiung in kw/h, Bezug in kw/h und Leistung aktuell in Watt

Ich möche wenn sich der Zählerstand verändet eine Systemvariable umschalten auf bezug oder einspeisung.
Allso zählerstand einspeiung verandert, zählerstand bezug nicht dann Systemvariable auf Einspeisen. Das gleiche natürlich auch umgekehrt.

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

Re: Benötige Hilfe! Skript für Umstellung Bezug/Einspeisung Stromzähler

Beitrag von MichaelN » 23.06.2022, 12:05

OK, wir nähern uns in kleinen Schritten an. Aber Du musst etwas mehr mitarbeiten.
Wenn ich sage "Debugging Tips durchlesen" meine ich damit: Link aufrufen, gucken wo das was zu Code Tags erklärt ist und dann anwenden.

Aber gut, ich sehe erstmal was ich wissen wollte. Die Datenpunkte liefern sinnvolle Ergebnisse. Also zumindest soweit ich das beurteilen kann.

Was ich aber immer noch nicht in meinen kleinen Kopf reinkriege - du schreibst:
Tobisco hat geschrieben:
23.06.2022, 11:53
Mein IEC Energie-Zähler sendet alle 3 minuten Zählerstand: Einspeiung in kw/h, Bezug in kw/h und Leistung aktuell in Watt
Ich schrieb:
Du hast einen HM-ES-TX-WM und der liefert 2 Zählerstände, einmal Einspeisung und einmal Bezug? Dann führ das obige Skript einmal für den einen Kanal, einmal für den andern aus.
Ich sehe in deinem Screenshot nur die Ergebnisse für einen Zählerstand. Anscheinend Bezug, wenn ich vom dem Namen ausgehe.
Gibt es sowas auch für Einspeisung?
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 +++

Tobisco
Beiträge: 16
Registriert: 12.01.2022, 13:15
System: CCU
Hat sich bedankt: 4 Mal
Danksagung erhalten: 1 Mal

Re: Benötige Hilfe! Skript für Umstellung Bezug/Einspeisung Stromzähler

Beitrag von Tobisco » 23.06.2022, 12:13

Ja es gibt den selben noch für den Einspeisezählerstand.
Bildschirmfoto 2022-06-23 um 12.10.19.png
Die beiden werte aktuell sind auch die jetztigen ist werte des Zählers.


Jetzt scheint die Sonne stark das ich von einer einspeisung ausgehen kann was auch zu den zählerständen passt
Bildschirmfoto 2022-06-23 um 12.15.32.png

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

Re: Benötige Hilfe! Skript für Umstellung Bezug/Einspeisung Stromzähler

Beitrag von MichaelN » 23.06.2022, 12:59

OK, dann mal die Ohren spitzen:

Du legst eine Systemvariable vom Typ Werteliste an. Diese muss folgende Werte bekommen:

Code: Alles auswählen

nur Bezug;Bezug größer Einspeisung;Einspeisung
Da mir immer noch nicht klar war, ob es auch die Konstellation geben kann, das eingespeist wird, aber die Einspeisung geringer als der aktuelle Netzbezug ist, habe ich 3 Stati erzeugt.

Wenn die SV existiert, passt Du im Skript die ersten 3 Zeilen an. Name der Zähler (wie bisher) und Name der SV eintragen (zwischen die "")
Dann mal in "Skript testen" laufen lassen und schauen ob es sinnvolle Ausgaben gibt.
Wenn ja, dann Programm anlegen, das auf Aktualisierung der Zähler reagiert (ver-ODER-t) und im DANN das Skript einfügen.

Zukünftig kannst Du dann auf den entsprechenden Status der SV in einem anderen Programm reagieren.

Code: Alles auswählen

string ZaehlerBezug = "Zaehlername:1";
string ZaehlerEinspeisung = "Zaehlername:1";
string NameStatusSV = "Status Zaehler"; ! Werteliste 0=nur Bezug 1=Bezug größer Einspeisung 2=Einspeisung

object SV = dom.GetObject(ID_SYSTEM_VARIABLES).Get(NameStatusSV);
object Bezug = dom.GetObject(ZaehlerBezug).DPByHssDP("IEC_ENERGY_COUNTER");
object Einspeisung = dom.GetObject(ZaehlerEinspeisung).DPByHssDP("IEC_ENERGY_COUNTER");
real altBez = 0; real neuBez = 0;
real altEin = 0; real neuEin = 0;
neuBez = Bezug.Value();
altBez = Bezug.LastValue();
WriteLine(ZaehlerBezug # " - aktuell: "# neuBez);
WriteLine(ZaehlerBezug # " - bisher: "# altBez);
neuEin = Einspeisung.Value();
altEin = Einspeisung.LastValue();
WriteLine(ZaehlerEinspeisung # " - aktuell: "# neuEin);
WriteLine(ZaehlerEinspeisung # " - bisher: "# altEin);
if ( (neuEin > altEin) && (neuBez == altBez) ) {
	! es wird eingespeist
    if (SV) {if (SV.State() != 2 ) {SV.State(2);}}
    WriteLine("es wird eingespeist");
}

if ( (neuEin > altEin) && (neuBez > altBez) ) {
	! Bezug größer Einspeisung
    if (SV) {if (SV.State() != 1 ) {SV.State(1);}}
    WriteLine("Bezug größer Einspeisung");
}

if ( (neuEin == altEin) && (neuBez > altBez) ) {
	! Bezug größer Einspeisung
    if (SV) {if (SV.State() != 0 ) {SV.State(0);}}
    WriteLine("Bezug");
}

if (SV) {
	WriteLine("Status: "#SV.State());
}


Zuletzt geändert von MichaelN am 23.06.2022, 18:48, insgesamt 1-mal geändert.
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 +++

Tobisco
Beiträge: 16
Registriert: 12.01.2022, 13:15
System: CCU
Hat sich bedankt: 4 Mal
Danksagung erhalten: 1 Mal

Re: Benötige Hilfe! Skript für Umstellung Bezug/Einspeisung Stromzähler

Beitrag von Tobisco » 23.06.2022, 17:07

Danke schonmal soweit, mit den 3 Werten ist eine gute idee, es kann ja vorkommne das beide zähler stände sich verändern in der übgangszeit zwischen einspeisung und bezug.

Ich hoffe du siehst was ich falsch gemacht habe,

Code: Alles auswählen

string ZaehlerBezug = "Stromzaeler_Bezug";
string ZaehlerEinspeisung = "Stromzaeler_Einspeisung";
string NameStatusSV = "Strom_ueberschuss"; ! Werteliste 0=nur Bezug 1=Bezug größer Einspeisung 2=Einspeisung

object SV = dom.GetObject(ID_SYSTEM_VARIABLES).Get(NameStatusSV);
object Bezug = dom.GetObject(ZaehlerBezug).DPByHssDP("IEC_ENERGY_COUNTER");
object Einspeisung = dom.GetObject(ZaehlerEinspeisung).DPByHssDP("IEC_ENERGY_COUNTER");
real altBez = 0; real neuBez = 0;
real altEin = 0; real neuEin = 0;
neuBez = Bezug.Value();
altBez = Bezug.LastValue();
WriteLine(ZaehlerBezug # " - aktuell: "# neuBez);
WriteLine(ZaehlerBezug # " - bisher: "# altBez);
neuEin = Einspeisung.Value();
altEin = Einspeisung.LastValue();
WriteLine(ZaehlerEinspeisung # " - aktuell: "# neuEin);
WriteLine(ZaehlerEinspeisung # " - bisher: "# altEin);
if ( (neuEin > altEin) && (neuBez == altBez) ) {
	! es wird eingespeist
    if (SV) {if (SV.State() != 2 ) {SV.State(2);}}
    WriteLine("es wird eingespeist"};
}

if ( (neuEin > altEin) && (neuBez > altBez) ) {
	! Bezug größer Einspeisung
    if (SV) {if (SV.State() != 1 ) {SV.State(1);}}
    WriteLine("Bezug größer Einspeisung"};
}

if ( (neuEin == altEin) && (neuBez > altBez) ) {
	! Bezug größer Einspeisung
    if (SV) {if (SV.State() != 0 ) {SV.State(0);}}
    WriteLine("Bezug"};
}

if (SV) {
	WriteLine("Status: "#SV.State());
}
Auf ausführen kommt nichts, bei der fehlerprüfung kommt folgendes...

Code: Alles auswählen

Error 1 at row 21 col 54 near ^"};
}
Zuletzt geändert von alchy am 23.06.2022, 21:09, insgesamt 1-mal geändert.
Grund: Code in Codetags posten

Benutzeravatar
Baxxy
Beiträge: 10832
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 608 Mal
Danksagung erhalten: 2227 Mal

Re: Benötige Hilfe! Skript für Umstellung Bezug/Einspeisung Stromzähler

Beitrag von Baxxy » 23.06.2022, 17:31

Alles gut, du machst nichts falsch.

Micha hat bestimmt wieder am Handy gescripted und bei der Hitze kann man schon mal die falschen Klammern erwischen. 8)
Hotfix-Version:

Code: Alles auswählen

string ZaehlerBezug = "Zaehlername:1";
string ZaehlerEinspeisung = "Zaehlername:1";
string NameStatusSV = "Status Zaehler"; ! Werteliste 0=nur Bezug 1=Bezug größer Einspeisung 2=Einspeisung

object SV = dom.GetObject(ID_SYSTEM_VARIABLES).Get(NameStatusSV);
object Bezug = dom.GetObject(ZaehlerBezug).DPByHssDP("IEC_ENERGY_COUNTER");
object Einspeisung = dom.GetObject(ZaehlerEinspeisung).DPByHssDP("IEC_ENERGY_COUNTER");
real altBez = 0; real neuBez = 0;
real altEin = 0; real neuEin = 0;
neuBez = Bezug.Value();
altBez = Bezug.LastValue();
WriteLine(ZaehlerBezug # " - aktuell: "# neuBez);
WriteLine(ZaehlerBezug # " - bisher: "# altBez);
neuEin = Einspeisung.Value();
altEin = Einspeisung.LastValue();
WriteLine(ZaehlerEinspeisung # " - aktuell: "# neuEin);
WriteLine(ZaehlerEinspeisung # " - bisher: "# altEin);
if ( (neuEin > altEin) && (neuBez == altBez) ) {
	! es wird eingespeist
    if (SV) {if (SV.State() != 2 ) {SV.State(2);}}
    WriteLine("es wird eingespeist");
}

if ( (neuEin > altEin) && (neuBez > altBez) ) {
	! Bezug größer Einspeisung
    if (SV) {if (SV.State() != 1 ) {SV.State(1);}}
    WriteLine("Bezug größer Einspeisung");
}

if ( (neuEin == altEin) && (neuBez > altBez) ) {
	! Bezug größer Einspeisung
    if (SV) {if (SV.State() != 0 ) {SV.State(0);}}
    WriteLine("Bezug");
}

if (SV) {
	WriteLine("Status: "#SV.State());
}
Achja, wurde zwar schon geschrieben... bitte Code in Codetags (</>) posten.

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

Re: Benötige Hilfe! Skript für Umstellung Bezug/Einspeisung Stromzähler

Beitrag von MichaelN » 23.06.2022, 17:58

Ne, tatsächlich habe ich sogar den SDV benutzt, aber offline. Wo habe ich denn den Bug eingebaut?
Baxxy hat geschrieben:
23.06.2022, 17:31
Achja, wurde zwar schon geschrieben... bitte Code in Codetags (</>) posten
Das wird wohl nichts mehr.
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 +++


Antworten

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