NEWS
Shelly per MQTT schalten geht nicht
-
Sowohl über den MQTT Adapter als auch über den Shelly Adapter wird mir ein Shelly 1 richtig angezeigt. Ich sehe die Änderung wenn ich den Schalter per App oder Schalter änder, umgekehr aber kann ich von IO-Broker den Zustand des Shelly nicht ändern. Sprich das ganze geht momentan nur in einer Richtung.
Woran könnte das liegen bzw. was kann ich da falsch eingestellt haben? -
@wolfgangfb Du musst den Wert unbestätigt schreiben und zwar in command unter dem relay/0
-
@mickym
Wenn der Wert darüber (also neben der "0") off ist kann ich tatsächlich mit "on" den Shelly einschalten (sowohl der Wert neben "0" als auch der Wert bei "command" ändern sich zu "on". Schalte ich aber über die Weboberflöche des Shellys (oder über einen an SW1 angschlossenen Schalter) den Shelly wieder aus wird nur der Wert neben "0" auf "off" geändert, der Wert neben "command" bleibt auf "on". Dann kann ich den Shelly nicht mehr einschalten, ich muss zuvor einmal command auf off und dann wieder auf on setzen.
Unschön ist aauch, dass die Relais über die Shelly Cloud eingebunden den Datenpunkt "Switch" mit true/false haben, das ist viel einfacher in einem Skript zu verarbeiten als die Strings "on" und "off".
Der Shelly, der nicht in der Cloud ist, wird ja auch im Shelly Adapter (scheinbar über mqtt) eingebunden, auch dort kann ich den Shelly nicht per Adapter schalten. -
@wolfgangfb Das command ist nur ein Befehlstopic, die 0 also der Ordner drüber enthält den Status. Wenn Du mit der App oder am Schalter schaltest - ändert sich der command Datenpunkt nicht. Der ist nur für Deine Befehle aus dem iobroker da.
Den Status des Shellies entnimmtst Du NUR aus dem 0 Datenpunkt. Der command Datenpunkt hat für Dich ausser zum Schalten keine Bedeutung.Dann kann ich den Shelly nicht mehr einschalten, ich muss zuvor einmal command auf off und dann wieder auf on setzen.
Doch das geht - Du darfst halt nichts mit irgendwie nur Änderungen oder so Zeug machen. Du kannst 10 mal das gleiche Kommando schicken. Wenn Du lieber mit true/false schaltest musst halt Alias oder Deine Logikmaschine machen. Der Shelly Adapter schickt intern auch on/off - weil das ist die Vorgabe des Herstellers. Lies halt wie es funktioniert:
https://shelly-api-docs.shelly.cloud/gen1/#shelly1-1pm-mqtt
Du kannst Dich entweder nach dem Hersteller richten - oder Du nimmst den Adapter - der interpretiert und übersetzt für Dich. Du musst Dich halt entscheiden.
Es zwingt Dich niemand mqtt zu verwenden, wenn Du lieber mit dem Adapter arbeitest. Du bist halt beim Adapter immer darauf angewiesen, dass ein Gerät unterstützt wird. Und Du wirst Dich bei mqtt auch JSONs oder Objekten auseinandersetzen. Wenn Du das alles nicht willst, dann nimm den Adapter und gut ist.Alternativ kannst Du auch ein Alias erstellen:
und damit die gleiche Funktionalität wie mit dem Adapter erstellen. Du siehst hiermit kann ich auch mit true und false schalten. Zum Schreiben wird der command Datenpunkt genommen zum Lesen der 0 Datenpunkt.
Du siehst Du hast also viele Möglichkeiten:
- mqtt - wie vom Hersteller beschrieben
- alias und mqtt - Beispiel gerade gepostet
- shelly Adapter.
-
Und wie schalte ich dann z.B. aus VIS heraus ein Licht ein oder aus?
-
@wolfgangfb Dann nimmst Du den Alias, da Du wahrscheinlich keine unterschiedlichen Punkte zu schreiben und lesen hast, den Shelly Adapter oder eine selbst erstellten Datenpunkt und Deine Logikmaschine.
Also wenn Du mqtt nehmen willst, wohl am Besten einen Alias. Die Konvertierungsfunktionen habe ich Dir ja unten gepostet. Schreiben tust Du in dem command Datenpunkt - Lesen den 0 Datenpunkt. Ggf. musst Du den Expertenmodus einschalten, um die alias Datenpunkte unter alias.0 zu erstellen.
-
Super, danke, funktioniert. Und wieder etwas gelernt, ich wusste weder, dass man zum lesen und schreiben unterschiedliche Datenpunkte verwenden kann noch das mit der Konvertierungsfunktion (das kann ich auch super für die Fensterzustände gebrauchen, Tiltwinkel in auf/zu umrechnen).
-
Moin,
ich stehe vor einem ähnlichen Problem. Ich habe einen bockigen Shelly, der per MQTT angebunden ist. Ich steuere das Ding in einem Script an, um alle Lampen abzuschalten.
Arbeite ich auf dem Shelly oder direkt in den Objekten und setze das Command auf "off", funktioniert die Kiste.
Arbeite ich per Script, nimmt der Shelly das Kommando oft nicht an. Es ändert sich nicht im Objektbrowser.Nun habe ich es über den Alias versucht und sehe dort, dass "on_actual" den korrekten Status anzeigt, SET aber auf "false" steht, wenn die Lampe am Schalter geschaltet worden ist - und dann die Lampe natürlich nicht abschaltet, wenn ich erneut ein false sende. Und so richtig sinnvoll ist es dann ja auch nicht, vor jedem Absenden eines Kommandos an den Alias zu schauen wie er steht und dann "wenn false, dann erst true und dann false" zu setzen.
Wende ich SET falsch an?
-
@gutgut30 ich weiß zwar gerade nicht von was du gerade redest, den shelly schaltet man in der Gen1 über command und in der Gen2 über Switch: soweit ich das weiß. Der Status in der Gen1 direkt auf 0 als relay/0 über dem command angezeigt. Du brauchst 2 verschiedene Punkte wie unten zu schreiben und lesen. Dass der Status im set oder Setzen nichts mit dem aktuellen Zustand zu tun hast ist klar. Diese topic enthält immer nur den letzten Befehl, der abgesetzt wurde. Außerdem muss man halt aufpassen dass nicht mehrere Adapter schalten. Du solltest den überall rausnehmen, geschrieben was für ein Shelly das ist Gen1 oder Gen2 und dann implementieren. Jedenfalls macht es keinen Sinn die Shellie’s per mqtt nativ und per Adapter zu schalten.
Grün: ist der Status
Gelb: das letzte KommandoKann natürlich unterschiedlich sein, wenn man den Schalter physisch oder mit der App schaltet.
-
@mickym
Dann ist das wohl ein Problem, wenn man ihn physisch schaltet. Denn dann hat man dieses Bild und schon war es das mit dem Schalten über die Objekte:
Ich werde dann wohl doch auf den Shelly Adapter umziehen müssen, sofern der nicht in das gleiche Dilemma läuft. Ärgerlich
-
@gutgut30 Quatsch - ich habe gezeigt wie man das mit dem Alias macht, mit unterschiedlichen Datenpunkten zu Lesen und Schreiben.
https://forum.iobroker.net/post/979214
Zum Lesen den Relay0 Datenpunkt, zum Schreiben den Command Datenpunkt und auch die unterschiedlichen Konvertierungsfunktionen sind in dem Screenshot - mehr kann man glaub ich nicht zeigen. Wenn Du Fragen hast, dann frag - wenn Du lieber den Shelly Adapter nutzen willst, kannst Du das gerne tun, wenn nicht habe ich es in dem Beitrag gezeigt, wie es geht.
Wie gesagt, dass ist kein Grund deswegen den Shelly Adapter zu nutzen. In dem Beitrag unten zeigt der Alias dann nur nicht on/off sondern true/false zum Schalten und als Status an.
-
-
@gutgut30 Das ist doch verkehrt rum.
Du liest doch den Status aus relay.0
und schreibst den Status in relay.0.commandund die Konvertierung hast Du auch nicht richtig abgeschrieben:
Ausserdem mach das nicht mit dem "BLÖDEN" Geräteadapter sondern trage das in den Alias direkt in den Objekten ein.
Dieser Adapter macht Dir alles kaputt. -
@mickym OMG - du hast Recht, ich hab lesen und schreiben vertauscht. Ich Idiot! Danke.
Die Konvertierung habe ich tatsächlich nicht aus diesem Thread, die Syntax sollte aber passen. Checke ich noch mal.
-
@gutgut30 Na und schmeiß diesen Geräteadapter raus - der macht nur UNSINN. Mach das direkt im Alias Datenpunkt in den Objekten. Dieser Geräteadapter macht mehr kaputt, als er ganz macht. Das habe ich schon mehrfach ausprobiert - ICH kann nur abraten.
-
@gutgut30 sagte in Shelly per MQTT schalten geht nicht:
Die Konvertierung habe ich tatsächlich nicht aus diesem Thread, die Syntax sollte aber passen. Checke ich noch mal.
ist nur umständlich, weil val == true ? - entspricht val ?
Aber ich habe keine Ahnung warum ich alles da rein schreibe, wenn man es sich dann irgendwoher sucht. Aber am Schlimmsten ist der Geräteadapter - das ist wahrscheinlich auch wieder ein Video aus dem vorigen Jahrhundert.
-
@mickym
Bin das Spielchen gerade noch mal durch. Auch das klappt nicht. Liegt aber auch wieder am command, das auf off bleibt. Denn auch der Alias macht am Ende ja auch nichts anderes, als aus dem false ein off zu schreiben. Daher aber der command auf off bleibt wenn ich extern schalte, gewinne ich hier nichts.Also doch ein Adapter-Versuch
Edit: Alternativ setze ich den Shelly von Edge Switch auf Detached Switch und steure nur im iobroker. Nicht die eleganteste Lösung, aber dann würde immerhin alles über den command laufen und dieser immer korrekt sein.
-
@gutgut30 Ich kann Dir nur sagen es geht. Vergiss den Device Adapter und mach es so wie ich beschrieben habe. Wenn Du den Schalter physisch betätigst, dann springt der relay.0 auf den Zustand um. Der command Datenpunkt wird im Alias nie angezeigt, in den wird nur geschrieben. Ich kann Dir nur sagen es funktioniert - ich habe es selbst ausprobiert.
Und zwar gerade nochmal:
WICHTIG ist, dass Du den Alias als Logikwert definierst. Wir können es gerne Schritt für Schritt durchgehen:
Ich hab da zwar toggle switch, aber das spielt keine Rolle.
Also Fragen;
- Neuen Alias selbst unter 0.alias - ohne irgendwelche Adapter als Logikwert erstellt?
- relay/0 Datenpunkt zum Lesen im Alias Tab definiert?
- relay/0/command Datenpunkt zum Schreiben im Alias Tab definiert
- Konvertierungsfunktion beim Lesen:
val == "on" ? true : false
- Konvertierungsfunktion beim Schreiben
val ? "on" : "off"
Wichtig ist, dass der Aliasdatenpunkt als Logikwert angelegt wurde.
Wenn der Aliasdatenpunkt als Alias angelegt wurde, dann kannst Du keinen Text mehr eingeben:
Und wie immer beim Schalten - darf man das ganz nur "unbestätigt" schalten - das heißt der Haken Bestätigt darf NIE gesetzt sein.
Und egal welchen Schaltertyp (ausser detached) Du verwendest - relay/0 gibt immer den aktuellen Status des Relais aus (egal welcher Schaltertyp - und egal ob Du am Schalter, in einer App oder über VIS geschaltet hast).
-
@mickym
Ich hab es letztendlich genau so aufgebaut. Aber wie gesagt, wenn das Command bei einer externen Aktionen nicht umschaltet, dann kann auch der Alias da nichts machen.Ich hab das ganze mal mit einem anderen Shelly 2.5 verglichen. Der andere setzt den Command bei externer Aktion korrekt identisch auf den Wert aus 0. Und dann klappt das auch. Die Settings beider Shellys sind absolut gleich. Auch nach einem Factory Reset tanzt dieser eine leider aus der Reihe.
Hab es jetzt mit einem Script gelöst, dass das Command identisch zum relay hält. Vielleicht hat der Shelly einfach einen weg, so gehts jetzt aber.
Danke & frohe Tanne
-
@mickym hallo könnte mir auch jemand helfen.
Ich möchte auch shelly über mqtt adapter schalten.
das Read funktion geht wenn ich den relai über den Web von shelly schalte, dann Aktualisiert sich das Datenpunkt , möchte ich aber über iobroker schalten geht es nicht habe den datenpunkt command nicht unter reali nur 0 befehl on oder off geht nicht.Muss ich den datenpunkt comman selber erstellen wenn ja wie???