NEWS
[Gelöst] Steuerung und Visualisierung mit zwei MQTT Topics
-
Hallo,
ich habe meine Komponenten (Homematic und Enocean) an FHEM angebunden (soll auch erstmal so bleiben) und möchte nun ioBroker zur weiteren Steuerung (später auch mit Alexa) und Visualisierung nutzen. Als Schnittstelle nutze ich MQTT per Mosquitto und den mqtt-client Adapter. Dazu kommen noch einige Sonoffs mit Tasmota-Firmware.
Als Topics nutze ich z.B. "Haus/Kinderzimmer/Rollladen/set" und "Haus/Kinderzimmer/Rollladen/state" und habe nun Probleme diese richtig in vis mit einem Rollladen-Widget (hqwidgets), da (im gegensatz zum bulb-widget) keine Extrasteuerung möglich ist. Mit Alexa werde ich so sicherlich auch Probleme bekommen.
Ich habe daher mal testweise in der Javascript Instanz eine eigene State-Variable "Level" angelegt und versucht über Javascript die state/set zu "mappen". Aber ich schaffe es nicht beim MQTT-state per Event diese State-Variable zu setzen ohne das diese wiederum per Event den MQTT-Set auslöst.
Eine andere Lösung wäre wohl die Benutzung der subscript und publish Prefixe im mqtt-client Adapter, wobei ich dann passend zu Tasmota alle Topics in "cmnd/…" und "stat/..." ändern müsste.
Gibt es noch eine andere Lösung welche ich übersehen habe?
Danke, und viele Grüße
Norman
-
Hi,
Befohr wie jetzt kompliciert per mqtt einbinden, Geht das mit dem fhem adapter nicht leichter ?
~Dutch
-
Verstehe ich das richtig:
In ioBroker kommen zwei States an, einer der den Rolladenstatus darstellt und ein zweiter, welcher dazu da ist, den Rolladenstatus zu ändern?
Da das Rolladenwidget aber nur mit einem State umgehen kann, möchtest du diese beiden States zu einem einzigen verbinden?
In ioBroker geht das eigentlich in einem State: wenn ack=false, dann ist es ein Sollwert und wenn ack=true, dann ist es ein tatsächlicher Wert.
Im Prinzip läuft es so: Wert in VIS ändern -> State mit ack = false -> Rolladen wird bewegt -> State wird auf ack=true gesetzt.
Damit du nun solch einen State erhälst, welcher mit VIS kompatibel ist, könntest du dieses Skript nutzen (ungetestet):
var stateId = "zwave-client.0.Zimmer.Rolladen.state";//ändern! var setId = "zwave-client.0.Zimmer.Rolladen.set";//ändern! var newState = "level"; createState('level', {name: 'level', type: 'number', unit:'%', min: 0, max: 100, default: 0}); //stateId -> newState on({id: stateId, change: "ne"}, function (obj) { setState(newState, obj.state.val, true /* setze ack=true */); }); //newState -> setId on({id: newState, change: "ne", ack: false /* nur bei ack=false */}, function (obj) { setState(setId , obj.state.val); });
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden