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?
Ist das jetzt eher blöd oder elegant?
define n1 notify node_red_dashboard:.* {my @DEVICE = split /:/, $EVTPART0;fhem "set $DEVICE[0] $EVTPART1" }
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) }
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 ?
Gern! Ich dachte im Moment noch daran, das durch einfache notifys zu machen...
Ja, habe ich auch aktuell. Deren Anzahl steigt aber exponentiell. time to act ;)
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!
Schon gesehen:
https://flows.nodered.org/node/node-red-contrib-heater-controller
Und natürlich
https://flows.nodered.org/search?term=Dashboard
Erfüllt denn MQTT_GENERIC_BRIDGE diese Anforderung nicht bereits?
Muss ich mir ansehen:
https://forum.fhem.de/index.php/topic,91642.0.html
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
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?
Klar.
Je nach use-case. Hast Du viele topics, unterschiedlichen playload (json, plain) wird es unübersichtlich.
@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.
so zb sende ich (noch) eine Helligkeit. define name notify +
motion_front:brightness.* set mqtt publish -r home/states/outdoor/front/bightness $EVTPART1
Was man so mit wenig Aufwand erreichen kann, ist schon toll:
@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
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?
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
Macht Spaß...