msgDialog: Instant Messaging als FHEM Interface

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

Vorheriges Thema - Nächstes Thema

igami

Aus der TelegramBot commandref:
Zitat
queryInline [ @<peer1> ... @<peerN> ] (<keyrow1>) ... (<keyrowN>) <text>
Sends the given message to the recipient(s) with an inline keyboard allowing direct response
IMPORTANT: The response coming from the keyboard will be provided in readings and a corresponding answer command with the query id is required, sicne the client is frozen otherwise waiting for the response from the bot! REMARK: inline queries are only accepted from contacts/peers that are authorized (i.e. as for executing commands, see cmdKeyword and cmdRestrictedPeer !)
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

Darkmozart

Hm...
den Fehler hab ich dann hier gefunden:
ZitatcmdRestrictedPeer <peer(s)>
Restrict the execution of commands only to messages sent from the given peername or multiple peernames (specified in the form of contact id, username or full name, multiple peers to be separated by a space). This applies to the internal machanisms for commands in the TelegramBot-Module (favorites, cmdKeyword etc) not for external methods to react on changes of readings. A message with the cmd and sender is sent to the default peer in case of another peer trying to sent messages
NOTE: It is recommended to use only peer ids for this restriction to reduce spoofing risk!
Notiz an mich selbst: erst lesen und dann Attribute bearbeiten....
Dann bastel ich mal weiter.
RasPi3 mit aktuellem FHEM
CUL 433MHZ
Ne Menge Somfy Rollläden
Aktuelles Projekt: Sensoren (MySensors) für Helligkeit und Temperatur zur Rollladensteuerung
Diverse Spielereien...

igami

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

igami

Hier noch ein Dialog zum setzen der Berechtigungen für die Dialoge:

defmod Berechtigungen_Dialog msgDialog {\
  "Berechtigungen": {\
    "message": [\
      "{'('.join(') (', devspec2array('TYPE=(ROOMMATE|GUEST):FILTER=msgContactPush=.+')).') '}",\
      "(everyone) ",\
      "(beenden) ",\
      "Für welchen Benutzer willst du die Berechtigungen festlegen?"\
    ],\
    "Benutzer": {\
      "match": "(%allowed%|everyone)",\
      "commands": "setreading $SELF $recipient_user $message",\
      "message": [\
        "{my @dialogs = sort{lc($a) cmp lc($b)} devspec2array('TYPE=msgDialog:FILTER=NAME!=$SELF');; $_ = (AttrVal($_, 'allowed', '') =~ m/$message/ ? '🔵 ' : AttrVal($_, 'allowed', '') =~ m/everyone/ ? '🔷 ' : '⚫️ ').$_ foreach(@dialogs);; return('('.join(') (', @dialogs).') ')}",\
        "(zurück) ",\
        "(abbrechen) ",\
        "Zum Ändern der Berechtigung bitte den entsprechenden Dialog auswählen.",\
        "🔵 Benutzer ist explizit berechtigt",\
        "🔷 Benutzer ist implizit berechtigt",\
        "⚫️ Benutzer ist nicht berechtigt"\
      ],\
      "Berechtigung": {\
        "match": "(🔵|🔷|⚫️) %dialogs%",\
        "commands": [\
          "{my ($state, $dialog) = ('$message' =~ m/(🔵|🔷|⚫️) %dialogs%/g);; my $user = ReadingsVal('$SELF', '$recipient_user', '');; my %allowed = map{$_, 1} (split(',', AttrVal($dialog, 'allowed', '')));; if($state eq '🔵'){delete $allowed{$user}}else{$allowed{$user} = 1};; fhem('attr '.$dialog.' allowed '.join(',', keys %allowed));;}",\
          "set $SELF say @$recipient Berechtigungen|[$SELF:$recipient_user]"\
        ],\
        "not_the_end": {}\
      }\
    }\
  }\
}

attr Berechtigungen_Dialog evalSpecials allowed={'('.join('|', devspec2array('TYPE=(ROOMMATE|GUEST):FILTER=msgContactPush=.+')).')'}\
dialogs={'('.join('|', devspec2array('TYPE=msgDialog')).')'}
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

ZitatHier noch ein Dialog zum setzen der Berechtigungen für die Dialoge:
Sehr schön! Definitiv noch ein weiterer Punkt fürs Wiki  ;)
VG Sebastian

igami

Mich würde doch mal interessieren was ihr so alles für Dialoge habt.
Ich mache den Anfang und habe folgende Dialoge

list TYPE=msgDialog

Aufgaben_Dialog
Beleuchtung_Dialog
Berechtigungen_Dialog
Bewohnerstatus_Dialog
CardboardCrack_Dialog
DasLebenIstKeinPonyhof_Dialog
Einkaufsliste_Dialog
Fenster_Dialog
Frostwarnung_Dialog
Gaeste_WLAN_Dialog
Gaia_Dialog
Grillthermometer_Dialog
INITIALIZED_Dialog
IP_Dialog
Michael_Lichtwecker_Dialog
SandraUndWoo_Dialog
Schisslaweng_Dialog
Schlafzimmer_Lichtwecker_Dialog
Tankstelle_Dialog
Theke_Dialog
Unwetterzentrale_Dialog
Waescheleine_Dialog
Waschmaschine_Dialog
Wohnzimmer_Lichtwecker_Dialog
Zaehler_Dialog
broadcast
meta_Dialog

Katerogisieren lassen sich diese wie folgt:

1. Benachrichtigungen
- Aufgaben_Dialog
- Bewohnerstatus_Dialog
- CardboardCrack_Dialog
- DasLebenIstKeinPonyhof_Dialog
- Fenster_Dialog
- Frostwarnung_Dialog
- Gaia_Dialog
- INITIALIZED_Dialog
- IP_Dialog
- SandraUndWoo_Dialog
- Schisslaweng_Dialog
- Tankstelle_Dialog
- Unwetterzentrale_Dialog
- Waescheleine_Dialog

2. Schalten von Geräten
- Beleuchtung_Dialog
- Gaeste_WLAN_Dialog

3. Konfiguration des Moduls
- Berechtigungen_Dialog
- broadcast
- meta_Dialog

4. Einkaufsliste
- Einkaufsliste_Dialog

5. Konfiguration von Automatiken
- Grillthermometer_Dialog
- Michael_Lichtwecker_Dialog
- Schlafzimmer_Lichtwecker_Dialog
- Theke_Dialog
- Waschmaschine_Dialog
- Wohnzimmer_Lichtwecker_Dialog

6. Erfassen von Daten
- Zaehler_Dialog

Bevor die Frage kommt: broadcast ist einfach zur Beachrichtigung aller Benutzer und wird nur mit "set broadcast say ..." verwendet.

defmod broadcast msgDialog {\
  "broadcast": {\
    "setOnly": true,\
    "match": ".+",\
    "commands": "deletereading %TelegramBot% .+_sentMsgId",\
    "message": [\
      "TelegramBot_MTYPE=queryInline (%me%) ",\
      "$message"\
    ]\
  }\
}

attr broadcast allowed everyone
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

kumue

Da ich bei WhatsApp geblockt wurde, stieg ich nun auf Telegram um...
Habe soweit alles wie im msgDialog-Wiki beschireben eingerichtet.
Leider kommt kein Dialog zustande, der Bot antwortet nicht.

Im Log finde ich diese FM:
2017.11.16 05:23:44 4: msg: ERROR RCV myTelegramBot xxxxxx: Missing reference in msgContact attribute of any device

Weiss jemand Rat ?

igami

Dein ROOMMATE ist nicht richtig konfiguriert
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

Hallo Zusammen, dann lege ich mal nach: ;)

list TYPE=msgDialog

Abwesenheit_Dialog
Beleuchtung_Dialog
Berechtigungen_Dialog
Fahrzeit_Dialog
Gast_Dialog
Haus_Automatisierung_Dialog
Kamera_Dialog
Status_dialog
Systemverwaltung_Dialog
Tagesschau_Dialog
meta_Dialog


Diese können dann in folgende Kategorien eingeteilt werden:

1. Benachrichtigungen
- Haus_Automatisierung_Dialog
- Kamera_Dialog

2. Statusabfragen
- Status_dialog
- Systemverwaltung_Dialog (FHEM-Updates, -Infos, -letzte 10 Logeinträge)
- Fahrzeit_Dialog

3. Schalten von Geräten
- Beleuchtung_Dialog (schalten + dimmen)
- Tagesschau_Dialog (Audioausgabe oder Link zum Video)
- Abwesenheit_Dialog
- Gast_Dialog

4. Konfiguration des Moduls
- Berechtigungen_Dialog
- meta_Dialog

VG Sebastian

kumue

Zitat von: igami am 16 November 2017, 08:59:19
Dein ROOMMATE ist nicht richtig konfiguriert

Danke für den Tip.
ROOMMATE hatte ich jetzt erst im Zuge von msgDialog (grob) installiert, einen Bewohner angelegt und nicht weiter konfiguriert.
Denke, das Attr msgContactPush muss korrekt gesetzt werden...
Ich schau mal, ob ich da weiter komme, ansonsten melde ich mich nochmal.  ;)

kumue

Geht jetzt,...lag am falsch konfiguriertem msgContactPush Attribute beim ROOMMATE...

Eine Frage noch:
Gehe ich richtig in der Annahme, daß zwingend RESIDENT / ROOMMATE angelegt sein müssen ?
Weil, wenn ich msgContactPush im msgConfig anlege, kommt bei nicht vorhandenem ROOMMATE vom Bot die Meldung:
Unbekannter Kontaktversuch über myTelegramBot von <meine Peer-ID>

igami

Ja, die ROOMMATE sind zwingend erforderlich. Bin aber gerne bereit das zu ändern, wenn du eine bessere Idee zum festlegen der Berechtigungen hast.
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

kumue

Nö, alles gut. Danke für die Klarstellung.

schnitzelbrain

Hallo,

ich hab Bemerkungen zur WIKI.

Der Metadialog Vorschlag hat zwei Fehler:

{
  "%me%": {
    "match": "\/?(start|%me%)",
    "commands": [
  "deletereading TYPE=msgDialog $recipient_history",
  "deletereading %TelegramBot% $recipient_sentMsgId"
    ],
    "message": [
      "{return('(' . join(') (', sort(split('\n', fhem('get TYPE=msgDialog:FILTER=NAME!=$SELF:FILTER=allowed=.*($recipient|everyone).* trigger'))), 'abbrechen') . ') ')}",
      "Ich kann folgendes für dich tun: "

da fehlt das zweite Command 'beenden'

{
  "%me%": {
    "match": "\/?(start|%me%)",
    "commands": [
  "deletereading TYPE=msgDialog $recipient_history",
  "deletereading %TelegramBot% $recipient_sentMsgId"
    ],
    "message": [
      "{return('(' . join(') (', sort(split('\n', fhem('get TYPE=msgDialog:FILTER=NAME!=$SELF:FILTER=allowed=.*($recipient|everyone).* trigger'))), 'abbrechen', 'beenden') . ') ')}",
      "Ich kann folgendes für dich tun: "


In dem nächsten Teil fehlt eine Klammer. wenn man im Edit DEF Feld Highlighting an hat wird die geschweifte Klammer (Ende Command zeile) fehlerhaft angezeigt

Falsch
"zurück": {\
    "commands": "set $recipient_history=.+ say @$recipient {(ReadingsVal($DEV, '$recipient_history', '') =~ m/(.+)\\|.+$/;;;; return($2 ? $2 : $1;;;;)}"
},


Richtig (denk ich mal)
"zurück": {
    "commands": "set $recipient_history=.+ say @$recipient {(ReadingsVal($DEV, '$recipient_history', '')) =~ m/(.+)\\|.+$/;;;; return($2 ? $2 : $1;;;;)}"
  },


Dann noch eine Frage
"zurück": {\
    "commands": "set $recipient_history=.+ say @$recipient {(ReadingsVal($DEV, '$recipient_history', '') =~ m/(.+)\\|.+$/;;;; return($2 ? $2 : $1;;;;)}"\
  },\


was macht eigentlich dieser Teil.
das "zurück" wird doch nirgends verarbeitet, oder ?

Grüße



igami

Zitat von: schnitzelbrain am 18 November 2017, 20:28:38
Der Metadialog Vorschlag hat zwei Fehler:
[...]
da fehlt das zweite Command 'beenden'
abbrechen und beenden machen das gleiche, nur die Nachricht ist eine andere.
Ich nutze abbrechen da, wenn ich den Dialog nicht komplett durchgehe und beenden, wenn ich eine Schleife habe und diese Verlassen will (z.B. Einkaufsliste). Daher bin ich der Meinung, dass nur "abbrechen" dort richtig ist.

Zitat von: schnitzelbrain am 18 November 2017, 20:28:38
Falsch
"zurück": {\
    "commands": "set $recipient_history=.+ say @$recipient {(ReadingsVal($DEV, '$recipient_history', '') =~ m/(.+)\\|.+$/;;;; return($2 ? $2 : $1;;;;)}"
},

Zitat
In der Tat ein Fehler, aber ein anderer als du denkst. Richtig ist

  "zurück": {\
    "commands": "set $recipient_history=.+ say @$recipient {(ReadingsVal($DEV, '$recipient_history', '') =~ m/((.+)\\|.+$)/;; return($2 ? $2 : $1);;)}"\
  },\


Zitat von: schnitzelbrain am 18 November 2017, 20:28:38
was macht eigentlich dieser Teil.
das "zurück" wird doch nirgends verarbeitet, oder ?
Kann benutzt werden um eine Stufe in dem Dialog zurück zu springen. Im Wiki taucht es meine ich nicht auf, aber z.B. in dem Berechtigungen 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