Seite 1 von 3

Schickt falsche Befehle über MQTT

Verfasst: 8. Mai 2019 22:05
von D3ltorohd
Hallo Com,

ich möchte gerne per MQTT meine Rollos fahren, MQTT weil die Rollos in FHEM ein Modul haben, dieses kann ich z.b. per MQTT.fx ansprechen und die Rollos fahren.

Soweit so gut. Gebe ich nun die Befehle in die Things Datei in OH und will den Rollo über die BasicUI fahren, kommt etwas völlig anderes an. So zumindest in MQTT.fx sichtbar.

Ich poste hier mal ein Thing, was ich zum Test eingerichtet habe, ich mache das alles über die Datei selber mit einem Editor und nicht über PaperUI.

Code: Alles auswählen

Thing topic wzlinks "Wohnzimmer li"  @ "Wohnzimmer" {
    Channels:
        Type rollershutter : WZ_Jalousie_links     "Wohnzimmer li"      [stateTopic="/JaroFB/LastAction_Channel_01", commandTopic="/JaroFB/set", UP="up 1", DOWN="down 1", STOP="stop 1"]
Wenn ich in MQTT.fx unter Publish /JaroFB/set eingebe und im darunter folgenden Fenster down 1 eingebe, fährt der Rollo sofort runter.
Mache ich das ganze nun über OpenHab, passiert nichts und in MQTT.fx steht folgendes

Code: Alles auswählen

/JaroFB/set 100
Ich frage mich woher die 100 kommt und wo ist mein down 1 Befehl, der doch eigentlich kommen sollte.

Falls ihr noch mehr Sachen braucht bitte bescheid sagen, bin neu in der Smarthome Scene daher, fehlen euch vllt noch wichtig Angaben, Dinge, die ich noch nicht geschrieben habe.

Grüße,
D3ltoro

Re: Schickt falsche Befehle über MQTT

Verfasst: 8. Mai 2019 23:17
von udo1toni
Welche Version von openHAB nutzt Du? Das mqtt2 Binding hat ein Problem mit dem Typ rollershutter. Es gibt bereist einen Fix dazu, der aber erst nach openHAB2.5M-1 gemerged wurde - ich bin mir nicht sicher, ob der Umbau des Build Systems schon abgeschlossen ist, bis dahin ist es sinnlos, auf einen aktuellen Nightly Build zu wechseln, da der Build nicht stabil sein wird. OH2.5M1 (Milestone bzw. testing) hat den Patch nicht.

Re: Schickt falsche Befehle über MQTT

Verfasst: 9. Mai 2019 12:25
von D3ltorohd
Ich nutze momentan noch die 2,4 die man mit stable installiert. Hm das heißt wenn ich deinen Text richtig verstanden habe, kann man da momentan erst mal nichts machen, da man nicht auf ein nigthly updaten sollte und es im stable noch nicht drin ist ?

Könnte man alternativ den Mqtt Server deinstallieren in oh und einfach nen eigenständigen auf dem nicht installieren um somit das Problem zu umgehen ? Funktioniert dann alles per Mqtt immer noch mit den gleichen topics ?

Wobei ich eigentlich gern den onboard Server von oh nutzen würde.

Re: Schickt falsche Befehle über MQTT

Verfasst: 9. Mai 2019 12:41
von sihui
D3ltorohd hat geschrieben: 9. Mai 2019 12:25 Hm das heißt wenn ich deinen Text richtig verstanden habe, kann man da momentan erst mal nichts machen, da man nicht auf ein nigthly updaten sollte und es im stable noch nicht drin ist ?
Korrekt.
D3ltorohd hat geschrieben: 9. Mai 2019 12:25 Könnte man alternativ den Mqtt Server deinstallieren in oh und einfach nen eigenständigen auf dem nicht installieren um somit das Problem zu umgehen ?
Du verwechselst hier MQTT Binding mit MQTT Broker: selbstverständlich kannst du statt des internen Brokers einen lokalen oder sogar entfernten Broker installieren (z.B. Mosquitto), aber das ist ja nur das "Transportmedium" zwischen deinem Gerät und openHAB bzw. dem openHAB MQTT Binding.
Auf openHAB Seite brauchst du ein funktionierendes Binding und das hat momentan leider die genannten Einschränkungen.

Wenn du viel Lust hast zum Spielen kannst du das MQTT1 Legacy Binding installieren, nur musst du dann die komplette Konfiguration per Items machen, Things und Channels gibt es dort noch nicht.
Also nicht unbedingt empfehlenswert ...

Re: Schickt falsche Befehle über MQTT

Verfasst: 9. Mai 2019 15:17
von D3ltorohd
Ach so, das hat nichts mit dem Server selber zu tun sondern mit dem MQTT Binding. Mist, dann bringt der alternative Broker auch nichts. Dann heißt es wohl warten. Weiß man denn schon wann es das ins Stable schaft ? Wie bekomme ich das mit ?

Re: Schickt falsche Befehle über MQTT

Verfasst: 10. Mai 2019 16:42
von udo1toni
Stable ist bei openHAB eher im Sinne von "da ändert sich nix mehr/höchstens wenn wir was echt gravierendes finden" zu verstehen.
Milestone (oder testing) ist Stable aber mit den letzten Korrekturen. Dabei ist Milestone zumindest einigermaßen getestet. Es kann vorkommen, dass es Breaking changes gab, die sind dann aber dokumentiert.
Nightly (oder unstable) wird automatisch gebaut und ausgeliefert, sobald ein Patch oder update gemerged wurde. Hier sind also die letzten Neuerungen drin, allerdings ohne weitere Tests. Breaking changes sind möglich, ohne dass dies groß angekündigt wird.

Man kann Stable einsetzen, muss sich aber darüber im Klaren sein, dass sich dann erst beim nächsten Stable wieder was tut.
Man kann Nightly einsetzen, sollte sich aber bewusst sein, dass man vielleicht unerwartete Probleme bekommt, oder gar ein nicht lauffähiges Programm. Man sollte also unbedingt ein aktuelles Backup vorhalten.
Man kann Milestone nehmen und muss keine Angst haben, dass das System deshalb irgendwie weniger stabil wäre als mit Stable.

Vor einem Update sollte man aber immer schauen, was für Änderungen eingeflossen sind. (das gilt im Grunde für jedes Software Update, auch wenn man das aus Zeitgründen meist gar nicht leisten kann...)

Du kannst auch mit dem aktuellen mqtt2 die korrekten Befehle senden, aber leider nicht direkt, sondern nur über den Umweg, eine Rule zu verwenden. mqtt2 erlaubt es, beliebige Topics mit beliebigem Inhalt zu senden (schau mal hier im Forum, oder auch im englischen Forum, da gibt es diverse auch längere Threads zu dem Thema.

Re: Schickt falsche Befehle über MQTT

Verfasst: 10. Mai 2019 18:43
von D3ltorohd
Wie mache ich am besten ein Backup ? Ich mache eigentlich nichts mit der PaperUI, sonder lege Things, Items und die Sitemap mit dem Visual Studio Code an, wenn ich den Config Ordner sichere, sollte das doch ein komplettes Backup mit allen wichtigen Sachen sein ? Dann könnte ich ja mal die Nightly testen und wenn sie nichts ist, wieder die 2.4 Stable installieren ?

So groß mit Rules wollte ich das jetzt nicht lösen, bin froh da ich es so hinbekommen habe, wie es momentan ist. All zu Fit bin ich in OH auch noch nicht.

Re: Schickt falsche Befehle über MQTT

Verfasst: 10. Mai 2019 18:46
von sihui
D3ltorohd hat geschrieben: 10. Mai 2019 18:43 Wie mache ich am besten ein Backup ?
https://www.openhab.org/docs/installati ... nd-restore

Re: Schickt falsche Befehle über MQTT

Verfasst: 10. Mai 2019 22:41
von udo1toni
Wie erwähnt, rate ich momentan dringend von der Nightly ab, weil der Umbau zum neuen Build-System noch nicht abgeschlossen ist. Meine Ausführungen waren auf den Normalzustand bezogen, nicht auf die jetzige Situation.

Ein komplettes Backup kannst Du einfach aus der Bash erledigen, das Tool openhab-cli ist dabei Dein Freund.

Re: Schickt falsche Befehle über MQTT

Verfasst: 20. Mai 2019 18:08
von D3ltorohd
udo1toni hat geschrieben: 10. Mai 2019 22:41 Wie erwähnt, rate ich momentan dringend von der Nightly ab, weil der Umbau zum neuen Build-System noch nicht abgeschlossen ist. Meine Ausführungen waren auf den Normalzustand bezogen, nicht auf die jetzige Situation.

Ein komplettes Backup kannst Du einfach aus der Bash erledigen, das Tool openhab-cli ist dabei Dein Freund.
So hab mal auf die Snapshot geupdated, wirklich was geändert hat sich dabei nicht. Er sendet zwar jetzt 0 und Stop, aber immer noch nicht das was ich will. Das wird einfach komplett ignoriert ?

Liegt das vllt daran das ich den Type Rollershutter benutze und der einfach wenn er up down stop liest, das ganze in 0 stop 100 umwandelt ?

Gibt es denn eine andere Lösung, was ich alternativ zu den Rollershuttern nutzen kann ?

Ich habe das jetzt mit einem String gelöst, anstatt Rollershutter, nur leider kann ich dann keine Gruppen steuern und auch meine Random Timer funktionieren so nicht mehr.

Das ganze sieht jetzt so aus::

Code: Alles auswählen

Thing topic bad "Bad"  @ "Bad" {
    Channels:
        Type string : Bad_Jalousie     "Bad"      [stateTopic="/JaroFB/LastAction_Channel_09", commandTopic="/JaroFB/set"]

Code: Alles auswählen

String       Bad_Jalousie             "Bad [%d %%]"                      <blinds>    (Jalousien, Bad_Jalousien)          {channel="mqtt:topic:embedded-mqtt-broker:bad:Bad_Jalousie"}

Code: Alles auswählen

Text label="Bad" icon="bath" {


			Frame label="Jalousien" {
				Switch item=Bad_Jalousie label="Jalousie"	mappings=["up 9"="Hoch", "down 9"="Runter", "stop 9"="Stop"]
				//Default item=Bad_Jalousie label="Jalousie"	mappings=["up 10"="Hoch", "down 10"="Runter", "stop 10"="Stop"]

			}
		}
Ist viel Schreibarbeit und ich habe keinen Status vom Rollo, ob ich den jetzt unten habe oben oder sonst wo.

Wie ich das vorher hatte steht ja im ersten Post.

Gibt es vllt noch eine andere Möglichkeit den commandTopic="/JaroFB/set", UP="up 1", DOWN="down 1", STOP="stop 1"] so zu übergeben ? Denn dann
könnte ich den Rest ja so lassen. Da ich das jetzt aber über die Sitemap mache, klappt das mit der Gruppe und meiner Random Rule nicht.

Code: Alles auswählen

// Regel für automatische Jalousien schließen, per Astro Binding mit zufälligen Timern

rule     "Jalousien zufällig runterfahren Astro Binding"

when
        Channel "astro:sun:home:set#event" triggered START
        //Item Dummybutton changed to ON
then
        var Integer zufallszeit1  //Küche - Kueche_Jalousien
        var Integer zufallszeit2  //Schlafzimmer - SZ_Jalousien
        var Integer zufallszeit3  //Bad - Bad_Jalousien
        var Integer zufallszeit4  //Esszimmer - EZ_Jalousien
        var Integer zufallszeit5  //Wohnzimmer - WZ_Jalousien
        var Integer zufallszeit6  //Büro - Buero_Jalousien
        var Integer zufallszeit7  //Treppe - Treppe_Jalousien
        var Integer zufallszeit8  //Kinderzimmer - Kinderzimmer_Jalousien
        var Integer zufallszeit9  //Alle Jalousien - Jalousien
        zufallszeit1 = 1 + (Math::random * 10.0).intValue
        zufallszeit2 = 1 + (Math::random * 10.0).intValue
        zufallszeit3 = 1 + (Math::random * 10.0).intValue
        zufallszeit4 = 1 + (Math::random * 10.0).intValue
        zufallszeit5 = 1 + (Math::random * 10.0).intValue
        zufallszeit6 = 1 + (Math::random * 10.0).intValue
        zufallszeit7 = 1 + (Math::random * 10.0).intValue
        zufallszeit8 = 1 + (Math::random * 10.0).intValue
        zufallszeit9 = 11 + (Math::random * 5.0).intValue
             createTimer(now.plusMinutes(zufallszeit1)) [|
                  sendCommand(Kueche_Jalousien, DOWN) 
                  Zufallszahl_Kueche.postUpdate(0)
               ]
          Zufallszahl_Kueche.postUpdate(zufallszeit1.toString()) 

             createTimer(now.plusMinutes(zufallszeit2)) [| 
                  sendCommand(SZ_Jalousien, DOWN)
                  Zufallszahl_SZ.postUpdate(0)
               ]
          Zufallszahl_SZ.postUpdate(zufallszeit2.toString()) 
               
             createTimer(now.plusMinutes(zufallszeit3), [| 
                  sendCommand(Bad_Jalousien, DOWN)
                  ])
             createTimer(now.plusMinutes(zufallszeit4), [|
                  sendCommand(EZ_Jalousien, DOWN)
                  ])
             createTimer(now.plusMinutes(zufallszeit5), [| 
                  sendCommand(WZ_Jalousien, DOWN)
                  ])
             createTimer(now.plusMinutes(zufallszeit6), [| 
                  sendCommand(Buero_Jalousien, DOWN)
                  ]) 
              createTimer(now.plusMinutes(zufallszeit7), [| 
                  sendCommand(Treppe_Jalousien, DOWN)
                  ]) 
              createTimer(now.plusMinutes(zufallszeit8), [| 
                  sendCommand(Kinderzimmer_Jalousien, DOWN)
                  ]) 
              createTimer(now.plusMinutes(zufallszeit9), [| 
                  sendCommand(Jalousien, DOWN)
                  ])
end

// Regel für automatische Jalousien öffnen, per Astro Binding

rule "Jalousien rauf mit Astro Binding"
 
when
        Channel "astro:sun:home:rise#event" triggered START
        //Item Dummybutton changed to ON
 
then
                  sendCommand(Kueche_Jalousien, UP)
                  sendCommand(Esszimmer_Jalousie, UP)

               createTimer(now.plusMinutes(1), [| 
                  sendCommand(Bad_Jalousien, DOWN)
                  ])

               createTimer(now.plusMinutes(1), [| 
                  sendCommand(Treppe_Jalousien, DOWN)
                  ])                  
end

// Regel für automatische Jalousien öffnen / schließen, per Astro Binding mit zufälligen Timern