Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Shelly-Geräte mit MQTT-Adapter steuern

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Shelly-Geräte mit MQTT-Adapter steuern

    This topic has been deleted. Only users with topic management privileges can see it.
    • mickym
      mickym Most Active @KlausStoertebeker last edited by mickym

      @klausstoertebeker Also die Shelly-Gen1 Geräte sind noch viel einfacher zu bedienen. Ja Du musst das in den command topic schreiben - wobei Du bei den Bewegungsmeldern ja nichts zum steuern hast. Einstellungen kannst Du ggf. über das HTTP Interface bzw. die HTTP API machen (s. settings).

      Hier erst mal die gesamte Doku: https://shelly-api-docs.shelly.cloud/gen1/#common-mqtt-commands

      Bei den Shelly TRV hast Du mehrere Möglichkeiten: https://shelly-api-docs.shelly.cloud/gen1/#shelly-trv-mqtt

      Du kannst entweder alle Thermostate auf einmal ansprechen (shellies/thermostat/0/command/ to address all TRVs) oder diese einzeln ansprechen ( or shellies/shellytrv-<id>/thermostat/0/command/ to address an individual device) .
      Die command-topics sind auf der Seite eigentlich im Einzelnen alle aufgelistet, was Du machen kannst.

      a3865a57-c799-4612-82fd-64f1d9bd021c-image.png

      Also einfach
      auch als topic unter dem command topic
      shellies/shellytrv-<id>/thermostat/0/command/target_t und dort dann 22.

      Also kein JSON - wie ich vorher geschrieben hatte!!!

      Die command topic sind als generell immer direkt unter der zu steuernden Einheit:
      7a610410-c8cf-464e-9dcc-307caa78eedb-image.png

      Node-Red hat zwar eine eigene Steuerung, aber die basiert natürlich auch darauf, dass das Betriebssystem entsprechend meldet. Insofern ja und nein. Außerdem (s. unten) wird der NodeRed Adapter als Tochterprozess gestartet. Wenn der Iob mit allen Adaptern ein Problem macht, dann auch mit dem NodeRed Adapter.
      Ansonsten wenn Du Hardware ansprichst, werden oft die gleichen NodeJS Bibliotheken verwendet, aber man kann beim Ansprechen der Hardware das als Ersatz zu einem Adapter sehen. Auch wenn ein Adapter nicht funktioniert, kann man es mit einer Node versuchen.
      Quasi onBoard ist ja die Inject Node - die zeitereignisse verarbeiten kann, ansonsten kann ich Dir die cronplus Node empfehlen oder die chronos Nodes (sehr vielfältig) oder auch wenn man grafisch arbeiten möchte die light scheduler NOdes.

      Hätte ich beim Einsatz von "Node-Red" das gleiche Problem?

      Wenn Dein iobroker alle Adapter irgendwie tot gestellt hat, dann hättest Du auch mit dem NodeRed Adapter das gleiche Problem, da Du ja NodeRed nicht als Standalone Version betreibst. Was auch nicht sinnvoll ist, da Du dann nicht auf die iobroker Datenpunkte aus NodeRed zugreifen kannst. Sprich jeder Adapter im iobroker ist ja ein Tochterprozess des iobrokers.

      KlausStoertebeker 1 Reply Last reply Reply Quote 0
      • KlausStoertebeker
        KlausStoertebeker @mickym last edited by

        @mickym
        danke für die Info 🙂

        Ich habe nur noch eine Frage zur command-Syntax. Wenn ich beispielsweise den target_C auf 22 Grad stellen will, was schreibe ich dann in den command-Datenpunkt:

        target_C: 22
        target_C = 22
        target_C?value=22
        
        mickym 1 Reply Last reply Reply Quote 0
        • mickym
          mickym Most Active @KlausStoertebeker last edited by mickym

          @klausstoertebeker Nein es heißt

          1. target_t und nicht target_c und
          2. zweitens ist das ein eigenter topic unter command - in dem Du nur die Zahl publishst.

          Also unter

          shellies/shellytrv-<id>/thermostat/0/command/target_t, also unter thermostat/0 machst Du ein Folder command und darunter ein Datenpunkt target_t und in den schreibst Du eine Zahl als Zieltemperatur.

          In diesem Thread siehst Du dass target_t ein eigenes topic unter command ist:

          eeda97b7-5104-4ec3-80c3-f6ba5f0d3a39-image.png

          Das gilt aber wie gesagt nur für Gen1 Geräte, nicht für Gen3 Geräte

          19ea2fdc-8e84-485f-a8bc-834183a221b1-image.png

          KlausStoertebeker 1 Reply Last reply Reply Quote 0
          • KlausStoertebeker
            KlausStoertebeker @mickym last edited by KlausStoertebeker

            @mickym
            Moin moin mickym,
            ich brauche nochmal Deine Hilfe. Ich möchte aus folgender JSON-formatierter Zeichenkette folgende Information extrahieren

            {
              "src": "shellyplusi4-c4d8d554856c",
              "dst": "shellyplusi4-c4d8d554856c/events",
              "method": "NotifyEvent",
              "params": {
                "ts": 1742530641.42,
                "events": [
                  {
                    "component": "input:2",
                    "id": 2,
                    "event": "single_push",
                    "ts": 1742530641.42
                  }
                ]
              }
            }
            

            folgende Information extrahieren:
            wenn "events" vorhanden dann wenn "component" = "input:2" enthalten gib den Wert von "event" zurück.
            Wie kann ich das mit dem JSON.parse() und/oder anderen JSON.xxxx machen? Ich möchte das in einen Datenpunkt von einem Alias packen, um den RPC-Event-Datenpunkt eines Shelly auszuwerten.

            Hintergrund ist, dass ich nicht nur feststellen will, ob eine Taste gedrückt wurde (hier Taste an "input:2"), sondern auch, um was für einen Tastendruck es sich gehandelt hat (zum Beispiel "einfach", "zweifach", "dreifach", "lang"...)

            Wäre das dann vielleicht sowas wie

            if(JSON.parse(JSON.parse(val).params.events).component == "input:2") JSON.parse(JSON.parse(val).params.events).event; "";
            
            mickym 1 Reply Last reply Reply Quote 0
            • mickym
              mickym Most Active @KlausStoertebeker last edited by mickym

              Ob das mit den events so gut ist, bezweifle ich mal - da das ein Array ist und wenn das event an anderer Stelle steht, dann schaust Du in die Röhre. Ich würde lieber bei Status schauen. "If" funktioniert in meinen Augen auch nicht.

              So wie es momentan funktioniert wäre so:

              JSON.parse(val).params.events[0].component === "input:2" ? JSON.parse(val).params.events[0].event  : ""
              

              Aber wie gesagt, dass geht nur wenn das event an 1. Stelle steht. Wenn das komplexer wird, würde ich doch lieber eine Logikamschine nehmen. So funktioniert es halt wenn das an erster Stelle im Array steht.

              Die Frage ist halt - gibt es dennn unter status kein "input:2"
              8beb3228-c48c-43be-9589-719308450eed-image.png

              Wie gesagt, so funktioniert es zwar - aber ich würde immer den status erst abfragen, bevor ich auf events reagiere. Dann kannst Dir auch die Bedingung sparen, da unter status "input:2" auch nur dann aktualisiert wird, wenn getriggert.

              KlausStoertebeker 1 Reply Last reply Reply Quote 0
              • KlausStoertebeker
                KlausStoertebeker @mickym last edited by

                @mickym

                Hallo mickym,
                ich kann den Status eines "input:x" offenbar nur auswerten, wenn dieser als "Switch" konfiguriert ist. Dann bekomme ich über "JSON.parse(val).state" den aktuellen Schalterstatus ("true" oder "false").
                Ich habe aber meine "input:x" als "Button" konfiguriert und wollte auch hier über die "JSON.parse(val).state" Funktion die Art des Tastendrucks auswerten. Aber offenbar ändert sich der "state" nicht, wenn der "input:x" als Button konfiguriert ist - der ist immer "null". Zumindest habe ich mir mal ein Skript geschieben, dass auf eine Statusänderung getriggert war. Aber das hat nie ausgelöst"...

                JSON.parse(val).params.events[0].component === "input:0" ? JSON.parse(val).params.events[0].event  : ""
                

                funktioniert prima, allerdings bekomme ich nun vom Javascript-Adapter ständig folgende Fehlermeldungen:

                javascript.0   2025-03-23 18:32:00.161  error  Invalid read function for "alias.0.Kueche_Deckenbeleuchtung_Hw-Schalter.Schalter": "JSON.parse(val).params.events[0].component === "input:1" ? JSON.parse(val).params.events[0].event : (null)" => Cannot read properties of undefined (reading '0')
                

                Ich schätze aber mal, dass das damit zusammenhängt, dass nicht bei jedem Event auch die Attribute "component" und "event" enthalten sind, oder? Kann man diese Fehler irgendwie abfangen, indem man die read-Funktion anpasst?

                mickym 1 Reply Last reply Reply Quote 0
                • mickym
                  mickym Most Active @KlausStoertebeker last edited by

                  @klausstoertebeker sagte in Shelly-Geräte mit MQTT-Adapter steuern:

                  Ich schätze aber mal, dass das damit zusammenhängt, dass nicht bei jedem Event auch die Attribute "component" und "event" enthalten sind, oder?

                  Ja - deswegen ist events auch ungeeignet. Du sollst unter status den Datenpunkt auswerten. Ein Button hat KEINEN Zustand - deswegen ist er in der Regel true. Das heißt hier prüft man nur auf Aktualisierung.

                  KlausStoertebeker 1 Reply Last reply Reply Quote 0
                  • KlausStoertebeker
                    KlausStoertebeker @mickym last edited by

                    @mickym

                    Bei mir sind die Buttons "null" - siehe hier:

                    Bildschirmfoto vom 2025-03-23 18-45-26.png

                    mickym 1 Reply Last reply Reply Quote 0
                    • mickym
                      mickym Most Active @KlausStoertebeker last edited by

                      @klausstoertebeker und bei denn switches?

                      KlausStoertebeker 1 Reply Last reply Reply Quote 0
                      • KlausStoertebeker
                        KlausStoertebeker @mickym last edited by

                        @mickym

                        Ob die Switches an oder aus sind, siehst Du am Attribut "output": "true" = an...
                        Und ich muss Dir recht geben: Der Status der "input:x" wechselt von "null" auf "true", wenn er gedrückt wird - mea culpa! Vermutlich hat mein damaliges Skript nicht reagirt, weil ich nicht auf einen String sondern auf einen Boolean verglichen habe.

                        Kann man diese Abfrage auch irgendwie in die Alias-read-Funktion packen? Vielleicht in der folgenden Art:

                        JSON.parse(mqtt.0.shellyplus2pm-d48afc7dbd1c.status.input:0).state === "true" ? JSON.parse(val).params.events[0].event  : "null"
                        
                        mickym 1 Reply Last reply Reply Quote 0
                        • mickym
                          mickym Most Active @KlausStoertebeker last edited by mickym

                          @klausstoertebeker

                          === "true" 
                          

                          läßt Du einnfach weg.

                          Also so:

                          JSON.parse(mqtt.0.shellyplus2pm-d48afc7dbd1c.status.input:0).state ? JSON.parse(val).params.events[0].event : "null"
                          
                          KlausStoertebeker mickym 2 Replies Last reply Reply Quote 0
                          • KlausStoertebeker
                            KlausStoertebeker @mickym last edited by

                            @mickym

                            Habe ich gemacht, und ich erhalte jetzt folgenden Fehler:

                            javascript.0  2025-03-23 19:17:00.212  error  Invalid read function for "alias.0.Wohnzimmer_Esstischlampe_Hw-Schalter.Taster": "JSON.parse(mqtt.0.shellyplus2pm-d48afc7dbd1c.status.input:0).state ? JSON.parse(val).params.events[0].event : "null"" => missing ) after argument list
                            
                            1 Reply Last reply Reply Quote 0
                            • mickym
                              mickym Most Active @mickym last edited by mickym

                              @mickym sagte in Shelly-Geräte mit MQTT-Adapter steuern:

                              mqtt.0.shellyplus2pm-d48afc7dbd1c.status.input:0

                              Na ist ja auch ein Fehler. In dem parse muss ja auch val. Solange da bei state null ist, dann hilft Dir das nichts. Also ist der Datenpunkt so ungeeignet - dann musst halt doch mit dem Blockly arbeiten.

                              1 Reply Last reply Reply Quote 0
                              • Master67
                                Master67 @mickym last edited by

                                Puh.... ich trottelt hätte auf die Gen. 3 warten sollen!

                                Mit der Überzeugung das ich die Shellys PlugPlus S per Shelly Adapter im ioBroker steuern kann, habe ich mir 10 Stück gekauft, die Shellys Gen, 1 die bei mir laufen sind alle mit Tasmota geflasht und sind somit im ioBroker
                                eingebunden.
                                Gut, nun versuche ich die per Mqtt in den iob zubekommen, aber hier scheitere ich schon an der Übersetzung:
                                2025-05-01_13-08.png

                                Keine Ahung wo und wie ich das alles eintragen soll, zum Testen läuft auch noch HA (nutze ich nicht, weil das kein Blockly hat) dort werden die PlugPlus s aber gefunden, ich glaube ich bin langsam zu alt für den sch....

                                Hat jemand eine "einfache" Anleitung wie ich das so hinbekommen das ist auf die Daten wie Power/Watt usw.. per ioBroker zugreifen kann?

                                Alternativ würde mir nur dann bleiben die Teile irgendwo im Keller zu verbauen wo sie nur "schalten" und nichts Anzeigen sollen und mit 10 neue Messdosen mit Tasmota drauf zu kaufen 🙂

                                mcm1957 BananaJoe 2 Replies Last reply Reply Quote 0
                                • mcm1957
                                  mcm1957 @Master67 last edited by

                                  @master67
                                  Warum verwendest du nicht den Shelly Adapter?
                                  Shelly Plus Plug S ist voll unterstützt.

                                  Oder lebst die die sprichwörtliche Methode "Warum einfach wenns umständlich auch geht?" 🙂

                                  Da giubts ne deutsche Anleitung auch gratis dazu:
                                  https://github.com/iobroker-community-adapters/ioBroker.shelly/blob/master/docs/de/README.md

                                  1 Reply Last reply Reply Quote 0
                                  • BananaJoe
                                    BananaJoe Most Active @Master67 last edited by

                                    @master67 Öhm, laufen deine Shelly Plug S nun mit der Original-Shelly Software? oder mit Tasmota?

                                    1 Reply Last reply Reply Quote 0
                                    • Master67
                                      Master67 last edited by Master67

                                      @mcm1957 sagte in Shelly-Geräte mit MQTT-Adapter steuern:

                                      Warum verwendest du nicht den Shelly Adapter?

                                      Das war der Plan.... nur werden im Shelly Adapter die Geräte der 1. Gen gefunden, keinen einzigen PlugPlus S, was mich ja auch Wundert, weil in HA werden die ja auch im Shelly "Adapter" gefunden,
                                      dachte auch erst ist ein Einstellungsproblem, konnte es aber nicht lösen!

                                      @bananajoe sagte in Shelly-Geräte mit MQTT-Adapter steuern:

                                      Öhm, laufen deine Shelly Plug S nun mit der Original-Shelly Software? oder mit Tasmota?

                                      Die PlugPlus S sind neu, die kann man nicht mehr mit Tasmota Flashen, also ist die Original Software drauf, nur die Shellys der 1. Gen, laufen (bis auf zwei) mit Tasmota.

                                      So... nur 1. Gen
                                      2025-05-01_16-28.png

                                      BananaJoe mcm1957 2 Replies Last reply Reply Quote 0
                                      • BananaJoe
                                        BananaJoe Most Active @Master67 last edited by

                                        @master67 sagte in Shelly-Geräte mit MQTT-Adapter steuern:

                                        Die PlugPlus S sind neu, die kann man nicht mehr mit Tasmota Flashen, also ist die Original Software drauf, nur die Shellys der 1. Gen, laufen (bis auf zwei) mit Tasmota.

                                        Ok, die Shellys mit Tasmota sind nun Tasmotageräte - dann müsstest du diese mit dem Sonoff-Adapter einbinden.
                                        Da steht nur noch Shelly drauf, ansonsten haben die nichts mehr mit Shelly zu tun.

                                        Die neueren Shellys sollten per MQTT laufen, sprechen darüber aber eine völlig andere Syntax.

                                        Die nutzt du über den Shelly Adapter im MQTT-Modus. Wenn du den Adapter konfigurierst (Adapter! Unter iobroker!), stellst du dort den Port, Benutzernamen und Passwort ein:
                                        bd0729b9-cea5-4429-bebb-13b37cc5db53-image.png

                                        Auf den Shellys konfigurierst du dann MQTT mit genau diesen Einstellungen - insbesondere den Port beachten!

                                        1 Reply Last reply Reply Quote 1
                                        • mcm1957
                                          mcm1957 @Master67 last edited by

                                          @master67

                                          Wenn du GEN 1 Geräte mit dem Shelly Adapter benutzen willst, dann stellst du den Shelly Adapter (normalerweise) auf COAP ein.

                                          Wenn du GEN2 / 3 / 4 Geräte mit dem Shelly Adapter benutzen willst, dann stellst du den Shelly Adapter auf MQTT ein.

                                          Das bedeutet:
                                          Typisch hast due ZWEI Shelly Instanzen - eine Instanz mit COAP für GEN 1 Geräte und eine mit MQTT für GEN 2+ Geräte.

                                          Eine ausführliche Anleitung hab ich dir schon oben verlinkt:
                                          https://github.com/iobroker-community-adapters/ioBroker.shelly/blob/master/docs/de/README.md

                                          Bitte beachte, dass du in den Shellies GEN2+ MQTT explizit einschalten musst. Weiters musst du die IP des IoBroker hosts und den Port des Shelly Adapters (typisch 1882) angeben.

                                          Wenn dann der Shelly noch immer nicht erkannt wird, poste bitte mal

                                          • die Einstellungen des Adapters
                                          • die Einstellungsseite (MQTT) eines Shellies
                                          • allfällige LOGs
                                          Master67 2 Replies Last reply Reply Quote 1
                                          • Master67
                                            Master67 @mcm1957 last edited by

                                            @mcm1957 sagte in Shelly-Geräte mit MQTT-Adapter steuern:

                                            Das bedeutet:
                                            Typisch hast due ZWEI Shelly Instanzen - eine Instanz mit COAP für GEN 1 Geräte und eine mit MQTT für GEN 2+ Geräte.

                                            Mist.... hätte man auch von selbst draufkommen können, so habe ich das z.B. beim Modbus auch, werde ich heute Abend erstellen und dann mal kurz berichten ob die Shellys dann da sind, danke dir für den Tipp 👍

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate
                                            FAQ Cloud / IOT
                                            HowTo: Node.js-Update
                                            HowTo: Backup/Restore
                                            Downloads
                                            BLOG

                                            956
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

                                            8
                                            52
                                            3694
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo