msgDialog: Instant Messaging als FHEM Interface

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

Vorheriges Thema - Nächstes Thema

subseven

Ja vermutlich, wie weiter oben geschrieben ist das Schalten der Thermostate ohne Angabe der Thermostatnamen.
Zuordnen tut er die Thermostate über den Raum.
D.h. die Logik funktioniert folgender Maßen:
Raum angeben-> Temperatur einstellen-> Filter fur angegebenen Raun auf den Typ HeatinThermostat(bei dir FHT) -> Befehl auf die gefilterten Geraete senden.

Wenn bei dir alle Thermostate in einem Raum sind funktioniert das so nicht.

ErzGabriel

#676
Ne, meine Thermostate hängen alle in einem eigenen Raum. Küche, Wohnzimmer, Schlafzimmer, Büro.
Ich habe in FHEM die Räume angelegt, wo die Thermostate drin stehen, ergo verstehe ich das jetzt so, das ich den Raum am Anfang angeben muss und nicht die Heizung.
Probiere ich direkt mal aus.

Edit: Setzte ich bei der gemessenen Temperatur nur den Namen vom Raum ein, kommt keine Temperaturmessung an.

ErzGabriel

Jetzt ist der Groschen gefallen.
Da der Dialog mit Raumnamen arbeitet und ich keine Raumnamen in diesem Sinne habe, weil ich nur den Regler ansprechen kann und nicht das Thermostat, deswegen funzt das bei mir nicht.
Zumindest verstehe ich das jetzt so, weil Ahnung habe ich davon nicht. Telegram klappt bei mir nur, durch copy & paste, Dialoge selbst schreiben kann ich leider nicht, kriege es auch irgendwie nicht hin, es zu lernen.

subseven

#678
Ich hab dir das mal quick and dirty angepasst.
Mit dem Ergebnis sollte es funktinoineren. Es ist damit aber nicht mehr möglich mehrere Thermostate gleichzeitig zu schalten und im Menü sieht es auch nicht mehr so schick aus.

defmod heizungs_Dialog msgDialog {\
"Heizung": {\
"match": "Raumtemperaturen",\
"message": [\
"(WONHNZ|BUERO) (KUECHE|BED) ",\
"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": "(WOHNZ|BUERO|KUECHE|BED)",\
"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 HZ_$room 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 HZ_$room 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


Edit:
Ich habe jetzt aber noch immer nicht verstanden wir deine Konfig nun aussieht. Deine Angabe wiedersprechen sich zum Teil.
Der Dialog "geht" in einem Raum und schaltet in diesem Raum die Thermostate (oder was auch immer man über den Filter schalten möchte).
Das heißt wenn du einen Raum "Wohnzimmer" hast und das Thermostat HZ_WOHNZ heißt. Dann sollte der Dialog in der ursprünglichen Form funktionieren. Es muss dann nur der "TYPE" und der Befehle "desired-temp" angepasst werden.
Wenn du einen Raum "Heizung" hast und darin die Thermostate HZ_WOHNZ usw. sind dann ist der Dialog nicht optimal dafür geeignet. Aber mit meiner Anpassung funktionert es, wenn auch optisch nicht mehr so schön.

ErzGabriel

Jo, funzt zum Teil. Küche kann ich schalten, Büro nicht. Da haut er mit in einen Dummy, den ich für den Ventilator habe einen neuen State rein
FILTER=FHT desired-temp 21

Komischerweise habe ich so einen Dummy auch für die Küche. Da muss ich mal schauen, wo in meinem Dummy der Fehler liegt, weil da gehe ich von aus, das der Fehler im Dummy liegt, wenn es in einem Raum klappt und in dem anderen nicht.

Danke Dir für deine Bemühung.

GammaTwin

Auch von mir ein großes Lob für dieses Modul!

Ich wollte in "commands" eine Fallentscheidung einbauen. Dabei hänge an der Pipe |.

Ich konnte das Problem schon so weit eingrenzen: Unter "commands":
Funktioniort:
"set $SELF say @$recipient Haustür|Ziffer"

Funktioniert nicht:
"{return('set $SELF say @$recipient Haustür|Ziffer')}"

Ein IF funktioniert allerdings:
"IF (a=b) (set $SELF say @$recipient Haustür|Ziffer)"

Ziel soll ein fallbezogener Absprung sein, z.B.
"{return('set $SELF say @$recipient Haustür|Ziffer') if(a=b)}"

Da ich gern "return" anstatt "IF" verwenden würde, wäre ich an einer Lösung interessiert.

gestein

Hallo,

Bei mir funktioniert leider das ,,zurück" nicht.
Ich muss immer ,,beenden" und dann wieder einsteigen.

Eigentlich habe ich einen eigenen Thread dazu aufgemacht. https://forum.fhem.de/index.php/topic,106003.0.html

Oder ist es besser die Fragen hier zu posten?
Kann ich mir irgendwie die History anzeigen lassen?
Die scheint bei mir leer zu sein.
Ich dachte eigentlich, dass ich mit dem fhem-Befehl
{ReadingsVal('meta_Dialog', 'rr_Gerhard_history', '')}
Eine Ausgabe bekomme.

Vielen Dank im Voraus
Lg, Gerhard

igami

Zitat von: gestein am 02 Januar 2020, 18:28:03
Eigentlich habe ich einen eigenen Thread dazu aufgemacht. https://forum.fhem.de/index.php/topic,106003.0.html
Antwort folgt. Über diesen Thread werde ich informiert, wenn es Neuigkeiten gibt :)
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

Wasserwerk33

#683
Hallo Leute

Habe mich nun durch alle 46 Seiten hier durchgelesen. Aber ich bekomme es nicht ans laufen.
Ich bin auch nicht sehr gut in Fhem.
Ich verzweifel langsam.  :-\
Könntet ihr mir sagen was ich falsch mache oder wo noch was gemacht werden muss?
List Roomate:
Internals:
   AUTOGONE   1579763007
   CFGFN     
   DEF        rgr_Residents,rgr_Parents # Elternteil
   DURATIONTIMER 1579634007.37076
   FUUID      5e27439a-f33f-faf7-9e9d-5d923f39b0e757d9
   FVERSION   20_ROOMMATE.pm:0.195330/2019-06-02
   NAME       rr_Stefan
   NOTIFYDEV  global,
   NR         23733
   NTFY_ORDER 50-rr_Stefan
   READY      1
   RESIDENTGROUPS rgr_Residents,rgr_Parents
   STATE      abwesend
   SUBTYPE    adult
   TYPE       ROOMMATE
   READINGS:
     2020-01-21 20:12:27   durTimerAbsence 00:09:00
     2020-01-21 20:12:27   durTimerAbsence_cr 9
     2020-01-21 19:32:09   durTimerPresence 00:00:00
     2020-01-21 19:32:09   durTimerPresence_cr 0
     2020-01-21 19:32:09   durTimerSleep   00:00:00
     2020-01-21 19:32:09   durTimerSleep_cr 0
     2020-01-21 20:05:49   fhemMsgRcvPush  /Stefan
     2020-01-21 20:05:49   fhemMsgRcvPushGw ZuhauseTelegram
     2020-01-21 20:03:27   lastDeparture   2020-01-21 20:03:27
     2020-01-21 20:03:27   lastLocation    undefined
     2020-01-21 20:03:27   lastState       initialized
     2020-01-21 20:03:27   location        underway
     2020-01-21 20:03:27   presence        absent
     2020-01-21 20:03:27   state           absent
     2020-01-21 20:03:27   wayhome         0
   TIMER:
     rr_Stefan_AutoGone:
       HASH       rr_Stefan
       MODIFIER   AutoGone
       NAME       rr_Stefan_AutoGone
     rr_Stefan_DurationTimer:
       HASH       rr_Stefan
       MODIFIER   DurationTimer
       NAME       rr_Stefan_DurationTimer
Attributes:
   alias      Stefan
   devStateIcon .*zuhause:user_available:absent .*anwesend:user_available:absent .*abwesend:user_away:home .*verreist:user_ext_away:home .*bettfertig:scene_toilet:asleep .*schlaeft:scene_sleeping:awoken .*schläft:scene_sleeping:awoken .*aufgestanden:scene_sleeping_alternat:home .*:user_unknown:home
   eventMap   home:zuhause absent:abwesend gone:verreist gotosleep:bettfertig asleep:schläft awoken:aufgestanden
   group      Zuhause
   icon       people_sensor
   msgContactPush ZuhauseTelegram:@6807xxxxx
   room       Anwesend
   rr_realname group
   sortby     1
   webCmd     state
   widgetOverride state:zuhause,bettfertig,schläft,aufgestanden,abwesend,verreist


List msg Config:
Internals:
   CFGFN     
   DEF       
   FUUID      5e26c487-f33f-faf7-e827-a7069900e4b0e781
   FVERSION   75_msgConfig.pm:0.189950/2019-03-22
   NAME       myMsgConfig
   NOTIFYDEV  TYPE=(Jabber|TelegramBot|yowsup)
   NR         21597
   NTFY_ORDER 50-myMsgConfig
   STATE      initialized
   TYPE       msgConfig
   READINGS:
     2020-01-21 10:29:43   fhemMsgState    initialized
Attributes:
   comment    FHEM Global Configuration for command 'msg'
   group      Global
   msgContactPush ZuhauseTelegram
   msgDialog_evalSpecials me=Dein Zuhause
TelegramBot=ZuhauseTelegram
   msgType    text
   room       Nachrichten
   stateFormat fhemMsgState
   userattr   msgDialog_evalSpecials:textField-long msgDialog_msgCommand:textField
   verbose    3


List MSG Dialog
Internals:
   CFGFN     
   DEF        {
  "test": {
    "match": "\/?(start|%me%)",
    "commands": "deletereading TYPE=msgDialog $recipient_history",
    "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:"
    ]
  },
  "zurück": {
    "commands": "set $recipient_history=.+|.+ say @$recipient {(ReadingsVal($DEV, '$recipient_history', '') =~ m/(.+)\\|.+$/;; return $2 ? $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      5e26cd9b-f33f-faf7-442f-001fce1f1eaf9de9
   MSGCOMMAND msg push \@$recipients $message
   NAME       Temperatur_Dialog
   NOTIFYDEV  TYPE=(ROOMMATE|GUEST)
   NR         21781
   NTFY_ORDER 50-Temperatur_Dialog
   STATE      Initialized
   TRIGGER    zurück,beenden,test,abbrechen
   TYPE       msgDialog
   READINGS:
     2020-01-21 20:00:05   state           Initialized
Attributes:
   room       Nachrichten


Ich habe irgendeinen Dialog eingefügt da ich noch keinen geschrieben habe.
Könnte mir jemand helfen?? ich bin echt am verzweifeln.
Danke schon mal

Wasserwerk33

so bin nun soweit das ich test bekomme und auch in Fhem test steht wenn ich anfrage. Aber wieso bekomme ich keine Rückantwort?

binford6000

Zitat von: Wasserwerk33 am 21 Januar 2020, 20:37:19
so bin nun soweit das ich test bekomme und auch in Fhem test steht wenn ich anfrage. Aber wieso bekomme ich keine Rückantwort?

Du solltest den metaDialog nicht ändern. Er dient lediglich dazu, alle Dialoge <als Dialog> anzuzeigen. Nimm doch einfach einen
der vielen Dialoge welche hier als RAW gepostet wurden und probier sie aus. Damit bekommst du hoffentlich ein Verständnis wie
msgDialog funktioniert.

VG Sebastian

Wasserwerk33

Es läuft.
Ja habe ein Raw genommen und seit dem läuft es.

Danke

Parador

#687
Hallo Zusammen,

gibt es die Möglichkeit einfach einen Befehl in einem Dialog zu wiederholen?
mit "TelegramBot_MTYPE=queryInline (%me%) "
starte ich ja immer wieder von Anfang an...
mit "TelegramBot_MTYPE=queryInline (Befehl) ",
komme ich aber nicht weiter, weil der Dialog ja erst wieder bei Eingabe von %me% wieder reagiert...
mit "TelegramBot_MTYPE=queryInline (Dialogname) ",
starte ich den Dialog neu, aber den Befahl darin kann ich nicht auslösen

Vielen Dank schon mal im Voraus!

Keule_09

#688
Hallo,

ich versuche mich gerade daran links in Klarnamen zu versenden aber leider scheitere ich daran.
wie muss den der link aussehen damit ich ihn in Klarnamen verschicken kann:
Hier mein testdialog:

defmod 22.testdialog msgDialog {"22.Testdialog":{\
"message": [\
"(abbrechen|zurück)  ",\
"<i>Hier kannst du den Rolladen Wohnbereich bedienen:</i> ",\
"<b>Hier kannst du den Rolladen Wohnbereich bedienen:</b> "\
]\
}\
}
attr 22.testdialog DbLogExclude .*
attr 22.testdialog allowed 1,rr_Marco
attr 22.testdialog room Automation->Telegram


ich habe versucht den Beispielcode auf der Telegramhomepage einzufügen:
<a href="http://www.example.com/">inline URL</a>

leider bekomm ich dort dann nur eine Fehlermeldung
kann mir jemand weiterhelfen?

//Edit 21.03 :
Ist es überhaupt möglich den ParseMode im Dialog direkt zu übergeben wie in Telegram:
msg Markdown [This is an example](https://example.com)

brown78

Hallo zusammen,

ich versuche mich gerade erstmal den metaDialog angezeigt zu bekommen. Klappt leider nicht. Der TelegrammBot funktioniert, das msgConfig habe ich auch angelegt und den metaDialog. Das Keyword ist angelegt und soweit nach Vorlage eingerichtet. Derzeit habe ich keinen Roommate, brauche ich den zwingend?