msgDialog: Instant Messaging als FHEM Interface

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

Vorheriges Thema - Nächstes Thema

ToM_ToM

#345
Hey igami,

ich habe nochmal stundenlang rumgetestet.


{
"Raumtemperaturen": {
"match": "Raumtemperaturen",
"message": [
"(Arbeitszimmer) (Badezimmer|Wohnzimmer) ",
"TelegramBot_MTYPE=queryInline (%me%) ",
"{return telegramBotGetRoomTemperatureListMessage() }"
],
"Raum": {
"match": "(Arbeitszimmer|Badezimmer|Wohnzimmer)",
"commands": "setreading $SELF $recipient_Room $message",
"message": [
"(5.0°C|10.0°C|16.0°C|17.0°C) ",
"(17.5°C|18.0°C|18.5°C|19.0°C) ",
"(19.5°C|20.0°C|20.5°C|21.0°C) ",
"(21.5°C|22.0°C|22.5°C|23.0°C) ",
"(abbrechen) ",
"Heizung im $message einstellen"
],
"Temperatur": {
"match": "on|off|[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\", \"\");;;; my $clima = ($room==\"Arbeitszimmer\"?\"HM_568F52_Clima\":($room==\"Badezimmer\"?\"HM_3C5A11_Clima\":($room==\"Wohnzimmer\"?\"HM_51B1F7_Clima\":\"\")));;;; fhem(\"setreading $SELF clima $clima\");;;; fhem (\"set $clima desired-temp $temp\") }",
"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"{my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;; my $temp = $message;;;; $temp =~ s/([\\d]{1,2}\\.[\\d{1}]).*/$1/g;;;; return \"Temperatur im $room auf $temp eingestellt.\";;;; }"
]
}
}
  }
}


Irgendwie scheint der Dialog ein Problem mit den ° Zeichen zu haben.

Bekomme jetzt immer als Telegram-Antwort: Unrecognized character \x{b0}

EDIT: Sobald ich das Grad-Zeichen entferne, also auch oben in dem Auswahldialog wo ich die Temperatur wähle, dann funktioniert es. Sieht nur bisschen doof aus, wenn da nur Zahlen stehen. ;)
Habe auch schon versucht, das Grad-Zeichen mit Perl und JSON zu escapen. Aber dann schreibt er mir den Escape-String als Klartext rein.


VG, Thomas
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

Marlen

Zitat von: binford6000 am 12 Januar 2018, 10:28:39
Wie hast Du Deine Menü-Struktur erstellt?

Hmm...das ist eine gute Idee, ich hab alles in insgesamt 4 Dialoge Verpackt.

Wird schnell unübersichtlich, aber man muss ja nicht ständig ran!

LG
Marlen

ToM_ToM

Hallo igami,

ich stehe schon wieder vor dem nächsten Problem. Undzwar möchte ich mir einen Plot zusenden lassen, was bei mir auch super funktioniert. Möchte mein Bruder das tun, bekommt er eine Fehlermeldung.

Hier die Roommate-Devices (IDs habe ich ersetzt)


defmod Thomas ROOMMATE
attr Thomas DbLogExclude .*
attr Thomas alias Thomas
attr Thomas 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 Thomas group Personen
attr Thomas icon people_sensor
attr Thomas msgContactPush TelegramBot:@123456789
attr Thomas room Allgemein
attr Thomas rr_realname group
attr Thomas sortby 1
attr Thomas webCmd state

defmod Dirk ROOMMATE
attr Dirk DbLogExclude .*
attr Dirk alias Dirk
attr Dirk 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 Dirk group Personen
attr Dirk icon people_sensor
attr Dirk msgContactPush TelegramBot:@123456789
attr Dirk room Allgemein
attr Dirk rr_realname group
attr Dirk sortby 1
attr Dirk webCmd state


Folgende msgDialog - Definition sendet mir nach Aufforderung den Plot zu. Wenn mein Bruder die Anfrage macht, bekommt er die Meldung

FAILED peer not found :Dirk: Helligkeit


{
"Wetter": {
"message": [
"(Regen|Wind) (Helligkeit) ",
"TelegramBot_MTYPE=queryInline (%me%) ",
"Wetterstation"

],
"Regen": {
"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"{return telegramBotGetRainTodayMessage(\"HM_GN_Wetterstation\")}"
]
},
"Helligkeit": {
"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"{fhem(\"set %TelegramBot% cmdSend @\".\"$recipient {plotAsPng('Plot_HM_GN_Wetterstation_BRIGHTNESS')}\")}",
"Helligkeit"
]
},
"Wind": {
"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"Wind"
]
}
}
}


Alles andere kann er im Dialog aufrufen.

VG, Thomas
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

Fixel2012

Hi,

ich hab da mal ne blöde Frage:

Kann ich irgendwie ein alias festlegen, was ein abgefragtes Reading umwandelt?

Ich würde gerne die Anwesenheit der Familienmitglieder ausgeben. Somit würde ich die readings "present/absent" in "Anwesend"Abwesend" mappen.

Aber ohne das direkt im Device zu machen. Zwecks Komptabilität.

Gibt es da eine Möglichkeit  ???

Gruß,

Fixel
Fhem 5.8 auf Raspi 3, HMLAN und 868MHz CUL mit einigen Komponenten, Z-Wave Rollladenaktoren, Tablet UI, 433 MHz CUL mit Baumarktsteckdosen und Temp Sensoren, Amazon Echo, Echo Dot, 2x SONOS  play1, 1x SONOS Connect AMP,  presence, HUE, Lightify

igami

Zitat von: Fixel2012 am 19 Januar 2018, 15:23:44
Kann ich irgendwie ein alias festlegen, was ein abgefragtes Reading umwandelt?

Ich würde gerne die Anwesenheit der Familienmitglieder ausgeben. Somit würde ich die readings "present/absent" in "Anwesend"Abwesend" mappen.

Aber ohne das direkt im Device zu machen. Zwecks Komptabilität.

Gibt es da eine Möglichkeit  ???
Also eine Art Wörterbuch? Falls ja würde ich das glaube ich über die myUtils lösen

sub babel_en2de($) {
  my ($text) = @_;
  my %babel = (
    "present" => "anwesend",
    "absent" => "abwesend"
  );
  my $babelkeys = join("|", keys(%babel));
  $text =~ s/($babelkeys)/$babel{$1}/g;
 
  return($text);
}


Dann noch alle ausgehenden Nachrichten durch den übersetzer jagen:

attr myMsgConfig msgDialog_msgCommand msg push \@$recipients {(babel_en2de($message))}
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

ToM_ToM

ZitatHallo igami,

ich stehe schon wieder vor dem nächsten Problem. Undzwar möchte ich mir einen Plot zusenden lassen, was bei mir auch super funktioniert. Möchte mein Bruder das tun, bekommt er eine Fehlermeldung.

Hi igami, hast du schon eine Idee? Kannst du auch die recipientID in deinem Modul als Variable zur Verfügung stellen? Dann würde ich es damit nochmal versuchen.

VG, Thomas
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

igami

Zitat von: ToM_ToM am 20 Januar 2018, 09:25:08
Hi igami, hast du schon eine Idee? Kannst du auch die recipientID in deinem Modul als Variable zur Verfügung stellen? Dann würde ich es damit nochmal versuchen.

VG, Thomas
Hi Thomas,

entschuldige bitte, aber ich hatte das vergessen :-[
Es ist geplant, dass man in message mehrere arrays angeben kann

...,
"message": [
  [
    "TelegramBot_MTYPE=cmdSend ",
    "{plotAsPng('%plot%')}"
  ],
  [
    "TelegramBot_MTYPE=queryInline (%me%) ",
    "Hier der Plot."
  ]
]

Dann wird die zuordnung  wieder durch message vorgenommen.

Wenn ich mich nicht irre kann es jetzt schon durch commands gelöst werden (ungetestet):

...,
"commands": "msg @$recipient push TelegramBot_MTYPE=cmdSend {plotAsPng('%plot%')}",
"message": [
  "TelegramBot_MTYPE=queryInline (%me%) ",
  "Hier der Plot."
]


Bitte testen und Rückmeldung geben.
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

ToM_ToM

ZitatBitte testen und Rückmeldung geben.
Hi igami, wenn ich das so einbaue, bekomme ich in Telgram folgendes:

Unknown command push, try help

VG, Thomas


"Tag": {
"commands": "msg @$recipient push TelegramBot_MTYPE=cmdSend {plotAsPng('Plot_HM_GN_Solarstrom_Power')}",
"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"Tagesübersicht"
]
},
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

igami

Zitat von: ToM_ToM am 21 Januar 2018, 11:53:45
Hi igami, wenn ich das so einbaue, bekomme ich in Telgram folgendes:

Unknown command push, try help
Mein Fehler, es muss natürlich "msg push @$recipient ..." heißen.
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

ToM_ToM

Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

ToM_ToM

Hi igami,

ich das gleiche Problem wie mit den Plots nun auch wenn ich versuche, Fotos zu versenden. Bei mir funktionierts, bei meinem Bruder leider nicht.

Hast du da auch ein Lösung für mich?

Derzeitiger Code (der nur bei mir funktioniert)

{
"Security": {
"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"(Kamera 2) ",
"Bitte wählen"
],
"Kamera 2": {
"commands": [
"get IPCameraGarten2 image",
"sleep 2",
"set %TelegramBot% sendImage @$recipient /www/snapshots/IPCameraGarten2_snapshot.jpg"
],
"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"Kamera 2 Foto"
]
}
}
}


Hatte versucht den irgendwie so zu modifizieren, aber das scheint nicht richtig zu sein:

{
"Security": {
"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"(Kamera 2) ",
"Bitte wählen"
],
"Kamera 2": {
"commands": [
"get IPCameraGarten2 image",
"sleep 2",
"msg push @$recipient TelegramBot_MTYPE=image /www/snapshots/IPCameraGarten2_snapshot.jpg"
],
"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"Kamera 2 Foto"
]
}
}
}



VG, Thomas
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

igami

Du musst auf TelegramBot_MTYPE auf sendImage stellen ;)
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

ToM_ToM

Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

Keule_09

#358
Hallo,

hab mal eine Frage zum Meta_Dialog.
Dort sind ja bestimmte Befehle schon vorgegeben, die bis auf "zurück" bei mir auch funktionieren.
Der zurück-Button müsste ja nur eine Ebene höher springen oder ?
Muss für den zurück-Befehl noch was angegeben werden ?

Hab mir den Berechtigungsdialog von Igami importiert,
da ich dachte es liegt an meinem Dialog aber beim betätigen des zurück-Buttons dreht sich auch dort nur der Kreis aber es passiert nichts.

Gruß Marco


ToM_ToM

Hey igami,

hast du schon eine Idee für mich zum Thema "Grad-Zeichen im Temperaturdialog"? :)

VG, Thomas
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8