diff --git a/FHEM/98_vitoconnect.pm b/FHEM/98_vitoconnect.pm index fce743d78..309eca355 100644 --- a/FHEM/98_vitoconnect.pm +++ b/FHEM/98_vitoconnect.pm @@ -134,6 +134,11 @@ # # 2019-09-07 Readings werden wieder erzeugt auch wenn sich der Wert nicht ändert # +# 2019-11-23 Readings für "heating.power.consumption.total.*" hinzugefügt. Scheint identisch mit "heating.power.consumption.*" +# Behoben: Readings wurden nicht mehr aktualisiert, wenn in getResourceCallback die Resource nicht als JSON interpretiert werden konnte (Forum: #390) +# Behoben: vitoconnect bringt FHEM zum Absturz in Zeile 1376 (Forum: #391) +# Überwachung der Aktualität: Zeitpunkt des letzten Updates wird in State angezeigt (Forum #397) +# # ToDo: timeout konfigurierbar machen # "set"s für Schedules zum Steuern der Heizung implementieren # Nicht bei jedem Lesen neu einloggen (wenn möglich) @@ -142,7 +147,7 @@ # "sinnvolle" Readings statt 1:1 aus der API übernommene # mapping der Readings optional machen # Mehrsprachigkeit -# Auswerten der Reading in getCode usw. +# Auswerten der Readings in getCode usw. # devices/0 ? Was, wenn es mehrere Devices gibt? # vitoconnect_Set effizienter implementieren # nach einem set Befehl Readings aktualisieren, vorher alten Timer löschen @@ -179,41 +184,41 @@ my $callback_uri = "vicare://oauth-callback/everest"; #}; my $RequestList = { - "heating.boiler.serial.value" => "Kessel_Seriennummer", - "heating.boiler.temperature.value" => "Kesseltemperatur_exact", + "heating.boiler.serial.value" => "Kessel_Seriennummer", + "heating.boiler.temperature.value" => "Kesseltemperatur_exact", "heating.boiler.sensors.temperature.commonSupply.status" => "Kessel_Common_Supply", "heating.boiler.sensors.temperature.commonSupply.value" => "Kessel_Common_Supply_Temperatur", - "heating.boiler.sensors.temperature.main.status" => "Kessel_Status", - "heating.boiler.sensors.temperature.main.value" => "Kesseltemperatur", + "heating.boiler.sensors.temperature.main.status" => "Kessel_Status", + "heating.boiler.sensors.temperature.main.value" => "Kesseltemperatur", - "heating.burner.active" => "Brenner_aktiv", - "heating.burner.automatic.status" => "Brenner_Status", - "heating.burner.automatic.errorCode" => "Brenner_Fehlercode", - "heating.burner.current.power.value" => "Brenner_Leistung", - "heating.burner.modulation.value" => "Brenner_Modulation", - "heating.burner.statistics.hours" => "Brenner_Betriebsstunden", - "heating.burner.statistics.starts" => "Brenner_Starts", + "heating.burner.active" => "Brenner_aktiv", + "heating.burner.automatic.status" => "Brenner_Status", + "heating.burner.automatic.errorCode" => "Brenner_Fehlercode", + "heating.burner.current.power.value" => "Brenner_Leistung", + "heating.burner.modulation.value" => "Brenner_Modulation", + "heating.burner.statistics.hours" => "Brenner_Betriebsstunden", + "heating.burner.statistics.starts" => "Brenner_Starts", - "heating.circuits.enabled" => "Aktive_Heizkreise", - "heating.circuits.0.active" => "HK1-aktiv", + "heating.circuits.enabled" => "Aktive_Heizkreise", + "heating.circuits.0.active" => "HK1-aktiv", "heating.circuits.0.circulation.pump.status" => "HK1-Zirkulationspumpe", - "heating.circuits.0.circulation.schedule.active" => "HK1-Zeitsteuerung_Zirkulation_aktiv", + "heating.circuits.0.circulation.schedule.active" => "HK1-Zeitsteuerung_Zirkulation_aktiv", "heating.circuits.0.circulation.schedule.entries" => "HK1-Zeitsteuerung_Zirkulation", - "heating.circuits.0.frostprotection.status" => "HK1-Frostschutz_Status", - "heating.circuits.0.heating.curve.shift" => "HK1-Heizkurve-Niveau", - "heating.circuits.0.heating.curve.slope" => "HK1-Heizkurve-Steigung", - "heating.circuits.0.heating.schedule.active" => "HK1-Zeitsteuerung_Heizung_aktiv", - "heating.circuits.0.heating.schedule.entries" => "HK1-Zeitsteuerung_Heizung", + "heating.circuits.0.frostprotection.status" => "HK1-Frostschutz_Status", + "heating.circuits.0.heating.curve.shift" => "HK1-Heizkurve-Niveau", + "heating.circuits.0.heating.curve.slope" => "HK1-Heizkurve-Steigung", + "heating.circuits.0.heating.schedule.active" => "HK1-Zeitsteuerung_Heizung_aktiv", + "heating.circuits.0.heating.schedule.entries" => "HK1-Zeitsteuerung_Heizung", "heating.circuits.0.name" => "HK1-Name", "heating.circuits.0.operating.modes.active.value" => "HK1-Betriebsart", - "heating.circuits.0.operating.modes.dhw.active" => "HK1-WW_aktiv", + "heating.circuits.0.operating.modes.dhw.active" => "HK1-WW_aktiv", "heating.circuits.0.operating.modes.dhwAndHeating.active" => "HK1-WW_und_Heizen_aktiv", - "heating.circuits.0.operating.modes.dhwAndHeatingCooling.active" => "HK1-WW_und_Heizen_Kuehlen_aktiv", + "heating.circuits.0.operating.modes.dhwAndHeatingCooling.active" => "HK1-WW_und_Heizen_Kuehlen_aktiv", "heating.circuits.0.operating.modes.forcedNormal.active" => "HK1-Solltemperatur_erzwungen", "heating.circuits.0.operating.modes.forcedReduced.active" => "HK1-Reduzierte_Temperatur_erzwungen", - "heating.circuits.0.operating.modes.heating.active" => "HK1-heizen_aktiv", + "heating.circuits.0.operating.modes.heating.active" => "HK1-heizen_aktiv", "heating.circuits.0.operating.modes.normalStandby.active" => "HK1-Normal_Standby_aktiv", - "heating.circuits.0.operating.modes.standby.active" => "HK1-Standby_aktiv", + "heating.circuits.0.operating.modes.standby.active" => "HK1-Standby_aktiv", "heating.circuits.0.operating.programs.active.value" => "HK1-Programmstatus", "heating.circuits.0.operating.programs.comfort.active" => "HK1-Solltemperatur_comfort_aktiv", "heating.circuits.0.operating.programs.comfort.temperature" => "HK1-Solltemperatur_comfort", @@ -221,12 +226,12 @@ my $RequestList = { "heating.circuits.0.operating.programs.eco.temperature" => "HK1-Solltemperatur_eco", "heating.circuits.0.operating.programs.external.active" => "HK1-External_aktiv", "heating.circuits.0.operating.programs.external.temperature" => "HK1-External_Temperatur", - "heating.circuits.0.operating.programs.fixed.active" => "HK1-Fixed_aktiv", + "heating.circuits.0.operating.programs.fixed.active" => "HK1-Fixed_aktiv", "heating.circuits.0.operating.programs.holiday.active" => "HK1-Urlaub_aktiv", "heating.circuits.0.operating.programs.holiday.start" => "HK1-Urlaub_Start", - "heating.circuits.0.operating.programs.holiday.end" => "HK1-Urlaub_Ende", + "heating.circuits.0.operating.programs.holiday.end" => "HK1-Urlaub_Ende", "heating.circuits.0.operating.programs.normal.active" => "HK1-Solltemperatur_aktiv", - "heating.circuits.0.operating.programs.normal.temperature" => "HK1-Solltemperatur_normal", + "heating.circuits.0.operating.programs.normal.temperature" => "HK1-Solltemperatur_normal", "heating.circuits.0.operating.programs.reduced.active" => "HK1-Solltemperatur_reduziert_aktiv", "heating.circuits.0.operating.programs.reduced.temperature" => "HK1-Solltemperatur_reduziert", "heating.circuits.0.operating.programs.standby.active" => "HK1-Standby_aktiv", @@ -235,25 +240,25 @@ my $RequestList = { "heating.circuits.0.sensors.temperature.supply.status" => "HK1-Vorlauftemperatur_aktiv", "heating.circuits.0.sensors.temperature.supply.value" => "HK1-Vorlauftemperatur", - "heating.circuits.1.active" => "HK2-aktiv", - "heating.circuits.1.circulation.pump.status" => "HK2-Zirkulationspumpe", - "heating.circuits.1.circulation.schedule.active" => "HK2-Zeitsteuerung_Zirkulation_aktiv", + "heating.circuits.1.active" => "HK2-aktiv", + "heating.circuits.1.circulation.pump.status" => "HK2-Zirkulationspumpe", + "heating.circuits.1.circulation.schedule.active" => "HK2-Zeitsteuerung_Zirkulation_aktiv", "heating.circuits.1.circulation.schedule.entries" => "HK2-Zeitsteuerung_Zirkulation", - "heating.circuits.1.frostprotection.status" => "HK2-Frostschutz_Status", - "heating.circuits.1.heating.curve.shift" => "HK2-Heizkurve-Niveau", - "heating.circuits.1.heating.curve.slope" => "HK2-Heizkurve-Steigung", - "heating.circuits.1.heating.schedule.active" => "HK2-Zeitsteuerung_Heizung_aktiv", - "heating.circuits.1.heating.schedule.entries" => "HK2-Zeitsteuerung_Heizung", + "heating.circuits.1.frostprotection.status" => "HK2-Frostschutz_Status", + "heating.circuits.1.heating.curve.shift" => "HK2-Heizkurve-Niveau", + "heating.circuits.1.heating.curve.slope" => "HK2-Heizkurve-Steigung", + "heating.circuits.1.heating.schedule.active" => "HK2-Zeitsteuerung_Heizung_aktiv", + "heating.circuits.1.heating.schedule.entries" => "HK2-Zeitsteuerung_Heizung", "heating.circuits.1.name" => "HK2-Name", "heating.circuits.1.operating.modes.active.value" => "HK2-Betriebsart", - "heating.circuits.1.operating.modes.dhw.active" => "HK2-WW_aktiv", + "heating.circuits.1.operating.modes.dhw.active" => "HK2-WW_aktiv", "heating.circuits.1.operating.modes.dhwAndHeating.active" => "HK2-WW_und_Heizen_aktiv", - "heating.circuits.1.operating.modes.dhwAndHeatingCooling.active" => "HK2-WW_und_Heizen_Kuehlen_aktiv", + "heating.circuits.1.operating.modes.dhwAndHeatingCooling.active" => "HK2-WW_und_Heizen_Kuehlen_aktiv", "heating.circuits.1.operating.modes.forcedNormal.active" => "HK2-Solltemperatur_erzwungen", "heating.circuits.1.operating.modes.forcedReduced.active" => "HK2-Reduzierte_Temperatur_erzwungen", - "heating.circuits.1.operating.modes.heating.active" => "HK2-heizen_aktiv", + "heating.circuits.1.operating.modes.heating.active" => "HK2-heizen_aktiv", "heating.circuits.1.operating.modes.normalStandby.active" => "HK2-Normal_Standby_aktiv", - "heating.circuits.1.operating.modes.standby.active" => "HK2-Standby_aktiv", + "heating.circuits.1.operating.modes.standby.active" => "HK2-Standby_aktiv", "heating.circuits.1.operating.programs.active.value" => "HK2-Programmstatus", "heating.circuits.1.operating.programs.comfort.active" => "HK2-Solltemperatur_comfort_aktiv", "heating.circuits.1.operating.programs.comfort.temperature" => "HK2-Solltemperatur_comfort", @@ -261,12 +266,12 @@ my $RequestList = { "heating.circuits.1.operating.programs.eco.temperature" => "HK2-Solltemperatur_eco", "heating.circuits.1.operating.programs.external.active" => "HK2-External_aktiv", "heating.circuits.1.operating.programs.external.temperature" => "HK2-External_Temperatur", - "heating.circuits.1.operating.programs.fixed.active" => "HK2-Fixed_aktiv", + "heating.circuits.1.operating.programs.fixed.active" => "HK2-Fixed_aktiv", "heating.circuits.1.operating.programs.holiday.active" => "HK2-Urlaub_aktiv", "heating.circuits.1.operating.programs.holiday.start" => "HK2-Urlaub_Start", - "heating.circuits.1.operating.programs.holiday.end" => "HK2-Urlaub_Ende", + "heating.circuits.1.operating.programs.holiday.end" => "HK2-Urlaub_Ende", "heating.circuits.1.operating.programs.normal.active" => "HK2-Solltemperatur_aktiv", - "heating.circuits.1.operating.programs.normal.temperature" => "HK2-Solltemperatur_normal", + "heating.circuits.1.operating.programs.normal.temperature" => "HK2-Solltemperatur_normal", "heating.circuits.1.operating.programs.reduced.active" => "HK2-Solltemperatur_reduziert_aktiv", "heating.circuits.1.operating.programs.reduced.temperature" => "HK2-Solltemperatur_reduziert", "heating.circuits.1.operating.programs.standby.active" => "HK2-Standby_aktiv", @@ -275,25 +280,25 @@ my $RequestList = { "heating.circuits.1.sensors.temperature.supply.status" => "HK2-Vorlauftemperatur_aktiv", "heating.circuits.1.sensors.temperature.supply.value" => "HK2-Vorlauftemperatur", - "heating.circuits.2.active" => "HK3-aktiv", - "heating.circuits.2.circulation.pump.status" => "HK3-Zirkulationspumpe", - "heating.circuits.2.circulation.schedule.active" => "HK3-Zeitsteuerung_Zirkulation_aktiv", + "heating.circuits.2.active" => "HK3-aktiv", + "heating.circuits.2.circulation.pump.status" => "HK3-Zirkulationspumpe", + "heating.circuits.2.circulation.schedule.active" => "HK3-Zeitsteuerung_Zirkulation_aktiv", "heating.circuits.2.circulation.schedule.entries" => "HK3-Zeitsteuerung_Zirkulation", - "heating.circuits.2.frostprotection.status" => "HK3-Frostschutz_Status", - "heating.circuits.2.heating.curve.shift" => "HK3-Heizkurve-Niveau", - "heating.circuits.2.heating.curve.slope" => "HK3-Heizkurve-Steigung", - "heating.circuits.2.heating.schedule.active" => "HK3-Zeitsteuerung_Heizung_aktiv", - "heating.circuits.2.heating.schedule.entries" => "HK3-Zeitsteuerung_Heizung", + "heating.circuits.2.frostprotection.status" => "HK3-Frostschutz_Status", + "heating.circuits.2.heating.curve.shift" => "HK3-Heizkurve-Niveau", + "heating.circuits.2.heating.curve.slope" => "HK3-Heizkurve-Steigung", + "heating.circuits.2.heating.schedule.active" => "HK3-Zeitsteuerung_Heizung_aktiv", + "heating.circuits.2.heating.schedule.entries" => "HK3-Zeitsteuerung_Heizung", "heating.circuits.2.name" => "HK3-Name", "heating.circuits.2.operating.modes.active.value" => "HK3-Betriebsart", - "heating.circuits.2.operating.modes.dhw.active" => "HK3-WW_aktiv", + "heating.circuits.2.operating.modes.dhw.active" => "HK3-WW_aktiv", "heating.circuits.2.operating.modes.dhwAndHeating.active" => "HK3-WW_und_Heizen_aktiv", - "heating.circuits.2.operating.modes.dhwAndHeatingCooling.active" => "HK3-WW_und_Heizen_Kuehlen_aktiv", + "heating.circuits.2.operating.modes.dhwAndHeatingCooling.active" => "HK3-WW_und_Heizen_Kuehlen_aktiv", "heating.circuits.2.operating.modes.forcedNormal.active" => "HK3-Solltemperatur_erzwungen", "heating.circuits.2.operating.modes.forcedReduced.active" => "HK3-Reduzierte_Temperatur_erzwungen", - "heating.circuits.2.operating.modes.heating.active" => "HK3-heizen_aktiv", + "heating.circuits.2.operating.modes.heating.active" => "HK3-heizen_aktiv", "heating.circuits.2.operating.modes.normalStandby.active" => "HK3-Normal_Standby_aktiv", - "heating.circuits.2.operating.modes.standby.active" => "HK3-Standby_aktiv", + "heating.circuits.2.operating.modes.standby.active" => "HK3-Standby_aktiv", "heating.circuits.2.operating.programs.active.value" => "HK3-Programmstatus", "heating.circuits.2.operating.programs.comfort.active" => "HK3-Solltemperatur_comfort_aktiv", "heating.circuits.2.operating.programs.comfort.temperature" => "HK3-Solltemperatur_comfort", @@ -301,12 +306,12 @@ my $RequestList = { "heating.circuits.2.operating.programs.eco.temperature" => "HK3-Solltemperatur_eco", "heating.circuits.2.operating.programs.external.active" => "HK3-External_aktiv", "heating.circuits.2.operating.programs.external.temperature" => "HK3-External_Temperatur", - "heating.circuits.2.operating.programs.fixed.active" => "HK3-Fixed_aktiv", + "heating.circuits.2.operating.programs.fixed.active" => "HK3-Fixed_aktiv", "heating.circuits.2.operating.programs.holiday.active" => "HK3-Urlaub_aktiv", "heating.circuits.2.operating.programs.holiday.start" => "HK3-Urlaub_Start", - "heating.circuits.2.operating.programs.holiday.end" => "HK3-Urlaub_Ende", + "heating.circuits.2.operating.programs.holiday.end" => "HK3-Urlaub_Ende", "heating.circuits.2.operating.programs.normal.active" => "HK3-Solltemperatur_aktiv", - "heating.circuits.2.operating.programs.normal.temperature" => "HK3-Solltemperatur_normal", + "heating.circuits.2.operating.programs.normal.temperature" => "HK3-Solltemperatur_normal", "heating.circuits.2.operating.programs.reduced.active" => "HK3-Solltemperatur_reduziert_aktiv", "heating.circuits.2.operating.programs.reduced.temperature" => "HK3-Solltemperatur_reduziert", "heating.circuits.2.operating.programs.standby.active" => "HK3-Standby_aktiv", @@ -315,82 +320,88 @@ my $RequestList = { "heating.circuits.2.sensors.temperature.supply.status" => "HK3-Vorlauftemperatur_aktiv", "heating.circuits.2.sensors.temperature.supply.value" => "HK3-Vorlauftemperatur", - "heating.compressor.active" => "Kompressor_aktiv", - "heating.configuration.multiFamilyHouse.active" => "Mehrfamilenhaus_aktiv", - "heating.controller.serial.value" => "Controller_Seriennummer", - "heating.device.time.offset.value" => "Device_Time_Offset", - "heating.dhw.active" => "WW-aktiv", - "heating.dhw.charging.active" => "WW-Aufladung", + "heating.compressor.active" => "Kompressor_aktiv", + "heating.configuration.multiFamilyHouse.active" => "Mehrfamilenhaus_aktiv", + "heating.controller.serial.value" => "Controller_Seriennummer", + "heating.device.time.offset.value" => "Device_Time_Offset", + "heating.dhw.active" => "WW-aktiv", + "heating.dhw.charging.active" => "WW-Aufladung", - "heating.dhw.charging.level.bottom" => "WW-Speichertemperatur_unten", - "heating.dhw.charging.level.middle" => "WW-Speichertemperatur_mitte", - "heating.dhw.charging.level.top" => "WW-Speichertemperatur_oben", - "heating.dhw.charging.level.value" => "WW-Speicherladung", + "heating.dhw.charging.level.bottom" => "WW-Speichertemperatur_unten", + "heating.dhw.charging.level.middle" => "WW-Speichertemperatur_mitte", + "heating.dhw.charging.level.top" => "WW-Speichertemperatur_oben", + "heating.dhw.charging.level.value" => "WW-Speicherladung", - "heating.dhw.oneTimeCharge.active" => "WW-einmaliges_Aufladen", - "heating.dhw.pumps.circulation.schedule.active" => "WW-Zirkulationspumpe_Zeitsteuerung_aktiv", - "heating.dhw.pumps.circulation.schedule.entries" => "WW-Zirkulationspumpe_Zeitplan", - "heating.dhw.pumps.circulation.status" => "WW-Zirkulationspumpe_Status", - "heating.dhw.pumps.primary.status" => "WW-Zirkulationspumpe_primaer", - "heating.dhw.sensors.temperature.outlet.status" => "WW-Sensoren_Auslauf_Status", - "heating.dhw.sensors.temperature.outlet.value" => "WW-Sensoren_Auslauf_Wert", - "heating.dhw.temperature.main.value" => "WW-Haupttemperatur", - "heating.dhw.temperature.hysteresis.value" => "WW-Hysterese", - "heating.dhw.temperature.temp2.value" => "WW-Temperatur_2", + "heating.dhw.oneTimeCharge.active" => "WW-einmaliges_Aufladen", + "heating.dhw.pumps.circulation.schedule.active" => "WW-Zirkulationspumpe_Zeitsteuerung_aktiv", + "heating.dhw.pumps.circulation.schedule.entries" => "WW-Zirkulationspumpe_Zeitplan", + "heating.dhw.pumps.circulation.status" => "WW-Zirkulationspumpe_Status", + "heating.dhw.pumps.primary.status" => "WW-Zirkulationspumpe_primaer", + "heating.dhw.sensors.temperature.outlet.status" => "WW-Sensoren_Auslauf_Status", + "heating.dhw.sensors.temperature.outlet.value" => "WW-Sensoren_Auslauf_Wert", + "heating.dhw.temperature.main.value" => "WW-Haupttemperatur", + "heating.dhw.temperature.hysteresis.value" => "WW-Hysterese", + "heating.dhw.temperature.temp2.value" => "WW-Temperatur_2", "heating.dhw.sensors.temperature.hotWaterStorage.status" => "WW-Temperatur_aktiv", "heating.dhw.sensors.temperature.hotWaterStorage.value" => "WW-Isttemperatur", - "heating.dhw.temperature.value" => "WW-Solltemperatur", - "heating.dhw.schedule.active" => "WW-zeitgesteuert_aktiv", - "heating.dhw.schedule.entries" => "WW-Zeitplan", + "heating.dhw.temperature.value" => "WW-Solltemperatur", + "heating.dhw.schedule.active" => "WW-zeitgesteuert_aktiv", + "heating.dhw.schedule.entries" => "WW-Zeitplan", - "heating.errors.active.entries" => "Fehlereintraege_aktive", - "heating.errors.history.entries" => "Fehlereintraege_Historie", + "heating.errors.active.entries" => "Fehlereintraege_aktive", + "heating.errors.history.entries" => "Fehlereintraege_Historie", - "heating.gas.consumption.dhw.day" => "Gasverbrauch_WW/Tag", - "heating.gas.consumption.dhw.week" => "Gasverbrauch_WW/Woche", - "heating.gas.consumption.dhw.month" => "Gasverbrauch_WW/Monat", - "heating.gas.consumption.dhw.year" => "Gasverbrauch_WW/Jahr", - "heating.gas.consumption.dhw.unit" => "Gasverbrauch_WW/Einheit", - "heating.gas.consumption.heating.day" => "Gasverbrauch_Heizung/Tag", - "heating.gas.consumption.heating.week" => "Gasverbrauch_Heizung/Woche", - "heating.gas.consumption.heating.month" => "Gasverbrauch_Heizung/Monat", - "heating.gas.consumption.heating.year" => "Gasverbrauch_Heizung/Jahr", - "heating.gas.consumption.heating.unit" => "Gasverbrauch_Heizung/Einheit", - "heating.power.consumption.day" => "Stromverbrauch/Tag", - "heating.power.consumption.month" => "Stromverbrauch/Monat", - "heating.power.consumption.week" => "Stromverbrauch/Woche", - "heating.power.consumption.year" => "Stromverbrauch/Jahr", - "heating.power.consumption.unit" => "Stromverbrauch/Einheit", - "heating.sensors.temperature.outside.status" => "Aussen_Status", + "heating.gas.consumption.dhw.day" => "Gasverbrauch_WW/Tag", + "heating.gas.consumption.dhw.week" => "Gasverbrauch_WW/Woche", + "heating.gas.consumption.dhw.month" => "Gasverbrauch_WW/Monat", + "heating.gas.consumption.dhw.year" => "Gasverbrauch_WW/Jahr", + "heating.gas.consumption.dhw.unit" => "Gasverbrauch_WW/Einheit", + "heating.gas.consumption.heating.day" => "Gasverbrauch_Heizung/Tag", + "heating.gas.consumption.heating.week" => "Gasverbrauch_Heizung/Woche", + "heating.gas.consumption.heating.month" => "Gasverbrauch_Heizung/Monat", + "heating.gas.consumption.heating.year" => "Gasverbrauch_Heizung/Jahr", + "heating.gas.consumption.heating.unit" => "Gasverbrauch_Heizung/Einheit", + "heating.power.consumption.day" => "Stromverbrauch/Tag", + "heating.power.consumption.month" => "Stromverbrauch/Monat", + "heating.power.consumption.week" => "Stromverbrauch/Woche", + "heating.power.consumption.year" => "Stromverbrauch/Jahr", + "heating.power.consumption.unit" => "Stromverbrauch/Einheit", + "heating.power.consumption.total.day" => "Stromverbrauch_Total/Tag", + "heating.power.consumption.total.month" => "Stromverbrauch_Total/Monat", + "heating.power.consumption.total.week" => "Stromverbrauch_Total/Woche", + "heating.power.consumption.total.year" => "Stromverbrauch_Total/Jahr", + "heating.power.consumption.total.unit" => "Stromverbrauch_Total/Einheit", + + "heating.sensors.temperature.outside.status" => "Aussen_Status", "heating.sensors.temperature.outside.statusWired" => "Aussen_StatusWired", "heating.sensors.temperature.outside.statusWireless" => "Aussen_StatusWireless", - "heating.sensors.temperature.outside.value" => "Aussentemperatur", + "heating.sensors.temperature.outside.value" => "Aussentemperatur", - "heating.service.timeBased.serviceDue" => "Service_faellig", + "heating.service.timeBased.serviceDue" => "Service_faellig", "heating.service.timeBased.serviceIntervalMonths" => "Service_Intervall_Monate", "heating.service.timeBased.activeMonthSinceLastService" => "Service_Monate_aktiv_seit_letzten_Service", - "heating.service.timeBased.lastService" => "Service_Letzter", - "heating.service.burnerBased.serviceDue" => "Service_fällig_brennerbasiert", + "heating.service.timeBased.lastService" => "Service_Letzter", + "heating.service.burnerBased.serviceDue" => "Service_fällig_brennerbasiert", "heating.service.burnerBased.serviceIntervalBurnerHours" => "Service_Intervall_Betriebsstunden", "heating.service.burnerBased.activeBurnerHoursSinceLastService" => "Service_Betriebsstunden_seit_letzten", - "heating.service.burnerBased.lastService" => "Service_Letzter_brennerbasiert", + "heating.service.burnerBased.lastService" => "Service_Letzter_brennerbasiert", - "heating.solar.active" => "Solar_aktiv", - "heating.solar.pumps.circuit.status" => "Solar_Pumpe_Status", - "heating.solar.rechargeSuppression.status" => "Solar_Aufladeunterdrueckung_Status", - "heating.solar.sensors.power.status" => "Solar_Sensor_Power_Status", - "heating.solar.sensors.power.value" => "Solar_Sensor_Power", + "heating.solar.active" => "Solar_aktiv", + "heating.solar.pumps.circuit.status" => "Solar_Pumpe_Status", + "heating.solar.rechargeSuppression.status" => "Solar_Aufladeunterdrueckung_Status", + "heating.solar.sensors.power.status" => "Solar_Sensor_Power_Status", + "heating.solar.sensors.power.value" => "Solar_Sensor_Power", "heating.solar.sensors.temperature.collector.status" => "Solar_Sensor_Temperatur_Kollektor_Status", - "heating.solar.sensors.temperature.collector.value" => "Solar_Sensor_Temperatur_Kollektor", + "heating.solar.sensors.temperature.collector.value" => "Solar_Sensor_Temperatur_Kollektor", "heating.solar.sensors.temperature.dhw.status" => "Solar_Sensor_Temperatur_WW_Status", - "heating.solar.sensors.temperature.dhw.value" => "Solar_Sensor_Temperatur_WW", - "heating.solar.statistics.hours" => "Solar_Sensor_Statistik_Stunden", + "heating.solar.sensors.temperature.dhw.value" => "Solar_Sensor_Temperatur_WW", + "heating.solar.statistics.hours" => "Solar_Sensor_Statistik_Stunden", - "heating.solar.power.production.month" => "Solarproduktion/Monat", - "heating.solar.power.production.day" => "Solarproduktion/Tag", - "heating.solar.power.production.unit" => "Solarproduktion/Einheit", - "heating.solar.power.production.week" => "Solarproduktion/Woche", - "heating.solar.power.production.year" => "Solarproduktion/Jahr" + "heating.solar.power.production.month" => "Solarproduktion/Monat", + "heating.solar.power.production.day" => "Solarproduktion/Tag", + "heating.solar.power.production.unit" => "Solarproduktion/Einheit", + "heating.solar.power.production.week" => "Solarproduktion/Woche", + "heating.solar.power.production.year" => "Solarproduktion/Jahr" }; @@ -1156,19 +1167,18 @@ sub vitoconnect_getCode($) { my $isiwebpasswd = vitoconnect_ReadKeyValue($hash, "passwd"); - my $param = { + my $param = { url => "$authorizeURL?client_id=$client_id&scope=openid&redirect_uri=$callback_uri&response_type=code", hash => $hash, header => "Content-Type: application/x-www-form-urlencoded", ignoreredirects => 1, - user => $hash->{user}, - pwd => $isiwebpasswd, - sslargs => {SSL_verify_mode => 0}, + user => $hash->{user}, + pwd => $isiwebpasswd, + sslargs => {SSL_verify_mode => 0}, timeout => 10, - method => "POST", - callback => \&vitoconnect_getCodeCallback + method => "POST", + callback => \&vitoconnect_getCodeCallback }; - #Log3 $name, 4, "$name: user=$param->{user} passwd=$param->{pwd}"; # Log3 $name, 5, Dumper($hash); HttpUtils_NonblockingGet($param); @@ -1199,9 +1209,7 @@ sub vitoconnect_getCodeCallback ($) { if ($hash->{login} eq "ok") { vitoconnect_getAccessToken($hash); } else { - readingsBeginUpdate($hash); - readingsBulkUpdate($hash, "state", "login failure" ); - readingsEndUpdate($hash, 1); + readingsSingleUpdate($hash, "state", "login failure", 1); Log3 $name, 1, "$name: Login failure"; # neuen Timer starten in einem konfigurierten Interval. InternalTimer(gettimeofday()+$hash->{intervall}, "vitoconnect_GetUpdate", $hash); @@ -1232,7 +1240,7 @@ sub vitoconnect_getAccessTokenCallback($) { my $name = $hash->{NAME}; if ($err eq "") { - Log3 $name, 4, "$name - getAccessTokenCallback went ok"; + Log3 $name, 4, "$name - getAccessTokenCallback went ok"; Log3 $name, 5, "$name: Received response: $response_body\n"; my $decode_json = eval{decode_json($response_body)}; if($@) { @@ -1292,7 +1300,7 @@ sub vitoconnect_getGwCallback($) { my $aggregatedStatus = $decode_json->{entities}[0]->{properties}->{aggregatedStatus}; Log3 $name, 5, "$name: aggregatedStatus: $aggregatedStatus"; - readingsSingleUpdate($hash, "state", $aggregatedStatus, 1); + readingsSingleUpdate($hash, "state", "$aggregatedStatus (".TimeNow().")", 1); my $installation = $decode_json->{entities}[0]->{properties}->{id}; Log3 $name, 5, "$name: installation: $installation"; @@ -1302,7 +1310,7 @@ sub vitoconnect_getGwCallback($) { $hash->{".gw"} = $gw; vitoconnect_getResource($hash); } else { - Log3 $name, 1, "$name: An error occured: $err"; + Log3 $name, 1, "$name: An error occured: $err"; InternalTimer(gettimeofday()+$hash->{intervall}, "vitoconnect_GetUpdate", $hash); } return undef; @@ -1333,23 +1341,25 @@ sub vitoconnect_getResourceCallback($) { my $file_handle2 = undef; readingsBeginUpdate($hash); - if ($err eq "") { + if ($err eq "") { Log3 $name, 4, "$name - getResourceCallback went ok"; - Log3 $name, 5, "Received response: $response_body\n"; - my $decode_json = eval{decode_json($response_body)}; - if($@) { Log3 $name, 1, "$name - JSON error while request: $@"; - return; } - my $items = $decode_json; + Log3 $name, 5, "Received response: $response_body\n"; + my $decode_json = eval{decode_json($response_body)}; + if($@) { + Log3 $name, 1, "$name - JSON error while request: $@"; + InternalTimer(gettimeofday()+$hash->{intervall}, "vitoconnect_GetUpdate", $hash); + return; } + my $items = $decode_json; ########################################### - if ($hash->{".logResponseOnce"}) { - my $dir = path("log"); - my $file = $dir->child("entities.json"); - my $file_handle = $file->openw_utf8(); - #$file_handle->print(Dumper($items)); - $file_handle->print( Dumper(@{$items->{entities}} )); - my $file2 = $dir->child("actions.json"); - $file_handle2 = $file2->openw_utf8(); + if ($hash->{".logResponseOnce"}) { + my $dir = path("log"); + my $file = $dir->child("entities.json"); + my $file_handle = $file->openw_utf8(); + #$file_handle->print(Dumper($items)); + $file_handle->print( Dumper(@{$items->{entities}} )); + my $file2 = $dir->child("actions.json"); + $file_handle2 = $file2->openw_utf8(); } ########################################### @@ -1373,9 +1383,11 @@ sub vitoconnect_getResourceCallback($) { readingsBulkUpdate($hash, $Reading, $Value); Log3 $name, 5, "$FieldName".".$Key: $Value ($Type)"; } elsif ( $Type eq "array" ) { - my $Array = join(",", @$Value); - readingsBulkUpdate($hash, $Reading, $Array); - Log3 $name, 5, "$FieldName".".$Key: $Array ($Type)"; + if ( defined($Value) ) { + my $Array = join(",", @$Value); + readingsBulkUpdate($hash, $Reading, $Array); + Log3 $name, 5, "$FieldName".".$Key: $Array ($Type)"; + } } elsif ( $Type eq "boolean" ) { readingsBulkUpdate($hash, $Reading, $Value); Log3 $name, 5, "$FieldName".".$Key: $Value ($Type)"; @@ -1395,14 +1407,9 @@ sub vitoconnect_getResourceCallback($) { readingsBulkUpdate($hash, $Reading, $Result); Log3 $name, 5, "$FieldName".".$Key: $Result ($Type)"; } elsif ( $Type eq "ErrorListChanges" ) { - # not implemented yet - #readingsBulkUpdate($hash, $Reading, "ErrorListChanges"); - #Log3 $name, 5, "$FieldName".".$Key: $Value ($Type)"; - my $Result = encode_json($Value); readingsBulkUpdate($hash, $Reading, $Result); Log3 $name, 5, "$FieldName".".$Key: $Result ($Type)"; - } else { readingsBulkUpdate($hash, $Reading, "Unknown: $Type"); Log3 $name, 5, "$FieldName".".$Key: $Value ($Type)"; @@ -1428,7 +1435,7 @@ sub vitoconnect_getResourceCallback($) { #readingsBulkUpdate($hash, "state", "ok"); } else { readingsBulkUpdate($hash, "state", "An error occured: $err"); - Log3 $name, 1, "$name - An error occured: $err"; + Log3 $name, 1, "$name - An error occured: $err"; } readingsEndUpdate($hash, 1); InternalTimer(gettimeofday()+$hash->{intervall}, "vitoconnect_GetUpdate", $hash);