Seite 1 von 4
Gas-Zählerstand in manuell in openHab eingeben
Verfasst: 12. Okt 2022 12:30
von Locke
Hi,
ich habe ein Reedkontakt an meinem Gaszähler montiert, Software (Arduino) habe ich aus dem Netz auf einem Wemos D1 mini. Es läuft auch und ich kann mir den Gas Verbrauch in Grafana auch anzeigen lassen. Leider hat der Arduino Sketch es nicht mit drin den Aktuellen Zählerstand mit anzugeben und ich bin da überfordert.
Kann man ein item mit dem Zählerstand anlegen und mit hochzählen lassen, so das man den Aktuellen Zählerstand auch in Grafana mit einbinden kann ?
In openHab habe ich Thing, Channel, item dafür angelegt. Es wird vom Reedkontakt per mqtt (stateTopic: gas/digital) pro Impuls immer "1" gesendet und "0".
Die Daten werden direkt in influxdb geschrieben (ist im Sketch schon mit angegeben).
läuft auf System Raspberry Pi 4, 2GB RAM, openHAB 3.3.0
Code: Alles auswählen
UID: mqtt:topic:Broker_163:GAS_Zaehler
label: GAS Zähler
thingTypeUID: mqtt:topic
configuration: {}
bridgeUID: mqtt:broker:Broker_163
channels:
- id: GAS_Zaehler
channelTypeUID: mqtt:number
label: GAS Zähler
description: ""
configuration:
stateTopic: gas/digital
- id: GAS_Zaehler_Tagesverbrauch
channelTypeUID: mqtt:number
label: GAS Zähler Tagesverbrauch
description: ""
configuration:
stateTopic: gas/tagesstand
- id: GAS_Zaehler_Analog
channelTypeUID: mqtt:number
label: GAS Zähler Analog
description: ""
configuration:
stateTopic: gas/analog
Danke
Re: Gas-Zählerstand in manuell in openHab eingeben
Verfasst: 13. Okt 2022 17:02
von Locke
Hi,
ich habe von dem Ersteller des Sketches eine Antwort bekommen:
Hi. Ich verwende die Daten hauptsächlich in openHAB und berechne auch da ein paar Sachen damit. Dort mache ich auch die Summierung und Auswertungen:
Code: Alles auswählen
var Number Letzter_abgelesener_Zaehlerstand = 14950.70
var Number Einheit = 0.01
var Number Gaspreis_Monat = 200.1 // € pro Jahr
var Number Gaspreis_Tag = 54.82191780821918 // ct pro Tag
var Number Gaspreis_kWh = 19.269 // ct pro kWh
var Number Gaspreis_zZahl = 0.9645 // z Zahl
var Number Gaspreis_Brennwert = 10.293 //Brennwert
rule "Increment Gas Meter"
when
Item GASZahler_GASZahler changed from 0 to 1
then
// Aktuellen Zaehlerstand setzten - die folgenden drei Zeilen auskommentieren und anschließend einen Zählimpuls auslösen damit das Regelwerk einmal durchlaufen wird!
/**/ if (Gaszaehler_Stand.state != NULL && Gaszaehler_Stand.state < Letzter_abgelesener_Zaehlerstand) { /**/ postUpdate(Gaszaehler_Stand, (Letzter_abgelesener_Zaehlerstand)) /**/ } postUpdate(Gaszaehler_Heute, (Gaszaehler_Heute.state as DecimalType + Einheit)) postUpdate(Gaszaehler_Stand, (Gaszaehler_Stand.state as DecimalType + Einheit)) var Faktor = Gaspreis_zZahl * Gaspreis_Brennwert * Gaspreis_kWh postUpdate(Gaskosten_Heute, ((Gaszaehler_Heute.state as DecimalType * Faktor) + Gaspreis_Tag) / 100) end
Ich habe es geändert mit meinen items und bekomme aber immer die Fehlermeldung:
Code: Alles auswählen
[ERROR] [internal.handler.ScriptActionHandler] – Script execution of rule with UID ‚Gaszaehler_Stand‘ failed: var Number Letzter_abgelesener_Zaehlerstand = 14950.70
Könnt ihr mir weiterhelfen ?
Ich bekomme es einfach nicht hin
Re: Gas-Zählerstand in manuell in openHab eingeben
Verfasst: 13. Okt 2022 19:00
von udo1toni
Ist klar, dass es sich um eine DSL Rule handelt, die in dieser Form zwingend über eine rules Datei angelegt werden muss?
Re: Gas-Zählerstand in manuell in openHab eingeben
Verfasst: 13. Okt 2022 21:20
von Locke
Hi Udo,
ja habe ich mir gedacht und es auch damit versucht, leider ohne Erfolg. Ich habe den Ersteller auch nochmal angeschrieben und um Hilfe gebeten, da er es bei sich so am laufen hat. Ich kann ja nur lernen dabei, es nur frustrierend wenn es irgendwie nicht klappt trotz vorgefertigten Rules usw……
Re: Gas-Zählerstand in manuell in openHab eingeben
Verfasst: 13. Okt 2022 22:49
von peter-pan
Ich bin mir zwar nicht sicher, aber es könnte sein, dass die Art der "Manipulation" der Item-States in der Regel nicht so funktionieren, wie es beabsichtigt ist.
Schau mal hier.
Ich habe die "postUpdate"-Methoden etwas verändert. Als Trigger habe ich ein Dummy-Item-Switch genommen und den "Then-Teil" etwas "gehübscht", also aus einem Schlangensatz, einzelne Zeilenhäppchen gemacht und noch ein paar Logs eingebaut, damit man sieht, wenn und ob dir Regel auch triggert.
Das sieht dann so aus:
Code: Alles auswählen
var Number Letzter_abgelesener_Zaehlerstand = 1495.70
var Number Einheit = 0.01
var Number Gaspreis_Monat = 200.1 // € pro Jahr
var Number Gaspreis_Tag = 54.82191780821918 // ct pro Tag
var Number Gaspreis_kWh = 19.269 // ct pro kWh
var Number Gaspreis_zZahl = 0.9645 // z Zahl
var Number Gaspreis_Brennwert = 10.293 //Brennwert
rule "Increment Gas Meter"
when
Item Dummy_6 changed from OFF to ON
then
logInfo("Zählerstand","Test aktiviert 1")
// Aktuellen Zaehlerstand setzten - die folgenden drei Zeilen auskommentieren und anschließend einen Zählimpuls auslösen damit das Regelwerk einmal durchlaufen wird!
/**/ if (Gaszaehler_Stand.state != NULL && Gaszaehler_Stand.state < Letzter_abgelesener_Zaehlerstand) {
logInfo("Zählerstand","Bedingung erfüllt")
/**/ Gaszaehler_Stand.postUpdate(Letzter_abgelesener_Zaehlerstand) /**/ }
Gaszaehler_Heute.postUpdate(Gaszaehler_Heute.state as DecimalType + Einheit)
Gaszaehler_Stand.postUpdate(Gaszaehler_Stand.state as DecimalType + Einheit)
var Faktor = Gaspreis_zZahl * Gaspreis_Brennwert * Gaspreis_kWh
postUpdate(Gaskosten_Heute, ((Gaszaehler_Heute.state as DecimalType * Faktor) + Gaspreis_Tag) / 100)
logInfo("Zählerstand","Test aktiviert 2")
end
Die Regel ist dann bei mir auch durch gelaufen:
Code: Alles auswählen
2022-10-13 22:46:17.114 [INFO ] [penhab.core.model.script.Zählerstand] - Test aktiviert 1
2022-10-13 22:46:17.131 [INFO ] [penhab.core.model.script.Zählerstand] - Test aktiviert 2
Re: Gas-Zählerstand in manuell in openHab eingeben
Verfasst: 14. Okt 2022 12:13
von Locke
Hi Peter,
danke für Deine Unterstützung.
Ich habe die Regel von Dir kopiert und bei mir getestet auch mit einem Dummy Schalter und sie läuft hier bei mir nicht.
Die Regel habe ich in VSC erstellt.
Beim ausführen kommt die Fehlermeldung:
Code: Alles auswählen
[ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'Increment_Gas_Meter-1' failed: Could not cast NULL to org.openhab.core.library.types.DecimalType; line 56, column 37, length 37 in Increment_Gas_Meter
Hast Du eine Erklärung dafür warum es bei Dir läuft und bei mir nicht ?
Danke
Re: Gas-Zählerstand in manuell in openHab eingeben
Verfasst: 14. Okt 2022 12:37
von peter-pan
Locke hat geschrieben: ↑14. Okt 2022 12:13
Hast Du eine Erklärung dafür warum es bei Dir läuft und bei mir nicht ?
....so aus der "Lameng" nicht
Was steht denn da bei dir in der Zeile 56 der Regel ? Du weiß schon, dass alle globalen Variablen vor der ersten Regel in deinem Rules-File stehen müssen !!!
Re: Gas-Zählerstand in manuell in openHab eingeben
Verfasst: 14. Okt 2022 13:11
von Locke
Hi,
in der Regel Zeile 56 steht:
Code: Alles auswählen
Gaszaehler_Heute.postUpdate(Gaszaehler_Heute.state as DecimalType + Einheit)
Die Regel sieht so aus:
Code: Alles auswählen
var Number Letzter_abgelesener_Zaehlerstand = 1495.70
var Number Einheit = 0.01
var Number Gaspreis_Monat = 200.1 // € pro Jahr
var Number Gaspreis_Tag = 54.82191780821918 // ct pro Tag
var Number Gaspreis_kWh = 19.269 // ct pro kWh
var Number Gaspreis_zZahl = 0.9645 // z Zahl
var Number Gaspreis_Brennwert = 10.293 //Brennwert
rule "Increment Gas Meter"
when
Item DummySchalter_TestSchalter changed from OFF to ON
then
logInfo("Zählerstand","Test aktiviert 1")
// Aktuellen Zaehlerstand setzten - die folgenden drei Zeilen auskommentieren und anschließend einen Zählimpuls auslösen damit das Regelwerk einmal durchlaufen wird!
/**/ if (Gaszaehler_Stand.state != NULL && Gaszaehler_Stand.state < Letzter_abgelesener_Zaehlerstand) {
logInfo("Zählerstand","Bedingung erfüllt")
/**/ Gaszaehler_Stand.postUpdate(Letzter_abgelesener_Zaehlerstand) /**/ }
Gaszaehler_Heute.postUpdate(Gaszaehler_Heute.state as DecimalType + Einheit)
Gaszaehler_Stand.postUpdate(Gaszaehler_Stand.state as DecimalType + Einheit)
var Faktor = Gaspreis_zZahl * Gaspreis_Brennwert * Gaspreis_kWh
postUpdate(Gaskosten_Heute, ((Gaszaehler_Heute.state as DecimalType * Faktor) + Gaspreis_Tag) / 100)
logInfo("Zählerstand","Test aktiviert 2")
end
an dieser Stelle meckert er
Gaszaehler_Heute.postUpdate
(Gaszaehler_Heute.state as DecimalType + Einheit)
Re: Gas-Zählerstand in manuell in openHab eingeben
Verfasst: 14. Okt 2022 14:05
von peter-pan
Es ist von meiner Seite aus auch mit deiner Regel gelaufen, obwohl noch ein kleiner Schönheitsfehler (schon von mir) enthalten war:
Trotzdem läuft die Regel bei mir.
Was für einen Status hat denn das Item "Gaszaehler_Heute". Evtl. müsste man das noch initialisieren.
Also noch ein Versuch:
Code: Alles auswählen
var Number Letzter_abgelesener_Zaehlerstand = 1495.70
var Number Einheit = 0.01
var Number Gaspreis_Monat = 200.1 // € pro Jahr
var Number Gaspreis_Tag = 54.82191780821918 // ct pro Tag
var Number Gaspreis_kWh = 19.269 // ct pro kWh
var Number Gaspreis_zZahl = 0.9645 // z Zahl
var Number Gaspreis_Brennwert = 10.293 //Brennwert
rule "Increment Gas Meter"
when
Item DummySchalter_TestSchalter changed from OFF to ON
then
logInfo("Zählerstand","Test aktiviert 1")
if (!(Gaszaehler_Heute.state instanceof Number)) {
logInfo("Zählerstand","Test Gaszaehler_Heute wird initialisiert")
Gaszaehler_Heute.postUpdate(0)
}
if (!(Gaszaehler_Stand.state instanceof Number)) {
logInfo("Zählerstand","Test Gaszaehler_Stand wird initialisiert")
Gaszaehler_Stand.postUpdate(0)
}
// Aktuellen Zaehlerstand setzten - die folgenden drei Zeilen auskommentieren und anschließend einen Zählimpuls auslösen damit das Regelwerk einmal durchlaufen wird!
/**/ if (Gaszaehler_Stand.state != NULL && Gaszaehler_Stand.state < Letzter_abgelesener_Zaehlerstand) {
logInfo("Zählerstand","Bedingung erfüllt")
/**/ Gaszaehler_Stand.postUpdate(Letzter_abgelesener_Zaehlerstand) /**/ }
Gaszaehler_Heute.postUpdate(Gaszaehler_Heute.state as DecimalType + Einheit)
Gaszaehler_Stand.postUpdate(Gaszaehler_Stand.state as DecimalType + Einheit)
var Faktor = Gaspreis_zZahl * Gaspreis_Brennwert * Gaspreis_kWh
postUpdate(Gaskosten_Heute, ((Gaszaehler_Heute.state as DecimalType * Faktor) + Gaspreis_Tag) / 100)
logInfo("Zählerstand","Test aktiviert 2")
end
Jetzt wird also noch abgefragt, ob die Items auch tatsächlich einen Wert enthalten.
Re: Gas-Zählerstand in manuell in openHab eingeben
Verfasst: 14. Okt 2022 20:45
von Locke
Hi Peter,
jetzt mit Deiner letzten umgebauten Regel funktioniert es
Ich danke Dir für diese tolle Unterstützung.
Hast Du denn jetzt eine Idee warum es vorher nicht funktioniert hat bei mir ?
Ihr seid echt super hier.
Danke