Strom/Energieverbrauch * Stromkosten * Prognose

HMIP lokale Installation

Moderator: Co-Administratoren

Sebastian65432
Beiträge: 116
Registriert: 14.05.2018, 19:50
Danksagung erhalten: 8 Mal

Strom/Energieverbrauch * Stromkosten * Prognose

Beitrag von Sebastian65432 » 10.06.2018, 08:00

Habe bei dieser Lösung noch einmal überarbeitet. Bitte beachtet, dass das Script ursprünglich nicht von mir ist. Den größten Teil habe ich von jmaus übernommen: viewtopic.php?t=31353

Jetzt kann mit dem Skript folgendes gemacht werden:
- Der Stromverbrauch (aktueller Tag, aktuelle Woche, aktueller Monat und aktuelles Jahr) wird angezeigt.
- Stromkosten und -verbauch bei "aktueller Tag, letzte Woche, letzter Monat, letztes Jahr".
- Die Stromkosten werden aus den Systemeinstellungen übernommen und müssen im Skript nicht angegeben werden.
- Hochrechnung für den Jahresverbrauch (aktuelles Jahr ab installation, folgende Jahre ab 01.01.)
- Funktioniert im Grunde mit allen HMIP Mess-Aktoren (z.B. HMIP-PSM oder HMIP-BSM)
- Die Jahreshochrechnung ist farblich markiert.

Installation:
Zu Beginn erstellt man für die HMIP-PSM folgende Systemvariablen und ordnen sie dem Kanal des Gerätes zu. Das XX steht dabei als Kürzel, damit man mehrere Geräte messen kann. Bei mir habe zum Beispiel anstelle XX - KK für Küche Kühlschrank gewählt.

XX Verbrauch gestern - Zeichenkette
XX aktuelle Woche - Zahl, Einheit kWh
XX letzte Woche - Zeichenkette
XX aktueller Monat - Zahl, Einheit kWh
XX letzter Monat - Zeichenkette
XX aktuelles Jahr - Zahl, Einheit kWh
XX letztes Jahr - Zeichenkette
XX Verbrauch heute - Zeichenkette
XX Aktualisierung - Zeichenkette
XX Prognose akt Jahr - Zeichenkette
XX Zaehlerstand - Zahl, Einheit kWh
XX Referenz Zaehlerstand - Zahl, Einheit kWh


Ist das richtig gemacht, sieht das dann bei dem Gerät in etwa so aus - nur mit anderen Werten:
Ergebnis.JPG
Als nächstes wird folgendes Programm erstellt:
s.JPG
Wenn noch nicht vorhanden, sollte CUx-Daemon installiert werden. Für die Abfrage des Strompreises aus den Systemeinstellungen ist im CuxD ein neues Gerät zu erzeugen: viewtopic.php?t=12780Schritt 1 und 2 durchführen.

Bei dem Skript muss zu Beginn etwas angepasst werden. Zunächst besorgt man die ID des Kanals sowie die Seriennummer der Schalt-Mess-Steckdose. Dabei hilft das folgende Posting viewtopic.php?f=27&t=20945#p175170
Danach trägt man die ermittelten Werte im Skript (Zeile 2) ein. Außerdem wird im Skript in Zeil 1 noch das XX durch das selbstgewählte Kürzel ersetzt.
Unter Installationsdatum wird das Datum eingetragen, wenn das Skript in Betrieb gebommmen wird. Das dient der Berechnung der Prognose für das laufende Jahr. Es sollte zugleich der Zählerstand in der CCU resettet werden.

Code: Alles auswählen

string type = "KK"; 
object counter = (dom.GetObject(ID_SYSTEM_VARIABLES)).Get("svEnergyCounter_0000_0006543621FC58:6");

! Installationsdatum dieses Skriptes
var instdate = "23.06.2018";

string d = instdate.StrValueByIndex(".",0);
string m = instdate.StrValueByIndex(".",1);
string y = instdate.StrValueByIndex(".",2);

integer startjahr = y.ToInteger();

instdate = y#"-"#m#"-"#d;

integer heute = system.Date("%j").ToInteger();
integer aktjahr = system.Date("%Y").ToInteger();
integer tage = 0;

if (aktjahr == startjahr) {}
  else {instdate = aktjahr#"-01-01";}

tage = heute - instdate.ToTime().Format("%j").ToInteger();

WriteLine (tage);



string stdout;string stderr;
string cmd = "/bin/sh -c 'cat /etc/config/energyPrice|sed -r \"s/\\"//g\"'";
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(cmd);
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
stdout = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
string sep = "\n";
string part;
real price=0;
foreach(part,stdout.Split(sep)) {
  string key = part.StrValueByIndex(":",0);
  string val = part.StrValueByIndex(":",1);
  if (key=="curPrice"){
  price = val.ToFloat();
  }
}

if(counter)
{

! Umrechnen von Wh in kWh:
  real curValue = counter.Value();
  curValue = curValue / 1000.0;
  
! Alle Variabeln laden:
  object c = dom.GetObject(type # " Zaehlerstand"); ! Zahl
  object d = dom.GetObject(type # " Referenz Zaehlerstand");
  object e = dom.GetObject(type # " Verbrauch gestern");
  object f = dom.GetObject(type # " aktuelle Woche");
  object g = dom.GetObject(type # " letzte Woche");
  object h = dom.GetObject(type # " aktueller Monat");
  object i = dom.GetObject(type # " letzter Monat");
  object j = dom.GetObject(type # " aktuelles Jahr");
  object k = dom.GetObject(type # " letztes Jahr");
  object l = dom.GetObject(type # " Verbrauch heute");
  object m = dom.GetObject(type # " Prognose akt Jahr");
  object n = dom.GetObject(type # " Anzahl Tage");

! Beschriftung noch nicht ermittelter Werte:
  if (e.State().EndsWith ("Euro")) {} else {e.State("noch keine Werte");}
  if (g.State().EndsWith ("Euro")) {} else {g.State("noch keine Werte");}
  if (i.State().EndsWith ("Euro")) {} else {i.State("noch keine Werte");}
  if (k.State().EndsWith ("Euro")) {} else {k.State("noch keine Werte");}
  if (l.State().EndsWith ("Euro")) {} else {l.State("noch keine Werte");}
  if (m.State().EndsWith ("Euro")) {} else {m.State("noch keine Werte");}

! Aktueller Zähler aus der CCU in speichern:
  object c = dom.GetObject(type # " Zaehlerstand");
  c.State(curValue);
  WriteLine("Zaehlerstand wurde gesetzt auf: " # curValue);

! Datum und Uhrzeit der Aktualisierung speichern
  dom.GetObject(type # " Aktualisierung").State(system.Date("%F %X"));

! Berechnungen durchführen. Nur weitermachen wenn es wirklich Mitternacht ist
    if(system.Date("%H:%M") == "00:00")
    {
    f.State(f.Value() + c.Value() - d.Value());
    h.State(h.Value() + c.Value() - d.Value());
    j.State(j.Value() + c.Value() - d.Value());
        
    var vg1 = dom.GetObject(type # " Zaehlerstand").Value();
    var vg2 = dom.GetObject(type # " Referenz Zaehlerstand").Value();
    var vg = vg1 - vg2;
    var vgeuro = vg * price;
    var vgausgabe = vg.ToString(2) # " kWh, " # vgeuro.ToString(2) # " Euro";
    e.State(vgausgabe);
    
!   Berechnung der Prognose für das Laufende Jahr:
!   if (methode.Value() == "1")
!   {
!   Methode 1
!   var at = dom.GetObject(type # " Anzahl Tage").Value();
    var year = dom.GetObject(type # " aktuelles Jahr").Value();
    var mo = year * 365 / tage;
    var meuro = mo * price;
    var mausgabe = "<font color=yellow>" # mo.ToString(2) # " kWh, " # meuro.ToString(2) # " Euro</font>";
    m.State(mausgabe);
!   var ata = at + 1;
!   n.State(ata);
!   }
   

    d.State(c.Value());

!       Weitermachen, wenn Mitternacht und zugleich Montag
        if(system.Date("%a") == "Mon")
        {
        var lw = dom.GetObject(type # " aktuelle Woche").Value();
        var lweuro = lw * price;
        var lwausgabe = lw.ToString(2) # " kWh, " # lweuro.ToString(2) # " Euro";
        g.State(lwausgabe); 
        f.State(0);
        }

!       Weitermachen, wenn Mitternacht und zugleich Monatsanfang
        if(system.Date("%d") == "01")
        {
        var lm = dom.GetObject(type # " aktueller Monat").Value();
        var lmeuro = lm * price;
        var lmausgabe = lm.ToString(2) # " kWh, " # lmeuro.ToString(2) # " Euro";
        i.State(lmausgabe);
        h.State(0);
        }

!           Weitermachen, wnn Mitternacht, Monatsanfang und zugleich Jahresanfang
            if(system.Date("%m") == "01")
            {
            var lj = dom.GetObject(type # " aktueller Monat").Value();
            var ljeuro = lm * price;
            var ljausgabe = lj.ToString(2) # " kWh, " # ljeuro.ToString(2) # " Euro";
            k.State(ljausgabe);
            j.State(0);
            n.State(0);
            }
    }

! Verbrauch heute    

  var vh1 = dom.GetObject(type # " Zaehlerstand").Value();
  var vh2 = dom.GetObject(type # " Referenz Zaehlerstand").Value();
  var vh = vh1 - vh2;
  var vheuro = vh * price;
  var vhausgabe =  vh.ToString(2) # " kWh, " # vheuro.ToString(2) # " Euro" ;
	l.State(vhausgabe);

}

Für Verbesserungsvorschläge bin ich offen, beachtet aber, dass ich selbst Neuling bin.


Ursprüngliches Posting
Guten Morgen,

ich such seine Möglichkeit, den Leistungsverbrauch hinter den Schalt-Mess-Aktoren für einen bestimmten Zeitraum (Montag/Jahr) zu bestimmen. Beispiel: Mein Kühlschrank hängt an der HMIP-PSM Steckdose. Wie viel Energie pro Jahr benötigt er [kWh]?

In den letzten Tagen habe ich immer mal verschiedene Suchbegriffe versucht, aber alles, was ich zu dem Thema gefunden habe, bezog sich auf die Messung am Stromzähler via HM-ES-TX-WM, oder auf den Stromverbrauch der Aktoren selbst.

Vermutlich gibt es da schon ein Script oder so und ich bin nur zu doof, dass zu finden...
Dateianhänge
Programm.JPG
Zuletzt geändert von Sebastian65432 am 27.01.2019, 11:21, insgesamt 7-mal geändert.

NickHM
Beiträge: 3729
Registriert: 23.09.2017, 12:04
Hat sich bedankt: 65 Mal
Danksagung erhalten: 119 Mal

Re: HMIP-PSM Strom/Energieverbrauch

Beitrag von NickHM » 10.06.2018, 11:19

Guten Morgen

die PSM bringt doch schon alles mit, was Du brauchst.
Du stellst den CCU internen Zähler zu einem definierten Zeitpunkt auf Null.
z.B. am 1. Tag des Monats. Dann siehst Du nach 30 tagen in der WebUi nach, wie viele kWh verbraucht wurden.
Oder eben erst nach einem Jahr.

nicolas-eric
Beiträge: 3302
Registriert: 07.01.2015, 23:26
Wohnort: Scheeßel
Hat sich bedankt: 21 Mal
Danksagung erhalten: 11 Mal

Re: HMIP-PSM Strom/Energieverbrauch

Beitrag von nicolas-eric » 10.06.2018, 11:42

Das fehlt mir noch beim CuxD State Device.

Der zählt fleißig, wie lange ein Gerät an war pro Tag, Monat, etc.
Wäre schön, wenn man da auch den Energieverbrauch einzelner Geräte mit erfassen könnte.

Sebastian65432
Beiträge: 116
Registriert: 14.05.2018, 19:50
Danksagung erhalten: 8 Mal

Re: HMIP-PSM Strom/Energieverbrauch

Beitrag von Sebastian65432 » 11.06.2018, 22:20

Danke,

aber geht das nicht auch eleganter? Wäre schön, wenn ich bei jedem Aktor in der Geräteübersicht einfach noch die Felder "Verbrauch aktueller Monat", "Verbrauch letzter Monat" sowie "Verbrauch aktuelles Jahr" direkt sehen würde. So hier halt:
Dateianhänge
Unbenannt.JPG

NickHM
Beiträge: 3729
Registriert: 23.09.2017, 12:04
Hat sich bedankt: 65 Mal
Danksagung erhalten: 119 Mal

Re: HMIP-PSM Strom/Energieverbrauch

Beitrag von NickHM » 12.06.2018, 09:08

Sebastian65432 hat geschrieben:Danke,

aber geht das nicht auch eleganter? Wäre schön, wenn ich bei jedem Aktor in der Geräteübersicht einfach noch die Felder "Verbrauch aktueller Monat", "Verbrauch letzter Monat" sowie "Verbrauch aktuelles Jahr" direkt sehen würde.
Guten Morgen

ja das geht. Du legst entsprechende SysVar an und ordnest diese dem Kanal des PSM zu. Dann werden sie bei dem Gerät in der WEbUi angezeigt.
Dann schreibst Du ein Script, dass die entsprechenden Werte berechnet und die SysVar füllt.

Bei dem Script kannst Du Dich an dem Strom / Gas Zähler Script von JMaus orientieren. Musst Du nur entsprechend auf Deine Daten anpassen.

Sebastian65432
Beiträge: 116
Registriert: 14.05.2018, 19:50
Danksagung erhalten: 8 Mal

Re: HMIP-PSM Strom/Energieverbrauch

Beitrag von Sebastian65432 » 12.06.2018, 20:21

hört sich doch nicht so schwierig an.
Das Anzeigen in der WEbUi habe ich hinbekommen. Das Script habe ich mir auch schon angeschaut und konnte vieles nachvollziehen.

Derzeit hänge ich beim Auslesen des Energie-Zählers aus der Raspmatic. Da weiß ich noch nicht, mit welchem Befehl das geht... Danach müsste ich ziemlich viel aus dem Script übernehmen können.

Jetzt kommen aber erst mal die Kinder ins Bett - ich schaue mir das Morgen noch mal an.

Sebastian65432
Beiträge: 116
Registriert: 14.05.2018, 19:50
Danksagung erhalten: 8 Mal

Re: HMIP-PSM Strom/Energieverbrauch

Beitrag von Sebastian65432 » 12.06.2018, 21:43

so, irgendwie will das nicht. Als Übung habe ich versucht, den Wert von der CCU in meine Systemvariable zu bekommen. Nach hin und her habe ich das hier gefunden und angepasst:

Code: Alles auswählen

dom.GetObject("KKZaehler").State(dom.GetObject("HMIP-PSM.0001D...8:2.POWER").Value());
aber klappen tut es noch nicht.
Dateianhänge
Unbenannt.JPG

Sebastian65432
Beiträge: 116
Registriert: 14.05.2018, 19:50
Danksagung erhalten: 8 Mal

Re: HMIP-PSM Strom/Energieverbrauch

Beitrag von Sebastian65432 » 15.06.2018, 13:49

Also,
ich habe es mittlerweile hinbekommen, dass ich den Zählerstand auslesen kann. JMaus zieht in seinem Skript den Zählerstand nicht aus der Systemvariable. Leider verlieren aber die Steckdosen bei Unterbrechung der Stromversorgung den Wert, so dass ich über die Systemvariable gehen möchte. Das klappt schon mal für ein Schalt-Mess-Dose mit:

Code: Alles auswählen

string type = "Strom"; ! 'Strom', 'Wasser' oder 'Gas'
object counter = (dom.GetObject(ID_SYSTEM_VARIABLES)).Get("svEnergyCounter_11068_0001D...8:6");
if(counter)
	{
	real curValue = counter.Value();
	curValue = curValue / 1000.0;
	object c = dom.GetObject(type # " Referenz Zaehlerstand");
	c.State(curValue);
	WriteLine("Referenz Zaehlerstand wurde gesetzt auf: " # curValue);
	}
Nun möchte ich das Programm für mehrere Schalt-Mess-Dosen laufen lassen und habe das hier versucht:

Code: Alles auswählen

string type = "Strom"; ! 'Strom', 'Wasser' oder 'Gas'
object counter = (dom.GetObject("$src$")).Get("svEnergyCounter_" # channel.ID() # "_" # channel.Address() # ":6");
  if(counter)
		{
		real curValue = counter.Value();
		curValue = curValue / 1000.0;
		object c = dom.GetObject(type # " Referenz Zaehlerstand");
		c.State(curValue);
		WriteLine("Referenz Zaehlerstand wurde gesetzt auf: " # curValue);
    }
Leider funktioniert das nicht. Kann mir da jemand weiter helfen?

Sebastian65432
Beiträge: 116
Registriert: 14.05.2018, 19:50
Danksagung erhalten: 8 Mal

Re: HMIP-PSM Strom/Energieverbrauch

Beitrag von Sebastian65432 » 15.06.2018, 17:55

Das Programm sieht derzeit so aus:
Dateianhänge
Unbenannt.JPG

Sebastian65432
Beiträge: 116
Registriert: 14.05.2018, 19:50
Danksagung erhalten: 8 Mal

Re: HMIP-PSM Strom/Energieverbrauch

Beitrag von Sebastian65432 » 16.06.2018, 08:37

Hallo Alchy,

danke für Deine Antwort. Ich komme bei der Lösungssuche immer so ein wenig vom Hölzchen aufs Stöckchen. Dabei versuche ich mir aus den bestehenden Skripten etwas zusammenzuschrauben. Mein Vorwissen zum Thema skripten beschränkt sich größtenteils auf allgemeine Dinge. Syntax oder konkrete Befehle sind hier für mich neu.

Was ich eigentlich will:
Ich habe an der RaspberryMatic derzeit drei Schalt-Mess-Steckdosen (HMIP-PSM) sowie drei Schalt-Mess-Aktoren (HmIP-FSM) (neuste Updates installiert). Das werden zukünftig noch mehr. Für diese Aktoren möchte ich den Stromverbrauch sehen können. Zum Beispiel, wie viel der Kühlschrank oder Trockner im Jahr oder Monat verbraucht. Einige der Aktoren / Steckdosen werden dabei auch regelmäßig vom Strom getrennt, daher ist der Zähler im Aktor nicht brauchbar für meine Lösung. Die CCU soll durchgehend laufen (wenn die Kinder nicht wieder das Kabel herausziehen... :oops: )

Nach einem Hinweis habe ich mich am Skript von jmaus versucht. Ich finde das Skript auch deswegen sehr nett, da er nur ein Programm laufen lässt und in diesem alle Aktoren (bei ihm Zähler) durchgearbeitet werden. Dabei bin ich jedoch auf einige Hürden gestoßen:

Sein Skript verwendet HM Energiezähler, ich habe HMIP Steckdosen und Aktoren
Er nimmt den Wert nicht aus der CCU.
Wie du dir vielleicht denken kannst, gibt es kaum etwas, was noch nicht Thema war. >> H I E R << eine Anleitung.
Hatte ich vor einigen Tagen auch schon mal gesehen - werde da jetzt erst mal weiter ansetzen. Danke für den Tip - in letzter Zeit habe ich in so vielen Themen gelesen, dass ich teilweise nicht mehr weiß, was wo stand.

Sebastian

Antworten

Zurück zu „HomeMatic IP mit CCU“