NEWS
MQTT Befehl nach Alexa Sprachkommando senden
-
@mcu Der Adapter reagiert auf die Kommandos "on" (schaltet ein und auch aus), "reset" und "force_off".
"Alexa, schalte ABC an", soll mit dem ping Adatper prüfen ob ein bestimmtes Gerät an ist.
Falls es an ist, antwort "Gerät ist bereits an"
Falls es aus ist, mqtt befehl senden und sagen "gerät wird eingeschaltet".Egal was ich mache, in Blockly will der SEND block zu mqtt.0 nichts senden.
Ebenso führt der Exec block nicht das Kommando aus.Gehe ich per SSH auf das gerät und mache ein publish, funktioniert es.
Ich versuche seit 3 Wochenenden den Knoten zu lösen und wette das ist total dämlich und einfach. Hab da nur einen Knoten im Hirn
-
@jolu1705 Zeig doch mal die mqtt.0 Struktur.
-
@mcu wBitte sehr
-
@jolu1705 Du musst doch jetzt nur noch den Wert in dem Objekt ändern:
oder reset oder force_off anstelle von on in dem Block setzen.
Wer füllt die Datenpunkte:? Adpater? ESP?
-
@mcu Die Datenpunkte werden nicht automatisch gefüllt, die habe ich manuell angelegt.
Ich hab mir gedacht ich lege die einmal an um den aktuellen Status da später erfassen zu können.Der Eintrag unter mqtt.0 kam automatisch und ist wohl der der gesteuert werden soll.
Du machst die Steuerung mit "steuere....".... warum?
Ich habe es immer über diesen Baustein probiert.
-
@jolu1705 Funktioniert es?
Das Objekt wird geändert und den Rest publishen macht dann der Adapter. -
Im Normalfall melden sich die Geräte am MQTT-Broker (aka Server) als Client an.
Dann "publishen" die Ihre Werte die sie der Welt mitteilen wollen. Zum Beispiel ob sie gerade an oder aus sind (ON / OFF), oder wie die Temperatur ist oder aber ob ein Kontakt geschlossen ist oder nicht (is Opened = true)Gleichzeitig können dieses Geräte auch MQTT Einträge abonnieren. Im einfachsten Fall meldet ein Gerät z.B.
mqtt.0.MyDevice.Stehlampe.POWER = ON
Gleichzeitig hat das Gerät aber genau diesen Datenpunkt (Topic in MQTT genannt) abonniert. Das bedeutet das bei Änderungen das Gerät über eben diese Änderung informiert wird.
Das bedeutet das du in ioBroker diesen Datenpunkt einfach mit dem neuen Wert OFF beschreiben kannst und das Gerät sich dann ausschaltet.So sendet man Befehle per MQTT an Geräte.
Was das Gerät sendet und was es abonniert hängt vom Gerät ab. Manchmal sind es auch unterschiedliche Datenpunkte. Tasmota-Geräte senden Ihren Status z.B. unter mqtt.0.stat.Gerätename und lauschen aber unter mqtt.0.cmnd.Gerätename
-
@bananajoe Bei normalen Geräten würde ich dir recht geben, aber das ist eine Selbstbauplatine mit einem eigenen Programm das scheinbar seinen Status nicht meldet (oder ich habe noch nicht rausgefunden wie)
Mir reicht es aber völlig wenn ich Befehle senden kann und das Teil dann was tut, für mehr ist es auch nicht gedacht.@MCU Ich werde deine Option probieren. Kannst du mir sagen warum mein Ansatz über den sendTo Block falsch ist? Ich hab gedacht genau dafür ist das Teil da? Könnte ich das auch damit realisieren und wie würde das dann aussehen müssen?
Danke übrigens generell für die Hilfe hier. Ich lerne täglich dazu.
-
@jolu1705
Hier kannst du nachlesen, wie man es über den Sendto Befehl machen kann:
https://github.com/ioBroker/ioBroker.mqttZeig doch mal Dein eigenes Programm hier.
(Ab der 2. Zeile -> Spoiler (Auge), direkt danach CodeTags (</>) und dann das Programm mit STRG+V einfügen).Danke.
-
@mcu Der Quellcode für den Adapter ist hier: https://github.com/ct-Open-Source/wake-on-esp
-
@mcu said in MQTT Befehl nach Alexa Sprachkommando senden:
@jolu1705 Du musst doch jetzt nur noch den Wert in dem Objekt ändern:
oder reset oder force_off anstelle von on in dem Block setzen.
Wer füllt die Datenpunkte:? Adpater? ESP?
Das habe ich gerade bei mir gemacht.
Ein Cron der um 15:40 Uhr den Befehl ausführen sollte.
Es ist genau - gar nichts - passiert.Das bringt mich noch zur Verzweiflung haha
Ich vermute mittlerweile das sich der Adapter nicht korrekt am MQTT anmeldet und deshalb sich da auch nicht steuern lässt. Trage ich nämlich den Status manuell um, passiert auch nichts, und spätestens dann müsste es gehen.
Sende ich via SSH den Publish Befehl über Mosquitto funktioniert es sofort.
Also ist der Fehler weiter eingekreist. -
@jolu1705 Klicke ich im mqtt.0 Adapter (der als Client läuft) auf "Teste Verbindung zum Server" kommt da nur "error".
Name und Passwort sind aber 100% korrekt. Wo kann ich nachsehen was da für ein Problem besteht.
"error" ist ein wenig dürftig -
@jolu1705 Er scheint sich zu verbinden, aber nur der Test klappt scheinbar nicht.
mqtt.0 2021-03-23 16:25:39.880 warn (4493) Error on mqtt test: Error: Connection refused: Not authorized mqtt.0 2021-03-23 16:25:28.699 info (4493) All states published mqtt.0 2021-03-23 16:25:28.626 info (4493) Subscribe on: "mqtt.0/#" mqtt.0 2021-03-23 16:25:28.625 info (4493) Subscribe on: "ESP-996412/#" mqtt.0 2021-03-23 16:25:28.621 info (4493) Subscribe on: "#" mqtt.0 2021-03-23 16:25:28.618 info (4493) Connected to localhost mqtt.0 2021-03-23 16:25:28.520 info (4493) Try to connect to mqtt://iobroker:*******************@localhost:1883?clientId=iobroker_mqtt_client mqtt.0 2021-03-23 16:25:28.183 info (4493) starting. Version 2.3.5 in /opt/iobroker/node_modules/iobroker.mqtt, node: v12.21.0, js-controller: 3.2.16
-
@jolu1705 Update 2342
Wenn ich das Topic für den mqtt.0 Client ändere, sehe ich das auf dem Server d.h. er hat eine Verbindung.
Warum dann das "Teste Verbindung zum Server" nur "error" zeigt, bleibt ein Geheimnis. -
@jolu1705 oha ich werde besser........zumindest kann ich nun Anleitungen lesen
Gebe ich - wie in der Dokumentation - in der URL broker.mqttdashboard.com ein, steht da "verbunden".
Der Verbindungstest funktioniert d.h. es gibt ein Problem den mqtt.0 mit mosquitto zu verbinden.
Ich muss da wohl mal den mosquitto neu installieren oder mal da nach einen Fehler suchen.
Seltsam ist aber das per SSH ein Befehl direkt funktioniert, allerdings melde ich mich da auch nicht mit Username und Passwort an.Es bleibt spannend
-
ok ich habe nun mit
sudo lsof -i -P -n | grep 1883
mal nachgesehen was auf Port 1883 horcht.
mosquitto 17004 mosquitto 5u IPv4 4737237 0t0 TCP *:1883 (LISTEN) mosquitto 17004 mosquitto 6u IPv6 4737238 0t0 TCP *:1883 (LISTEN)
Soweit so gut,.
Starte ich den mqtt.0 Adapter kommt das:
mosquitto 17004 mosquitto 5u IPv4 4737237 0t0 TCP *:1883 (LISTEN) mosquitto 17004 mosquitto 6u IPv6 4737238 0t0 TCP *:1883 (LISTEN) mosquitto 17004 mosquitto 8u IPv4 4777854 0t0 TCP 127.0.0.1:1883->127.0.0.1:36750 (ESTABLISHED) node 21952 iobroker 27u IPv4 4776682 0t0 TCP 127.0.0.1:36750->127.0.0.1:1883 (ESTABLISHED)
Da werde ich nun nicht mehr schlau draus und weiß nicht ob das so korrekt ist.
Mit der Windows Software MQTT Explorer kann ich mich zum Mosquitto Server verbinden, nur mit dem mqtt.0 Adapter auf dem iobroker nicht.
Jemand noch eine Idee?
-
@jolu1705 Ok, ich habe die Authentication vom mosquitto mal abgeschaltet und es funktioniert.
Also habe ich die User neu angelegt und die Authentication wieder aktiviert.
Im Windows MQTT Explorer kann ich mich mit einem Benutzer anmelden, der mqtt.0 Adapter vom iobroker verbindet sich allerdings nicht. -
@jolu1705
Mosquitto Server neu installiert und Benutzer eingerichtet
MQTT.0 Adapter neu installiert und Benutzer eingetragenüber tail -f /var/log/mosquitto/mosquitto.log sehe ich nun wie der iobroker Adapter sich verbindet.
1616521874: New connection from 127.0.0.1 on port 1883. 1616521874: New client connected from 127.0.0.1 as iobroker_mqtt_client (c1, k1000, u'mqttadapter').
Ich kann mich auch über die Windows Software MQTT Explorer zum Mosquitto verbinden.
Der Knopf "Teste Verbindung zum Server" funktioniert aber immer noch nicht und quittiert mit "error".
Ich glaube mittlerweile das die Testfunktion nicht mit Usernamen und Passwörtern umgehen kann und es sich hier schlichtweg um einen Adapterbug handelt.Sobald ich die Testfunktion benutzte kommt im Logfile
1616521981: Socket error on client <unknown>, disconnecting.
-
Bei mir sagt er auch error, es funktioniert aber alles,
wird ein Fehler im Adapter sein:Also einrichten und unter den Datenpunkten schauen ob das was ist bzw. ob neue Dinge dort erscheinen, z.B. ein Testwert mit dem MQTT-Explorer
-
Nachtrag:
steht im log, ich vermute beim Testen übernimmt der die Anmeldung nicht richtig.
früher ging das mal / Hat schon mal funktioniert. Im Moment aber nicht. Der Rest geht aber bei mir (und ich mache alles per MQTT)