msgDialog: Instant Messaging als FHEM Interface

Begonnen von igami, 30 September 2017, 15:09:01

Vorheriges Thema - Nächstes Thema

igami

Zitat von: binford6000 am 22 Oktober 2017, 07:45:13
Das "(zurück:%me%) ", wird auf meinem Keyboard als "zurück:Q" angezeigt. Das solllte ja schon so nicht sein oder?
Hier ein Dialog wo ich es versuchsweise eingebaut habe:
Internals:
   DEF        {"5.Tagesschau in 100s":{
  "message": [
    "(Als mp3 abspielen) ",
    "(Link zur Sendung schicken) ",
    "(abbrechen|zurück:%me%) ",
"Die Tagesschau in 100 Sekunden..."
  ],
  "Als mp3 abspielen":{
  "commands": "set tagesschau100sek.DUM on",
  "message":[
    "(%me%) ",
    "TS in 100s wird abgespielt."
  ]
  },
  "Link zur Sendung schicken":{
  "message":[
    "(%me%) ",
    "Link: [rss_tagesschau100:Link]"
  ]
  }
}
}

   MSGCOMMAND msg push \@$recipients $message
   NAME       Tagesschau_Dialog
   NOTIFYDEV  TYPE=(ROOMMATE|GUEST)
   NR         228
   NTFY_ORDER 50-Tagesschau_Dialog
   STATE      rr_Sebastian: 5.Tagesschau in 100s
   TRIGGER    5.Tagesschau in 100s
   TYPE       msgDialog
   READINGS:
     2017-10-22 07:39:32   rr_Sebastian_history 5.Tagesschau in 100s
     2017-10-22 07:39:32   state           rr_Sebastian: 5.Tagesschau in 100s
Attributes:
   allowed    rr_Sebastian
   disable    0
   group      Dialog
   icon       dialog@green
   room       91_Webdevices

VG Sebastian

EDIT: Mit Inline Keyboard funktioniert es! Geht das auch mit normalem Keyboard?
Wie du schon erkannt hast haben die Inline Keyboard da einen Vorteil: eins anzeigen, was anderes senden ;)
Mit den normalen Keyboards geht das nicht.

Aber in deinem Beispiel würde ich das zurück einfach weglassen. Macht ja eigentlich das gleiche wie abbrechen ;)
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

binford6000

ZitatAber in deinem Beispiel würde ich das zurück einfach weglassen. Macht ja eigentlich das gleiche wie abbrechen ;)

Eben nicht! "Bei abbrechen" erscheint "Q" als inline und bei "zurück" alle Dialoge - so wie es sein soll.

igami

So was richtig schönes fällt mir nun auch nicht ein. Nur eine Ergänzung um

    "zurück": {
      "commands": "set meta_Dialog say @$recipient %me%"
    },

in deinem Tagesschau Dialog.
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

binford6000

Alles gut. Hab jetzt folgendes eingestellt und damit eine durchgängige Navigation durch alle Dialoge ermöglicht:

  • Inline Keyboard aktiviert
  • zurück:%me% in alle Dialoge eingebaut welche Untermenüs besitzen. Es beendet Dialoge und wieder zeigt eine Liste aller Dialoge an und ersetzt an dieser Stelle auch "abbrechen":
{"1.Beleuchtung":{
  "message": [
    "(Szenen) ",
    "(Lampen einschalten) ",
    "(zurück:%me%) ",
    "Möchtest Du Szenen einstellen oder Lampen schalten?"
  ],

  • "abbrechen" beendet die Dialoge und zeigt %me% als Button an.
  • "zurück" innerhalb eines Dialogs führt eine Ebene höher im Dialog:
"Szenen":{
    "message":[
      "{return('(abwesend einschalten) ') if(ReadingsVal('Standard.LS', 'state', '') ne 'abwesend')}",
      "{return('(anwesend einschalten) ') if(ReadingsVal('Standard.LS', 'state', '') ne 'anwesend')}",
      "(abbrechen|zurück) ",
      "Welche Lichtszene soll ich aktivieren?"
    ],

Für meine Zwecke (Naviagtion durch die Dialoge) ist Inline Keyboard also gestezt.
Letztlich muss jeder selbst entscheiden, ob er das normale Keyboard oder lieber das Inline Keyboard nutzen möchte...
Danke Euch beiden fürs erarbeiten! :)
VG Sebastian

Flipper92

Ich komm mit der Automatischen Aktualisierung nicht weiter.

defmod Heizung_Dialog msgDialog { "Heizung": {\
      "message": [\
        "(Wohnzi # Soll [Wohnzimmer.Thermostat:desiredTemperature]°C # Ist [Wohnzimmer.Temperatur:state]:Heizungwozi) ",\
        "(Schlaf # Soll [Schlafzimmer.Thermostat:desiredTemperature]°C # Ist [Schlafzimmer.Temperatur:state]:Heizungschlaf) ",\
"(Jenni # Soll [Jennifer.Thermostat:desiredTemperature]°C # Ist [Jennifer.Temperatur:state]:Heizungjenni) ",\
"(Küche # Soll [Kueche.Thermostat:desiredTemperature]°C:Heizungkueche|Bad # Soll [Bad.Thermostat:desiredTemperature]°C:Heizungbad) ",\
"(An/Aus:heizunganaus|zurück:%me%) ",\
"(Aktualisieren:aktulaisierenheizung) ",\
        "Aktuell ist die Heizungsautomation: [Thermostat.Automation:state]"\
      ],\
  "commands": [\
  "{sleep 10;;;; fhem(\"set $SELF say @$recipient Heizung\");;;;}"\
],\
  "aktulaisierenheizung": {\
  "commands": [\
"set $SELF say @$recipient Heizung"\
]\
  },\
  "heizunganaus": {\
  "commands": [\
"set Thermostat.Automation_Toogle active",\
"set $SELF say @$recipient Heizung"\
]\
  },\
"Heizungwozi": {\
"message": [\
        "(zurück|aus:04.5) ",\
        "(5°C:05.0|10°C:10.0|16°C:16.0) ",\
"(18°C:18.0|19°C:19.0|20°C:20.0) ",\
"(21°C:21.0|22°C:22.0|23°C:23.0) ",\
        "Aktuell ist [Wohnzimmer.Thermostat:desiredTemperature] eingestellt."\
      ],\
      "Setheizungwozi": {\
        "match": "[0-2][0-9][:.]([0]|[5])",\
        "commands": [\
          "{my $temperatur = '$message';;;; fhem(\"set Wohnzimmer.Thermostat desiredTemperature $temperatur\");;;;}",\
          "set $SELF say @$recipient Heizung"\
        ]\
}\
},\
"Heizungschlaf": {\
"message": [\
        "(zurück|aus:04.5) ",\
        "(5°C:05.0|10°C:10.0|16°C:16.0) ",\
"(18°C:18.0|19°C:19.0|20°C:20.0) ",\
"(21°C:21.0|22°C:22.0|23°C:23.0) ",\
        "Aktuell ist [Schlafzimmer.Thermostat:desiredTemperature] eingestellt."\
      ],\
      "Setheizungschlaf": {\
        "match": "[0-2][0-9][:.]([0]|[5])",\
        "commands": [\
          "{my $temperatur = '$message';;;; fhem(\"set Schlafzimmer.Thermostat desiredTemperature $temperatur\");;;;}",\
          "set $SELF say @$recipient Heizung"\
        ]\
}\
},\
"Heizungkueche": {\
"message": [\
        "(zurück|aus:04.5) ",\
        "(5°C:05.0|10°C:10.0|16°C:16.0) ",\
"(18°C:18.0|19°C:19.0|20°C:20.0) ",\
"(21°C:21.0|22°C:22.0|23°C:23.0) ",\
        "Aktuell ist [Kueche.Thermostat:desiredTemperature] eingestellt."\
      ],\
      "Setheizungkueche": {\
        "match": "[0-2][0-9][:.]([0]|[5])",\
        "commands": [\
          "{my $temperatur = '$message';;;; fhem(\"set Kueche.Thermostat desiredTemperature $temperatur\");;;;}",\
          "set $SELF say @$recipient Heizung"\
        ]\
}\
},\
"Heizungbad": {\
"message": [\
        "(zurück|aus:04.5) ",\
        "(5°C:05.0|10°C:10.0|16°C:16.0) ",\
"(18°C:18.0|19°C:19.0|20°C:20.0) ",\
"(21°C:21.0|22°C:22.0|23°C:23.0) ",\
        "Aktuell ist [Bad.Thermostat:desiredTemperature] eingestellt."\
      ],\
      "Setheizungbad": {\
        "match": "[0-2][0-9][:.]([0]|[5])",\
        "commands": [\
          "{my $temperatur = '$message';;;; fhem(\"set Bad.Thermostat desiredTemperature $temperatur\");;;;}",\
          "set $SELF say @$recipient Heizung"\
        ]\
}\
},\
"Heizungjenni": {\
"message": [\
        "(zurück|aus:04.5) ",\
        "(5°C:05.0|10°C:10.0|16°C:16.0) ",\
"(18°C:18.0|19°C:19.0|20°C:20.0) ",\
"(21°C:21.0|22°C:22.0|23°C:23.0) ",\
        "Aktuell ist [Jennifer.Thermostat:desiredTemperature] eingestellt."\
      ],\
      "Setheizungjenni": {\
        "match": "[0-2][0-9][:.]([0]|[5])",\
        "commands": [\
          "{my $temperatur = '$message';;;; fhem(\"set Jennifer.Thermostat desiredTemperature $temperatur\");;;;}",\
          "set $SELF say @$recipient Heizung"\
        ]\
},\
"zurück": {\
    "commands": "set $recipient_history=.+ say @$recipient {(ReadingsVal($DEV, '$recipient_history', '') =~ m/(.+)\\|.+$/;;;; return $2 ? $2 : $1;;;;)}"\
  }\
}\
}\
}
attr Heizung_Dialog allowed everyone
attr Heizung_Dialog room msg

setstate Heizung_Dialog 2017-10-24 19:26:06 state Initialized


Hat jemand eine Idee woran es liegen könnte?

igami

Zitat von: Flipper92 am 24 Oktober 2017, 19:28:08
Ich komm mit der Automatischen Aktualisierung nicht weiter.

defmod Heizung_Dialog msgDialog { "Heizung": {\
      "message": [\
        "(Wohnzi # Soll [Wohnzimmer.Thermostat:desiredTemperature]°C # Ist [Wohnzimmer.Temperatur:state]:Heizungwozi) ",\
        "(Schlaf # Soll [Schlafzimmer.Thermostat:desiredTemperature]°C # Ist [Schlafzimmer.Temperatur:state]:Heizungschlaf) ",\
"(Jenni # Soll [Jennifer.Thermostat:desiredTemperature]°C # Ist [Jennifer.Temperatur:state]:Heizungjenni) ",\
"(Küche # Soll [Kueche.Thermostat:desiredTemperature]°C:Heizungkueche|Bad # Soll [Bad.Thermostat:desiredTemperature]°C:Heizungbad) ",\
"(An/Aus:heizunganaus|zurück:%me%) ",\
"(Aktualisieren:aktulaisierenheizung) ",\
        "Aktuell ist die Heizungsautomation: [Thermostat.Automation:state]"\
      ],\
  "commands": [\
  "{sleep 10;;;; fhem(\"set $SELF say @$recipient Heizung\");;;;}"\
],\
  "aktulaisierenheizung": {\
  "commands": [\
"set $SELF say @$recipient Heizung"\
]\
  },\
  "heizunganaus": {\
  "commands": [\
"set Thermostat.Automation_Toogle active",\
"set $SELF say @$recipient Heizung"\
]\
  },\
"Heizungwozi": {\
"message": [\
        "(zurück|aus:04.5) ",\
        "(5°C:05.0|10°C:10.0|16°C:16.0) ",\
"(18°C:18.0|19°C:19.0|20°C:20.0) ",\
"(21°C:21.0|22°C:22.0|23°C:23.0) ",\
        "Aktuell ist [Wohnzimmer.Thermostat:desiredTemperature] eingestellt."\
      ],\
      "Setheizungwozi": {\
        "match": "[0-2][0-9][:.]([0]|[5])",\
        "commands": [\
          "{my $temperatur = '$message';;;; fhem(\"set Wohnzimmer.Thermostat desiredTemperature $temperatur\");;;;}",\
          "set $SELF say @$recipient Heizung"\
        ]\
}\
},\
"Heizungschlaf": {\
"message": [\
        "(zurück|aus:04.5) ",\
        "(5°C:05.0|10°C:10.0|16°C:16.0) ",\
"(18°C:18.0|19°C:19.0|20°C:20.0) ",\
"(21°C:21.0|22°C:22.0|23°C:23.0) ",\
        "Aktuell ist [Schlafzimmer.Thermostat:desiredTemperature] eingestellt."\
      ],\
      "Setheizungschlaf": {\
        "match": "[0-2][0-9][:.]([0]|[5])",\
        "commands": [\
          "{my $temperatur = '$message';;;; fhem(\"set Schlafzimmer.Thermostat desiredTemperature $temperatur\");;;;}",\
          "set $SELF say @$recipient Heizung"\
        ]\
}\
},\
"Heizungkueche": {\
"message": [\
        "(zurück|aus:04.5) ",\
        "(5°C:05.0|10°C:10.0|16°C:16.0) ",\
"(18°C:18.0|19°C:19.0|20°C:20.0) ",\
"(21°C:21.0|22°C:22.0|23°C:23.0) ",\
        "Aktuell ist [Kueche.Thermostat:desiredTemperature] eingestellt."\
      ],\
      "Setheizungkueche": {\
        "match": "[0-2][0-9][:.]([0]|[5])",\
        "commands": [\
          "{my $temperatur = '$message';;;; fhem(\"set Kueche.Thermostat desiredTemperature $temperatur\");;;;}",\
          "set $SELF say @$recipient Heizung"\
        ]\
}\
},\
"Heizungbad": {\
"message": [\
        "(zurück|aus:04.5) ",\
        "(5°C:05.0|10°C:10.0|16°C:16.0) ",\
"(18°C:18.0|19°C:19.0|20°C:20.0) ",\
"(21°C:21.0|22°C:22.0|23°C:23.0) ",\
        "Aktuell ist [Bad.Thermostat:desiredTemperature] eingestellt."\
      ],\
      "Setheizungbad": {\
        "match": "[0-2][0-9][:.]([0]|[5])",\
        "commands": [\
          "{my $temperatur = '$message';;;; fhem(\"set Bad.Thermostat desiredTemperature $temperatur\");;;;}",\
          "set $SELF say @$recipient Heizung"\
        ]\
}\
},\
"Heizungjenni": {\
"message": [\
        "(zurück|aus:04.5) ",\
        "(5°C:05.0|10°C:10.0|16°C:16.0) ",\
"(18°C:18.0|19°C:19.0|20°C:20.0) ",\
"(21°C:21.0|22°C:22.0|23°C:23.0) ",\
        "Aktuell ist [Jennifer.Thermostat:desiredTemperature] eingestellt."\
      ],\
      "Setheizungjenni": {\
        "match": "[0-2][0-9][:.]([0]|[5])",\
        "commands": [\
          "{my $temperatur = '$message';;;; fhem(\"set Jennifer.Thermostat desiredTemperature $temperatur\");;;;}",\
          "set $SELF say @$recipient Heizung"\
        ]\
},\
"zurück": {\
    "commands": "set $recipient_history=.+ say @$recipient {(ReadingsVal($DEV, '$recipient_history', '') =~ m/(.+)\\|.+$/;;;; return $2 ? $2 : $1;;;;)}"\
  }\
}\
}\
}
attr Heizung_Dialog allowed everyone
attr Heizung_Dialog room msg

setstate Heizung_Dialog 2017-10-24 19:26:06 state Initialized


Hat jemand eine Idee woran es liegen könnte?
Wo hängt es denn genau?
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

Flipper92

Sorry.

Also der "Knopf" Aktualisieren funktioniert ohne Probleme.
Das Automatische nach 10 Sekunden jedoch nicht.

hab es auch schon mit:
"commands": [
  "{sleep 10;; fhem(\"set $SELF say @$recipient Heizung|aktulaisierenheizung\");;}"
],

versucht.

Hat aber irgendwie auch nicht geklappt. Also die Aktualisierung reagiert nicht von alleine.

igami

warum ein perl sleep? Einfach "sleep 10;; set $SELF ..."
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

Flipper92

#113
Zitat von: igami am 24 Oktober 2017, 19:58:39
warum ein perl sleep? Einfach "sleep 10;; set $SELF ..."

Hatte ich auch schon.
Hab es gerade nochmal getestet mit beiden Versionen (Heizung und Heizung|aktulaisierenheizung) es wird keine Schleife ausgelöst oder die Nachricht aktualisiert sich nicht. Aufjedenfall funktioniert der manuelle Reloade (klick auf aktulaisierenheizung)

PSI69

#114
Super! Ich habe das Thema hier vor einiger Zeit (und nun inzwischen mehrfach) durchgelesen; vor allem die Integration in die rr_.* Devices zum Versenden und zur Berechtigung gefällt mir sehr. Heute habe mich endlich mal ans werkeln gemacht... und bin glatt in mein erstes Problem gerannt:

Der meta Dialog wird in Telegram angezeigt, mein erster Dialogversuch ebenso. Nur wenn ich diesen im Telegram Client auswähle, also 'Alarmanlage', bekomme ich die folgenden Log Einträge:

Das hier ist noch erfolgreich:

2017.10.27 18:39:17 3: msg rr_Peter: ID=1509122357.45852.1 TYPE=push ROUTE=TeleBot RECIPIENT=@123456789 STATUS=OK PRIORITY=0 TITLE='' MSG='(Alarmanlage)
(abbrechen)
(beenden)
Ich kann folgendes für dich tun:'


Das dann nicht mehr:

2017.10.27 18:39:32 3: msg rr_Peter: ID=1509122372.31525.1 TYPE=push ROUTE=TeleBot RECIPIENT=@123456789 STATUS=ERROR PRIORITY=0 TITLE='' MSG='(Alarmanlage Ein)

(Globaler Abbruch)
(Rauchmelder Alarm Aus)
(Send Status Alarmanlage)
(Send Status Fenster)
(Send Status Türen)'
2017.10.27 18:39:32 3: msg push @rr_Peter (Alarmanlage Ein)

(Globaler Abbruch)
(Rauchmelder Alarm Aus)
(Send Status Alarmanlage)
(Send Status Fenster)
(Send Status Türen)  : TeleBot: TelegramBot_Set: Command message, no text for msg specified


Irgendwie fliegen die beiden '' raus, oder?

Übersehe ich hier etwas?

Internals:
   CFGFN
   DEF        {
  "Alarmanlage": {
    "message": [
      "{return('(Alarmanlage Ein) ') if(AttrVal('AAA','level6xec','default') ne 'armed')}",
      "{return('(Alarmanlage Aus) ') if(AttrVal('AAA','level6xec','default') eq 'armed')}",
      "(Globaler Abbruch) ",
      "(Rauchmelder Alarm Aus) ",
      "(Send Status Alarmanlage) ",
      "(Send Status Fenster) ",
      "(Send Status Türen) "
    ],
    "Globaler Abbruch": {
      "commands": "set Global.Cancel Abbruch",
      "message": [
        "TelegramBot_MTYPE=queryInline (%me%) ",
        "Globaler Abbruch ausgeführt."
      ]
    }
  }
}
   MSGCOMMAND msg push \@$recipients $message
   NAME       msgD_Alarmanlage
   NOTIFYDEV  TYPE=(ROOMMATE|GUEST)
   NR         1417
   NTFY_ORDER 50-msgD_Alarmanlage
   STATE      rr_Peter: Alarmanlage
   TRIGGER    Alarmanlage
   TYPE       msgDialog
   READINGS:
     2017-10-27 18:39:32   rr_Peter_history Alarmanlage
     2017-10-27 18:39:32   state           rr_Peter: Alarmanlage
Attributes:
   alias      msgDialog Alarmanlage
   allowed    rr_Peter,rr_Yvonne
   room       IS Messenger


EDIT: FHEM wurde gestern (26.10.) Nachmittag aktualisiert.

Danke Peter
FHEM 6 auf RPi 4 unter Buster mit inzwischen einem ganzen Zoo von Geräten...

binford6000

ZitatÜbersehe ich hier etwas?
Hallo Peter,
jedes Menü benötigt auch eine normale Message (hier "Menü Alarmanlage"). Probier mal folgendes:
{
  "Alarmanlage": {
    "message": [
      "{return('(Alarmanlage Ein) ') if(AttrVal('device','state','') ne 'on')}",
      "{return('(Alarmanlage Aus) ') if(AttrVal('device','state','') eq 'on')}",
      "(Globaler Abbruch) ",
      "(Rauchmelder Alarm Aus) ",
      "(Send Status Alarmanlage) ",
      "(Send Status Fenster) ",
      "(Send Status Türen) ",
      "(abbrechen) ",
      "Menü Alarmanlage"
    ],
    "Globaler Abbruch": {
      "commands": "set Global.Cancel Abbruch",
      "message": [
      "TelegramBot_MTYPE=queryInline (%me%) ",
      "Globaler Abbruch ausgeführt."
      ]
    }
  }
}

Und ein "abbrechen" Button ist auch immer gut zu gebrauchen...  ;)
VG Sebastian

PSI69

Hallo Sebastian,

Danke für Deinen Hinweis - ich habe das Beispiel gestern gefühlt 100-mal verglichen, hm... Jetzt bin ich einen Schritt weiter!

Schönes Wochenende,
Peter
FHEM 6 auf RPi 4 unter Buster mit inzwischen einem ganzen Zoo von Geräten...

igami

Sehr schön, dass sich gegenseitig geholfen wird :)
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

PSI69

Wobei das mit der fehlenden Dialogmessage hier schon vorher zwei Mal Thema war, Asche auf mein Haupt...

Nächstes Thema. Ich möchte aus einem Dialog heraus das Ergebnis (die Ausgabe) eines fhem Kommandos an den Dialogpartner versenden. Ich bekomme das im Moment nicht hin, die Nachricht geht immer an den Telegram defaultPeer, also mich und nicht an meine Frau, wenn diese den Dialog benutzt. Hier mal der relevante Teil vom Dialog:

    "Send Status Alarmanlage": {
      "commands": "set %TelegramBot% cmdSend {fhem 'list NAME=AAA:FILTER=level6=.* level6'}",
      "message": [
        "(%me%) ",
        "Status Alarmanlage."
      ]
    }


Auch dies hier hilft mir nicht, damit erfolgt keine Ausgabe des 'list ...', weder an meine Frau, noch an den defaultPeer:

"commands": "set %TelegramBot% $recipient cmdSend {fhem 'list NAME=AAA:FILTER=level6=.* level6'}",


Wobei dann die Nachricht auf Telegram als Messenger festgelegt ist, gefällt mir ebenfalls nicht. Also habe ich noch dies hier versucht:

"commands": "msg push $recipient {fhem 'list NAME=AAA:FILTER=level6=.* level6'}",

Damit wird nur das Kommando als Text zurück gegeben und nicht ausgeführt.

Ich denke, das Thema holt mich dann auch wieder ein, wenn ich einen Plot als Ergebnis eines Kommandos versenden möchte, oder?

Danke Peter
FHEM 6 auf RPi 4 unter Buster mit inzwischen einem ganzen Zoo von Geräten...

PSI69

Das hier, tut was es soll:

    "Send Status Alarmanlage": {
      "message": [
        "(%me%) ",
        "Status Alarmanlage:",
        "{fhem 'list NAME=AAA:FILTER=level6=.* level6'}"
      ]
    }


Tschau Peter
FHEM 6 auf RPi 4 unter Buster mit inzwischen einem ganzen Zoo von Geräten...