Verbrauch HMIP-PSM

HMIP lokale Installation

Moderator: Co-Administratoren

MichaelN
Beiträge: 9562
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 696 Mal
Danksagung erhalten: 1608 Mal

Re: Verbrauch HMIP-PSM

Beitrag von MichaelN » 24.06.2022, 19:34

So, und hier noch eine ordentliche Debugging Variante des Programms. Du brauchst eine Systemvariable Typ Text, die "Protokolleintrag" heisst und auf protokolliert steht. Die SV für die Zählerstände solltest Du auch auf protokolliert setzen. Dann kannst Du nach dem Durchlauf des Programms im Systemprotokoll (!) alle Schritte im Detail sehen.

Code: Alles auswählen

!- Strom getrennt nach Kanal abrechnen / MN 25.06.2022 Debug-Version
!- https://homematic-forum.de/forum/viewtopic.php?f=60&t=59546&p=590070#p590070
!- WENN Pumpe:3 Schaltzustand EIN bei Änderung auslösen
!- ODER Pumpe:3 Schaltzustand AUS nur prüfen
!- ODER Pumpe:4 Schaltzustand EIN bei Änderung auslösen
!- ODER Pumpe:4 Schaltzustand AUS nur prüfen
!- DANN dieses SKRIPT _verzögert_ um 3 Sekunden OHNE Retriggerung

!- Definitionen, ggf. anpassen
string Zaehlername = "svEnergyCounter_15140_0001D3C99CAC8A:6";
string NameSV3_gesamt = "Zaehler3ges";
string NameSV4_gesamt = "Zaehler4ges";
string NameSV3_ein = "Zaehlerstand3ein";
string NameSV4_ein = "Zaehlerstand4ein";
real Einheit = 1000; !- 1 für Wh, 1000 für kWh

!- hier nichts mehr anpassen
string kanal;
object oSrc;
real ZaehlerGesamt;
real ZaehlerAktuell;
real ZaehlerAlt3;
real ZaehlerAlt4;
real Diff3;
real Diff4;
real DiffTeilen;
real DiffRest;

dom.GetObject (ID_SYSTEM_VARIABLES).Get ("Protokolleintrag").State("Pumpe: START"); ! debug
!- welcher Kanal?
oSrc = dom.GetObject("$src$");
kanal = (dom.GetObject(oSrc.Channel())).ChnNumber();
!- aktueller Status 0 = aus / 1 = ein
string sVal = "$val$";

ZaehlerAktuell = dom.GetObject(Zaehlername).Value();
ZaehlerAktuell = ZaehlerAktuell/Einheit;
ZaehlerAlt3 = dom.GetObject(ID_SYSTEM_VARIABLES).Get(NameSV3_ein).State();
ZaehlerAlt4 = dom.GetObject(ID_SYSTEM_VARIABLES).Get(NameSV4_ein).State();

if ( kanal == "3" )
   {
   !- Kanal 3 betätigt
   dom.GetObject (ID_SYSTEM_VARIABLES).Get ("Protokolleintrag").State("Pumpe: Kanal 3 betätigt"); ! debug
   if ( sVal == "0" )
      {
      !- ausgeschaltet
      dom.GetObject (ID_SYSTEM_VARIABLES).Get ("Protokolleintrag").State("Pumpe: 3 ausgeschaltet"); ! debug
      ZaehlerGesamt = dom.GetObject(ID_SYSTEM_VARIABLES).Get(NameSV3_gesamt).State();
      Diff3 = ( ZaehlerAktuell -  ZaehlerAlt3 );
      if ( ZaehlerAlt4 > 0 )
         {
         !- Zaehler 4 läuft parallel, hälftig abrechnen
         dom.GetObject (ID_SYSTEM_VARIABLES).Get ("Protokolleintrag").State("Pumpe: hälftig abrechnen"); ! debug
         Diff4 = ( ZaehlerAktuell -  ZaehlerAlt4 );
         DiffTeilen = Diff4.Min(Diff3);
         DiffRest = Diff3 - DiffTeilen;
         Diff3 = DiffRest + ( DiffTeilen / 2 );
         ZaehlerAlt4 = ZaehlerAlt4 + ( DiffTeilen / 2 );
         dom.GetObject(ID_SYSTEM_VARIABLES).Get(NameSV4_ein).State(ZaehlerAlt4);
         }
       !- hochzählen
       dom.GetObject (ID_SYSTEM_VARIABLES).Get ("Protokolleintrag").State("Pumpe: hochgezählt " #Diff3); ! debug
       ZaehlerGesamt = ZaehlerGesamt + Diff3;

      dom.GetObject(ID_SYSTEM_VARIABLES).Get(NameSV3_gesamt).State(ZaehlerGesamt);
      dom.GetObject(ID_SYSTEM_VARIABLES).Get(NameSV3_ein).State(0);
      } else {
      !- eingeschaltet, Zählerstand merken
      dom.GetObject (ID_SYSTEM_VARIABLES).Get ("Protokolleintrag").State("Pumpe: 3 eingeschaltet"); ! debug
      dom.GetObject(ID_SYSTEM_VARIABLES).Get(NameSV3_ein).State(ZaehlerAktuell);
      }
   }

if ( kanal == "4" )
   {
   !- Kanal 4 betätigt
   dom.GetObject (ID_SYSTEM_VARIABLES).Get ("Protokolleintrag").State("Pumpe: Kanal 4 betätigt"); ! debug
   if ( sVal == "0" )
      {
      !- ausgeschaltet
      dom.GetObject (ID_SYSTEM_VARIABLES).Get ("Protokolleintrag").State("Pumpe: 4 ausgeschaltet"); ! debug
      ZaehlerGesamt = dom.GetObject(ID_SYSTEM_VARIABLES).Get(NameSV4_gesamt).State();
      Diff4 = ( ZaehlerAktuell -  ZaehlerAlt4 );
      if ( ZaehlerAlt3 > 0 )
         {
         !- Zaehler 3 läuft parallel, hälftig abrechnen
         dom.GetObject (ID_SYSTEM_VARIABLES).Get ("Protokolleintrag").State("Pumpe: hälftig abrechnen"); ! debug
         Diff3 = ( ZaehlerAktuell -  ZaehlerAlt3 );
         DiffTeilen = Diff3.Min(Diff4);
         DiffRest = Diff4 - DiffTeilen;
         Diff4 = DiffRest + ( DiffTeilen / 2 );
         ZaehlerAlt3 = ZaehlerAlt3 + ( DiffTeilen / 2 );
         dom.GetObject(ID_SYSTEM_VARIABLES).Get(NameSV3_ein).State(ZaehlerAlt3);
         }
       !- hochzählen
       dom.GetObject (ID_SYSTEM_VARIABLES).Get ("Protokolleintrag").State("Pumpe: hochgezählt " #Diff4); ! debug
       ZaehlerGesamt = ZaehlerGesamt + Diff4;

      dom.GetObject(ID_SYSTEM_VARIABLES).Get(NameSV4_gesamt).State(ZaehlerGesamt);
      dom.GetObject(ID_SYSTEM_VARIABLES).Get(NameSV4_ein).State(0);
      } else {
      !- eingeschaltet, Zählerstand merken
      dom.GetObject (ID_SYSTEM_VARIABLES).Get ("Protokolleintrag").State("Pumpe: 4 eingeschaltet"); ! debug
      dom.GetObject(ID_SYSTEM_VARIABLES).Get(NameSV4_ein).State(ZaehlerAktuell);
      }
   }
dom.GetObject (ID_SYSTEM_VARIABLES).Get ("Protokolleintrag").State("Pumpe: ENDE"); ! debug

Zuletzt geändert von MichaelN am 25.06.2022, 14:20, insgesamt 3-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 +++

TheCrusher
Beiträge: 75
Registriert: 28.05.2020, 10:21
System: CCU
Hat sich bedankt: 14 Mal

Re: Verbrauch HMIP-PSM

Beitrag von TheCrusher » 24.06.2022, 19:39

MichaelN hat geschrieben:
24.06.2022, 19:21
Es hat sich mittlerweile rausgestellt, das nahezu zeitgleiche Trigger manchmal zur Nichtfunktion des Programms führen. Ähnlich wie es bei Dir ausschaut. Stelle den jeweils komplementären Trigger auf "nur prüfen"

also
4 ein bei Änderung
4 aus nur prüfen
3 ein bei Änderung
3 aus nur prüfen
ich hab nen Brett vorm Kopf...da triggert das Programm doch beim ausschalten (beide AUS) nicht
Bildschirmfoto 2022-06-24 um 19.37.01.png
MichaelN hat geschrieben:
24.06.2022, 19:25
Und ich sehe gerade du hast in deinem Programm den Haken für Regtriggern nicht rausgenommen. Siehe nochmal meine Beitrag von damals genau an:
viewtopic.php?f=60&t=59546#p590136
wo der Haken nun wieder her kam :oops:

MichaelN
Beiträge: 9562
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 696 Mal
Danksagung erhalten: 1608 Mal

Re: Verbrauch HMIP-PSM

Beitrag von MichaelN » 24.06.2022, 19:44

TheCrusher hat geschrieben:
24.06.2022, 19:39
da triggert das Programm doch beim ausschalten (beide AUS) nicht
wirklich? Schon ausprobiert?
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 +++

TheCrusher
Beiträge: 75
Registriert: 28.05.2020, 10:21
System: CCU
Hat sich bedankt: 14 Mal

Re: Verbrauch HMIP-PSM

Beitrag von TheCrusher » 24.06.2022, 20:13

MichaelN hat geschrieben:
24.06.2022, 19:44
TheCrusher hat geschrieben:
24.06.2022, 19:39
da triggert das Programm doch beim ausschalten (beide AUS) nicht
wirklich? Schon ausprobiert?
jetzt geht gar nix mehr :mrgreen:

debugging script mit und ohne den geänderten Codeschnipsel von Seite 3
programm umgestellt, ob so wie du schriebst oder alles auf "bei Änderung"
Haken beim retriggern raus
Protokoll SV
LOG schmeisst kein Start bzw Ende beim ein/aus schalten raus...Programm triggert aber

ich bin am Ende

TheCrusher
Beiträge: 75
Registriert: 28.05.2020, 10:21
System: CCU
Hat sich bedankt: 14 Mal

Re: Verbrauch HMIP-PSM

Beitrag von TheCrusher » 24.06.2022, 20:26

den Auswurf im log mit folgender Kombi

- mein zuletzt gepostetes Script
- programm ohne ccu start und
4 ein bei Änderung
4 aus nur prüfen
3 ein bei Änderung
3 aus nur prüfen
Jun 24 20:17:40 ccu3-webui user.debug script: [Script Start]
Jun 24 20:17:40 ccu3-webui local0.err ReGaHss: ERROR: ScriptRuntimeError: string stdout;string stderr; system.Exec("logger -t script -p user.debug [Script Start]", &stdout, &stderr); !- Strom getrennt nach Kanal abrechnen / MN 27.06.2020 !- viewtopic.php?f=60&t=59546&p=590070#p590070 !- WENN Pumpe:3 Schaltzustand EIN bei Änderung auslösen !- ODER Pumpe:3 Schaltzustand AUS bei Änderung auslösen !- ODER Pumpe:4 Schaltzustand EIN bei Änderung auslösen !- ODER Pumpe:4 Schaltzustand AUS bei Änderung auslösen !- DANN dieses SKRIPT !- Definitionen: Variablennamen zwischen den "" an eigene Gegebenheiten anpassen string Zaehlername = "svEnergyCounter_1439_0001D3C99C9B5B:6"; string NameSV3_gesamt = "sv_PumpeOG"; string NameSV4_gesamt = "sv_PumpeEG"; string NameSV3_ein = "sv_PumpeOG_EIN"; string NameSV4_ein = "sv_PumpeEG_EIN"; !- hier nichts mehr anpassen string kanal; object oSrc; real ZaehlerGesamt; real ZaehlerAktuell; real ZaehlerAlt3; real ZaehlerAlt4; real Diff3; real Diff4; real DiffTeilen; re


- hier mit gleichem script aber alles "auf Änderung"
- funktionierte erstmal bei dem einen an/aus machen
Jun 24 20:20:19 ccu3-webui user.debug script: [Script Start]
Jun 24 20:20:19 ccu3-webui user.debug script: [Script Ende]
Jun 24 20:20:44 ccu3-webui user.debug script: [Script Start]
Jun 24 20:20:44 ccu3-webui user.debug script: [Script Ende]/quote]

MichaelN
Beiträge: 9562
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 696 Mal
Danksagung erhalten: 1608 Mal

Re: Verbrauch HMIP-PSM

Beitrag von MichaelN » 24.06.2022, 20:38

Vielleicht habe ich ja mal wieder einen Bug eingebaut. Kann ich mir morgen noch mal anschauen.

ABER, das hier macht kein Sinn :
das ein und dasselbe Skript mit "nur prüfen" einen Fehler wirft "mit Änderung" aber nicht.
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 +++

MichaelN
Beiträge: 9562
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 696 Mal
Danksagung erhalten: 1608 Mal

Re: Verbrauch HMIP-PSM

Beitrag von MichaelN » 24.06.2022, 20:40

TheCrusher hat geschrieben:
24.06.2022, 20:13
jetzt geht gar nix mehr
Nur zur Sicherheit, du hast im debugging Skript aber schon deine Daten eingetragen?
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 +++

TheCrusher
Beiträge: 75
Registriert: 28.05.2020, 10:21
System: CCU
Hat sich bedankt: 14 Mal

Re: Verbrauch HMIP-PSM

Beitrag von TheCrusher » 24.06.2022, 20:57

mit und ohne den codeschnipsel tausch
Nur zur Sicherheit, du hast im debugging Skript aber schon deine Daten eingetragen?
MichaelN hat geschrieben:
22.03.2022, 19:46
Ja, verdammich, es gibt eine Eigenschaft ChnNumber? OMG. Die Klammersetzung ist aber trotzdem krass.

Also nochmal zum mitschreiben:

Suche und Ersetze:

Code: Alles auswählen

kanal = (dom.GetObject(dom.GetObject(oSrc)).Channel()).Name();
kanal = kanal.Substr((kanal.Length()-1),1);
durch

Code: Alles auswählen

kanal = (dom.GetObject(oSrc.Channel())).ChnNumber();

MichaelN
Beiträge: 9562
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 696 Mal
Danksagung erhalten: 1608 Mal

Re: Verbrauch HMIP-PSM

Beitrag von MichaelN » 24.06.2022, 21:22

Boah, das habe ich doch nach all der Zeit nicht mehr im Kopf. Ich mach das morgen noch mal ordentlich.
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 +++

MichaelN
Beiträge: 9562
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 696 Mal
Danksagung erhalten: 1608 Mal

Re: Verbrauch HMIP-PSM

Beitrag von MichaelN » 25.06.2022, 14:19

So, jetzt erstmal der Beweis, das dieses Programm:
Unbenannt2.JPG
in jedem Fall das Programm triggert:
Unbenannt.JPG
Warum? Weil auch das ausschalten eine Änderung ist. Und dann wird das Programm auch nur 1x durchlaufen

Zum anderen habe ich das Debugging Skript unter viewtopic.php?f=60&t=59546&p=723018#p723018
an den lauffähigen Stand angepasst.

Die prinzipielle Logik habe ich auch nochmal getestet und es läuft wie erwartet und ohne Fehlermeldungen.
Leider habe ich keine PSM zum testen frei, so das ich das mit dem Zählerstand nicht vollumfänglich testen kann.
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 IP mit CCU“