Modul-Konzeption: Generic MQTT Bridge

Begonnen von hexenmeister, 21 Dezember 2017, 22:35:38

Vorheriges Thema - Nächstes Thema

mrbreil

Vielen Dank.
Versuche jetzt auch schon seit ner Woche mir mit dem Nodered Dashboard UI zu Basteln, da TabletUI immer und immer langsamer wird.
Mir gefällt aber das Ergebnis noch so gar nicht. Könntest du vielleicht deine Flows exportieren und anfügen. Da könnte ich mir dort ein bisschen was abschauen.

SamNitro

Zitat von: mrbreil am 01 Juli 2018, 10:50:32
Vielen Dank.
Versuche jetzt auch schon seit ner Woche mir mit dem Nodered Dashboard UI zu Basteln, da TabletUI immer und immer langsamer wird.
Mir gefällt aber das Ergebnis noch so gar nicht. Könntest du vielleicht deine Flows exportieren und anfügen. Da könnte ich mir dort ein bisschen was abschauen.


Bitte dafür hier weitermachen..
https://forum.fhem.de/index.php?topic=78512.0
(Intel-Nuc Proxmox) (Homematic) (EnOcean) (CUL868) (CUL433) (Zigbee2MQTT) (ESP8266) (Echo) (DUOFERN)

inesa394

Hallo
Mit Sensoren klappt das bei mir schon gut mit dem Modul spart man sich die Bridge.Nur wenn ich was schalten will hier bei mir Yeelight Lampen klappt es nicht erste Versuche landeten in einer Endlosschleife.Bin leider noch ziemlich Anfänger bei Mqtt und bräuchte etwas hilfe.

Inesa

hexenmeister

Nun ja, was hast Du ausprobiert? Ist FHEM aktuell? Welche Modul-Version? So können wir nur raten...
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

inesa394

Fhem ist aktuell das modul ist das letzte was hier gepostet wurde.
Was ich will ich habe hier bei mir zu Hause zwei fhem installationen auf der ersten Pi1 sind meine Lampen
definiert die ich auf dem zweiten Pi2 mit Mqtt schalten will.
Dazu habe ich auf Pi2 ein mqtt Device angelegt

define mqtt_device_yeelight MQTT_DEVICE
attr mqtt_device_yeelight IODev mqtt
attr mqtt_device_yeelight eventMap on:on 70:bright 20:dimup 10:dimdown off:off
attr mqtt_device_yeelight icon mqtt
attr mqtt_device_yeelight publishSet on off switch:on,off level:slider,0,1,100 Smarthome/licht/Yeelight_flur/set
attr mqtt_device_yeelight retain 1
attr mqtt_device_yeelight room MQTT
attr mqtt_device_yeelight stateFormat level
attr mqtt_device_yeelight subscribeReading_level Smarthome/licht/Yeelight_flur/level
attr mqtt_device_yeelight subscribeReading_power Smarthome/licht/Yeelight_flur/power
attr mqtt_device_yeelight webCmd on:bright:dimup:dimdown:off:level
 

Auf Pi1 habe ich beim Licht dein Modul definiert.

mqttDefault base={"Smarthome/licht/$device/$reading"}
mqttPublish *:topic={$base}
mqttSubscribe state:topic=Smarthome/licht/Yeelight_flur/power/set

Funktioniert leider nicht nicht so..

Inesa

hexenmeister

Ich habe Yeelights nicht, kann daher nicht direkt nachstellen. Auf den ersten Blick würde ich vermuten, dass Yeelight-Modul beim Setzen einer Reading (publish mit ':topic=') nichts schalten wird (ist eigenlich IMHO bei jedem Modul so). Hier müsste wirklich ein 'set'-Befehl aufgelöst werden. Ersetze 'topic' durch 'stopic', dann wird anstatt Reading zu aktualisierung, ein 'set' abgesetzt:
mqttSubscribe state:stopic=Smarthome/licht/Yeelight_flur/power/set

Nicht ganz nachvollziehen kann ich, dass es zu einer Endlosschleife kommt. Sehe gerade nicht, wodurch sie ausgelöst sein könnte, vlt. ist es heute schon einfach zu spät ;D
Probiere in diesem Fall ggf. stateFormat rauszunehmen, auch wenn ich gerade nicht glaube, dass es daran liegt.

Mit retain sollte man ggf. vorsichtig sein: beim Restart von FHEM wird der letzte Wert wieder empfangen und der letzte Schaltbefehl wiederholt. Kann egal sein, in manchen Fällen ('toggle' z.B.) aber auch Probleme verursachen.

Grüße
Alexander
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

inesa394

#156
Ich habe hier noch eine mqtt Bridge in Betrieb  wo das schalten ja soweit funktioniert vieleicht liegt es ja daran werde die mal deaktivieren. Möchte gern alle mqtt Bridge loswerden und durch dein Modul ersetzen ist viel übersichlicher.

So ist die bridge und device definiert
defmod mqtt_device_flur MQTT_DEVICE
attr mqtt_device_flur DbLogExclude .*
attr mqtt_device_flur IODev Mosquito
attr mqtt_device_flur eventMap on:on 50:bright 20:dimdown 10:dimup off:off
attr mqtt_device_flur icon mqtt
attr mqtt_device_flur publishSet on off switch:on,off level:slider,0,1,100 Smarthome/licht/flurlicht/set
attr mqtt_device_flur retain 1
attr mqtt_device_flur room Mqtt
attr mqtt_device_flur stateFormat level
attr mqtt_device_flur subscribeReading_bright Smarthome/licht/flurlicht/bright
attr mqtt_device_flur subscribeReading_level Smarthome/licht/flurlicht/level
attr mqtt_device_flur subscribeReading_power Smarthome/licht/flurlicht/set
attr mqtt_device_flur subscribeReading_state Smarthome/licht/flurlicht/state
attr mqtt_device_flur webCmd on:bright:dimup:dimdown:off:level


defmod mqtt_bridge_flur_licht MQTT_BRIDGE Yeelight_flur
attr mqtt_bridge_flur_licht IODev mqtt
attr mqtt_bridge_flur_licht icon mqtt
attr mqtt_bridge_flur_licht publishReading_bright Smarthome/licht/flurlicht/level
attr mqtt_bridge_flur_licht publishReading_power Smarthome/licht/flurlicht/power
attr mqtt_bridge_flur_licht publishReading_state Smarthome/licht/flurlicht/state
attr mqtt_bridge_flur_licht publishState Smarthome/licht/flurlicht
attr mqtt_bridge_flur_licht retain 1
attr mqtt_bridge_flur_licht room MQTT
attr mqtt_bridge_flur_licht stateFormat transmission-state
attr mqtt_bridge_flur_licht subscribeSet Smarthome/licht/flurlicht/set

damit geht es.
Übertragen wird Smarthome/licht/flurlicht/power on
und mit deinen Modul
Smarthome/licht/Yeelight_flur/set on

Inesa

inesa394

Ziemlich still hier im Thread .
Mein licht kann ich soweit schalten
funktioniert ,möchte aber gern noch mehr
wie dimmen farbe scene u.s.w
Wäre nett wenn hier jemand ein paar Beispiele
posten könnte im thread kann man leider
nichts finden dazu.
Inesa

inesa394

Es läuft jetzt mit meinen Yeelight licht

defmod mqtt_device_inesalicht MQTT_DEVICE
attr mqtt_device_yeelight DbLogExclude .*
attr mqtt_device_yeelight IODev Mosquito
attr mqtt_device_yeelight eventMap on:on off:off
attr mqtt_device_yeelight genericDeviceType light
attr mqtt_device_yeelight icon mqtt
attr mqtt_device_yeelight publishSet on off switch:on,off bright:slider,0,1,100  Smarthome/licht/Yeelight_inesa/set
attr mqtt_device_yeelight publishSet_bright Smarthome/licht/Yeelight_inesa/bright
attr mqtt_device_yeelight retain 1
attr mqtt_device_yeelight room Mqtt
attr mqtt_device_yeelight stateFormat transmission-state
attr mqtt_device_yeelight subscribeReading_bright Smarthome/licht/Yeelight_inesa/bright
attr mqtt_device_yeelight subscribeReading_hsv Smarthome/licht/Yeelight_inesa/hsv
attr mqtt_device_yeelight subscribeReading_power Smarthome/licht/Yeelight_inesa/power
attr mqtt_device_yeelight subscribeReading_state Smarthome/licht/Yeelight_inesa/state
attr mqtt_device_yeelight webCmd rgb:bright:ct:rgb ffffff:rgb ff0000:rgb 00ff00:rgb 0000ff:on:off
attr mqtt_device_yeelight widgetOverride bright:colorpicker,BRI,0,1,100 ct:colorpicker,CT,1700,10,6500 rgb:colorpicker,RGB


attr Yeelight_inesa mqttDefaults base={"Smarthome/licht/$device/$reading"}
attr Yeelight_inesa mqttPublish *:topic={$base}
attr Yeelight_inesa mqttSubscribe state:stopic=Smarthome/licht/Yeelight_inesa/set  bright:stopic=Smarthome/licht/Yeelight_inesa/bright
hue:stopic=Smarthome/licht/Yeelight_inesa/hue rgb:stopic=Smarthome/licht/Yeelight_inesa/rgb

Sieht zwar nicht sehr elegant aus geht bestimmt besser aber es funktioniert
soweit

Master_Nick

#159
Mahlzeit :-) lange nicht gelesen.

Ich habe ein Sache festgestellt, da ich ja Devices nutze mit true und false (SonOffs mit Homie) mappe ich das ja schon so um

{ dev=>{ 'true'=>'on', 'false'=>'off' }, usr=>{ '^on$'=>'true', '^off$'=>'false' }, fw=>{ '^on$'=>'on', '^off$'=>'off' } }

Nun habe ich dann mal irgendwann über alexa-fhem gefragt wie mein Couchtisch geschaltet ist... tjaa er war irgendwie immer an.
Liegt daran, dass intern weiter das true und false verarbeitet wird. Also bei alexa-fhem kommt false und true an.

Kann man das nun noch so am Device um mappen oder muss man aktiv werden in alexa-fhem :-D ?
Mappen wäre halt einfacher.
Genutzt wird wohl wirklich der state - daher glaub ich fast.... ;-) es wir haarig.

Ich danke euch :-)
Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)

a-p-s

Hallo,

bei meinem Umbau auf dieses Modul, das alles (für mich) viel übersichtlicher löst, insbesondere bei Kopplung mehrerer Instanzen, ist mir aufgefallen, dass bei manchen Modulen set-Befehle mit weiteren Argumenten nicht korrekt verarbeitet werden (mqttSubscribe mit stopic).

Nach ein paar Experimenten denke ich, dass ich das Problem lokalisieren konnte. In der onmessage-Sub wird DoSet aufgerufen, allerdings ohne dass $message in ein Array zerlegt wird.

Versuchsweise habe ich das wie folgt ersetzt:


          if(($reading eq '') or ($reading eq 'state')) {
            # $err = DoSet($device,$message);
            $err = fhem("set $device $message");
          } else {
            # $err = DoSet($device,$reading,$message);
            $err = fhem("set $device $reading $message");
          }


und siehe da, das Problem war verschwunden. Da die Module wohl die Argumente in der SetFn unterschiedlich verarbeiten, ist das auch nicht bei allen aufgetreten.

Hoffe, das hilft.

Grüße,
a-p-s

hexenmeister

Hi,

danke für die Analyse und eine Lösung. Der Aufruf von 'fhem' würde ich gerne vermeiden (vor allem Performance).
Daher habe ich das jetzt (zugegeben auf die Schnelle) die Variable $message in ein Array zerlegt. Kannst Du bitte in Deinem EInsatzszenario ausprobieren?

Viele Grüße

Alexander
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

a-p-s

Das ging ja mal wieder super schnell.

Kurze Rückmeldung: für meine beiden Testfälle (WINCONNECT und DOIF) hat das einwandfrei funktioniert.

Grüße,
a-p-s

hexenmeister

Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

Billy

@hexenmeister

wo finde ich die aktuelle 10_MQTT_GENERIC_BRIDGE.pm?
Wird die mal offiziell eingecheckt oder habe ich da was übersehen?

Das Modul verbessert die Übersicht erheblich, danke.

Gruß Billy
FHEM immer akt. auf 3 BeagleBoneBlack: 2xHMLAN 2xJeelink ;10x HM-CC-TC, 13x HM-CC-VD, 1x HM-ES-PMSw1-Pl, 3x HM-LC-SW1-PL2, viele ESP8266, Tasmota Scripting, Mqtt*