NEWS
MQTT Befehl nach Alexa Sprachkommando senden
-
Guten Morgen,
ich habe einen MQTT Broker (mosquitto) installiert und eine Verbindung zu Alexa hergestellt, sprich ich kann nun über Sprachkommandos Datenpunkte steuern.
Was mir nun noch fehlt, ist ein Blockly das bei einem bestimmten Sprachkommando, einen bestimmten MQTT Befehl an ein Device sendet.
Hintergrund: Ich habe eine kleine ESP8266 Platine als Wake-On-Lan Adapter für meine PCs gebaut.
Per MQTT Befehl kann ich PCs nun ausschalten, rebooten und force_off machen.
Ich suche nun eine Möglichkeit diese Befehle basierend auf einem Sprachkommando per MQTT abzusetzen.Wie mache ich das in Blockly?
Vielen Dank
-
@jolu1705
alexa2.0.History.summary auswählen -
@mcu Ok, also er überprüft was zu Alexa gesagt wurde und wenn das mit einem Trigger übereinstimmt, tut er was.
Soweit habe ich das verstanden.Ich kann dann halt nur nicht ein "wahr" an ein Objekt senden, sondern will einen MQTT Befehl schicken.
Wie kann ich das machen? -
@jolu1705 Wo trägst du denn, was für den MQTT-Befehl ein?
-
@jolu1705 sagte in MQTT Befehl nach Alexa Sprachkommando senden:
ich habe einen MQTT Broker (mosquitto) installiert und eine Verbindung zu Alexa hergestellt, sprich ich kann nun über Sprachkommandos Datenpunkte steuern.
Beschreibe mal den Vorgang, da du es ja schon kannst?
Vielleicht hilft dir das ein wenig?
https://forum.iobroker.net/topic/43226/mqtt-remote-commands-für-owntracks-adapter/7
-
@mcu Hallo MCU,
ich habe den iot Adapter installiert und kann da nun schon eigene Sprachbefehle eintragen die z.B. irgendwelche Lampen triggern.
Ich suche halt jetzt den richtigen Weg in Blockly anstelle eines Lampendatenpunktes "0/1" zu setzen, einen MQTT Befehl meiner Wahl abzusetzen. Wenn ich den irgendwie speichern kann, kann ich den sicher auch mit Alexa verknüpfen wie alles andere auch.
Ich bin sicher ich denk nur zu kompliziert und das ist total einfach, aber ich lerne ja noch -
@jolu1705 Du hast doch gesagt du kannst schon über Alexa einen Datenpunkt steuern. Wie hast du das gemacht? Welche Datenpunkt sind in ioBroker , wo? Zeigen.
Wie steuerst du Deine ESP8266 Platine mit MQTT. Wer sendet welche Befehle?
Du sendest irgendwelche Befehle über mosquitto. Wie steuerst du den mosquitto-MQTT an aus ioBroker?
Um den PC auszuschalten, schreibst du ja jetzt irgendwo ein Wert (MQTT-Befehl) rein, wo in welchem Datenpunkt (ioBroker) oder im System (raspi)?? -
@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