msgDialog: Instant Messaging als FHEM Interface

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

Vorheriges Thema - Nächstes Thema

binford6000

Zitat von: ErzGabriel am 22 September 2019, 07:39:06
Beides kann ich mit ja beantworten. Ist alles richtig gesetzt. Mittlerweile habe ich auch festgestellt, das ich jetzt jedesmal von meinem Bot, die Antworten aus den Dialogen zweimal erhalte. Da ist mir aufgefallen, das ich ausversehen meine eigene PeerID verwendet habe. Durch die falsche ID kam das Problem. Danke für den Hinweis, Problem konnte ich so lösen.

Habe aber noch ein kleines anderes Problem und dafür möchte ich auch noch um Hilfe bitten, weil mir die Zeit fehlt wegen dem Zusammenzug.
Vor einer Woche wurde festgestellt, das meine Freundin Allergie gegen gewisse Pollen hat. Jetzt möchte ich gerne einen Dialog einbauen, wo sie den Pollenflug abrufen kann. Da ich mich aber mit dem Dialoge bauen schwer tue, wollte ich fragen, ob einer einen fertigen Dialog für mich hat, den ich nur an mein System anpassen nrauch. Danke.

Der Dialog ist glaube das einfachste daran...  :o
Schwieriger wird es an die Readings zu kommen. Wenn es nur eine Handvoll Readings sind geht es noch zu Fuß. Aber wenn du alle haben willst
geht es glaube ich nur über einen Hash des Allergene Devices. Daraus kannst du dann die relevanten Readings rausfiltern und nach Wunsch aufbereiten.
Den Perlcode würde ich dann auslagern in myUtils damit du einen übersichtlichen Dialog bekommst. Da ich aber kein Perl-Crack bin kann ich dir hier
nur schematisch Hilfe geben.

Vielleicht mag ja einer Perl-Cracks die hier mitlesen einen Tipp geben...  ;)

VG Sebastian

ErzGabriel

Hi Sebastian.
Es geht nur um 5 Readings, soviele Allergien hat Sie zum Glück nicht.

LG Marcus

binford6000

Very Quick and more dirty  ;D

defmod pollen_dialog msgDialog {\
"1. Pollen": {\
"message": [\
"{return telegramBotGetPollenListMessage() }"\
]\
}\
}\


## Pollenflug

sub telegramBotGetPollenListMessage()
{
my $pol1 = ReadingsVal("Allergene", "fc1_Ahorn", "0");
my $pol2 = ReadingsVal("Allergene", "fc1_Ambrosia", "0");
my $pol3 = ReadingsVal("Allergene", "fc1_Kiefer", "0");
my $pol4 = ReadingsVal("Allergene", "fc1_Gräser", "0");
my $pol5 = ReadingsVal("Allergene", "fc1_Nessel", "0");
my $returnMessage;
$returnMessage .= "Ahorn: $pol1 \n" if($pol1 !~ /white/);
$returnMessage .= "Ambrosia: $pol1 \n" if($pol2 !~ /white/);
$returnMessage .= "Kiefer: $pol1 \n" if($pol3 !~ /white/);
$returnMessage .= "Gräser: $pol1 \n" if($pol4 !~ /white/);
$returnMessage .= "Nessel: $pol1 \n" if($pol5 !~ /white/);
return $returnMessage;
}


Da ich in der Readingsgroup mit den farbigen Punkten arbeite liefert die sub rc_dot usw. zurück.
Normal steht da low,moderate,high,extreme. Gefiltert wird auf alles was nicht low ist.

Schick machen musst du das allerdings dann selbst.  ;)
Mögliche Erweiterungen:

  • Welcher tag
  • Menüstruktur (zurück abbrechen,etc.)

Beispiele gibts hierzu jede Menge in den Posts, im Wiki oder im separaten Thread mit Bsp.-Dialogen.
VG Sebastian

ErzGabriel

Danke Sebastian, ich versuche mal mein Glück.

tb-killa

Hallo igami ich hatte auf die schnelle nicht die richtigen Informationen gefunden, aber ist es möglich auch in Gruppen zu antworten ?
Zur Zeit bekomme ich es nur hin, als Mitglied in einer Gruppe direkt vom Bot eine Nachricht zu erhalten, nicht über die Gruppe selbst.
Beste Grüße

onkel-tobi

Hi zusammen,

das liest sich ja alles sehr interessant, wollte mir jetzt auch mal ein wenig damit spielen, scheitere aber schon an der definition des meta_Dialogs.

die raw definition:
defmod meta_Dialog msgDialog

setstate meta_Dialog 2019-10-04 09:43:05 state Initialized

Ich probiere dann entsprechend die definition hinterherzuschieben (copy & paste aus dem wiki, check über json checker):
{
"%me%": {
"match": "\/?(start|%me%)",
"commands": "deletereading TYPE=msgDialog $recipient_history",
"message": [
"{return('(' . join(') (', sort{lc($a) cmp lc($b)} (split('\n', fhem('get TYPE=msgDialog:FILTER=NAME!=$SELF:FILTER=allowed=.*($recipient|everyone).* trigger', 1)))) . ') (abbrechen) ')}",
"Ich kann folgendes für dich tun:"
]
},
"zurück": {
"commands": "set $recipient_history=.+ say @$recipient {(ReadingsVal($DEV, '$recipient_history', '') =~ m/((.+)\\|.+$)/;;;; return($2 || $1);;;;)}"
},
"abbrechen": {
"match": "\/?abbrechen",
"commands": "deletereading TYPE=msgDialog $recipient_history",
"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"Dialog abgebrochen."
]
},
"beenden": {
"match": "\/?beenden",
"commands": "deletereading TYPE=msgDialog $recipient_history",
"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"Dialog beendet."
]
}
}


Bekomme aber dann folgende Fehlermeldung:
Usage: define <name> msgDialog {JSON}

invalid character encountered while parsing JSON string, at character offset 10 (before "\n\t\t"match": "\\/?...") at ./FHEM/76_msgDialog.pm line 93.

Habe aber wie geschrieben auf jsonlint.com keinen Fehler mehr drin gehabt.

Hat noch wer eine Idee?

Danke & Gruß,
Tobi

binford6000

Moin,
die Definition sollte schon mal so aussehen (1:1 aus dem Wiki  ;)):
defmod meta_Dialog msgDialog {}

Wenn ich dann deinen Code in die DEF einfüge klappts auch:
Internals:
   CFGFN     
   DEF        {
"%me%": {
"match": "\/?(start|%me%)",
"commands": "deletereading TYPE=msgDialog $recipient_history",
"message": [
"{return('(' . join(') (', sort{lc($a) cmp lc($b)} (split('\n', fhem('get TYPE=msgDialog:FILTER=NAME!=$SELF:FILTER=allowed=.*($recipient|everyone).* trigger', 1)))) . ') (abbrechen) ')}",
"Ich kann folgendes für dich tun:"
]
},
"zurück": {
"commands": "set $recipient_history=.+ say @$recipient {(ReadingsVal($DEV, '$recipient_history', '') =~ m/((.+)\\|.+$)/;;;; return($2 || $1);;;;)}"
},
"abbrechen": {
"match": "\/?abbrechen",
"commands": "deletereading TYPE=msgDialog $recipient_history",
"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"Dialog abgebrochen."
]
},
"beenden": {
"match": "\/?beenden",
"commands": "deletereading TYPE=msgDialog $recipient_history",
"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"Dialog beendet."
]
}
}
   FUUID      5d971603-f33f-fe74-158d-a081bb5645b14f46
   MSGCOMMAND msg push \@$recipients $message
   NAME       meta_Dialog
   NOTIFYDEV  TYPE=(ROOMMATE|GUEST)
   NR         24931
   NTFY_ORDER 50-meta_Dialog
   STATE      Initialized
   TRIGGER    %me%,beenden,zurück,abbrechen
   TYPE       msgDialog
   READINGS:
     2019-10-04 11:51:29   state           Initialized
Attributes:


VG Sebastian

ichichich

Ich hänge an dem ROOMMATE / GUEST fest, benutze ich zum ersten mal.
Wie soll der definiert werden für msgDialog, im Wiki steht nur
ZitatDer Inhalt vom Attribut msgContactPush muss folgendem Muster entsprechen:

<NAME des TelegramBot Device>:@<zum ROOMMATE/GUEST gehörende Telegram ID>

Ich habe folgendes in der fhem.cfg:
Zitat
....
define muABC TelegramBot 123456789:abcdefghijabcdefghij
attr muABC pollingTimeout 120
....
define rr_UWE ROOMMATE
attr rr_UWE alias Status
attr rr_UWE devStateIcon .*home:user_available:absent .*absent:user_away:home .*gone:user_ext_away:home .*gotosleep:scene_toilet:asleep .*asleep:scene_sleeping:awoken .*awoken:scene_sleeping_alternat:home .*:user_unknown:home
attr rr_UWE group UWE
attr rr_UWE icon people_sensor
attr rr_UWE msgContactPush muABC:@987654321
attr rr_UWE rr_realname group
attr rr_UWE sortby 1
attr rr_UWE webCmd state
...

defmod meta_Dialog msgDialog {\
...
}
attr meta_Dialog allowed everyone

defmod Waschmaschine_Dialog msgDialog { "Waschmaschine": {\
...
}
attr meta_Dialog allowed rr_UWE

bei 987654321 weis ich nicht wo ich diese Daten herholen soll. Habe den Wert aus muABC->msgChatId genommen, ohne Erfolg, der meta_Dialog wird nicht bei Telegram angezeigt.

Danke für eure Hilfe im voraus.
Gruß Uwe

binford6000

#668
Zitat von: ichichich am 27 Oktober 2019, 19:16:57
Ich hänge an dem ROOMMATE / GUEST fest, benutze ich zum ersten mal.
Wie soll der definiert werden für msgDialog, im Wiki steht nur
Ich habe folgendes in der fhem.cfg:
bei 987654321 weis ich nicht wo ich diese Daten herholen soll. Habe den Wert aus muABC->msgChatId genommen, ohne Erfolg, der meta_Dialog wird nicht bei Telegram angezeigt.

Danke für eure Hilfe im voraus.
Gruß Uwe

Du bekommst deine ID wenn du zB. den "get id" Bot von Telegram benutzt  ;)
Einfach /start senden...

VG Sebastian

subseven

#669
Hallo zusammen,

aus mehreren Heizungsdialogen habe ich einen für mich passenden Programmiert.
Dieser Dialog braucht nicht die Namen der Heizkörperthermostate und  und löst mein Problem, wenn man mehrere Heizkörper in einen Raum geschaltet werden sollen zusätzlich hat er eine "oneTime"-Programmierung um Heizkörper in den nächsten24h einzustellen.
Den Dialog möchte ich euch nicht vorenthalten. Einzig die Korrekten Raumnamen sind anzugeben und ggf. für die Eingangsnachricht die Ausgaben anzupassen.
Anregungen sind willkommen.


defmod Heizung_Dialog msgDialog {\
"1. Heizung": {\
"match": "Raumtemperaturen",\
"message": [\
"(Wohnzimmer|Büro) (Bad|Kinderzimmer) (Küche|Schlafzimmer) ",\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"Ist:. . . . . Soll:. . . . . Raum:",\
"[WZ_Sen_TV:temperature]°C / [WZ_Heiz_WZ:desiredTemperature]°C / Wohnzimmer",\
"[Bue_Heiz_Gross:temperature]°C / [Bue_Heiz_Gross:desiredTemperature]°C / Büro",\
"[Bad_Sen_Schrank:temperature]°C / [Bad_Heiz_Gross:desiredTemperature]°C / Bad",\
"[KZ_Sen_Komode:temperature]°C / [KZ_Heiz_Gross:desiredTemperature]°C / Kinderzimmer",\
"[Kue_Heiz_Gross:temperature]°C / [Kue_Heiz_Gross:desiredTemperature]°C / Küche",\
"[SZ_Heiz_Gross:temperature]°C / [SZ_Heiz_Gross:desiredTemperature]°C / Schlafzimmer"\
],\
"Raum": {\
"match": "(Wohnzimmer|Büro|Kinderzimmer|Schlafzimmer|Bad|Küche)",\
"commands": "setreading $SELF $recipient_Room $message",\
"message": [\
"(auto|boost) ",\
"(10.0|12.0|16.0|17.0) ",\
"(17.5|18.0|18.5|19.0) ",\
"(19.5|20.0|20.5|21.0) ",\
"(21.5|22.0|22.5|23.0) ",\
"(Programmierung) ",\
"(abbrechen) ",\
"Heizung im $message einstellen"\
],\
"Programmierung": {\
"match": "(Programmierung)",\
"message": [\
"(Status|Löschen) ",\
"(00:00|00:30|01:00|01:30|02:00|02:30) ",\
"(03:00|03:30|04:00|04:30|05:00|05:30) ",\
"(06:00|06:30|07:00|07:30|08:00|08:30) ",\
"(09:00|09:30|10:00|10:30|11:00|11:30) ",\
"(12:00|12:30|13:00|13:30|14:00|14:30) ",\
"(15:00|15:30|16:00|16:30|17:00|17:30) ",\
"(18:00|18:30|19:00|19:30|20:00|20:30) ",\
"(21:00|21:30|22:00|22:30|23:00|23:30) ",\
"(abbrechen) ",\
"{my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; return \"Schaltzeitpunkt für $room einstellen\";;;;;;;; }"\
],\
"Löschen": {\
"match": "(Löschen)",\
"commands": [\
"{my %umlaute = (\"ä\" => \"ae\", \"Ä\" => \"Ae\", \"ü\" => \"ue\", \"Ü\" => \"Ue\", \"ö\" => \"oe\", \"Ö\" => \"Oe\", \"ß\" => \"ss\" );;;;;;;; my $umlautkeys = join (\"|\", keys(%umlaute));;;;;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; $room =~ s/($umlautkeys)/$umlaute{$1}/g;;;;;;;; fhem (\"delete at_$recipient_$room  \");;;;;;;; }"\
],\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"{my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; return \"Programmierung für $room gelöscht.\";;;;;;;; }"\
]\
},\
"Status": {\
"match": "(Status)",\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"{my %umlaute = (\"ä\" => \"ae\", \"Ä\" => \"Ae\", \"ü\" => \"ue\", \"Ü\" => \"Ue\", \"ö\" => \"oe\", \"Ö\" => \"Oe\", \"ß\" => \"ss\" );;;;;;;; my $umlautkeys = join (\"|\", keys(%umlaute));;;;;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; $room =~ s/($umlautkeys)/$umlaute{$1}/g;;;;;;;; my $time = ReadingsVal(\"at_$recipient_$room\", \"time\", \"\");;;;;;;; my $temp = ReadingsVal(\"at_$recipient_$room\", \"temp\", \"\");;;;;;;; return \"Programmierung $room $time Uhr $temp °C.\";;;;;;;; }"\
]\
},\
"Uhrzeit": {\
"match": "([0-1][0-9]|2[0-3])[:_][0-5][0-9]",\
"commands": [\
"{fhem (\"setreading $SELF $recipient_Time $message\") }"\
],\
"message": [\
"(auto|boost) ",\
"(10.0|12.0|16.0|17.0) ",\
"(17.5|18.0|18.5|19.0) ",\
"(19.5|20.0|20.5|21.0) ",\
"(21.5|22.0|22.5|23.0) ",\
"(abbrechen) ",\
"Heizung um $message Uhr einstellen"\
],\
"Temperatur": {\
"match": "auto|boost|[0-2][0-9][:.]([0]|[5])",\
"commands": [\
"{my $time = ReadingsVal(\"$SELF\", \"$recipient_Time\", \"\");;;;;;;; my %umlaute = (\"ä\" => \"ae\", \"Ä\" => \"Ae\", \"ü\" => \"ue\", \"Ü\" => \"Ue\", \"ö\" => \"oe\", \"Ö\" => \"Oe\", \"ß\" => \"ss\" );;;;;;;; my $umlautkeys = join (\"|\", keys(%umlaute));;;;;;;; my $temp = \"$message\";;;;;;;; $temp =~ s/([\\d]{1,2}\\.[\\d{1}])/$1/g;;;;;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; $room =~ s/($umlautkeys)/$umlaute{$1}/g;;;;;;;; fhem (\"delete at_$recipient_$room  \");;;;;;;; fhem (\"define at_$recipient_$room at $time:00 set room=$room:FILTER=type=HeatingThermostat desiredTemperature $temp \");;;;;;;; fhem (\"setreading at_$recipient_$room time $time \");;;;;;;; fhem (\"setreading at_$recipient_$room temp $temp \") }"\
],\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"{my $time = ReadingsVal(\"$SELF\", \"$recipient_Time\", \"\");;;;;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; return \"Temperatur im $room auf $message°C für $time Uhr eingestellt.\";;;;;;;; }"\
]\
}\
}\
},\
"Temperatur": {\
"match": "auto|boost|[0-2][0-9][:.]([0]|[5])",\
"commands": [\
"{my $temp = \"$message\";;;;;;;; $temp =~ s/([\\d]{1,2}\\.[\\d{1}])/$1/g;;;;;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;;  fhem (\"set room=$room:FILTER=type=HeatingThermostat desiredTemperature $temp \");;;;;;;; }"\
],\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"{my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; return \"Temperatur im $room auf $message°C eingestellt.\";;;;;;;; }"\
]\
}\
}\
}\
}
attr Heizung_Dialog allowed everyone
attr Heizung_Dialog room msg


Und für Interessierte noch einen Dialog um die Kaffeemascine zu programmieren (Über eine Funksteckdose)
defmod Kaffee_Dialog msgDialog {\
"2. Kaffee": {\
"match": "Kaffee",\
"message": [\
"(Einschalten|Ausschalten) (Programmierung) ",\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"{my $time = ReadingsVal(\"at_$recipient_kaffee\", \"time\", \"\");;;;;;;; return \"Die aktuelle Konfiguration ist: $time Uhr\";;;;;;;; }"\
],\
"Einschalten": {\
"match": "(Einschalten)",\
"commands": [\
"{fhem (\"set WZ_PB_RC03 on\");;;;;;;; }"\
],\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"Kaffeemaschine eingeschaltet "\
]\
},\
"Ausschalten": {\
"match": "(Ausschalten)",\
"commands": [\
"{fhem (\"set WZ_PB_RC03 off\");;;;;;;; }"\
],\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"Kaffeemaschine ausgeschaltet "\
]\
},\
"Programmierung": {\
"match": "(Programmierung)",\
"message": [\
"(Status|Löschen) ",\
"(00:00|00:30|01:00|01:30|02:00|02:30) ",\
"(03:00|03:30|04:00|04:30|05:00|05:30) ",\
"(06:00|06:30|07:00|07:30|08:00|08:30) ",\
"(09:00|09:30|10:00|10:30|11:00|11:30) ",\
"(12:00|12:30|13:00|13:30|14:00|14:30) ",\
"(15:00|15:30|16:00|16:30|17:00|17:30) ",\
"(18:00|18:30|19:00|19:30|20:00|20:30) ",\
"(21:00|21:30|22:00|22:30|23:00|23:30) ",\
"(abbrechen) ",\
"{my $konfig = ReadingsVal(\"$SELF\", \"$recipient_Kaffee\", \"\");;;;;;;; return \"Schaltzeitpunkt für Kaffeemaschine einstellen\";;;;;;;; }"\
],\
"Löschen": {\
"match": "(Löschen)",\
"commands": [\
"{fhem (\"delete at_$recipient_kaffee  \");;;;;;;; }"\
],\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"Programmierung gelöscht"\
]\
},\
"Status": {\
"match": "(Status)",\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"{my $time = ReadingsVal(\"at_$recipient_kaffee\", \"time\", \"\");;;;;;;; return \"Programmierung Kaffeemaschine $time Uhr.\";;;;;;;; }"\
]\
},\
"Uhrzeit": {\
"match": "([0-1][0-9]|2[0-3])[:_][0-5][0-9]",\
"commands": [\
"{fhem (\"setreading $SELF $recipient_Time $message\");;;;;;;; my $time = ReadingsVal(\"$SELF\", \"$recipient_Time\", \"\");;;;;;;; fhem (\"delete at_$recipient_kaffee  \");;;;;;;; fhem (\"define at_$recipient_kaffee at $time:00 set WZ_PB_RC03 on \");;;;;;;; fhem (\"setreading at_$recipient_kaffee time $time \") }"\
],\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"{my $time = ReadingsVal(\"$SELF\", \"$recipient_Time\", \"\");;;;;;;; return \"Kaffeemaschine $message Uhr eingestellt.\";;;;;;;; }"\
]\
}\
}\
}\
}
attr Kaffee_Dialog allowed everyone
attr Kaffee_Dialog room Gateway



ErzGabriel

#670
@subseven, besten Dank für den Heizungs Dialog, der ist spitze.
Leider kriege ich ihn bei mir nicht zum laufen und ich finde den Fehler nicht. Kann mir bitte jemand helfen.

Ich habe den Dialog so weit umgebaut, das er FHT Thermostat ansteuern kann und habe die richtigen Namen eingetragen aber es wird nichts geschaltet bei mir, ergo gehe ich davon aus, das ich noch einen Fehler drin habe aber ich finde nicht wo.

Eingestellte Temperatur muss bei mir "desired-temp" heißen.
Gemessene Temperatur muss bei mir "measured-temp" heißen.


defmod heizungs_Dialog msgDialog {\
"Heizung": {\
"match": "Raumtemperaturen",\
"message": [\
"(Wohnzimmer|Büro) (Küche|Schlafzimmer) ",\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"Ist:. . . . . Soll:. . . . . Raum:",\
"[HZ_WOHNZ:measured-temp]°C / [HZ_WOHNZ:desired-temp]°C / Wohnzimmer",\
"[HZ_BUERO:measured-temp]°C / [HZ_BUERO:desired-temp]°C / Büro",\
"[HZ_KUECHE:measured-temp]°C / [HZ_KUECHE:desired-temp]°C / Küche",\
"[HZ_BED:measured-temp]°C / [HZ_BED:desired-temp]°C / Schlafzimmer"\
],\
"Raum": {\
"match": "(Wohnzimmer|Büro|Schlafzimmer|Küche)",\
"commands": "setreading $SELF $recipient_Room $message",\
"message": [\
"(auto|boost) ",\
"(10.0|12.0|16.0|17.0) ",\
"(17.5|18.0|18.5|19.0) ",\
"(19.5|20.0|20.5|21.0) ",\
"(21.5|22.0|22.5|23.0) ",\
"(Programmierung) ",\
"(abbrechen) ",\
"Heizung im $message einstellen"\
],\
"Programmierung": {\
"match": "(Programmierung)",\
"message": [\
"(Status|Löschen) ",\
"(00:00|00:30|01:00|01:30|02:00|02:30) ",\
"(03:00|03:30|04:00|04:30|05:00|05:30) ",\
"(06:00|06:30|07:00|07:30|08:00|08:30) ",\
"(09:00|09:30|10:00|10:30|11:00|11:30) ",\
"(12:00|12:30|13:00|13:30|14:00|14:30) ",\
"(15:00|15:30|16:00|16:30|17:00|17:30) ",\
"(18:00|18:30|19:00|19:30|20:00|20:30) ",\
"(21:00|21:30|22:00|22:30|23:00|23:30) ",\
"(abbrechen) ",\
"{my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; return \"Schaltzeitpunkt für $room einstellen\";;;;;;;; }"\
],\
"Löschen": {\
"match": "(Löschen)",\
"commands": [\
"{my %umlaute = (\"ä\" => \"ae\", \"Ä\" => \"Ae\", \"ü\" => \"ue\", \"Ü\" => \"Ue\", \"ö\" => \"oe\", \"Ö\" => \"Oe\", \"ß\" => \"ss\" );;;;;;;; my $umlautkeys = join (\"|\", keys(%umlaute));;;;;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; $room =~ s/($umlautkeys)/$umlaute{$1}/g;;;;;;;; fhem (\"delete at_$recipient_$room  \");;;;;;;; }"\
],\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"{my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; return \"Programmierung für $room gelöscht.\";;;;;;;; }"\
]\
},\
"Status": {\
"match": "(Status)",\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"{my %umlaute = (\"ä\" => \"ae\", \"Ä\" => \"Ae\", \"ü\" => \"ue\", \"Ü\" => \"Ue\", \"ö\" => \"oe\", \"Ö\" => \"Oe\", \"ß\" => \"ss\" );;;;;;;; my $umlautkeys = join (\"|\", keys(%umlaute));;;;;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; $room =~ s/($umlautkeys)/$umlaute{$1}/g;;;;;;;; my $time = ReadingsVal(\"at_$recipient_$room\", \"time\", \"\");;;;;;;; my $temp = ReadingsVal(\"at_$recipient_$room\", \"temp\", \"\");;;;;;;; return \"Programmierung $room $time Uhr $temp °C.\";;;;;;;; }"\
]\
},\
"Uhrzeit": {\
"match": "([0-1][0-9]|2[0-3])[:_][0-5][0-9]",\
"commands": [\
"{fhem (\"setreading $SELF $recipient_Time $message\") }"\
],\
"message": [\
"(auto|boost) ",\
"(10.0|12.0|16.0|17.0) ",\
"(17.5|18.0|18.5|19.0) ",\
"(19.5|20.0|20.5|21.0) ",\
"(21.5|22.0|22.5|23.0) ",\
"(abbrechen) ",\
"Heizung um $message Uhr einstellen"\
],\
"Temperatur": {\
"match": "auto|boost|[0-2][0-9][:.]([0]|[5])",\
"commands": [\
"{my $time = ReadingsVal(\"$SELF\", \"$recipient_Time\", \"\");;;;;;;; my %umlaute = (\"ä\" => \"ae\", \"Ä\" => \"Ae\", \"ü\" => \"ue\", \"Ü\" => \"Ue\", \"ö\" => \"oe\", \"Ö\" => \"Oe\", \"ß\" => \"ss\" );;;;;;;; my $umlautkeys = join (\"|\", keys(%umlaute));;;;;;;; my $temp = \"$message\";;;;;;;; $temp =~ s/([\\d]{1,2}\\.[\\d{1}])/$1/g;;;;;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; $room =~ s/($umlautkeys)/$umlaute{$1}/g;;;;;;;; fhem (\"delete at_$recipient_$room  \");;;;;;;; fhem (\"define at_$recipient_$room at $time:00 set room=$room:FILTER=type=HeatingThermostat desired-temp $temp \");;;;;;;; fhem (\"setreading at_$recipient_$room time $time \");;;;;;;; fhem (\"setreading at_$recipient_$room temp $temp \") }"\
],\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"{my $time = ReadingsVal(\"$SELF\", \"$recipient_Time\", \"\");;;;;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; return \"Temperatur im $room auf $message°C für $time Uhr eingestellt.\";;;;;;;; }"\
]\
}\
}\
},\
"Temperatur": {\
"match": "auto|boost|[0-2][0-9][:.]([0]|[5])",\
"commands": [\
"{my $temp = \"$message\";;;;;;;; $temp =~ s/([\\d]{1,2}\\.[\\d{1}])/$1/g;;;;;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;;  fhem (\"set room=$room:FILTER=type=HeatingThermostat desired-temp $temp \");;;;;;;; }"\
],\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"{my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; return \"Temperatur im $room auf $message°C eingestellt.\";;;;;;;; }"\
]\
}\
}\
}\
}
attr heizungs_Dialog allowed rr_Mxxxxx,rr_Vxxx
attr heizungs_Dialog room Telegram

subseven

Was genau ist das Problem?
Sieht auf den ersten Blick eigentlich ganz Ok aus.
Läuft der Dialog selbst durch? Werden die AT angelegt?

Denke ein List vom Thermostat wäre interessant, Könnte mir vorstellen, dass es am "Type" liegt
Was steht im Log?

ErzGabriel

Das Problem ist folgendes.
Greife ich auf den Dialog zu, steht im FHEM das ich eine Temperatur eingestellt habe aber die Heizung ändert den Wert nicht.

Anzeige in Fhem vor dem senden vom Befehl.
heizungs_Dialog    rr_Mxxxxx: Heizung

Anzeige nach dem senden vom Befehl.
heizungs_Dialog   rr_Marcus: 21.0

Internals:
   CODE       1432
   CUL0_MSGCNT 2239
   CUL0_RAWMSG 810c04xx0909a00114320000260e
   CUL0_RSSI  -61.5
   CUL0_TIME  2019-12-28 05:47:52
   DEF        1432
   FUUID      5d7f71c3-f33f-7a73-085f-24d85a3d090a567d
   IODev      CUL0
   LASTInputDev CUL0
   MSGCNT     2239
   NAME       HZ_BUERO
   NR         307
   STATE      measured-temp: 19.4
   TYPE       FHT

Im Log steht nicht davon, das die Heizung gestellt wird.
Auszug Log
Heizung im Büro einstellen'
2019.12.28 05:59:05 3: msg rr_Marcus: ID=1577509144.86912.1 TYPE=push ROUTE=Jarvis RECIPIENT=@448551485 STATUS=OK PRIORITY=0 TITLE='' MSG='(Jarvis)
Temperatur im Büro auf 21.0°C eingestellt.'
2019.12.28 05:59:07 3: get TYPE=msgDialog:FILTER=NAME!=meta_Dialog:FILTER=allowed=.*(rr_Mxxxxx|everyone).* trigger : Geräte

Mehr steht da nicht.

subseven

Zitat von: ErzGabriel am 28 Dezember 2019, 06:03:53
Internals:
   CODE       1432
   CUL0_MSGCNT 2239
   CUL0_RAWMSG 810c04xx0909a00114320000260e
   CUL0_RSSI  -61.5
   CUL0_TIME  2019-12-28 05:47:52
   DEF        1432
   FUUID      5d7f71c3-f33f-7a73-085f-24d85a3d090a567d
   IODev      CUL0
   LASTInputDev CUL0
   MSGCNT     2239
   NAME       HZ_BUERO
   NR         307
   STATE      measured-temp: 19.4
   TYPE       FHT

Dein Thermostate sind scheinbar von einem anderen Typ. Ändere mal bitte wie folgt:

defmod heizungs_Dialog msgDialog {\
"Heizung": {\
"match": "Raumtemperaturen",\
"message": [\
"(Wohnzimmer|Büro) (Küche|Schlafzimmer) ",\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"Ist:. . . . . Soll:. . . . . Raum:",\
"[HZ_WOHNZ:measured-temp]°C / [HZ_WOHNZ:desired-temp]°C / Wohnzimmer",\
"[HZ_BUERO:measured-temp]°C / [HZ_BUERO:desired-temp]°C / Büro",\
"[HZ_KUECHE:measured-temp]°C / [HZ_KUECHE:desired-temp]°C / Küche",\
"[HZ_BED:measured-temp]°C / [HZ_BED:desired-temp]°C / Schlafzimmer"\
],\
"Raum": {\
"match": "(Wohnzimmer|Büro|Schlafzimmer|Küche)",\
"commands": "setreading $SELF $recipient_Room $message",\
"message": [\
"(auto|boost) ",\
"(10.0|12.0|16.0|17.0) ",\
"(17.5|18.0|18.5|19.0) ",\
"(19.5|20.0|20.5|21.0) ",\
"(21.5|22.0|22.5|23.0) ",\
"(Programmierung) ",\
"(abbrechen) ",\
"Heizung im $message einstellen"\
],\
"Programmierung": {\
"match": "(Programmierung)",\
"message": [\
"(Status|Löschen) ",\
"(00:00|00:30|01:00|01:30|02:00|02:30) ",\
"(03:00|03:30|04:00|04:30|05:00|05:30) ",\
"(06:00|06:30|07:00|07:30|08:00|08:30) ",\
"(09:00|09:30|10:00|10:30|11:00|11:30) ",\
"(12:00|12:30|13:00|13:30|14:00|14:30) ",\
"(15:00|15:30|16:00|16:30|17:00|17:30) ",\
"(18:00|18:30|19:00|19:30|20:00|20:30) ",\
"(21:00|21:30|22:00|22:30|23:00|23:30) ",\
"(abbrechen) ",\
"{my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; return \"Schaltzeitpunkt für $room einstellen\";;;;;;;; }"\
],\
"Löschen": {\
"match": "(Löschen)",\
"commands": [\
"{my %umlaute = (\"ä\" => \"ae\", \"Ä\" => \"Ae\", \"ü\" => \"ue\", \"Ü\" => \"Ue\", \"ö\" => \"oe\", \"Ö\" => \"Oe\", \"ß\" => \"ss\" );;;;;;;; my $umlautkeys = join (\"|\", keys(%umlaute));;;;;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; $room =~ s/($umlautkeys)/$umlaute{$1}/g;;;;;;;; fhem (\"delete at_$recipient_$room  \");;;;;;;; }"\
],\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"{my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; return \"Programmierung für $room gelöscht.\";;;;;;;; }"\
]\
},\
"Status": {\
"match": "(Status)",\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"{my %umlaute = (\"ä\" => \"ae\", \"Ä\" => \"Ae\", \"ü\" => \"ue\", \"Ü\" => \"Ue\", \"ö\" => \"oe\", \"Ö\" => \"Oe\", \"ß\" => \"ss\" );;;;;;;; my $umlautkeys = join (\"|\", keys(%umlaute));;;;;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; $room =~ s/($umlautkeys)/$umlaute{$1}/g;;;;;;;; my $time = ReadingsVal(\"at_$recipient_$room\", \"time\", \"\");;;;;;;; my $temp = ReadingsVal(\"at_$recipient_$room\", \"temp\", \"\");;;;;;;; return \"Programmierung $room $time Uhr $temp °C.\";;;;;;;; }"\
]\
},\
"Uhrzeit": {\
"match": "([0-1][0-9]|2[0-3])[:_][0-5][0-9]",\
"commands": [\
"{fhem (\"setreading $SELF $recipient_Time $message\") }"\
],\
"message": [\
"(auto|boost) ",\
"(10.0|12.0|16.0|17.0) ",\
"(17.5|18.0|18.5|19.0) ",\
"(19.5|20.0|20.5|21.0) ",\
"(21.5|22.0|22.5|23.0) ",\
"(abbrechen) ",\
"Heizung um $message Uhr einstellen"\
],\
"Temperatur": {\
"match": "auto|boost|[0-2][0-9][:.]([0]|[5])",\
"commands": [\
"{my $time = ReadingsVal(\"$SELF\", \"$recipient_Time\", \"\");;;;;;;; my %umlaute = (\"ä\" => \"ae\", \"Ä\" => \"Ae\", \"ü\" => \"ue\", \"Ü\" => \"Ue\", \"ö\" => \"oe\", \"Ö\" => \"Oe\", \"ß\" => \"ss\" );;;;;;;; my $umlautkeys = join (\"|\", keys(%umlaute));;;;;;;; my $temp = \"$message\";;;;;;;; $temp =~ s/([\\d]{1,2}\\.[\\d{1}])/$1/g;;;;;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; $room =~ s/($umlautkeys)/$umlaute{$1}/g;;;;;;;; fhem (\"delete at_$recipient_$room  \");;;;;;;; fhem (\"define at_$recipient_$room at $time:00 set room=$room:FILTER=type=FHT desired-temp $temp \");;;;;;;; fhem (\"setreading at_$recipient_$room time $time \");;;;;;;; fhem (\"setreading at_$recipient_$room temp $temp \") }"\
],\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"{my $time = ReadingsVal(\"$SELF\", \"$recipient_Time\", \"\");;;;;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; return \"Temperatur im $room auf $message°C für $time Uhr eingestellt.\";;;;;;;; }"\
]\
}\
}\
},\
"Temperatur": {\
"match": "auto|boost|[0-2][0-9][:.]([0]|[5])",\
"commands": [\
"{my $temp = \"$message\";;;;;;;; $temp =~ s/([\\d]{1,2}\\.[\\d{1}])/$1/g;;;;;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;;  fhem (\"set room=$room:FILTER=type=FHT desired-temp $temp \");;;;;;;; }"\
],\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"{my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; return \"Temperatur im $room auf $message°C eingestellt.\";;;;;;;; }"\
]\
}\
}\
}\
}
attr heizungs_Dialog allowed rr_Mxxxxx,rr_Vxxx
attr heizungs_Dialog room Telegram


Du kannst auch manuell mal Testen ob die Befehle funktionieren:
set room=<RAUMNAME>:FILTER=type=FHT desired-temp <TEMPERATUR>

Damit sollte sich dann das Thermostat schalten lassen.

ErzGabriel

Beides getestet. Kein Erfolg.
Über Befehlszeile, Befehl wird aus geführt ohne Fehlermeldung, wenn ich das Semikolon weglassen. Mit Semikolon, kommt Fehlermeldung unbekannter Filter.
Jeweils kein Eintrag im Log.

Auszug aus dem Log, beim versuch über Telegram
Heizung im Büro einstellen'
2019.12.28 12:06:28 3: msg rr_Marcus: ID=1577531188.78938.1 TYPE=push ROUTE=Jarvis RECIPIENT=@448551485 STATUS=OK PRIORITY=0 TITLE='' MSG='(Jarvis)
Temperatur im Büro auf 21.0°C eingestellt.'
2019.12.28 12:06:39 3: get TYPE=msgDialog:FILTER=NAME!=meta_Dialog:FILTER=allowed=.*(rr_Mxxxxx|everyone).* trigger : Geräte

Mir ist mittlerweile was aufgefallen, was ich noch nicht ganz verstehe. Es wird von Raumname gesprochen, ich habe aber so keine Raumnamen, sondern nur Name der Heizung. Könnte da der Fehler liegen?