Openhab 3.3
Persistence MapDB (falls Du das meinst)
Java wird dann wohl 11 sein
Hilfe bei der Berechnung von Stromverbrauchswerten gesucht
-
patrick31698 -
21. Oktober 2022 um 19:32 -
Unerledigt
-
-
merkwürdig. was passiert wenn du mal in irgendeiner rule per [definition='1','0']log[/definition] die aktuelle zeit ausgeben lässt?
-
-
Hmm. Der Fehler taucht nicht mehr auf.
Nach wir vor ist es aber so, dass ich als Verbrauchswerte für Verbrauch_gesamt_Tag etc. IMMER 0.00 erhalte.
Wie ich die Zeitausgabe hinbekommen soll, weiß ich nicht so genau
So etwas liefert keinen Wert ...
-
Ach ja. Hatte noch kein NTP-Binding installiert, jetzt schon. Weiß nicht, ob das wichtig ist.
-
-
@horschte, sag mal lese ich die rule richtig, das der Wochen und Monatswert immer der/des aktuellen Woche / des aktuellen Monats ist?
Ist das sehr aufwändig die Werte jedes Monats zu speichern um dann vielleicht sich jeden Monat über das Jahr anschauen zu können?
-
die werte werden immer so errechnet:
bspw von X bis heute, von Y bis heute, von Z bis heute usw.
X,Y,Z stehen für anfang des tages, anfang der woche, anfang des monats usw usw,
der wert des vergangenen monats sowie der vergangenen woche wird mittels cron geschrieben.
um jetzt eine auflistung aller monate zu bekommen gibt es mehrere ansätze. das simpelste dürfte m.e. das arbeiten mit crons sein. zumal eine bereits vorhandene rule einfach nur erweitert werden müsste.
bspw wenn letzter tag eines monats + kurz vor tageswechsel -> wert einem dummy (davon braucht man natürlich für jeden monat einen) übergeben.Ist das sehr aufwändig die Werte jedes Monats zu speichern um dann vielleicht sich jeden Monat über das Jahr anschauen zu können?
für dich ja, für mich sicher weniger. allerdings bin ich momentan mit corona beschäftigt. wenn mein befinden es zulässt, dann mach ich das evt am we.
-
-
für dich ja, für mich sicher weniger. allerdings bin ich momentan mit corona beschäftigt. wenn mein befinden es zulässt, dann mach ich das evt am we.
Na dann wünsche ich Dir besonders Gute Besserung!
-
Ist das sehr aufwändig die Werte jedes Monats zu speichern um dann vielleicht sich jeden Monat über das Jahr anschauen zu können?
zusätzliche items anlegen
Code
Alles anzeigenNumber Strompreis_Januar "Stromkosten Januar [%.2f €]" <price> (Verbrauchsberechnung) Number Strompreis_Februar "Stromkosten Februar [%.2f €]" <price> (Verbrauchsberechnung) Number Strompreis_Maerz "Stromkosten März [%.2f €]" <price> (Verbrauchsberechnung) Number Strompreis_April "Stromkosten April [%.2f €]" <price> (Verbrauchsberechnung) Number Strompreis_Mai "Stromkosten Mai [%.2f €]" <price> (Verbrauchsberechnung) Number Strompreis_Juni "Stromkosten Juni [%.2f €]" <price> (Verbrauchsberechnung) Number Strompreis_Juli "Stromkosten Juli [%.2f €]" <price> (Verbrauchsberechnung) Number Strompreis_August "Stromkosten August [%.2f €]" <price> (Verbrauchsberechnung) Number Strompreis_September "Stromkosten September [%.2f €]" <price> (Verbrauchsberechnung) Number Strompreis_Oktober "Stromkosten Oktober [%.2f €]" <price> (Verbrauchsberechnung) Number Strompreis_November "Stromkosten November [%.2f €]" <price> (Verbrauchsberechnung) Number Strompreis_Dezember "Stromkosten Dezember [%.2f €]" <price> (Verbrauchsberechnung)
rules:
die vorletzte rule aus diesem beitrag Hilfe bei der Berechnung von Stromverbrauchswerten gesuchtCoderule "Stromkostenberechnung letzten monat" when Time cron "50 59 23 L * ? *" then Verbrauch_letzten_Monat.postUpdate(Verbrauch_gesamt_Monat.state) Verbrauch_letzten_Monat_Preis.postUpdate(Verbrauch_gesamt_Monat_Preis.state) end
ersetzen mit
Code
Alles anzeigenrule "stromkosten letzten monat" when Time cron "50 59 23 L * ? *" then var monat = now.getMonthValue Verbrauch_letzten_Monat.postUpdate(Verbrauch_gesamt_Monat.state) Verbrauch_letzten_Monat_Preis.postUpdate(Verbrauch_gesamt_Monat_Preis.state) if (monat == 1){ Strompreis_Januar.postUpdate(Verbrauch_gesamt_Monat_Preis.state) } if (monat == 2){ Strompreis_Februar.postUpdate(Verbrauch_gesamt_Monat_Preis.state) } if (monat == 3){ Strompreis_Maerz.postUpdate(Verbrauch_gesamt_Monat_Preis.state) } if (monat == 4){ Strompreis_April.postUpdate(Verbrauch_gesamt_Monat_Preis.state) } if (monat == 5){ Strompreis_Mai.postUpdate(Verbrauch_gesamt_Monat_Preis.state) } if (monat == 6){ Strompreis_Juni.postUpdate(Verbrauch_gesamt_Monat_Preis.state) } if (monat == 7){ Strompreis_Juli.postUpdate(Verbrauch_gesamt_Monat_Preis.state) } if (monat == 8){ Strompreis_August.postUpdate(Verbrauch_gesamt_Monat_Preis.state) } if (monat == 9){ Strompreis_September.postUpdate(Verbrauch_gesamt_Monat_Preis.state) } if (monat == 10){ Strompreis_Oktober.postUpdate(Verbrauch_gesamt_Monat_Preis.state) } if (monat == 11){ Strompreis_November.postUpdate(Verbrauch_gesamt_Monat_Preis.state) } if (monat == 12){ Strompreis_Dezember.postUpdate(Verbrauch_gesamt_Monat_Preis.state) } end
in die sitemap dann
Code
Alles anzeigenFrame label="Monatsstatistik" visibility=[Strompreis_November != NULL] { Text item=Strompreis_Januar visibility=[Strompreis_Januar != NULL] Text item=Strompreis_Februar visibility=[Strompreis_Februar != NULL] Text item=Strompreis_Maerz visibility=[Strompreis_Maerz != NULL] Text item=Strompreis_April visibility=[Strompreis_April != NULL] Text item=Strompreis_Mai visibility=[Strompreis_Mai != NULL] Text item=Strompreis_Juni visibility=[Strompreis_Juni != NULL] Text item=Strompreis_Juli visibility=[Strompreis_Juli != NULL] Text item=Strompreis_August visibility=[Strompreis_August != NULL] Text item=Strompreis_September visibility=[Strompreis_September != NULL] Text item=Strompreis_Oktober visibility=[Strompreis_Oktober != NULL] Text item=Strompreis_November visibility=[Strompreis_November != NULL] Text item=Strompreis_Dezember visibility=[Strompreis_Dezember != NULL] }
visibility ungleich NULL im frame ist auf november gesetzt, da ich annehme, dass du das diesen monat übernimmst.
ab dem nächsten monatsstart bekommst du dann den ersten eintrag deiner jahresübersicht angezeigt. -
-
Super, ich bin ja erstaunt was Du trotz Krankheit hinzauberst!
Vielen Dank!
Das hätte ich wirklich nicht so schnell hinbekommen.
Eher nie!Ich kriege also nach Mitternacht den bisherigen November verbrauch angezeigt? Oder erst wenn der November zu Ende ist?
-
Am ersten Dezember wird der November angezeigt, ab ersten Januar der Dezember usw.
-
-
Hallo ins Forum!
Ich finde den Fehler bei folgendem Problem nicht und würde mich über Eure Hilfe freuen:
ich möchte den bisherigen Gesamtagesverbrauch (und den momentanen Gesamtverbrauch) meiner 5 Shelly Plug S errechnen. Dazu würde es mir reichen, wenn ich die Gesamtverbräuche der Shellys einfach addiere, den Rest soll Grafana erledigen.
Dafür habe ich händisch 2 items und eine Rule angelegt (ich nutze openhabian 3.4.0,Shelly-Binding, InfluxDB, die ShellyPlugS_xxx-items habe ich über das ui von OH3 angelegt)
Für den momentanen Verbrauch klappt das, ich erhalte ein item "Strom_aktuell_alle" welches die gewünschte Summe (Werte scheinen plausibel) enthält und das kann ich in der Sitemap oder Grafana verwenden.
Bei den bisherigen Gesamtverbräuchen klappt die Rechnung in der Rule (keine Fehlermeldungen im [definition='1','0']log[/definition]) nicht, es resultieren 9 stellige Werte wenn ich z.Bsp. auch nur Werte von 2 Shellys addieren lasse, z.Bsp 13,4+1,2 =205585200,0
hier die 2 items:
CodeNumber Strom_aktuell_alle "Stromverbrauch aktuell alle" <energy> Number Strom_gesamt_alle "Stromverbrauch gesamt alle" <energy>
hier die Rule:Code
Alles anzeigenrule "Summe aktueller Stromverbrauch" //// Stromverbräuche aller ShellyPlugS aufaddieren (da in Grafana nicht möglich) when Item ShellyPlugS1_Stromverbrauch changed or Item ShellyPlugS2_Stromverbrauch changed or Item ShellyPlugS3_Stromverbrauch changed or Item ShellyPlugS4_Stromverbrauch changed or Item ShellyPlugS5_Stromverbrauch changed then var S1=ShellyPlugS1_Stromverbrauch.state as Number // Stromverbrauch ShellyPlugS1 in Variable S1 var S2=ShellyPlugS2_Stromverbrauch.state as Number // Stromverbrauch ShellyPlugS2 in Variable S2 var S3=ShellyPlugS3_Stromverbrauch.state as Number // Stromverbrauch ShellyPlugS3 in Variable S3 var S4=ShellyPlugS4_Stromverbrauch.state as Number // Stromverbrauch ShellyPlugS4 in Variable S4 var S5=ShellyPlugS5_Stromverbrauch.state as Number // Stromverbrauch ShellyPlugS5 in Variable S5 var S999=S1+S2+S3+S4+S5 // alle aufaddieren und in S999 ablegen Strom_aktuell_alle.postUpdate(S999) // Summe nach Strom_aktuell_alle - Item posten/speichern end rule "Summe gesamter Stromverbrauch" //// Gesamt-Stromverbräuche aller ShellyPlugS aufaddieren (da in Grafana nicht möglich) when Item ShellyPlugS1_Gesamtverbrauch changed or Item ShellyPlugS2_Gesamtverbrauch changed or Item ShellyPlugS3_Gesamtverbrauch changed or Item ShellyPlugS4_Gesamtverbrauch changed or Item ShellyPlugS5_Gesamtverbrauch changed then //var G999="0" var G1=ShellyPlugS1_Gesamtverbrauch.state as Number // Stromverbrauch ShellyPlugS1 in Variable S1 var G2=ShellyPlugS2_Gesamtverbrauch.state as Number // Stromverbrauch ShellyPlugS2 in Variable S2 var G3=ShellyPlugS3_Gesamtverbrauch.state as Number // Stromverbrauch ShellyPlugS3 in Variable S3 var G4=ShellyPlugS4_Gesamtverbrauch.state as Number // Stromverbrauch ShellyPlugS4 in Variable S4 var G5=ShellyPlugS5_Gesamtverbrauch.state as Number // Stromverbrauch ShellyPlugS5 in Variable S5 var G999=G1 + G2//+G3+G4+G5 // alle aufaddieren und in G999 ablegen Strom_gesamt_alle.postUpdate(G999) // Summe nach Strom_gesamt_alle - Item posten/speichern end
Kann mir jemand einen Tip geben?
VG hot-doc -
Hi
Schreibe Deine Variablenzuweisung einmal statt
var S1=ShellyPlugS1_Stromverbrauch.state as Number
nach diesem Schema
var S1=(ShellyPlugS1_Stromverbrauch.state as Number).floatValueDann kannst Du auch mit dem Wert rechnen
Update:
Oder Du machst Dir das Leben einfacher und legst ein Item vom Typ Gruppe an.
Memberbasetype ist Number:Power
Aggregationfunction ist SUMDann hast Du alles zusammen und muss nicht rechnen
-
-
Genau. Einfach mit SUM gruppieren. Da ist gar keine rule zum zusammenrechnen notwendig.
-
Danke! das hat geklappt:
mir ist das so für meine Zwecke im Moment ausreichend, bin noch mit der Migration von OH2 -> OH3 beschäftigt und froh über jedes Thing/item welches ich zum Laufen bekomm.
Mich wundert aber, warum es bei den momentanen Verbräuchen wie unterstehend klappt (Kanal shelly:shellyplugs:XXXXXXXXXXX:meter#currentWatts (Number:Power))
bei den Gesamtverbräuchen (oberes Quellcodebeispiel) aber nicht (Kanal: shelly:shellyplugs:XXXXXXXXXXXX:meter#totalKWH (Number:Energy))
Vielleicht liegts an den Einheiten?
In jedem Fall vielen Dank Euch! -
-
mir ist das so für meine Zwecke im Moment ausreichend, bin noch mit der Migration von OH2 -> OH3 beschäftigt und froh über jedes Thing/item welches ich zum Laufen bekomm.
ich verstehe es natürlich wenn du das so laufen lassen willst. es ist aber halt komplett umständlich. das hat auch nichts mit oh2 oder oh3 zu tun. gruppieren und in der gruppe summe ausgeben ging auch schon mit oh2. du ersparst dir da die komplette rule und rechnerei. einfach nur ne sum-gruppe anlegen, die verbrauchskanäle in die grupper...fertig.
-
.. es ist aber halt komplett umständlich. das hat auch nichts mit oh2 oder oh3 zu tun.Das weiß ich, die Shellys hatte ich unter OH2 noch nicht. Ich versuch mich nur gerade durch OH3 durchzubeißen, hänge halt noch an meinen .items .rules Dateien und bin noch nicht ganz durch die ganzen neuen Bezeichner (Model ect.) durchgestiegen
Deswegen habe ich mal den Vorschlag von Euch beiden versuchtUpdate:
Oder Du machst Dir das Leben einfacher und legst ein Item vom Typ Gruppe an.
Memberbasetype ist Number:Power
Aggregationfunction ist SUMDann hast Du alles zusammen und muss nicht rechnen
und stecke wieder fest: die Gruppe g_Stromverbrauch (Screenshot) hat jetzt den Wert UNDEV obwohl alle Gruppenmitglieder einen Wert haben, Memberbasetyp und Aggregationfunction hab ich wie vorgeschlagen.
-
-
Ich habe bei mir einmal eine Gruppe angelegt und ebenfalls 4 Items mit den Gesamtverbräuchen (Shelly PlugS) eingefügt.
Die Gesamtverbräuche sind vom Typ Number:Energy, also wird auch die Gruppe entsprechend konfiguriertUnd dann vier Items mit den Gesamverbräuchen der Shelly PlugS eingefügt
Wie sieht Deine Konfig aus?
-
Ich wiederhole mich hier
Du wirst mit dem Wert aus Number.Energy nicht wirklich rechnen können
Also machen wir das so
var S1=((ShellyPlugS1_Stromverbrauch.state as Number).floatValue)
Dann klappt das auch mit der Mutti -
-
Ich habs: in der Config der Gruppe hatte ich den Typ Number:Power statt Number:Energy <--- auf letzteres geändert , jetzt klappt's, danke!
(auf was man alles achten muss ...)Ich wiederhole mich hierDu wirst mit dem Wert aus Number.Energy nicht wirklich rechnen können
Also machen wir das so
var S1=((ShellyPlugS1_Stromverbrauch.state as Number).floatValue)
Dann klappt das auch mit der Mutti
Das stimmt, habe es auch so für Number.Energy umgesetzt, wunderte mich nur, dass es mit Number.Power ohne .floatValue geht
Problem gelöst, danke ! -
@horschte, sag mal lese ich die rule richtig, das der Wochen und Monatswert immer der/des aktuellen Woche / des aktuellen Monats ist?
Ist das sehr aufwändig die Werte jedes Monats zu speichern um dann vielleicht sich jeden Monat über das Jahr anschauen zu können?
Aus gegebenem Anlass (SD Karte und RaspPi kaputt, keine ordentliche Sicherung) beschäftige ich mich gerade mal wieder etwas mit der Sache.
Wie ist das eigentlich mit den Monatswerten nach einem Jahr? Werden die dann überschrieben? -
-
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!