Hier zeige ich euch wie ihr den smarten Gaszähler *iQ gasGuard* in openHAB integrieren könnt. Das könnte dann wie folgt aussehen:
Vorraussetzungen:
- Ein *iQ gasGuard*
- openHAB mit einem MQTT Broker
- WLAN 😉
Die benötigten Things (.things):
Thing topic gasGuard "gasGuard" @ "MQTT" {
Channels:
Type number : chipid "Chip-ID" [ stateTopic="tele/gasGuard/WERTE", transformationPattern="JSONPATH:$.chipid"]
Type string : ggid "gasGuard-ID" [ stateTopic="tele/gasGuard/WERTE", transformationPattern="JSONPATH:$.ggid"]
Type number : med "Tagesdurchschnitt" [ stateTopic="tele/gasGuard/WERTE", transformationPattern="JSONPATH:$.med"]
Type number : counter "Zählerstand" [ stateTopic="tele/gasGuard/WERTE", transformationPattern="JSONPATH:$.counter"]
Type number : cm "Kubikmeter-Impuls" [ stateTopic="tele/gasGuard/WERTE", transformationPattern="JSONPATH:$.cm"]
Type number : ts "Verbrauch heute" [ stateTopic="tele/gasGuard/WERTE", transformationPattern="JSONPATH:$.ts"]
Type number : ts_p "Verbrauch gestern" [ stateTopic="tele/gasGuard/WERTE", transformationPattern="JSONPATH:$.ts_p"]
Type number : ms "Verbauch akt. Monat" [ stateTopic="tele/gasGuard/WERTE", transformationPattern="JSONPATH:$.ms"]
Type number : ms_p "Verbrauch Vormonat" [ stateTopic="tele/gasGuard/WERTE", transformationPattern="JSONPATH:$.ms_p"]
Type number : js "Verbrauch akt. Jahr" [ stateTopic="tele/gasGuard/WERTE", transformationPattern="JSONPATH:$.js"]
Type number : js_p "Verbrauch Vorjahr" [ stateTopic="tele/gasGuard/WERTE", transformationPattern="JSONPATH:$.js_p"]
Die benötigten Items (.items):
Number KE_Gaszaehler_chipid "Chip-ID" <text> {channel="mqtt:topic:mqttbroker:gasGuard:chipid"}
String KE_Gaszaehler_ggid "gasGuard-ID" <text> {channel="mqtt:topic:mqttbroker:gasGuard:ggid"}
Number KE_Gaszaehler_med "Tagesdurchschnitt [%.2f m³]" <gas> {channel="mqtt:topic:mqttbroker:gasGuard:med"}
Number KE_Gaszaehler_counter "Zählerstand [%.3f m³]" <gas> {channel="mqtt:topic:mqttbroker:gasGuard:counter"}
Number KE_Gaszaehler_cm "Kubikmeter-Impuls [%.2f m³]" <gas> {channel="mqtt:topic:mqttbroker:gasGuard:cm"}
Number KE_Gaszaehler_ts "Verbrauch heute [%.2f m³]" <gas> {channel="mqtt:topic:mqttbroker:gasGuard:ts"}
Number KE_Gaszaehler_ts_p "Verbrauch gestern [%.2f m³]" <gas> {channel="mqtt:topic:mqttbroker:gasGuard:ts_p"}
Number KE_Gaszaehler_ms "Verbauch akt. Monat [%.2f m³]" <gas> {channel="mqtt:topic:mqttbroker:gasGuard:ms"}
Number KE_Gaszaehler_ms_p "Verbrauch Vormonat [%.2f m³]" <gas> {channel="mqtt:topic:mqttbroker:gasGuard:ms_p"}
Number KE_Gaszaehler_js "Verbrauch akt. Jahr [%.2f m³]" <gas> {channel="mqtt:topic:mqttbroker:gasGuard:js"}
Number KE_Gaszaehler_js_p "Verbrauch Vorjahr [%.2f m³]" <gas> {channel="mqtt:topic:mqttbroker:gasGuard:js_p"}
Number KE_Gaszaehler_ts_kosten "Kosten heute [%.2f €]" <piggybank>
Number KE_Gaszaehler_ts_p_kosten "Kosten gestern [%.2f €]" <piggybank>
Number KE_Gaszaehler_ms_kosten "Kosten akt. Monat [%.2f €]" <piggybank>
Number KE_Gaszaehler_ms_p_kosten "Kosten Vormonat [%.2f €]" <piggybank>
Number KE_Gaszaehler_js_kosten "Kosten akt. Jahr [%.2f €]" <piggybank>
Number KE_Gaszaehler_js_p_kosten "Kosten Vorjahr [%.2f €]" <piggybank>
Number KE_Gaszaehler_ts_kwh "Verbrauch heute [%.2f kWh]" <gas>
Number KE_Gaszaehler_ts_p_kwh "Verbrauch gestern [%.2f kWh]" <gas>
Number KE_Gaszaehler_ms_kwh "Verbauch akt. Monat [%.2f kWh]" <gas>
Number KE_Gaszaehler_ms_p_kwh "Verbrauch Vormonat [%.2f kWh]" <gas>
Number KE_Gaszaehler_js_kwh "Verbrauch akt. Jahr [%.2f kWh]" <gas>
Number KE_Gaszaehler_js_p_kwh "Verbrauch Vorjahr [%.2f kWh]" <gas>
DateTime KE_Gaszaehler_LetzteUpdate "Letzte Gasentnahme: [%1$td %1$tb at %1$tR]" <calendar>
Die Rules (.rules) Datei erstellen – hier bitte die Daten oben mit euren austauchen:
var Number Gaspreis_Tag = 55.38082191780822 // ct pro Tag
var Number Gaspreis_kWh = 12.87 // ct pro kWh
var Number Gaspreis_zZahl = 0.9561 // Zustandszahl
var Number Gaspreis_Brennwert = 10.298 // Brennwert
rule "Gaszaehler Kosten und Verbrauch berechnen"
when
Item KE_Gaszaehler_ts changed
then
logInfo("gas.rules", "Berechne Gas Kosten und Verbrauch - Start")
var Faktor = Gaspreis_zZahl * Gaspreis_Brennwert * Gaspreis_kWh
KE_Gaszaehler_ts_kosten.postUpdate(((KE_Gaszaehler_ts.state as DecimalType * Faktor) + Gaspreis_Tag) / 100)
KE_Gaszaehler_ts_p_kosten.postUpdate(((KE_Gaszaehler_ts_p.state as DecimalType * Faktor) + Gaspreis_Tag) / 100)
KE_Gaszaehler_ms_kosten.postUpdate(((KE_Gaszaehler_ms.state as DecimalType * Faktor) + Gaspreis_Tag) / 100)
KE_Gaszaehler_ms_p_kosten.postUpdate(((KE_Gaszaehler_ms_p.state as DecimalType * Faktor) + Gaspreis_Tag) / 100)
KE_Gaszaehler_js_kosten.postUpdate(((KE_Gaszaehler_js.state as DecimalType * Faktor) + Gaspreis_Tag) / 100)
KE_Gaszaehler_js_p_kosten.postUpdate(((KE_Gaszaehler_js_p.state as DecimalType * Faktor) + Gaspreis_Tag) / 100)
KE_Gaszaehler_ts_kwh.postUpdate(KE_Gaszaehler_ts.state as DecimalType * Gaspreis_Brennwert * Gaspreis_zZahl)
KE_Gaszaehler_ts_p_kwh.postUpdate(KE_Gaszaehler_ts_p.state as DecimalType * Gaspreis_Brennwert * Gaspreis_zZahl)
KE_Gaszaehler_ms_kwh.postUpdate(KE_Gaszaehler_ms.state as DecimalType * Gaspreis_Brennwert * Gaspreis_zZahl)
KE_Gaszaehler_ms_p_kwh.postUpdate(KE_Gaszaehler_ms_p.state as DecimalType * Gaspreis_Brennwert * Gaspreis_zZahl)
KE_Gaszaehler_js_kwh.postUpdate(KE_Gaszaehler_js.state as DecimalType * Gaspreis_Brennwert * Gaspreis_zZahl)
KE_Gaszaehler_js_p_kwh.postUpdate(KE_Gaszaehler_js_p.state as DecimalType * Gaspreis_Brennwert * Gaspreis_zZahl)
logInfo("gas.rules", "Berechne Gas Kosten und Verbrauch - Ende")
end
rule "Letztes Update des Gaszaehlers"
when
Item KE_Gaszaehler_counter changed
then
logInfo("gas.rules", "Aktualisiere letzte Gasentnahme - Start")
postUpdate(KE_Gaszaehler_LetzteUpdate, new DateTimeType())
logInfo("gas.rules", "Aktualisiere letzte Gasentnahme - Ende")
end
Die Sitemap (.sitemap) anpassen bzw. ergänzen:
Text label="Gaszähler" {
Frame label="Allgemein" {
Default item=KE_Gaszaehler_LetzteUpdate
Default item=KE_Gaszaehler_counter
Default item=KE_Gaszaehler_med
Default item=KE_Gaszaehler_cm
}
Frame label="Verbrauch in m³" {
Default item=KE_Gaszaehler_ts
Default item=KE_Gaszaehler_ts_p
Default item=KE_Gaszaehler_ms
Default item=KE_Gaszaehler_ms_p
Default item=KE_Gaszaehler_js
Default item=KE_Gaszaehler_js_p
}
Frame label="Verbrauch in €" {
Default item=KE_Gaszaehler_ts_kosten
Default item=KE_Gaszaehler_ts_p_kosten
Default item=KE_Gaszaehler_ms_kosten
Default item=KE_Gaszaehler_ms_p_kosten
Default item=KE_Gaszaehler_js_kosten
Default item=KE_Gaszaehler_js_p_kosten
}
Frame label="Verbrauch in kWh" {
Default item=KE_Gaszaehler_ts_kwh
Default item=KE_Gaszaehler_ts_p_kwh
Default item=KE_Gaszaehler_ms_kwh
Default item=KE_Gaszaehler_ms_p_kwh
Default item=KE_Gaszaehler_js_kwh
Default item=KE_Gaszaehler_js_p_kwh
}
}
MQTT Einstellungen im iQ gasGuard Webinterface setzen:
- Das Webinterface vom iQ gasGuard aufrufen
- oben rechts auf „Zugangsdaten“ klicken
- bei MQTT die Einstellungen entsperren (orangene Symbol)
- und die Felder ausfüllen, z.B. so:
: 192.168.22.68 < euer MQTT Broker (i.d.R. der openHAB Server)
: tele/gasGuard/WERTE
: maffimqtt
: dasgeheimePasswortvomBroker
: 1883
: Nach jeder Messung
und dann oben nur noch auf das grüne Symbol zum speichern.