NEWS
MQTT wie per Blockly senden?
-
Hallo,
wie kann ich mittels des MQTT's Adapter einen MQTT Befehl/String in Blockly senden?
Zum Setup:
- Ich nutze die Milight Hub (https://github.com/sidoh/esp8266_milight_hub?fbclid=IwAR0ZYWfnxlkwW9cVhOlSUMfUfhI59Z6RKi6_oqH90RWERnPLnvd4bUyDc6E)
- MQTT Daten kommen per MQTT-Adapter in den DP an
Nun möchte ich die in der Hub angelernten Devices gerne im iob per mqtt ansteuern. Da habe ich momenten keinen Plan, wo/wie ich die Daten schriben/schicken muss
Um einkommende Signale zu verarbeiten nutze ich diese Logik/Variante:
-
@tklein Versuch halt mal in den Update Punkt zu schreiben - kann man ja direkt im Admin des iobrokers ausprobieren.
-
@tklein wenn es den Datenpunkt schon gibt unterhalb des
mqtt
Adapters kannst du einfach ganz normal reinschreiben.Wenn es den Datenpunkt noch nicht gibt und er also erst angelegt werden müsste, dann musst du
SendTo
benutzen:
Hier der Export:
<xml xmlns="https://developers.google.com/blockly/xml"> <block type="sendto_custom" id="BWr5ehE:SME/#2Y:xw7n" x="138" y="163"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="topic,message" with_statement="false"></mutation> <field name="INSTANCE">mqtt.0</field> <field name="COMMAND">sendMessage2Client</field> <field name="LOG"></field> <field name="WITH_STATEMENT">FALSE</field> <value name="ARG0"> <shadow type="text" id="shDRnRIW0=J[-cD/uTNJ"> <field name="TEXT">znil/Tests/TestnachrichtBlockly</field> </shadow> </value> <value name="ARG1"> <shadow type="text" id="KvpMsF((eyp:O5@zp#uw"> <field name="TEXT">99</field> </shadow> </value> </block> </xml>
Du kannst natürlich auch immer die
SendTo
Variante nehmen.Diese Lösung funktioniert in Verbindung mit diesem MQTT Adapter (alte/neue Oberfläche)
Gefunden habe ich dies als ich mir mal die Hilfe des MQTT-Adapters durchgelesen habe:
https://github.com/ioBroker/ioBroker.mqtt/blob/master/README.md
Im Abschnitt "Sending messages". Meine Leistung ist das richtige in den Blockly-Block eingetragen zu haben (da muss dassendMessage2Client
zwingend rein) -
@mickym said in MQTT wie per Blockly senden?:
@tklein Versuch halt mal in den Update Punkt zu schreiben - kann man ja direkt im Admin des iobrokers ausprobieren.
das hat nicht geklappt. war auch mein erster Gedanke. Bin mir aber auch nciht ganz sicher, was im String stehen sollte
-
@bananajoe besten Dank ür den Export.
Hier meine Logs mit dem Blockly
-
@tklein Bevor Du irgendwas mit Blockly rumprobierst, solltest Du erst mal wissen, wie Deine mqtt Struktur ausschaut.
In dem von Dir zitierten Link - solltest Du wohl über das Http Interface mal ein Schema einrichten:
Wie gesagt schau erst mal, dass Du über den iobroker und den Datenpunkten direkt schalten kannst - vorher brauchst Dich doch um gar kein Blockly kümmern, wenn Du nicht weißt wohin Du was schreiben sollst.
Also sowas wie hier empfohlen:
milight/:device_id/:device_type/:group_id
-
@mickym said in MQTT wie per Blockly senden?:
milight/:device_id/:device_type/:group_id
hatte ich auch schon drin:
Woher weiss der Block, was er mit den Parametern topic und message machen muss? Oder sind das fest definierte Parameternamen?
-
@tklein Nochmal das Blockly spielt hier gar keine Rolle - vergiss das erst mal. Wenn Du in den iobroker objekten direkt schalten kannst, dann kannst Dich im Blockly kümmern.
Diese Parameter sollte das Gerät selbst ersetzen, wie unter mqtt - beschrieben ersetzen:
:device_id - Device ID. Can be hexadecimal (e.g. 0x1234) or decimal (e.g. 4660).
:device_type - Remote type. rgbw, fut089, etc.
:group_id - Group. 0-4 for most remotes. The "All" group is group 0.Und in diesen Datenpunkt schreibt man dann diese Kommandos - so beschreibt es das Beispiel:
publish('milight/0x118D/rgb_cct/1', '{"status":"ON","color":{"r":255,"g":200,"b":255},"brightness":100}')
Das heißt, wenn sich eine Struktur ergeben hat - dann halt so einen JSON als Befehl reinschreiben. Auch auf Groß- und Kleinschreibung achten.
Du kannst das ja nochmal so lassen wie am Anfang - da hattest Du unter topic
topic-milight drin!
Dann hättest Du den Kommando JSON in diesen Datenpunkt schreiben müssen.
-
Nachdem es so nicht funktioniert hatte
habe ich das topic wieder auf
milight/:device_id/:device_type/:group_id
. Dann konnte ich mit dem Admin in der GUI den DP aktualisieren und per steuere block in blockly und es wurde geschaltetMuss jetzt noch rausfinden, wie das Topic im sendTo Block aussehen muss.
Vielen Dank für die Hilfe und das Schubsen/Drücken in die richtige Richtung
-
@tklein dort musst du mit
/
arbeiten und dasmqtt.0.
weglassen,
alsomilight/device_id/device_type/group_id
müsste es sein (die Doppelpunkte verwirren mich und gehören meiner Meinung nach nicht dahin)
Nachtrag: und in der Message versuch mal alle nicht notwenigen Leerzeichen zu eliminieren, insbesondere keine "neue Zeile" zeichen etc. nur die nackten Daten als ein langer Text. Leerzeichen wenn als Daten für ein Element in
" "
-
@bananajoe said in MQTT wie per Blockly senden?:
milight/device_id/device_type/group_id
besten Dank.
Manchmal schaltet er dann, habe aber einen Adapterabsturz
-
@tklein muss sich ein anderer ansehen.
Ich nutze den MQTT-Adapter nur als Client zu einem Mosquitto-Server. -
@tklein Wenn der Datenpunkt existiert dann brauchst Du doch kein sendTo. Das macht man max. 1 mal um ggf. einen Datenpunkt anzulegen. Ansonsten schreibst Du mit steuere ganz normal in den Datenpunkt, so wie Du es im iobroker admin auch machst.
-
@mickym naja, eigentlich sollte es immer mit
sendTo
gehen, oder? Das ja in diesem Fall keine Funktion die nur dem Anlegen des Datenpunktes dient, oder? -
@bananajoe Keine Ahnung - was der Adapter damit macht - aber mit dem Blockly ist es auf jeden Fall einfacher die Datenpunkte zu beschreiben. Ich glaube bei sendTo versucht der Adapter was zu publishen oder was der Teufel, was der macht. Aber bestehende Datenpunkte egal in welchem Adapter, beschreibe ich nicht mit sendTo sondern immer mit steuere oder aktualisiere.
-
@mickym sagte in MQTT wie per Blockly senden?:
@bananajoe Ich glaube bei sendTo versucht der Adapter was zu publishen oder was der Teufel, was der macht.
Genau das soll er ja
-
Hallo ich hatte das Thema auch.
Bei mir funktioniert das Schreiben eines Zustands in MQTT einfach mit dem steuere Befehl:
setState("mqtt.0.SmartHome.Muc.Schlafzimmer1.Deckenlicht_Duo.cmnd.POWER1"/SmartHome/Muc/Schlafzimmer1/Deckenlicht_Duo/cmnd/POWER1/, 'OFF');
-
@01findus aber da gibt es dann den Datenpunkt schon bei dir
DiePOWER
Datenpunkte gehören ja zu denen welche automatisch erzeugt werden da das Tasmota-Gerät diese automatisch published (und abonniert).
Unterhalb von/cmnd/
kannst du ja aber auch jeden anderen Befehl nutzen den man auch in der Tasmota-Konsole nutzen kann.Mit
SendTo
wird der Datenpunkt, falls es diesen noch nicht gibt, auch noch angelegt.
Ob man das braucht oder nicht hängt - meine ich - auch von der Art des verwendeten MQTT-Brokers ab.
Ich nutze den MQTT-Adapter als Client zu einem Mosquitto-Broker. Da klappte es nicht wenn ich den Datenpunkt unterhalb vonmqtt.0
anlegte, der funktioniert dann nicht. Aber mitsendTo
funktionierte es. Darauf gekommen bin ich weil ich mir gerne mal die Anleitungen zu den Adapter durchlese und es dort aufgeführt wurde.Das mag wohl anders sein wenn man den MQTT-Adapter als Broker nutzt, ich vermute dann kann man die Datenpunkte einfach anlegen und nutzen.
Mein Problem mag auch inzwischen überholt sein. -
--- falscher Beitrag ---
-
@bimmi sagte in MQTT wie per Blockly senden?:
dass es mit dem clip width und height ein Problem gibt. Der Datenpunkt ist eine "number".
und was kommt da wirklich an?
mal mit debug nachgesehen?spätestens erstelle Text wandelt es