NEWS
iobroker als mqtt server um Daten zu verteilen
-
Hallo,
ich habe Zuhause eine SmartHome Steuerung (Edomi) für die ich MQTT benötige um den neuen Staubsaugerroboter einpflegen zu können.
Nach langem suchen, habe ich iobroker gefunden, (über zig Webseiten, dass dieser MQTT als Server bereitstellen kann und welcher einen Adapter für den Staubsauger hat.
Kurzerhand den ioBroker am Minipc installiert, den Adapter für den Ecovacs-deebot installiert, Benutzername und Passwort eingetragen, Instanz gestartet => Roboter ist erreichbar, auslesbar und steuerbar! Juhu!
Hab mich schon furchtbar gefreut, dass der Robbi (Lord-clean-a-lot) für die Haussteuerung verfügbar ist.
Habe dann den MQTT client/broker Adapter installiert und in Edomi (selber PC) den entsprechenden Logikbaustein installiert, Zugangsdaten eingegeben, und die MQTT Instanz (welche als Server eingestellt ist) zeigt mir die intakte Verbindung auch an.Alles soweit so gut.
Jetzt suche ich seit Samstag Nachmittag die Lösung zu folgendem Problem:Ich habe unter "Objekte"
"ecovacs-deebot"
und
"mqtt"jetzt möchte ich aus dem objekt "ecovacs-deebot" den Wert für den Batteriestatus => "ecovacs-deebot.0.info.battery"
über MQTT für Edomi bereitstellen.
Allerdings habe ich keine Ahnung wie ich über den Subscriber auf das Objekt "ecovacs-deebot" und dessen Unterpfad zugreifen kann?Wie krieg ich das hin, dass ich über einen MQTT-client auf einen Datenpunkt zugreifen kann, welcher nicht im MQTT-Objekt liegt? bzw. wie kriege ich den Datenpunkt in das Objekt "mqtt"?
Ich habe in den letzten 2 1/2 Tagen hunderte Google Ergebnisse durchgelesen, ich habe auch hier im Forum die Anleitungen etc. durchgesehen, aber ich finde nichts das auch nur ansatzweise dieses Thema behandelt.
Die gefundenen Beiträge handeln immer von Datenpunkten die schon im mqtt-Objekt liegen, aber ich weiß nicht wie ich das mit Datenpunkten machen kann, die nicht im mqtt-Objekt sind.Hat jemand dafür eine Idee? Ich stehe da schon sehr auf der Leitung.
ich müsste aus dem Objekt "ecovacs-deebot" Daten lesen können und auch schreiben können (um den Robbi auch starten und stoppen zu können).Ich weiß echt nicht mehr weiter...
Lg,
Jürgen
-
@jkoller84 sagte in iobroker als mqtt server um Daten zu verteilen:
ecovacs-deebot.0
Du müsstest im MQTT Adapter folgendes ergänzen:
Damit werden auch sämtliche Datenpunkte des Deebot (0. Instanz) published.
-
@jkoller84 sagte in iobroker als mqtt server um Daten zu verteilen:
jetzt möchte ich aus dem objekt "ecovacs-deebot" den Wert für den Batteriestatus => "ecovacs-deebot.0.info.battery"
Um einen einzelnen Datenpunkt zu veröffentlich empfehle ich Dir lieber noch den mqtt-Client Adapter zusätzlich zu installieren und unter einem eigenen topic zu publishen. Wenn du den client adapter installiert hast, dann kannst Du einzelnen Datenpunkte easy publishen und musst nicht den ganzen Baum publishen.
Auch wenn Du einen ganzen Baum publishen willst, dann ist zwar der andere Adapter wieder besser, aber Du willst Zustände publishen und dann kommt der Broker schnell aus dem Gleichgewicht. Wenn mal also ganze Bäume publishen will dann würde ich eine eigene MQTT-Client Intanz erstellen mit einem Prefix.
Wie gesagt bei einzelnen States nimm lieber den Mqtt-Client Adapter, bei Bäumen eine eigene Instanz des Client-Server Adapters, in dem Du aber nichts subscribst und ein eigenes Präfix verwendest.
-
Hallo! Ich hab das ganze hinbekommen, die Tips mit den Datenpunkten waren hilfreich!
Jetzt hab ich auch endlich verstanden wie ich Datepunkte publishen kann (aus dem ecovacs-deebot Ordner und auch Daten aus den Shellies.
Ich habs auch hinbekommen, dass ich Daten per MQTT von der Steuerung zum Broker schicken kann, allerdings gibts da noch ein kleines Problem.Ich versuche den Deebot zu starten (Befehl "clean" in der Struktur ecovacs-deebot/0/control)
Per MQTT Befehl sehe ich, dass sich in der control Struktur der "Button" bei "clean" von hellgrau auf schwarz färbt (und im Infotext steht dann statt "false" "true", allerdings fährt Roboter nicht los?Wenn ich allerdings mit der Maus auf den Button drücke, dann färbt er sich auch schwarz und der Roboter fährt los?
Übersehe ich da etwas?
Aus der Steuerung (Edomi) schicke ich folgenden Befehl "ecovacs-deebot/0/control/clean|true",
dieser kommt auch im iobroker an und wird im pfad "mptt.0.ecovacs-deebot/0/control/clean|true" an,
wird auch auf die ecovacs-deebot/0/control/clean geschrieben, diese scheint ebenfalls mit "true" auf, allerdings fährt er nicht los?Muss ich da mit dem "true" noch etwas anderes mitschicken?
Ich hab 2 Bilder angehängt, da sieht man es, die Daten sind anscheinend richtig, allerdings ist da anscheinend ein Unterschied zwischen auf den Button klicken und den Button per MQTT beschreiben.
-
@jkoller84 Im Adapter musst die Datenpunkte immer unbestätigt schocken - das kann aber mqtt nicht, da mqtt nicht weiß von bestätigt oder unbestätigt. Du musst also mittels eines Alias oder Deiner Logikmaschine wenn sich im mqtt der Wert aktualisiert den aktiv in den Adapter schreiben.
-
@mickym
Hallo danke für die Antwort, aber die verstehe ich jetzt nicht ganz?
Der wert wird über MQTT geschickt taucht um mqtt-Verzeichnis auf, wird aber auch auf den ecovacs Adapter geschrieben.
Sehe den Wert im Ecovacs Adapter ja auf true gehen?
Siehe Bild oben? -
@jkoller84 sagte in iobroker als mqtt server um Daten zu verteilen:
Sehe den Wert im Ecovacs Adapter ja auf true gehen?
Siehe Bild oben?aber auch bestätigt geht auf true.
Damit ist für den Adapter alles erledigt.
bestätigt müsste mit false geschickt wrrden, dann weiß der Adapter dass er was tun muss, setzt das um und stellt anschließend bestätigt auf true - fertig -
@jkoller84 Na das ist aber das Problem, mit dem automatisch auf den ecovacs Adapter zu schreiben. Das passiert halt mir dem ACK=true. Deswegen halte ich nichts davon den Baum eines Adapters in den mqtt- Zweig zu nehmen. Für das Publishen von Zuständen ja, aber nicht nicht für die Steuerung von aussen.
Mach das weg und setze liebe einen Alias, der den Wert aus dem Mqtt Adapter liest, aber selbst in den Ecovavs Adapter speichert.
Der mqtt Adapter setzt alle empfangenen Werte auf ACK=true. - Da er sie selbst gesetzt hat und published nur ACK=false Werte. -
jetzt verstehe ich was Ihr damit meint.
Allerdings wie lege ich einen Alias an und sage dem er soll auf den ecovacs-deebot/0/control/clean schreiben wenn über mqtt auf den alias gepublisht wird?Ich kenne mich im iobroker absolut nicht aus, bin erst seit Sonntag dabei mir das System selbst verständlich zu machen...
-
@jkoller84 Ja mit dem Alias geht doch nicht. Es geht deshalb nicht, weil der Alias das nicht gleich durchreichen kann - sonst gäb es Endlosschleifen. Ich schau mal, ob das mit dem mqtt-Client geht - ansonsten ,usst Deine Logikmaschine verwenden . Also vergiß, was ich zum Alias gesagt habe. Ich versuch das mal mit dem mqtt-Client zu testen - hast Du den mqtt Client Adapter installiert.
OK mit dem mqtt-Client Adapter geht es eigentlich. Das heißt die bestätigeten Werte werden unbestätigt weiter gegeben.
Hast Du denn den mqtt-Client Adapter installiert, wie ich empfohlen hatte, wenn Du nur einzelne Werte publishst?
-
ich hab den mqtt-Broker/client installiert,
da ich den Broker benötige, Meine Shellies melden alle Ihre Stati darüber und ich Melde auch den kompletten Info Ordner vom deebot an meine Haussteuerung.
Wenn ich den mqtt-client nehme, brauche ich erst wieder einen eigenen mqtt broker im netz, dann hab ich wieder eine Software mehr am Server rennen...
Ich hab 47 Shellies im Netz hängen, die Ihre Stati alle über den Broker an Edomi weiterreichen...
mit dem reinen mqtt client geht das nicht oder?Ich brauche MQTT zum empfangen aller Shelly-Daten und zum senden von Steuerbefehlen an die Shellies,
- Lesen und steuern vom Deebot
-
@jkoller84 sagte in iobroker als mqtt server um Daten zu verteilen:
Wenn ich den mqtt-client nehme, brauche ich erst wieder einen eigenen mqtt broker im netz
@mickym sagte in iobroker als mqtt server um Daten zu verteilen:
Um einen einzelnen Datenpunkt zu veröffentlich empfehle ich Dir lieber noch den mqtt-Client Adapter zusätzlich zu installieren und unter einem eigenen topic zu publishen
-
@jkoller84 Nochmal Du kannst den mqtt-Client Adapter zusätzlich installieren, das ist für Deine Zweche am Besten geeignet.
den mqtt-Broker Client betriebst Du nur als Broker und daran flanscht Du noch den mqtt-Client dran.
Und den Broker lässt Du im Großen und ganzen in Ruhe.
-
ich hatte den client installiert, allerdings hab ich da irgendwas falsch eingestellt gehabt, daher hat sich die CPU aufgeschaukelt bis auf 100% Auslastung, daher habe ich die Instanz wieder deaktiviert (vermutlich wo eine Schleife eingebaut).
Die Instanz ist immernoch vorhanden, allerdings verstehe ich jetzt nicht wie ich das hinbasteln soll das das funktioniert?Ich lasse den Broker seine Arbeit machen (der schubst ja auch korrekt alle meine Stati durch die ich brauche (Edomi bekommt sämtliche Daten der Shellies und auch alle Datenpunkte vom Ecovacs-deebot.
Aber du meinst ja für die Retoure (Steuerbefehl von Edomi zum Ecovacs-deebot den mqtt client verwenden?
Der Rest funktioniert ja? Oder muss ich das funktionierende publishen auch alles umstellen? -
@jkoller84 sagte in iobroker als mqtt server um Daten zu verteilen:
Melde auch den kompletten Info Ordner
Auch wenn Du Bäume nimmst - dann ist es am stabilsten für das Publishen eine eigene Instanz von dem Broker/Client Adapter zu nehmen. Und dann dort aber nichts zu subscriben, sondern nur Publishen:
Ich mach das mit dem tr-064 Adapter, wenn ich Bäume publishen will.
Der Publishing Instanz sollte man dann aber einen eigenen Präfix geben, sonst wird das im Broker nicht mehr importiert:
In Deinem Fall also von dem mqtt Client/Server 2 Instanzen und dem mqtt-Client eine Instanz:
- mqtt.0 als Broker
- mqtt.1 als Publishing Instanz
- mqtt-client.0 zum Steuern und veröffnetlichen einzelner Datenpunkte.
Das hat sich deswegen hochgeschaukelt, weil Du Endlosschleifen mit Publishen und Subscriben produziert hast.
-
hab gerade gesehen, sobald ich die Instanz mqtt-client aktivere habe ich dasselbe Problem wieder, die CPU jammert mit 100% vor sich hin...
-
ah jetzt versteh ich auch ein paar Dinge mehr... ok ich werd das mal umbasteln versuchen.
ich hab mit MQTT bis jetzt noch nix am Hut gehabt... -
@jkoller84 sagte in iobroker als mqtt server um Daten zu verteilen:
hab gerade gesehen, sobald ich die Instanz mqtt-client aktivere habe ich dasselbe Problem wieder, die CPU jammert mit 100% vor sich hin...
Dann hast Du an Deinem Broker was verkehrt eingestellt. Mach bei dem Broker ALLE Haken raus und da publishst Du keinen Info Adapter noch sonst was.
Bei Broker ist das oben auch leer:
Man kann ggf. Zustände publishen - aber ich würde davon absehen und lieber eine eigene Instanz machen, dort werden dann Zustände gepublished. Wenn Du beides gleichzeitig machst, dann schaukelt sich das System bis zur Unendlichkeit hoch.
Der unteren Instanz habe ich einen eigenen Prefix "iobroker" verpasst, damit werden alle Bäume die Du veröffentlichst unter dem Topic iobroker veröffentlicht. Das musst halt dann im Edomi anpassen. Aber damit werden Endlosschleifen vermieden.
In dem mqtt-client Adapter brauchst erst mal gar nicht viel machen. Du wählst dann den Datenpunkt mit dem Zahnrad aus unterwelchem Datenpunkt und topic Du kommunizieren möchtest. Ich werde Dir das kurz an einem Video verdeutlichen.
-
ah... Gott im Himmel, ich danke für deine Hilfe, ich hab beim Broker eigentlich einfach nur den Adapter installiert, hab nix an oder abgewählt, allerdings waren da schon Haken gesetzt.
Ich hab bei den Einstellungen bzw. Freigaben der einzelnen Datenpunkten hinten das Zahnrad geöffnet, da steht dann oben als Überschrift
Einstellungen mqtt-client
Also sollte das ja so passen oder?
Hier ein Bild davon.
Ist das so in Ordnung?
-
@jkoller84 Ja aber nichts als Objekt publishen. MQTT kennt eigentlich nur Strings.
So und bei dem Steuerungsdatenpunkt, da musst halt eintragen unter welchem Datenpunkt das subscribed wird.