Script Shelly Plus 1PM auslesen ?

Homematic-, TCL- und Shell-Script, Toolchain, C, etc.

Moderator: Co-Administratoren

magnum1795
Beiträge: 268
Registriert: 13.05.2020, 17:56
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 48 Mal
Danksagung erhalten: 23 Mal

Script Shelly Plus 1PM auslesen ?

Beitrag von magnum1795 » 09.03.2024, 14:14

hallo, inspiriert von diesen Script > https://www.shelly-support.eu/forum/thr ... post262993 wollte ich es erweitern um noch zusätzlich die Spannung (voltage) und den momentanen Stromverbrauch (curent) mit anzeigen zu lassen.

Gebe ich im Browser das ein http://192.168.178.11/rpc/shelly.GetStatus, kommt als Rückmeldung das raus

Code: Alles auswählen

	
ble	{}
cloud	
connected	true
input:0	
id	0
state	false
mqtt	
connected	false
switch:0	
id	0
source	"SHC"
output	true
apower	2.1
voltage	241.1
current	0.019
aenergy	
total	743.39
by_minute	
0	2.528
1	31.597
2	31.175
minute_ts	1709988784
temperature	
tC	53.1
tF	127.6
sys	
mac	"80646FXXXXX"
restart_required	false
time	"13:53"
unixtime	1709988785
uptime	6944574
ram_size	244552
ram_free	139536
fs_size	458752
fs_free	151552
cfg_rev	18
kvs_rev	0
schedule_rev	0
webhook_rev	6
available_updates	
stable	
version	"1.2.2"
wifi	
sta_ip	"192.168.178.11"
status	"got ip"
ssid	"XXXXXXXXX"
rssi	-60
ws	
connected	false
Ich habe versucht (habe leider so gar keine Ahnung von Scripten erstellen oder bearbeiten) und das hier eingegeben

Code: Alles auswählen

! Skript zur Leistungs- und Energieaktualisierung Shelly Plus PM mit Originalfirmware (by SeRef vom 06.03.2024)
! Angepasst von Gen1 auf Gen2
 
! basiert auf:
! Skript zur Gesamt-Verbrauchsaktualisierung Shelly1PM mit Originalfirmware ©2019 by 66er V1.2.1)
! https://www.shelly-support.eu/forum/thread/649-shelly-pm-leistungsmessung-in-homematic-einbinden-mit-der-originalfirmware/?postID=13125#post13125

! Bohrbrunnen (nur zur Orientierung, ggf anpassen)

! **** Abfrage des Shelly Plus PM *****
! In der folgenden Zeile IP des Shelly anpassen!
var vUrl = "http://192.168.178.11/rpc/shelly.GetStatus";

! In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801001:8)
dom.GetObject("CUxD.CUX2801001:13.CMD_SETS").State("wget -q -O - '" # vUrl # "'");
dom.GetObject("CUxD.CUX2801001:13.CMD_QUERY_RET").State(1);

string Antwort = dom.GetObject("CUxD.CUX2801001:8.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801001:13.CMD_SETS").State("");

! WriteLine(Antwort);


! **** Auswertung Leistung des Antwortstrings ****
! Hier NICHTS ändern

string s;
string p = "-1";
foreach (s, Antwort.Split (",")) {
  if (s.Contains ('"apower"')) {
    p = (s.StrValueByIndex (":",1));
    p = p.ToFloat();
    ! WriteLine(p);
  }
}

string t;
string v = "-1";
foreach (t, Antwort.Split (",")) {
  if (t.Contains ('"voltage"')) {
    v = (t.StrValueByIndex (":",2));
    v  = v.ToFloat();
    ! WriteLine(p);
  }
}

string u;
string a = "-1";
foreach (u, Antwort.Split (",")) {
  if (u.Contains ('"curent"')) {
    a = (u.StrValueByIndex (":",3));
    a  = a.ToFloat();
    ! WriteLine(p);
  }
}

! **** Auswertung Energie des Antwortstrings ****
! Hier NICHTS ändern

string e = "-1";
foreach (s, Antwort.Split (",")) {
  if (s.Contains ('"total"')) {
    e = (s.StrValueByIndex (":",4));
    ! WriteLine(e);

    ! ***** Umrechnung Wh in kWh ****
    e = e.ToFloat();
    e = e / 1000;
    ! WriteLine(e);
  }
}


! **** Variablen setzen ****

! Leistung
if (rep > -1.0) {
  ! Variablennamen anpassen (hier: Leistung_Brunnen)
  dom.GetObject("Leistung_Brunnen").State(p);
}

! Energie
if (e > -1.0) {
  ! Variablennamen anpassen (hier: Gesamtverbrauch_Brunnen)
  dom.GetObject("Gesamtverbrauch_Brunnen").State(e);
}

! Strom
if (a > -1.0) {
  ! Variablennamen anpassen (hier: Strom_Brunnen)
  dom.GetObject("Strom_Brunnen").State(a);
}

! Spannung
if (v > -1.0) {
  ! Variablennamen anpassen (hier: Strom_Brunnen)
  dom.GetObject("Spannung_Brunnen").State(u);
}

! Ende Skript
Leider werden weder Spannung_Brunnen, Strom_Brunnen und nun auch nicht mehr Gesamtverbrauch_Brunnen angezeigt (die Systemvariablen habe ich angelegt.

Könnte mir bitte jemand von den "Experten" helfen und vielleicht auch sagen was ich falsch gemacht habe? Verstehe leider (noch) nicht richtig die Zusammenhänge. Vielen Dank

Benutzeravatar
Black
Beiträge: 5483
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 424 Mal
Danksagung erhalten: 1074 Mal
Kontaktdaten:

Re: Script Shelly Plus 1PM auslesen ?

Beitrag von Black » 09.03.2024, 14:21

Warum nutzt du nicht den CCU Jack mit der shelly anbindung via MQTT ?

Black
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

magnum1795
Beiträge: 268
Registriert: 13.05.2020, 17:56
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 48 Mal
Danksagung erhalten: 23 Mal

Re: Script Shelly Plus 1PM auslesen ?

Beitrag von magnum1795 » 09.03.2024, 14:32

Sorry, das kannte ich gar nicht. Schaue mir jetzt gerade mal ein Video von Verdrahtet bei YT an. Man lernt nie aus.

Dennoch hätte ich schon gerne gewusst was im Script so alles Falsch ist. danke

magnum1795
Beiträge: 268
Registriert: 13.05.2020, 17:56
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 48 Mal
Danksagung erhalten: 23 Mal

Re: Script Shelly Plus 1PM auslesen ?

Beitrag von magnum1795 » 09.03.2024, 16:58

So, habe mir mal das Video über CCU Jack angesehen und ein wenig gelesen etc. Denke aber nun das das erstmal so nicht in Frage kommt. Man braucht ja zusätzlich einen MQTT Server der auch zusätzlich laufen muss. Ich nutze ja zwar einen RM 4 als CCU , bin mir aber nicht sicher ob man auf diesen dann zusätzlich den MQTT Server extra installieren kann/könnte.
Klinkt alles ziemlich kompliziert, zumal ich all meine Shellyś ja bereits in Homematic eingebunden habe Dank 66er Anleitungen aus den Shelly Forum.

Wenn mir also ein "Scriptexperte" da mal helfen könnte das Script mal anzupassen das es dann auch läuft oder zumindest mir sagt wo oder was ich falsch gemacht habe bei obigen Script wäre mir schon viel geholfen. Vielen Dank

Mathias
Beiträge: 1796
Registriert: 03.11.2010, 10:25
System: CCU
Wohnort: Aachen
Hat sich bedankt: 58 Mal
Danksagung erhalten: 262 Mal
Kontaktdaten:

Re: Script Shelly Plus 1PM auslesen ?

Beitrag von Mathias » 09.03.2024, 19:29

magnum1795 hat geschrieben:
09.03.2024, 16:58
Man braucht ja zusätzlich einen MQTT Server der auch zusätzlich laufen muss. Ich nutze ja zwar einen RM 4 als CCU , bin mir aber nicht sicher ob man auf diesen dann zusätzlich den MQTT Server extra installieren kann/könnte.
Es wird kein zusätzlicher MQTT-Server (wie z.b. Mosquitto) benötigt, da der CCU-Jack bereits einen eigenen mitbringt. In den Shellies muss als MQTT-Server die IP der CCU und der Port 1883 eingetragen werden. Port 1883 muss natürlich in der CCU-Firewall freigeschaltet werden. Das nur als Info für alle, die mal den CCU-Jack ausprobieren wollen.

Gruß
Mathias

magnum1795
Beiträge: 268
Registriert: 13.05.2020, 17:56
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 48 Mal
Danksagung erhalten: 23 Mal

Re: Script Shelly Plus 1PM auslesen ?

Beitrag von magnum1795 » 10.03.2024, 16:24

@Mathias

du hast geschrieben "Es wird kein zusätzlicher MQTT-Server (wie z.b. Mosquitto) benötigt, da der CCU-Jack bereits einen eigenen mitbringt".

Daraufhin habe ich es nochmal probiert, bekomme es aber leider nicht zum laufen. Der CCU Jack ist installiert, Virtuelle Geräte sind aktiviert und CCU3 RM wurden neu gestartet. Habe dann 1 Virtuelles Gerät angelegt so wie im Handbuch beschrieben ist (Shelly Plus 1PM) 1 MQTT Schaltkanal und 5 MQTT Analogwertempfängern , diese dann gespeichert und den einzelnen Kanälen zugeordnet.

Kanal Parameter Topic
1 COMMAND_TOPIC shellies/shellyplus1pm-XXXXXXXXXXXX/rpc
1 ON_PAYLOAD {"id":0, "src":"shellies/shellyplus1pm-XXXXXXXXXXXX/rpc-response", "method":"Switch.Set", "params":{"id":0,"on":true}}
1 OFF_PAYLOAD {"id":0, "src":"shellies/shellyplus1pm-XXXXXXXXXXXX/rpc-response", "method":"Switch.Set", "params":{"id":0,"on":false}}
1 FEEDBACK_TOPIC shellies/shellyplus1pm-XXXXXXXXXXXX/status/switch:0
1 ON_PATTERN "output":true
1 OFF_PATTERN "output":false
1 MATCHER CONTAINS
2 TOPIC shellies/shellyplus1pm-XXXXXXXXXXXX/status/switch:0
2 PATTERN {{(parseJSON .).apower}}
2 EXTRACTOR TEMPLATE
3 TOPIC shellies/shellyplus1pm-XXXXXXXXXXXX/status/switch:0
3 PATTERN {{(parseJSON .).aenergy.total}}
3 EXTRACTOR TEMPLATE
4 TOPIC shellies/shellyplus1pm-XXXXXXXXXXXX/status/switch:0
4 PATTERN {{(parseJSON .).temperature.tC}}
4 EXTRACTOR TEMPLATE
5 TOPIC shellies/shellyplus1pm-XXXXXXXXXXXX/status/switch:0
5 PATTERN {{(parseJSON .).current}}
5 EXTRACTOR TEMPLATE
6 TOPIC shellies/shellyplus1pm-XXXXXXXXXXXX/status/switch:0
6 PATTERN {{(parseJSON .).voltage}}
6 EXTRACTOR TEMPLATE

(XXXXXXXXXXXX natürlich mit der Richtigen Zahl und auch alles Kleingeschrieben die Buchstaben

eingefügt. Firewall Ports sind auch eingestellt. Nur kommt keine Verbindung zu Stande. Beim Shelly Plus 1PM habe ich Admin und Passwort (das womit ich das WebIF aufrufen kann) eingegeben. Was muss denn beim Shelly bei Connection type eingegeben werden? Ich habe No SSL eingegeben. Und bei
Client id steht ja shellyplus1pm-8064XXXXXXXX drin. Wie muss denn dann der Eintrag im Kanal lauten
so > shellies/shellyplus1pm-XXXXXXXXXXXX/rpc oder so > shellies/shellyplus1pm-shellyplus1pm-8064XXXXXXXX/rpc ?

Fragen über Fragen. Hoffe das du mir helfen kannst das ganze besser zu verstehen. Vielen dank
Dateianhänge
Bildschirmfoto vom 2024-03-10 16-09-32.png
Bildschirmfoto vom 2024-03-10 16-09-08.png
Bildschirmfoto vom 2024-03-10 16-06-39.png
Bildschirmfoto vom 2024-03-10 16-05-24.png
Bildschirmfoto vom 2024-03-10 15-55-45.png
Bildschirmfoto vom 2024-03-10 15-44-21.png

magnum1795
Beiträge: 268
Registriert: 13.05.2020, 17:56
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 48 Mal
Danksagung erhalten: 23 Mal

Re: Script Shelly Plus 1PM auslesen ?

Beitrag von magnum1795 » 10.03.2024, 17:07

Bin nun einen kleinen Schritt weiter nachdem ich den Shelly Plus 1PM neu gestartet habe. Im CCU Jack ist jetzt noch eine Fehlermeldung und im MQTT Explorer werden die Daten angezeigt. In der CCU RM aber leider noch nicht, steht alles auf Null.

Wo hängt es denn nun noch? Kanalzuordnung was falsch? Bitte nochmals um Hilfe. Vielen Dank
Dateianhänge
Bild 4.jpg
Bildschirmfoto vom 2024-03-10 16-59-51.png
Bildschirmfoto vom 2024-03-10 16-58-28.png

magnum1795
Beiträge: 268
Registriert: 13.05.2020, 17:56
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 48 Mal
Danksagung erhalten: 23 Mal

Re: Script Shelly Plus 1PM auslesen ?

Beitrag von magnum1795 » 10.03.2024, 21:57

so, geht nun alles nach sehr schwerer Geburt.

bei den Kanalzuweisungen

Kanal Parameter Topic
1 COMMAND_TOPIC shellies/shellyplus1pm-XXXXXXXXXXXX/rpc
1 ON_PAYLOAD {"id":0, "src":"shellies/shellyplus1pm-XXXXXXXXXXXX/rpc-response", "method":"Switch.Set", "params":{"id":0,"on":true}}
1 OFF_PAYLOAD {"id":0, "src":"shellies/shellyplus1pm-XXXXXXXXXXXX/rpc-response", "method":"Switch.Set", "params":{"id":0,"on":false}}
1 FEEDBACK_TOPIC shellies/shellyplus1pm-XXXXXXXXXXXX/status/switch:0
1 ON_PATTERN "output":true
1 OFF_PATTERN "output":false
1 MATCHER CONTAINS
2 TOPIC shellies/shellyplus1pm-XXXXXXXXXXXX/status/switch:0
2 PATTERN {{(parseJSON .).apower}}
2 EXTRACTOR TEMPLATE
3 TOPIC shellies/shellyplus1pm-XXXXXXXXXXXX/status/switch:0
3 PATTERN {{(parseJSON .).aenergy.total}}
3 EXTRACTOR TEMPLATE
4 TOPIC shellies/shellyplus1pm-XXXXXXXXXXXX/status/switch:0
4 PATTERN {{(parseJSON .).temperature.tC}}
4 EXTRACTOR TEMPLATE
5 TOPIC shellies/shellyplus1pm-XXXXXXXXXXXX/status/switch:0
5 PATTERN {{(parseJSON .).current}}
5 EXTRACTOR TEMPLATE
6 TOPIC shellies/shellyplus1pm-XXXXXXXXXXXX/status/switch:0
6 PATTERN {{(parseJSON .).voltage}}
6 EXTRACTOR TEMPLATE

muss man das shellies/ weglassen, CCU neu starten und schon wurden die Daten auch angezeigt. Bild zeigt die SmarthaApp auf Androidhandy
Dateianhänge
Screenshot_20240310-215548.png
Bildschirmfoto vom 2024-03-10 21-46-46.png

Benutzeravatar
gnom
Beiträge: 321
Registriert: 23.06.2022, 05:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Brühl
Hat sich bedankt: 26 Mal
Danksagung erhalten: 56 Mal

Re: Script Shelly Plus 1PM auslesen ?

Beitrag von gnom » 11.03.2024, 08:49

magnum1795 hat geschrieben:
10.03.2024, 21:57

1 COMMAND_TOPIC shellies/shellyplus1pm-XXXXXXXXXXXX/rpc
:
muss man das shellies/ weglassen, CCU neu starten und schon wurden die Daten auch angezeigt. Bild zeigt die SmarthaApp auf Androidhandy
ja genau. In Deinem MQTT-Explorer Screenshot von 17:07 sieht man ja auch, das es bei Dir den level "shellies" ja gar nicht gibt (im Gegensatz z.B. zum screenshot im WIKI)
Gruss, Chris

don't fear dying, fear not living (Marc Aurel)
strebst Du nach Respekt, handle selber danach (unbekannt)

2 Systeme:
- Home: Debmatic & IOBroker unter Debian 12 auf Laptop, HM-IP, Asksin++ (HB-+Innogy Devices), Zigbee, Tasmota/Shelly
- WE-Shed: Debmatic & IOBroker unter Debian 11 auf Laptop, HM classic, Asksin++ (HB-+Innogy Devices), RF, Tasmota/Shelly

magnum1795
Beiträge: 268
Registriert: 13.05.2020, 17:56
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 48 Mal
Danksagung erhalten: 23 Mal

Re: Script Shelly Plus 1PM auslesen ?

Beitrag von magnum1795 » 11.03.2024, 09:04

@gnom
Danke dir. Ich hatte mich ans Wiki gehalten und mehre Stunden probiert bis ich mir dann auch mal den MQTT Explorer genauer angeschaut habe und dann eben das shellies weggelassen hatte. Und schon wurden Daten angezeigt. Man lernt halt nie aus.

@Mathias (Entwickler von CCU Jack ?)
hätte ich aber noch eine Frage. Wie man im Screen erkennen kann, sind beim Shelly Plus 1PM auf der Homematic ja die Kanäle alle mit "Eingangsspannung" geschrieben, das ist nicht so schön. Gibt es denn eine Möglichkeit das selbst zu ändern oder wenn nicht könntest du da nicht anstatt Eingangsspannung lieber "Wert" eintragen? Das fände ich Sinnvoller und besser und ist dann nicht so verwirrend. Ist aber nur meine persönliche Meinung. Vielen Dank
Dateianhänge
Bildschirmfoto vom 2024-03-10 16-59-51.png

Antworten

Zurück zu „Softwareentwicklung für die HomeMatic CCU“