NEWS
[Gelöst:] ESP8266 Ausgänge aus ioBroker schalten
-
Hallo und frohe Ostern allseits!
Falls dennoch jemand hier ins Forum schaut:
Ich möchte Ausgänge, die ein Wemos D1 mini lokal steuert, zusätzlich auch über Blockly aus ioBroker heraus schalten können. Wie muss ich die Ausgänge dazu auf dem D1 mini konfigurieren (dort läuft die ESPeasy Firmware)?
Mit Zwischensteckdosen, auf die ich Tasmota geflasht habe, funktioniert das problemlos, d.h. die kann ich aus dem ioBroker schalten.Die Zwischenstecker liefern aber ohne mein Zutun in den Objekten des Sonoff-Adapters ein Element namens "...Power", der Rolle "Switch" und den möglichen Zuständen "true" und "false". Diese kann ich mit Blockly einfach steuern.
Der D1 mini ist über den MQTT Adapter angebunden und liefert mir zunächst von selbst keine solchen Elemente frei Haus. Ich finde auch in der ESPeasy Firmware kein Device, von dem ich die gewünschte Funktion erwarten würde. In den dortigen Rules nutze ich zwei virtuelle Geräte vom Typ "Switch Input -Switch" zur Beobachtung des aktuellen Status von Ausgängen, um in den Rules darauf reagieren zu können. Diese sehe ich auch im ioBroker als Elemente namens "...State", der Rolle "Variable" und den möglichen Zuständen "1" und "0".
Beim Versuch diese Elemente aus Blockly heraus zu schreiben erhalte ich immer eine Warnmeldung:
"javascript.0 (1147) at Object.<anonymous> (script.js.Skript_1:16:5)"Und in den Foren bin ich bisher nicht fündig geworden, daher die Frage hier. Ich vermute, dass die Ursache in den unterschiedlichen Typen der Elemente im ioBroker liegt...
Kann mir hier jemand sagen, wo mein Fehler liegt? Danke!
-
Schau mal, ob Die das vielleicht etwas weiter hilft.
diesen Datenpunkt kannst Du mit Blockly auf 1 oder 0 setzen um den entsprechenden GPIO zu steuern.
-
@falke69
Vielen Dank für den Hinweis, werde ich gleich ausprobieren!Da ich die Antwort leider nicht gleich mitbekommen hatte, habe ich in der Zwischenzeit einen anderen, möglichen (Um-) Weg gefunden:
Mittels "request"-Element aus dem "Aktionen"-Breich in Blockly kann man ein Kommando an den D1 mini senden:
Wenn für <espeasyip> die IP-Adresse des gewünschten D1 mini o.ä. eingesetzt wird, kann auf diesem Wege im Beispiel der GPIO 4, der im D1 mini als Ausgang verwendet wird, auf EIN=1 gesetzt werden. Ausschalten funktioniert genauso nur mit Status "0", also "http://<espeasyip>/control?cmd=GPIO,4,0".Der oben vorgeschlagene Weg von @falke69 würde mir aber besser gefallen, also teste ich dort weiter. Danke!
-
@falke69
zur Information hier mal mein aktueller Stand des D1 mini in den Objekten des ioBrokers:
Das sieht für mich als Einsteiger sehr ähnlich aus wie Deine "BWM".
Unterschiede finde ich aber in der MQTT-Konfiguration des D1 mini. Meine sieht derzeit so aus (und die Datenpunkte lassen sich aus Blockly NICHT schreiben):
Diese Konfiguration ist die Standardkonfiguartion nach Aktivierung von MQTT auf dem D1 mini gewesen, da ich die Bedeutung dereinzelnen Einträge nicht kenne, habe ich mich gehütet, daran etwas zu ändern.Kannst Du mir hier weiterhelfen? Danke!
-
Die Bedeutung kenne ich ehrlich gesagt auch nicht.
Habe diese mir auch im Internet zusammen gesucht und es funktioniert halt.
Durch diese Einstellungen werden halt mehr Infos aus dem ESPeasy an iobroker übermittelt. Wo Du dann verschiedene Datenpunkte hast, die Du über iobroker ansteuern kannst.Schau mal hier oder hier. Vielleicht hilft Dir das noch ein wenig weiter.
-
Das wäre mein Blockly für an und nach 15 Sekunden wiede aus.
Geht scheinbar nur über URL zu schalten, egal, wieviele Datenpunkte Du in iobroker siehst.
Zumindest habe ich noch keinen anderen Weg gefunden.Vorteil der Datenpunkte ist aber, dass Du damit Zustände auswerten kannst und dann weiterbearbeiten kannst.
Sollte jemand eine andere Lösung haben, dann gerne her damit.
-
@falke69
So ist mein Stand ja bisher auch, also Datenpunkte nur zur Auswertung der aktuellen Zustände und Weiterverarbeitung zu gebrauchen (="Eingang") aber aktives Schalten funktioniert nur über URL (="Ausgang")Bei Tasmota-Geräten kann man die Datenpunkte, die den aktuellen Zustand anzeigen, aber ganz einfach auch aus Blockly/ioBroker heraus steuern (=schalten), siehe Fragestellung vom Anfang des Themas...
Die direkte Verwendung der Datenpunkte wäre für mich insofern interessant, dass ich später, wenn man da mal wieder ran muss, nicht irgendeine Zahlenkombination im Blockly stehen habe, sondern (bei sinnvoller Benennung) den Klarnamen des geschalteten Gerätes bzw. GPIOs.
Also bleiben wir mal gemeinsam auf der Suche, vielleicht fällt ja jemandem noch 3ein eleganterer Weg ein, dann gerne hier ergänzen. Danke!
-
Folgende Ergänzung habe ich jetzt noch zu bieten:
Um Ausgänge des mit ESP Easy geflashten D1 mini vom ioBroker über MQTT schalten zu können, können die automatisch erzeugten Datenpunkte nach meiner bisherigen Erfahrung (s. auch vorangegangene Beiträge dieses Threads) NICHT genutzt werden.
Stattdessen muss man im ioBroker in der Objekte-Ansicht das Element auswählen, dessen Ausgänge geschaltet werden sollen. Durch Betätigung des "+"-Icons oberhalb des Elemente-Baumes können neue Unterelemente generiert werden, in deren Einstellungen kann dann wieder gewählt werden, ob es sich um eine Gruppe von Elementen handeln soll (=Kanal) oder nur um einen einzelnen Eintrag (=Datenpunkt).
Für dieses so erzeugte Element steht daneben in der Spalte "Name" das MQTT-Topic für dieses Element.In ESP Easy muss nun ein neues Device angelegt werden vom Typ "Generic - MQTT Import".
Dieses Device empfängt 4 verschiedene MQTT-Topics, die in seinen Einstellungen definiert werden müssen.
Dazu im ESP Easy unter "Devices" bei "Generic - MQTT Import" auf "Edit" klicken und dann im oberen Bereich unter "Task settings" die "MQTT Topic 1" bis nach Bedarf maximal "MQTT Topic 4" manuell eintragen. Dabei ist exakt der Name zu verwenden, wie er im ioBroker angezeigt wurde.
Achtung - in ESP Easy darf ein MQTT-Topic maximal 40 Zeichen lang sein, also im ioBroker entsprechend kurze Namen vergeben. Auch die Verwendung der Systemvariable %sysname% als Alternative für einen langen Gerätenamen ist möglich, das Ergebnis ist identisch wie bei dem ausgeschriebenen Namen.
Wenn der Haken oben bei "Enabled" noch gesetzt und dann unten "Submit" geklickt wird, sollte das Gerät mit der ESP Easy Firmware automatisch von nun an auf Nachrichten zu den eingetragenen MQTT Topics lauschen.Wenn nun eine Nachricht der Art:
...topic/GPIO/2
erkannt wird, schaltet das ESP Easy Gerät den Ausgang GPIO 2 auf den Wert, der mit diesem Topic gesendet wurde. Getestet habe ich das mit "0" und "1". Man kann dann im ioBroker den Wert des Eintrags ändern und nach Absendung durch Klick auf den Haken neben der Werteingabe diesen versenden.Das ESP Easy Gerät reagiert dann sofort darauf, die Anzeige im "Devices" Menü erst etwas verzögert, da diese nur in größeren Abständen aufgefrischt wird (= mehrere Sekunden, ist nach Auskunft von TD-er [https://www.letscontrolit.com/forum/viewtopic.php?f=4&t=8458&sid=431143e625cc9b9bf4a0128e8df36dce#p51690] abhängig von der minimal eingestellten Refresh-Zeit eines Devices) .
Bei einem Test mit GPIO 2 sollte sich so die blaue LedBuiltIn auf dem D1 mini schalten lassen.
Diese so manuell im ioBroker erstellten Datenpunkte konnten dann auch im Blockly erfolgreich zum Schalten von Ausgängen des ESP Easy Geräts verwendet werden.
Vieleicht hilft das ja mal jemandem weiter...
Prinzipiell sollen sich auf diesem Wege übrigens alle in ESP Easy definierten HTTP-Kommandos für den Aufruf über URL nutzen lassen, also z.B. auch das Toggeln, Dimmen, ... . Dafür ist der URL-Teil durch den Namen des MQTT-Topics zu ersetzen und dann der Befehl nachdem Muster der HTTP-Kommandos anzufügen, also z.B. das /GPIO/2.
Details dazu gibt es unter https://espeasy.readthedocs.io/en/latest/Reference/Command.html . -
Danke Dir für Deine Ausführungen!
Werde ich beim nächsten Projekt mal mit testen. -
@falke69
Ja bitte. Es wäre interessant, ob es bei Dir auch so funktioniert.Bei mir gibt es gelegentlich immer mal einen Hänger, wo die MQTT-Befehle aus ioBroker dann keine Reaktion auf dem D1 mini auslösen. Aktualisieren des Verzeichnisbaumes des Objekte-Ansicht, des Browserfensters vom ioBroker und erneutes "Submit" ohne geänderte Einstellungen im ESP Easy Gerät haben dann wieder zur gewünschten Funktion geführt.
Entweder ist das ein Problem der Sendehäufigkeit der MQTT-Nachrichten (bei mir ist "Publish nur bei Änderung" in den Instanzeneinstellungen des MQTT-Adapters aktiviert), der "Service-Qualität", die für den MQTT-Adapter eingestellt ist (bei mir 1 - at least once) oder des Sendens eines Befehls mit oder ohne "Bestätigung", das habe ich noch nicht ganz herausgefunden. Also 100% stabil funktioniert das bei mir noch nicht, das dargestellte Prinzip sollte aber nach meinem Kenntnisstand so passen.