Entwicklungs-Thread Modul 36_Shelly.pm

Begonnen von Starkstrombastler, 24 Februar 2024, 12:15:05

Vorheriges Thema - Nächstes Thema

Starkstrombastler

Da sich die Anzahl der verfügbaren Shellies stetig vergrößert wird auch das Shelly-Modul 36_Shelly.pm entsprechend weiter entwickelt. Um den Support Thread zu entlasten soll die Weiterentwicklung in diesem Thread separat behandelt werden. Dazu gehört der u.a. Austausch von Testversionen und Auszügen aus der Kommunikation.

Dieser Thread behandelt NICHT die Einbindung der Shellies via MQTT und zugehöriger Templates!

Grundlage des Shelly-Moduls ist die Kommunikation via HTTP. Im Wesentlichen werden von Fhem Anfragen und Schaltbefehle an den Shelly geschickt und dessen Antwort ausgewertet.

Die grundlegenden Anfragen bei den Geräten der 2. Generation sind folgende:
http://<ip-des-Shelly>/rpc/Shelly.GetStatus
http://<ip-des-Shelly>/rpc/Shelly.GetConfig
http://<ip-des-Shelly>/rpc/Shelly.GetDeviceInfo
Da mir nicht alle Shelly-Modelle zur Verfügung stehen und weil sich die Inhalte je nach Konfiguration auch ändern können, bin ich darauf angewiesen, dass mir die Antworten der Shellies zur Verfügung gestellt werden (bitte unbedingt in Code-Tags!).
IPC\Ubuntu + Fhem, 1wire, Shellies, Siemens Logo!, Z-Wave, PhilipsTV, Vu+duo2, KM200

JWRu

Interessant wäre mal, welche Shelly-Sensoren/Aktoren zur Zeit unterstützt werden. Der Shelly-Gerätepark ist ja durch die Übernahme von Qubino (Z-Wave) ziemlich unübersichtlich geworden.
Welche Werte gibt's denn aktuell für das Attribut "model"? Ich habe leider nichts gefunden.
ZBox; RasPi 3B; RasPi Zero W; Homematic; Z-Wave; EnOcean, Shelly; DuoFern; Oregon-Sensoren; TFA-Sensoren; Steuerung Viessmann-Heizung; Arduinos für Strom-, Wasser-, Gaszähler, Rauchmelder und FI-Schutzschalter

Starkstrombastler

Zitat von: JWRu am 26 Februar 2024, 20:00:12Welche Werte gibt's denn aktuell für das Attribut "model"? Ich habe leider nichts gefunden.
Das Attribut model wird in den neueren Versionen des Moduls automatisch ermittelt und gesetzt. In der Attribut-Auswahl erscheint dann dieser Werte und auch 'generic'.

Um zu sehen, welche Werte das Attribut 'model' annehmen kann, kannst du dich wie folgt behelfen: definiere ein Dummy device vom Typ Shelly, z.B. so:  define dummy Shelly 1.2.3.4
Bei der Auswahl des Attributes 'model' werden dann alle derzeit möglichen Werte angeboten.
IPC\Ubuntu + Fhem, 1wire, Shellies, Siemens Logo!, Z-Wave, PhilipsTV, Vu+duo2, KM200

JWRu

ZitatBei der Auswahl des Attributes 'model' werden dann alle derzeit möglichen Werte angeboten.
Super - danke!
ZBox; RasPi 3B; RasPi Zero W; Homematic; Z-Wave; EnOcean, Shelly; DuoFern; Oregon-Sensoren; TFA-Sensoren; Steuerung Viessmann-Heizung; Arduinos für Strom-, Wasser-, Gaszähler, Rauchmelder und FI-Schutzschalter

ChristianP5r

Zitat von: Starkstrombastler am 24 Februar 2024, 12:15:05Da mir nicht alle Shelly-Modelle zur Verfügung stehen und weil sich die Inhalte je nach Konfiguration auch ändern können, bin ich darauf angewiesen, dass mir die Antworten der Shellies zur Verfügung gestellt werden (bitte unbedingt in Code-Tags!).


Soll ich den Output des neuen Shelly Plus Uni hier posten oder hast du so ein Gerät selbst verfügbar? Würde mich schon auf eine Implementierung freuen  ;)

Starkstrombastler

#5
Zitat von: ChristianP5r am 28 Februar 2024, 19:57:15Soll ich den Output des neuen Shelly Plus Uni hier posten oder hast du so ein Gerät selbst verfügbar?
Ja bitte, hier posten. Habe selbst noch keinen Plus-Uni. Bis eine Testversion verfügbar ist wird es vermutlich aber noch zwei Wochen dauern.

Wenn du den ShellyPlusUni definierst define <name> Shelly <ip> sollte er mit dem Attribut model=generic angelegt werden, da der Plus Uni noch nicht gelistet ist. Du kannst dann versuchen das Attribut model manuell auf "ShellyPro2" zu stellen. Zumindest Ein- und Ausgänge sollten dann verfügbar sein.
IPC\Ubuntu + Fhem, 1wire, Shellies, Siemens Logo!, Z-Wave, PhilipsTV, Vu+duo2, KM200

ChristianP5r

Hallo,

Hier der Output des Shelly Plus Uni. Ich habe bei diesem den Counter (Wasserdurchflusssensor) und den analogen Eingang (Druckmesser/Wasserstand Zisterne) im Einsatz.

/rpc/Shelly.GetStatus
{"ble":{},"cloud":{"connected":true},"input:0":{"id":0,"state":false},"input:1":{"id":1,"state":false},"input:2":{"id":2,"counts":{"total":86127,"xtotal":179.43,"by_minute":[0,0,0],"xby_minute":[0.00,0.00,0.00],"minute_ts":1709288160},"freq":0.00},"input:100":{"id":100,"percent":87.1},"mqtt":{"connected":true},"switch:0":{"id":0, "source":"init", "output":false},"switch:1":{"id":1, "source":"init", "output":false},"sys":{"mac":"XXXXXXXXXXXX,"restart_required":false,"time":"11:16","unixtime":1709288197,"uptime":1107620,"ram_size":257356,"ram_free":98800,"fs_size":458752,"fs_free":143360,"cfg_rev":22,"kvs_rev":0,"schedule_rev":0,"webhook_rev":0,"available_updates":{"stable":{"version":"1.2.2"}},"reset_reason":1},"wifi":{"sta_ip":"X.X.X.X","status":"got ip","ssid":"X","rssi":-79},"ws":{"connected":false}}

/rpc/Shelly.GetConfig
{"ble":{"enable":true,"rpc":{"enable":true},"observer":{"enable":false}},"cloud":{"enable":true,"server":"shelly-9-eu.shelly.cloud:6022/jrpc"},"input:0":{"id":0,"name":null,"type":"switch","enable":true,"invert":false},"input:1":{"id":1,"name":null,"type":"switch","enable":true,"invert":false},"input:2":{"id":2,"name":null,"type":"count","enable":true,"count_rep_thr":100,"freq_window":1,"freq_rep_thr":10,"xcounts":{"expr":"x/480","unit":"L"},"xfreq":{"expr":"x/480","unit":null}},"input:100":{"id":100,"name":"Schacht","type":"analog","enable":true,"invert":false,"report_thr":1.0,"range_map":[0.0,38.8],"xpercent":{"expr":null,"unit":null},"range":0},"mqtt":{"enable":true,"server":"X.X.X.X:xxxx","client_id":"shellyplusuni","user":null,"ssl_ca":null,"topic_prefix":"shellyplusuni","rpc_ntf":true,"status_ntf":false,"use_client_cert":false,"enable_rpc":true,"enable_control":true},"switch:0":{"id":0, "name":null,"in_mode":"follow","initial_state":"match_input", "auto_on":false, "auto_on_delay":60.00, "auto_off":false, "auto_off_delay":60.00},"switch:1":{"id":1, "name":null,"in_mode":"follow","initial_state":"match_input", "auto_on":false, "auto_on_delay":60.00, "auto_off":false, "auto_off_delay":60.00},"sys":{"device":{"name":null,"mac":"XXXXXXXXXXXX","fw_id":"20240213-140544/1.2.0-gb1b9aa8","discoverable":true,"eco_mode":false},"location":{"tz":"Europe/Vienna","lat":XX.X,"lon":XX.X},"debug":{"level":2,"file_level":null,"mqtt":{"enable":false},"websocket":{"enable":false},"udp":{"addr":null}},"ui_data":{},"rpc_udp":{"dst_addr":null,"listen_port":null},"sntp":{"server":"time.google.com"},"cfg_rev":22},"wifi":{"ap":{"ssid":"ShellyPlusUni","is_open":true, "enable":false, "range_extender": {"enable":false}},"sta":{"ssid":"X","is_open":false, "enable":true, "ipv4mode":"static","ip":"X.X.X.X","netmask":"X.X.X.X","gw":"X.X.X.X","nameserver":"X.X.X.X"},"sta1":{"ssid":null,"is_open":true, "enable":false, "ipv4mode":"dhcp","ip":null,"netmask":null,"gw":null,"nameserver":null},"roam":{"rssi_thr":-80,"interval":60}},"ws":{"enable":false,"server":null,"ssl_ca":"ca.pem"}}

/rpc/Shelly.GetDeviceInfo
{"name":null,"id":"shellyplusuni","mac":"XXXXXXXXXXXX","slot":0,"model":"SNSN-0043X","gen":2,"fw_id":"20240213-140544/1.2.0-gb1b9aa8","ver":"1.2.0","app":"PlusUni","auth_en":false,"auth_domain":null}
Wenn du weitere Infos benötigst, gib mir einfach Bescheid.

DANKE!

Neeein

Hi,

ich habe unter Diesem Link die ShellyBlu (mit MQTT) in Fhem eingebunden.

Da es offensichtlich hier mit dem Shelly Modul weiter geht, wäre es schön, wenn ihr mir dabei helfen könntet, meine unterirdischen Programmierfähigkeiten zu überarbeiten oder einen anderen Lösungsansatz zu finden. 😊
Evtl. könnten wir die Lösung auch in ein neues-, oder in das ShellyModul überführen? Finde die Dummylösung von mir einfach nicht wirklich elegant...

Ich bin mir bewusst dass oben steht kein MQTT, aber will es trotzdem nicht unversucht lassen eine bessere Lösung als meine zu finden.


LG N3331N

Starkstrombastler

Zitat von: Neeein am 01 März 2024, 18:31:52Evtl. könnten wir die Lösung auch in ein neues-, oder in das ShellyModul überführen?
Was geben denn die Shelly-Gateways aus, wenn du die im ersten Post aufgeführten Anfragen im Browser eingibst? Tauchen die BLU in irgendeiner Weise auf?
IPC\Ubuntu + Fhem, 1wire, Shellies, Siemens Logo!, Z-Wave, PhilipsTV, Vu+duo2, KM200

Neeein

ZitatWas geben denn die Shelly-Gateways aus, wenn du die im ersten Post aufgeführten Anfragen im Browser eingibst? Tauchen die BLU in irgendeiner Weise auf?

Da ich deine Frage nicht genau verorten kann bekommst du 2 Antworten :)

Antwort 1:
Wenn du auf Schritt 4 abzielst erstelle ich zuerst ein Notify, welcher auf Events der MQTT Devices (Plus/Pro) reagiert die ShellyBludaten betreffen. Löst das Notify aus wird immer die 99Utils aufgerufen um die Bludaten vom entsprechenden MQTT PRO/Plus) auszulesen und einen Dummy zu erstellen oder zu aktualisieren. Im Dummy sind dann die entsprechenden aus dem Payload Daten hinterlegt. 

Antwort 2:
Die Gateways reagieren auf die Bluetooth Beacons und verarbeiten diese über das eingefügte Skript. Die Gateways sind als MQTT-Devices in Fhem angelegt. Die Daten der ShellyBlu werden in den Readings der Shelly Pro/Plus MQTT-Devices abgelegt.
Da lese ich sie aus und schreibe Sie in einen Dummy, der dann das "ShellyBluDevice" darstellt.

Readings vom MQTTDevice:
*address ist die MAC des ShellyBlu
 Du darfst diesen Dateianhang nicht ansehen.

Dummy:
*address ist die MAC des ShellyBlu
 Du darfst diesen Dateianhang nicht ansehen.





Ich hoffe ich konnte deine Frage richtig deuten und beantworten, falls nicht bitte ich dich, sie mir einfach nochmal in anderer Form zu stellen :)

LG

Starkstrombastler

Zitat von: Neeein am 02 März 2024, 20:56:15Da ich deine Frage nicht genau verorten kann bekommst du 2 Antworten :)
Nein, nein, das ist garnicht das was ich wollte.

Gib das hier mal in die Adresszeile deines Browsers ein, wobei die IP-Adresse des Gateway-Shelly entsprechend eingesetzt werden muss:

http://<ip-des-gateway-shelly>/rpc/Shelly.GetStatus

Der Shelly liefert dann Daten (als JSON), so ähnlich wie das ChristianP5r ein paar Posts weiter oben für den Shelly Plus Uni gepostet hat.

Da interessiert mich, ob bzw. wie der Shelly BLU in der Datenstruktur des Gateway-Shelly auftaucht.
IPC\Ubuntu + Fhem, 1wire, Shellies, Siemens Logo!, Z-Wave, PhilipsTV, Vu+duo2, KM200

Neeein

Zitat{"ble":{},"cloud":{"connected":false},"input:0":{"id":0,"state":false},"mqtt":{"connected":true},"script:1":{"id":1,"running":true,"mem_used":2982,"mem_peak":4438,"mem_free":22218},"switch:0":{"id":0, "source":"http", "output":false, "apower":0.0, "voltage":226.5, "freq":50.0, "current":0.000, "aenergy":{"total":1272.870,"by_minute":[0.000,0.000,0.000],"minute_ts":1709445900}, "ret_aenergy":{"total":0.000,"by_minute":[0.000,0.000,0.000],"minute_ts":1709445900},"temperature":{"tC":38.0, "tF":100.3}},"sys":{"mac":"84FCE63CD4FE","restart_required":false,"time":"07:05","unixtime":1709445926,"uptime":207222,"ram_size":258780,"ram_free":88876,"fs_size":1048576,"fs_free":704512,"cfg_rev":26,"kvs_rev":1,"schedule_rev":1,"webhook_rev":0,"available_updates":{},"reset_reason":3},"wifi":{"sta_ip":"192.168.20.69","status":"connecting","ssid":"WLAN IoT","rssi":-90},"ws":{"connected":false}}

Ich würde sagen nein.

Starkstrombastler

Zitat von: Neeein am 03 März 2024, 07:09:46"ble":{}
Hätte gedacht, dass sich hier etwas zu BLU findet.

Vielleicht kann jemand anderes noch etwas zum Stichwort "Shelly BLU Gateway ohne MQTT" beitragen. Ansonsten wäre das erstmal kein Thema für das Shelly-Modul.
IPC\Ubuntu + Fhem, 1wire, Shellies, Siemens Logo!, Z-Wave, PhilipsTV, Vu+duo2, KM200

Starkstrombastler

Zitat von: carlos am 13 März 2024, 01:01:02Hallo,
Ich hätte da mal einen feature request.
Vielleicht ist das ja machbar.

Ich habe in meinem Netz jetzt mal einen shelly als rangeextender eingesetzt.
Da funktioniert soweit ganz gut.
Jedoch würde ich gerne an diesem device sehen welche clients sich da angemeldet haben

Das kann man über folgenden api call machen:

http://<IP>/rpc/Wifi.ListAPClients
Das ergibt z.B. folgende Ausgabe:

{
   "ts":1710287246,
   "ap_clients":[
      {
         "mac":"XX:XX:XX:XX:XX:XX",
         "ip":"192.168.33.5",
         "ip_static":false,
         "mport":12660,
         "since":1710285405
      },
      {
         "mac":"XX:XX:XX:XX:XX:XX",
         "ip":"192.168.33.3",
         "ip_static":false,
         "mport":12524,
         "since":1710284249
      },
      {
         "mac":"XX:XX:XX:XX:XX:XX",
         "ip":"192.168.33.2",
         "ip_static":false,
         "mport":12626,
         "since":3
      }
   ]
}

Was hier wichtig wäre ist der externe Link im Bild.

[attach id=177059]Bildschirmfoto 2024-03-13 um 00.52.31.png[/attach]

Würde mich freuen, wenn man das bei einem rangeextender einbauen könnte.

Gruß

Hubert


Ein erster Ansatz dazu wird sich im nächsten Beta-Update, welches hier veröffentlicht wird, finden.
IPC\Ubuntu + Fhem, 1wire, Shellies, Siemens Logo!, Z-Wave, PhilipsTV, Vu+duo2, KM200

carlos

Da stellt sich mir noch die Frage, ob man die shellies hinter dem rangeextender dann auch über das module definieren kann bzw. dann steuern kann.

Ich fürchte aber nicht.

Ich habe mal 3 tasmota Geräte hinter dem shelly rangeextender gesetzt.
Die funktionieren über MQTT dann auch sehr gut über das MQTT2 device modul.

Dann müsste ich aber bei den Shellies auf MQTT switchen, was ich aber ungern machen würde.

Denn das Shelly module ist (für mich) die bessere Wahl.

Gruß

Hubert
FHEM svn auf Intel NUC mit proxmox,1 UDOO, 3 Raspberry Pi, signalduino, nanoCUL, div. Homematic Komponenten, toom Baumarkt Funksteckdosen, einige sonoffs, hue, shelly