FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: bgewehr am 26 Januar 2020, 11:50:14

Titel: fhem -> mqtt -> node-red dashboard -> mqtt -> fhem mit notify?
Beitrag von: bgewehr am 26 Januar 2020, 11:50:14
Hallo,

ich möchte per MQTT Befehle für fhem empfangen und hätte gern ein notify, welches mir das event


2020-01-26 11:37:13 MQTT_DEVICE node_red_dashboard Tannenbaum: off

umsetzt in


set Tannenbaum off


mein Notify ist derzeit


define n1 notify node_red_dashboard:.* set $EVTPART0 $EVTPART1


aber da $EVTPART0 immer den Doppelpunkt enthält, geht es so nicht. Ich brauche den devicename ohne Doppelpunkt für den einfachen set.

Gibt es eine simple Lösung dafür?
Titel: fhem -> mqtt -> node-red dashboard -> mqtt -> fhem mit notify?
Beitrag von: bgewehr am 26 Januar 2020, 12:03:28
Ist das jetzt eher blöd oder elegant?


define n1 notify node_red_dashboard:.* {my @DEVICE = split /:/, $EVTPART0;fhem "set $DEVICE[0] $EVTPART1" }
Titel: Antw:notify $EVTPART0 ohne ":"?
Beitrag von: CoolTux am 26 Januar 2020, 12:32:18
Zitat von: bgewehr am 26 Januar 2020, 12:03:28
Ist das jetzt eher blöd oder elegant?


define n1 notify node_red_dashboard:.* {my @DEVICE = split /:/, $EVTPART0;fhem "set $DEVICE[0] $EVTPART1" }


Wenn es funktioniert ist es schon mal nicht blöd

define n1 notify node_red_dashboard:.* {my @DEVICE = split /:/, $EVTPART0;fhem "set $DEVICE[0] $EVTPART1" }

define n1 notify node_red_dashboard:.* { CommandSet(undef,split(':',($EVTPART0))[0] . ' ' . $EVTPART1) }
Titel: Antw:notify $EVTPART0 ohne ":"?
Beitrag von: herrmannj am 26 Januar 2020, 12:33:41
Moin,

geht. Ansonsten:
$EVTPART0 =~ s/:$// ;
löscht das ':' (wenn vorhanden)

Wenn ich Deine Frage so sehe... ich habe diese Woche ein Modul begonnen was (vorerst) "normale" fhem device in die Lage versetzt als MQTT publisher zu arbeiten. Use case ähnlich. MQTT Dashboards (für zb. Android gibt es einige) sollen fhem Sensoren anzeigen können. Der andere Weg, also MQTT -> "normale" FHEM device ist eine mögliche Erweiterung.

Hast Du Interesse? Das letzt gemeinsame Projekt ist ja schon etwas her :D ?
Titel: fhem -> mqtt -> node-red dashboard -> mqtt -> fhem mit notify?
Beitrag von: bgewehr am 26 Januar 2020, 12:51:27
Gern! Ich dachte im Moment noch daran, das durch einfache notifys zu machen...
Titel: Antw:notify $EVTPART0 ohne ":"?
Beitrag von: herrmannj am 26 Januar 2020, 12:57:24
Ja, habe ich auch aktuell. Deren Anzahl steigt aber exponentiell. time to act ;)
Titel: Antw:notify $EVTPART0 ohne ":"?
Beitrag von: bgewehr am 26 Januar 2020, 13:07:57
Zitat von: herrmannj am 26 Januar 2020, 12:57:24
Ja, habe ich auch aktuell. Deren Anzahl steigt aber exponentiell. time to act ;)
Verstehe. Bin dabei!
Titel: fhem -> mqtt -> node-red dashboard -> mqtt -> fhem mit notify?
Beitrag von: bgewehr am 26 Januar 2020, 13:13:48
Schon gesehen:

https://flows.nodered.org/node/node-red-contrib-heater-controller
Titel: fhem -> mqtt -> node-red dashboard -> mqtt -> fhem mit notify?
Beitrag von: bgewehr am 26 Januar 2020, 13:16:44
Und natürlich

https://flows.nodered.org/search?term=Dashboard
Titel: Antw:notify $EVTPART0 ohne ":"?
Beitrag von: Beta-User am 26 Januar 2020, 13:17:52
Erfüllt denn MQTT_GENERIC_BRIDGE diese Anforderung nicht bereits?
Titel: fhem -> mqtt -> node-red dashboard -> mqtt -> fhem mit notify?
Beitrag von: bgewehr am 26 Januar 2020, 13:19:01
Muss ich mir ansehen:


https://forum.fhem.de/index.php/topic,91642.0.html
Titel: Antw:notify $EVTPART0 ohne ":"?
Beitrag von: herrmannj am 26 Januar 2020, 14:10:03
Zitat von: Beta-User am 26 Januar 2020, 13:17:52
Erfüllt denn MQTT_GENERIC_BRIDGE diese Anforderung nicht bereits?
ja, im Detail dann Funktionsunterschiede
Titel: Antw:notify $EVTPART0 ohne ":"?
Beitrag von: bgewehr am 26 Januar 2020, 14:19:20
Zitat von: herrmannj am 26 Januar 2020, 12:57:24
Ja, habe ich auch aktuell. Deren Anzahl steigt aber exponentiell. time to act ;)
Müsste nicht ein notify reichen, welches auf die diversen devices reagiert? Oder gibt es da eine Obergrenze?
Titel: Antw:notify $EVTPART0 ohne ":"?
Beitrag von: herrmannj am 26 Januar 2020, 14:47:54
Klar.

Je nach use-case. Hast Du viele topics, unterschiedlichen playload (json, plain) wird es unübersichtlich.
Titel: fhem -> mqtt -> node-red dashboard -> mqtt -> fhem mit notify?
Beitrag von: bgewehr am 26 Januar 2020, 20:07:47
@jörg, wie hast Du die Benachrichtigung der Statuswechsel der fhem devices aus fhem an den MQTT broker gesendet ("getter")? Ein notify-Beispiel würde mir helfen, bin da noch nicht wieder tief genug drin. Den Rückweg, den "setter" habe ich schon.
Titel: Antw:fhem -> mqtt -> node-red dashboard -> mqtt -> fhem mit notify?
Beitrag von: herrmannj am 26 Januar 2020, 20:13:18
so zb sende ich (noch) eine Helligkeit. define name notify +
motion_front:brightness.* set mqtt publish -r home/states/outdoor/front/bightness $EVTPART1
Titel: Antw:fhem -> mqtt -> node-red dashboard -> mqtt -> fhem mit notify?
Beitrag von: bgewehr am 27 Januar 2020, 10:51:04
Was man so mit wenig Aufwand erreichen kann, ist schon toll:

Titel: fhem -> mqtt -> node-red dashboard -> mqtt -> fhem mit notify?
Beitrag von: bgewehr am 28 Januar 2020, 07:33:17
@herrmannj ich hatte mir sowas hier ausgedacht:


Arteon_Heizung:.*|Garagentor:.*|Gartenwasser_V1:.*|Gartenwasser_V2:.*|Gartenwasser_V3:.*|Gartenwasser_V4:.*|Kreis_WZ_SW:.*|Leselampe:.*|OC3:.*|Rauch_Maxi:.*|Rauch_WZ:.*|Raumthermostat_WZ_Temperatur:.*|Roll_Terrasse:motor.*|Tannenbaum:.*|Ventil_Buero:.* {my @EVTPARTS = split /:\ |\ /,$EVENT;;
if (defined $EVTPARTS[2]) {
  fhem "set MQTT_fhem publish /fhem/get/$NAME/$EVTPARTS[0]/$EVTPARTS[1] $EVTPARTS[2]";;
} elsif (defined $EVTPARTS[1]) {
  fhem "set MQTT_fhem publish /fhem/get/$NAME/$EVTPARTS[0] $EVTPARTS[1]";;
} else {
  fhem "set MQTT_fhem publish /fhem/get/$NAME $EVTPARTS[0]";;
}
}


Ziel ist es, auf separate Aktivitäten pro Device verzichten zu können.

Für den Rückweg habe ich mir für die Ereignisse aus MQTT zunächst hiermit beholfen:


node_red_dashboard:.* {my @DEVICE = split /:|---/, $EVTPART0;;
if (defined $DEVICE[1]) {
  fhem "set $DEVICE[0] $DEVICE[1] $EVTPART1";;
} else {
  fhem "set $DEVICE[0] $EVTPART1";;
}
}


Das klappt natürlich nur, wenn man die Readings des MQTT Gerätes komplex definiert:



attr node_red_dashboard subscribeReading_Roll_Terrasse---pct /fhem/set/Roll_Terrasse/pct
Titel: Antw:fhem -> mqtt -> node-red dashboard -> mqtt -> fhem mit notify?
Beitrag von: bgewehr am 28 Januar 2020, 19:35:31
Was wirklich störend ist, ist die Tatsache, dass das mqtt_device keine vollständigen topics als readings verwendet, sondern nur den letzten Abschnitt.

Damit wäre es recht umständlich, /haus/wohnzimmer/heizung/thermostat/soll zu unterscheiden von /haus/heizung/warmwasser/soll, weil in fhem beide readings nur "soll" heißen würden.

Ein Atrribut "completeTopic" wäre toll,d amit man damit weiterarbeiten kann, wenn man möchte.

Auch der Autosubscribe kommt mir komplexeren Strukturen nicht klar und lässt nur + zu statt auch #.

Gleiches Prob wie oben. Sollen wir mal auf den maintainer von mqttdevice zugehen?
Titel: Antw:fhem -> mqtt -> node-red dashboard -> mqtt -> fhem mit notify?
Beitrag von: bgewehr am 28 Januar 2020, 19:44:54
OK, wenn man auf autosubscript verzichtet, geht's auch manuell


attr node_red_dashboard subscribeReading_/fhem/set/Roll_Terrasse/pct /fhem/set/Roll_Terrasse/pct


dann erhält man strukturierte Readings wie


2020-01-28 19:42:44 MQTT_DEVICE node_red_dashboard /fhem/set/Roll_Terrasse/pct: 13
Titel: Antw:fhem -> mqtt -> node-red dashboard -> mqtt -> fhem mit notify?
Beitrag von: bgewehr am 01 Februar 2020, 16:07:49
Macht Spaß...