Ich habe die REST-Schnittstelle getestet. Das geht mit FHEM ganz easy going. Man definiert sich ein HTTPMOD-Device und man kann bekommt alle Felder angezeigt:
define Shellytest HTTPMOD none 0
setuuid Shellytest 5e5b91ed-f33f-5ef7-548f-28d7caf1a43149e2
attr Shellytest userattr get01Name getHeader1 getHeader2 getURL reading01JSON
attr Shellytest extractAllJSON 1
attr Shellytest get01Name shelly_data
attr Shellytest getHeader1 Content-Type: application/json
attr Shellytest getHeader2 Accept: */*
attr Shellytest getURL http://192.168.1.146/status
attr Shellytest reading01JSON modes
Da zeigt es sich, dass alle Energiewerte in Wattminuten übertragen werden. Das heißt um die KWh auszurechnen muss man durch 60 teilen um auf Wattstunden zu kommen und dann mit 1000 teilen um einen Wert in KWh zu bekommen.
Aus:
wird 1464 Wm / 60 / 1000 = 0,0244 KWh
Ich habe mir ein UserReading energy_0 angelegt, um konform mit meinen Homematic-Komponenten zu sein. Dort findet sich dann ein Wert in Wattstunden wieder:
Hier sind die Definitionen für meine UserReadings:
energy_0 {sprintf('%.1f',ReadingsVal("Shellytest","meters_01_total","0")/60)},
energy_1 {sprintf('%.1f',ReadingsVal("Shellytest","meters_02_total","0")/60)},
energy_2 {sprintf('%.1f',ReadingsVal("Shellytest","meters_03_total","0")/60)},
energy_3 {sprintf('%.1f',ReadingsVal("Shellytest","meters_04_total","0")/60)},
energyCalc_0 monotonic {sprintf('%.1f',ReadingsVal("Shellytest","meters_01_total","0")/60)},
energyCalc_1 monotonic {sprintf('%.1f',ReadingsVal("Shellytest","meters_02_total","0")/60)},
energyCalc_2 monotonic {sprintf('%.1f',ReadingsVal("Shellytest","meters_03_total","0")/60)},
energyCalc_3 monotonic {sprintf('%.1f',ReadingsVal("Shellytest","meters_04_total","0")/60)},
power_0 {ReadingsVal("Shellytest","meters_01_power","0")},
power_1 {ReadingsVal("Shellytest","meters_02_power","0")},
power_2 {ReadingsVal("Shellytest","meters_03_power","0")},
power_3 {ReadingsVal("Shellytest","meters_04_power","0")},
relay_0 {if (ReadingsVal("Shellytest","relays_01_ison","0") eq "1") {"on"} else {"off"}},
relay_1 {if (ReadingsVal("Shellytest","relays_02_ison","0") eq "1") {"on"} else {"off"}},
relay_2 {if (ReadingsVal("Shellytest","relays_03_ison","0") eq "1") {"on"} else {"off"}},
relay_3 {if (ReadingsVal("Shellytest","relays_04_ison","0") eq "1") {"on"} else {"off"}}
Alles anzeigen