Seite 1 von 12

Shelly Modulanfrage

Verfasst: Do Mär 19, 2020 12:49 pm
von 0000
Hallo zusammen,

der Hersteller Shelly baut tolle Smarthome Produkte die Anwenderfreundlich, vergleichsweise günstig und dazu noch in Software OpenSource sind.
Ich hätte gerne ein Modul oder eine andere Möglichkeit um die Power Meter Funktionalität der Geräte in OpenWB Smarthome zu integrieren. Ein Beispiel:
Ich habe hier viewtopic.php?f=7&t=886 einen Weg beschrieben wie man einen externes Gerät mittels Webhook aus OpenWB schaltet. Nun wäre es doch toll wenn ich nicht nur schalten könnte, sondern den Verbraucher auch messen könnte. Ich setze aktuell in meinem Zuhause den "Shelly Plug S" ein, einen schaltbaren Zwischenstecker der bis 10A belastbar ist und ein Power Meter integriert hat. Man könnte aber auch einen Unterputz Aktor wie den Shelly 1 PM oder den Shelly 2.5 nehmen.

Leider scheint die Rest API der Shellys nicht mit der von Tasmota kompatibel zu sein (für das es ja ein OpenWB Modul gibt), so dass das aktuell von mir mit der SmartHome Funktionalität nicht zum rennen zu bewegen ist.

Die API ist hier dokumentiert:
https://shelly-api-docs.shelly.cloud/

Der Aufruf der Shelly Rest Api funktioniert folgendermaßen:

Code: Alles auswählen

http://xxx.xxx.xxx.xxx/meter/0/power
Die Antwort sieht dann so aus:

Code: Alles auswählen

{"power":39.04,"is_valid":true,"timestamp":1584625550,"counters":[40.604, 40.389, 3.198],"total":48362}
Wobei "power":39.04 die aktuelle Leistung in W ist. Sieht jemand eine Möglichkeit das in OpenWB über die Smarthome Funktion zu integrieren?

Danke und Gruß!

Re: Shelly Modulanfrage

Verfasst: Do Mär 19, 2020 1:19 pm
von okaegi
Das kannst du heute schon über Smart home verbraucher die aktuelle Leistung zurückgeben.
viewtopic.php?f=6&t=727#p6094
Schau mal hier in watt und wattd, unter umständen musst du halt noch ein .py wrapper machen.
Gruss Oliver

Re: Shelly Modulanfrage

Verfasst: Do Mär 19, 2020 3:00 pm
von 0000
Das Smarthome Modul ist mir bekannt, dort wird ja bereits nativ die "Tasmota" API unterstützt. Dein Vorschlag ist nun ein php Skript zu schreiben das ich über die SmartHome Funktion und "http Abfrage" initiere. Das Skript holt sich dann über Umwege und ein Python Skript aus der Rest API den aktuellen Verbrauch und W sowie den Zählerstand in Wh.

Soweit korrekt verstanden?
Dann könnte ich auch gleich ein Shelly Modul für SmartHome Verbraucher in OpenWB implementieren :).

Re: Shelly Modulanfrage

Verfasst: Do Mär 19, 2020 3:49 pm
von okaegi
0000 hat geschrieben: Do Mär 19, 2020 3:00 pm Das Smarthome Modul ist mir bekannt, dort wird ja bereits nativ die "Tasmota" API unterstützt. Dein Vorschlag ist nun ein php Skript zu schreiben das ich über die SmartHome Funktion und "http Abfrage" initiere. Das Skript holt sich dann über Umwege und ein Python Skript aus der Rest API den aktuellen Verbrauch und W sowie den Zählerstand in Wh.

Soweit korrekt verstanden?
Genau, der Vorteil ist das du upgrade fähig bleibst (saubere Schnittstelle).
Du trägst den link dann einfach unter Verbraucher 1 oder Verbraucher 2 ein und gibst als Return den Zählerstand oder die aktuelle Leistung aus.
Gruss Oliver

Re: Shelly Modulanfrage

Verfasst: Do Mär 19, 2020 6:58 pm
von 0000
Soweit ich den Code verstanden habe müsste sich der Tasmota Kram ziemlich leicht auf Shelly anpassen lassen.

Tasmota Code:

Code: Alles auswählen

	
	if [[ $verbraucher1_typ == "tasmota" ]]; then
		verbraucher1_out=$(curl --connect-timeout 3 -s $verbraucher1_ip/cm?cmnd=Status%208 )
		verbraucher1_watt=$(echo $verbraucher1_out | jq '.StatusSNS.ENERGY.Power')
			echo $verbraucher1_watt > /var/www/html/openWB/ramdisk/verbraucher1_watt
		verbraucher1_wh=$(echo $verbraucher1_out | jq '.StatusSNS.ENERGY.Total')
		verbraucher1_totalwh=$(echo "scale=0;(($verbraucher1_wh * 1000) + $verbraucher1_tempwh)  / 1" | bc)
		echo $verbraucher1_totalwh > /var/www/html/openWB/ramdisk/verbraucher1_wh
	fi
Shelly wäre dann ungefähr so:

Code: Alles auswählen

	
	if [[ $verbraucher1_typ == "shelly" ]]; then
		verbraucher1_out=$(curl --connect-timeout 3 -s $verbraucher1_ip/meter/0/power )
		verbraucher1_watt=$(echo $verbraucher1_out | jq '.power')
			echo $verbraucher1_watt > /var/www/html/openWB/ramdisk/verbraucher1_watt
		verbraucher1_wh=$(echo $verbraucher1_out | jq '.total')
		verbraucher1_totalwh=$(echo "scale=0;(($verbraucher1_wh * 1000) + $verbraucher1_tempwh)  / 1" | bc)
		echo $verbraucher1_totalwh > /var/www/html/openWB/ramdisk/verbraucher1_wh
	fi
Leider bin ich sonst nur objektorientiert in c# unterwegs. Mal gucken ob ich die Tage irgendwann Zeit habe mich einzuarbeiten.

Re: Shelly Modulanfrage

Verfasst: Do Mär 19, 2020 7:25 pm
von openWB
Job, Aufwand ist überschaubar.
Ich bitte um etwas Geduld dann kriegen wir das hin.

Re: Shelly Modulanfrage

Verfasst: Do Mär 19, 2020 7:30 pm
von 0000
Optimal wäre es, wenn man noch http Authentifizierung einbauen könnte:

http://username:passwort@192.168.xxx.xxx/meter/0/power

VG!

Re: Shelly Modulanfrage

Verfasst: Do Mär 19, 2020 7:41 pm
von 0000
Läuft
shelly.png
(40.93 KiB) 964-mal heruntergeladen
Und wenn man in die OpenWB Konfiguration "Verbraucher 1 IP:" die IP samt Benutzername und Passwort einträgt funktioniert sogar http Authentifizierung (allerdings nur ohne die Verwendung von Sonderzeichen).

Verbraucher 1 IP:
benutzername:passwort@192.168.xxx.xxx

Wenn ich jetzt noch auf git commiten dürfte :). Oder heisst es Pull request? Ich bin noch aus der SVN Generation.

Re: Shelly Modulanfrage

Verfasst: Do Mär 19, 2020 10:45 pm
von aiole
Sehr cool, was Ihr hier baut!

Re: Shelly Modulanfrage

Verfasst: Mi Apr 08, 2020 10:57 am
von openWB
Für Verbraucher 1 kann man Shelly nun direkt auswählen.
Die internen Counter werden von Shelly nicht genutzt. Da diese sich bei Stromausfall resetten.
Es kommt die openWB interne Zählerstandsberechnung zum tragen.
Bitte um Feedback!