Link zum Wiki Artikel: https://wiki.fhem.de/wiki/MsgDialog
Bei Problemen bitte den Dialog als Raw definition posten (siehe https://wiki.fhem.de/wiki/Import_von_Code_Snippets)
Originalbeitrag:
Hi zusammen,
hier möchte ich euch mein neues Modul msgDialog vorstellen, welches es erlaubt chat Dialoge zu definieren und für jeden Dialog verschiedene Benutzer zu berechtigen.
Selbst nutze ich nur Telegram in FHEM, aber das Modul sollte auch mit Jabber und Whatsapp funktionieren.
Momentan befinde ich mich noch in der Testphase, möchte euch aber doch schon mal ein Video von der Anwendung mit Telegram präsentieren.
https://youtu.be/oRDy2918mVI
Ich hoffe es gefällt euch.
Eine erste Version und Beschreibung folgt nächste Woche.
Grüße,
igami
Das Video ist nicht verfügbar
Zitat von: tiroso am 30 September 2017, 15:27:15
Das Video ist nicht verfügbar
Sollte nun gehen, stand noch auf Privat :-[
ZitatSollte nun gehen, stand noch auf Privat :-[
Jepp geht. Sieht bombe aus!
ZitatIch hoffe es gefällt euch.
Eine erste Version und Beschreibung folgt nächste Woche.
Ich bin schon sehr gespannt! An der Stelle schon mal vielen Dank im Voraus deine Mühe!
VG Sebastian
Hallo igami,
ich habe mir etwas Ähnliches selbst programmiert. Bin aber mal gespannt wenn das von dir fertig ist. Vielleicht ist es damit einfacher und ich kann meine Eigenentwicklung ersetzen. :)
VG, Thomas
Wow, das sieht echt Hammer aus!
Mal schauen, was sich da so Implementieren lässt.
VOll genial. Freue mich schon darauf.
Sieht interessant aus, bin auf die erste Version gespannt...
Grüße Marcel
Tapatalk iPhone, daher kurz gehalten.
Echt klasse!
Freue mich ebenfalls auf die ersten Versionen. [emoji4]
Mit dem msgDialog Modul können Dialoge definiert werden, die dann per Instant Messaging durchgegangen werden.
Die Idee zu dem Modul kam mir dadurch, dass ich meine Waschmaschine über eine Funksteckdose schalte. Ich bereite sie meist morgens vor der Arbeit vor und lege dann eine Uhrzeit fest, wann Sie fertig sein soll. Damit ich dabei aber nicht immer auf einen Browser angewiesen bin habe ich mir eine Lösung über Telegram auf Basis von DOIF gebastelt. Diese hat zwar funktioniert, war aber nicht sehr Intuitiv.
Wichtig dabei war mir von Anfang an, dass ich die einzelnen Dialoge für verschiedene Benutzer freigeben kann.
Das msg Dialog Modul baut auf dem msg Befehl auf. Der msg Befehl kann mit ROOMMATE und GUEST devices genutzt werden. Für jeden Bewohner wird die Kontaktart festgelegt. Leider unterstützt der msg Befehl nur ausgehende Nachrichten. Daher habe ich mir für eingehnde Nachrichten ein notify erstellt, welches für Telegram, Jabber und Whatsapp eingehende Nachrichten als readings in die entsprechenden ROOMMATE/GUEST devices schreibt.
Raw definition:
defmod msgPushReceived notify .*(msgText|queryData|(OTR)?LastMessage|message):(\n|.)* {\
my ($recipient, $received);;\
my $TYPE = InternalVal($NAME, "TYPE", "");;\
\
if($TYPE eq "TelegramBot" && $EVENT =~ m/^msgText/){\
$recipient = ReadingsVal($NAME, "msgPeerId", undef);;\
$received = ReadingsVal($NAME, "msgText", undef);;\
}\
elsif($TYPE eq "TelegramBot" && $EVENT =~ m/^queryData/){\
$recipient = ReadingsVal($NAME, "queryPeerId", undef);;\
$received = ReadingsVal($NAME, "queryData", undef);;\
}\
elsif($TYPE eq "Jabber" && $EVENT =~ m/^((OTR)?Last)Message/){\
$received = ReadingsVal($NAME, $1."Message", undef);;\
($recipient) = (ReadingsVal($NAME, $1."SenderJID", undef) =~ m/[^\/]+/g);;\
}\
elsif($TYPE eq "yowsup" && $EVENT =~ m/^message/){\
$recipient = $NAME;;\
$NAME = $modules{yowsup}{defptr}{yowsup}->{NAME};;\
$received = ReadingsVal($NAME, "message", undef);;\
}\
\
return unless($recipient && $received ne "");;\
\
my @contacts = devspec2array("TYPE=(ROOMMATE|GUEST):FILTER=msgContactPush=.*$recipient.*");;\
\
if(@contacts){\
foreach (@contacts){\
my $dev_hash = $defs{$_};;\
\
readingsBeginUpdate($dev_hash);;\
readingsBulkUpdate($dev_hash, "fhemMsgPushReceived", $received);;\
readingsBulkUpdate($dev_hash, "fhemMsgPushReceivedContact", $NAME);;\
readingsEndUpdate($dev_hash, 1);;\
}\
}\
else{\
fhem("msg push Unbekannter Kontaktversuch über $NAME von $recipient:\n$received");;\
}\
}
attr msgPushReceived devStateIcon {ReadingsVal($name, "state", "inactive") eq "active" ? ".*:ios-on-blue:inactive" : ".*:ios-off:active"}
attr msgPushReceived icon audio_mic
attr msgPushReceived room msg
Dadurch bekommen wir nun die Readings "fhemMsgPushReceived", mit dem Inhalt der Nachricht, und "fhemMsgPushReceivedContact" mit dem device aus dem die Nachricht stammt, wobei letzteres bisher noch keine Rolle spielt. Vielleicht kann man das mal weiterentwickeln, dass man eben pro Benutzer mehrere Schnittstellen definieren kann.
Wer den msg Befehl bereits verwendet hat schon ein device vom Typ msgConfig. Alle anderen müssen dies erst noch anlegen.
Meins sieht so aus
Raw definition:
defmod myMsgConfig msgConfig
attr myMsgConfig userattr evalSpecials:textField-long
attr myMsgConfig evalSpecials me=kanaan\
TelegramBot=TelegramBot
attr myMsgConfig msgContactPush TelegramBot
attr myMsgConfig room msg
Dann gibt es noch die verschiedenen ROOMMATEs, bei dem das Attribut msgContactPush gesetzt werden muss.
Für Telegram sieht das dabei so aus:
attr <ROOMMATE|GUEST> msgContactPush <TelegramBot>:@<PeerID>
Bei Telegram gibt es noch eine weitere Besonderheit. Ich musste das Attribut utf8Special auf 1 setzen, damit ich Nachrichten mit Umlauten gesendet bekomme.
Damit sind alle Vorbereitungen getroffen und wir können den ersten Dialog schreiben.
define Waschmaschine_Dialog msgDialog {}
So bekommen wir einen leeren Dialog und können ihn bequem über das DEF Feld bearbeiten. Die Dialoge sind als JSON aufgebaut und es gibt verschiedene besondere keys.
message: definiert die Antwort, die von dem Bot kommt. Kann entweder eine Einzeilige Nachricht sein, oder ein Array bei dem die Werte dann durch ein \n verbunden werden.
commands: definiert die Befehle die ausgeführt werden, wenn dieser Status des Dialog erreicht ist. Die Befehle werden vor der Antwort ausgeführt. Kann auch entweder ein Befehl sein, oder ein Array von Befehlen. Die Befehle müssen dabei genau so eingegeben werden, wie in der Kommandozeile von FHEM.
match: Hier kann eine REGEX angegeben werden auf die die eingehende Nachricht geprüft wird. Wenn diese zutrifft wird der Dialog an dieser Stelle fortgeführt
setOnly: kann true oder false sein. Bei true wird der Bot nicht auf die Nachricht antworten, auch wenn sie passt. Das ist dazu gedacht um eine Benachrichtigung vom Bot aus zu senden.
Dann gibt es noch das Attribut evalSpecials, was einigen vielleicht auch schon als userattr beim msgConfig device aufgefallen ist. Hier können Synonyme definiert werden. In allen Dialogen wird dann %me% durch "kannan" ersetzt und %TelegramBot% durch "TelegramBot", der name meines TelegramBots. Wenn ich in einem Dialog dann auch noch mal "me" definiere gilt dies nur für diesen Dialog.
Weiterhin gibt es noch einige Variablen:
$SELF: Der Name des Dialog
$recipient: Kommagetrennte Liste aller angesprochenen Empfänger. Im Dialog selbst ist das immer nur ein Empfänger
$message: Inhalt der empfangenen Nachricht
Nun aber weiter zum Dialog. In die DEF schreibe ich nun folgenden:
{ "Waschmaschine": {
"message": [
"{return('(Zeitprogramm stoppen) ') if(ReadingsVal('%controlUnit%', 'controlMode', '') eq 'auto')}",
"{return('(programmieren) (einschalten) ') if(ReadingsVal('%actor%', 'state', '') ne 'on')}",
"(Verlaufsdiagramm) ",
"(abbrechen) ",
"{return('Waschmaschine: ' . (ReadingsVal('%actor%', 'state', '') eq 'on' ? 'eingeschaltet' : 'ausgeschaltet'))}",
"{return('Modus: ' . (ReadingsVal('%controlUnit%', 'controlMode', '') eq 'auto' ? 'Automatik' : 'Manuell (' . ReadingsVal('%controlUnit%', 'time', '') . ')'))}"
],
"Zeitprogramm stoppen": {
"commands": "set %controlUnit% controlMode manual",
"message": [
"(%me%) ",
"Das Zeitprogramm wurde gestoppt."
]
},
"programmieren": {
"message": [
"(bestätigen|abbrechen) ",
"(00:00:00_00|00:30:00_30|01:00:01_00|01:30:01_30|02:00:02_00|02:30:02_30) ",
"(03:00:03_00|03:30:03_30|04:00:04_00|04:30:04_30|05:00:05_00|05:30:05_30) ",
"(06:00:06_00|06:30:06_30|07:00:07_00|07:30:07_30|08:00:08_00|08:30:08_30) ",
"(09:00:09_00|09:30:09_30|10:00:10_00|10:30:10_30|11:00:11_00|11:30:11_30) ",
"(12:00:12_00|12:30:12_30|13:00:13_00|13:30:13_30|14:00:14_00|14:30:14_30) ",
"(15:00:15_00|15:30:15_30|16:00:16_00|16:30:16_30|17:00:17_00|17:30:17_30) ",
"(18:00:18_00|18:30:18_30|19:00:19_00|19:30:19_30|20:00:20_00|20:30:20_30) ",
"(21:00:21_00|21:30:21_30|22:00:22_00|22:30:22_30|23:00:23_00|23:30:23_30) ",
"Wann soll die Wäsche fertig sein?",
"Bitte Uhrzeit in HH:MM angeben.",
"Aktuell ist [%controlUnit%:time] Uhr eingestellt."
],
"Uhrzeit": {
"match": "([0-1][0-9]|2[0-3])[:_][0-5][0-9]",
"commands": [
"{my $time = '$message';; $time =~ s/_/:/;; fhem(\"set %controlUnit% time $time\");;}",
"set $SELF say @$recipient Waschmaschine|programmieren|bestätigen"
]
},
"bestätigen": {
"commands": "set %controlUnit% controlMode auto",
"message": [
"(%me%) ",
"Das Zeitprogramm wurde eingestellt.",
"Die Wäsche wird voraussichtlich um [%controlUnit%:time] Uhr fertig sein.",
"Bitte die Waschmaschine vorbereiten."
]
}
},
"einschalten": {
"commands": [
"set %controlUnit% controlMode manual",
"set %actor% on"
]
},
"Verlaufsdiagramm": {
"commands": "set %TelegramBot% cmdSend {plotAsPng('%plot%')}",
"message": [
"(%me%) ",
"Waschkeller: Waschmaschine"
]
}
},
"auto": {
"setOnly": true,
"commands": [
"set %actor% on",
"set %controlUnit% controlMode manual"
],
"message": [
"(%me%) ",
"Die Wachmaschine wurde automatisch eingeschaltet."
]
},
"manual": {
"setOnly": true,
"message": [
"(%me%) ",
"Die Wachmaschine wurde manuell eingeschaltet."
]
},
"done": {
"setOnly": true,
"commands": "set %actor% off",
"message": [
"(%me%) ",
"Die Wachmaschine ist fertig."
]
}
}
Wenn ich nun "Waschmaschine" an meinen Bot sende bekomme ich eine Nachricht abhängig von dem Status zurück.
Ich kann das "Zeitprogramm stoppen", wenn die Waschmaschine vorbereitet is, die Waschmaschine "programmieren" oder "einschalten", wenn sie nicht läuft, ein "Verlaufsdiagramm" anfordern oder den Dialog "abbrechen". Weiterhin bekomme ich noch den "Modus" und den "Status" der Waschmaschine angezeigt.
Lautet meine nächste Nachricht dann "programmieren" bekomme ich die Nachricht
Zitat
Wann soll die Wäsche fertig sein?
Bitte Uhrzeit in HH:MM angeben.
Aktuell ist [%controlUnit%:time] Uhr eingestellt.
Und ein Keyboard mit Uhrzeiten im halbstunden Takt, sowie "bestätigen" und "abbrechen". [%controlUnit%:time] wird natürlich durch das Reading time von meiner controlUnit ersetzt.
Nun kann ich eine beliebige Uhrzeit eingeben oder auf einen der Buttons drücken um dadurch eine Uhrzeit zu senden.
Hier greift dann "match" von dem nächsten Dialog-Schritt "Uhrzeit". Es wird geprüft ob ich eine valide Uhrzeit angegeben habe. Falls ja, werden die Befehle ausgeführt:
"{my $time = '$message';; $time =~ s/_/:/;; fhem(\"set %controlUnit% time $time\");;}"
ersetzt in meiner Nachricht das _ durch einen : und set meine controlUnit dann auf diesen Wert. Das muss ich machen, da ich inlineKeyboards verwende und : dort das Trennzeichen zwischen angezeigtem und gesendetem Text ist.
"set $SELF say @$recipient Waschmaschine|programmieren|bestätigen"
Nachdem ich die Uhrzeit festgelegt habe ist es genau so, als wenn ich die vorherige Uhrzeit bestätigt habe.
Es werden dann alle Befehle die dort angegeben sind ausgeführt und ich bekomme die angegebene Nachricht gesendet.
Intern passiert nun noch folgendes. Um den Verlauf eines Dialogs zu speichern wird pro Benutzer ein Readings <ROOMMATE|GUEST>_history angelegt.
Zuerst nimmt dieses den Wert "Waschmaschine" an. Danach den Wert "Waschmaschine|programmieren" und danach den Wert "", da der Dialog an dieser Stelle beendet ist.
Der Vollständigkeithalber noch mein DOIF welches dann die Waschmaschine schaltet:
Raw definition:
defmod Waschkeller_washer_automation DOIF ### automated on ###\
([([Waschkeller_washer_controlUnit:time]-[HM_2C10D8_Sw_HourCounter:pulseTimeAverage])] and \
[Waschkeller_washer_controlUnit:controlMode] eq "auto"\
)(\
set Waschmaschine_Dialog say auto\
)\
### done ###\
DOELSEIF\
([HM_2C10D8_Pwr:power] < [Waschkeller_washer_controlUnit:R-powerDone])(\
set Waschmaschine_Dialog say done\
)\
### manual on ###\
DOELSEIF\
([HM_2C10D8_Sw:"on"] and \
[Waschkeller_washer_controlUnit:controlMode] eq "manual" and \
[$SELF:cmd] != 1\
)(\
set Waschmaschine_Dialog say manual\
)
attr Waschkeller_washer_automation alias Waschkeller: Waschmaschine Automatik
attr Waschkeller_washer_automation cmdState automated on|done|manual on
attr Waschkeller_washer_automation group Waschmaschine
attr Waschkeller_washer_automation icon time_automatic
attr Waschkeller_washer_automation room Waschkeller
attr Waschkeller_washer_automation wait 0:180:0
Da die Befehle die beim Einschalten erfolgen sollen im Dialog angegeben sind, reicht es aus ein "set Waschmaschine_Dialog say auto" auszuführen. Dann werden alle Berechtigten Nutzer informiert, dass die Waschmaschine eingeschaltet wurde.
Unser Waschmaschine Dialog wird aber noch nicht funktionieren. Wir müssen noch über das Attribut "allowed" festlegen wer Berechtigt ist. Hier werden alle ROOMMATE/GUEST angezeigt, bei denen das "msgContactPush" gepflegt ist. Weiterhin gibt es dort auch die Möglichkeit "everyone" auszuwählen, dann betrifft es alle ROOMMATE/GUEST mit dem Attribut "msgContactPush".
Weiterhin muss auch noch das Attribut "evalSpecials" befüllt werden
Raw definition:
attr Waschmaschine_Dialog evalSpecials actor=HM_2C10D8_Sw\
controlUnit=Waschkeller_washer_controlUnit\
plot=Waschkeller_washer_SVG
Herzlichen Glückwunsch! Wir haben unseren ersten funktionsfähigen Dialog.
Aber es geht direkt weiter. Ich müsste mir ja nun merken was ich alles für Dialoge angelegt habe und wie genau die benannt sind. Da lege ich mir doch lieber einen Dialog für an, der mich darüber informiert:
Raw definition:
defmod meta_Dialog msgDialog {\
"%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:"\
]\
},\
"abbrechen": {\
"match": "\/?abbrechen",\
"commands": [\
"deletereading TYPE=msgDialog $recipient_history",\
"deletereading %TelegramBot% $recipient_sentMsgId"\
],\
"message": [\
"(%me%) ",\
"Dialog abgebrochen."\
] \
},\
"beenden": {\
"match": "\/?beenden",\
"commands": [\
"deletereading TYPE=msgDialog $recipient_history",\
"deletereading %TelegramBot% $recipient_sentMsgId"\
],\
"message": [\
"(%me%) ",\
"Dialog beendet."\
]\
}\
}
attr meta_Dialog DbLogExclude .*
attr meta_Dialog allowed everyone
attr meta_Dialog room msg
Wenn wir nun in meinem Fall "kanaan" senden, bekommen wir eine Auflistung aller Berechtigten Dialoge. Bisher nur Waschmaschine.
"abbrechen" und "beenden" verhalten sich bis auf die Nachricht identisch.
In allen drei Fällen wird aber das history Reading in allen Dialogen gelöscht.
Das mit dem "deletereading %TelegramBot% $recipient_sentMsgId" hat etwas mit den inlineKeyboards zu tun und das erkläre ich ein anderes Mal.
Viel Spaß beim Testen und umsetzen.
Ich würde mich freuen, wenn sich jemand findet der einen Wiki Artikel dazu schreibt, das liegt mir nicht so.
Im Anhang die erste Version des Moduls, allerdings noch ohne commandref.
Grüße,
igami
Hier nun etwas eher für Bastler:
Wie nutze ich inlineKeyboards und modifiziere die letzte Nachricht bei Telegram
Vorab, das ist alles noch Beta und ich finde die normalen Keyboards besser :D
Um eine Nachricht bei Telegram zu verändern gibt es den Befehl "queryEditInline".
Dafür wird aber die MsgId von der Nachricht benötigt. Also erstmal ein notify, welches die msgId pro Peer abspeichert.
Raw definition:
defmod sentMsgIdByPeerId notify .+:sentMsgId.+ {\
return unless($TYPE eq "TelegramBot");;\
\
my $dev_hash = $defs{$NAME};;\
my $sentMsgId = ReadingsVal($NAME, "sentMsgId", "");;\
my $sentMsgPeerId = ReadingsVal($NAME, "sentMsgPeerId", "");;\
my ($contact) = devspec2array("TYPE=(ROOMMATE|GUEST):FILTER=msgContactPush=.*$sentMsgPeerId.*");;\
\
readingsSingleUpdate($dev_hash, "$contact\_sentMsgId", $sentMsgId, 1);;\
}
attr sentMsgIdByPeerId devStateIcon {ReadingsVal($name, "state", "inactive") eq "active" ? ".*:ios-on-blue:inactive" : ".*:ios-off:active"}
attr sentMsgIdByPeerId icon audio_mic
attr sentMsgIdByPeerId room msg
Dann müssen wir aus dem "set <TelegramBot> message" noch das "set <TelegramBot> queryEditInline" machen.
Dafür ein cmdAlias:
Raw definition:
defmod message2queryEditInline cmdalias set .+ message (.|\n)+ AS {\
my ($NAME, $cmd, $message) = split(/[\s]+/, $EVENT, 3);;\
my $TYPE = InternalVal($NAME, "TYPE", "");;\
(my $recipient, $message) = ($message =~ m/(@\S+)? (.+)/s);;\
\
if($TYPE eq "TelegramBot" && $recipient){\
my ($contact) = devspec2array("TYPE=(ROOMMATE|GUEST):FILTER=msgContactPush=.*$recipient.*");;\
my $sentMsgId = ReadingsVal($NAME, "$contact\_sentMsgId", "");;\
\
if($sentMsgId ne ""){\
fhem("set $NAME queryEditInline $sentMsgId $recipient $message");;\
}\
else{\
fhem("set $NAME queryInline $recipient $message");;\
}\
}\
else{\
fhem("set $EVENT");;\
}\
}
attr message2queryEditInline room msg
Warum mir das ganze nicht gefällt:
1. Die inlineKeyboards sind immer nur so Breit wie die Nachricht. Im Video sieht man das an der Einkaufsliste. "Waren hinzufügen" ist nicht komplett ausgeschrieben
2. Die inlineKeyboars können lang sein, man muss also immer scrollen. Normale Keyboards sind nur so groß wie die normale Tastatur
3. Wenn eine Nachricht geändert wird ist es keine neue Nachricht und man erhält keine Benachrichtigung darüber. Aktuell ist es so, dass die letzte ID nur im meta_Dialog gelöscht wird. Bekomme ich nun zwischendurch eine Nachricht wie: "Die Waschmaschine ist fertig" Bekomme ich das nicht mit, da es keine neue Nachricht ist.
Warum das ganze aber doch was hat:
1. Im Beleuchtungs-Dialog sieht man sehr schön, wie sich nur der Prozentwert in der Nachricht ändert, ohne dass man eine Wall-of-Text bekommt.
2. Man kann andere Texte anzeigen als gesendet werden.
Man müsste den cmdAlias also so umbauen, dass er am besten nur einen Befehl "set <TelegramBot> message @<Peer> queryInline" ändert.
Das ganze ist aber sehr Telegram Spezifisch und ich weiß nicht was die Mehrheit hier im Forum für IM nutzt. Das Modul sollte ja auch mit Jabber und Whatsapp funktionieren.
Ich werde meine Dialoge aber wieder auf das normale Keyboard umstellen und erst noch weiter damit experimentieren.
Hier noch ein Video mit normalem Keyboard: https://youtu.be/yiCOTeR1YVQ
Hi igami,
wenn ich hier
ZitatNun aber weiter zum Dialog. In die DEF schreibe ich nun folgenden:
deinen Code einfüge bekomme ich folgenden Fehler:
Usage: define <name> msgDialog {JSON}
libjson-perl ist natürlich installiert. Sonst käme laut deinem Modul-Code ja auch ein anderer Fehler...
VG Sebastian
Zitat von: binford6000 am 01 Oktober 2017, 14:16:04
Hi igami,
wenn ich hier deinen Code einfüge bekomme ich folgenden Fehler:
Usage: define <name> msgDialog {JSON}
libjson-perl ist natürlich installiert. Sonst käme laut deinem Modul-Code ja auch ein anderer Fehler...
VG Sebastian
Habe das grad selbt noch mal getestet und bekomme keinen Fehler. Hast du vielleicht vergessen eine Klammer mit zu nehmen?
Ansonsten lässt sich das auch super mit https://jsonlint.com/ überprüfen und ggf. aufzeigen wo ein Fehler ist.
ZitatHast du vielleicht vergessen eine Klammer mit zu nehmen?
Habe deinen Code kopiert. JSONLint sagt der Code sei OK. Aber weder
define Waschmaschine_Dialog msgDialog {}
und dann über DEF den Code einfügen noch
das Ganze per defmod und Raw definition anzulegen funktioniert und liefern beide den gleichen Fehler...
Änder die Zeile 87 doch mal bitte zu
return("Usage: define <name> $TYPE {JSON}\n\n$@");
Dann bekommst du ja auch den Fehler zu sehen. Das werde ich auch erstmal noch als Logging einbauen :D
OK, dann bekomme ich:
Usage: define <name> msgDialog {JSON}
illegal backslash escape sequence in string, at character offset 714 (before "\\) ",\n "Das...") at ./FHEM/76_msgDialog.pm line 84.
Aber das ist ja nicht der Fehler, der bei
define Waschmaschine_Dialog msgDialog {}
kommt, oder? ;)
Guck mal in die evalSpecials von deinem msgConfig device, da steht bestimmt ein \ drin
Bei
define Waschmaschine_Dialog msgDialog {}
kommt ja auch kein Fehler.
Das device wird angelegt. Nur wenn ich die Klammern mit deinem Code befülle mag er nicht.
ZitatGuck mal in die evalSpecials von deinem msgConfig device, da steht bestimmt ein \ drin
Da habe ich 1:1 das hier eingebaut:
attr myMsgConfig evalSpecials me=kanaan\
TelegramBot=TelegramBot
Ich wollte erstmal alles 1:1 übernehmen um dann Anpassungen vorzunehmen. Aber soweit komme ich ja gar nicht...
Hier mal die beiden devices:
Internals:
NAME globalMsg
NR 139
STATE 1
TYPE msgConfig
READINGS:
2017-10-01 14:00:04 fhemMsgAudio Steigender Luftdruck! Aktuell: 1024 hPa.
2017-10-01 14:00:04 fhemMsgAudioGw Sonos_Kueche:OK
2017-10-01 14:00:04 fhemMsgAudioPrio 0
2017-10-01 14:00:04 fhemMsgAudioState 1
2017-10-01 14:00:04 fhemMsgAudioTitle -
2017-10-01 14:57:43 fhemMsgPushGw fhemBot:OK
2017-10-01 14:57:43 fhemMsgPushPrio 0
2017-10-01 14:57:43 fhemMsgPushState 1
2017-10-01 14:57:43 fhemMsgPushTitle -
2017-10-01 14:57:43 fhemMsgState 1
2017-10-01 14:57:43 fhemMsgStateTypes push:1 forwards:text>push
Attributes:
comment FHEM Global Configuration for command 'msg'
evalSpecials me=kanaan\
TelegramBot=TelegramBot
group Global
icon rc_SETUP
msgContactAudio Sonos_Kueche
msgContactLight Flur
msgContactPush fhemBot
msgContactScreen KODI
msgFwPrioGoneAudio -2
msgResidentsDev rgr_AufderDahl
msgTitleAudio jingle
msgType text
room 90_System
stateFormat fhemMsgState
userattr evalSpecials:textField-long
verbose 0
Internals:
CFGFN
DEF {}
NAME Waschmaschine_Dialog
NOTIFYDEV TYPE=(ROOMMATE|GUEST)
NR 3523
NTFY_ORDER 50-Waschmaschine_Dialog
STATE Initialized
TRIGGER
TYPE msgDialog
READINGS:
2017-10-01 16:04:16 state Initialized
Attributes:
room msg
verbose 5
Zitat von: binford6000 am 01 Oktober 2017, 17:03:58
Bei define Waschmaschine_Dialog msgDialog {}
kommt ja auch kein Fehler.
Das device wird angelegt. Nur wenn ich die Klammern mit deinem Code befülle mag er nicht.
Da habe ich 1:1 das hier eingebaut:
attr myMsgConfig evalSpecials me=kanaan\
TelegramBot=TelegramBot
Ich wollte erstmal alles 1:1 übernehmen um dann Anpassungen vorzunehmen. Aber soweit komme ich ja gar nicht...
Deswegen steht extra dabei, dass es Raw definition ist ;)
Im Attribut selbst steht nämlich nur
me=kanaan
TelegramBot=TelegramBot
Einfach anpassen und dann gehts.
ZitatEinfach anpassen und dann gehts.
Jep, danke für deinen support!
Zitat von: binford6000 am 01 Oktober 2017, 18:15:17
Jep, danke für deinen support!
Du kannst dich einfach revangieren in dem du das mit Whatsapp testest :)
ZitatDu kannst dich einfach revangieren in dem du das mit Whatsapp testest :)
Würde ich gerne machen aber habe yowsup rausgeschmissen und mich auf Telegram festgelegt.
U.a. wegen der einfacheren Integration und der Inline Tastatur...
Ich werde mich mal an meine eigenen Dialoge wagen und den Thread weiterhin aufmerksam verfolgen.
Vielleicht kann ich mich ja an anderer Stelle mal revanchieren ;)
Danke und VG, Sebastian
Hallo.
Bei mir kommt immer die Meldung: Modul kann nicht geladen werden.
Habe es ins richtige Verzeichnis geladen und FHEM neu gestartet.
Woran kann das liegen?
Zitat von: ErzGabriel am 02 Oktober 2017, 13:05:51
Hallo.
Bei mir kommt immer die Meldung: Modul kann nicht geladen werden.
Habe es ins richtige Verzeichnis geladen und FHEM neu gestartet.
Woran kann das liegen?
Was bekommst du denn genau für eine Meldung? Ich könnte mir nur vorstellen, dass die Perl Module utf8 oder JSON nicht installiert sind.
Versuche ich einen Dialog einzurichten, kommt nur:
Cannot load modul msgDialog
Wo hast du es denn hin kopiert?
Edit: Daran kann es nicht liegen, sonst käme "Unknown module msgDialog"
Versuch mal bitte die Version hier aus dem Anhang.
Kannst du mal bitte die gesamte Fehlermeldung aus dem Log posten?
Wer heute schon ein update vom msgConfig gemacht hat braucht mit der neuen Version das notify nicht mehr :)
In der neuen Version ist auch eine Commandref enthalten. Bitte nach dem speichern FHEM neustarten.
Kopiert habe ich es, ins Verzeichnis:
/fhem/FHEM
Da liegen ja auch alle anderen Dateien.
Fehlermeldung mit der neuen Version, der Datei:
2017.10.02 18:26:52 1: reload: Error:Modul 76_msgDialog deactivated:
Too many arguments for main::parseParams at ./FHEM/76_msgDialog.pm line 336, near "" ")"
2017.10.02 18:26:52 0: Too many arguments for main::parseParams at ./FHEM/76_msgDialog.pm line 336, near "" ")"
Aha, da steht also doch noch mehr ;)
Ist dein FHEM aktuell?
Nein, ist nicht die aktuellste Version. Ist Version 5.6 mit ein paar PM-Dateien geupdatet.
Hi, habe meinen ersten kleinen lauffähigen Dialog gebaut. Nur wird das "Menü" - also "Einschalten, "Ausschalten" und "abbrechen" nur als normale Textnachricht angezeigt. Bei Eingabe von "Einschalten", "Ausschalten" oder "abbrechen" wird der Dialog korrekt ausgeführt und landet danach wieder im Hauptmenü. Woran kann das liegen?
{"Flur":{
"message": [
"(Einschalten)",
"(Ausschalten)",
"(abbrechen)"
],
"Einschalten":{
"commands": "set fl_sw_1 on",
"message":[
"(%me%) ",
"Die Lampe im Flur wurde eingeschaltet."
]
},
"Ausschalten":{
"commands": "set fl_sw_1 off",
"message":[
"(%me%) ",
"Die Lampe im Flur wurde ausgeschaltet."
]
}
}
}
VG Sebastian
ParseParams ist noch nicht sooo alt, da ist dann ein Update fällig.
Zu einem Keyboard Gehört auch immer eine normale Nachricht.
Schade, dann kann ich es nicht nutzen, weil ein Update mache ich nicht.
Beim letzten Versuch des Updates auf die aktuelle Version lief meine Ha_bridge nicht mehr und ich habe sie auch nicht mehr zum laufen bekommen.
Danke für Deine Hilfe.
Du könntest in fhem.pl die sub updaten
sub parseParams($;$$);
sub
parseParams($;$$)
{
my($cmd, $separator, $joiner) = @_;
$separator = ' ' if(!$separator);
$joiner = $separator if(!$joiner); # needed if separator is a regexp
my(@a, %h);
my @params;
if( ref($cmd) eq 'ARRAY' ) {
@params = @{$cmd};
} else {
@params = split($separator, $cmd);
}
while (@params) {
my $param = shift(@params);
next if($param eq "");
my ($key, $value) = split( '=', $param, 2 );
if( !defined( $value ) ) {
$value = $key;
$key = undef;
# the key can not start with a { -> it must be a perl expression # vim:}
} elsif( $key =~ m/^\s*{/ ) { # for vim: }
$value = $param;
$key = undef;
}
#collect all parts until the closing ' or "
while( $param && $value =~ m/^('|")/ && $value !~ m/$1$/ ) {
my $next = shift(@params);
last if( !defined($next) );
$value .= $joiner . $next;
}
#remove matching ' or " from the start and end
if( $value =~ m/^('|")/ && $value =~ m/$1$/ ) {
$value =~ s/^.(.*).$/$1/;
}
#collect all parts until opening { and closing } are matched
if( $value =~ m/^\s*{/ ) { # } for match
my $count = 0;
for my $i (0..length($value)-1) {
my $c = substr($value, $i, 1);
++$count if( $c eq '{' );
--$count if( $c eq '}' );
}
while( $param && $count != 0 ) {
my $next = shift(@params);
last if( !defined($next) );
$value .= $joiner . $next;
for my $i (0..length($next)-1) {
my $c = substr($next, $i, 1);
++$count if( $c eq '{' );
--$count if( $c eq '}' );
}
}
}
if( defined($key) ) {
$h{$key} = $value;
} else {
push @a, $value;
}
}
return(\@a, \%h);
}
Hat geklappt. Danke.
Zitat von: binford6000 am 02 Oktober 2017, 19:58:24
Hi, habe meinen ersten kleinen lauffähigen Dialog gebaut. Nur wird das "Menü" - also "Einschalten, "Ausschalten" und "abbrechen" nur als normale Textnachricht angezeigt. Bei Eingabe von "Einschalten", "Ausschalten" oder "abbrechen" wird der Dialog korrekt ausgeführt und landet danach wieder im Hauptmenü. Woran kann das liegen?
{"Flur":{
"message": [
"(Einschalten)",
"(Ausschalten)",
"(abbrechen)"
],
"Einschalten":{
"commands": "set fl_sw_1 on",
"message":[
"(%me%) ",
"Die Lampe im Flur wurde eingeschaltet."
]
},
"Ausschalten":{
"commands": "set fl_sw_1 off",
"message":[
"(%me%) ",
"Die Lampe im Flur wurde ausgeschaltet."
]
}
}
}
VG Sebastian
Du könntest für fl_sw_1 auch noch einen Platzhalter, z.B. %actor%, ersetzen, dann ist es nachher einfacher wenn man den Dialog für andere Räume kopierst ;)
ZitatDu könntest für fl_sw_1 auch noch einen Platzhalter, z.B. %actor%, ersetzen, dann ist es nachher einfacher wenn man den Dialog für andere Räume kopierst ;)
Hab ich schon gesehen, aber eins nach dem anderen... ;) Die bedingte Anzeige steht auch auf dem ToDo:
"{return('(Einschalten) ') if(ReadingsVal('%controlUnit%', 'state', '') eq off')}",
ZitatZu einem Keyboard Gehört auch immer eine normale Nachricht.
Hab jetzt eine normale Nachricht dazugeschrieben und schwupps funktionierts :)
{"Flur":{
"message": [
"(Einschalten) ",
"(Ausschalten) ",
"(abbrechen) ",
"Bitte auswählen:"
],
Danke und noch einen schönen Feiertag!
Ich bräuchte nochmals Hilfe, bin zu blöde den Fehler zu finden.
Wollte als Test erstmal den Waschmaschinen Dialog anlegen.
define Waschmaschine_Dialog msgDialog {}
Klappt ohne Probleme.
Füge ich dann den Code in die def ein, kommt folgendes beim speichern:
Usage: define <name> msgDialog {JSON}
illegal backslash escape sequence in string, at character offset 714 (before "\\) ",\n "Das...") at ./FHEM/76_msgDialog.pm line 85.
Und da will mir nicht in den Kopf warum, habe mir den Thread mittlerweile mehrmals durch gelesen aber ich sehe meinen Fehler nicht.
Habe die Zeile:
attr myMsgConfig evalSpecials me=kanaan\
TelegramBot=TelegramBot
mit meinen Daten angepasst.
attr myMsgConfig evalSpecials me=kanaan\
Hast Du auch den Backslash entfernt? Da bin ich auch drübergestolpert...
Sieht bei mir zB. so aus:
me=Q
TelegramBot=fhemBot
VG Sebastian
Zitat von: ErzGabriel am 03 Oktober 2017, 11:57:16
Habe die Zeile:
attr myMsgConfig evalSpecials me=kanaan\
TelegramBot=TelegramBot
mit meinen Daten angepasst.
Sind ja auch zwei Zeilen und der \ steht in der
Raw definition für den Zeilenumbruch ;)
Alles klar, gleiche Stelle gefallen, der Backslash. ::)
Danke euch.
Hi.
Leute, ich stell mich zu dämlich an. Ich habe die ersten Dialoge definiert aber kriege vom Bot keine Antwort.
In myMsgConfig:
evalSpecials me=Marcus
TelegramBot=Jarvis_RPibot
In Residents rr_Marcus
msgContactPush Jarvis:@Jarvis_RPibot
Zum testen habe ich den Dialog Waschmaschine übernommen. Schicke ich jetzt per Telegram an den Bot: Waschmaschine, wird der Text in Fhem angezeigt aber vom Bot kommt keine Antwort.
Ich habe jetzt auch sämtliche Kombinationen ausprobiert, die mir einfallen, ich wüsste nicht mehr, wo jetzt noch was falsch ist.
Sorry, aber ich bräuchte nochmal Eure Hilfe.
Zitat von: ErzGabriel am 03 Oktober 2017, 17:12:44
Hi.
Leute, ich stell mich zu dämlich an. Ich habe die ersten Dialoge definiert aber kriege vom Bot keine Antwort.
In myMsgConfig:
evalSpecials me=Marcus
TelegramBot=Jarvis_RPibot
In Residents rr_Marcus
msgContactPush Jarvis:@Jarvis_RPibot
Zum testen habe ich den Dialog Waschmaschine übernommen. Schicke ich jetzt per Telegram an den Bot: Waschmaschine, wird der Text in Fhem angezeigt aber vom Bot kommt keine Antwort.
Ich habe jetzt auch sämtliche Kombinationen ausprobiert, die mir einfallen, ich wüsste nicht mehr, wo jetzt noch was falsch ist.
Sorry, aber ich bräuchte nochmal Eure Hilfe.
das msgContactPush Attribut ist falsch definiert.
Es muss sein
msgContactPush Jarvis_RPibot:@<PeerId>
Dann sollte im rr_Marcus auch ein neues Reading auftauchen in dem deine Nachricht steht.
Habe es jetzt mit Jarvis_RPibot und Jarvis probiert, keines bringt den gewünschten Erfolg.
Die me Zeile im Bot, sieht wie folgt aus:
me 428936987:Jarvis:@Jarvis_RPibot
Vermute, das ich da noch was falsch mache.
Es muss sein:
<NAME des TelegramBot Device>:@<deine Telegram ID>
Ich vermute, dass du da was durcheinander bringst. Wenn du magst kannst du mir ein List von deinem TelegramBot per PM schicken, dann kann ich es dir genau sagen
Zitat von: igami am 02 Oktober 2017, 17:05:12
Versuch mal bitte die Version hier aus dem Anhang.
...
Wer heute schon ein update vom msgConfig gemacht hat braucht mit der neuen Version das notify nicht mehr :)
Hey,
Ich verwende die zweite Version (aus dem Zitat) und bekomme die normale Keyboards zum laufen, nicht aber die inline. Würde die wieder deaktiviert oder hab ich was übersehen?
Elche notify wird mit dem Update der msgConfig nicht mehr benötigt?
PS: nutze auch Telegram.
Gruß Dominik
Zitat von: Flipper92 am 03 Oktober 2017, 22:03:17
Hey,
Ich verwende die zweite Version (aus dem Zitat) und bekomme die normale Keyboards zum laufen, nicht aber die inline. Würde die wieder deaktiviert oder hab ich was übersehen?
Elche notify wird mit dem Update der msgConfig nicht mehr benötigt?
PS: nutze auch Telegram.
Gruß Dominik
Für inline brauchst du noch den cmdalias den ich weiter vorne gepostet habe. Ich persönlich finde die normalen Keyboards angenehmer.
Mit dem Update von msgConfig braucht man das msgPushReceived notify nicht mehr.
Zitat von: igami am 04 Oktober 2017, 06:20:24
Für inline brauchst du noch den cmdalias den ich weiter vorne gepostet habe. Ich persönlich finde die normalen Keyboards angenehmer.
Grad den halben Text gelöscht :-) Da es beim nächsten Test doch funktioniert hat mit dem inline.
Woran kann es liegen, das Waschmaschine funktioniert, aber kanaan nicht.
abbrechen funktioniert bei mir auch nicht.
Kein allowed gesetzt?
Am besten Mal ein list posten, dann kann ich gucken
Guten Tag,
ich bin heute auch auf Telegram umgestiegen und hab direkt dieses coole Modul gefunden. Normale Nachrichten, Fotos etc kann ich senden, jedoch bekomme ich das mit dem Menü gar nicht hin. Egal was ich an den Bot schreibe, es kommt kein Menü. Vielleicht findet ja jemand den Fehler...
hier ein list von telegramBot:
Internals:
FAILS 0
NAME telegramBot
NR 1547
OLD_POLLING 183
POLLING 183
SNAME telegramBot
STATE Polling
TYPE TelegramBot
UPDATER 0
WAIT 0
me 460***817:A***Bot:@A***Bot
offset_id 688***981
sentLastResult SUCCESS
sentMsgId 134
sentMsgOptions
sentMsgPeer Andy****
sentMsgPeerId 158***404
sentMsgResult SUCCESS
sentMsgText test
AliasCmds:
Contacts:
158***404 158***404:Andy****:@Andreas*****
HU_DO_PARAMS:
NAME
addr https://api.telegram.org:443
boundary TelegramBot_boundary-x0123
buf
code 200
conn
data
displayurl <hidden>
header agent: TelegramBot/1.0
User-Agent: TelegramBot/1.0
Accept: application/json
Accept-Charset: utf-8
Content-Type: multipart/form-data; boundary=TelegramBot_boundary-x0123
hideurl 1
host api.telegram.org
httpheader HTTP/1.1 200 OK
Server: nginx/1.10.0
Date: Wed, 04 Oct 2017 09:57:21 GMT
Content-Type: application/json
Content-Length: 259
Connection: close
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Expose-Headers: Content-Length,Content-Type,Date,Server,Connection
Strict-Transport-Security: max-age=31536000; includeSubdomains
hu_blocking 0
hu_filecount 38
hu_port 443
hu_portSfx
loglevel 4
method POST
path /bot460***817:AA***x8/sendMessage
protocol https
redirects 0
timeout 30
url https://api.telegram.org/bot460***817:AA***x8/sendMessage
args:
@Andreas*****
test
undef
0
undef
undef
1
hash:
sslargs:
HU_UPD_PARAMS:
FD 53
NAME
addr https://api.telegram.org:443
buf
code 200
displayurl <hidden>
header agent: TelegramBot/1.0
User-Agent: TelegramBot/1.0
Accept: application/json
Accept-Charset: utf-8
hideurl 1
host api.telegram.org
hu_blocking 0
hu_filecount 182
hu_port 443
hu_portSfx
isPolling update
loglevel 4
method GET
offset 688***981
path /bot460***817:AA***x8/getUpdates?offset=688***981&limit=5&timeout=120
protocol https
redirects 0
timeout 245
url https://api.telegram.org/bot460***817:AA***x8/getUpdates?offset=688***981&limit=5&timeout=120
hash:
sslargs:
READINGS:
2017-10-04 08:52:24 Contacts 158***404:Andy****:@Andreas*****
2017-10-04 08:46:32 PollingErrCount 0
2017-10-04 11:52:21 StoredCommands fhem
2017-10-04 11:57:48 fhemMsgRcvPush Flur
2017-10-04 11:57:48 fhemMsgRcvPushGw telegramBot
2017-10-04 11:57:48 msgChat Andy****
2017-10-04 11:57:48 msgChatId 158***404
2017-10-04 11:57:48 msgFileId
2017-10-04 11:57:48 msgId 135
2017-10-04 11:57:48 msgPeer Andy****
2017-10-04 11:57:48 msgPeerId 158***404
2017-10-04 11:57:48 msgReplyMsgId
2017-10-04 11:57:48 msgText Flur
2017-10-04 11:57:48 prevMsgChat Andy****
2017-10-04 11:57:48 prevMsgFileId
2017-10-04 11:57:48 prevMsgId 133
2017-10-04 11:57:48 prevMsgPeer Andy****
2017-10-04 11:57:48 prevMsgPeerId 158***404
2017-10-04 11:57:48 prevMsgReplyMsgId
2017-10-04 11:57:48 prevMsgText test
2017-10-04 11:52:05 queryData TBOT_FAVORITE_CANCEL
2017-10-04 11:52:05 queryID 680419048323465712
2017-10-04 11:52:05 queryPeer Andy****
2017-10-04 11:52:05 queryPeerId 158***404
2017-10-04 11:52:05 queryReplyMsgId 127
2017-10-04 11:57:21 sentMsgId 134
2017-10-04 11:57:21 sentMsgPeerId 158***404
2017-10-04 11:57:21 sentMsgResult SUCCESS
inlinechats:
sentQueue:
Attributes:
DbLogExclude .*
allowUnknownContacts 0
cmdFavorites /cmd
cmdKeyword fhem
cmdRestrictedPeer 158***404
defaultPeer @Andreas*****
event-on-change-reading .*
favorites /[-Flur Cam Bild] = set FZ_CAM_IT on;; sleep 65;; get cam_tuer image;
/[-Flur Cam aus] = set FZ_CAM_IT off
favoritesInline 1
msgContactPush telegramBot:@158***404
pollingTimeout 120
room z_Module
utf8Special 1
hier ein gekürztes list vom residents-device:
Internals:
.eventMapCmd zuhause:noArg abwesend:noArg verreist:noArg bettfertig:noArg schläft:noArg aufgestanden:noArg
DEF rgr_Residents
NAME rr_Andy
NOTIFYDEV global,rr_Andy_wakeuptimer1,rr_Andy_wakeuptimer2
NR 823
NTFY_ORDER 50-rr_Andy
READY 1
RESIDENTGROUPS rgr_Residents
STATE zuhause
TYPE ROOMMATE
READINGS:
2017-10-04 11:55:47 fhemMsgPush (Please define first) (abbrechen) Ich kann folgendes für dich tun:
2017-10-04 11:55:47 fhemMsgPushGw telegramBot:@Andreas***:ERROR
2017-10-04 11:55:47 fhemMsgPushPrio 0
2017-10-04 11:55:47 fhemMsgPushState 0
2017-10-04 11:55:47 fhemMsgPushTitle -
2017-10-04 12:06:50 fhemMsgRcvPush Flur
2017-10-04 12:06:50 fhemMsgRcvPushGw telegramBot
2017-10-04 11:55:47 fhemMsgState 0
2017-10-04 11:55:47 fhemMsgStateTypes push:0
2017-07-29 19:00:58 lastArrival 2017-07-29 19:00:58
TIMER:
Attributes:
event-on-change-reading .*
msgContactPush telegramBot:@158***404
hier ein list vom msgConfig device:
Internals:
CFGFN
NAME myMsgConfig
NOTIFYDEV TYPE=(Jabber|TelegramBot|yowsup)
NR 4308
NTFY_ORDER 50-myMsgConfig
STATE 1
TYPE msgConfig
Helper:
DBLOG:
fhemMsgState:
logdb:
TIME 1507107692.41934
VALUE initialized
READINGS:
2017-10-04 11:17:53 fhemMsgPush @ (andy)
Die Wachmaschine ist fertig.
2017-10-04 11:17:53 fhemMsgPushGw telegramBot:OK
2017-10-04 11:17:53 fhemMsgPushPrio 0
2017-10-04 11:17:53 fhemMsgPushState 1
2017-10-04 11:17:53 fhemMsgPushTitle -
2017-10-04 11:17:53 fhemMsgState 1
2017-10-04 11:17:53 fhemMsgStateTypes push:1
Attributes:
DbLogExclude .*
comment FHEM Global Configuration for command 'msg'
evalSpecials me=rr_Andy
TelegramBot=telegramBot
event-on-change-reading .*
group Global
msgContactPush telegramBot
msgType text
room msg,z_Module
stateFormat fhemMsgState
userattr evalSpecials:textField-long
verbose 3
und natürlich gibts auch den cmdalias für die inlines:
Internals:
ALIAS set
CFGFN
DEF set .+ message (.|\n)+ AS {
my ($NAME, $cmd, $message) = split(/[\s]+/, $EVENT, 3);
my $TYPE = InternalVal($NAME, "TYPE", "");
(my $recipient, $message) = ($message =~ m/(@\S+)? (.+)/s);
if($TYPE eq "TelegramBot" && $recipient){
my ($contact) = devspec2array("TYPE=(ROOMMATE|GUEST):FILTER=msgContactPush=.*$recipient.*");
my $sentMsgId = ReadingsVal($NAME, "$contact\_sentMsgId", "");
if($sentMsgId ne ""){
fhem("set $NAME queryEditInline $sentMsgId $recipient $message");
}
else{
fhem("set $NAME queryInline $recipient $message");
}
}
else{
fhem("set $EVENT");
}
}
NAME message2queryEditInline
NEWCMD {
my ($NAME, $cmd, $message) = split(/[\s]+/, $EVENT, 3);
my $TYPE = InternalVal($NAME, "TYPE", "");
(my $recipient, $message) = ($message =~ m/(@\S+)? (.+)/s);
if($TYPE eq "TelegramBot" && $recipient){
my ($contact) = devspec2array("TYPE=(ROOMMATE|GUEST):FILTER=msgContactPush=.*$recipient.*");
my $sentMsgId = ReadingsVal($NAME, "$contact\_sentMsgId", "");
if($sentMsgId ne ""){
fhem("set $NAME queryEditInline $sentMsgId $recipient $message");
}
else{
fhem("set $NAME queryInline $recipient $message");
}
}
else{
fhem("set $EVENT");
}
}
NR 4879
PARAM .+ message (.|\n)+
STATE defined
TYPE cmdalias
Attributes:
DbLogExclude .*
room msg
verbose 5
und dann noch ein list von Test Menü:
Internals:
CFGFN
CHANGED
DEF {"Flur":{
"message": [
"(Einschalten)",
"(Ausschalten)",
"(abbrechen) "
],
"Einschalten":{
"commands": "set %actor% on",
"message":[
"(%me%) ",
"Die Lampe im Flur wurde eingeschaltet."
]
},
"Ausschalten":{
"commands": "set %actor% off",
"message":[
"(%me%) ",
"Die Lampe im Flur wurde ausgeschaltet."
]
}
}
}
NAME Flur_dialog
NOTIFYDEV TYPE=(ROOMMATE|GUEST)
NR 6127
NTFY_ORDER 50-Flur_dialog
STATE rr_Andy: Flur
TRIGGER Flur
TYPE msgDialog
Helper:
DBLOG:
state:
logdb:
TIME 1507110062.74787
VALUE Initialized
READINGS:
2017-10-04 13:02:58 everyone_history Flur
2017-10-04 13:42:16 rr_Andy_history Flur
2017-10-04 13:42:16 state rr_Andy: Flur
Attributes:
DbLogExclude .*
allowed rr_Andy
evalSpecials actor=FZ_Deckenlampe
event-on-change-reading .*
room msg
leider finde ich den Fehler nicht. Vielleicht hatte jemand ja das gleiche.
Liegt es evtl an den Favoriten im telegramBot, die auch commands erlauben?
hmmm ??? ???
Danke schon mal für die Hilfe.
Beste Grüße
Andy
Zitat von: igami am 04 Oktober 2017, 10:06:25
Kein allowed gesetzt?
Ups. Das wars.
Hab aber nun auch ein Punkt wo ich nicht weiter komme.
Hab die Waschmaschinen Timer mal für eine Heizung ummoduliert.
Aktuell sieht es so aus (komplett)
{ "Heizung": {
"message": [
"(bestätigen|abbrechen) ",
"(aus:04.5|5°C:05.0|6°C:06.0|7°C:07.0) ",
"(8°C:08.0|9°C:09.0|10°C:10.0|11°C:11.0) ",
"(12°C:12.0|13°C:13.0|14°C:14.0|15°C:15.0) ",
"(15.5°C:15.5|16°C:16.0|16.5°C:16.5|17°C:17.0) ",
"(17.5°C:17.5|18°C:18.0|18.5°C:18.5|19°C:19.0) ",
"(19.5°C:19.5|20°C:20.0|20.5°C:20.5|21°C:21.0) ",
"(21.5°C:21.5|22°C:22.0|22.5°C:22.5|23°C:23.0) ",
"(23.5°C:23.5|24°C:24.0|25°C:25.0|26°C:26.0) ",
"(27°C:27|28°C:28|29°C:29|voll:29.5) ",
"Aktuell ist [Wohnzimmer.Thermostat:desiredTemperature] eingestellt.",
"Treffen Sie das Setup."
],
"Setup": {
"match": "[0-2][0-9][:.]([0]|[5])",
"commands": [
"{my $temperatur = '$message';; fhem(\"set Wohnzimmer.Thermostat desiredTemperature $temperatur\");;}",
"set $SELF say @$recipient Waschmaschine|programmieren|bestätigen"
]
}
}
}
Tastatur geht auf, aber es geht nicht weiter wenn ich eine Temperatur auswähle.
Grüße
ich hab nun einen Erfolg... ich hatte nicht die neuste Version ??? ??? ???
hab den Thread zwar mehrfach gelesen, aber dennoch hatte ich nicht die aktuellste Version genommen :-X :-X :-X :-X
nun kommen immerhin schon die Menüs richtig an ;D
so nun kann ich auch drauf reagieren. Was mir aufgefallen ist, da bei mir im "Flur" erstmal nichts anklickbar war, ist dass hinter einem Befehl in Klammern zwingend ein Leerzeichen vorhanden sein muss:
defmod Flur_dialog msgDialog {"Flur":{\
"message": [\
"(Einschalten) ",\
"(Ausschalten) ",\
"(abbrechen) ",\
"{return('Lampe: ' . (ReadingsVal('%actor%', 'state', '') eq 'on' ? 'eingeschaltet' : 'ausgeschaltet'))}"\
],\
"Einschalten":{\
"commands": "set %actor% on",\
"message":[\
"(%me%) ",\
"Die Lampe im Flur wurde eingeschaltet."\
]\
},\
"Ausschalten":{\
"commands": "set %actor% off",\
"message":[\
"(%me%) ",\
"Die Lampe im Flur wurde ausgeschaltet."\
]\
}\
}\
}
Hallo Zusammen,
ich habe mal versucht, meine Lampen und Lightscenes in einen Dialog zu gießen.
Der Dialog lässt sich komplett navigieren und die Menüeinträge sind auch dynamisch. :D
Aber leider schaltet keines der commands! Im Log ist auch nichts zu finden (auch Verbose 5)
Der Dialog bleibt einfach dort stehen. Die dazugehörige Nachricht wir auch nicht versendet. :(
Picke ich mir eine Lampe heraus
und baue daraus einen Minidialog wird das command auch ausgeführt und das device korrekt geschaltet ???
{"Beleuchtung":{
"message": [
"(Szenen) ",
"(Lampen einschalten) ",
"(Lampen ausschalten) ",
"(abbrechen) ",
"Szenen einstellen oder Lampen schalten:"
],
"Szenen":{
"message":[
"{return('(abwesend einschalten) ') if(ReadingsVal('Standard.LS', 'state', '') ne 'abwesend')}",
"{return('(anwesend einschalten) ') if(ReadingsVal('Standard.LS', 'state', '') ne 'anwesend')}",
"{return('(anwesend_alle einschalten) ') if(ReadingsVal('Standard.LS', 'state', '') ne 'anwesend_alle')}",
"{return('(anwesend_alle_farbe einschalten) ') if(ReadingsVal('Standard.LS', 'state', '') ne 'anwesend_alle_farbe')}",
"{return('(schlafen einschalten) ') if(ReadingsVal('Standard.LS', 'state', '') ne 'schlafen')}",
"{return('(kino einschalten) ') if(ReadingsVal('Standard.LS', 'state', '') ne 'kino')}",
"(abbrechen) ",
"Welche Lichtszene soll aktiviert werden?"
]
},
"abwesend einschalten":{
"commands": "set Standard.LS scene abwesend",
"message":[
"(%me%) ",
"Die Szene abwesend wurde aktiviert."
]
},
"anwesend einschalten":{
"commands": "set Standard.LS scene anwesend",
"message":[
"(%me%) ",
"Die Szene anwesend wurde aktiviert."
]
},
"anwesend_alle einschalten":{
"commands": "set Standard.LS scene anwesend_alle",
"message":[
"(%me%) ",
"Die Szene anwesend_alle wurde aktiviert."
]
},
"anwesend_alle_farbe einschalten":{
"commands": "set Standard.LS scene anwesend_alle_farbe",
"message":[
"(%me%) ",
"Die Szene anwesend_alle_farbe wurde aktiviert."
]
},
"schlafen einschalten":{
"commands": "set Standard.LS scene schlafen",
"message":[
"(%me%) ",
"Die Szene schlafen wurde aktiviert."
]
},
"kino einschalten":{
"commands": "set Standard.LS scene kino",
"message":[
"(%me%) ",
"Die Szene kino wurde aktiviert."
]
},
"Lampen einschalten":{
"message":[
"{return('(Flur einschalten) ') if(ReadingsVal('fl_sw_1', 'state', '') eq 'off')}",
"{return('(Kueche einschalten) ') if(ReadingsVal('SteckdoseIT2', 'state', '') eq 'off')}",
"{return('(Schlafzimmer einschalten) ') if(ReadingsVal('sz_col_1', 'state', '') eq 'off')}",
"(abbrechen) ",
"Welche Lampe soll eingeschaltet werden?"
]
},
"Flur einschalten":{
"commands": "set fl_sw_1 on",
"message":[
"(%me%) ",
"Die Lampe im Flur wurde eingeschaltet."
]
},
"Kueche einschalten":{
"commands": "set SteckdoseIT2 on",
"message":[
"(%me%) ",
"Die Lampe in der Kueche wurde eingeschaltet."
]
},
"Schlafzimmer einschalten":{
"commands": "set sz_col_1 on",
"message":[
"(%me%) ",
"Die Lampe im Schlafzimmer wurde eingeschaltet."
]
},
"Lampen ausschalten":{
"message":[
"{return('(Flur ausschalten) ') if(ReadingsVal('fl_sw_1', 'state', '') ne 'off')}",
"{return('(Kueche ausschalten) ') if(ReadingsVal('SteckdoseIT2', 'state', '') ne 'off')}",
"{return('(Schlafzimmer ausschalten) ') if(ReadingsVal('sz_col_1', 'state', '') ne 'off')}",
"(abbrechen) ",
"Welche Lampe soll ausgeschaltet werden?"
]
},
"Flur ausschalten":{
"commands": "set fl_sw_1 off",
"message":[
"(%me%) ",
"Die Lampe im Flur wurde ausgeschaltet."
]
},
"Kueche ausschalten":{
"commands": "set SteckdoseIT2 off",
"message":[
"(%me%) ",
"Die Lampe in der Kueche wurde ausgeschaltet."
]
},
"Schlafzimmer ausschalten":{
"commands": "set sz_col_1 off",
"message":[
"(%me%) ",
"Die Lampe im Schlafzimmer wurde ausgeschaltet."
]
}
}
}
Ich frage mich nur woran das liegen könnte? Habt ihr eine Idee?
VG Sebastian
Du schließt erst den Szenen Teil mit der }
ZitatDu schließt erst den Szenen Teil mit der }
Thx! Hier der funktionierende Code:
{"Beleuchtung":{
"message": [
"(Szenen) ",
"(Lampen einschalten) ",
"(Lampen ausschalten) ",
"(abbrechen) ",
"Szenen einstellen oder Lampen schalten:"
],
"Szenen":{
"message":[
"{return('(abwesend einschalten) ') if(ReadingsVal('Standard.LS', 'state', '') ne 'abwesend')}",
"{return('(anwesend einschalten) ') if(ReadingsVal('Standard.LS', 'state', '') ne 'anwesend')}",
"{return('(anwesend_alle einschalten) ') if(ReadingsVal('Standard.LS', 'state', '') ne 'anwesend_alle')}",
"{return('(anwesend_alle_farbe einschalten) ') if(ReadingsVal('Standard.LS', 'state', '') ne 'anwesend_alle_farbe')}",
"{return('(schlafen einschalten) ') if(ReadingsVal('Standard.LS', 'state', '') ne 'schlafen')}",
"{return('(kino einschalten) ') if(ReadingsVal('Standard.LS', 'state', '') ne 'kino')}",
"(abbrechen) ",
"Welche Lichtszene soll aktiviert werden?"
],
"abwesend einschalten":{
"commands": "set Standard.LS scene abwesend",
"message":[
"(%me%) ",
"Die Szene abwesend wurde aktiviert."
]
},
"anwesend einschalten":{
"commands": "set Standard.LS scene anwesend",
"message":[
"(%me%) ",
"Die Szene anwesend wurde aktiviert."
]
},
"anwesend_alle einschalten":{
"commands": "set Standard.LS scene anwesend_alle",
"message":[
"(%me%) ",
"Die Szene anwesend_alle wurde aktiviert."
]
},
"anwesend_alle_farbe einschalten":{
"commands": "set Standard.LS scene anwesend_alle_farbe",
"message":[
"(%me%) ",
"Die Szene anwesend_alle_farbe wurde aktiviert."
]
},
"schlafen einschalten":{
"commands": "set Standard.LS scene schlafen",
"message":[
"(%me%) ",
"Die Szene schlafen wurde aktiviert."
]
},
"kino einschalten":{
"commands": "set Standard.LS scene kino",
"message":[
"(%me%) ",
"Die Szene kino wurde aktiviert."
]
}
},
"Lampen einschalten":{
"message":[
"{return('(Flur einschalten) ') if(ReadingsVal('fl_sw_1', 'state', '') eq 'off')}",
"{return('(Kueche einschalten) ') if(ReadingsVal('SteckdoseIT2', 'state', '') eq 'off')}",
"{return('(Schlafzimmer einschalten) ') if(ReadingsVal('sz_col_1', 'state', '') eq 'off')}",
"(abbrechen) ",
"Welche Lampe soll eingeschaltet werden?"
],
"Flur einschalten":{
"commands": "set fl_sw_1 on",
"message":[
"(%me%) ",
"Die Lampe im Flur wurde eingeschaltet."
]
},
"Kueche einschalten":{
"commands": "set SteckdoseIT2 on",
"message":[
"(%me%) ",
"Die Lampe in der Kueche wurde eingeschaltet."
]
},
"Schlafzimmer einschalten":{
"commands": "set sz_col_1 on",
"message":[
"(%me%) ",
"Die Lampe im Schlafzimmer wurde eingeschaltet."
]
}
},
"Lampen ausschalten":{
"message":[
"{return('(Flur ausschalten) ') if(ReadingsVal('fl_sw_1', 'state', '') ne 'off')}",
"{return('(Kueche ausschalten) ') if(ReadingsVal('SteckdoseIT2', 'state', '') ne 'off')}",
"{return('(Schlafzimmer ausschalten) ') if(ReadingsVal('sz_col_1', 'state', '') ne 'off')}",
"(abbrechen) ",
"Welche Lampe soll ausgeschaltet werden?"
],
"Flur ausschalten":{
"commands": "set fl_sw_1 off",
"message":[
"(%me%) ",
"Die Lampe im Flur wurde ausgeschaltet."
]
},
"Kueche ausschalten":{
"commands": "set SteckdoseIT2 off",
"message":[
"(%me%) ",
"Die Lampe in der Kueche wurde ausgeschaltet."
]
},
"Schlafzimmer ausschalten":{
"commands": "set sz_col_1 off",
"message":[
"(%me%) ",
"Die Lampe im Schlafzimmer wurde ausgeschaltet."
]
}
}
}
}
Was mir jetzt noch fehlt wäre quasi ein "Navigations-Dialog". Bei "abbrechen" lande ich immer in %me%,
muss also in meinem Fall "Q" anklicken um dann wieder meine ganzen Dialoge zu sehen.
Sowas wie ein "zurück" Dialog... ???
VG Sebastian
"zurück" könnte man auch in den Meta Dialog integrieren. Es sollte ja pro Benutzer immer nur ein Dialog aktiv sein. Dann muss man ja nur für diesen Dialog "set <Dialog> say @$recipient {perl Code für history ohne den letzten Teil}".
Ich teste das Mal, wenn ich wieder zu Hause bin.
Spricht aus eurer Sicht noch etwas dagegen das Modul offiziell einzuchecken?
Dann würde ich noch ein bisschen was am logverhalten basteln und die Commandref fertig machen.
ZitatDann muss man ja nur für diesen Dialog "set <Dialog> say @$recipient {perl Code für history ohne den letzten Teil}".
Ich teste das Mal, wenn ich wieder zu Hause bin.
Klingt gut!
ZitatSpricht aus eurer Sicht noch etwas dagegen das Modul offiziell einzuchecken?
Dann würde ich noch ein bisschen was am logverhalten basteln und die Commandref fertig machen.
Stimmt, der Meta-Dialog schreibt immer ins log, auch mit verbose 0. Aus meiner Sicht spricht nichts dagegen das Modul offiziell einzuchecken.
Es läuft alles stabil und rund. Ein großes Lob von mir an dieser Stelle! Das Warten hat sich wirklich gelohnt!
VG Sebastian
Was schreibt der denn ins Log? Ich bin eher der Meinung, dass ich nicht genug Meldungen bei verbose 3-5 zur Verfügung Stelle um Fehler zu erkennen.
Zitat von: igami am 05 Oktober 2017, 15:32:21
Spricht aus eurer Sicht noch etwas dagegen das Modul offiziell einzuchecken?
Bei mir macht es immer wieder Probleme mit der Performance.
Gestern hatte ich ein "Menü" das mein FHEM immer abstürzen ließ.
Auch mit meinem vorherigen Menü gibt es ein paar Probleme bei der Geschwindigkeit. Muss heufig FHEM neu starten.
Gruß
ZitatWas schreibt der denn ins Log?
Beim Aufruf vom Meta Dialog:
2017.10.05 15:46:41 3: get TYPE=msgDialog:FILTER=NAME!=meta_Dialog:FILTER=allowed=.*(rr_Sebastian|everyone).* trigger : Beleuchtung
Cam
Haus-Automatisierung
VirtualPC
Waschmaschine
Tagesschau
mehr nicht.
ZitatAuch mit meinem vorherigen Menü gibt es ein paar Probleme bei der Geschwindigkeit. Muss heufig FHEM neu starten.
Das hatte ich nur mit der ersten Version... Aktuell keine Hänger und damit keine Neustarts.
Zitat von: igami am 05 Oktober 2017, 15:32:21
"zurück" könnte man auch in den Meta Dialog integrieren. Es sollte ja pro Benutzer immer nur ein Dialog aktiv sein. Dann muss man ja nur für diesen Dialog "set <Dialog> say @$recipient {perl Code für history ohne den letzten Teil}".
Ich teste das Mal, wenn ich wieder zu Hause bin.
Funktioniert soweit ganz gut :)
Für die DEF zum ergänzen:
"zurück": {
"commands": "set $recipient_history=.+ say @$recipient {(ReadingsVal($DEV, '$recipient_history', '') =~ m/(.+)\\|.+$/;; return $2 ? $2 : $1;;)}"
},
Zitat von: igami am 05 Oktober 2017, 15:32:21
"zurück" könnte man auch in den Meta Dialog integrieren. Es sollte ja pro Benutzer immer nur ein Dialog aktiv sein. Dann muss man ja nur für diesen Dialog "set <Dialog> say @$recipient {perl Code für history ohne den letzten Teil}".
Ich teste das Mal, wenn ich wieder zu Hause bin.
Spricht aus eurer Sicht noch etwas dagegen das Modul offiziell einzuchecken?
Dann würde ich noch ein bisschen was am logverhalten basteln und die Commandref fertig machen.
da es bei mir nun auch inline funktioniert, finde ich, dass nichts dagegen spricht. Eine Frage jedoch: Könnte man den Meta-Dialog irgendwie autocreaten lassen? oder über ein Codewort, so müssten sich andere nicht um diesen kümmern? Oder vielleicht sogar ein autocreate, sobald das erste msgDialog-Device gebaut wird.
Übrigens danke dafür ;D
ZitatKönnte man den Meta-Dialog irgendwie autocreaten lassen? oder über ein Codewort, so müssten sich andere nicht um diesen kümmern? Oder vielleicht sogar ein autocreate, sobald das erste msgDialog-Device gebaut wird.
Gute Idee! Danach muss allerdings noch das msgConfig device mit
userattr evalSpecials:textField-long
und Eintragen von
me=<Startwort>
TelegramBot=<Telegram-device>
in evalSpecials angepasst werden oder - falls noch nicht vorhanden - angelegt werden.
Und da ist dann spätestens Handarbeit nötig. Finde ich allerdings nicht so dramatisch ;)
Zitat von: binford6000 am 05 Oktober 2017, 15:53:59
Das hatte ich nur mit der ersten Version... Aktuell keine Hänger und damit keine Neustarts.
Hab die Version aus der Antwort #27 vom 02 Oktober 2017, 17:05:12. Gibt es da eine neuere?
Zitat von: binford6000 am 05 Oktober 2017, 20:15:13
me=<Startwort>
TelegramBot=<Telegram-device>
Eventuell bei der Definition mitgeben?
Dann ist es aber leider nicht mehr Systemübergreifend (WhatsApp und co.)
ZitatHab die Version aus der Antwort #27 vom 02 Oktober 2017, 17:05:12. Gibt es da eine neuere?
Die hab ich auch.
ZitatEventuell bei der Definition mitgeben?
Dann ist es aber leider nicht mehr Systemübergreifend (WhatsApp und co.)
Ja genau. Das war ja auch der Ansatz von igami möglichst alle Push-Dienste abzudecken.
Evtl. auch bei der Definition den Dienst als Parameter abfragen und den Eintrag entsprechend setzen...
Zitat von: Andy89 am 05 Oktober 2017, 18:37:28
da es bei mir nun auch inline funktioniert, finde ich, dass nichts dagegen spricht. Eine Frage jedoch: Könnte man den Meta-Dialog irgendwie autocreaten lassen? oder über ein Codewort, so müssten sich andere nicht um diesen kümmern? Oder vielleicht sogar ein autocreate, sobald das erste msgDialog-Device gebaut wird.
Ich würde in der Commandref lieber nur ein paar Beispiele machen und auf diesen Thread verweisen.
So kann jeder entweder einfach die Vorlage von hier als Raw Definition kopieren oder nach seinen vorlieben anpassen.
Wie Flipper92 ja auch schon gesagt hat ist es nur Telegram Spezifisch. Prinzipiell kann es ja aber auch mit Jabber und Whatsapp verwendet werden.
Ich denke ich werde noch drei weitere Thread erstellen. Jeweils speziell für Telegram, Jabber und WhatsApp.
Zitat von: Flipper92 am 05 Oktober 2017, 20:22:33
Hab die Version aus der Antwort #27 vom 02 Oktober 2017, 17:05:12. Gibt es da eine neuere?
Nein, das ist die aktuelle. Ich denke, dass ich am Wochenende dazu komme es einzuchecken.
Laut aktueller Statistik ist Telegram am weitesten verbreitet:
TelegramBot 907 (FHEM-Installationen)
yowsup 107
Jabber 53
Was ist mit denen beiden?
Pushover 846
Pushbullet 316
Gibt es dort keine Chatbot-Funktionalität?
Zitat von: binford6000 am 05 Oktober 2017, 20:49:43
Was ist mit denen beiden?
Pushover 846
Pushbullet 316
Gibt es dort keine Chatbot-Funktionalität?
Die funktionieren meines Wissens nach nur in eine Richtung: FHEM => Handy
Der einzige Rückkanal besteht darin die Nachricht als gelesen zu markieren.
"zurück": {
"commands": "set $recipient_history=.+ say @$recipient {(ReadingsVal($DEV, '$recipient_history', '') =~ m/(.+)\\|.+$/;; return $2 ? $2 : $1;;)}"
},
Super! :D
Hi,
habs jetzt auch mal getestet, funktioniert soweit ganz gut. Da kann ich meine ganzen DOIF-Dialoge nach und nach ersetzen.
Komisch ist nur: auf Waschmaschine triggert er (und mein DOIF-Dialog parallel ;D ) nur im meta-Dialog mag er den Bot-Namen nicht als Trigger :o abbrechen und beenden gehen. Im Device stehen aber alle 3 als TRIGGER.
Falls einer ne zündenden Idee hat ohne komplette LIST etc nur her damit ansonst spiele ich noch etwas rum damit rum :-)
Grüße
Achim
Steht denn der Botname im Trigger oder nur %me%?
Hi,
der Botname, der kommt auch im state passend zum Roommate an. Schreibe ich beenden müsste er das ja eigentlich mit Botname, Dialog beendet quittieren, es kommt aber auch nur Dialog beendet.
die fehlenden Attr zum DBlog kann damit nix zu tun haben? da hat er gemeckert, nutze ich ja nicht ;-)
Hier mal ein Verbose 5 in dem interessanterweise noch die Waschmaschine auftaucht ;-)
2017.10.06 12:28:21 4: msgDialog (meta_Dialog) triggered by "rr_Achim fhemMsgRcvPush: Bot"
2017.10.06 12:28:21 5: msgDialog (meta_Dialog)
entering msgDialog_progress
recipients: rr_Achim
message: Bot
force: 0
2017.10.06 12:28:21 4: msgDialog (meta_Dialog) - return from command "deletereading TYPE=msgDialog rr_Achim_history": Deleted reading rr_Achim_history for device meta_Dialog
2017.10.06 12:28:21 3: get TYPE=msgDialog:FILTER=NAME!=meta_Dialog:FILTER=allowed=.*(rr_Achim|everyone).* trigger : Waschmaschine
2017.10.06 12:28:22 3: msg rr_Achim: ID=*********** TYPE=push ROUTE=***** RECIPIENT=@******* STATUS=OK PRIORITY=0 TITLE='' MSG='(Waschmaschine)
(abbrechen)
Ich kann folgendes für dich tun:'
2017.10.06 12:28:22 1: PERL WARNING: substr outside of string at FHEM/HttpUtils.pm line 557.
2017.10.06 12:28:22 1: PERL WARNING: Use of uninitialized value $data in numeric eq (==) at FHEM/HttpUtils.pm line 558.
und hier vom beenden
2017.10.06 12:32:29 4: msgDialog (meta_Dialog) triggered by "rr_Achim fhemMsgRcvPush: beenden"
2017.10.06 12:32:29 5: msgDialog (meta_Dialog)
entering msgDialog_progress
recipients: rr_Achim
message: beenden
force: 0
2017.10.06 12:32:29 4: msgDialog (meta_Dialog) - return from command "deletereading TYPE=msgDialog rr_Achim_history": Deleted reading rr_Achim_history for device meta_Dialog
2017.10.06 12:32:29 3: msg rr_Achim: ID=***********TYPE=push ROUTE=******** RECIPIENT=@******* STATUS=OK PRIORITY=0 TITLE='' MSG='(Bot)
Dialog beendet.'
ich hoffe ich hab nicht zuviel ****** ;D
Grüße
Achim
oha.... nettes modul.
das wird mich wieder einige wochenenden kosten :)
(verbunden mit der schon lange geplanten umstellung auf telegram....)
danke igami ;D
(nein, das soll keine schuldzuweisung bzw. ironisch gemeint sein, sondern ein herzliches danke. sowas hab ich schon länger gesucht!)
@Achim: hast du im TelegramBot das Attribut utf8specials auf 1 gesetzt?
@Nils: ein Umstieg auf Telegram ist nicht zwingend erforderlich, auch wenn ich den Messenger WhatsApp vorziehe :)
Zitat von: igami am 06 Oktober 2017, 14:44:54
@Achim: hast du im TelegramBot das Attribut utf8specials auf 1 gesetzt?
Perfekt, das wars, hatte ich ausgelassen da im Botnamen keine Umlaute und bisher auch keine Probleme damit :-)
Hi.
Habe mal zwei Fragen.
1. Wo oder wie kann ich UTF 8 einschalten, finde das nicht.
2. Warum werden im meta_Dialog meine eigenen Dialoge nicht angezeigt?
Ich vermute, es liegt an dem UTF 8.
Zitat von: ErzGabriel am 08 Oktober 2017, 12:32:45
Hi.
Habe mal zwei Fragen.
1. Wo oder wie kann ich UTF 8 einschalten, finde das nicht.
Du gehst in das TelegramBot device und setzt dort das Attribut utf8specials auf 1.
Es kann zu Problemen mit Nachrichten kommen, wenn ein Umlaut enthalten ist. Bei "Ich kann folgendes für dich tun" ist das der Fall.
Jo, da habe ich das gesucht aber ist nicht vorhanden, was mich ein wenig stutzig macht.
Aber im meta Dialog wird auch mein Testeintrag mit der Waschmaschine nicht angezeigt, könnte das auch dadran liegen, das ich andere Dialoge mit Umlauten habe?
Zitat von: ErzGabriel am 08 Oktober 2017, 12:57:07
Jo, da habe ich das gesucht aber ist nicht vorhanden, was mich ein wenig stutzig macht.
ggf. mal den TelegramBot updaten
Zitat von: ErzGabriel am 08 Oktober 2017, 12:57:07
Aber im meta Dialog wird auch mein Testeintrag mit der Waschmaschine nicht angezeigt, könnte das auch dadran liegen, das ich andere Dialoge mit Umlauten habe?
Was meinst du mit "wird nicht angezeigt"? Du bekommst eine Antwort vom Bot, aber ohne "Waschmachine"?
Du hast das Modul noch nicht eingecheckt, oder? Zumindest kann ich es aktuell nicht finden, daher werde ich mir mal die Version hier aus dem Thread runterladen und installieren. Bin gespannt.
Zitat von: Amenophis86 am 08 Oktober 2017, 18:58:40
Du hast das Modul noch nicht eingecheckt, oder? Zumindest kann ich es aktuell nicht finden, daher werde ich mir mal die Version hier aus dem Thread runterladen und installieren. Bin gespannt.
Habe ich leider nicht geschafft.
Es wird dann aber auch noch ein paar kleine Änderungen geben, aber ich bin noch nicht soweit diese schon mitzuteilen.
Kein Stress, hab es gestern auch doch nicht mehr geschafft es zu installieren. Scheint ja doch ein bisschen umfangreicher, als gedacht. Da war die Zeit dann doch zu knapp :)
Zitat von: igami am 06 Oktober 2017, 14:49:02
@Nils: ein Umstieg auf Telegram ist nicht zwingend erforderlich, auch wenn ich den Messenger WhatsApp vorziehe :)
ja ist mir bewusst.
nur habe ich den umstieg auf telegram schon länger auf der liste. whatsapp bzw. yowsup ist ja schon immer so ne sache. momentan funktioniert es bei mir.
whatsapp ist auch sonst der Messanger meiner Wahl :)
Zitat von: Flipper92 am 05 Oktober 2017, 15:51:25
Bei mir macht es immer wieder Probleme mit der Performance.
Gestern hatte ich ein "Menü" das mein FHEM immer abstürzen ließ.
Auch mit meinem vorherigen Menü gibt es ein paar Probleme bei der Geschwindigkeit. Muss heufig FHEM neu starten.
Darf ich mich für die Aussage entschuldigen?
Scheinbar war es das FireTV Modul in Verbindung mit dem Precent.
Werde in absehbarer Zeit das msgDia wieder aktivieren.
Ich hab ein paar Fragen:
1. Gibt es aktuell die Möglichkeit von "Waschmaschine" zum "meta_Dialog" zu wechseln, so das die Waschmaschine verschwindet und kein neuer Dialog begonnen wird?
2. und gibt es die Möglichkeit ein Menü (z.B. "Waschmaschine") zu aktualisieren? Sich selbst wieder aufzurufen z.B. mit "(aktualisieren:Waschmaschine) " funktioniert nicht.
Edit:
"aktualisieren": {
"commands": [
"set $SELF say @$recipient Waaschmaschine"
]
}
Das bringt bei mir den Erfolg den ich wollte.
Geht sicher auch besser.
Kann man dies nun irgendwie auch automatisieren? so das alle x Sekunden die nachricht aktuallisiert wird?
3. Wie kann man am besten die Telegram Favoriten ("cmdFavorites") vom Menü aus aufrufen? Will beides als Inline verwenden.
4. Hat jemand schon "TBot_List" mit diesem Modul hübscher gekoppelt?
5. Nach welchen Kriterien wird das meta_Dialog sortiert?
Will dort gerne eine eigene Reihenfolge festlegen. So das die wichtigen Sachen oben stehen.
Nur als hint:
Habe jetzt es jetzt stundenlang probiert und dabei festgestellt, dass ich ein event-on-change-reading state im Bewohner hatte. Das muss man anpassen, sonst antwortet der Bot nichts ::)
Zitat von: Flipper92 am 10 Oktober 2017, 08:23:42
Darf ich mich für die Aussage entschuldigen?
Scheinbar war es das FireTV Modul in Verbindung mit dem Precent.
Werde in absehbarer Zeit das msgDia wieder aktivieren.
Freut mich zu hören.
Zitat von: Flipper92 am 10 Oktober 2017, 08:23:42
Ich hab ein paar Fragen:
1. Gibt es aktuell die Möglichkeit von "Waschmaschine" zum "meta_Dialog" zu wechseln, so das die Waschmaschine verschwindet und kein neuer Dialog begonnen wird?
Der TelegramBot kann Nachrichten ändern oder Löschen. Vielleicht kannst du aus meinen Beitrag #10 (https://forum.fhem.de/index.php/topic,77297.msg692609.html#msg692609) etwas machen.
Zitat von: Flipper92 am 10 Oktober 2017, 08:23:42
2. und gibt es die Möglichkeit ein Menü (z.B. "Waschmaschine") zu aktualisieren? Sich selbst wieder aufzurufen z.B. mit "(aktualisieren:Waschmaschine) " funktioniert nicht.
Edit:
"aktualisieren": {
"commands": [
"set $SELF say @$recipient Waaschmaschine"
]
}
Das bringt bei mir den Erfolg den ich wollte.
Geht sicher auch besser.
Kann man dies nun irgendwie auch automatisieren? so das alle x Sekunden die nachricht aktuallisiert wird?
Nutze ich selbst auch so. Du kannst in die commands ein sleep einbauen was den Dialog wieder aufruft.
ACHTUNG: Das führt zu einer Schleife.
Zitat von: Flipper92 am 10 Oktober 2017, 08:23:42
3. Wie kann man am besten die Telegram Favoriten ("cmdFavorites") vom Menü aus aufrufen? Will beides als Inline verwenden.
Was meinst du damit? Ich verwende selbst keine cmdFavourites, sondern mache alles über msgDialog.
Zitat von: Flipper92 am 10 Oktober 2017, 08:23:42
4. Hat jemand schon "TBot_List" mit diesem Modul hübscher gekoppelt?
Ich nutze PostMe mit msgDialog, aber ohne TBot_List
defmod Einkaufsliste_Dialog msgDialog { \
"Einkaufsliste": {\
"message": [\
"(Waren hinzufügen) ", \
"(Waren entfernen) ", \
"(einkaufen) ", \
"(abbrechen) ",\
"{my $content = (split(': ', fhem('get %PostMe% list %list%')))[1];;;; return('Keine Einträge vorhanden') unless($content);;;; return(join('\n', split(',', $content)));;;;}"\
],\
"Waren hinzufügen": {\
"message": [\
"Bitte jede Ware als neue Nachricht hinzufügen.",\
"Das hinzufügen von Waren durch \"/beenden\" beenden."\
],\
"Ware hinzufügen": {\
"match": "[^/]+",\
"commands": [\
"set %PostMe% add %list% $message",\
"setreading $SELF $recipient_history Einkaufsliste|Waren hinzufügen"\
]\
}\
},\
"Waren entfernen": {\
"message": [\
"{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1]), 'beenden'). ') ')}",\
"Welche Ware möchtest du entfernen?"\
],\
"Ware entfernen": {\
"match": "^(?!beenden).+",\
"commands": [\
"set %PostMe% remove %list% $message",\
"set $SELF say @$recipient Einkaufsliste|Waren entfernen"\
]\
}\
},\
"einkaufen": {\
"commands": [\
"setreading $SELF $recipient_history Einkaufsliste|noch einzukaufen"\
],\
"message": [\
"{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1])) . ') ')}",\
"(beenden) ",\
"Bitte die Waren der Reihenfolge nach auswählen in der sie eingekauft werden."\
]\
},\
"noch einzukaufen": {\
"message": [\
"{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1])) . ') ')}",\
"(beenden) ",\
"Noch einzukaufen:"\
],\
"Ware eingekauft": {\
"match": "^(?!beenden).+",\
"commands": [\
"set %PostMe% remove %list% $message",\
"set $SELF say @$recipient Einkaufsliste|noch einzukaufen"\
]\
}\
} \
}\
}
attr Einkaufsliste_Dialog evalSpecials PostMe=PostMe\
list=Einkaufsliste
Zitat von: Flipper92 am 10 Oktober 2017, 08:23:42
5. Nach welchen Kriterien wird das meta_Dialog sortiert?
Will dort gerne eine eigene Reihenfolge festlegen. So das die wichtigen Sachen oben stehen.
Wird mit perl sort sortiert, alphabetisch, case sensitive. Eine eigene Sortierung würde ich in die myUtils auslagern.
Zitat von: andy19850 am 10 Oktober 2017, 14:07:49
Nur als hint:
Habe jetzt es jetzt stundenlang probiert und dabei festgestellt, dass ich ein event-on-change-reading state im Bewohner hatte. Das muss man anpassen, sonst antwortet der Bot nichts ::)
Werde ich in der commandref als Hinweis platzieren. Habe leider momentan nur wenig Zeit um daran weiter zu arbeiten.
Ich würde mich übrigens sehr freuen, wenn jemand einen Wiki Artikel für das Modul schreiben würde. Korrekturlesen würde ich den auch wohl :)
Danke für deine Antwort.
Ich werde mir deine Anregungen mal anschauen.
Bin leider kein super Programmiere, sondern kann nur gut kopieren und anpassen. ;D ;D
Ich bin am überlegen ob es nicht Sinn macht irgendwo ein paar Dialoge zu sammeln.
Denn es ist schon mehr programmier arbeit von Nöten als ein einfaches Device setzen.
Zumindest finde ich es aktuell als eins der aufwändigsten Module die ich aktuell verwende.
Sollte aber übersichtlich und kommentierbar bleiben.
Zitat von: igami am 12 Oktober 2017, 20:18:13
Was meinst du damit? Ich verwende selbst keine cmdFavourites, sondern mache alles über msgDialog.
Ich wollte mir nur die Arbeit sparen ein eigenes Dialog dafür zu erstellen.
Da ich davor schon die cmdFavourites hatte wollte ich diese nur noch einbinden.
In diesem Fall werde ich sie aber vermutlich abschalten.
Zitat von: igami am 12 Oktober 2017, 20:18:13
Wird mit perl sort sortiert, alphabetisch, case sensitive. Eine eigene Sortierung würde ich in die myUtils auslagern.
Nach Device oder nach Befehl?
Grüße
ZitatNach Device oder nach Befehl?
Müsste nach Name sortiert sein. Ich verwende noch Emoticons davor. Dann wird natürlich nach dem Unicode sortiert:
1F3E0Haus,
1F4A1Beleuchtung
1F4F7Cam
...
Siehe auch hier: https://apps.timwhitlock.info/emoji/tables/unicode (https://apps.timwhitlock.info/emoji/tables/unicode) ;)
VG Sebastian
Es werden die trigger sortiert
Habe das Modul nun offiziell eingecheckt. Wer nicht bis morgen warten möchte: SVN 76_msgDialog.pm (https://svn.fhem.de/trac/export/15262/trunk/fhem/FHEM/76_msgDialog.pm)
Änderungen gegenüber der vorherigen Version:
- im msgConfig device gibt es nun das Attribut msgDialog_evalSpecials anstelle von evalSpecials.
@igami
ZitatIch würde mich übrigens sehr freuen, wenn jemand einen Wiki Artikel für das Modul schreiben würde. Korrekturlesen würde ich den auch wohl :)
Ich würde mich da bereit erklären! ;)
Das Logging im meta_Dialog ist noch aktiv - dachte Du wolltest das noch ändern...:
2017.10.16 13:53:10 3: get TYPE=msgDialog:FILTER=NAME!=meta_Dialog:FILTER=allowed=.*(rr_Sebastian|everyone).* trigger :
Verreist
Beleuchtung
Fahrzeiten
Gast
Haus-Automatisierung
Kamera
FHEM-Log
Tagesschau
VirtualPC
ZitatIch bin am überlegen ob es nicht Sinn macht irgendwo ein paar Dialoge zu sammeln.
@Flipper92: Gute Idee! Hier im Forum und/oder im Wiki...
VG Sebastian
Die Meldung hat verbose 3 und das ist so gewollt
Edit: Ich muss mich korrigieren: Die Meldung kommt nicht aus dem Modul.
ZitatEdit: Ich muss mich korrigieren: Die Meldung kommt nicht aus dem Modul.
Korrekt.
attr global verbose 2
lässt die Logeinträge bei jedem Menü-Aufruf verschwinden.
VG Sebastian
Hi igami, gibt es eine Möglichkeit aus einem beliebigen Dialog direkt in den Meta-Dialog zu wechseln? Also eine Art "Hauptmenü" zur Anzeige aller verfügbaren Dialoge?
Manuell eingegeben funktioniert es. Aber als Menüpunkt innerhalb eines Dialogs nicht. Dann erscheint nur der Menüpunkt für den Meta-Dialog und nicht die Auflistung aller Dialoge...
Und "zurück" funktioniert ja nur innerhalb eines Dialogs...
VG Sebastian
Zitat von: binford6000 am 19 Oktober 2017, 20:39:45
Hi igami, gibt es eine Möglichkeit aus einem beliebigen Dialog direkt in den Meta-Dialog zu wechseln? Also eine Art "Hauptmenü" zur Anzeige aller verfügbaren Dialoge?
Manuell eingegeben funktioniert es. Aber als Menüpunkt innerhalb eines Dialogs nicht. Dann erscheint nur der Menüpunkt für den Meta-Dialog und nicht die Auflistung aller Dialoge...
Was spricht gegen "set meta_Dialog say @$recipient %me%" aus einem anderen Dialog raus?
ZitatWas spricht gegen "set meta_Dialog say @$recipient %me%" aus einem anderen Dialog raus?
Moin, soweit war ich auch schon. Aber Dann erscheint nur der Menüpunkt für den Meta-Dialog und nicht die Auflistung aller Dialoge...
Ich hab mal Screenshots angehängt...
VG Sebastian
Zitat von: binford6000 am 19 Oktober 2017, 20:39:45
Also eine Art "Hauptmenü" zur Anzeige aller verfügbaren Dialoge?
Manuell eingegeben funktioniert es. Aber als Menüpunkt innerhalb eines Dialogs nicht.
Ich hab bei mir in einem Menü folgendes laufen:
"(zurück:%me%) ",
Dies als "Taste". Also im gesamten:
"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%) ",
"Aktuell ist die Heizungsautomation: [Thermostat.Automation:state]"
],
Kannst ja Mal testen.
Zitat von: igami am 12 Oktober 2017, 20:18:13
defmod Einkaufsliste_Dialog msgDialog { \
"Einkaufsliste": {\
"message": [\
"(Waren hinzufügen) ", \
"(Waren entfernen) ", \
"(einkaufen) ", \
"(abbrechen) ",\
"{my $content = (split(': ', fhem('get %PostMe% list %list%')))[1];;;; return('Keine Einträge vorhanden') unless($content);;;; return(join('\n', split(',', $content)));;;;}"\
],\
"Waren hinzufügen": {\
"message": [\
"Bitte jede Ware als neue Nachricht hinzufügen.",\
"Das hinzufügen von Waren durch \"/beenden\" beenden."\
],\
"Ware hinzufügen": {\
"match": "[^/]+",\
"commands": [\
"set %PostMe% add %list% $message",\
"setreading $SELF $recipient_history Einkaufsliste|Waren hinzufügen"\
]\
}\
},\
"Waren entfernen": {\
"message": [\
"{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1]), 'beenden'). ') ')}",\
"Welche Ware möchtest du entfernen?"\
],\
"Ware entfernen": {\
"match": "^(?!beenden).+",\
"commands": [\
"set %PostMe% remove %list% $message",\
"set $SELF say @$recipient Einkaufsliste|Waren entfernen"\
]\
}\
},\
"einkaufen": {\
"commands": [\
"setreading $SELF $recipient_history Einkaufsliste|noch einzukaufen"\
],\
"message": [\
"{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1])) . ') ')}",\
"(beenden) ",\
"Bitte die Waren der Reihenfolge nach auswählen in der sie eingekauft werden."\
]\
},\
"noch einzukaufen": {\
"message": [\
"{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1])) . ') ')}",\
"(beenden) ",\
"Noch einzukaufen:"\
],\
"Ware eingekauft": {\
"match": "^(?!beenden).+",\
"commands": [\
"set %PostMe% remove %list% $message",\
"set $SELF say @$recipient Einkaufsliste|noch einzukaufen"\
]\
}\
} \
}\
}
attr Einkaufsliste_Dialog evalSpecials PostMe=PostMe\
list=Einkaufsliste
Wie fühlst du da neue Produkte hinzu?
Mit "Käse"{neue Nachricht}"brot" usw.
Oder setzt du da noch was davor wie z.b. / oder + ?
Ich hab gerade noch das Problem, das ich nicht msgDialog_evalSpecials wählen kann, sondern nur evalSpecials. Ich Versuch Mal das Modul neu zu installieren.
Edti: gerade neu runter geladen, bei mir heißt das Attribut weiter evalSpecials. Liegt es daran, das es vor dem Update schon gesetzt war?
@Flipper92:
Zitat"(zurück:%me%) "
Bedeutet bei mir dass eine Nachricht "zurück:Q" gesendet wird und danach nichts passiert.
Ich bekomme partout kein "Hauptmenü" hin. Naja, ein Klick mehr macht's ja jetzt auch nicht,
aber schick wäre es schon ;)
@igami:
Wollte aus o.g. Thema mal mein %me% ändern um zu sehen ob es daran liegen könnte.
Beim verändern von msgDialog_evalSpecials in globalMsg bekomme ich diesen Fehler:
globalMsg: unknown attribute msgDialog_evalSpecials. Type 'attr globalMsg ?' for a detailed list.
Im Raw ändern geht auch nicht:
Global configuration device already defined: globalMsg
Konnte es mit userattr globalMsg msgDialog_evalSpecials dann wieder veränderbar machen...
Zitat von: binford6000 am 20 Oktober 2017, 08:00:26
Moin, soweit war ich auch schon. Aber Dann erscheint nur der Menüpunkt für den Meta-Dialog und nicht die Auflistung aller Dialoge...
Ich hab mal Screenshots angehängt...
VG Sebastian
Du bekommst ja ein Keyboard angezeigt. Da kann irgendwas nicht passen. Poste mal bitte ein list von dem Dialog in den du es einbauen möchtest.
Zitat von: Flipper92 am 20 Oktober 2017, 21:04:45
Wie fühlst du da neue Produkte hinzu?
Mit "Käse"{neue Nachricht}"brot" usw.
Oder setzt du da noch was davor wie z.b. / oder + ?
Einfach jedes Element als neue Nachricht und dann mit /beenden das Hinzufügen beenden.
Zitat von: Flipper92 am 20 Oktober 2017, 21:04:45
Ich hab gerade noch das Problem, das ich nicht msgDialog_evalSpecials wählen kann, sondern nur evalSpecials. Ich Versuch Mal das Modul neu zu installieren.
Edti: gerade neu runter geladen, bei mir heißt das Attribut weiter evalSpecials. Liegt es daran, das es vor dem Update schon gesetzt war?
Ich gucke mir das morgen noch mal an, eigentlich sollten die Attribute über das userattr im msgConfig device verfügbar sein. Ansonsten wie binford6000 bitte erstmal manuell hinzufügen.
ZitatDu bekommst ja ein Keyboard angezeigt. Da kann irgendwas nicht passen. Poste mal bitte ein list von dem Dialog in den du es einbauen möchtest.
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?
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 ;)
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.
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.
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
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?
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?
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.
warum ein perl sleep? Einfach "sleep 10;; set $SELF ..."
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)
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
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
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
Sehr schön, dass sich gegenseitig geholfen wird :)
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
Das hier, tut was es soll:
"Send Status Alarmanlage": {
"message": [
"(%me%) ",
"Status Alarmanlage:",
"{fhem 'list NAME=AAA:FILTER=level6=.* level6'}"
]
}
Tschau Peter
Noch einmal ich ;D
Jetzt beim Versenden eines Plots...
Laut Wiki Beispiel, habe ich das so umgesetzt:
"Steckdose Schuppen Verlaufsdiagramm": {
"commands": "set %TelegramBot% cmdSend {plotAsPng('%aussen_plot%')}",
"message": [
"(%me%) $message",
]
},
Leider bekommt dann die Nachricht immer der defaultPeer über Telegram. Zum einen soll der richtige User des Dialoges die Nachricht bekommen, zum anderen möchte ich das nicht auf Telegram festnageln, sondern flexibel lassen.
Das hier hat mich auch nicht weiter gebracht, hier kommt kein Plot, sondern nur Müll im Logfile, hm:
"Steckdose Schuppen Verlaufsdiagramm": {
"message": [
"(%me%) $message",
"{set %TelegramBot% cmdSend {plotAsPng('%aussen_plot%')}}"
]
},
Wie macht ihr das, Plots (oder Bilder von z. Bsp. einer IPCam) per Push flexibel an den richtigen Teilnehmer???
Danke Peter
ZitatWie macht ihr das, Plots (oder Bilder von z. Bsp. einer IPCam)...???
Hilft Dir wahrscheinlich nicht wirklich weiter - ich lasse mir bereits von mehreren Stellen ein IPCam Bild schicken. Daher ganz einfach via dummy/notify:
{"Kamerabild":{
"commands": "set ipcamshot on",
"message": [
"(%me%) ",
"Moment, ich schicke Dir ein Bild..."
]
}
}
Der Code für ein IPCam Bild ist ja dann trivial:
{fhem "get Tablet.PCIPCam image; sleep 5; set <TelegramBot> sendImage ./www/snapshots/Tablet.PCIPCam_snapshot.jpg";}
Zitat...per Push flexibel an den richtigen Teilnehmer???
- Arbeite momentan nur mit Telegram
- Bin der einzige Empfänger
VG Sebastian
Aus der TelegramBot Commandref:
cmdSend [ @<peer1> ... @<peerN> ] <fhem command>
Danke für Eure Antworten!
Mir ist schon klar (hätte ich besser formulieren sollen, sorry!), wie ich Telegram zum Versenden von Bildern/SVGs bringe, das nutze ich auch bereits. Auch das 'cmdSend @peer' ist mir klar. Wo ich Probleme habe:
Ich bekomme zwar aus '$recipient:' mittels
{(split(":",AttrVal('rr_Peter','msgContactPush','')))[1]}
bzw. dann im Dialog
{(split(":",AttrVal('$recipient','msgContactPush','')))[1]}
an den gewünschten Telegram Empfänger, der den Dialog gerade bedient.
Aber, dem so ermittelten Telegram Empfänger eine Testnachricht zuzustellen, das bekomme ich nicht auf die Reihe:
set TeleBot message {(split(":",AttrVal('rr_Peter','msgContactPush','')))[1]} Testnachricht
... stellt mir den kompletten Text ab '{' als Nachricht zu; wertet also nicht, wie von mir gedacht/erwünsch, einfach den Perl Code aus und benutzt das Ergebnis in der Befehlszeile.
Als Ziel habe ich mir so eine Kombination vorgestellt:
set TeleBot cmdSend {(split(":",AttrVal('rr_Peter','msgContactPush','')))[1]} {plotAsPng('SVG_FileLog_hc_Steckdose.EXT.Schuppen')}
oder
set TeleBot cmdSend {((split(":",AttrVal('rr_Peter','msgContactPush','')))[1]);;plotAsPng('SVG_FileLog_hc_Steckdose.EXT.Schuppen')}
Wobei ich dann die fixen Angaben noch variabel machen würde. ... aber, klappt ja so nicht, hm.
Meine Frage an Euch: Wie kann ich die ermittelte Telegram ID aus dem ROOMMATE Device des aktuellen Dialog Nutzers sinnvoll mit 'Telebot cmdSend @xxxx' verbandeln?
Zuerst hatte ich mir vorgestellt 'msg' zum Versenden zu benutzen, also 'msg push @rr_Peter Testnachricht'. Das klappt auch, allerdings nur bei Text und nicht bei Bildern. Damit wäre das pro User flexibel, je nachdem welcher Messenger hat vom User benutzt wird. Davon (verschiedene Messenger) habe ich mich bei den Grafiken schon verabschiedet.
Danke Peter
Ich denke es ist sinnvoll, wenn man mehrere Nachrichten angeben könnte
...
"message": [
["TelegramBot_MTYPE=cmdSend {plotAsPng('SVG_FileLog_hc_Steckdose.EXT.Schuppen')}"],
["Hier das angeforderte Bild"]
]
Alternativ kann man das auch mit dem set say erreichen
{
"Bild": {
"commands": "set $SELF say @$recipient Bild|senden",
"message": "Moment, ich schicke Dir ein Bild...",
"senden": {
"message": "TelegramBot_MTYPE=cmdSend {plotAsPng('SVG_FileLog_hc_Steckdose.EXT.Schuppen')}"
}
}
}
Hi igami!
Bei Deinem ersten Codeschnipsel, war ich mir nicht sicher, ob das schon funktioniert, oder ob das nur eine Überlegung von Dir ist, das Modul zu erweitern/zu verändern. Ausprobiert habe ich es trotzdem...
"Steckdose Schuppen Verlaufsdiagramm": {
"commands": "set %TelegramBot% message %TelegramBot% $recipient",
"message": [
["TelegramBot_MTYPE=cmdSend {plotAsPng('SVG_FileLog_hc_Steckdose.EXT.Schuppen')}"],
["Hier das angeforderte Bild"],
"(%me%) $message"
]
},
... bringt mir im Telegram zwei 'ARRAY (0x...)' Zeilen zurück und nicht das Image.
"Steckdose Schuppen Verlaufsdiagramm": {
"commands": "set %TelegramBot% message %TelegramBot% $recipient",
"message": [
"TelegramBot_MTYPE=cmdSend {plotAsPng('SVG_FileLog_hc_Steckdose.EXT.Schuppen')}",
"Hier das angeforderte Bild",
"(%me%) $message"
]
},
... bring 'Unknown command {plot...' im Telegram Interface.
Verwende ich das hier:
"Steckdose Schuppen Verlaufsdiagramm": {
"commands": "set $SELF say @$recipient 'Steckdose Schuppen Verlaufsdiagramm|senden'",
"message": "Steckdose Schuppen Verlaufsdiagramm",
"senden": {
"message": "TelegramBot_MTYPE=cmdSend {plotAsPng('SVG_FileLog_hc_Steckdose.EXT.Schuppen')}"
}
},
... wirkt das 'set $self say...' nicht, ich bekomme nur die erste 'message' (Steckdose Schuppen Verlaufsdiagramm) im Telegram.
Danke Peter
... läßt mich nicht in Ruhe, das Thema ;D
Das hier klappt; sprich das SVG landet beim richtigen Empfänger:
"Steckdose Schuppen Verlaufsdiagramm": {
"message":
"TelegramBot_MTYPE=cmdSend {plotAsPng('SVG_FileLog_hc_Steckdose.EXT.Schuppen')}"
},
Sobald ein zweiter Part '(%me%)' als Nachricht hinzukommt, hagelt es 'Unknown command...' Fehler im Telegram Interface.
@igami
Ich denke, das meintest Du mit Deinem ersten Codebeispiel - Du willst das Anpassen?
Danke und Tschau,
Peter
defmod plot msgDialog {\
"plot": {\
"commands": "set $SELF say @$recipient plot|send",\
"message": "das war das Bild",\
"send": {\
"message": "TelegramBot_MTYPE=cmdSend {plotAsPng('Waschkeller_washer_SVG')}"\
}\
}\
}
das funktioniert.
Ja, das mit den verschachtelten messages will ich noch einbauen.
Ich wollte heute endlich auch mal das System testen, aber ich bekomme es nicht hin. Ich habe auf meinem Test-System einen Roomate: rr_Etienne diesem kann ich auch mittels msg @rr_Etienne Hallo
direkt eine Pushnachricht schicken. Allerdings wenn ich den trigger "test" des folgenden MetaDialog an den Bot sende passiert nix. Hier der Metadialog fast komplett aus der CommandRef kopiert. Habe extra mal aus %me% als trigger "test" gemacht:
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."
]
}
}
MSGCOMMAND msg push \@$recipients $message
NAME meta_Dialog
NOTIFYDEV TYPE=(ROOMMATE|GUEST)
NR 31
NTFY_ORDER 50-meta_Dialog
STATE Initialized
TRIGGER abbrechen,beenden,test,zurück
TYPE msgDialog
READINGS:
2017-10-29 19:53:49 state Initialized
Attributes:
allowed rr_Etienne
evalSpecials me=test
TelegramBot=TelegramBot
#
Weiterhin wurde bei TelegramBot UTF8 auf 1 gesetzt und die Nachricht an den Bot ist in TelegramBot zu lesen.
Werden denn Events für die Empfangene Nachricht im rr_Etienne Device erzeugt?
Zitat von: igami am 29 Oktober 2017, 19:23:12
defmod plot msgDialog {\
"plot": {\
"commands": "set $SELF say @$recipient plot|send",\
"message": "das war das Bild",\
"send": {\
"message": "TelegramBot_MTYPE=cmdSend {plotAsPng('Waschkeller_washer_SVG')}"\
}\
}\
}
das funktioniert.
Ja, das mit den verschachtelten messages will ich noch einbauen.
Danke! Ich versuche das, komme aber erst morgen dazu :(
Peter
Zitat von: igami am 30 Oktober 2017, 07:17:49
Werden denn Events für die Empfangene Nachricht im rr_Etienne Device erzeugt?
Ähm also ich glaube ich habe es noch nicht richtig verstanden. Im RESIDENT Device stehen die Nachrichte, die der Bot mir sendet und nicht die, die ich sende. Vermutlich ist das richtig, aber dann habe ich noch nicht verstanden, wie ich das Menü aufrufe. Ich dachte ich muss mit mit meinem Telegram dem Bot die Nachricht schicken, damit mir das Menü gezeigt wird. Oder ist das falsch?
Edit:
Also beim Resident steht, wenn ich zum Beispiel mittels
msg @rr_Etienne test
sende im Reading fhemMsgPush "test" drinnen. Ist das so richtig? Aber wenn ich selbst dem Bot eine Nachricht schicke, dann steht die nicht im Resident.
Zitat von: Amenophis86 am 30 Oktober 2017, 18:20:45
Also beim Resident steht, wenn ich zum Beispiel mittels msg @rr_Etienne test
sende im Reading fhemMsgPush "test" drinnen. Ist das so richtig? Aber wenn ich selbst dem Bot eine Nachricht schicke, dann steht die nicht im Resident.
Dann passt da etwas noch nicht. Die Zuordnung der eingehenden Nachrichen wird auch von dem msgConfig device übernommen. Die Nachricht sollte unter dem Reading "fhemMsgRcvPush" auftauchen.
Das msgConfig Device ist das globalmsg was automatisch angelegt wird?
Edit:
Also ich habe mir jetzt nochmal die Dokumentation von msg angeschaut und ich komme einfach damit nicht klar. Welches Attr muss ich wie setzen, dass die Nachrichten auch beim Resident ankommen, sowohl die er gesendet hat, als auch die für ihn bestimmten. Vermutlich hat es mit msgContactPush und msgRecipientPush zu tun, aber ich bekomme es nicht hin. Verstehe weder was im globalmsg noch was beim resident gesetzt werden muss. Sry.
Zitat von: Amenophis86 am 31 Oktober 2017, 06:57:37
Das msgConfig Device ist das globalmsg was automatisch angelegt wird?
Edit:
Also ich habe mir jetzt nochmal die Dokumentation von msg angeschaut und ich komme einfach damit nicht klar. Welches Attr muss ich wie setzen, dass die Nachrichten auch beim Resident ankommen, sowohl die er gesendet hat, als auch die für ihn bestimmten. Vermutlich hat es mit msgContactPush und msgRecipientPush zu tun, aber ich bekomme es nicht hin. Verstehe weder was im globalmsg noch was beim resident gesetzt werden muss. Sry.
Ich finde die Dokumentation vom msg auch nicht sonderlich gut ::)
Im ROOMMATE musst du das Attribut msgContactPush wie folgt setzen: <TelegramBot>:@<peerID>
Bsp:
attr rr_igami msgContactPush myTelegramBot:@12345678
Ok, jetzt habe ich auch das Readings fhemMsgRcvPush. Danke, aber der Dialog wird noch nicht aufgerufen, obwohl ich "test" sende. Also schein ich noch einen Fehler zu haben.
Edit:
Was muss im Dialog im Internal STATE stehen? Aktuell steht dort: "rr_Etienne: test". Hier nochmal ein List des Dialog:
Internals:
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."
]
}
}
MSGCOMMAND msg push \@$recipients $message
NAME meta_Dialog
NOTIFYDEV TYPE=(ROOMMATE|GUEST)
NR 25
NTFY_ORDER 50-meta_Dialog
STATE rr_Etienne: test
TRIGGER abbrechen,beenden,zurück,test
TYPE msgDialog
READINGS:
2017-10-31 09:03:39 state rr_Etienne: test
Attributes:
allowed rr_Etienne
evalSpecials me=test
TelegramBot=TelegramBot
EDIT:
Warum auch immer, aber es geht jetzt wohl doch. Jetzt muss ich mich mal mit dem Dialog bzw dem JSON auseinander setzen. Danke für die Hilfe bisher :)
Hallo,
ich habe die letzten paar Antworten nur überflogen, aber ich hatte auch so meine Schwierkigkeiten am Anfang bis der Dialog lief :)
Zum einen sind hier einige Abhängigkeiten drin (neben dem eigentlichen Messanger z.B. Telegramm): msg und roommates. Jemand der diese noch nicht verwendet tut sich schwer alles gleich zu erfassen. Hier wäre ein Hinweis im Wiki ganz hilfreich.
Damit der Dialog reagiert, muss jeder einzelne Dialog für die entsprechenden roommates auf "allowed" gesetzt werden. Wird häufig auch vergessen.
Die evalSpecials haben am einfach auch beim einen oder anderen Probleme gemacht (siehe Seite 2-3) ist im Wikie aber inzwischen ganz gut beschrieben:
attr myMsgConfig msgDialog_evalSpecials me=<Aktivierungswort bzw. -Nachricht>
TelegramBot=<Name des TelegramBot-device>
Wobei hier auch eine kleine Änderung stattgefunden hat aus "evalSpecials" wurde "msgDialog_evalSpecials"
Hoffe das hilft dem einen oder anderen weiter...
Moin Smarti,
ZitatZum einen sind hier einige Abhängigkeiten drin (neben dem eigentlichen Messanger z.B. Telegramm): msg und roommates. Jemand der diese noch nicht verwendet tut sich schwer alles gleich zu erfassen. Hier wäre ein Hinweis im Wiki ganz hilfreich.
hab gerade das Wiki etwas überarbeitet ;)
Der msg-Befehl sowie TelegramBot, Jabber und yowsup sind verlinkt. Leider gibt es zu ROOMMATE und GUEST keine Wiki-Artikel...
VG Sebastian
Habe ich auch feststellen müssen, bin allerdings hier fündig geworden: https://wiki.fhem.de/wiki/Weckautomation#Notwendige_Devices_anlegen (https://wiki.fhem.de/wiki/Weckautomation#Notwendige_Devices_anlegen)
Vielleicht kannst du ihn noch verlinken...
Hallo igami,
Dein Beispielcode hat funktioniert, was auch sonst... :D
Zitat von: igami am 29 Oktober 2017, 19:23:12
defmod plot msgDialog {\
"plot": {\
"commands": "set $SELF say @$recipient plot|send",\
"message": "das war das Bild",\
"send": {\
"message": "TelegramBot_MTYPE=cmdSend {plotAsPng('SVG_FileLog_hc_Steckdose.EXT.Schuppen')}"\
}\
}\
}
das funktioniert.
Ja, das mit den verschachtelten messages will ich noch einbauen.
Auch als ich ihn so abgeändert hatte (ich dachte, die Leerzeichen sind die Ursache), hat das Plot Versenden auch geklappt:
defmod plot msgDialog {\
"Steckdose Schuppen Verlaufsdiagramm": {\
"commands": "set $SELF say @$recipient Steckdose Schuppen Verlaufsdiagramm|send",\
"message": "das war das Bild",\
"send": {\
"message": "TelegramBot_MTYPE=cmdSend {plotAsPng('SVG_FileLog_hc_Steckdose.EXT.Schuppen')}"\
}\
}\
}
Als ich ihn so 'meinem' Außenanlagen-Dialog hinzugefügt habe, auch noch. Übersieh mal das mit den 3 IPCAM Images, das ist noch in 'Entwicklung'...
Internals:
CFGFN
DEF {
"Außenanlagen": {
"message": [
"{return('(Steckdose Schuppen Ein) ') if(ReadingsVal('%aussen_actor%', 'state', '') ne 'on')}",
"{return('(Steckdose Schuppen Aus) ') if(ReadingsVal('%aussen_actor%', 'state', '') eq 'on')}",
"{return('(Steckdose Schuppen Automatik Ein) ') if(ReadingsVal('%aussen_dummy%', 'state', '') ne 'on')}",
"{return('(Steckdose Schuppen Automatik Aus) ') if(ReadingsVal('%aussen_dummy%', 'state', '') eq 'on')}",
"(Steckdose Schuppen Verlaufsdiagramm) ",
"(Send Picture Camera Eingang) ",
"(Send Picture Camera Carport) ",
"(Send Picture Camera Garten) ",
"(abbrechen) ",
"Menü Außenanlagen"
],
"Steckdose Schuppen Ein": {
"commands": "set Steckdose.EXT.Schuppen on",
"message": [
"(%me%) ",
"Steckdose Schuppen ist Ein."
]
},
"Steckdose Schuppen Aus": {
"commands": "set Steckdose.EXT.Schuppen off",
"message": [
"(%me%) ",
"Steckdose Schuppen ist Aus."
]
},
"Steckdose Schuppen Automatik Ein": {
"commands": "set Steckdose.EXT.Schuppen.Auto on",
"message": [
"(%me%) ",
"Steckdose Schuppen Automatik ist Ein."
]
},
"Steckdose Schuppen Automatik Aus": {
"commands": "set Steckdose.EXT.Schuppen.Auto off",
"message": [
"(%me%) ",
"Steckdose Schuppen Automatik ist Aus."
]
},
"Steckdose Schuppen Verlaufsdiagramm": {
"commands": "set $SELF say @$recipient Steckdose Schuppen Verlaufsdiagramm|send",
"message": [
"(%me%) ",
"Steckdose Schuppen Verlaufsdiagramm"
],
"send": {
"message": "TelegramBot_MTYPE=cmdSend {plotAsPng('SVG_FileLog_hc_Steckdose.EXT.Schuppen')}"
}
},
"Send Picture Camera Eingang": {
"commands": [
"get IPCAM_Kamera_Eingang image",
"set %TelegramBot% sendImage /opt/fhem/tmp/ipcam/IPCAM_Kamera_Eingang_snapshot.jpg"
],
"message": "(%me%) $message"
},
"Send Picture Camera Carport": {
"commands": [
"get IPCAM_Kamera_Carport image",
"set %TelegramBot% sendImage /opt/fhem/tmp/ipcam/IPCAM_Kamera_Carport_snapshot.jpg"
],
"message": "(%me%) $message"
},
"Send Picture Camera Garten": {
"commands": [
"get IPCAM_Kamera_Garten image",
"set %TelegramBot% sendImage /opt/fhem/tmp/ipcam/IPCAM_Kamera_Garten_snapshot.jpg"
],
"message": "(%me%) $message"
}
}
}
MSGCOMMAND msg push \@$recipients $message
NAME msgD_Aussen
NOTIFYDEV TYPE=(ROOMMATE|GUEST)
NR 2996
NTFY_ORDER 50-msgD_Aussen
STATE rr_Peter: Steckdose Schuppen Verlaufsdiagramm
TRIGGER Außenanlagen
TYPE msgDialog
READINGS:
2017-10-31 15:29:56 rr_Peter_history Außenanlagen|Steckdose Schuppen Verlaufsdiagramm
2017-10-31 15:29:56 state rr_Peter: Steckdose Schuppen Verlaufsdiagramm
Attributes:
alias msgDialog Außenanlagen
allowed rr_Peter,rr_Yvonne
evalSpecials aussen_actor=Steckdose.EXT.Schuppen
aussen_dummy=Steckdose.EXT.Schuppen.Auto
aussen_plot=SVG_FileLog_hc_Steckdose.EXT.Schuppen
room IS Messenger
verbose 5
Jetzt habe ich nur Deinen 'plot' Dialog gelöscht und als Ergebnis klappt das Versenden nicht mehr. Hier Log Level 5:
2017.10.31 15:29:53 3: msg rr_Peter: ID=1509460193.50088.1 TYPE=push ROUTE=TeleBot RECIPIENT=@168363762 STATUS=OK PRIORITY=0 TITLE='' MSG='(Steckdose Schuppen Ein)
(Steckdose Schuppen Automatik Ein)
(Steckdose Schuppen Verlaufsdiagramm)
(Send Picture Camera Eingang)
(Send Picture Camera Carport)
(Send Picture Camera Garten)
(abbrechen)
Menü Außenanlagen'
2017.10.31 15:29:56 5: msgDialog (msgD_Aussen) - entering msgDialog_Notify
2017.10.31 15:29:56 4: msgDialog (msgD_Aussen) triggered by "rr_Peter fhemMsgRcvPush: Steckdose Schuppen Verlaufsdiagramm"
2017.10.31 15:29:56 5: msgDialog (msgD_Aussen)
entering msgDialog_progress
recipients: rr_Peter
message: Steckdose Schuppen Verlaufsdiagramm
force: 0
2017.10.31 15:29:56 5: msgDialog (msgD_Aussen) - entering msgDialog_evalSpecials
2017.10.31 15:29:56 5: msgDialog (msgD_Aussen) - entering msgDialog_Set
2017.10.31 15:29:56 5: msgDialog (msgD_Aussen) - entering msgDialog_Set
2017.10.31 15:29:56 5: msgDialog (msgD_Aussen)
entering msgDialog_progress
recipients: rr_Peter
message: Steckdose Schuppen Verlaufsdiagramm|send
force: 1
2017.10.31 15:29:56 5: msgDialog (msgD_Aussen) - entering msgDialog_evalSpecials
2017.10.31 15:29:56 5: msgDialog (msgD_Aussen) - entering msgDialog_Set
2017.10.31 15:29:56 3: msg rr_Peter: ID=1509460196.20109.1 TYPE=push ROUTE=TeleBot RECIPIENT=@168363762 STATUS=OK PRIORITY=0 TITLE='' MSG='(Q)
Steckdose Schuppen Verlaufsdiagramm'
2017.10.31 15:30:38 5: msgDialog (msgD_Aussen) - entering msgDialog_Notify
Kaum füge ich dies hier wieder meiner Konfiguration hinzu, klappt das Versenden aus dem Aussenanlagen Dialog wieder!
Internals:
CFGFN
DEF {
"Steckdose Schuppen Verlaufsdiagramm": {
"commands": "set $SELF say @$recipient Steckdose Schuppen Verlaufsdiagramm|send",
"message": [
"(%me%) ",
"Steckdose Schuppen Verlaufsdiagramm"
],
"send": {
"message": "TelegramBot_MTYPE=cmdSend {plotAsPng('SVG_FileLog_hc_Steckdose.EXT.Schuppen')}"
}
}
}
MSGCOMMAND msg push \@$recipients $message
NAME plot
NOTIFYDEV TYPE=(ROOMMATE|GUEST)
NR 65914
NTFY_ORDER 50-plot
STATE rr_Peter: send
TRIGGER Steckdose Schuppen Verlaufsdiagramm
TYPE msgDialog
READINGS:
2017-10-31 15:43:07 rr_Peter_history
2017-10-31 15:43:07 state rr_Peter: send
Attributes:
allowed rr_Peter,rr_Yvonne
room IS Messenger
Log:
2017.10.31 15:42:58 5: msgDialog (msgD_Aussen) - entering msgDialog_Notify
2017.10.31 15:42:58 4: msgDialog (msgD_Aussen) triggered by "rr_Peter fhemMsgRcvPush: Q"
2017.10.31 15:42:58 5: msgDialog (msgD_Aussen)
entering msgDialog_progress
recipients: rr_Peter
message: Q
force: 0
2017.10.31 15:42:58 5: msgDialog (msgD_Aussen) - entering msgDialog_evalSpecials
2017.10.31 15:43:05 5: msgDialog (msgD_Aussen) - entering msgDialog_Notify
2017.10.31 15:43:05 4: msgDialog (msgD_Aussen) triggered by "rr_Peter fhemMsgRcvPush: Außenanlagen"
2017.10.31 15:43:05 5: msgDialog (msgD_Aussen)
entering msgDialog_progress
recipients: rr_Peter
message: Außenanlagen
force: 0
2017.10.31 15:43:05 5: msgDialog (msgD_Aussen) - entering msgDialog_evalSpecials
2017.10.31 15:43:05 3: msg rr_Peter: ID=1509460985.45968.1 TYPE=push ROUTE=TeleBot RECIPIENT=@168363762 STATUS=OK PRIORITY=0 TITLE='' MSG='(Steckdose Schuppen Ein)
(Steckdose Schuppen Automatik Ein)
(Steckdose Schuppen Verlaufsdiagramm)
(Send Picture Camera Eingang)
(Send Picture Camera Carport)
(Send Picture Camera Garten)
(abbrechen)
Menü Außenanlagen'
2017.10.31 15:43:07 5: msgDialog (msgD_Aussen) - entering msgDialog_Notify
2017.10.31 15:43:07 4: msgDialog (msgD_Aussen) triggered by "rr_Peter fhemMsgRcvPush: Steckdose Schuppen Verlaufsdiagramm"
2017.10.31 15:43:07 5: msgDialog (msgD_Aussen)
entering msgDialog_progress
recipients: rr_Peter
message: Steckdose Schuppen Verlaufsdiagramm
force: 0
2017.10.31 15:43:07 5: msgDialog (msgD_Aussen) - entering msgDialog_evalSpecials
2017.10.31 15:43:07 5: msgDialog (msgD_Aussen) - entering msgDialog_Set
2017.10.31 15:43:07 5: msgDialog (msgD_Aussen)
entering msgDialog_progress
recipients: rr_Peter
message: Steckdose Schuppen Verlaufsdiagramm|send
force: 1
2017.10.31 15:43:07 5: msgDialog (msgD_Aussen) - entering msgDialog_evalSpecials
2017.10.31 15:43:07 3: msg rr_Peter: ID=1509460987.58281.1 TYPE=push ROUTE=TeleBot RECIPIENT=@168363762 STATUS=OK PRIORITY=0 TITLE='' MSG='(Q)
Steckdose Schuppen Verlaufsdiagramm'
2017.10.31 15:43:07 3: msg rr_Peter: ID=1509460987.62378.1 TYPE=push ROUTE=TeleBot RECIPIENT=@168363762 STATUS=OK PRIORITY=0 TITLE='' MSG='{plotAsPng('SVG_FileLog_hc_Steckdose.EXT.Schuppen')}'
2017.10.31 15:43:07 3: msg rr_Peter: ID=1509460987.76551.1 TYPE=push ROUTE=TeleBot RECIPIENT=@168363762 STATUS=OK PRIORITY=0 TITLE='' MSG='(Q)
Steckdose Schuppen Verlaufsdiagramm'
2017.10.31 15:43:11 5: msgDialog (msgD_Aussen) - entering msgDialog_Notify
Jetzt habe ich den 'plot' Dialog einfach disabled und es wird kein Plot mehr verschickt!
2017.10.31 15:51:42 3: get TYPE=msgDialog:FILTER=NAME!=meta_Dialog:FILTER=allowed=.*(rr_Peter|everyone).* trigger : Alarmanlage
Außenanlagen
Jalousien
2017.10.31 15:51:42 3: msg rr_Peter: ID=1509461502.28767.1 TYPE=push ROUTE=TeleBot RECIPIENT=@168363762 STATUS=OK PRIORITY=0 TITLE='' MSG='(Alarmanlage) (Außenanlagen) (Jalousien)
(abbrechen)
(beenden)
Ich kann folgendes für dich tun:'
2017.10.31 15:51:42 5: msgDialog (msgD_Aussen) - entering msgDialog_Notify
2017.10.31 15:51:42 4: msgDialog (msgD_Aussen) triggered by "rr_Peter fhemMsgRcvPush: Q"
2017.10.31 15:51:42 5: msgDialog (msgD_Aussen)
entering msgDialog_progress
recipients: rr_Peter
message: Q
force: 0
2017.10.31 15:51:42 5: msgDialog (msgD_Aussen) - entering msgDialog_evalSpecials
2017.10.31 15:51:44 5: msgDialog (msgD_Aussen) - entering msgDialog_Notify
2017.10.31 15:51:44 4: msgDialog (msgD_Aussen) triggered by "rr_Peter fhemMsgRcvPush: Außenanlagen"
2017.10.31 15:51:44 5: msgDialog (msgD_Aussen)
entering msgDialog_progress
recipients: rr_Peter
message: Außenanlagen
force: 0
2017.10.31 15:51:44 5: msgDialog (msgD_Aussen) - entering msgDialog_evalSpecials
2017.10.31 15:51:44 5: msgDialog (msgD_Aussen) - entering msgDialog_Set
2017.10.31 15:51:44 3: msg rr_Peter: ID=1509461504.95368.1 TYPE=push ROUTE=TeleBot RECIPIENT=@168363762 STATUS=OK PRIORITY=0 TITLE='' MSG='(Steckdose Schuppen Ein)
(Steckdose Schuppen Automatik Ein)
(Steckdose Schuppen Verlaufsdiagramm)
(Send Picture Camera Eingang)
(Send Picture Camera Carport)
(Send Picture Camera Garten)
(abbrechen)
Menü Außenanlagen'
2017.10.31 15:51:47 5: msgDialog (msgD_Aussen) - entering msgDialog_Notify
2017.10.31 15:51:47 4: msgDialog (msgD_Aussen) triggered by "rr_Peter fhemMsgRcvPush: Steckdose Schuppen Verlaufsdiagramm"
2017.10.31 15:51:47 5: msgDialog (msgD_Aussen)
entering msgDialog_progress
recipients: rr_Peter
message: Steckdose Schuppen Verlaufsdiagramm
force: 0
2017.10.31 15:51:47 5: msgDialog (msgD_Aussen) - entering msgDialog_evalSpecials
2017.10.31 15:51:47 5: msgDialog (msgD_Aussen) - entering msgDialog_Set
2017.10.31 15:51:47 5: msgDialog (msgD_Aussen) - entering msgDialog_Set
2017.10.31 15:51:47 5: msgDialog (msgD_Aussen)
entering msgDialog_progress
recipients: rr_Peter
message: Steckdose Schuppen Verlaufsdiagramm|send
force: 1
2017.10.31 15:51:47 5: msgDialog (msgD_Aussen) - entering msgDialog_evalSpecials
2017.10.31 15:51:47 5: msgDialog (msgD_Aussen) - entering msgDialog_Set
2017.10.31 15:51:47 3: msg rr_Peter: ID=1509461507.16127.1 TYPE=push ROUTE=TeleBot RECIPIENT=@168363762 STATUS=OK PRIORITY=0 TITLE='' MSG='(Q)
Steckdose Schuppen Verlaufsdiagramm'
2017.10.31 15:52:36 5: msgDialog (msgD_Aussen) - entering msgDialog_Notify
Hast Du eine Idee, warum der Aufruf aus meinem Dialog heraus nur klappt, wenn Dein von mir abgeändertes Dialogbeispiel zusätzlich in FHEM vorhanden und aktiv ist?
Tschau Peter
Ich habe es nur so überflogen, aber was mir aufgefallen ist, dass es bei dir 3 Stufen sind: "Außenanlagen|Steckdose Schuppen Verlaufsdiagramm|send" du hast aber das "Außenanlagen" weggelassen.
Zitat von: igami am 31 Oktober 2017, 16:03:51
Ich habe es nur so überflogen, aber was mir aufgefallen ist, dass es bei dir 3 Stufen sind: "Außenanlagen|Steckdose Schuppen Verlaufsdiagramm|send" du hast aber das "Außenanlagen" weggelassen.
Oh Schitt; genau das war es natürlich.
Danke,
Peter
Hey,
ich schon wieder :-)
Ich bin auf der suche nach einer Möglichkeit eine Mehrzeilige Nachrichten zu versenden.
Aktuell sieht es z.B. so aus:
{"Status": {
"message": [
"(Zurück:%me%) ",
"** Schalter **",
"TV: [Wohnzimmer.TV.Steckdose:state]",
"Schranklicht: [Wohnzimmer.Schranklicht:state]",
"Nachtlicht: [Schlafzimmer.Nachtlicht:state]",
"Waschmaschine: [Kueche.Waschmaschine:state]",
"FREI: [Steckdose.Laserdrucker:state]",
"Entfeuchter: [Jennifer.Entfeuchter:state]",
" ",
"** Türen **",
"Haustüre: nn",
"Balkontüre: [Wohnzimmer.Balkontuer:state]",
"Wohnzimmer: nn",
"Schlafzimmer: nn",
"Küche: nn",
"Arbeitszimmer: nn",
" ",
"** Fenster **",
"Wohnzimmer 1: [Wohnzimmer.Fenster1:state]",
"Wohnzimmer 2: nn",
"Schlafzimmer 1: [Schlafzimmer.Fenster1:state]",
"Schlafzimmer 2: nn",
"Küche: nn",
"Arbeitszimmer: [Jennifer.Fenster:state]",
" ",
"** Anwesend **",
"Handy Jenni: [Handy.Jennifer:state]",
"Schlüssel Jenni: nn",
"Handy Dominik: [Handy.Dominik:state]",
"Schlüssel Dominik: [Schluessel.Blau:state]",
"Schlüssel Grün: [Schluessel.Gruen:state]",
"Schlüssel Schwarz: [Schluessel.Schwarz:state]",
"Verschwunden1: [Schluessel.Fehlt1:state]",
" ",
"** FireTV **",
"Status: [FireTV:screen_state]"
]
}
}
Das geht doch sicher irgendwie besser oder?
Ich hab in dem Zusammenhang das Problem, das ich bei einem Bild ein längeren Untertitel mitgeben möchte.
"set %TelegramBot% sendImage \@$msgPeerId /opt/fhem/www/images/default/weather/".ReadingsVal('Wetter.Yahoo','icon','0').".png
".ReadingsVal('Wetter.Rusenschloss','condition','0')." bei
".ReadingsVal('Wetter.Heimbergstr.Temp','temperature','0')." (Gefühlt: ".ReadingsVal('Wetter.Rusenschloss','feelslike_c','0')."°C) bei ".ReadingsVal('Wetter.Heimbergstr.Temp','humidity','0')."%
UV-Index: ".ReadingsVal('Wetter.Heimbergstr.UV','uv_val','0')." Risiko: ".ReadingsVal('Wetter.Heimbergstr.UV','uv_risk','0')."
goo.gl/HWdhHo
Wind: ".ReadingsVal('Wetter.Rusenschloss','wind_speed','0'). "km/h
Regen: ".ReadingsVal('Wetter.Rusenschloss','rain','0')." l/s
Luftdruck: ".ReadingsVal('Wetter.Rusenschloss','pressure','0')." hPa (".ReadingsVal('Wetter.Rusenschloss','pressure_trend','0').")"
Das hatte ich in meinem alten Menü und würde es gerne übertragen. Leider klappt es nicht so einfach.
Allein das Bild wird schon nicht gesendet.
So sieht das Dialog aktuell aus. Wichtig hier: "Wetter jetzt"
{"Wetter": {
"message": [
"(Sonnenverlauf) ",
"(Wetter jetzt) ",
"(Wetter heute) ",
"(Wetter morgen) ",
"(Wetter 3-Tage) ",
"(Mond Infos) ",
"(Zurück:%me%) ",
"Wie kann ich dir dienen?"
],
"Sonnenverlauf": {
"message": [
"(zurück) ",
"Sonnenaufgang: [Astro:SunRiese]",
"Sonnenuntergang: [Astro:SunSet]",
"Tag dauer: [Astro:SunTransit]"
]
},
"Wetter jetzt": {
"message": [
"(zurück:Wetter) ",
"hier kommt noch was"
],
"commands": [
"set %TelegramBot% sendImage @$recipient /opt/fhem/www/images/default/weather/sunny.png"
]
},
"Wetter heute": {
"message": [
"(zurück) ",
"hier kommt noch was"
]
},
"Wetter morgen": {
"message": [
"(zurück) ",
"hier kommt noch was"
]
},
"Wetter 3-Tage": {
"message": [
"(zurück) ",
"hier kommt noch was"
]
},
"Mond Infos": {
"message": [
"(zurück:Wetter) ",
"Aufgang: [Wetter.Rusenschloss:moonrise]",
"Untergang: [Wetter.Rusenschloss:moonset]",
"Alter: [Wetter.Rusenschloss:moon_age]",
"Mondphase: [Wetter.Rusenschloss:moon_phase]"
]
},
"zurück": {
"match": "\/?zurück",
"commands": "set $recipient_history=.+ say @$recipient {(ReadingsVal($DEV, '$recipient_history', '') =~ m/(.+)\\|.+$/;; return $2 ? $2 : $1;;)}"
}
}
}
Kann mir hier jemand helfen?
Grüße am Feiertag
ZitatIch bin auf der suche nach einer Möglichkeit eine Mehrzeilige Nachrichten zu versenden.
Aktuell sieht es z.B. so aus:
Moin Flipper,
"** Türen **",
wird bei mir gar nicht angezeigt.
Und bei
" ",
verabschidet sich mein FHEM :(
TelegramBot kennt aber \n für einen Zeilenumbruch. Kannst auch mehrere hintereinander hängen...
Zitat von: Flipper92 am 31 Oktober 2017, 23:20:01
Das geht doch sicher irgendwie besser oder?
Was meinst du denn mit besser?
Zitat von: Flipper92 am 31 Oktober 2017, 23:20:01
Allein das Bild wird schon nicht gesendet.
Das liegt daran, dass $recipient deinen ROOMMATE Namen enthält und nicht deine Telegram ID.
Ich wollte es noch so bauen, dass man mehrere Nachrichten auf einmal versenden kann. Dann kann durch TelegramBot_MTYPE auch ein Bild versendet werden.
Aber ich muss erst mal schauen, dass ich damit anfange.
@igami: Der Logeintrag vom FHEM-Crash:
Nested quantifiers in regex; marked by <-- HERE in m/^fhemMsgPush: (abbrechen|zurück:Q)
Dreambox: abwesend
** <-- HERE Schalter **
Die Leerzeile ist wohl " ",
Vielleicht kannst Du was damit anfangen...
VG Sebastian
Zitat von: binford6000 am 01 November 2017, 08:59:57
Vielleicht kannst Du was damit anfangen...
VG Sebastian
Post mal bitte die Raw definiton von einem ganzen Dialog bei dem es nicht funktioniert. ich kann es nicht nachstellen.
defmod test msgDialog {\
"test": {\
"message": [\
"** test **",\
"Zeile 2"\
]\
}\
}
der geht bei mir einwandfrei
Zitatder geht bei mir einwandfrei
Der verursacht einen FHEM-Crash bei mir. Liegt aber am Modul 22_HOMEMODE.pm welches ich auch im Einsatz habe:
Nested quantifiers in regex; marked by <-- HERE in m/^fhemMsgPush: ** <-- HERE test **
Zeile 2$/ at ./FHEM/22_HOMEMODE.pm line 989.
Und zwar in dieser Regex:
{
next if (!grep /^$_$/,@{$events});
$mode = $_;
}
Hat also erstmal nix mit msgDialog zu tun...
VG Sebastian
Hallo zusammen,
ich hänge mich mal an. Schön das es jetzt das Modul gibt. Aber alter Besen ist das Umfangreich. Ich glaube wenn mann keine Programmierkenntnisse hat wird es echt schwierig.
Ich habe jetzt schon öffter angesetzt, und habe jetzt so ein bisschen den Überblick verloren. Ziel ist es irgendwann mal richtung Design in #100 von binford6000.
Vll mag ja nochmal jemand drauf gucken. Bisherige definitionen.
list myMsgConfig
Internals:
CFGFN
NAME myMsgConfig
NOTIFYDEV TYPE=(Jabber|TelegramBot|yowsup)
NR 78703
NTFY_ORDER 50-myMsgConfig
STATE initialized
TYPE msgConfig
READINGS:
2017-11-02 11:46:00 fhemMsgRcvPush M
2017-11-02 11:46:00 fhemMsgRcvPushGw TelegramBot
2017-11-02 11:13:05 fhemMsgState initialized
Attributes:
comment FHEM Global Configuration for command 'msg'
evalSpecials me=M
TelegramBot=TelegramBot
group Global
msgContactPush TelegramBot:@156XXXXXX
msgType text
room msg
stateFormat fhemMsgState
userattr evalSpecials:textField-long
verbose 3
list meta_Dialog
Internals:
CFGFN
DEF {
"%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:"
]
},
"abbrechen": {
"match": "\/?abbrechen",
"commands": [
"deletereading TYPE=msgDialog $recipient_history",
"deletereading %TelegramBot% $recipient_sentMsgId"
],
"message": [
"(%me%) ",
"Dialog abgebrochen."
]
},
"beenden": {
"match": "\/?beenden",
"commands": [
"deletereading TYPE=msgDialog $recipient_history",
"deletereading %TelegramBot% $recipient_sentMsgId"
],
"message": [
"(%me%) ",
"Dialog beendet."
]
}
}
MSGCOMMAND msg push \@$recipients $message
NAME meta_Dialog
NOTIFYDEV TYPE=(ROOMMATE|GUEST)
NR 78230
NTFY_ORDER 50-meta_Dialog
STATE Initialized
TRIGGER abbrechen,beenden,%me%
TYPE msgDialog
READINGS:
2017-11-02 10:59:32 state Initialized
Attributes:
allowed everyone
room msg
list sentMsgIdByPeerId
Internals:
CFGFN
DEF .+:sentMsgId.+ {
return unless($TYPE eq "TelegramBot");
my $dev_hash = $defs{$NAME};
my $sentMsgId = ReadingsVal($NAME, "sentMsgId", "");
my $sentMsgPeerId = ReadingsVal($NAME, "sentMsgPeerId", "");
my ($contact) = devspec2array("TYPE=(ROOMMATE|GUEST):FILTER=msgContactPush=.*$sentMsgPeerId.*");
readingsSingleUpdate($dev_hash, "$contact\_sentMsgId", $sentMsgId, 1);
}
NAME sentMsgIdByPeerId
NR 78323
NTFY_ORDER 50-sentMsgIdByPeerId
REGEXP .+:sentMsgId.+
STATE active
TYPE notify
READINGS:
2017-11-02 11:01:55 state active
Attributes:
devStateIcon {ReadingsVal($name, "state", "inactive") eq "active" ? ".*:ios-on-blue:inactive" : ".*:ios-off:active"}
icon audio_mic
room msg
Zusätzlich habe ich bei meinem Roommate folgendes gesetzt
msgContactPush
TelegramBot:@1568XXXX
Zum Testen habe ich den Waschmaschinendialog eingefügt.
Wenn ich jetzt M in den Chat schicke, werden auch die Readings im Roommate und im myMsgConfig Device aktualisiert. Passieren tut allerdings rein gar nichts.
Sieht jemand den Fehler, und kann mich aufklären?
Mir ist so glaube ich auch ein Fehler im Wiki aufgefallen unter dem Punkt "msgConfig". Fehlt da nicht der Zeilenumbruch hinter "me=<Aktivierungswort bzw. -Nachricht>"?
Grüße
@Esjay
Siehe wiki
defmod myMsgConfig msgConfig
attr myMsgConfig msgDialog_evalSpecials me=<Aktivierungswort bzw. -Nachricht>
TelegramBot=<Name des TelegramBot-device>
attr myMsgConfig msgContactPush TelegramBot
attr myMsgConfig room msg
Der Name hat sich geändert in 'msgDialog_evalSpecials'...
Peter
Zitat von: PSI69 am 02 November 2017, 14:13:25
@Esjay
Siehe wiki
defmod myMsgConfig msgConfig
attr myMsgConfig msgDialog_evalSpecials me=<Aktivierungswort bzw. -Nachricht>
TelegramBot=<Name des TelegramBot-device>
attr myMsgConfig msgContactPush TelegramBot
attr myMsgConfig room msg
Der Name hat sich geändert in 'msgDialog_evalSpecials'...
Peter
Danke.. War bisschen verwirrent, da ich das Attribut gar nicht hatte. Bin jetzt einen Schritt weiter. Ich werd mich wahrscheinlich wieder melden wenn es nicht funktioniert.
Grüße
Zitat von: igami am 01 November 2017, 10:05:28
Post mal bitte die Raw definiton von einem ganzen Dialog bei dem es nicht funktioniert. ich kann es nicht nachstellen.
defmod test msgDialog {\
"test": {\
"message": [\
"** test **",\
"Zeile 2"\
]\
}\
}
der geht bei mir einwandfrei
bei mir funktioniert es auch.
Zitat von: igami am 01 November 2017, 08:49:46
Was meinst du denn mit besser?
Ich finde es etwas mühsam, das nach jeder Zeile ein ", muss. bringt mich immer wieder aus der Spur :-)
Aber \n ist da auch nicht wirkich eine alternative.
Vieleicht kann man im Wiki noch ergenzen wo die Hauptprobleme zu suchen sind.
Ich hätte da schon:
1. Attributes "allowed" nicht oder falsch gesetzt.
2. " , " vergessen?
3. Klammern vertauscht? () oder {} oder []?
4. bei Telegram Inline: ist ein : im Text der Text abbricht? z.B. "(Temperatur: [heizung:desiredTemperature]°C:setheiz) " oder "([test:state]:weiter) " wenn [test:state] = "Status: ok"
Zitat von: Esjay am 02 November 2017, 15:05:16
Danke.. War bisschen verwirrent, da ich das Attribut gar nicht hatte. Bin jetzt einen Schritt weiter. Ich werd mich wahrscheinlich wieder melden wenn es nicht funktioniert.
Grüße
Ich checke zu morgen eine neue Version ein, die das behebt.
Bisher habe ich beim Laden des Moduls die Attribute hinzugefügt, aber anscheinend existiert das msgConfig device zu dem Zeitpunkt noch nicht ::)
Zitat von: Flipper92 am 02 November 2017, 17:11:49
bei mir funktioniert es auch.
Ich finde es etwas mühsam, das nach jeder Zeile ein ", muss. bringt mich immer wieder aus der Spur :-)
Aber \n ist da auch nicht wirkich eine alternative.
JSON lässt das anders leider nicht zu, falls doch korrigiert mich bitte.
Zitat von: Flipper92 am 02 November 2017, 17:11:49
2. " , " vergessen?
Dann bekommst du ja eine Fehlermeldung ;)
Zitat von: Flipper92 am 02 November 2017, 17:11:49
4. bei Telegram Inline: ist ein : im Text der Text abbricht? z.B. "(Temperatur: [heizung:desiredTemperature]°C:setheiz) " oder "([test:state]:weiter) " wenn [test:state] = "Status: ok"
Bei inline ist das Letzte : das Trennzeichen zwischen angezeigtem und übertragenen Text. Finde ich nicht so gut gelöst, ist aber durch das TelegramBot Modul so vorgegeben. Vielleicht lässt sich viegener ja davon überzeugen das zu ändern, wenn genügend Leute den Wunsch äußern ;)
Zitat von: igami am 02 November 2017, 17:19:44
Bei inline ist das Letzte : das Trennzeichen zwischen angezeigtem und übertragenen Text. Finde ich nicht so gut gelöst, ist aber durch das TelegramBot Modul so vorgegeben. Vielleicht lässt sich viegener ja davon überzeugen das zu ändern, wenn genügend Leute den Wunsch äußern ;)
Wirklich das letzte? Ich glaub ich hatte Probleme mal das Problem, das es nicht ging, weil im reading ein : hing. (Ich kann gerne aber auch ein anderes Problem gehabt haben :-) )
Ich hab noch ein anderes Problem. Kann man eine Variabele in der Message ausgeben?
Ich hatte in meinem alten Menü ein:
if($msgText eq "/updatecheck"){
my $temp = fhem "update check";
fhem "set TelegramBot message \@$msgPeerId UpdateCheck:
$temp";
fhem "set TelegramBot message \@$msgPeerId /system
/hauptmenue";
}
nun muss ich das ja zwischen massage und commands aufteilen. bin mir aber nicht sicher, wie ich das machen soll.
Kurze Frage in die Runde!
Kann ich das Menü so aufbauen, dass ich es nicht immer anfassen muss wenn ich ein neues Device hinzufüge?
Also zum Beispiel beim Ein und Ausschalten von Steckdosen.
Edit: Ich vermute mal ja, für den Ansatz wäre ich dankbar!!!
Edit 2: Ok zu früh gefreut
Grüße
So spontan fällt mir dazu Nichts ein
Zitat von: Flipper92 am 02 November 2017, 18:41:07
Wirklich das letzte? Ich glaub ich hatte Probleme mal das Problem, das es nicht ging, weil im reading ein : hing. (Ich kann gerne aber auch ein anderes Problem gehabt haben :-) )
Ich benutze die inline Keyboards selbst kaum, kann sein, dass ich mich irre ::)
Zitat von: Flipper92 am 02 November 2017, 18:41:07
Ich hab noch ein anderes Problem. Kann man eine Variabele in der Message ausgeben?
Ich hatte in meinem alten Menü ein:
if($msgText eq "/updatecheck"){
my $temp = fhem "update check";
fhem "set TelegramBot message \@$msgPeerId UpdateCheck:
$temp";
fhem "set TelegramBot message \@$msgPeerId /system
/hauptmenue";
}
nun muss ich das ja zwischen massage und commands aufteilen. bin mir aber nicht sicher, wie ich das machen soll.
Klar geht das
...
"message": [
"{'UpdateCheck: '. fhem('update check')}",
"/hauptmenue"
]
...
Sollte so funktionieren, getestet habe ich es aber nicht ;)
So letzter Post für heute. So langsam werde ich warm mit dem Modul.
Warum werden die Kameras nicht getriggert?Ich würde jetzt wieder ein Menü
ZitatEingang
Wohnzimmer
Treppenaufgang
erwarten.
Ich vermute einen Klammerfehler
{
"Alarmanlage": {
"message": [
"{return('(Alarmanlage Level 0 Ein) ') if(ReadingsVal('AlarmAnlage','level0','') eq 'disarmed')}",
"{return('(Alarmanlage Level 0 Aus) ') if(ReadingsVal('Alarmanlage','level0','') eq 'armed')}",
"{return('(Alarmanlage Level 1 Ein) ') if(ReadingsVal('AlarmAnlage','level1','') eq 'disarmed')}",
"{return('(Alarmanlage Level 1 Aus) ') if(ReadingsVal('Alarmanlage','level1','') eq 'armed')}",
"{return('(Alarmanlage Level 2 Ein) ') if(ReadingsVal('AlarmAnlage','level2','') eq 'disarmed')}",
"{return('(Alarmanlage Level 2 Aus) ') if(ReadingsVal('Alarmanlage','level2','') eq 'armed')}",
"{return('(Alarmanlage Level 3 Ein) ') if(ReadingsVal('AlarmAnlage','level3','') eq 'disarmed')}",
"{return('(Alarmanlage Level 3 Aus) ') if(ReadingsVal('Alarmanlage','level3','') eq 'armed')}",
"(Kameras) ",
"(Send Statuslevel Alarmanlage) ",
"(Send Status Fenster) ",
"(Send Status Türen) ",
"(abbrechen) ",
"Menü Alarmanlage"
],
"Kameras": {
"message": [
"(Eingang) ",
"(Wohnzimmer) ",
"(Treppenaufgang) "
]
},
"AlarmAnlage Level 0 Ein": {
"commands": "set AlarmAnlage armed 0",
"message": [
"AlarmLevel 0 Eingeschaltet."
]
},
"AlarmAnlage Level 0 Aus": {
"commands": "set AlarmAnlage disarmed 0",
"message": [
"AlarmLevel 0 Ausgeschaltet."
]
},
"AlarmAnlage Level 1 Ein": {
"commands": "set AlarmAnlage armed 1",
"message": [
"AlarmLevel 1 Eingeschaltet."
]
},
"AlarmAnlage Level 1 Aus": {
"commands": "set AlarmAnlage disarmed 1",
"message": [
"AlarmLevel 1 Ausgeschaltet."
]
},
"AlarmAnlage Level 2 Ein": {
"commands": "set AlarmAnlage armed 2",
"message": [
"AlarmLevel 2 Eingeschaltet."
]
},
"AlarmAnlage Level 2 Aus": {
"commands": "set AlarmAnlage disarmed 2",
"message": [
"AlarmLevel 2 Ausgeschaltet."
]
},
"AlarmAnlage Level 3 Ein": {
"commands": "set AlarmAnlage armed 3",
"message": [
"AlarmLevel 3 Eingeschaltet."
]
},
"AlarmAnlage Level 3 Aus": {
"commands": "set AlarmAnlage disarmed 3",
"message": [
"AlarmLevel 3 Ausgeschaltet."
]
},
"Send Statuslevel Alarmanlage": {
"commands": "set TelegramBot msg Status Level 0 = [AlarmAnlage:level0] \nStatus Level 1 = [AlarmAnlage:level1] \nStatus Level 2 = [AlarmAnlage:level2] \nStatus Level 3 = [AlarmAnlage:level3]",
"message": [
"Statuslevel der Alarmanlage."
]
}
}
}
@ binford6000
Wie bekommst du die Bildchen in dein Menü?
Grüße
Du kannst nicht nur Keyboards senden,es muss auch immer noch eine Nachricht mit dazu. Auch so ein Thema für das Wiki
Zitat@ binford6000
Wie bekommst du die Bildchen in dein Menü?
Moin, da ich die Unicode Character nicht auswendig kenne schreibe ich sie mir einfach in den Chat ;)
Sie stehen dann im
msgText Reading vom
TelegramBot-Device. Von da ab c&p...
Vor dem Posten eines Dialogs mit Emoticons hier musst Du sie aber entfernen. Das Forum unterstützt sie nicht...
Eine Liste aller Emoticons ist hier https://apps.timwhitlock.info/emoji/tables/unicode (https://apps.timwhitlock.info/emoji/tables/unicode) zu finden.
VG Sebastian
"Kameras": {
"message": [
"(Eingang) ",
"(Wohnzimmer) ",
"(Treppenaufgang) ",
"Um Keyboards anzuzeigen braucht es auch immer eine normale Nachricht!"
]
},
@Esjay: Hast Du in allen anderen auch gemacht, nur nicht in Kameras... ;)
ZitatAuch so ein Thema für das Wiki
@igami: Jepp, ist notiert.
VG Sebastian
Kann mir bitte nochmal jemand den Unterschied zwischen Inline und nicht Inline Keyboard erklären? Ich habe zwar das Bild im Wiki gesehen, aber bis auf den Hintergrund sehe ich keinen Unterschied.
Edit: Ok habe es mit den YouTube Videos selbst heraus gefunden, finde die sollten im Wiki beide gelistet sein, dass man den Unterschied besser sieht. Bei Inline ist das Menü quasi ein Text im Dialog und beim normalen ist es unterhalb des Textes, wo die Tastatur normal ist. Jetzt meine Frage, ich habe das Problem, dass beim normalen meine Texttastatur immer wieder angezeigt wird und ich auf den Kasten neben der Klammer klicken muss, dass mir das Dialogmenü angezeigt wird. Jemand eine Ahnung woran das liegt?
Edit2:
Warum auch immer, jetzt klappt es, dass es mir direkt in die richtige Tastatur springt.
Neues Problem irgendetwas lässt mein FHEM abstürzen folgender Fehler im Log:
2017.11.03 09:31:47 3: msg rr_Etienne: ID=1509697907.68058.1 TYPE=push ROUTE=TelegramBot RECIPIENT=@271028825 STATUS=OK PRIORITY=0 TITLE='' MSG='(Zurück)
Test wurde angeschaltet'
Unmatched ) in regex; marked by <-- HERE in m/%an) <-- HERE
TelegramBot_MTYPE%/ at ./FHEM/75_MSG.pm line 1728.
Hier ein list des Meta und Test Dialogs:
Internals:
DEF {
"meta": {
"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."
]
}
}
MSGCOMMAND msg push \@$recipients $message
NAME meta_Dialog
NOTIFYDEV TYPE=(ROOMMATE|GUEST)
NR 27
NTFY_ORDER 50-meta_Dialog
STATE Initialized
TRIGGER meta,zurück,beenden,abbrechen
TYPE msgDialog
READINGS:
2017-11-03 09:35:53 state Initialized
Attributes:
allowed rr_Etienne
evalSpecials me=meta
TelegramBot=TelegramBot
Internals:
DEF {
"Test": {
"match": "(Test|Zurück)",
"commands": "deletereading TYPE=msgDialog $recipient_history",
"message": [
"TelegramBot_MTYPE=queryInline (Test an)",
"TelegramBot_MTYPE=queryInline (Test aus)",
"TelegramBot_MTYPE=queryInline (Zurück)",
"Wir starten Test:"
]
},
"Test an": {
"commands": ["set Test on",
"deletereading TYPE=msgDialog $recipient_history"
],
"message" : [
"TelegramBot_MTYPE=queryInline (Zurück)",
"Test wurde angeschaltet"
]
},
"Test aus": {
"commands": ["set Test off",
"deletereading TYPE=msgDialog $recipient_history"
],
"message" : [
"TelegramBot_MTYPE=queryInline (Zurück)",
"Test wurde ausgeschaltet"
]
}
}
MSGCOMMAND msg push \@$recipients $message
NAME test_Dialog
NOTIFYDEV TYPE=(ROOMMATE|GUEST)
NR 25
NTFY_ORDER 50-test_Dialog
STATE Initialized
TRIGGER Test an,Test,Test aus
TYPE msgDialog
READINGS:
2017-11-03 09:36:43 state Initialized
Attributes:
allowed rr_Etienne
evalSpecials TelegramBot=TelegramBot
Zitat von: binford6000 am 03 November 2017, 05:10:29
Moin, da ich die Unicode Character nicht auswendig kenne schreibe ich sie mir einfach in den Chat ;)
Sie stehen dann im msgText Reading vom TelegramBot-Device. Von da ab c&p...
Vor dem Posten eines Dialogs mit Emoticons hier musst Du sie aber entfernen. Das Forum unterstützt sie nicht...
Eine Liste aller Emoticons ist hier https://apps.timwhitlock.info/emoji/tables/unicode (https://apps.timwhitlock.info/emoji/tables/unicode) zu finden.
VG Sebastian
Zitat von: igami am 03 November 2017, 05:08:04
Du kannst nicht nur Keyboards senden,es muss auch immer noch eine Nachricht mit dazu. Auch so ein Thema für das Wiki
Manchmal ist es dann doch einfacher als Gedacht. Ich danke euch.
Gruß
An dieser Stelle mal ein Hinweis, dass igami den ersten Post um folgendes editiert hat:
ZitatBei Problemen bitte den Dialog als Raw definition posten (siehe https://wiki.fhem.de/wiki/Import_von_Code_Snippets)
Die Dialoge sind als RAW einfach schneller zu importierten und damit auch zu testen! ;)
@Amenophis86: Fehler kommt bei dir vom 75_MSG.pm Modul. Schon der zweite "Nebeneffekt" wie bei mir mit 22_HOMEMODE.pm (siehe Post #145).
ZitatNeues Problem irgendetwas lässt mein FHEM abstürzen folgender Fehler im Log:
...
Hier ein list des Meta und Test Dialogs:
Warum benutzt Du nicht den originalen Meta-Dialog aus dem wiki?
defmod meta_Dialog msgDialog {\
"%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:"\
]\
},\
"abbrechen": {\
"match": "\/?abbrechen",\
"commands": [\
"deletereading TYPE=msgDialog $recipient_history",\
"deletereading %TelegramBot% $recipient_sentMsgId"\
],\
"message": [\
"(%me%) ",\
"Dialog abgebrochen."\
] \
},\
"beenden": {\
"match": "\/?beenden",\
"commands": [\
"deletereading TYPE=msgDialog $recipient_history",\
"deletereading %TelegramBot% $recipient_sentMsgId"\
],\
"message": [\
"(%me%) ",\
"Dialog beendet."\
]\
}\
}
attr meta_Dialog DbLogExclude .*
attr meta_Dialog allowed everyone
attr meta_Dialog room msg
Ich habe bei mir lediglich die Messages geändert.
VG Sebastian
Ich nutze den original Meta Dialog aus dem Wiki, der Fehle kommt scheinbar aus dem Test Dialog.
Wenn ich es richtig gesehen habe, dann soll es doch aber auch so sein, dass es quasi den meta Dialog gibt und dann unter Dialoge, wie die Waschmaschine. Und um diese Unter Dialoge zu erstellen und zu verstehen habe ich mir den Test Dialog gebastelt.
Hallo Igami,
kannst du mir sagen, wie du in deinem Waschmaschinen Dialog die Uhrzeit übergibst?
Unter programmieren wählst du ja die Uhrzeit, und über set %controlUnit% time $message
setzt du sie ja. Allerdings unter einem anderen Trigger?
Ich wollte das selbe mit der Saugstufe meines Staubsaugerroboters tun, sehe aber den Zusammenhang deiner beiden Trigger nicht. Kannst du mir einen Tipp geben?
defmod DialogRoberta msgDialog {\
"Roberta": {\
"message": [\
"(Roberta Start) ",\
"(Roberta Stopp) ",\
"(Roberta Laden) ",\
"(Roberta Pause) ",\
"(Roberta Status) ",\
"(Roberta Störungen) ",\
"(Roberta Saugstufe) ",\
"(abbrechen) ",\
"Hier das Menü für Roberta"\
],\
"Roberta Start": {\
"commands": "set Roberta start",\
"message": [\
"(%me%) ",\
"Ich fahre jetzt los"\
]\
},\
"Roberta Stopp": {\
"commands": "set Roberta stop",\
"message": [\
"(%me%) ",\
"Ich habe das Staubsaugen abgebrochen"\
]\
},\
"Roberta Laden": {\
"commands": "set Roberta charge",\
"message": [\
"(%me%) ",\
"Ich fahre zurück zur Station"\
]\
},\
"Roberta Pause": {\
"commands": "set Roberta pause",\
"message": [\
"(%me%) ",\
"Ich habe das Staubsaugen unterbrochen"\
]\
},\
"Roberta Status": {\
"commands": "set TelegramBot msg Batterie Level = [Roberta:batteryLevel]% \nState = [Roberta:state] \nLetzte Reinigung = [Roberta:history_0]\nFilter [:Roberta:consumables_filter]\nHauptbürste [Roberta:consumables_main_brush]\nSensoren [Roberta:consumables_sensors]\nSeitenbürste [Roberta:consumables_side_brush] ",\
"message": [\
"(%me%) ",\
"Hier ein paar Infos zu mir"\
]\
},\
"Roberta Störungen": {\
"commands": "set TelegramBot msg Störung [Roberta:error]\nFehlercode [Roberta:error_code]",\
"message": [\
"(%me%) ",\
"Ich habe folgende Störungen"\
]\
},\
"Roberta Saugstufe": {\
"message": [\
"( 10 | 20 | 30 | 40 ) ",\
"( 60 | 70 | 80 | 90 ) ",\
"(%me%) ",\
"Bitte die mögliche Saugstufe einstellen"\
]\
},\
"Saugstufe": {\
"match": "[01-99]",\
"commands": "set Roberta fan_power $message",\
"message": [\
"(%me%) ",\
"Saugstufe auf xx gestellt"\
]\
}\
}\
}
attr DialogRoberta allowed everyone
attr DialogRoberta room msg
setstate DialogRoberta 2017-11-03 17:06:59 state Initialized
Grüße
Ist doch in dem Trigger in dem sie eingegeben wird. Im vorherigen wird das Keyboard dafür bereitgestellt.
Zitat von: igami am 03 November 2017, 19:12:10
Ist doch in dem Trigger in dem sie eingegeben wird. Im vorherigen wird das Keyboard dafür bereitgestellt.
Sry, aber ich kann dir nicht folgen!
Dein Match ist falsch. Bitte mit regex befassen. Morgen kann ich dir mehr sagen, wenn ich nicht nur über tapatalk schreibe
Zitat von: igami am 03 November 2017, 19:55:48
Dein Match ist falsch. Bitte mit regex befassen. Morgen kann ich dir mehr sagen, wenn ich nicht nur über tapatalk schreibe
Ich danke dir. Wahrscheinlich ist mir noch nicht ganz klar, was "Gesamte Nachricht bedeutet".
Habe ich eigentlich getan. Zumindest bekomme ich ein match auf 101regex für sämtliche Zahlen.
Aber gut, dann mache ich für heute Schluss.
Grüße
Ich hatte heute Nachmittag wieder einen Crash:
Unmatched ( in regex; marked by <-- HERE in m/%( <-- HERE !%/ at ./FHEM/75_MSG.pm line 1728.
Ich denke zu dieser Zeit war die Mobilfunkverbindung schlecht und ist ständig gewechselt zwischen Edge und LTE.
Kann sein, dass eine Message dabei unvollständig angekommen ist und somit der Fehler ausgelöst wurde.
@ Amenophis86: Könnte das bei dir auch so gewesen sein?
VG Sebastian
Thema 1:
Zitat von: igami am 02 November 2017, 22:26:28
Klar geht das
...
"message": [
"{'UpdateCheck: '. fhem('update check')}",
"/hauptmenue"
]
...
Sollte so funktionieren, getestet habe ich es aber nicht ;)
Hab es etwas angepasst:
"Update Check": {
"message": [
"(Zurück:%me%) ",
"{'UpdateCheck: '. fhem('update check')}"
]
}
Es funktioniert.
Bei mir ist es noch in einem Dialog verschachtelt, aber so könnte es eventuell ins Wiki als Anwendungsbeispiel.
Interesant finde ich, das es so glappt, wenn ich aber das zurück tausche, also so:
"Update Check": {
"message": [
"{'UpdateCheck: '. fhem('update check')}",
"(Zurück:%me%) ",
]
}
dann bekomme ich keinen Button mit Zurück geliefert, sondern nur den Text (Zurück:%me%)".
--------
Thema 2:
Ich komm leider nicht weiter (also es wird kein Bild versendet) und die beispiele hier im Forum bringen mich leider auch nicht weiter:
"Wetter jetzt": {
"message": [
"(zurück:Wetter) ",
"hier kommt noch was"
],
"commands": [
"set %TelegramBot% sendImage /opt/fhem/www/images/default/weather/sunny.png"
]
}
wo sitzt mein Fehler?
Auch wenn ich direkt meine ID eingebe kommt kein Bild an.
Edit: Wenn ich jedoch anstelle von %TelegramBot% nur TelegramBot verwende geht es. Sehr komisch.
-----
Thema 3:
Oh, eine Sache hab ich noch:
Ich verwende in manchen bereichen den Befehl (als Beispiel):
set TelegramBot message \@-1*******3 Heute ist GelberSack!"
Da ich Inline Verwende bekomme ich diese Nachricht nicht als neuer Befehl, sondern als ersatz auf eine Alte.
Ich hab das Problem wie folgt gelößt:
attr message2queryEditInline disable 1;
set TelegramBot message \@-1*******3 Heute ist GelberSack!";
attr message2queryEditInline disable 0;
Gibt es da was besseres? wäre das was fürs Wiki?
Grüße.
Zitat von: binford6000 am 03 November 2017, 21:56:20
Ich hatte heute Nachmittag wieder einen Crash:
Unmatched ( in regex; marked by <-- HERE in m/%( <-- HERE !%/ at ./FHEM/75_MSG.pm line 1728.
Ich denke zu dieser Zeit war die Mobilfunkverbindung schlecht und ist ständig gewechselt zwischen Edge und LTE.
Kann sein, dass eine Message dabei unvollständig angekommen ist und somit der Fehler ausgelöst wurde.
@ Amenophis86: Könnte das bei dir auch so gewesen sein?
VG Sebastian
An der Vernunft kann es eigentlich nicht liegen. Aber das irgendwas nicht komplett ankam ist gut möglich. Glaube der Fehler trat auf, wenn FHEM einen Moment brauchte, bis wieder gepollt wurde von Telegrambot. Er lässt sich aber schwer reproduzieren, weil ich jedes Mal den kompletten Dialog löschen musste um FHEM wieder nutzen zu können. Sonst ist es beim Neustart direkt wieder gestorben nach kurzer Zeit.
...
"Roberta Saugstufe": {\
"message": [\
"(10|20|30|40) ",\
"(60|70|80|90) ",\
"(%me%) ",\
"Bitte die mögliche Saugstufe einstellen"\
]\
},\
"Saugstufe": {\
"match": "[1-9]0",\
...
So sollte es funktionieren. Die Leerzeichen vor und nach dem Keyboard hatten mir anfangs mal Probleme beseitigt und sind nicht mehr erforderlich.
Zitat von: Flipper92 am 03 November 2017, 22:03:10
Interesant finde ich, das es so glappt, wenn ich aber das zurück tausche, also so:
"Update Check": {
"message": [
"{'UpdateCheck: '. fhem('update check')}",
"(Zurück:%me%) ",
]
}
dann bekomme ich keinen Button mit Zurück geliefert, sondern nur den Text (Zurück:%me%)".
Die Keyboards müssen immer zuerst stehen, das liegt an der TelegramBor Syntax.
Zitat von: Flipper92 am 03 November 2017, 22:03:10
Edit: Wenn ich jedoch anstelle von %TelegramBot% nur TelegramBot verwende geht es. Sehr komisch.
Die %% sind ja Ersetzungen, wenn die nicht gepflegt sind steht da auch nur %TelegramBot% was es ja als device nicht gibt.
Zitat von: Flipper92 am 03 November 2017, 22:03:10
Oh, eine Sache hab ich noch:
Ich verwende in manchen bereichen den Befehl (als Beispiel):
set TelegramBot message \@-1*******3 Heute ist GelberSack!"
Da ich Inline Verwende bekomme ich diese Nachricht nicht als neuer Befehl, sondern als ersatz auf eine Alte.
Ich hab das Problem wie folgt gelößt:
attr message2queryEditInline disable 1;
set TelegramBot message \@-1*******3 Heute ist GelberSack!";
attr message2queryEditInline disable 0;
Gibt es da was besseres? wäre das was fürs Wiki?
Ich habe mich von den inline Keyboards verarbschiedet. Aber du könntest für die Benachrichtigung des Gelben Sackes auch einen Dialog nutzen, damit das cmdAlias funktioniert. Soweit die Theorie ::)
Zitat von: igami am 04 November 2017, 09:59:18
Die %% sind ja Ersetzungen, wenn die nicht gepflegt sind steht da auch nur %TelegramBot% was es ja als device nicht gibt.
Oh, war wieder ein fehler beim "myMsgConfig" hatte dort noch das alte evalSpecials. nun geändert in msgDialog_evalSpecials.
Zitat von: igami am 04 November 2017, 09:59:18
Ich habe mich von den inline Keyboards verarbschiedet. Aber du könntest für die Benachrichtigung des Gelben Sackes auch einen Dialog nutzen, damit das cmdAlias funktioniert. Soweit die Theorie ::)
Das cmdAlias funktioniert ja super ::) aber es soll ja nicht bei allen Nachrichten greifen.
Danke für die Hilfe und auch das Modul.
Das Menü ist schon super.
Hallo,
ich bin am Wochenende auf das Modul gestoßen und musste es gleich mal ausprobieren, um meine Dialoge abzulösen.
Zitat von: Esjay am 02 November 2017, 20:37:01
Kann ich das Menü so aufbauen, dass ich es nicht immer anfassen muss wenn ich ein neues Device hinzufüge?
Also zum Beispiel beim Ein und Ausschalten von Steckdosen.
Das würde mich auch interessieren. Daher habe ich einfach mal angefangen, zu experimentieren:
{"Lampen einschalten":{
"message":[
"{return(LampsOff())}"
]
}
}
mit
sub LampsOff
{
my @lights = devspec2array('.*\.LI\..*:FILTER=state!=on:FILTER=TYPE!=DOIF:FILTER=TYPE!=notify');;
my $msg = 'Es sind folgende Lichter ausgeschaltet:
';
if (@lights > 0 and defined($defs{$lights[0]})){
foreach (@lights){
$msg .= '('.$_.')
';
}
}else{
$msg = 'Es sind alle Lichter eingeschaltet.';
}
return $msg;
}
in der myUtils liefert eine Nachricht mit der Liste der ausgeschalteten Lampen. Leider aber eben als eine Nachricht und nicht als n Menüpunkte (siehe Anhang). Ich denke, wenn man das Modul dazu bewegen könnte, daraus Menüpunkte zu machen, müsste es doch mittels Regexp im match-Part und Textvariable im command auch möglich sein, auf die durch Anklicken erzeugte Nachricht das entsprechende Licht einzuschalten?!
Ronny
So geht das mit den Menüs erstmal:
{"Lampen einschalten":{
"message":[
"{return(LampsOff())}",
" Folgende Lampen sind aus"
]
}
}
mit
sub LampsOff
{
my @lights = devspec2array('.*\.LI\..*:FILTER=state!=on:FILTER=TYPE!=DOIF:FILTER=TYPE!=notify');
my $msg = '';
if (@lights > 0 and defined($defs{$lights[0]})){
foreach (@lights){
$msg .= '('.$_.') ';
}
}else{
$msg = 'Es sind alle Lichter eingeschaltet.';
}
return $msg;
}
Ich bleibe dran und berichte, wenn ich schalten kann :-)
Ronny
So,
ich habe mir nun mal einen dynamischen Dialog für das Schalten meiner Lampen gebaut. Dieser nutzt das Inline Menü um einen Klartextnamen zur jeweiligen Lampe anzuzeigen, könnte aber auch auf das andere Menü umgebaut werden, dann wird allerdings der FHEM-Name angezeigt.
Die Dialog:
{
"Beleuchtung": {
"message": [
"(Lampen einschalten) ",
"(Lampen ausschalten) ",
"(Lampen schalten) ",
"(abbrechen) ",
"Lampen schalten:"
],
"Lampen einschalten": {
"message": [
"{return(lampsOff())}"
],
"Einschalten": {
"match": ".*.LI..*",
"commands": [
"set $message on",
"set $SELF say @$recipient Beleuchtung|Lampen einschalten"
]
},
"Aktualisieren": {
"commands": [
"set $SELF say @$recipient Beleuchtung|Lampen einschalten"
]
},
"Zurück": {
"commands": [
"set $SELF say @$recipient Beleuchtung"
]
}
},
"Lampen ausschalten": {
"message": [
"{return(lampsOn())}"
],
"Ausschalten": {
"match": ".*.LI..*",
"commands": [
"set $message off",
"set $SELF say @$recipient Beleuchtung|Lampen ausschalten"
]
},
"Aktualisieren": {
"commands": [
"set $SELF say @$recipient Beleuchtung|Lampen ausschalten"
]
},
"Zurück": {
"commands": [
"set $SELF say @$recipient Beleuchtung"
]
}
},
"Lampen schalten": {
"message": [
"{return(lamps())}"
],
"Schalten": {
"match": ".*.LI..*",
"commands": [
"set $message",
"set $SELF say @$recipient Beleuchtung|Lampen schalten"
]
},
"Aktualisieren": {
"commands": [
"set $SELF say @$recipient Beleuchtung|Lampen schalten"
]
},
"Zurück": {
"commands": [
"set $SELF say @$recipient Beleuchtung"
]
}
}
}
}
Und die benötigten Funktionen in der myUtils:
sub lampsOff
{
my @lights = devspec2array('.*\.LI\..*:FILTER=state!=on:FILTER=TYPE!=DOIF:FILTER=TYPE!=notify');
my $msg = '';
if (@lights > 0 and defined($defs{$lights[0]})){
foreach (@lights){
$msg .= '('.AttrVal($_,"room","").' '.substr($_, 9).':'.$_.') ';
}
$msg .= '(Aktualisieren) (Zurück) (Hauptmenü:Wilhelm) Folgende Lampen sind aus:';
}else{
$msg = '(Aktualisieren) (Zurück) (Hauptmenü:Wilhelm) Es sind alle Lichter eingeschaltet.';
}
return $msg;
}
sub lampsOn
{
my @lights = devspec2array('.*\.LI\..*:FILTER=state!=off:FILTER=TYPE!=DOIF:FILTER=TYPE!=notify');
my $msg = '';
if (@lights > 0 and defined($defs{$lights[0]})){
foreach (@lights){
$msg .= '('.AttrVal($_,"room","").' '.substr($_, 9).':'.$_.') ';
}
$msg .= '(Aktualisieren) (Zurück) (Hauptmenü:Wilhelm) Folgende Lampen sind an:';
}else{
$msg = '(Aktualisieren) (Zurück) (Hauptmenü:Wilhelm) Es sind alle Lichter ausgeschaltet.';
}
return $msg;
}
sub lamps
{
my @lights = devspec2array('.*\.LI\..*:FILTER=TYPE!=DOIF:FILTER=TYPE!=notify');
my $msg = '';
if (@lights > 0 and defined($defs{$lights[0]})){
foreach (@lights){
$msg .= '('.AttrVal($_,"room","").' '.substr($_, 9).' '.((ReadingsVal($_,'state','') eq 'off')?' ist aus':' ist an').':'.$_.((ReadingsVal($_,'state','') eq 'off')?' on':' off').') ';
}
$msg .= '(Aktualisieren) (Zurück) (Hauptmenü:Wilhelm) Welche Lampe soll geschaltet werden:';
}
return $msg;
}
Leider funktioniert das automatische aktualisieren mit sleep nicht, sodass ich erstmal einen entsprechenden Knopf eingebaut habe. Außerdem will ich %me% noch als Parameter an die drei subs übergeben, um dies nicht hardcoded da drin zu haben.
Der Dialog ist sicherlich noch nicht perfekt, kann aber bestimmt als Grundlage für andere dynamische Dialoge dienen...
Ronny
Das sieht doch schonmal nicht schlecht aus :)
Hallo
Super Modul. Funktioniert soweit alles bestens.
FS20-Module, die mit "toggle" geschaltet werden, zeigen leider beim state kein "on" oder "off", sondern "toggle" an.
Mit dem Code
"Weg": {
"commands": [
"{fhem(\"set VP_LichtWeg on\") if(ReadingsVal('VP_LichtWeg', 'state', '') eq 'off');;}",
"{fhem(\"set VP_LichtWeg off\") if(ReadingsVal('VP_LichtWeg', 'state', '') eq 'on');;}"],
"message": ["(%me%) ", "Weg: [VP_LichtWeg:state]"]
},
passiert leider folgendes:
Problem 1
Licht Weg wird eingeschaltet und sofort wieder ausgeschaltet. Heisst, er arbeitet alles ab (eigentlich logisch).
Gibt es eine Möglichkeit mit der "if-else-Formel" zu schalten oder muss ich das über eine "Sub machen"?
Problem2
Lasse ich Teil 2 des "commands" weg, zeigt mir die "message" aber immer noch den Status "off" an. Hier vermute ich, dass der Script für die "message" zu schnell abgearbeitet. Habe versucht, mittels "sleep" eine Pause einzuführen. Funktioniert leider auch nicht.
Gruss
Chris
Zitat von: outhouse am 07 November 2017, 08:03:23
Gibt es eine Möglichkeit mit der "if-else-Formel" zu schalten oder muss ich das über eine "Sub machen"?
Du kannst doch das FHEM IF Verwenden
IF ([VP_LichtWeg:state] eq 'off') (set VP_LichtWeg on) ELSE (set VP_LichtWeg off)
Zitat von: outhouse am 07 November 2017, 08:03:23
Lasse ich Teil 2 des "commands" weg, zeigt mir die "message" aber immer noch den Status "off" an. Hier vermute ich, dass der Script für die "message" zu schnell abgearbeitet. Habe versucht, mittels "sleep" eine Pause einzuführen. Funktioniert leider auch nicht.
Da FS20 keinen Rückkanal hat (soweit ich weiß) sollte der state direkt beim Kommando gesetzt werden. Was sagt denn dein Eventmonitor dazu?
Zitat von: igami am 07 November 2017, 19:00:15
Du kannst doch das FHEM IF Verwenden
IF ([VP_LichtWeg:state] eq 'off') (set VP_LichtWeg on) ELSE (set VP_LichtWeg off)
Da hätte ich auch selber drauf kommen können. Hatte wohl "Tomaten vor den Augen". Funktioniert einwandfrei!
Da FS20 keinen Rückkanal hat (soweit ich weiß) sollte der state direkt beim Kommando gesetzt werden. Was sagt denn dein Eventmonitor dazu?
Durch den IF-Befehl funktioniert jetzt auch die "message" für die FS20. Bei Enocean muss ich anstelle des "state" den "channel0" abfraagen. So funktioniert es auch bei diesen.
Danke für die Hilfe!
Chris
Habe eine Verständnisfrage. Beim Waschmaschinencode gibt es diesen Teil:
"programmieren": {
"message": [
"(bestätigen|abbrechen) ",
"(00:00:00_00|00:30:00_30|01:00:01_00|01:30:01_30|02:00:02_00|02:30:02_30) ",
"(03:00:03_00|03:30:03_30|04:00:04_00|04:30:04_30|05:00:05_00|05:30:05_30) ",
"(06:00:06_00|06:30:06_30|07:00:07_00|07:30:07_30|08:00:08_00|08:30:08_30) ",
"(09:00:09_00|09:30:09_30|10:00:10_00|10:30:10_30|11:00:11_00|11:30:11_30) ",
"(12:00:12_00|12:30:12_30|13:00:13_00|13:30:13_30|14:00:14_00|14:30:14_30) ",
"(15:00:15_00|15:30:15_30|16:00:16_00|16:30:16_30|17:00:17_00|17:30:17_30) ",
"(18:00:18_00|18:30:18_30|19:00:19_00|19:30:19_30|20:00:20_00|20:30:20_30) ",
"(21:00:21_00|21:30:21_30|22:00:22_00|22:30:22_30|23:00:23_00|23:30:23_30) ",
"Wann soll die Wäsche fertig sein?",
"Bitte Uhrzeit in HH:MM angeben.",
"Aktuell ist [%controlUnit%:time] Uhr eingestellt."
],
"Uhrzeit": {
"match": "([0-1][0-9]|2[0-3])[:_][0-5][0-9]",
"commands": [
"{my $time = '$message';; $time =~ s/_/:/;; fhem(\"set %controlUnit% time $time\");;}",
"set $SELF say @$recipient Waschmaschine|programmieren|bestätigen"
]
},
Warum ist der Teil Uhrzeit ... noch im String des Teil programmieren drinnen? Was es macht habe ich verstanden, nur nicht, wieso es noch im oberen Teil integriert ist nicht.
Weil man erst auf programmieren geht und dann die Uhrzeit eingibt. Ist also die nächste Stufe im Dialog.
Und was wäre der Nachteil, wenn ich den Uhrzeitteil jetzt eigenständig setzen würde und nicht als Unterabschnitt von programmieren? Weil er dann immer reagieren würde, wenn ich eine Uhrzeit schreibe?
Die Uhrzeit wird dann immer ausgewertet, wenn du dich auf der vorherigen Stufe befindest. Du kannst es auch so bauen, dass sie immer ausgewertet wird.
Ok, das dachte ich mir, war mir allerdings nicht sicher. Danke für die Info.
Hallo zusammen,
erstmal vielen Dank für das Modul und das Engagement hier in dem Forum!
Ich benutze bisher die ChatBot Lösung hier aus dem Forum und bin dann kürzlich über msgDialog gestolpert - macht natürlich optisch mehr her und ist flexibler :). Leider scheitere ich bereits bei der Basis Config und brauche mal einen Schubser.
Zur Config:
robot soll das Keyword sein um die Dialoge aufzurufen, teleBot heisst das Fhem TelegramBot Device.
defmod globalMsg msgConfig
attr globalMsg userattr evalSpecials:textField-long
attr globalMsg comment FHEM Global Configuration for command 'msg'
attr globalMsg evalSpecials me=robot TelegramBot=teleBot
attr globalMsg group Global
attr globalMsg msgContactPush teleBot
defmod test msgDialog {\
"test": {\
"message": [\
"** test **",\
"Zeile 2"\
]\
}\
}
attr test allowed everyone
Devices meta_Dialog, message2queryEditInline, msgPushReceived, sentMsgIdByPeerId aus Referenz bzw. aus diesem Thread verwendet.
ROOMMATE vorab eingerichtet.
Was funktioniert:
- messages via teleBot direkt versenden an mich selbst als auch unsere Familiemgruppe (wird in einigen notifies, DOIFs genutzt)
- messages via "msg Hallo" versenden funktioniert
ROOMMATE readings fhemMsgPushReceived, fhemMsgPush werden mit aktuellen Infos gefüllt.
Ich habe leider einige Std gebraucht zu realisieren, dass utf8Special notwendig ist, denn wenn nicht gesetzt funktioniert die Benachrichtigungslogik so halb und es erscheinen mit verbose 0 (default) eben keine Fehler im Log. Soll heissen, die Nachrichten wurden auf meinem rpi2 stark verzögert versand und noch seltsamer, in den o.g. readings stand was in Telegram hätte erscheinen sollen aber der Telegram Client auf dem Mac oder auch Handy hat nichts angezeigt .... vielleicht hilft das anderen Neulingen die "Lernkurve" zu verkürzen.
Wo ich im Moment hänge:
1. Gebe ich im Telegram Bot Channel auf dem Mac das keyword "robot" ein geschieht nichts. Gebe ich "start" ein kommt der erwartete Dialog, die Inline Button mit Flur, test, abbrechen. Habe ich das mit dem keyword falsch verstanden oder muss das userattr im msgConfig Device anders lauten?
2. Wenn ich nun abbrechen drücke erscheint "Dialog abgebrochen" und ein Inline Button mit %me%. Vermutlich soll hier was anderes als %me% stehen oder?
3. Wenn ich abbrechen drücke erscheint diese o.g. Antwort 2 mal hintereinander was vermutlich so auch nicht sein sollte.
4. Im Moment versuche ich erstmal die grundlegende Funktionalität zwischen Fhem msgDialog <-> Bot Channel auf einem Telegram Client herzustellen. Final sollen die Dialoge inkl. Antworten allerdings in einem Gruppenchat erscheinen. Da ich ROOMMATE bisher nicht eingesetzt habe ist mir allerdings nicht ganz klar wie das nun aufzusetzen wäre. Muss ich dafür einen eigenen ROOMMATE aufsetzen und das attr msgContactPush auf teleBot:@<peerId des Gruppenchats> setzen?
Wäre super wenn ihr mir ein paar Hinweise geben könntet.
Danke Sven
Zitat1. Gebe ich im Telegram Bot Channel auf dem Mac das keyword "robot" ein geschieht nichts.
Hallo Sven,
das Attribut heißt nun msgDialog_evalSpecials:
attr globalMsg msgDialog_evalSpecials me=robot TelegramBot=teleBot
Im Wiki ist seit gestern Abend auch ein Bereich mit Tipps zur Fehlersuche zu finden ;)
VG Sebastian
Hi Sebastian,
jau, nun klappts auch mit dem keyword - Danke! Damit sind die Problemchen 1. + 2. gelöst.
Hätte schwören können, dass ich das schon probiert hatte ...
Gruss Sven
Zitat3. Wenn ich abbrechen drücke erscheint diese o.g. Antwort 2 mal hintereinander was vermutlich so auch nicht sein sollte.
Bitte die Dialoge als RAW posten. Dann ist die Hilfestellung einfacher... ;)
Zitat4. Im Moment versuche ich erstmal die grundlegende Funktionalität zwischen Fhem msgDialog <-> Bot Channel auf einem Telegram Client herzustellen. Final sollen die Dialoge inkl. Antworten allerdings in einem Gruppenchat erscheinen. Da ich ROOMMATE bisher nicht eingesetzt habe ist mir allerdings nicht ganz klar wie das nun aufzusetzen wäre. Muss ich dafür einen eigenen ROOMMATE aufsetzen und das attr msgContactPush auf teleBot:@<peerId des Gruppenchats> setzen?
Ich benutze keinen Gruppen-Chat.
attr msgContactPush <teleBot:@peerId des Gruppenchats>
im ROOMMATE sollte aber auch funktionieren.
VG Sebastian
Zitat von: hoods am 11 November 2017, 13:54:00
3. Wenn ich abbrechen drücke erscheint diese o.g. Antwort 2 mal hintereinander was vermutlich so auch nicht sein sollte.
Das msgPushReceived wird nichtmehr benötigt, das es nun Teil des msgConfig Moduls ist. Wenn es dennoch vorhanden ist werden die Nachrichten doppelt ausgewertet.
Zitat von: hoods am 11 November 2017, 13:54:00
4. Im Moment versuche ich erstmal die grundlegende Funktionalität zwischen Fhem msgDialog <-> Bot Channel auf einem Telegram Client herzustellen. Final sollen die Dialoge inkl. Antworten allerdings in einem Gruppenchat erscheinen. Da ich ROOMMATE bisher nicht eingesetzt habe ist mir allerdings nicht ganz klar wie das nun aufzusetzen wäre. Muss ich dafür einen eigenen ROOMMATE aufsetzen und das attr msgContactPush auf teleBot:@<peerId des Gruppenchats> setzen?
Gruppen sind momentan nicht möglich.
Hallo zusammen.
Tolles Modul, lässt sich prima ausbauen.
Ich nutze in der Momentanen Ausbaustufe den Meta-Dialog und die Einkaufsliste.
Das funtkioniert soweit auch alles.
Jetzt habe ich heute auf dem Handy meiner Frau Telegram installiert um u.a. die Einkaufsliste gemeinsam nutzen zu können.
Also Roommate für meine Frau angelegt, msgContactPush dort eingepflegt und erst mal ausprobiert.
Nun ist folgendes passiert:
wenn ich den Trigger für den Meta-Dialog manuell eingebe, funktioniert alles. Wenn ich (egal auf welchem Handy, solange nur meines Aktiv war, hats funktioniert) auf den Inline mit dem %me%-Trigger klicke, bekomme ich eine Fehlermeldung:
TelegramBot unauthorized cmd from user :J------: (xxxxxxxxx)
Msg: Callback for inline query id: 1765405902686301153 from : xxxxxxxx : data : kanaan
Hier noch der Vollständigkeit halber ein paar Lists:
ROOMMATE meiner Frau:
DURATIONTIMER 1510498594.46849
NAME Mama
NOTIFYDEV global,
NR 215
NTFY_ORDER 50-Mama
READY 1
STATE zuhause
TYPE ROOMMATE
Helper:
DBLOG:
durTimerPresence:
DBLogging:
TIME 1510498534.47349
VALUE 02:23:26
durTimerPresence_cr:
DBLogging:
TIME 1510498534.47349
VALUE 143
fhemMsgRcvPush:
DBLogging:
TIME 1510497985.3467
VALUE abbrechen
fhemMsgRcvPushGw:
DBLogging:
TIME 1510497985.3467
VALUE telbot
READINGS:
2017-11-12 13:32:08 durTimerAbsence 00:00:00
2017-11-12 13:32:08 durTimerAbsence_cr 0
2017-11-12 15:55:34 durTimerPresence 02:23:26
2017-11-12 15:55:34 durTimerPresence_cr 143
2017-11-12 12:35:40 durTimerSleep 00:00:00
2017-11-12 12:35:40 durTimerSleep_cr 0
2017-11-12 15:46:25 fhemMsgPush (kanaan)
Dialog abgebrochen.
2017-11-12 15:46:25 fhemMsgPushGw telbot:@xxxxxxxx:OK
2017-11-12 15:46:25 fhemMsgPushPrio 0
2017-11-12 15:46:25 fhemMsgPushState 1
2017-11-12 15:46:25 fhemMsgPushTitle -
2017-11-12 15:46:25 fhemMsgRcvPush abbrechen
2017-11-12 15:46:25 fhemMsgRcvPushGw telbot
2017-11-12 15:46:25 fhemMsgState 1
2017-11-12 15:46:25 fhemMsgStateTypes push:1
2017-11-12 13:32:08 lastArrival 2017-11-12 13:32:08
2017-11-12 13:25:50 lastDeparture 2017-11-12 13:25:50
2017-11-12 13:32:08 lastDurAbsence 00:06:18
2017-11-12 13:32:08 lastDurAbsence_cr 6
2017-11-12 13:25:50 lastDurPresence 00:05:31
2017-11-12 13:25:50 lastDurPresence_cr 6
2017-11-12 13:25:50 lastLocation home
2017-11-12 13:25:50 lastMood calm
2017-11-12 13:32:08 lastState absent
2017-11-12 13:32:08 location home
2017-11-12 13:32:08 mood calm
2017-11-12 13:32:08 presence present
2017-11-12 13:32:08 state home
2017-11-12 13:20:19 wayhome 0
TIMER:
Mama_DurationTimer:
HASH Mama
MODIFIER DurationTimer
NAME Mama_DurationTimer
Attributes:
alias Status Mama
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 Mama
icon people_sensor
msgContactPush telbot:@xxxxxxxx
room Anwesenheit,benachrichtigungen
rr_realname group
sortby 1
webCmd state
widgetOverride state:zuhause,bettfertig,schläft,aufgestanden,abwesend,verreist
Mein ROOMMATE:
DURATIONTIMER 1510498653.91775
NAME ich
NOTIFYDEV global,presence_PapaHandy
NR 206
NTFY_ORDER 50-ich
READY 1
STATE zuhause
TYPE ROOMMATE
Helper:
DBLOG:
durTimerPresence:
DBLogging:
TIME 1510498593.92267
VALUE 27:41:36
durTimerPresence_cr:
DBLogging:
TIME 1510498593.92267
VALUE 1662
fhemMsgRcvPush:
DBLogging:
TIME 1510495299.39924
VALUE Test
fhemMsgRcvPushGw:
DBLogging:
TIME 1510495299.39924
VALUE telbot
READINGS:
2017-11-11 12:14:57 durTimerAbsence 00:00:00
2017-11-11 12:14:57 durTimerAbsence_cr 0
2017-11-12 15:56:33 durTimerPresence 27:41:36
2017-11-12 15:56:33 durTimerPresence_cr 1662
2017-10-19 22:47:13 durTimerSleep 00:00:00
2017-10-19 22:47:13 durTimerSleep_cr 0
2017-11-12 14:12:46 fhemMsgPush (kanaan)
Dialog abgebrochen.
2017-11-12 14:12:46 fhemMsgPushGw telbot:@yyyyyyyy:OK
2017-11-12 14:12:46 fhemMsgPushPrio 0
2017-11-12 14:12:46 fhemMsgPushState 1
2017-11-12 14:12:46 fhemMsgPushTitle -
2017-11-12 15:01:39 fhemMsgRcvPush Test
2017-11-12 15:01:39 fhemMsgRcvPushGw telbot
2017-11-12 14:12:46 fhemMsgState 1
2017-11-12 14:12:46 fhemMsgStateTypes push:1
2017-11-11 12:14:57 lastArrival 2017-11-11 12:14:57
2017-11-11 12:04:55 lastDeparture 2017-11-11 12:04:55
2017-11-11 12:14:57 lastDurAbsence 00:10:02
2017-11-11 12:14:57 lastDurAbsence_cr 10
2017-11-11 12:04:55 lastDurPresence 19:35:27
2017-11-11 12:04:55 lastDurPresence_cr 1175
2017-11-11 12:04:55 lastLocation home
2017-11-11 12:04:55 lastMood calm
2017-11-11 12:14:57 lastState absent
2017-11-11 12:14:57 location home
2017-11-11 12:14:57 mood calm
2017-11-11 12:14:57 presence present
2017-11-11 12:14:57 state home
2017-10-19 22:47:36 wayhome 0
TIMER:
ich_DurationTimer:
HASH ich
MODIFIER DurationTimer
NAME ich_DurationTimer
Attributes:
alias Status Papa
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 ich
icon people_sensor
msgContactPush telbot:@yyyyyy
room Anwesenheit,benachrichtigungen
rr_presenceDevices presence_PapaHandy
rr_realname group
sortby 1
webCmd state
widgetOverride state:zuhause,bettfertig,schläft,aufgestanden,abwesend,verreist
Das msgConfig:
NAME msgConfig
NOTIFYDEV TYPE=(Jabber|TelegramBot|yowsup)
NR 203
NTFY_ORDER 50-msgConfig
STATE 1
TYPE msgConfig
READINGS:
2017-10-19 23:03:32 fhemMsgPush test
2017-10-19 23:03:32 fhemMsgPushGw telbot:OK
2017-10-19 23:03:32 fhemMsgPushPrio 0
2017-10-19 23:03:32 fhemMsgPushState 1
2017-10-19 23:03:32 fhemMsgPushTitle -
2017-10-19 23:03:32 fhemMsgState 1
2017-10-19 23:03:32 fhemMsgStateTypes push:1
Attributes:
comment FHEM Global Configuration for command 'msg'
group Global
msgContactPush telbot
msgDialog_evalSpecials me=kanaan
TelegramBot=telbot
room benachrichtigungen
stateFormat fhemMsgState
userattr msgDialog_evalSpecials:textField-long msgDialog_msgCommand:textField
verbose 3
der meta_dialog im Raw-Format:
defmod meta_Dialog msgDialog {\
"%me%": {\
"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."\
]\
}\
}
attr meta_Dialog allowed everyone
attr meta_Dialog room benachrichtigungen
setstate meta_Dialog Mama: abbrechen
setstate meta_Dialog 2017-11-12 15:46:25 state Mama: abbrechen
Und der Vollständigkeit halber noch der TelegramBot:
FAILS 0
NAME telbot
NR 180
OLD_POLLING 141
POLLING 141
SNAME telbot
STATE Polling
TYPE TelegramBot
UPDATER 0
WAIT 0
me ------:Fhem:@D-------t
offset_id 355092466
sentLastResult SUCCESS
sentMsgId
sentMsgOptions
sentMsgPeer J-----
sentMsgPeerId xxxxxxxx
sentMsgResult SUCCESS
sentMsgText AnswerInline: - 1765405902686301153
Contacts:
xxxxxxxxx xxxxxxxxxx:J----:
yyyyyyyyy yyyyyyyyyy:A-----z:@Darkmozart
HU_DO_PARAMS:
NAME
addr https://api.telegram.org:443
boundary TelegramBot_boundary-x0123
buf
code 200
conn
data
displayurl <hidden>
header agent: TelegramBot/1.0
User-Agent: TelegramBot/1.0
Accept: application/json
Accept-Charset: utf-8
Content-Type: multipart/form-data; boundary=TelegramBot_boundary-x0123
hideurl 1
host api.telegram.org
httpheader HTTP/1.1 200 OK
Server: nginx/1.10.0
Date: Sun, 12 Nov 2017 14:46:32 GMT
Content-Type: application/json
Content-Length: 25
Connection: close
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Expose-Headers: Content-Length,Content-Type,Date,Server,Connection
Strict-Transport-Security: max-age=31536000; includeSubdomains
hu_blocking 0
hu_filecount 25
hu_port 443
hu_portSfx
loglevel 4
method POST
path /botXXXXXXXXXXXXXXXXXXX/answerCallbackQuery
protocol https
redirects 0
timeout 30
url https://api.telegram.org/botXXXXXXXXXXXXXXXXXXXXXXXXXX/answerCallbackQuery
args:
yyyyyyyyyyy
1765405902686301153
12
undef
undef
2
hash:
sslargs:
HU_UPD_PARAMS:
FD 22
NAME
addr https://api.telegram.org:443
buf
code 200
displayurl <hidden>
header agent: TelegramBot/1.0
User-Agent: TelegramBot/1.0
Accept: application/json
Accept-Charset: utf-8
hideurl 1
host api.telegram.org
hu_blocking 0
hu_filecount 140
hu_port 443
hu_portSfx
isPolling update
loglevel 4
method GET
offset xxxxxxxxx
path /botXXXXXXXXXXXXXXXXXXx/getUpdates?offset=XXXXXXXXXXX&limit=5&timeout=120
protocol https
redirects 0
timeout 245
url https://api.telegram.org/botXXXXXXXXXXXXXXXXXX/getUpdates?offset=XXXXXXXX&limit=5&timeout=120
hash:
sslargs:
Helper:
DBLOG:
Contacts:
DBLogging:
TIME 1510495299.148
VALUE yyyyyyy:A------z:@Darkmozart xxxxxxx:J----:
message UNAUTHORIZED:
DBLogging:
TIME 1510497990.7574
VALUE TelegramBot FHEM request from user :J----- (411040592) \n Msg: Callback for inline query id: 1765405902686301153 from : xxxxxxxx2 : data : kanaan
msgChat:
DBLogging:
TIME 1510497985.15704
VALUE J-----
msgChatId:
DBLogging:
TIME 1510497985.15704
VALUE yyyyyyyy
msgId:
DBLogging:
TIME 1510497985.15704
VALUE 1137
msgPeer:
DBLogging:
TIME 1510497985.15704
VALUE J--------
msgPeerId:
DBLogging:
TIME 1510497985.15704
VALUE yyyyyyyyyy
msgText:
DBLogging:
TIME 1510497985.15704
VALUE abbrechen
sentMsgId:
DBLogging:
TIME 1510497991.08832
VALUE 1139
sentMsgPeerId:
DBLogging:
TIME 1510497992.83429
VALUE yyyyyyyy
sentMsgResult:
DBLogging:
TIME 1510497992.83429
VALUE SUCCESS
state:
DBLogging:
TIME 1510497992.83429
VALUE sentMsgId:
READINGS:
2017-11-12 15:01:39 Contacts yyyyyyy:A-----z:@Darkmozart xxxxxxx:J---:
2017-11-12 15:46:32 Mama_sentMsgId
2017-11-12 06:36:48 PollingErrCount 3
2017-11-12 06:36:35 PollingLastError NonBlockingGet: returned <hidden>: Can't connect(2) to https://api.telegram.org:443: SSL connect attempt failed
2017-10-08 09:04:45 StoredCommands doit at 11.30 shutdown restart
doit sr at 11.30 shutdown restart
doit define sr at 11.30 shutdown restart
doit define sr at 11:30 shutdown restart
doit modify sr at 11:30 {sudo reboot}
doit modify sr at 11:30:00 {sudo reboot}
doit defmod sr at 11:30 {sudo reboot}
doit defmod a at 11:38 telbot message Hallo
doit defmod rx at 11:39 {sudo restart x}
doit set room Haus open
2017-11-12 15:46:31 ich_sentMsgId 1139
2017-11-12 15:46:25 msgChat J----
2017-11-12 15:46:25 msgChatId xxxxxxxx
2017-11-12 15:46:25 msgFileId
2017-11-12 15:46:25 msgId 1137
2017-11-12 15:46:25 msgPeer J----
2017-11-12 15:46:25 msgPeerId xxxxxxxx
2017-11-12 15:46:25 msgReplyMsgId
2017-11-12 15:46:25 msgText abbrechen
2017-11-12 15:46:25 prevMsgChat J-----
2017-11-12 15:46:25 prevMsgFileId
2017-11-12 15:46:25 prevMsgId 1135
2017-11-12 15:46:25 prevMsgPeer J-----
2017-11-12 15:46:25 prevMsgPeerId xxxxxxxx
2017-11-12 15:46:25 prevMsgReplyMsgId
2017-11-12 15:46:25 prevMsgText abbrechen
2017-11-12 12:33:04 queryData kanaan
2017-11-12 12:33:04 queryID 1781010502649639559
2017-11-12 12:33:04 queryPeer A-----------z
2017-11-12 12:33:04 queryPeerId yyyyyyyyy
2017-11-12 12:33:04 queryReplyMsgId 939
2017-11-12 15:46:32 sentMsgId
2017-11-12 15:46:32 sentMsgPeerId yyyyyyyyy
2017-11-12 15:46:32 sentMsgResult SUCCESS
inlinechats:
sentQueue:
Attributes:
cmdKeyword doit
cmdRestrictedPeer yyyyyyyyyy,xxxxxxxx
defaultPeer yyyyyyyy
pollingTimeout 120
room FHEM,benachrichtigungen
utf8Special 1
Hat jemand eine Idee dazu?
Ich würde die Inlines des Triggers schon gern verwenden...
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 !)
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.
Definitiv wieder ein Punkt fürs Wiki :)
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')).')'}
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
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
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 ?
Dein ROOMMATE ist nicht richtig konfiguriert
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
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. ;)
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>
Ja, die ROOMMATE sind zwingend erforderlich. Bin aber gerne bereit das zu ändern, wenn du eine bessere Idee zum festlegen der Berechtigungen hast.
Nö, alles gut. Danke für die Klarstellung.
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
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.
Hi igami,
bist du sicher ?
m/((.+)\\|.+$)/;; return($2 ? $2 : $1);;)}"\
Die zusätzliche offene Klammer macht es noch schlimmer.
nicht doch vielleicht
m/(.+))\\|.+$)/;; return($2 ? $2 : $1);;)}"\
Es fehlt eigentlich eine geschlossenen Klammer.
Danke für die anderen Informationen.
mit dem Beenden oder Abbrechen hatte ich rumgesucht warum nur ein Dialog Button bei mir auftaucht.
Bin nicht so Perl fest, von JSON ganz zu schweigen.
Ich hatte auch 2 h rumgesucht bis mir aufgefallen ist das die \ am Ende der Zeilen beim Copy-Paste weg müssen.
Es gab nur Fehlermeldungen ::) :o :-[
Grüße
P:S: tolles modul :)
Bei mir siehts so aus und beide "zurück" funktionieren:
"zurück": {\
"commands": "set $recipient_history=.+ say @$recipient {(ReadingsVal($DEV, '$recipient_history', '') =~ m/(.+)\\|.+$/;;;; return $2 ? $2 : $1;;;;)}"\
}\
Füge ich die ( vor "return" ein, funktioniert zwar "zurück:%me%", nicht aber "zurück" :o
VG Sebastian
Hallo Zusammen
habe das Problem das ich msgDialog nicht zum laufen bekomme.
Kann mal jemand darüber schauen ob ich irgendwo ein Fehler bzw ein attr vergessen habe ?
Sitz jetzt schon seid Stunden davor aber komm nicht weiter >:(
Hier meine defmod zu msgConfiq:
defmod TelebotConfiq msgConfig
attr TelebotConfiq userattr evalSpecials:textField-long msgDialog_evalSpecials:textField-long msgDialog_msgCommand:textField
attr TelebotConfiq comment FHEM Global Configuration for command 'msg'
attr TelebotConfiq group Benachrichtigungen
attr TelebotConfiq msgContactPush TelegramBot
attr TelebotConfiq msgDialog_evalSpecials me=test TelegramBot=TelegramBot
attr TelebotConfiq room FHEM
attr TelebotConfiq verbose 3
setstate TelebotConfiq initialized
Hier zu TelegramBot:
defmod TelegramBot TelegramBot
attr TelegramBot allowUnknownContacts 0
attr TelegramBot cmdKeyword test
attr TelegramBot cmdRespondChat 1
attr TelegramBot cmdRestrictedPeer xxxxxxxx xxxxxxxxx xxxxxxxxxx
attr TelegramBot defaultPeer #Visu
attr TelegramBot group Benachrichtigungen
attr TelegramBot pollingTimeout 120
attr TelegramBot room FHEM
attr TelegramBot utf8Special 1
Hab die beiden Module versucht mit dem Wiki einzurichten. ROOMMATE mit definiertem msgContactPush hab ich erstellt.
TelegramBot sendet und empfängt bzw verarbeitet auch Nachrichten wenn ich sie direkt sende:
test set licht_essen_schalten on
Gruß Marco
Moin Marco,
das msgConfig device sieht OK aus.
Hast Du auch den meta_Dialog aus dem Wiki erstellt?
Dann brauchst Du noch einen eigenen Dialog oder Du nimmst zum Test die Waschmaschine aus dem Wiki.
Und natürlich das Attribut allowed in den Dialogen auf deinen ROOMATE oder everyone setzen.
VG Sebastian
Hallo,
ich habe jetzt mehrere Dialoge und kann auch alles was ich möchte soweit steuern.
Wenn ich mich jetzt in einem unter Dialog befinde kann ich einen Befehl ausführen.
Möchte ich jetzt im gleichen Dialog noch ein Befehl ausführen dann muss ich erst zurück zum Meta Dialog und dann den besagten unter Dialog noch einmal aufrufen.
Ich kann meine Raws gerne hier posten aber vielleicht gibt es ja eine direkte Erklärung daür.
Vielleicht so ein DoAlways für Dialoge ;D
Grüße
Schau mal hier : Antwort #198
Unter "Berechtigungen" wird immer der gleiche Dialog aufgerufen:
"set $SELF say @$recipient Berechtigungen|[$SELF:$recipient_user]"
VG Sebastian
Zitat von: binford6000 am 19 November 2017, 11:11:53
Schau mal hier : Antwort #198
Unter "Berechtigungen" wird immer der gleiche Dialog aufgerufen:
"set $SELF say @$recipient Berechtigungen|[$SELF:$recipient_user]"
VG Sebastian
Danke für die Antwort, leider kein Erfolg.
Ich poste mal meine Raws.
Meta
defmod meta_dialog msgDialog {\
"%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'))), 'beenden') . ') ')}",\
"Ich kann folgendes für dich tun: "\
]\
},\
"beenden": {\
"match": "\/?beenden",\
"commands": [\
"deletereading TYPE=msgDialog $recipient_history",\
"deletereading %TelegramBot% $recipient_sentMsgId"\
],\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"Dialog beendet. "\
]\
}\
}
attr meta_dialog allowed everyone
attr meta_dialog room TeleControl
Licht
defmod licht_dialog msgDialog {\
"Beleuchtung": {\
"message": [\
"(Fernsehbeleuchtung AN|Fernsehbeleuchtung AUS) ",\
"(%me%) ",\
"** Beleuchtung** ",\
"Fernsehbeleuchtung ist: [fernsehbeleuchtung:STATE]",\
" "\
],\
\
"Fernsehbeleuchtung AN": {\
"match": "\/?Fernsehbeleuchtung AN",\
"commands": [\
"set broadlinkWZ commandSend Power01_on ",\
"set $SELF say @$recipient Beleuchtung|[$SELF:$recipient_user]"\
],\
"message": [\
"Fernsehbeleuchtung AN. "\
]\
},\
"Fernsehbeleuchtung AUS": {\
"match": "\/?Fernsehbeleuchtung AUS",\
"commands": [\
"set broadlinkWZ commandSend Power01_off ",\
"set $SELF say @$recipient Beleuchtung|[$SELF:$recipient_user]"\
],\
"message": [\
"Fernsehbeleuchtung AUS. "\
]\
}\
}\
}
attr licht_dialog allowed everyone
attr licht_dialog room TeleControl
Wenn ich beim ersten mal die Beleuchtung anschalte bekomme ich die Rückmeldung geschrieben und das Licht schaltet.
Das menu bleibt das gleiche. Wenn ich dann Licht ausschalte dann bekomme ich keine Rückmeldung und der schaltvorgang wird nicht ausgelöst.
Der %me% button funktioniert immer.
EDIT
Jetzt sehe ich gerade muss ich in jedem Dialog die EvalSpecials setzen ?
Grüße
ZitatEDIT
Jetzt sehe ich gerade muss ich in jedem Dialog die EvalSpecials setzen ?
Nein, du musst nicht. Meine (einfachen) Dialoge kommen zu 90% ohne aus...
Aber manchmal ist man froh, wenn man Code wiederverwenden kann. Siehe Berechtigungen-Dialog von Igami ;)
Habe mal folgendes gebaut was wunderbar funktioniert:
defmod test dummy
setstate test on
defmod test_dialog msgDialog {\
"test": {\
"message": [\
"(Fernsehbeleuchtung AN|Fernsehbeleuchtung AUS) ",\
"(%me%) ",\
"** Beleuchtung** ",\
"Fernsehbeleuchtung ist: [test:STATE]"\
],\
"Fernsehbeleuchtung AN": {\
"commands": [\
"set test on",\
"set $SELF say @$recipient test"\
]\
},\
"Fernsehbeleuchtung AUS": {\
"commands": [\
"set test off",\
"set $SELF say @$recipient test"\
]\
}\
}\
}
attr test_dialog allowed everyone
Die message nach dem an- und ausschalten würde ich weglassen, da durch das say ja wieder eine Nachricht kommt.
Bei dem say muss auch nur Beleuchtung stehen, da du den Dialog ja auf der ersten Stufe wieder aufrufen möchtest.
Zitat von: igami am 19 November 2017, 13:19:39
Habe mal folgendes gebaut was wunderbar funktioniert:
defmod test dummy
setstate test on
defmod test_dialog msgDialog {\
"test": {\
"message": [\
"(Fernsehbeleuchtung AN|Fernsehbeleuchtung AUS) ",\
"(%me%) ",\
"** Beleuchtung** ",\
"Fernsehbeleuchtung ist: [test:STATE]"\
],\
"Fernsehbeleuchtung AN": {\
"commands": [\
"set test on",\
"set $SELF say @$recipient test"\
]\
},\
"Fernsehbeleuchtung AUS": {\
"commands": [\
"set test off",\
"set $SELF say @$recipient test"\
]\
}\
}\
}
attr test_dialog allowed everyone
Die message nach dem an- und ausschalten würde ich weglassen, da durch das say ja wieder eine Nachricht kommt.
Bei dem say muss auch nur Beleuchtung stehen, da du den Dialog ja auf der ersten Stufe wieder aufrufen möchtest.
VIELEN DANK, läuft perfekt. made my (Sun)day ;D
Ich hab nur in meinem Modul die Message Zeilen gelöscht und in Command den say Teil eingesetzt.
So für die Zukunft, gibt es etwas zu beachten wenn man mit den Messages arbeitet (Modul Bug/Eigenheit bzw. falsch benutzt meinerseits) oder ist deine Vorgehensweise wie dies benutzt werden muss?
Grüße
EDIT: Genauer beschrieben
Ich verstehe Trotzdem noch nicht was du meinst.
Commands werden vor Message abgearbeitet.
Zitat von: igami am 19 November 2017, 18:13:04
Ich verstehe Trotzdem noch nicht was du meinst.
Commands werden vor Message abgearbeitet.
Ich meinte einfach das ich nach WIKI Anleitung und viel copy-paste den Aufbau:
Command
Message
benutzt hatte.
Damit aber Probleme mit der Bedienung aufgetreten sind.
Nach deiner Lösung, Message Teil weg und im Command Teil mit Say die Ausgabe und Ausführung, hat es funktioniert.
Jetzt wollte ich mir zwei Fragen beantworten:
Hab ich bei meiner Definition und Aufbau des JSON (oder auch in meinem FHEM) generell Fehler die zu den besagten Problemen führten.
Oder ist der Aufbau mit dem Message Teil ohne über Say zu gehen überholt oder es muss etwas spezielles dabei beachtet werden.
Wenn ich z.B. dein Beispiel Berechtigungen benutze funktioniert es nicht. Gleiches Problem wie bei meinen eigenen Versuchen.
Abbrechen geht nicht, zurück geht nicht und nach einem Tastendruck geht es erst nach neustart noch einmal weiter. Ich hab als versuch den Meta-Dialog nocheinmal komplett neu angelegt, leider nix.
Jetzt habe ich alles soweit ich konnte mit say angepasst und das zurück eben "hardcoded" dann geht es soweit ist aber halt nicht so flexibel.
Irgendwo hab ich entweder noch große Verständnisprobleme oder es stimmt bei meiner Installation vielleicht was nicht.
Ein Fehler bei deinem Modul ist sicherlich auch möglich aber ich suche den Fehler erst mal bei mir. :-[
Grüße
Zitat von: binford6000 am 19 November 2017, 08:41:46
Moin Marco,
das msgConfig device sieht OK aus.
Hast Du auch den meta_Dialog aus dem Wiki erstellt?
Dann brauchst Du noch einen eigenen Dialog oder Du nimmst zum Test die Waschmaschine aus dem Wiki.
Und natürlich das Attribut allowed in den Dialogen auf deinen ROOMATE oder everyone setzen.
VG Sebastian
Habe jetzt mal Testweise den Waschmaschine Dialog aus dem Wiki eingefügt aber ohne Erfolg.
Hab im Logfile folgende Meldungen wenn ich in Telegram den Befehl "/start" eingebe :
2017.11.19 21:56:49 5: msgConfig TelebotConfiq: called function msgConfig_Set()
2017.11.19 21:57:09 5: msgConfig TelebotConfiq: called function msgConfig_Notify()
2017.11.19 21:59:09 5: msgConfig TelebotConfiq: called function msgConfig_Notify()
2017.11.19 21:59:09 5: msgConfig TelebotConfiq: called function msgConfig_Notify()
2017.11.19 21:59:09 1: ERROR evaluating my $EVENT='msgText: /start';my $EVTPART0='msgText:';my $TYPE='TelegramBot';my $SELF='TelegramBotNotify';my $EVTPART1='/start';my $NAME='TelegramBot';{ fhem_bot($NAME); }: Undefined subroutine &main::fhem_bot called at (eval 767) line 1.
2017.11.19 21:59:09 3: TelegramBotNotify return value: Undefined subroutine &main::fhem_bot called at (eval 767) line 1.
Hab leider keine Ahnung was ich weiter machen muss bzw wo ich weiter den Fehler suchen soll
Gruß Marco
kannst du denn den msg Befehl ohne Fehler verwenden?
also "msg push @<ROOMMATE> Test"
Zitat von: igami am 20 November 2017, 16:24:43
kannst du denn den msg Befehl ohne Fehler verwenden?
also "msg push @<ROOMMATE> Test"
Hab jetzt mal alles gelöscht und neu konfiguriert.
Kann jetzt den Befehl absetzen und kommt auch an meinem <ROOMMATE> an.
Allerdings passiert immer noch nichts bei wenn ich den Befehl "/start" eingebe.
Habe den meta_Dialog und dein Beispiel_Dialog "Waschmaschine" erstellt.
Logfile gibt bei /start folgendes aus:
2017.11.21 13:34:42 5: msgConfig TelebotConfiq: called function msgConfig_Notify()
Zitat von: Keule_09 am 21 November 2017, 14:22:48
Hab jetzt mal alles gelöscht und neu konfiguriert.
Kann jetzt den Befehl absetzen und kommt auch an meinem <ROOMMATE> an.
Allerdings passiert immer noch nichts bei wenn ich den Befehl "/start" eingebe.
Habe den meta_Dialog und dein Beispiel_Dialog "Waschmaschine" erstellt.
Logfile gibt bei /start folgendes aus:
2017.11.21 13:34:42 5: msgConfig TelebotConfiq: called function msgConfig_Notify()
Hast du dran gedacht, im Dialog die Berechtigung für den Roommate zu setzen?
Grüße
Ja hab die Berechtigungen alle gesetzt bei den Dialogen auf "everyone" gesetzt.
Wird auch das msgPushReceived Reading im ROOMMATE Device aktualisiert, sodass es im Eventmonitor zu sehen ist?
Zwischenfrage , lässt sich das logging einschränken?
Ich hab den ganzen msg Zweig auf verbose 0 stehen abef die Logdatei explodiert gerade.
Grüße
Schnitzelbrain
Zitat von: schnitzelbrain am 21 November 2017, 16:37:58
Zwischenfrage , lässt sich das logging einschränken?
Ich hab den ganzen msg Zweig auf verbose 0 stehen abef die Logdatei explodiert gerade.
Grüße
Schnitzelbrain
Welche LogDatei? Und mit welchem Inhalt?
Zitat von: igami am 21 November 2017, 16:05:38
Wird auch das msgPushReceived Reading im ROOMMATE Device aktualisiert, sodass es im Eventmonitor zu sehen ist?
im Eventmonitor sieht man keine Einträge meines Roommate
aber in den Readings im Roommate stehen diese Einträge:
fhemMsgPush Test2546 2017-11-21 12:49:46
fhemMsgPushGw TelegramBot:@34XXXXXX8:OK 2017-11-21 12:49:46
fhemMsgPushPrio 2017-11-21 12:49:46
fhemMsgPushState 2017-11-21 12:49:46
fhemMsgPushTitle - 2017-11-21 12:49:46
fhemMsgRcvPush /start 2017-11-21 20:23:47
fhemMsgRcvPushGw TelegramBot 2017-11-21 20:23:47
fhemMsgState 1 2017-11-21 12:49:46
fhemMsgStateTypes push:1 2017-11-21 12:49:46
msgPushReceived fehlt in der Auflistung
Okay, ist fhemMsgRcvPush. Hast du Einschränkungen durch event-on- Attribute?
Zitat von: igami am 21 November 2017, 17:13:43
Welche LogDatei? Und mit welchem Inhalt?
Das Logfile das über die Oberfläche erreichbar ist und das mit Verbose zu beeinflussen ist.
Reset SAT 2017.11.19 21:48:06 3: get TYPE=msgDialog:FILTER=NAME!=meta_dialog:FILTER=allowed=.*(rr_Frank|everyone).* trigger : [emoji362] Beleuchtung [emoji536] Rolladen Reset SAT 2017.11.19 21:49:04 3: get TYPE=msgDialog:FILTER=NAME!=meta_dialog:FILTER=allowed=.*(rr_Frank|everyone).* trigger : [emoji362] Beleuchtung [emoji536] Rolladen Reset SAT 2017.11.19 21:49:08 3: get TYPE=msgDialog:FILTER=NAME!=meta_dialog:FILTER=allowed=.*(rr_Frank|everyone).* trigger : [emoji362] Beleuchtung [emoji536] Rolladen Reset SAT 2017.11.19 21:49:37 3: get TYPE=msgDialog:FILTER=NAME!=meta_dialog:FILTER=allowed=.*(rr_Frank|everyone).* trigger : [emoji362] Beleuchtung [emoji536] Rolladen Reset SAT 2017.11.19 21:50:04 3: get TYPE=msgDialog:FILTER=NAME!=meta_dialog:FILTER=allowed=.*(rr_Frank|everyone).* trigger : [emoji362] Beleuchtung [emoji536] Rolladen Reset SAT 2017.11.19 21:50:27 3: get TYPE=msgDialog:FILTER=NAME!=meta_dialog:FILTER=allowed=.*(rr_Frank|everyone).* trigger : [emoji362] Beleuchtung
Jeder Tastendruck wird eben protokolliert.
Grüße
Schnitzelbrain
Zitat von: schnitzelbrain am 21 November 2017, 21:29:46
Jeder Tastendruck wird eben protokolliert.
Das kommt aus dem meta_Dialog. Die Begündung:
Zitat
To use FHEM commands from the perl expression, use the function fhem(), which takes a string argument, this string will be evaluated as a FHEM command:
{ fhem "set light on" }
define n1 notify piri:on { fhem "set light on" }
Note: if this function returns a value, it will also be logged into the global FHEM log. Use 1 as a second argument to disable this logging, this makes sense when obtainig some values via FHEM "get...".
Da ich im global das verbose auf 2 stehen habe merke ich das nicht.
Das verhalten lässt sich durch eine Änderung des meta_Dialog abstellen.
Versuch doch mal bitte den folgenden:
defmod meta_Dialog msgDialog {\
"%me%": {\
"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', 1))), '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."\
]\
}\
}
attr meta_Dialog allowed everyone
Dort habe ich die 1 nach dem get Aufruft ergänzt.
Zitat von: igami am 21 November 2017, 21:26:15
Okay, ist fhemMsgRcvPush. Hast du Einschränkungen durch event-on- Attribute?
Danke für den Tip.Das war der Grund :)
Jetzt funktionieren die Dialoge.
Vielen Dank für die Hilfe
Steht übrigens auch in der Commandref zu dem Modul :P
Noch ein Tip: es sollte am besten auch in event-on-update-reading aufgenommen werden und nicht in event-on-change-reading.
Zitat von: igami am 21 November 2017, 21:39:40
Das kommt aus dem meta_Dialog. Die Begündung:
Da ich im global das verbose auf 2 stehen habe merke ich das nicht.
Das verhalten lässt sich durch eine Änderung des meta_Dialog abstellen.
Versuch doch mal bitte den folgenden:
defmod meta_Dialog msgDialog {\
"%me%": {\
"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', 1))), '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."\
]\
}\
}
attr meta_Dialog allowed everyone
Dort habe ich die 1 nach dem get Aufruft ergänzt.
Perfect, logging unterdrückt
Dank dir
Schnitzelbrain
Hallo Igami,
gibt es eine Möglichkeit, das "set Dialog xyz say xyz " in verschiedene Chats zu schicken?
Ich habe einen für die Alarmanlage, einen für meinen Staubsauger, einen für das Haus.
Macht das Ganze einfach übersichtlicher!
Grüße
Hallo,
sehr nettes Modul!
Aber bei mir bekomme ich immer die Nachrichten vom metaDialog doppelt.
Woran kann das liegen?
LG
Marlen
Zitat von: Marlen am 01 Dezember 2017, 15:05:30
Hallo,
sehr nettes Modul!
Aber bei mir bekomme ich immer die Nachrichten vom metaDialog doppelt.
Woran kann das liegen?
LG
Marlen
Hast du mehrere Residents eingetragen?
Schau mal on msgContactpush Einträge mit der richtigen ID gesetzt ist.
Das war es bei mir. Ich hatte dann meine und die von meiner Frau bekommen.
Beim mymsgconfig nur den bot
Und bei den residents bot:@id_code vom jeweiligen resident
Schnitzelbrain
Es wird kein notify mehr benötigt. Falls noch vorhanden, kann dies zur Doppelung führen.
ZitatHast du mehrere Residents eingetragen?
Residents wo eingetragen?
ZitatEs wird kein notify mehr benötigt. Falls noch vorhanden, kann dies zur Doppelung führen.
Welchen notify wird nicht mehr benötigt?
LG
Marlen
Zitat von: Marlen am 01 Dezember 2017, 16:34:25
Residents wo eingetragen?
Welchen notify wird nicht mehr benötigt?
LG
Marlen
Nach welcher Anleitung hast du denn das ganze aufgesetzt?
Hier https://wiki.fhem.de/wiki/MsgDialog (https://wiki.fhem.de/wiki/MsgDialog)
Kommt ziemlich am Anfang gleich das Thema roommate/guest das in Verbindung mit dem Modul residents.
Grüße
Schnitzelbrain
Ach so, ne, Modul residents hab ich nicht, is ja nicht zwingend erforderlich.
Ja, ROOMMATE bzw. GUEST reicht.
Wenn du kein notify angelegt hast habe ich nichts gesagt.
Ach....... doch, da hab ich doch den Übeltäter gefunden
ZitatmsgPushReceived
.
Das hab ich nach Anleitung angelegt und total aus den Augen verloren.
Danke für eure Hilfe.
Aber das zurück geht nicht.
LG
Marlen
Hallo,
warum geht denn mein zurück nicht?
Es ist im metaDialog so definiert:
"zurück": {
"commands": "set $recipient_history=.+ say @$recipient {(ReadingsVal($DEV, '$recipient_history', '') =~ m/(.+)\\|.+$/;;;; return $2 ? $2 : $1;;;;)}"
},
Und noch eine "blöde" Frage, wie macht man das, wenn ich im
1. Menüpunkt
- Einstellungen möchte und im
und der Einstellungen dann
--- Steckdosen und dann das Menü für
------ Steckdose xyz an| aus?
Muss ich das dann alles irgendwie in den Dialog für Einstellungen packen?
Oder ist dafür das "setOnly" gedacht?
LG
Marlen
Hi Marlen,
Zitatwarum geht denn mein zurück nicht?
Sollte so funktionieren. Bei mir sieht es genauso aus.
ZitatMuss ich das dann alles irgendwie in den Dialog für Einstellungen packen?
Oder ist dafür das "setOnly" gedacht?
Ja das kann man so machen. Hier mal ein Beispiel von meinem Systeminfo-Dialog (mit zurück):
defmod Systemverwaltung_Dialog msgDialog {"9.🛠Systemverwaltung":{\
"message": [\
"(⚙️FHEM) ",\
"(📡FritzBox) ",\
"(🖥VirtualPC) ",\
"(abbrechen|zurück:%me%) ",\
"Was möchtest Du wissen?"\
],\
"⚙️FHEM":{\
"message":[\
"(⚙️FHEM-Infos) ",\
"(⚙️FHEM-Update vorhanden?) ",\
"(⚙️FHEM-Log) ",\
"(abbrechen|zurück) ",\
"Wähle aus:"\
],\
"⚙️FHEM-Infos":{\
"message":[\
"(%me%) ",\
"Ich wurde gestartet vor\n[sysmon:uptime_text]\nMeine Version ist folgende:\n[global:version]"\
]\
},\
"⚙️FHEM-Update vorhanden?":{\
"commands": "set device off",\
"message":[\
"(%me%) ",\
"Ich habe folgende Updates gefunden:\n[FHEM_Sys_Dialog.DUM:updates]"\
]\
},\
"⚙️FHEM-Log":{\
"message":[\
"(%me%) ",\
"Hier sind meine letzten 10 Logeinträge:\n[FHEM_Sys_Dialog.DUM:last_10]"\
]\
}\
},\
"📡FritzBox":{\
"message":[\
"{return('(📡Gast-WLAN einschalten) ') if(ReadingsVal('FritzBox', 'box_guestWlan', '') eq 'off')}",\
"{return('(📡Gast-WLAN ausschalten) ') if(ReadingsVal('FritzBox', 'box_guestWlan', '') ne 'off')}",\
"(📡Reboot) ",\
"(abbrechen|zurück) ",\
"Wähle aus:"\
],\
"📡Gast-WLAN einschalten":{\
"commands":[\
"set FritzBox guestWlan on",\
"set fhemBot sendImage ./www/images/default/gastwlan.png"\
],\
"message":[\
"(%me%) ",\
"Ich habe das Gast-WLAN eingeschaltet. DAs PAsswort lautet: g8stwl8n."\
]\
},\
"📡Gast-WLAN ausschalten":{\
"commands": "set FritzBox guestWlan off",\
"message":[\
"(%me%) ",\
"Ich habe das Gast-WLAN wieder ausgeschaltet."\
]\
},\
"📡Reboot":{\
"commands": "sleep 10;;;; get FritzBox tr064Command DeviceConfig:1 deviceconfig Reboot",\
"message":[\
"(%me%) ",\
"Ich starte deine Fritzbox in 10 Sekunden neu. Es kann etwas dauern bis ich wieder für Dich da bin!"\
]\
}\
},\
"🖥VirtualPC":{\
"message":[\
"{return('(🖥VirtualPC einschalten) ') if(ReadingsVal('VShuttle.PRE', 'state', '') eq 'absent')}",\
"{return('(🖥VirtualPC ausschalten) ') if(ReadingsVal('VShuttle.PRE', 'state', '') eq 'present')}",\
"(abbrechen|zurück) ",\
"Wähle aus:"\
],\
"🖥VirtualPC einschalten":{\
"commands": [\
"set VShuttleUpDown.DOIF switch on",\
"set $SELF say @$recipient 9.🛠Systemverwaltung"\
]\
},\
"🖥VirtualPC ausschalten":{\
"commands": [\
"set VShuttleUpDown.DOIF switch off",\
"set $SELF say @$recipient 9.🛠Systemverwaltung"\
]\
}\
}\
}\
}\
\
\
attr Systemverwaltung_Dialog allowed rr_Sebastian
attr Systemverwaltung_Dialog disable 0
attr Systemverwaltung_Dialog group Dialog
attr Systemverwaltung_Dialog icon dialog@green
attr Systemverwaltung_Dialog room 91_Webdevices
attr Systemverwaltung_Dialog verbose 0
VG Sebastian
Hallo,
ich stehe auf dem Schlauch. Ich versuche den msgDialog einzurichten und habe bis jetzt folgenden Aufbau aus dem Wiki:
Zuerst habe ich das myMsgConfig Device angelegt
defmod myMsgConfig msgConfig
attr myMsgConfig userattr msgDialog_evalSpecials:textField-long msgDialog_msgCommand:textField
attr myMsgConfig comment FHEM Global Configuration for command 'msg'
attr myMsgConfig group Global
attr myMsgConfig msgContactPush fhembot
attr myMsgConfig msgDialog_evalSpecials me=doit TelegramBot=fhembot
attr myMsgConfig msgType text
attr myMsgConfig room Arbeitszimmer,Bridges
attr myMsgConfig stateFormat fhemMsgState
attr myMsgConfig verbose 0
Dann den Resident "dominic":
defmod rr_dominic ROOMMATE rr_home
attr rr_dominic alias Status
attr rr_dominic comment Auto-created by rr_home
attr rr_dominic 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_dominic group dominic
attr rr_dominic icon people_sensor
attr rr_dominic msgContactPush fhembot:@1234567890(meine echte ID natürlich)
attr rr_dominic room Residents
attr rr_dominic rr_realname group
attr rr_dominic sortby 1
attr rr_dominic webCmd state
setstate rr_dominic home
setstate rr_dominic 2017-12-03 16:43:33 fhemMsgPush Test
setstate rr_dominic 2017-12-03 16:43:33 fhemMsgPushGw fhembot:@1234567890:OK
setstate rr_dominic 2017-12-03 16:43:33 fhemMsgPushPrio 0
setstate rr_dominic 2017-12-03 16:43:33 fhemMsgPushState 1
setstate rr_dominic 2017-12-03 16:43:33 fhemMsgPushTitle -
setstate rr_dominic 2017-12-03 16:41:17 fhemMsgRcvPush /start
setstate rr_dominic 2017-12-03 16:41:17 fhemMsgRcvPushGw fhembot
setstate rr_dominic 2017-12-03 16:43:33 fhemMsgState 1
setstate rr_dominic 2017-12-03 16:43:33 fhemMsgStateTypes push:1
setstate rr_dominic 2017-12-03 16:01:19 lastArrival 2017-12-03 16:01:19
setstate rr_dominic 2017-12-03 16:01:19 lastState initialized
setstate rr_dominic 2017-12-03 16:01:19 mood calm
setstate rr_dominic 2017-12-03 16:01:19 presence present
setstate rr_dominic 2017-12-03 16:01:19 state home
Das sind meinem Verständnis nach die Voraussetzungen, nun habe ich den Beispieldialog 1:1 aus dem Wiki übernommen ohne ihn zu ändern, habe nur bei evalSpecials meinen User und den TelegramBot eingefügt, allowed stand ja schon auf Everyone. Was mir noch aufgefallen ist, beim allowed Attribut kommt ja eine Auswahlliste, dort steht nur "everyone" drin, ich hätte erwartet das dort auch mein Resident "dominic" auftaucht, tut er aber nicht ?!
defmod meta_Dialog msgDialog {1:1 aus Wiki}}
attr meta_Dialog allowed everyone
attr meta_Dialog evalSpecials me=rr_dominic TelegramBot=fhembot
attr meta_Dialog room Arbeitszimmer,Bridges
attr meta_Dialog verbose 5
setstate meta_Dialog rr_dominic: /start
setstate meta_Dialog 2017-12-03 16:14:58 fhemMsgRcvPush fdgd
setstate meta_Dialog 2017-12-03 16:14:58 fhemMsgRcvPushGw fhembot
setstate meta_Dialog 2017-12-03 16:41:17 state rr_dominic: /start
msg push @rr_dominic Test -> Funktioniert auch
Im Logfile sieht es für mich auch so aus als würde er den Trigger erkennen und die erste Antwort des Dialogs versenden, nur leider kommt dies nicht bei meinem User an:
2017-12-03 16:41:17 msgDialog meta_Dialog rr_dominic_history:
2017-12-03 16:41:17 msgDialog meta_Dialog rr_dominic: /start
2017-12-03 16:41:17 ROOMMATE rr_dominic fhemMsgRcvPush: /start
2017-12-03 16:41:17 ROOMMATE rr_dominic fhemMsgRcvPushGw: fhembot
2017-12-03 16:41:17 ROOMMATE rr_dominic fhemMsgPush: (abbrechen) Ich kann folgendes für dich tun:
2017-12-03 16:41:17 ROOMMATE rr_dominic fhemMsgPushTitle: -
2017-12-03 16:41:17 ROOMMATE rr_dominic fhemMsgPushPrio: 0
2017-12-03 16:41:17 ROOMMATE rr_dominic fhemMsgPushGw: fhembot:@123456789:OK
2017-12-03 16:41:17 ROOMMATE rr_dominic fhemMsgPushState: 1
2017-12-03 16:41:17 ROOMMATE rr_dominic fhemMsgStateTypes: push:1
2017-12-03 16:41:17 ROOMMATE rr_dominic fhemMsgState: 1
2017-12-03 16:41:17 TelegramBot fhembot msgId: 284
2017-12-03 16:41:17 TelegramBot fhembot msgPeer: Dominic
2017-12-03 16:41:17 TelegramBot fhembot msgPeerId: 123456789
2017-12-03 16:41:17 TelegramBot fhembot msgChat: Dominic
2017-12-03 16:41:17 TelegramBot fhembot msgChatId: 123456789
2017-12-03 16:41:17 TelegramBot fhembot msgText: /start
2017-12-03 16:41:17 TelegramBot fhembot msgReplyMsgId:
2017-12-03 16:41:17 TelegramBot fhembot msgFileId:
2017-12-03 16:41:32 Global global ATTR myMsgConfig msgDialog_evalSpecials me=doit TelegramBot=fhembot
2017-12-03 16:41:47 TelegramBot fhembot sentMsgResult: NonBlockingGet timed out on read from after 30s
2017-12-03 16:41:47 TelegramBot fhembot sentMsgId:
2017-12-03 16:41:47 TelegramBot fhembot sentMsgPeerId: 123456789
Irgendwo klemmt es noch, aber ich verstehe nicht wo :(
Was mir spontan auffällt: der Meta-Dialog benötigt kein evalSpecials...
attr meta_Dialog evalSpecials me=rr_dominic TelegramBot=fhembot
VG Sebastian
Ich tippe auf das utf8specials Attribut beim TelegramBot
Das uf8Special war es, das fehlte. Nun klappt es direkt, danke.
Ich habe auch das evalSpecials entfernt. Ich dachte das dies die Zuordnung sei um den Dialog mit dem User zu verknüpfen was wohl nicht der Fall ist.
Ist das denn korrekt dass ich bei "allowed" nur "everyone", nicht aber spezifische User (aus Residents) auswählen kann ?
Ich habe es im WIKI bei der Fehlersuche mit aufgenommen:
3.3 Das Attribut utf8Special fehlt beim TelegramBot device ;)
VG Sebastian
Es steht in der commandref drin:
Hinweise zur Benutzung mit Telegram:
Es kann notwendig sein, dass im TelegramBot das Attribut "utf8specials" auf 1 gesetzt wird, damit Nachrichten mit Umlauten gesendert werden.
Mist, in "für" ist natürlich ein Umlaut drin, wird rund.
Zum allowed Thema, ich weiß jetzt warum es
set <meta_Dialog> updateAllowed
gibt ::) . Das löst exakt mein Problem. Falls noch jemand anders darüber stolpert steht es hier jetzt.
Danke noch mal :-)
Zitat von: binford6000 am 02 Dezember 2017, 23:08:55
Hi Marlen,Sollte so funktionieren. Bei mir sieht es genauso aus.
Aber leider geht es nicht!
Was ist denn
$recipient_history'
? Wo kommt das her?
LG
Marlen
Gibt es eigentlich auch die Möglichkeit einen Code einzugeben?
z.B.: gleiche ich meine Strom-, Wasser-, Gaszähler immer mal per Telegram ab.
Wie kann man sowas mit dem Modul msgDialog machen?
LG
Marlen
ZitatWas ist denn
Code: [Auswählen]
$recipient_history'
? Wo kommt das her?
Das ist ein Reading in einem Dialog vom aufrufenden ROOMATE (recipient):
rr_Sebastian_history 1.Beleuchtung|Lampen einschalten
Es wird vom Meta-Dialog beim Aufrufen eines Dialogs erstellt, beim Benutzen des Dialogs geändert
und beim Beenden/Abbrechen des Dialogs wieder gelöscht.
Hmmm.....
das reading wird beim aufruf angelegt, aber leer.
Beim beenden wird das wieder gelöscht.
Lg
Marlen
Wenn der Dialog beendet wird, also es keine nachfolgenden Stufen mehr gibt, wird das reading wieder gelernt.
Also, jetz mal für blondi's:
Hier mein Heizung_Dialog (noch im Aufbau):
{ "Heizung": {
"message": [
"{return('(WarmWasser) ')}",
"{return('(Wohnzimmer) ')}",
"{return('(Kinderzimmer) ')}",
"{return('(abbrechen|zurück) ')}",
"Aktuell Temperaturen:",
"Warmwasser: [WarmWasser:temperature]°C.",
"Wohnzimmer: [Fuehler_Wz:temperature]°C.",
"Kinderzimmer:[ESPEasy_Steckdose_03_Temp:Temperature]°C.",
"Bitte auswählen"
]
},
"WarmWasser": {
"message": [
"{return('(Anlage AN|Anlage AUS) ')}",
"{return('(bis 6 Uhr scharf stellen) ')}",
"{return('(Innen-Sirene aktiv|Innen-Sirene inaktiv) ')}",
"{return('(Außen-Sirene aktiv|Außen-Sirene inaktiv) ')}",
"{return('(Urlaubsmodus AN|Urlaubsmodus AUS) ')}",
"{return('(letzter Urlaubstag) ')}",
"{return('(Anwesneheitssimulation AN|Anwesneheitssimulation AUS) ')}",
"{return('(abbrechen|zurück) ')}",
"Bitte auswählen"
]
},
"Kinderzimmer": {
"message": [
"{return('(Aktuelle-Temperatur) ')}",
"{return('(Tages-Temperatur) ')}",
"{return('(Absenk-Temperatur) ')}",
"{return('(Nacht-Temperatur) ')}",
"{return('(abbrechen|zurück) ')}",
"Welche Temperatur willst du für Kinderzimmer ändern?"
]
},
"Wohnzimmer": {
"message": [
"{return('(Aktuelle-Temperatur) ')}",
"{return('(Tages-Temperatur) ')}",
"{return('(Absenk-Temperatur) ')}",
"{return('(Nacht-Temperatur) ')}",
"{return('(abbrechen|zurück) ')}",
"Welche Temperatur willst du für Kinderzimmer ändern?"
],
"Aktuelle-Temperatur": {
"message": [
"(bestätigen|abbrechen) ",
"(zurück|zurückalt) ",
"(aus:04.5|5°C:05.0|6°C:06.0|7°C:07.0) ",
"(8°C:08.0|9°C:09.0|10°C:10.0|11°C:11.0) ",
"(12°C:12.0|13°C:13.0|14°C:14.0|15°C:15.0) ",
"(15.5°C:15.5|16°C:16.0|16.5°C:16.5|17°C:17.0) ",
"(17.5°C:17.5|18°C:18.0|18.5°C:18.5|19°C:19.0) ",
"(19.5°C:19.5|20°C:20.0|20.5°C:20.5|21°C:21.0) ",
"(21.5°C:21.5|22°C:22.0|22.5°C:22.5|23°C:23.0) ",
"(23.5°C:23.5|24°C:24.0|25°C:25.0|26°C:26.0) ",
"(27°C:27|28°C:28|29°C:29|voll:29.5) ",
"Aktuell Wohnzimmer: [Fuehler_Wz:temperature]°C.",
"Treffen Sie das Setup."
],
"Setup": {
"match": "[0-2][0-9][:.]([0]|[5])",
"commands": [
"{my $temperatur = '$message';; fhem(\"set data1 $temperatur\");;}"
]
}
}
}
}
Mein Reading
rg_Marlen_history Wohnzimmer|Aktuelle-Temperatur
Wenn ich auf zurück gehe, komm ich wieder in Wohnzimmer, aber von hier komm ich wieder zurück in Heizung und von Heizung will ich eigentlich wieder zum start kommen.
Wie macht man das?
Lg
Marlen
ZitatWie macht man das?
Dein zurück geht eine Ebene höher. Du bist aber bereits auf der höchsten Ebene in deinem Dialog ;)
Das siehst Du auch daran, dass Kinderzimmer, WarmWasser und Wohnzimmer direkt unter Heizung als Menüpunkt auftauchen.
Mit
"{return('(abbrechen|zurück:%me%) ')}",
kommst du wieder zurück zum Meta-Dialog und zur Dialog-Auswahl.
In
Antwort #109 hat Flipper92 seinen Heizungs-Dialog gepostet...
Also nochmal....ich will es nur verstehen!
Meine Dialog Heizung
1. Ebene: Wohnzimmer
2. Ebene: Aktuelle-Temperatur
ich bin auf der 2.Ebene und drücke zurück, dann bin ich in der 1.Ebene (Wohnzimmer) ....so soll es ja sein.
Drück ich da zurück, passiert nicht's!
Auch bei zurück:%me%
passiert nichts,
oder
"set $SELF say @$recipient Heizung"
Irgendwo ist doch da der Wurm drin..... :-[
Ich habe jetzt nur mal das Wohnzimmer Beispielhaft zum Laufen gebracht:
defmod Marlen msgDialog { "Heizung": {\
"message": [\
"{return('(WarmWasser) ')}",\
"{return('(Wohnzimmer) ')}",\
"{return('(Kinderzimmer) ')}",\
"{return('(abbrechen|zurück:%me%) ')}",\
"Aktuell Temperaturen:",\
"Warmwasser: [WarmWasser:temperature]°C.",\
"Wohnzimmer: [Fuehler_Wz:temperature]°C.",\
"Kinderzimmer:[ESPEasy_Steckdose_03_Temp:Temperature]°C.",\
"Bitte auswählen"\
],\
"Wohnzimmer": {\
"message": [\
"{return('(Aktuelle-Temperatur) ')}",\
"{return('(Tages-Temperatur) ')}",\
"{return('(Absenk-Temperatur) ')}",\
"{return('(Nacht-Temperatur) ')}",\
"{return('(abbrechen|zurück) ')}",\
"Welche Temperatur willst du für Kinderzimmer ändern?"\
],\
"Aktuelle-Temperatur": {\
"message": [\
"(bestätigen|abbrechen) ",\
"(zurück|zurückalt) ",\
"(aus:04.5|5°C:05.0|6°C:06.0|7°C:07.0) ",\
"(8°C:08.0|9°C:09.0|10°C:10.0|11°C:11.0) ",\
"(12°C:12.0|13°C:13.0|14°C:14.0|15°C:15.0) ",\
"(15.5°C:15.5|16°C:16.0|16.5°C:16.5|17°C:17.0) ",\
"(17.5°C:17.5|18°C:18.0|18.5°C:18.5|19°C:19.0) ",\
"(19.5°C:19.5|20°C:20.0|20.5°C:20.5|21°C:21.0) ",\
"(21.5°C:21.5|22°C:22.0|22.5°C:22.5|23°C:23.0) ",\
"(23.5°C:23.5|24°C:24.0|25°C:25.0|26°C:26.0) ",\
"(27°C:27|28°C:28|29°C:29|voll:29.5) ",\
"Aktuell Wohnzimmer: [Fuehler_Wz:temperature]°C.",\
"Treffen Sie das Setup."\
],\
"Setup": {\
"match": "[0-2][0-9][.]([0]|[5])",\
"commands": [\
"{my $temperatur = '$message';;;; fhem(\"set data1 $temperatur\");;;;}",\
"set $SELF say @$recipient Heizung"\
]\
}\
}\
}\
}\
}
Beim "match" war noch ein : zuviel ;)
Hier mein Dialog für die Zählerstände:
myUtils:
sub msgDialog_Zaehlerstaende {
my @meter = devspec2array("subType=meter:FILTER=disable!=1");
$_ =
(split(": ", AttrVal($_, "alias", $_)))[1]
. " " . InternalVal($_, "STATE", "")
. " (" . (split(" ", ReadingsTimestamp($_, "state", "")))[0] . ")"
for(@meter);;
return("(" . join(") (", @meter) . ") ");
}
sub msgDialog_Zahelerstand_anpassen($$$) {
my ($SELF, $recipient, $state) = @_;
my $meter = ReadingsVal("$SELF", ".$recipient\_meter", "");
$state =~ s/\,/\./;
if($state < ReadingsNum($meter, "state", 0)){
fhem("set $SELF say Zähler|Zählerstand anpassen|Zählerstand zu klein");
}
else{
fhem("set $meter $state; deletereading $SELF .$recipient\_meter; set $SELF say \@$recipient Zähler;");
}
}
sub msgDialog_Zaehler_speichern($$$) {
my ($SELF, $recipient, $message) = @_;
# $message = encode('UTF-8', $message);
my @meter = split(" ", "$message");
splice(@meter, -3, 3);
@meter = devspec2array("subType=meter:FILTER=alias=.+@meter");
fhem("setreading $SELF .$recipient\_meter $meter[0]");
}
msgDialog:
defmod Zaehler_Dialog msgDialog {\
"Zähler": {\
"message": [\
"{msgDialog_Zaehlerstaende()}",\
"(abbrechen) ",\
"Zählerstände:"\
],\
"Zählerstand anpassen": {\
"match": ".+zähler.+",\
"commands": "{msgDialog_Zaehler_speichern('$SELF', '$recipient', '$message')}",\
"message": [\
"TelegramBot_MTYPE=queryInline (zurück|abbrechen) ",\
"{my $meter = AttrVal(ReadingsVal('$SELF', '.$recipient_meter', ''), 'alias', '');;;; return(\"Bitte den neuen Zählerstand für \\\"$meter\\\" angeben.\")}"\
],\
"Zählerstand angepasst": {\
"match": "\\d+((\\.|\\,)\\d+)?",\
"commands": "{msgDialog_Zahelerstand_anpassen('$SELF', '$recipient', '$message')}"\
},\
"Zählerstand zu klein": {\
"commands": "setreading $SELF $recipient_history Zähler|Zählerstand anpassen",\
"message": [\
"TelegramBot_MTYPE=queryInline (zurück|abbrechen) ",\
"Der neue Zählerstand darf nicht kleiner als der aktuelle Zählerstand sein."\
]\
}\
}\
}\
}
Zitat von: binford6000 am 04 Dezember 2017, 15:29:22
Ich habe jetzt nur mal das Wohnzimmer Beispielhaft zum Laufen gebracht:
defmod Marlen msgDialog { "Heizung": {\
"message": [\
"{return('(WarmWasser) ')}",\
"{return('(Wohnzimmer) ')}",\
"{return('(Kinderzimmer) ')}",\
"{return('(abbrechen|zurück:%me%) ')}",\
"Aktuell Temperaturen:",\
"Warmwasser: [WarmWasser:temperature]°C.",\
"Wohnzimmer: [Fuehler_Wz:temperature]°C.",\
"Kinderzimmer:[ESPEasy_Steckdose_03_Temp:Temperature]°C.",\
"Bitte auswählen"\
],\
"Wohnzimmer": {\
"message": [\
"{return('(Aktuelle-Temperatur) ')}",\
"{return('(Tages-Temperatur) ')}",\
"{return('(Absenk-Temperatur) ')}",\
"{return('(Nacht-Temperatur) ')}",\
"{return('(abbrechen|zurück) ')}",\
"Welche Temperatur willst du für Kinderzimmer ändern?"\
],\
"Aktuelle-Temperatur": {\
"message": [\
"(bestätigen|abbrechen) ",\
"(zurück|zurückalt) ",\
"(aus:04.5|5°C:05.0|6°C:06.0|7°C:07.0) ",\
"(8°C:08.0|9°C:09.0|10°C:10.0|11°C:11.0) ",\
"(12°C:12.0|13°C:13.0|14°C:14.0|15°C:15.0) ",\
"(15.5°C:15.5|16°C:16.0|16.5°C:16.5|17°C:17.0) ",\
"(17.5°C:17.5|18°C:18.0|18.5°C:18.5|19°C:19.0) ",\
"(19.5°C:19.5|20°C:20.0|20.5°C:20.5|21°C:21.0) ",\
"(21.5°C:21.5|22°C:22.0|22.5°C:22.5|23°C:23.0) ",\
"(23.5°C:23.5|24°C:24.0|25°C:25.0|26°C:26.0) ",\
"(27°C:27|28°C:28|29°C:29|voll:29.5) ",\
"Aktuell Wohnzimmer: [Fuehler_Wz:temperature]°C.",\
"Treffen Sie das Setup."\
],\
"Setup": {\
"match": "[0-2][0-9][.]([0]|[5])",\
"commands": [\
"{my $temperatur = '$message';;;; fhem(\"set data1 $temperatur\");;;;}",\
"set $SELF say @$recipient Heizung"\
]\
}\
}\
}\
}\
}
Beim "match" war noch ein : zuviel ;)
Guten Morgen,
ich bin jetzt total verwirrt!
Wenn ich start eingebe um meine Übersicht über meine Dialoge zu erhalten, steht da u.a. jetzt Heizung, WarmWasser, Kinderzimmer, Wohnzimmer!
Aber WarmWasser, Kinderzimmer, Wohnzimmer sind doch Menüpunkte unter unter Heizung.
Wenn ich auf Heizung klicke kommen sie ja auch. Warum werden die doppelt angezeigt?
Und wenn ich bei der Temperatur Auswahl bin, steht da auf dem Button "19.5°C:19.5" da sollte doch nur 19.5°C stehen, oder?
LG
Malren
ZitatWenn ich start eingebe um meine Übersicht über meine Dialoge zu erhalten, steht da u.a. jetzt Heizung, WarmWasser, Kinderzimmer, Wohnzimmer!
Das hatte ich gestern bei meinem Test auch. Das liegt an den Klammern. Deswegen habe ich die anderen Zimmer erstmal entfernt, um das "zurück" mal zu testen.
Im Post #247 kann man die Struktur der einzelnen "Blöcke" erkennen. Als nicht-JSON-Profi erstelle ich halt für jeden Menüpunkt direkt darunter alle Unterpunkte...
ZitatUnd wenn ich bei der Temperatur Auswahl bin, steht da auf dem Button "19.5°C:19.5" da sollte doch nur 19.5°C stehen, oder?
Ja da sollte nur 19.5 stehen. Tut es bei mir auch (siehe Screenshot).
VG Sebastian
Man weiß ja nicht ob Marlen Inline Keyboards verwendet oder nicht
Bei mir schaut das so aus:(https://uploads.tapatalk-cdn.com/20171205/6ae1d357a477143436eadbb2755483e4.jpg)
Ahhh.....
das fehlte:
https://forum.fhem.de/index.php/topic,77297.msg692609.html#msg692609 (http://tps://forum.fhem.de/index.php/topic,77297.msg692609.html#msg692609)
Im Wiki https://wiki.fhem.de/wiki/MsgDialog (https://wiki.fhem.de/wiki/MsgDialog) steht auch, wie man schnell zwischen Inline- und normaler Tastatur umschalten kann.
Ist ganz praktisch zum Testen... ;)
Hallo,
so langsam wird es!
Super Sache, wenn es funktioniert!
Ein paar fragen hab ich noch!
- Kann man eine Taste mit einen Link versehen? Möchte das wenn ich die Taste drücke mein Floorplan geöffnet wird.
- Wenn ich vom meta_Dialog ein anderen Dialog starte, bleibt der meta_Dialog noch offen, kann man das machen, dass der wieder gelöscht wird?
LG
Marlen
Kann das sein, das jetzt keine Benachrichtigungen aus z.B. notify's gesendet werden können, wenn ich auch inlinekeys umgestellt habe?
Zitat von: Marlen am 06 Dezember 2017, 08:18:21
- Kann man eine Taste mit einen Link versehen? Möchte das wenn ich die Taste drücke mein Floorplan geöffnet wird.
siehe das TelegramBot Attribut parseModeSend
Zitat von: Marlen am 06 Dezember 2017, 08:18:21
- Wenn ich vom meta_Dialog ein anderen Dialog starte, bleibt der meta_Dialog noch offen, kann man das machen, dass der wieder gelöscht wird?
Verstehe ich nicht. Am besten mal ein Bild dazu (aber nicht so ein tapatalk Bild ;))
Zitat von: Marlen am 06 Dezember 2017, 12:34:19
Kann das sein, das jetzt keine Benachrichtigungen aus z.B. notify's gesendet werden können, wenn ich auch inlinekeys umgestellt habe?
Wie sieht denn dein notify aus?
Zitat von: igami am 06 Dezember 2017, 17:06:09
siehe das TelegramBot Attribut parseModeSend
Verstehe ich nicht. Am besten mal ein Bild dazu (aber nicht so ein tapatalk Bild ;))
Wie sieht denn dein notify aus?
"Wie sieht denn dein notify aus?"
Hab mehrere notify die Telegrame senden.
Hab aber mehr den Eindruck, das welche gelöscht werden.
Hier mal ein notify:
Alarmanlage_Status.* {
if( $EVENT eq 'Unscharf' ) {
########## TELEGRAM ###############
my $Notiz = "" if (Value("Notiz_zu_Status") eq "0");
$Notiz = (Value("Notiz_zu_Status"). "\n") if (Value("Notiz_zu_Status") ne "0");
fhem "set Notiz_zu_Status 0";
fhem "set teleBot message " . '@-185234301' . " 🔓 Alarmanlage Status = $EVENT
$Notiz";;
}}
LG
Marlen
Zitat
Zitat von: Marlen am Gestern um 08:18:21
- Kann man eine Taste mit einen Link versehen? Möchte das wenn ich die Taste drücke mein Floorplan geöffnet wird.
siehe das TelegramBot Attribut parseModeSend
Hat hier jemand mal ein Beispiel??
LG
Marlen
Zitat von: Marlen am 07 Dezember 2017, 08:50:39
Hat hier jemand mal ein Beispiel??
Habe mich da vertan, damit kann man nur Links erstellen, aber wie man die auf einen Button bekommt weiß ich nicht.
Das solltest du mal im Telegram Thread nachfragen.
Hallo,
hätte da mal 2 Fragen.
1. Ich würde gerne bei meinem Beschattungsdialog gerne auch eine solche Tabelle erstellen wie bei der Temperatur
"Raumtemperatur":{\
"message": [\
"(zurück|abbrechen:%me%) ",\
"(5.0°C:05.0|10.0°C:10.0|16.0°C:16.0|17.0°C:17.0) ",\
"(17.5°C:17.5|18.0°C:18.0|18.5°C:18.5|19.0°C:19.0) ",\
"(19.5°C:19.5|20.0°C:20.0|20.5°C:20.5|21.0°C:21.0) ",\
"(21.5°C:21.5|22.0°C:22.0|22.5°C:22.5|23.0°C:23.0) ",\
"(23.5°C:23.5|24.0°C:24.0|24.5°C:24.5|25.0°C:25.0) ",\
"Aktuell ist [heizung_wohnen_soll:state] eingestellt."\
],\
"Setheizungwozi": {\
"match": "[0-2][0-9][:.]([0]|[5])",\
"commands": [\
"{my $temperatur = '$message';;;; fhem(\"set heizung_wohnen_soll value $temperatur\");;;;}",\
"set $SELF say @$recipient Heizung"\
]\
}\
}\
Wie muss ich Setheizungwozi umbauen das es auf folgende Message passt :
"message":[\
"(auf|ab) ",\
"(stop) ",\
"(Position Nacht) ",\
"(20%:50|30%:75|40%:100|50%:127) ",\
"(60%:152|70%:177|80%:203|90%:228) ",\
"(abbrechen|zurück) ",\
"Hier kannst du die Rolläden bedienen:"\
],\
2.Wie muss ich denn den Zurückbutton belegen das er mir nur eine ebene im Dialog hoch springt ?
Hab mir eine Dialog gebaut der Folgende Ebenen hat:
Heizung=>Wohnbereich=>Status=>Status ändern
der Zurückbutton funktioniert nur auf der Ebene Heizung, in darunterliegenden Ebenen passiert nichts da funktioniert nur der Abbrechenbutton
hab auch schon diesen Befehl ausprobiert leider ohne Erfolg
"set $SELF say @$recipient Wohnbereich"
Hi,
wie kann ich denn in den Command's einen sleep vor einen Befehl setzten?
Irgendwie klappt das nicht!
LG
Marlen
Wie hast du es denn versucht?
So:
"commands": [
"sleep 20; set R7_GPIO19_FritzBox off",
"set $SELF say @$recipient Einstellungen"
],
LG
Marlen
P.S.: Möchte etwas "bauen" das mir solange ich in Einstellungen|Heizung bin mir die letzte Nachricht alle 30Sek aktualisiert.
War noch ein Fehler im Modul, habe ich gefixt und eingecheckt. Ist gleich per update verfügbar, dann funktioniert es so wie du es angegeben hast.
Hallo,
ich binde in meinen Massage readings mit ein, gibt es eine möglichkeit diese zu runden?
"Strom: [Strom_Calculator:Strom_Zaehler_Umdr_d_state_EnergyDay]kWh "
Hier kommt dann als Output:
ZitatStrom: 6.24712 kWh
möchte aber als Output:
ZitatStrom: 6.3 kWh
LG
Malren
Es gibt in Perl und auch fhem eine Funktion zum Runden.
Ja aber wie bau ich die ein?
Ich würde mir einfach ein extra Reading umrechnen lassen und dieses dann direkt ablesen und zur Ausgabe in Telegram nutzen.
Den Rest kannst du dir sicher selber erarbeiten. ;)
Ja, das wäre jetzt auch meine Lösung gewesen!
Und das geht nicht einfacher?
LG
Marlen
Zitat von: Marlen am 29 Dezember 2017, 23:40:32
Ja, das wäre jetzt auch meine Lösung gewesen!
Und das geht nicht einfacher?
LG
Marlen
Warum hast du das nicht geschrieben und dein bisheriges Ergebnis präsentiert? Und spezifisch nach einer vereinfachten Lösung gefragt?
So wärst du bestimmt schneller ans Ziel gekommen...
Zu deiner Antwort: Ich habe mich mit dem Modul bisher nicht befasst, aber vielleicht kannst du auch direkt im Modul das entsprechende Reading Runden.
https://forum.fhem.de/index.php/topic,77297.msg738813.html#msg738813 (https://forum.fhem.de/index.php/topic,77297.msg738813.html#msg738813)
Ich hab ja noch keine Ergebnisse!
Zitat von: Marlen am 29 Dezember 2017, 23:40:32
Ja, das wäre jetzt auch meine Lösung gewesen!
Naja, hier hast du geschrieben, dass das auch deine Idee wäre. Warum setzt du diese nicht um oder versuchst es und wendest dich nochmal ans Forum, wenn du nicht weiterkommst?
Das Ausrufezeichen betont das ganze so als hättest du es schon etwas angefangen???
Jaein,
klar wäre es kein Problem in meinen Stromcalculator eine bzw. mehrere gerundete readings zu erzeugen.
Allerdings hat das Stromcalculatormodul schon genug readings extra nochmal 5 zusätzliche macht das ganze nicht übersichtlicher finde ich.
Und nur um im Dialog die Werte gerundet zu zeigen, finde ich die Lösung mit Kanonen auf Spatzen geschossen!
Ich dachte halt es gibt eine Möglichkeit das einfach im Dialog
"Strom: [Strom_Calculator:Strom_Zaehler_Umdr_d_state_EnergyDay]kWh "
mit einzubauen.
Gute Nacht!
Moin,
wie wäre es hiermit, vielleicht nicht schön, aber wenn's funktioniert:
attr Strom_Calculator userReadings Strom_Zaehler_Umdr_d_state_EnergyDay { round(( ReadingsVal("Strom_Calculator","Strom_Zaehler_Umdr_d_state_EnergyDay",0)*10)) / 10}
VG
Commandref zu set
Zitat
Ab featurelevel 5.7 ersetzt das set und setreading Befehl [device:name] mit dem Wert des Readings, Internals oder Attributes für device, falls sowohl device, als auch Reading, Internal oder Attribut existiert, und nicht leer ist.
Man kann einen der Präfixe r:, i: oder a: verwenden, um die Suche einzuschränken, genau wie im devspec.
Das Suffix :d extrahiert die erste Zahl.
Das Suffix :i extrahiert die erste Zahl als Ganzzahl.
Das Suffix :r<n> extrahiert die erste Zahl, und rundet sie auf <n> Dezimalstellen. Falls <n> fehlt, dann wird auf eine Dezimalstelle gerundet.
Das Suffix :t liefert den Zeitstempel des Readings
Das Suffix :sec liefert Anzahl der Sekunden seit Änderung des Readings.
Also einfach mal mit
"Strom: [Strom_Calculator:Strom_Zaehler_Umdr_d_state_EnergyDay:r]kWh "
versuchen
SUPER!
Das ist das was ich suche.
Danke!!!
LG
Marlen :-*
Hallo.
Ich versuche gerade mir den meta_Dialog einzurichten und nach x Versuchen, erhalte ich immer noch die folgende Fehlermeldung.
Usage: define <name> msgDialog {JSON}
'"' expected, at character offset 1 (before "\\\n "JARVIS\\Teleg...") at ./FHEM/76_msgDialog.pm line 93.
Ich verstehe nur nicht warum und woher der Fehler kommt. Kann mir bitte jemand helfen?
Danke.
Was versuchst du denn in die DEF zu schreiben?
Ich habe versucht per DEF und auch per Raw Defination, die Daten aus dem Wiki einzutragen.
defmod meta_Dialog msgDialog {\
"%me%": {\
"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."\
]\
}\
}
attr meta_Dialog allowed everyone
BEi DEF natürlich ohne die erste und letzte Zeile.
Zitat von: ErzGabriel am 06 Januar 2018, 08:25:03
Ich habe versucht per DEF und auch per Raw Defination, die Daten aus dem Wiki einzutragen.
defmod meta_Dialog msgDialog {\
"%me%": {\
"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."\
]\
}\
}
attr meta_Dialog allowed everyone
BEi DEF natürlich ohne die erste und letzte Zeile.
Nur mal so ins blaue, die backslash in jeder Zeile hast du aber noch copy paste entfernt?
Schnitzelbrain
Ne, das habe ich mal wieder vergessen. Das wird der Fehler sein, verdammt.
Danke.
EDIT:
Nein, daran liegt es nicht. Erhalte immer noch den gleichen Fehler.
Und nun bitte ein list oder Raw definition vom msgConfig device.
Ich habe mit der Zeile
defmod meta_Dialog msgDialog {}
das Device angelegt und will dann über RAW definition folgendes einkopieren
{\
"%me%": {\
"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."\
]\
}\
}
attr meta_Dialog allowed everyone
Wobei ich heute ide Backslahs entfernt habe.
Und das Ergebnis?
Zitat von: igami am 06 Januar 2018, 15:05:31
Und nun bitte ein list oder Raw definition vom msgConfig device.
Uppps, überlesen. Sorry.
Meine msgConfig sieht wie folgt aus.
define myMsgConfig msgConfig
attr myMsgConfig userattr msgDialog_evalSpecials:textField-long msgDialog_msgCommand:textField
attr myMsgConfig comment FHEM Global Configuration for command 'msg'
attr myMsgConfig group Global
attr myMsgConfig msgContactPush *******
attr myMsgConfig msgDialog_evalSpecials me=*****\TelegramBot=*****
attr myMsgConfig msgType text
attr myMsgConfig room Telegram
attr myMsgConfig stateFormat fhemMsgState
attr myMsgConfig verbose 3
* sind durch den Namen vom Bot ersetzt. Beim nalgen, keine Probleme gehabt.
Ergebnis heute bei dem meta_Dialog. Immer noch die Fehleermeldung und Device wird nicht angelegt.
guck dir mal dein msgDialog_evalSpecials Attribut an, das stimmt so nicht.
Laut commandref:
Zitat
Leerzeichen getrennte Liste von Name=Wert Paaren.
Jo, das war es. Danke.
Habe mir den Waschmaschinen Dialog zum testen angelegt aber irgendwie zeigt der Bot mir das nicht an.
Ich habe sämtliche Versionen zum starten des Dialogs probiert, die mir einfallen.
Mir will es nicht in den Kopf, wie das funktioniert, bin ich wohl zu blöde für.
Danke allen für die Hilfe aber ich gebe auf.
Zitat von: ErzGabriel am 07 Januar 2018, 11:00:09
Danke allen für die Hilfe aber ich gebe auf.
Schade :(
Falls du es dir anders überlegst melde dich einfach wieder.
Ich werde mir das nicht anders überlegen, da ich es nicht schaffe ein laufendes Grundsystem hinzukriegen.
Da ich jetzt keine Idee mehr habe, was ich wie noch falsch machen kann und es mich nur noch frustet.
Währe mir nicht mein Fhem abgeschmiert und hätte ich auf eine neue Version updaten müssen, hätte ich ein funktionierendes Grundsystem, was Spaß machte zu testen und zu basteln aber so macht es kein Spaß mehr.
Trotzdem ein häufiger "Fehler": Es wurde das Attribut allowed nicht gesetzt.
Hallo igami,
ich habe mir heute mal die Zeit genommen und wollte meine Eigenprogrammierung des Telegramm-Dialogs durch deinen ablösen, da ich Probleme habe, wenn mehrere User gleichzeitig Anfragen stellen.
Nun habe ich mich durch die Commandref, durchs Wiki und durchs Forum gekämpft, jede Menge an meinem FHEM verändert, aber ich blicke trotzdem noch nicht ganz durch. Bei all den Erklärungen kann ich nirgends einen roten Faden finden. Könntest du vielleicht die Commandref oder das Wiki um ein Minimal-Beispiel erweitern? Welche Steps muss ich gehen um ein einfaches Frage - Antwort -Szenario hinzubekommen? Was ist mit ROOMMATE oder GUEST? Brauche ich das zwingend um das Modul nutzen zu können oder nur wenn ich später irgendwelche Berechtigungen steuern möchte?
Ich habe jetzt meine msgConfig angepasst und wenn ich es richtig verstanden habe, kann ich in meinem Fall mit dem Wort "startMD" den Dialog starten...?
defmod myMsgConfig msgConfig
attr myMsgConfig userattr msgDialog_evalSpecials:textField-long msgDialog_msgCommand:textField
attr myMsgConfig DbLogExclude .*
attr myMsgConfig comment FHEM Global Configuration for command 'msg'
attr myMsgConfig group Global
attr myMsgConfig msgContactPush TelegramBot
attr myMsgConfig msgDialog_evalSpecials me=startMD
attr myMsgConfig msgType text
attr myMsgConfig room SYSTEM->Fhem
attr myMsgConfig stateFormat fhemMsgState
attr myMsgConfig verbose 2
Aber wie geht's dann weiter? Ich definiere einen einfachen Dialog. Und jetzt?
defmod TelegramMainMsgDialog msgDialog {\
"%me%": {\
"match": "test",\
"message": [\
"Das ist ein Test"\
]\
}\
}
attr TelegramMainMsgDialog DbLogExclude .*
attr TelegramMainMsgDialog group Telegram
Mir fehlt leider irgendwie der rote Faden. Ich hoffe, du verstehst mein Problem und kannst mir helfen. ;)
VG, Thomas
Ich schreibe mir die Überarbeitung der Commandref auf meine Liste.
Zitat von: ToM_ToM am 07 Januar 2018, 16:35:56
Was ist mit ROOMMATE oder GUEST? Brauche ich das zwingend um das Modul nutzen zu können oder nur wenn ich später irgendwelche Berechtigungen steuern möchte?
Ja, wird zwingend benötigt
Zitat von: ToM_ToM am 07 Januar 2018, 16:35:56
Ich habe jetzt meine msgConfig angepasst und wenn ich es richtig verstanden habe, kann ich in meinem Fall mit dem Wort "startMD" den Dialog starten...?
defmod myMsgConfig msgConfig
attr myMsgConfig userattr msgDialog_evalSpecials:textField-long msgDialog_msgCommand:textField
attr myMsgConfig DbLogExclude .*
attr myMsgConfig comment FHEM Global Configuration for command 'msg'
attr myMsgConfig group Global
attr myMsgConfig msgContactPush TelegramBot
attr myMsgConfig msgDialog_evalSpecials me=startMD
attr myMsgConfig msgType text
attr myMsgConfig room SYSTEM->Fhem
attr myMsgConfig stateFormat fhemMsgState
attr myMsgConfig verbose 2
Aber wie geht's dann weiter? Ich definiere einen einfachen Dialog. Und jetzt?
defmod TelegramMainMsgDialog msgDialog {\
"%me%": {\
"match": "test",\
"message": [\
"Das ist ein Test"\
]\
}\
}
attr TelegramMainMsgDialog DbLogExclude .*
attr TelegramMainMsgDialog group Telegram
Dein TelegramMainMsgDialog reagiert auf startMD und antwortet dann mit "Das ist ein Test". Aber nur wenn der Nutzer dazu berechtigt ist (Attribut allowed)
ZitatJa, wird zwingend benötigt
Okay, ich habe das jetzt angelegt.
defmod Thomas ROOMMATE
attr Thomas DbLogExclude .*
attr Thomas alias Status
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 Thomas
attr Thomas icon people_sensor
attr Thomas rr_realname group
attr Thomas sortby 1
attr Thomas webCmd state
Da das Roommate im msgDialog bei allowed nicht auftaucht, habe ich dort mal auf "everyone" gesetzt.
defmod TelegramMainMsgDialog msgDialog {\
"%me%": {\
"match": "test",\
"message": [\
"Das ist ein Test"\
]\
}\
}
attr TelegramMainMsgDialog DbLogExclude .*
attr TelegramMainMsgDialog allowed everyone
attr TelegramMainMsgDialog group Telegram
Wenn ich nun den Text "startMD" per Telegram an meinen Bot sende, bekomme ich aber trotzdem keine Antwort.
VG, Thomas
Im ROOMMATE muss auch noch das Attribut msgContactPush gesetzt werden.
Beispiel:
attr Thomas msgContactPush TelegramBot:@<deineTelegramID>
Danach im Dialog noch "set update allowed" ausführen.
Vielen Dank!
Jetzt bekomme ich auch eine Nachricht. :) Nun kann ich mich mal durchhangeln und versuchen, ein Inline Menü aufzusetzen. :)
VG, Thomas
Hi igami,
ich habe jetzt die ersten Dialoge gebastelt bekommen.
Nun aber folgendes Problem.
Wenn ich folgenden Code verwende, bekomme ich keine Antwort:
defmod TelegramMsgDialog_Security msgDialog {\
"Sicherheit": {\
"message": [\
"(abbrechen)"\
]\
}\
}
attr TelegramMsgDialog_Security DbLogExclude .*
attr TelegramMsgDialog_Security allowed everyone,Thomas
attr TelegramMsgDialog_Security group Telegram
lasse ich aber die Klammern in der message weg, dann kommt wie erwartet "abbrechen" als Nachricht.
defmod TelegramMsgDialog_Security msgDialog {\
"Sicherheit": {\
"message": [\
"abbrechen"\
]\
}\
}
attr TelegramMsgDialog_Security DbLogExclude .*
attr TelegramMsgDialog_Security allowed everyone,Thomas
attr TelegramMsgDialog_Security group Telegram
Zitat von: Flipper92 am 07 Januar 2018, 18:32:46
Hey,
Ich hab ein Problem.
Seit ca. 2 Tagen funktioniert mein Chat nicht mehr.
Ich weiß nur nicht woran es leigt.
Ich hab schon rausgefunden, das meine User rausgefallen sind. Nach dem neuen einrichten hab ich folgenden log:
2018.01.07 19:15:21 3: msg rr_Dominik: ID=[ZENSIERT].[ZENSIERT].1 TYPE=push ROUTE=TelegramBot RECIPIENT=@[ZENSIERT] STATUS=OK PRIORITY=0 TITLE='' MSG='(Wohnzi # Soll 20.0°C # Ist T: 22.4 H: 48:Heizungwozi)
(Schlaf # Soll 21.0°C # Ist T: 20.2 H: 56:Heizungschlaf)
(Jenni # Soll 20.0°C # Ist T: 19.6 H: 67:Heizungjenni)
(Küche # Soll 18.0°C:Heizungkueche|Bad # Soll 17.0°C:Heizungbad)
(An/Aus:heizunganaus|zurück:%me%)
(Aktualisieren:aktulaisierenheizung)
Aktuell ist die Heizungsautomation: on
Wohnzimmer Ventil: 22 On-Time: 33.848
Schlafzimmer Ventil: 12 On-Time: 100.607
Bad Ventil: 0 On-Time: 2.064
Arbeitszimmer Ventil: 0 On-Time: 87.565
Küche Ventiel: 0 On-Time: 3.470
Paul: 38.1°C 18%'
Eine Nachricht kommt jedoch nicht an.
Edit: Log bereinigt
Was meinst du mit neu einrichten? im TelegramBot utf8-specials auf 1 gesetzt? %me% wird nicht aufgelöst.
Zitat von: ToM_ToM am 07 Januar 2018, 18:56:03
Hi igami,
ich habe jetzt die ersten Dialoge gebastelt bekommen.
Nun aber folgendes Problem.
Wenn ich folgenden Code verwende, bekomme ich keine Antwort:
defmod TelegramMsgDialog_Security msgDialog {\
"Sicherheit": {\
"message": [\
"(abbrechen)"\
]\
}\
}
attr TelegramMsgDialog_Security DbLogExclude .*
attr TelegramMsgDialog_Security allowed everyone,Thomas
attr TelegramMsgDialog_Security group Telegram
lasse ich aber die Klammern in der message weg, dann kommt wie erwartet "abbrechen" als Nachricht.
defmod TelegramMsgDialog_Security msgDialog {\
"Sicherheit": {\
"message": [\
"abbrechen"\
]\
}\
}
attr TelegramMsgDialog_Security DbLogExclude .*
attr TelegramMsgDialog_Security allowed everyone,Thomas
attr TelegramMsgDialog_Security group Telegram
Man kann keinen Button ohne Nachricht senden ;)
Zitat von: igami am 07 Januar 2018, 21:02:54
Was meinst du mit neu einrichten? im TelegramBot utf8-specials auf 1 gesetzt? %me% wird nicht aufgelöst.
Hab gerade mal den pi neu gestartet. Daraufhin waren alle meine Dialogs weg.
Hab sie nun per RAW neu Importiert (ein hoch auf Backups :-) ) und nun läuft es wieder.
Ich weiß nicht was das Problem war. Hauptsache es funktioniert weder. :-D
Hey igami, kann es sein dass es zu Problemen kommt wenn der Text der innerhalb des message Feldes per Perl zurückgegeben wird, besondere Zeichen enthält?
Folgendes liefert mir nämlich gar nichts zurück.
defmod TelegramMsgDialog_FritBoxCallList msgDialog {\
"Anrufliste": {\
"message": [\
"{return telegramBotGetFritzBoxCallListMessage('FritzBoxCallList') }",\
"Anrufliste"\
]\
}\
}
attr TelegramMsgDialog_FritBoxCallList DbLogExclude .*
attr TelegramMsgDialog_FritBoxCallList allowed Thomas
attr TelegramMsgDialog_FritBoxCallList group Telegram
attr TelegramMsgDialog_FritBoxCallList verbose 5
Rufe ich die obige Funktionin FHEM direkt auf, bekomme ich eine Liste zurück die in Etwa folgendermaßen aufgebaut ist (Nummer habe ich hier verfälscht):
10.12.17 - 11:08:30 | - (0123456789123) - 00:47:05
18.12.17 - 07:12:55 | - (0123456789123) - 01:10:41
EDIT: Okay, habe es selbst herausbekommen. :)
So gehts:
defmod TelegramMsgDialog_FritBoxCallList msgDialog {\
"Anrufliste": {\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"{return telegramBotGetFritzBoxCallListMessage('FritzBoxCallList') }"\
]\
}\
}
attr TelegramMsgDialog_FritBoxCallList DbLogExclude .*
attr TelegramMsgDialog_FritBoxCallList allowed Thomas
attr TelegramMsgDialog_FritBoxCallList group Telegram
attr TelegramMsgDialog_FritBoxCallList verbose 5
VG, Thomas
Hallo,
vielen Dank, für dieses tolle Modul!
Das ist viel besser als meine "alte" Menüführung in Telegram.
Hab mal meine Dialog-Struktur angehängt.
Find das macht schon wenig süchtig.
LG
Marlen
Hi.
Ich habe da ein kleines Problem mit meinem ersten Dialog und finde den Fehler nicht oder sehe ihn nicht.
Schaut Ihr mal bitte drauf.
defmod beleuchtung_Dialog msgDialog {"Licht":{\
"message": [\
"(Lampen einschalten) ",\
"(Lampen ausschalten) ",\
"(abbrechen) ",\
"Lampen schalten:"\
],\
"Lampen einschalten":{\
"message":[\
"{return('(Büro einschalten) ') if(ReadingsVal('HUEGroup4', 'state', '') eq 'off')}",\
"{return('(Diele einschalten) ') if(ReadingsVal('HUEGroup2', 'state', '') eq 'off')}",\
"{return('(Küche einschalten) ') if(ReadingsVal('HUEGroup5', 'state', '') eq 'off')}",\
"{return('(Schlafzimmer einschalten) ') if(ReadingsVal('HUEGroup3', 'state', '') eq 'off')}",\
"(abbrechen) ",\
"Welche Lampen soll eingeschaltet werden?"\
],\
"Büro einschalten":{\
"commands": "set HUEGroup4 on",\
"message":[\
"(%me%) ",\
"Die Lampen im Büro wurden eingeschaltet."\
]\
},\
"Diele einschalten":{\
"commands": "set HUEGroup2 on",\
"message":[\
"(%me%) ",\
"Die Lampen in der Diele wurden eingeschaltet."\
]\
},\
"Kueche einschalten":{\
"commands": "set HUEGroup5 on",\
"message":[\
"(%me%) ",\
"Die Lampen in der Kueche wurden eingeschaltet."\
]\
},\
"Schlafzimmer einschalten":{\
"commands": "set HUEGroup3 on",\
"message":[\
"(%me%) ",\
"Die Lampe im Schlafzimmer wurde eingeschaltet."\
]\
}\
},\
"Lampen ausschalten":{\
"message":[\
"{return('(Büro ausschalten) ') if(ReadingsVal('HUEGroup4', 'state', '') ne 'off')}",\
"{return('(Diele ausschalten) ') if(ReadingsVal('HUEGroup2', 'state', '') ne 'off')}",\
"{return('(Küche ausschalten) ') if(ReadingsVal('HUEGroup5', 'state', '') ne 'off')}",\
"{return('(Schlafzimmer ausschalten) ') if(ReadingsVal('HUEGroup3', 'state', '') ne 'off')}",\
"(abbrechen) ",\
"Welche Lampen soll ausgeschaltet werden?"\
],\
"Büro ausschalten":{\
"commands": "set HUEGroup4 on",\
"message":[\
"(%me%) ",\
"Die Lampen im Büro wurden ausgeschaltet."\
]\
},\
"Diele ausschalten":{\
"commands": "set HUEGroup2 off",\
"message":[\
"(%me%) ",\
"Die Lampen in der Diele wurden ausgeschaltet."\
]\
},\
"Kueche ausschalten":{\
"commands": "set HUEGroup5 off",\
"message":[\
"(%me%) ",\
"Die Lampen in der Kueche wurden ausgeschaltet."\
]\
},\
"Schlafzimmer ausschalten":{\
"commands": "set HUEGroup3 off",\
"message":[\
"(%me%) ",\
"Die Lampe im Schlafzimmer wurde ausgeschaltet."\
]\
}\
}\
}\
}
attr beleuchtung_Dialog allowed rr_Marcus
attr beleuchtung_Dialog room Telegram
setstate beleuchtung_Dialog 2018-01-09 16:31:36 state Initialized
Wenn ich auf Lampen einschalten gehe, steht da nur abbrechen.
Gehe ich auf Lampen ausschalten, stehen alle aufgelisteten Lampen und ich kann sie auch schalten.
Probier mal das ReadingsVal direkt in der Kommandozeile, eventuell hat sich ein Tippfehler eingeschlichen. Das solltest du dann erkennen.
Ich habe es gefunden, nach dem 90 mal durchlesen. War ein zeichenfehler.
Hey igami,
gibt's irgendwie die Möglichkeit als TRIGGER auch einen Regex zu verwenden?
Ich würde mir gerne ähnlich deines Waschmaschinen-Beispiels einen Dialog für meine Heizkörperthermostate basteln, aber nicht für jedes Thermostat einen eigenen Dialog bauen wollen.
{
"Raumtemperaturen": {
"message": [
"(Arbeitszimmer) (Badezimmer|Wohnzimmer) ",
"TelegramBot_MTYPE=queryInline (%me%) ",
"{return telegramBotGetRoomTemperatureListMessage() }"
],
"$message": {
"message": [
"(5.0°C:05.0|10.0°C:10.0|16.0°C:16.0|17.0°C:17.0) ",
"(17.5°C:17.5|18.0°C:18.0|18.5°C:18.5|19.0°C:19.0) ",
"(19.5°C:19.5|20.0°C:20.0|20.5°C:20.5|21.0°C:21.0) ",
"(21.5°C:21.5|22.0°C:22.0|22.5°C:22.5|23.0°C:23.0) ",
"(abbrechen) ",
"Heizung im $message einstellen"
]
}
}
}
VG, Thomas
ja, dafür gibt es match ;)
Zitat von: igami am 10 Januar 2018, 19:37:52
ja, dafür gibt es match ;)
Das mit dem match habe ich gesehen. Aber ich brauche doch zwingend den TRIGGER... oder nicht? Kann das doch nicht leer lassen und nur match verwenden. Kannst du mir das mal bitte anhand meines Beispiels erklären? :)
Gesendet von meinem SM-G930F mit Tapatalk
Bei Trigger schreibst du irgendwas rein. Im Waschmaschine Dialog gibt es das mit der Uhrzeit.
Ich habe auch noch einen anderen Dialog der sowas benutzt, muss ich am Wochenende mal raussuchen.
ZitatBei Trigger schreibst du irgendwas rein. Im Waschmaschine Dialog gibt es das mit der Uhrzeit.
Ah okay, dann hatte ich das noch ein wenig falsch verstanden. Dachte, der Trigger würde ähnlich wie match arbeiten.
Nun habe ich es so hinbekommen. :)
{
"Raumtemperaturen": {
"message": [
"(Arbeitszimmer) (Badezimmer|Wohnzimmer) ",
"TelegramBot_MTYPE=queryInline (%me%) ",
"{return telegramBotGetRoomTemperatureListMessage() }"
],
"Raum": {
"match": "(Arbeitszimmer|Badezimmer|Wohnzimmer)",
"message": [
"(5.0°C:05.0|10.0°C:10.0|16.0°C:16.0|17.0°C:17.0) ",
"(17.5°C:17.5|18.0°C:18.0|18.5°C:18.5|19.0°C:19.0) ",
"(19.5°C:19.5|20.0°C:20.0|20.5°C:20.5|21.0°C:21.0) ",
"(21.5°C:21.5|22.0°C:22.0|22.5°C:22.5|23.0°C:23.0) ",
"(abbrechen) ",
"Heizung im $message einstellen"
]
}
}
}
Kann ich innerhalb einer Struktur eine Variable definieren die ich dann eine Ebenen tiefer wieder aufrufen kann?
Oder müsste ich das über einen externen Dummy lösen?
- Raumtemperatur einstellen
- Bad, Schlafzimmer, Wohnzimmer
- 10.0, 12.0, 15.0, 17.0, 20.0, 23.0
- HIER WÜRDE ICH JETZT GERNE DEN RAUM WISSEN DEN ICH 2 EBENEN ZUVOR AUSGEWÄHLT HATTE
VG, Thomas
Zitat von: ToM_ToM am 11 Januar 2018, 07:43:55
Kann ich innerhalb einer Struktur eine Variable definieren die ich dann eine Ebenen tiefer wieder aufrufen kann?
Oder müsste ich das über einen externen Dummy lösen?
- Raumtemperatur einstellen
- Bad, Schlafzimmer, Wohnzimmer
- 10.0, 12.0, 15.0, 17.0, 20.0, 23.0
- HIER WÜRDE ICH JETZT GERNE DEN RAUM WISSEN DEN ICH 2 EBENEN ZUVOR AUSGEWÄHLT HATTE
VG, Thomas
Ich habe es über
setreading $SELF Heizung $message
nach der Raumauswahl gelöst...
Gesendet von meinem SM-G935F mit Tapatalk
Hi,
ich wollte mich nun auch mal ran machen, um meine Einkaufsliste darüber abzuwickeln.
Da ich kein Residents Device habe, habe ich das Attribut auf "everyone" gestellt. (geht es überhaupt ohne Residents Device?)
Ich verstehe noch nicht so ganz den Zusammenhang der Module msgconifg und msgdialog...
Jedenfalls passiert nichts, wenn ich den Bot mit dem Trigger "Einkaufsliste" anschreibe.
Hier ein list meines dialogs:
Historie löschen
Internals:
CFGFN
DEF {
"Einkaufsliste": {
"message": [
"(Waren hinzufügen) ",
"(Waren entfernen) ",
"(einkaufen) ",
"(abbrechen) ",
"{my $content = (split(': ', fhem('get %PostMe% list %list%')))[1];; return('Keine Einträge vorhanden') unless($content);; return(join('\n', split(',', $content)));;}"
],
"Waren hinzufügen": {
"message": [
"Bitte jede Ware als neue Nachricht hinzufügen.",
"Das hinzufügen von Waren durch \"/beenden\" beenden."
],
"Ware hinzufügen": {
"match": "[^/]+",
"commands": [
"set %PostMe% add %list% $message",
"setreading $SELF $recipient_history Einkaufsliste|Waren hinzufügen"
]
}
},
"Waren entfernen": {
"message": [
"{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1]), 'beenden'). ') ')}",
"Welche Ware möchtest du entfernen?"
],
"Ware entfernen": {
"match": "^(?!beenden).+",
"commands": [
"set %PostMe% remove %list% $message",
"set $SELF say @$recipient Einkaufsliste|Waren entfernen"
]
}
},
"einkaufen": {
"commands": [
"setreading $SELF $recipient_history Einkaufsliste|noch einzukaufen"
],
"message": [
"{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1])) . ') ')}",
"(beenden) ",
"Bitte die Waren der Reihenfolge nach auswählen in der sie eingekauft werden."
]
},
"noch einzukaufen": {
"message": [
"{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1])) . ') ')}",
"(beenden) ",
"Noch einzukaufen:"
],
"Ware eingekauft": {
"match": "^(?!beenden).+",
"commands": [
"set %PostMe% remove %list% $message",
"set $SELF say @$recipient Einkaufsliste|noch einzukaufen"
]
}
}
}
}
MSGCOMMAND msg push \@$recipients $message
NAME Einkaufsliste_Dialog
NOTIFYDEV TYPE=(ROOMMATE|GUEST)
NR 41197
NTFY_ORDER 50-Einkaufsliste_Dialog
STATE Initialized
TRIGGER Einkaufsliste
TYPE msgDialog
READINGS:
2018-01-11 12:53:27 state Initialized
Attributes:
allowed everyone
evalSpecials PostMe=PostIt list=Einkaufsliste
room Einkauf
Und hier des mdsconfig Devices:
Internals:
CFGFN
NAME msg
NOTIFYDEV TYPE=(Jabber|TelegramBot|yowsup)
NR 41174
NTFY_ORDER 50-msgConfig
STATE initialized
TYPE msgConfig
READINGS:
2018-01-11 12:49:24 fhemMsgState initialized
Attributes:
comment FHEM Global Configuration for command 'msg'
group Global
msgContactPush teleBot
msgType text
room Telegram
stateFormat fhemMsgState
userattr msgDialog_evalSpecials:textField-long msgDialog_msgCommand:textField
verbose 3
Was mache ich falsch? *FacePalm*
Danke und Gruß,
Fixel
Es wird zwingend ein ROOMMATE oder GUEST device benötigt.
Hat das einen Grund, warum man extra ein Roommate Device erstellen muss?
Sehe nicht so ganz den Vorteil/Sinn bei der Sache. Man könnte doch einfach alle bekannten Kontakte oder eben nur bestimmte für das Modul zur Kommunikation freigeben. Warum den Umweg über Roommate?
EDIT: Nach dem anlegen des Devices, geht es nun. Alles etwas umständlich :o Werde noch 3 Weitere für den Rest der Familie anlegen und dann mal schauen!
Hallo RoBra81,
die Idee mit dem Reading finde ich super. Aber deine Konfiguration hat einen Haken. Wenn ich die Anfrage starte um die Temperatur im Badezimmer zu ändern und als Reading das "Badezimmer" schreibe, in der Zwischenzeit jemand die Temperatur im "Wohnzimmer" ändern will, kann es sein dass wir uns in die Quere kommen und ich dann die Temperatur für den falschen Raum ändere.
Hier müsste man noch den Recipient mit abspeichern (idealerweise die ID). Aber in der Variable steht leider nur der Name. Der kann doch mit Sicherheit mehrfach vorkommen.
Irgendwie ist mir das alles noch zu unsauber. Igami, wie hast du das denn gelöst? Oder steuerst du deine Heizung nicht darüber?
VG, Thomas
Zitat von: Fixel2012 am 11 Januar 2018, 19:35:04
Hat das einen Grund, warum man extra ein Roommate Device erstellen muss?
Sehe nicht so ganz den Vorteil/Sinn bei der Sache. Man könnte doch einfach alle bekannten Kontakte oder eben nur bestimmte für das Modul zur Kommunikation freigeben. Warum den Umweg über Roommate?
Weil das ganze Modul möglichst viele Kommunikationsmittel abdecken soll. Der ROOMMATE dient der Zuordnung von eingehenden Nachrichten, egal ob Telegram, Whatsapp oder Jabber. Damit ist es möglich, dass ein Dialog von der einen Partei via Telegram Benutzt wird und von einer anderen Partei via Jabber. Wobei Telegram durch die Keyboards wohl die komfortabelste integration bietet.
Zitat von: ToM_ToM am 11 Januar 2018, 19:40:22
die Idee mit dem Reading finde ich super. Aber deine Konfiguration hat einen Haken. Wenn ich die Anfrage starte um die Temperatur im Badezimmer zu ändern und als Reading das "Badezimmer" schreibe, in der Zwischenzeit jemand die Temperatur im "Wohnzimmer" ändern will, kann es sein dass wir uns in die Quere kommen und ich dann die Temperatur für den falschen Raum ändere.
Hier müsste man noch den Recipient mit abspeichern (idealerweise die ID). Aber in der Variable steht leider nur der Name. Der kann doch mit Sicherheit mehrfach vorkommen.
Irgendwie ist mir das alles noch zu unsauber. Igami, wie hast du das denn gelöst? Oder steuerst du deine Heizung nicht darüber?
Nein, ich steuere meine Heizung nicht darüber. Es ist ein Wert für Anwesenheit festgelegt und ein Wert für Abwesenheit.
Im Berechtigungen Dialog habe ich es auch über ein Reading gelöst.
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 allowed Michael_P
attr Berechtigungen_Dialog evalSpecials allowed={'('.join('|', devspec2array('TYPE=(ROOMMATE|GUEST):FILTER=msgContactPush=.+')).')'}\
dialogs={'('.join('|', devspec2array('TYPE=msgDialog')).')'}
attr Berechtigungen_Dialog room msg
Hey, igami,
ich bekomme das mit dem Escapen einfach nicht hin.
Habe schon alles mögliche ausprobiert mit einfachen/doppelten Anführungszeichen, mit/ohne Backslash, mit/ohne Perlcode...
EDIT: Es geht um die Zeile "commands": "{fhem('setreading $SELF ' . $recipient . '_Room $message')}",
{
"Raumtemperaturen": {
"message": [
"(Arbeitszimmer) (Badezimmer|Wohnzimmer) ",
"TelegramBot_MTYPE=queryInline (%me%) ",
"{return telegramBotGetRoomTemperatureListMessage() }"
],
"Raum": {
"match": "(Arbeitszimmer|Badezimmer|Wohnzimmer)",
"commands": "{fhem('setreading $SELF ' . $recipient . '_Room $message')}",
"message": [
"(5.0°C:05.0|10.0°C:10.0|16.0°C:16.0|17.0°C:17.0) ",
"(17.5°C:17.5|18.0°C:18.0|18.5°C:18.5|19.0°C:19.0) ",
"(19.5°C:19.5|20.0°C:20.0|20.5°C:20.5|21.0°C:21.0) ",
"(21.5°C:21.5|22.0°C:22.0|22.5°C:22.5|23.0°C:23.0) ",
"(abbrechen) ",
"Heizung im $message einstellen"
]
}
}
}
Ich bekomme immer Fehlermeldungen wie diese:
2018.01.12 09:55:59 1: ERROR evaluating {fhem('setreading TelegramMsgDialog_RoomTemperatures ' . Thomas . '_Room Badezimmer')}: Bareword "Thomas" not allowed while "strict subs" in use at (eval 3715) line 1.
Kannst du mir sagen was ich mit dem Escapen falsch mache?
VG, Thomas
Zitat von: Marlen am 09 Januar 2018, 12:16:24
Hallo,
vielen Dank, für dieses tolle Modul!
Das ist viel besser als meine "alte" Menüführung in Telegram.
Hab mal meine Dialog-Struktur angehängt.
Find das macht schon wenig süchtig.
LG
Marlen
Wie hast Du Deine Menü-Struktur erstellt?
Ich hatte mein Menü erst manuell sortiert, aber die Liste wurde immer länger und passte nicht mehr ganz aufs Display...
Dann habe ich mir überlegt, das ganze könnte doch auch etwas eleganter gehen:
Ich habe mir für jeden Menüpunkt einen Mini-meta-Dialog angelegt:
defmod Favoriten_Dialog msgDialog {"00.⭐️Favoriten":{\
"message": [\
"{return('(' . join(') (', sort(split('\n', fhem('get TYPE=msgDialog:FILTER=NAME=.*_fav:FILTER=allowed=.*($recipient|everyone).* trigger')))) . ') ')}",\
"(zurück:%me%) ",\
"Hier sind deine Favoriten:"\
]\
}\
}\
Um Dialoge in "00.⭐️Favoriten" zu packen genügt es jetzt, den Dialognamen um ein _fav zu ergänzen.
Für alle anderen Menüpunkte wie _user für "01.Bewohner" oder _sys für "09.System" usw. genügt dann eine kleine copy&paste Fleißarbeit ;)
Im meta-Dialog dürfen diese Dialoge nicht mehr auftauchen, sie werden durch ein
FILTER=NAME!=.*_fav
für die Favoriten aussortiert.
Der meta-Dialog erfasst jetzt nur noch diese Menü-Dialoge und alle restlichen Dialoge, welche (noch) nicht einsortiert sind
oder nicht einsortiert werden sollen.
VG Sebastian
Zitat von: ToM_ToM am 12 Januar 2018, 09:59:35
Kannst du mir sagen was ich mit dem Escapen falsch mache?
Die Variablen werden vor dem Auswerten ersetzt. Einfach nicht escapen sondern
"commands": "{fhem('setreading $SELF $recipient_Room $message')}",
schreiben.
Hey igami,
das mit dem Escapen bringt mich noch um. Gibt es irgendwo eine Auflistung wann man wie escapen kann?
Jetzt habe ich Probleme in der Zeile die mit folgendem beginnt:
"{my $temp = $message;;;; $temp =~ s/([\d]{1,2}\.[\d{1}])/$1/g;;;;
Ich bekomme Fehler wegen meines Regex.
illegal backslash escape sequence in string, at character offset 720 (before "\\d]{1,2}\\.[\\d{1}]...") at /opt/fhem/FHEM/76_msgDialog.pm line 93.
{
"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 (\"set $clima desired-temp $temp\") }"
],
"message": [
"eingestellt"
]
}
}
}
}
Zitat von: ToM_ToM am 12 Januar 2018, 20:25:17
das mit dem Escapen bringt mich noch um. Gibt es irgendwo eine Auflistung wann man wie escapen kann?
https://www.freeformatter.com/json-escape.html ?
also aus \d wir \\d
Hi igami,
vielen Dank! Das war schon mal sehr hilfreich. Nun habe ich noch 2 Probleme.
Bei folgendem Dialog funktioniert bis zur Temperatureinstellung alles. Was nicht funktioniert, ist, dass er mir den Text zurückgibt dass die Heizung jetzt eingestellt wurde.
Wenn das noch behoben wurde, kann der Dialog auch gerne ins Wiki übernommen werden damit sich andere nicht auch noch mit rumquälen müssen.
{
"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 (\"set $clima desired-temp $temp\") }"
],
"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"{my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;; return \"Temperatur im $room auf $message eingestellt.\";;;; }"
]
}
}
}
}
Im Log tauchen bei mir komischerweise folgende Zeilen auf:
2018.01.12 21:53:57 5: msgDialog (TelegramMsgDialog_FritBoxCallList) - entering msgDialog_evalSpecials
2018.01.12 21:54:00 5: msgDialog (TelegramMsgDialog_FritBoxCallList) - entering msgDialog_Notify
2018.01.12 21:54:00 4: msgDialog (TelegramMsgDialog_FritBoxCallList) triggered by "Thomas fhemMsgRcvPush: Arbeitszimmer"
2018.01.12 21:54:00 5: msgDialog (TelegramMsgDialog_FritBoxCallList)
entering msgDialog_progress
recipients: Thomas
message: Arbeitszimmer
force: 0
2018.01.12 21:54:00 5: msgDialog (TelegramMsgDialog_FritBoxCallList) - entering msgDialog_evalSpecials
2018.01.12 21:54:03 5: msgDialog (TelegramMsgDialog_FritBoxCallList) - entering msgDialog_Notify
2018.01.12 21:54:03 4: msgDialog (TelegramMsgDialog_FritBoxCallList) triggered by "Thomas fhemMsgRcvPush: 17.0°C"
Warum greift er denn auf den TelegramMsgDialog_FritBoxCallList Dialog zu? Den spreche ich doch gar nicht an.
Hier der Aufbau des TelegramMsgDialog_FritBoxCallList Dialog:
{
"Anrufliste": {
"match":"Anrufliste",
"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"{return telegramBotGetFritzBoxCallListMessage('FritzBoxCallList') }"
]
}
}
VG, Thomas
Wollte nochmal Rückmeldung zum Modul geben:
-Das zusätzliche Modul Roommate ist ehrlich gesagt recht schnell konfiguriert und stört nicht so sehr. Im Endeffekt doch eine gute Wahl. Entschuldige meine Kritik zuvor.
-Das Konfigurieren ist leider nicht so leicht, tue mich da noch etwas schwer... ;D
-Damit kann man echt super gute Dialoge Formulieren, und diese sogar noch schön ausschmücken!
Danke fürs Modul, werde demnächst mal schauen was sich noch alles außer die Einkaufsliste darüber steuern lässt!
Gruß,
Fixel
Zitat von: ToM_ToM am 12 Januar 2018, 22:01:36
Bei folgendem Dialog funktioniert bis zur Temperatureinstellung alles. Was nicht funktioniert, ist, dass er mir den Text zurückgibt dass die Heizung jetzt eingestellt wurde.
Du musst auch noch auf das °C matchen.
Zitat von: ToM_ToM am 12 Januar 2018, 22:01:36
Warum greift er denn auf den TelegramMsgDialog_FritBoxCallList Dialog zu? Den spreche ich doch gar nicht an.
Der Dialog prüft nur ob es für ihn relevant ist.
ZitatDu musst auch noch auf das °C matchen.
Das ist es nicht. Das Command funktioniert auch so und wird korrekt ausgeführt.
Mein Problem liegt in der Rückgabe der Nachricht. Da kommt nichts. Wenn ich nur einen Text zurückgeben lasse, funktioniert es.
Demnach muss der Fehler irgendwo hier liegen:
"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"{my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;; return \"Temperatur im $room auf $message eingestellt.\";;;; }"
]
ZitatDer Dialog prüft nur ob es für ihn relevant ist.
Okay. :)
Zitat von: ToM_ToM am 13 Januar 2018, 09:22:57
Das ist es nicht. Das Command funktioniert auch so und wird korrekt ausgeführt.
Mein Problem liegt in der Rückgabe der Nachricht. Da kommt nichts. Wenn ich nur einen Text zurückgeben lasse, funktioniert es.
Demnach muss der Fehler irgendwo hier liegen:
"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"{my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;; return \"Temperatur im $room auf $message eingestellt.\";;;; }"
]
Okay. :)
Versuch mal bitte
"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"Temperatur im {(ReadingsVal('$SELF', '$recipient_Room', ''))} auf $message eingestellt."
]
ZitatVersuch mal bitte
Funktioniert leider auch nicht.
Hier das LOG (verbose 5)
2018.01.13 12:57:29 5: msgDialog (TelegramMsgDialog_RoomTemperatures) - entering msgDialog_Set
2018.01.13 12:57:29 5: msgDialog (TelegramMsgDialog_RoomTemperatures) - entering msgDialog_Set
2018.01.13 12:57:29 5: msgDialog (TelegramMsgDialog_RoomTemperatures) - entering msgDialog_Set
2018.01.13 12:57:29 5: msgDialog (TelegramMsgDialog_RoomTemperatures) - entering msgDialog_Get
2018.01.13 12:57:32 5: msgDialog (TelegramMsgDialog_RoomTemperatures) - entering msgDialog_Notify
2018.01.13 12:57:32 4: msgDialog (TelegramMsgDialog_RoomTemperatures) triggered by "Thomas fhemMsgRcvPush: Aktionen"
2018.01.13 12:57:32 5: msgDialog (TelegramMsgDialog_RoomTemperatures)
entering msgDialog_progress
recipients: Thomas
message: Aktionen
force: 0
2018.01.13 12:57:32 5: msgDialog (TelegramMsgDialog_RoomTemperatures) - entering msgDialog_evalSpecials
2018.01.13 12:57:32 5: msgDialog (TelegramMsgDialog_RoomTemperatures) - entering msgDialog_Get
2018.01.13 12:57:34 5: msgDialog (TelegramMsgDialog_RoomTemperatures) - entering msgDialog_Notify
2018.01.13 12:57:34 4: msgDialog (TelegramMsgDialog_RoomTemperatures) triggered by "Thomas fhemMsgRcvPush: Raumtemperaturen"
2018.01.13 12:57:34 5: msgDialog (TelegramMsgDialog_RoomTemperatures)
entering msgDialog_progress
recipients: Thomas
message: Raumtemperaturen
force: 0
2018.01.13 12:57:34 5: msgDialog (TelegramMsgDialog_RoomTemperatures) - entering msgDialog_evalSpecials
2018.01.13 12:57:34 5: msgDialog (TelegramMsgDialog_RoomTemperatures) - entering msgDialog_Set
2018.01.13 12:57:34 5: msgDialog (TelegramMsgDialog_RoomTemperatures) - entering msgDialog_Set
2018.01.13 12:57:36 5: msgDialog (TelegramMsgDialog_RoomTemperatures) - entering msgDialog_Notify
2018.01.13 12:57:36 4: msgDialog (TelegramMsgDialog_RoomTemperatures) triggered by "Thomas fhemMsgRcvPush: Badezimmer"
2018.01.13 12:57:36 5: msgDialog (TelegramMsgDialog_RoomTemperatures)
entering msgDialog_progress
recipients: Thomas
message: Badezimmer
force: 0
2018.01.13 12:57:36 5: msgDialog (TelegramMsgDialog_RoomTemperatures) - entering msgDialog_evalSpecials
2018.01.13 12:57:36 5: msgDialog (TelegramMsgDialog_RoomTemperatures) - entering msgDialog_Set
2018.01.13 12:57:36 5: msgDialog (TelegramMsgDialog_RoomTemperatures) - entering msgDialog_Set
2018.01.13 12:57:36 5: msgDialog (TelegramMsgDialog_RoomTemperatures) - entering msgDialog_Set
2018.01.13 12:57:36 5: msgDialog (TelegramMsgDialog_RoomTemperatures) - entering msgDialog_Set
2018.01.13 12:57:39 5: msgDialog (TelegramMsgDialog_RoomTemperatures) - entering msgDialog_Notify
2018.01.13 12:57:39 4: msgDialog (TelegramMsgDialog_RoomTemperatures) triggered by "Thomas fhemMsgRcvPush: 10.0°C"
2018.01.13 12:57:39 5: msgDialog (TelegramMsgDialog_RoomTemperatures)
entering msgDialog_progress
recipients: Thomas
message: 10.0°C
force: 0
2018.01.13 12:57:39 5: msgDialog (TelegramMsgDialog_RoomTemperatures) - entering msgDialog_evalSpecials
VG, Thomas
Soweit fällt mir auch nichts ein, ich muss mal schauen, ob ich mir ein gleiches Beispiel basteln kann.
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
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
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
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
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))}
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
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.
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"
]
},
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.
Ah super, so funktioniert es jetzt :)
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
Du musst auf TelegramBot_MTYPE auf sendImage stellen ;)
Danke, so funktioniert es nun. :)
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
Hey igami,
hast du schon eine Idee für mich zum Thema "Grad-Zeichen im Temperaturdialog"? :)
VG, Thomas
Zitat von: Keule_09 am 30 Januar 2018, 12:36:25
Muss für den zurück-Befehl noch was angegeben werden ?
Da lag wohl noch ein Fehler vor (die ; mussten verdoppelt werden). Hier der aktuelle meta Dialog (hat bei mir bis eben auch nicht funktioniert ::))
@binford6000: bitte ins Wiki übernehmen
defmod meta_Dialog msgDialog {\
"%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."\
]\
}\
}
attr meta_Dialog allowed everyone
Zitat von: ToM_ToM am 30 Januar 2018, 12:39:56
hast du schon eine Idee für mich zum Thema "Grad-Zeichen im Temperaturdialog"? :)
Ehrlich gesagt habe ich mich noch nicht damit beschäftigt :-[
Zitat von: ToM_ToM am 30 Januar 2018, 12:39:56
hast du schon eine Idee für mich zum Thema "Grad-Zeichen im Temperaturdialog"? :)
Habe es grad mit folgendem Dialog getestet und keine Probleme:
defmod test_Dialog msgDialog {\
"test": {\
"message": [\
"(15 °C|20 °C) ",\
"(abbrechen) ",\
"Welche Temperatur soll ich einstellen?"\
],\
"Temperatur": {\
"match": "\\d\\d( °C)?",\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"ich habe $message eingestellt."\
] \
}\
}\
}
An welcher Stelle tritt das Problem denn genau auf? Am besten mal die gesamte Fehlermeldung posten.
ZitatAn welcher Stelle tritt das Problem denn genau auf? Am besten mal die gesamte Fehlermeldung posten.
Hi igami, schau mal in diesem Thread auf Seite 24 ganz oben der erste Post. Dort habe ich alles schon beschrieben.
Die Rückmeldung bekomme ich in Telegram
Unrecognized character \x{b0}
VG, Thomas
Zitat@binford6000: bitte ins Wiki übernehmen
Ist geändert. VG Sebastian
Hallo,
Ich habe mal eine Frage: Ich würde gern alle Nachrichten, die der msgDialog nicht versteht an eine andere Auswertung weiterleiten, aber eben nur die. Wenn ich ein notify auf den TelegramBot definierte, werden ja auch die Nachrichten weitergeleitet, die der msgDialog dann behandelt. Gibt es eine Möglichkeit, nicht erkannte Nachrichten inklusive Absender irgendwie an ein anderes Gerät zu senden?
Vielen Dank
Ronny
Gesendet von meinem SM-G935F mit Tapatalk
Funktioniert denn der Test Dialog oder kommt da auch der Fehler?
Zitat von: RoBra81 am 31 Januar 2018, 11:08:24
Hallo,
Ich habe mal eine Frage: Ich würde gern alle Nachrichten, die der msgDialog nicht versteht an eine andere Auswertung weiterleiten, aber eben nur die. Wenn ich ein notify auf den TelegramBot definierte, werden ja auch die Nachrichten weitergeleitet, die der msgDialog dann behandelt. Gibt es eine Möglichkeit, nicht erkannte Nachrichten inklusive Absender irgendwie an ein anderes Gerät zu senden?
Vielen Dank
Ronny
Gesendet von meinem SM-G935F mit Tapatalk
So auf die Schnelle fällt mir da nichts ein.
ZitatFunktioniert denn der Test Dialog oder kommt da auch der Fehler?
Hm... mit dem Testdialog geht's. Da muss ich dann mal herausfinden an welcher Stelle er das Problem mit dem Grad-Zeichen hat.
EDIT: Habe jetzt zumindest endlich mal die Fehlerzeile ausfindig machen können.
"{my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;; my $temp = $message;;;; $temp =~ s/([\\d]{1,2}\\.[\\d{1}])(°C)?/$1/g;;;; return \"Temperatur im $room auf $temp eingestellt.\";;;; }"
Evtl. liegt das Problem im REGEX... :o
VG, Thomas
Hallo,
hab mal wieder eine Frage ;)
Ich hab mir einen Dialog für die Beschattung erstellt und würde gerne wenn ich im Dialog die Bedienebene von z.B. Fenster Wohnen geöffnet habe, nach den drücken von Ab gerne auch den Stop Befehl absetzen können.
Hier ein Auszug von meinem Dialog:
"Fenster Wohnen":{\
"message": [\
"(auf|ab) ",\
"(stop|Pos Nacht) ",\
"(20%:050|30%:075|40%:100|50%:127) ",\
"(60%:152|70%:177|80%:203|90%:228) ",\
"(abbrechen:%me%|zurück) ",\
"Hier kannst du den Rolladen Wohnbereich bedienen:"\
],\
"setfensterpos": {\
"match": "[0-2][0-9][0-9]",\
"commands": [\
"{my $wert = '$message';;;; fhem(\"set rolladen_wohnen_fenster value $wert\");;;;}",\
"set $SELF say @$recipient Fenster Wohnen"\
]\
},\
"auf":{\
"commands": [\
"set rolladen_wohnen_fenster Auf",\
"set $SELF say @$recipient Fenster Wohnen"\
]\
},\
"ab":{\
"commands": [\
"set rolladen_wohnen_fenster Ab",\
"set $SELF say @$recipient Fenster Wohnen"\
]\
},\
"stop":{\
"commands": [\
"set rolladen_wohnen_fenster Stop",\
"set $SELF say @$recipient Fenster Wohnen"\
]\
},\
"Pos Nacht":{\
"commands": [\
"set rolladen_wohnen_fenster Nacht",\
"set $SELF say @$recipient Fenster Wohnen"\
]\
}\
},\
wie muss ich den set Befehl set $SELF say @$recipient Fenster Wohnen
umbauen das es funktioniert ?
Vielen Dank im vorraus.
Zitat von: Keule_09 am 06 Februar 2018, 21:05:30
wie muss ich den set Befehl set $SELF say @$recipient Fenster Wohnen
umbauen das es funktioniert ?
Was kommt denn noch vor "Fenster Wohnen"? Du hast ja nicht den ganzen Dialog gepostet ;)
Zitat von: igami am 07 Februar 2018, 05:15:34
Was kommt denn noch vor "Fenster Wohnen"? Du hast ja nicht den ganzen Dialog gepostet ;)
Danke hab den Fehler gefunden.Dachte ich muss nur die aktuelle Ebene angeben und nicht die ganzen Ebenen darüber.
Jetzt funktioniert es:
"set $SELF say @$recipient 2.Beschattung|Wohnbereich|Fenster Wohnen"
Hi.
Gibt es schon ne Lösung für die Heizungssteuerung?
Habe versucht den Code von ToM_ToM zu verwenden aber der wirft mir Fehler aus.
Der Code von Igame funktioniert aber ich weiß nicht, wie ich da meine Device einfügen kann.
Ich habe keinen Dialog für eine Heizung und werde auch keinen bauen, da ich ihn nicht brauche ;)
Ich helfe aber gerne bei der Verbesserung wenn es irgendwo hakt.
Momentan bastel ich an einem Dialog für Beleuchtung, da bin ich aber noch lange nicht "Marktreif"
Du hattest hier für Tom_ToM einen Testdialog gepostet, mit zwei Temperaturen.
Der würde mir schon reichen, wenn ich wüsste, wo ich die Heizung hinzufügen muss, weil ich brauche im Endeffekt nur Heizung an oder aus und das kann man mit zwei Temperaturen machen.
So, mal ganz von vorne und in ruhe, dann kriege ich das mit Eurer Hilfe schon hin.
Ich habe mir jetzt einen Heizungs Dialog gebastelt auf der Basis von ToM_ToM seinem Dialog.
Klappt auch soweit, das ich ihn angezeigt bekomme und die Nutzung klappt teilweise.
{
"Raumtemperaturen": {
"match": "Raumtemperaturen",
"message": [
"(Arbeitszimmer|Küche) (Schlafzimmer|Wohnzimmer) ",
"TelegramBot_MTYPE=queryInline (%me%) ",
"{return telegramBotGetRoomTemperatureListMessage() }"
],
"Raum": {
"match": "(Arbeitszimmer|Küche|Schlafzimmer|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\"?\"HZ_BUERO\": ($room==\"Küche\"?\"HZ_KUECHE\":($room==\"Schlafzimmer\"?\"HZ_BED\":($room==\"Wohnzimmer\"?\"HZ_WOHNZ\":\"\"))));;;; fhem (\"set $clima desired-temp $temp\") }"
],
"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"{my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;; return \"Temperatur im $room auf $message eingestellt.\";;;; }"
]
}
}
}
}
Wähle ich einen Raum aus, wird der Raum gewählt und ich kann eine Temperatur wählen aber erhalte zeitgleich eine Fehlermeldung.
Undefined subroutine &main;;telegramBotGetRoomTemperateListMessage called at (eval 1532) line 1
Habe gestern ein Update in Fhem gemacht, sollte also alles auf dem neusten Stand sein.
ZitatUndefined subroutine &main;;telegramBotGetRoomTemperateListMessage called at (eval 1532) line 1
Das ist eine Funktion die bei mir in der Utils aufgerufen wird und einen Text zusammenbaut der mir die aktuellen Werte sowie die Sollwerte aller Räume wiedergibt.
Ersetz die Zeile einfach durch:
"Tempereaturen"
VG
Ahhh, das erklärt es. Wärst Du so freundlich und würdest den Code hier posten? Dann kann ich sie bei mir eintragen.
Ich habe gerade ein kleines Problem mit einem weiteren Dialog.
Er funktioniert nur bis zur Auswahl Gerät einschalten oder Gerät ausschalten, danach geht es nicht weiter.
Kriege aber keinen Fehler angezeigt, deswegen komme ich nicht weiter, ein Zeichenfehler ist es nicht, sieht genauso aus, wie ein funktionierender Dialog bei mir. Habe so einen Dialog noch für meine Terras gebastelt und der funktioniert, ergo schließe ich aus, das es an den Steckdosen liegt.
Schaut Ihr doch mal bitte drauf, vielleicht übersehe ich was.
defmod geraete_Dialog msgDialog {"Geräte":{\
"message": [\
"(Geräte einschalten) ",\
"(Geräte ausschalten) ",\
"(zurück) ",\
"(abbrechen) ",\
"Geräte schalten:"\
],\
"Gerät einschalten":{\
"message":[\
"{return('(Spüle einschalten) ') if(ReadingsVal('SPUELE', 'state', '') eq 'off')}",\
"{return('(Büroventilator einschalten) ') if(ReadingsVal('VENT_BUERO', 'state', '') eq 'off')}",\
"{return('(Wohnzimmer TV einschalten) ') if(ReadingsVal('TV_WOHN', 'state', '') eq 'off')}",\
"{return('(Wohnzimmerventilator einschalten) ') if(ReadingsVal('VENT_WOHN', 'state', '') eq 'off')}",\
"{return('(Ladegerät einschalten) ') if(ReadingsVal('PLUG_BED', 'state', '') eq 'off')}",\
"{return('(Schlafzimmer TV einschalten) ') if(ReadingsVal('TV_BED', 'state', '') eq 'off')}",\
"(zurück) ",\
"(abbrechen) ",\
"Welches Gerät soll eingeschaltet werden?"\
],\
"Spüle einschalten":{\
"commands": "set SPUELE on",\
"message":[\
"(%me%) ",\
"Spüle wurde eingeschaltet."\
]\
},\
"Büroventilator einschalten":{\
"commands": "set VENT_BUERO on",\
"message":[\
"(%me%) ",\
"Büroventilator wurde eingeschaltet."\
]\
},\
"Wohnzimmer TV einschalten":{\
"commands": "set TV_WOHN on",\
"message":[\
"(%me%) ",\
"Wohnzimmer TV wurde eingeschaltet."\
]\
},\
"Wohnzimmerventilator einschalten":{\
"commands": "set VENT_WOHN on",\
"message":[\
"(%me%) ",\
"Wohnzimmerventilator wurde eingeschaltet."\
]\
},\
"LAdegerät einschalten":{\
"commands": "set PLUG_BED on",\
"message":[\
"(%me%) ",\
"Ladegerät wurde eingeschaltet."\
]\
},\
"Schlafzimmer TV einschalten":{\
"commands": "set TV_BED on",\
"message":[\
"(%me%) ",\
"Schlafzimmer TV wurde eingeschaltet."\
]\
}\
},\
"Gerät ausschalten":{\
"message":[\
"{return('(Spüle ausschalten) ') if(ReadingsVal('SPUELE', 'state', '') ne 'off')}",\
"{return('(Büroventilator ausschalten) ') if(ReadingsVal('VENT_BUERO', 'state', '') ne 'off')}",\
"{return('(Wohnzimmer TV ausschalten) ') if(ReadingsVal('TV_WOHN', 'state', '') ne 'off')}",\
"{return('(Wohnzimmerventilator ausschalten) ') if(ReadingsVal('VENT_WOHN', 'state', '') ne 'off')}",\
"{return('(Ladegerät ausschalten) ') if(ReadingsVal('PLUG_BED', 'state', '') ne 'off')}",\
"{return('(Schlafzimmer TV ausschalten) ') if(ReadingsVal('TV_BED', 'state', '') ne 'off')}",\
"(zurück) ",\
"(abbrechen) ",\
"Welches Gerät soll ausgeschaltet werden?"\
],\
"Spüle ausschalten":{\
"commands": "set SPUELE off",\
"message":[\
"(%me%) ",\
"Spüle wurde ausgeschaltet."\
]\
},\
"Büroventilator ausschalten":{\
"commands": "set VENT_BUERO off",\
"message":[\
"(%me%) ",\
"Büroventilator wurde ausgeschaltet."\
]\
},\
"Wohnzimmer TV ausschalten":{\
"commands": "set TV_WOHN off",\
"message":[\
"(%me%) ",\
"Wohnzimmer TV wurde ausgeschaltet."\
]\
},\
"Wohnzimmerventilator ausschalten":{\
"commands": "set VENT_WOHN off",\
"message":[\
"(%me%) ",\
"Wohnzimmerventilator wurde ausgeschaltet."\
]\
},\
"Ladegerät ausschalten":{\
"commands": "set PLUG_BED off",\
"message":[\
"(%me%) ",\
"LAdegerät wurde ausgeschaltet."\
]\
},\
"Schlafzimmer TV ausschalten":{\
"commands": "set TV_BED off",\
"message":[\
"(%me%) ",\
"Schlafzimmer TV wurde ausgeschaltet."\
]\
}\
}\
}\
}
attr geraete_Dialog allowed rr_Marcus
attr geraete_Dialog room Telegram
ZitatAhhh, das erklärt es. Wärst Du so freundlich und würdest den Code hier posten? Dann kann ich sie bei mir eintragen.
######## Status der Raumtemperaturen abfragen ############
sub
telegramBotGetRoomTemperatureListMessage()
{
my $tempArbeitszimmer = ReadingsVal("HM_0815", "measured-temp", "0");
my $desiredTempArbeitszimmer = ReadingsVal("HM_0815", "desired-temp", "0");
my $tempBadezimmer = ReadingsVal("HM_0816", "measured-temp", "0");
my $desiredTempBadezimmer = ReadingsVal("HM_0816", "desired-temp", "0");
my $tempWohnzimmer = ReadingsVal("HM_0817", "measured-temp", "0");
my $desiredTempWohnzimmer = ReadingsVal("HM_0817", "desired-temp", "0");
my $returnMessage = "Arbeitszimmer: $tempArbeitszimmer °C (-> $desiredTempArbeitszimmer °C)\n";
$returnMessage .= "Badezimmer: $tempBadezimmer °C (-> $desiredTempBadezimmer °C)\n";
$returnMessage .= "Wohnzimmer: $tempWohnzimmer °C (-> $desiredTempWohnzimmer °C)\n";
return $returnMessage;
}
@ToM_ToM: Ich danke Dir.
Zitat von: ErzGabriel am 16 Februar 2018, 16:30:22
Ich habe gerade ein kleines Problem mit einem weiteren Dialog.
Er funktioniert nur bis zur Auswahl Gerät einschalten oder Gerät ausschalten, danach geht es nicht weiter.
Kriege aber keinen Fehler angezeigt, deswegen komme ich nicht weiter, ein Zeichenfehler ist es nicht, sieht genauso aus, wie ein funktionierender Dialog bei mir. Habe so einen Dialog noch für meine Terras gebastelt und der funktioniert, ergo schließe ich aus, das es an den Steckdosen liegt.
"Geräte" ne "Gerät"
Jo, da lag der Fehler. Wie peinlich, ein blödes e zu übersehen. Danke Dir.
Hallo,
vielen Dank für dieses tolle Modul! Ich versuche mich gerade an einem Menü für meine Beleuchtung, genauer an einer Funktion in 99_myUtils.pm die mir die Anzahl der eingeschalteten Lampen ermittelt. Die Gesamtzahl erhalte ich mit
sub telegramBotGetLightListMessage() {
my @a=devspec2array("NAME=...di.*|...sw.*:FILTER=TYPE=HUEDevice:FILTER=STATE!=off");; my $count=($defs{$a[0]} && $#a+1 || 0);
my $returnMessage = "Insgesamt $count Lampen eingeschaltet\n";
$returnMessage .= "Flur: \n";
$returnMessage .= "Küche: \n";
$returnMessage .= "Schlafzimmer: \n";
$returnMessage .= "Wohnzimmer:";
return $returnMessage;
}
Meine Lampen sind nach dem Muster <Raum>.<di oder sw>.<irgend ein Name> bezeichnet. Wie kann ich die Funktion oben umbauen, um wahlweise (über einen Parameter) die Gesamtzahl oder die Zahl für fl = Flur, ku = Küche, sz = Schlafzimmer, wz = Wohnzimmer zu erhalten?
Der Dialog dazu schaut - schamlos geklaut bei TomTom und ErzGabriel - bisher so aus:
{
"Beleuchtung": {
"match": "Beleuchtung",
"message": [
"(Flur|Küche) ", "(Schlafzimmer|Wohnzimmer) ", "(alle aus) ",
"TelegramBot_MTYPE=queryInline (%me%) ",
"{return telegramBotGetLightListMessage() }"
],
"Alle": {
"match":"(alle aus)",
"commands": ["set NAME=...di.*|...sw.*:FILTER=TYPE=HUEDevice:FILTER=STATE!=off off"],
"message": ["TelegramBot_MTYPE=queryInline (%me%) ",
"Alle Lampen ausgeschaltet"]
},
"Raum": {
"match": "(Flur|Küche|Schlafzimmer|Wohnzimmer)",
"commands": "setreading $SELF $recipient_Room $message",
"message": [ ",
"(abbrechen) ",
"Beleuchtung in $message einstellen"
],
"Temperatur": {
"match": "on|off|[0-2][0-9][:.]([0]|[5])",
"commands": [],
"message": []
}
}
}
}
Vielen Dank,
Robert
Hallo,
bin fleißig am mitlesen.
Ich hätte aktuell eine Frage, mit welchen ich nicht weiter komm:
1. Zum einen funktionieren die Ersetzung wenn ich von inline auf "normal" umschalte z.B. "23°C:23.0" oder "zurück: %me%", nicht als Button. also wird mir genau so angezeigt. Ist das normal?
Ja, das ist normal, nur inline Keyboards können anderen Text senden als darstellen.
ZitatJa, das ist normal, nur inline Keyboards können anderen Text senden als darstellen.
Das kann ich so nicht bestätigen. Bei mir wurde der Text auch so mit Inline-Keyboards angezeigt.
VG, Thomas
Ich vermute wir reden aneinander vorbei. Bitte eine Problembeschreibung mit Bild.
ZitatIch vermute wir reden aneinander vorbei. Bitte eine Problembeschreibung mit Bild.
Ich hatte doch mal meinen Temperaturdialog. Den hatte ich damals nach einem Beispiel von dir aufgebaut indem du die Temperaturen irgendwie in folgendem Format hattest:
25°C:25
Und genau dieses
25°C:25 wurde mir dann auch so als Button in Telegram angezeigt.
Leider finde ich das Beispiel von damals nicht mehr.
VG, Thomas
Als inline oder normales Keyboard?
ZitatAls inline oder normales Keyboard?
Ist es nicht INLINE sobald ich die Buttons habe?
Dann habe ich wohl doch etwas falsch verstanden.
Hallo,
also so sieht das ganze Inline aus: Screenshot_2018-03-05-09-07-42.png
und so "normal": Screenshot_2018-03-05-09-08-51.png
Normal lassen sich auch buttons erstellen, wie z.B. bestätigen oder abbrechen. Wobei Zurück (zurück:%me% ) aber nicht geht.
Aber wenn ich "normal" keine Buttons mit anderer Bezeichnung als Inhalt erstellen kann ist mir klar, warum dies so aussieht.
Hi Smarti,
danke für die Aufklärung. :)
@igami: Du weißt ja, dass ich schon ewig mit meinem Temperatur-Dialog rumkämpfe. Konnte jetzt den exakten Fehlerbereich ausfindig machen.
{
"Raumtemperaturen": {
"match": "Raumtemperaturen",
"message": [
"(Arbeitszimmer) (Badezimmer|Wohnzimmer) (zurück) ",
"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°:17.0) ",
"(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])(°C)?",
"commands": "{my $temp = $message;;;; $temp =~ s/([\\d]{1,2}\\.[\\d{1}])(°C)?/$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}])(°C)?/$1/g;;;; return \"Temperatur im $room auf $temp eingestellt.\";;;; }"
]
}
}
}
}
Sobald ich die $message Variable in die $temp Variable kopieren möchte
my $temp = $message;;;;
bekomme ich in Telegram die Rückmeldung: Unrecognized character \x{b0}
Kannst du dir das erklären woran das liegen könnte?
VG, Thomas
inline ist es im Chatverlauf, normal ist es anstelle der Tastatur
Hi igami,
ich habe mal wieder einen speziellen Fall. Wie kann ich eine Variable direkt hinter ein @ setzen ohne dass es als Array erkannt wird?
Ich möchte folgende URL per Messenger zurückgeben, jedoch den Längen- und Breitengrad durch eine Variable ersetzen.
https://www.google.de/maps/@50.0937185,8.7160645,11z?hl=de
Dein Modul erkennt durch das @ in der URL ein Array.
{
"Notfall": {
"message": [
"(Standort) ",
"TelegramBot_MTYPE=queryInline (%me%) ",
"Letzen Standort abfragen"
],
"Standort": {
"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"{my $locLat = ReadingsVal(\"Thomas\", \"locationLat\", \"0\");; my $locLong = ReadingsVal(\"Thomas\", \"locationLong\", \"0\");; my $locLatTimestamp = ReadingsTimestamp(\"Thomas\", \"locationLat\", \"0\"); my $locAddress = ReadingsVal(\"Thomas\", \"locationAddr\", \"0\"); return \"Letzte Position war $locLatTimestamp: $locLat x $locLong \n $locAddress \n https://www.google.de/maps/@\".@$locLat.\",$locLong,15z?hl=de\"}"
]
}
}
}
VG, Thomas
Das @ mit \ maskieren.
Okay, das hatte ich auch erst gedacht. Aber dann bekomme ich die Rückmeldung:
illegal backslash escape sequence in string, at character offset 603 (before "\\@50.4505417,8.7452...") at /opt/fhem/FHEM/76_msgDialog.pm line 93.
Habe es nun mit der Codierung des @ Zeichens versucht. Aber dann wird einfach gar keine URL per Telegram übertragen. Der erste Text schon, aber die komplette URL fehlt.
{
"Notfall": {
"message": [
"(Standort) ",
"TelegramBot_MTYPE=queryInline (%me%) ",
"Letzen Standort abfragen"
],
"Standort": {
"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"{my $locLat = ReadingsVal(\"Thomas\", \"locationLat\", \"0\");; my $locLong = ReadingsVal(\"Thomas\", \"locationLong\", \"0\");; my $locLatTimestamp = ReadingsTimestamp(\"Thomas\", \"locationLat\", \"0\"); my $locAddress = ReadingsVal(\"Thomas\", \"locationAddr\", \"0\"); return \"Letzte Position war $locLatTimestamp: $locLat x $locLong \n $locAddress \n https:\/\/www.google.de\/maps\/%40\".$locLat.\",$locLong,15z?hl=de\"}"
]
}
}
}
Dann noch das \ mit einem \ maskieren :P
Funktionierte leider auch nicht. Aber habe den Fehler jetzt gefunden. :)
Das Komma und das Gleichheitszeichen in der URL mussten auch encodiert werden damit die URL im Telegram-Messenger angezeigt wird.
{
"Notfall": {
"message": [
"(Standort) ",
"TelegramBot_MTYPE=queryInline (%me%) ",
"Letzen Standort abfragen"
],
"Standort": {
"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"{my $locLat = ReadingsVal(\"Thomas\", \"locationLat\", \"0\");; my $locLong = ReadingsVal(\"Thomas\", \"locationLong\", \"0\");; my $locLatTimestamp = ReadingsTimestamp(\"Thomas\", \"locationLat\", \"0\"); my $locAddress = ReadingsVal(\"Thomas\", \"locationAddr\", \"0\"); return \"Letzte Position war $locLatTimestamp: $locLat x $locLong $locAddress https:\/\/www.google.de\/maps\/%40\".$locLat.\",$locLong%2C15z?hl%3Dde\"}"
]
}
}
}
VG, Thomas
Auf Wunsch hier noch der Einkaufslisten Dialog:
defmod Einkaufsliste_Dialog msgDialog { \
"Einkaufsliste": {\
"message": [\
"(Waren hinzufügen) ", \
"(Waren entfernen) ", \
"(einkaufen) ", \
"(abbrechen) ",\
"{my $content = (split(': ', fhem('get %PostMe% list %list%')))[1];;;; return('Keine Einträge vorhanden') unless($content);;;; return(join('\n', split(',', $content)));;;;}"\
],\
"Waren hinzufügen": {\
"message": [\
"Bitte jede Ware als neue Nachricht hinzufügen.",\
"Das hinzufügen von Waren durch \"/beenden\" beenden."\
],\
"Ware hinzufügen": {\
"match": "[^/]+",\
"commands": [\
"set %PostMe% add %list% $message",\
"setreading $SELF $recipient_history Einkaufsliste|Waren hinzufügen"\
]\
}\
},\
"Waren entfernen": {\
"message": [\
"{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1]), 'beenden'). ') ')}",\
"Welche Ware möchtest du entfernen?"\
],\
"Ware entfernen": {\
"match": "^(?!beenden).+",\
"commands": [\
"set %PostMe% remove %list% $message",\
"set $SELF say @$recipient Einkaufsliste|Waren entfernen"\
]\
}\
},\
"einkaufen": {\
"commands": [\
"setreading $SELF $recipient_history Einkaufsliste|noch einzukaufen"\
],\
"message": [\
"{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1])) . ') ')}",\
"(beenden) ",\
"Bitte die Waren der Reihenfolge nach auswählen in der sie eingekauft werden."\
]\
},\
"noch einzukaufen": {\
"message": [\
"{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1])) . ') ')}",\
"(beenden) ",\
"Noch einzukaufen:"\
],\
"Ware eingekauft": {\
"match": "^(?!beenden).+",\
"commands": [\
"set %PostMe% remove %list% $message",\
"set $SELF say @$recipient Einkaufsliste|noch einzukaufen"\
]\
}\
} \
}\
}
attr Einkaufsliste_Dialog evalSpecials PostMe=PostMe\
list=Einkaufsliste
Sehr cool die Einkaufsliste!!!!
Hab das ganze gerade noch mit "Standard-Waren" ergänzt, so kann man schnell "Standard-Waren" per click hinzufügen!
defmod Einkaufsliste_Dialog msgDialog { \
"6. Einkaufsliste": {\
"match": "Einkaufsliste",\
"message": [\
"(Waren hinzufügen) ", \
"(Waren entfernen|einkaufen) ",\
"(Standard-Waren) ",\
"(Menü) ",\
"{my $content = (split(': ', fhem('get %PostMe% list %list%')))[1];;;; return('Keine Einträge vorhanden') unless($content);;;; return(join('\n', split(',', $content)));;;;}"\
],\
"Waren hinzufügen": {\
"message": [\
"{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %standard%')))[1]), 'fertig'). ') ')}",\
"Bitte jede Ware als neue Nachricht oder per Tastatur hinzufügen."\
],\
"Ware hinzufügen": {\
"match": "[^/]+",\
"commands": [\
"set %PostMe% add %list% $message",\
"setreading $SELF $recipient_history Einkaufsliste|Waren hinzufügen",\
"set $SELF say @$recipient Einkaufsliste|Waren hinzufügen"\
]\
},\
"fertig": {\
"commands": [\
"set $SELF say @$recipient Einkaufsliste"\
]\
} \
},\
"Waren entfernen": {\
"message": [\
"{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1]), 'fertig'). ') ')}",\
"Welche Ware möchtest du entfernen?"\
],\
"Ware entfernen": {\
"match": "^(?!beenden).+",\
"commands": [\
"set %PostMe% remove %list% $message",\
"set $SELF say @$recipient Einkaufsliste|Waren entfernen"\
]\
},\
"fertig": {\
"commands": [\
"set $SELF say @$recipient Einkaufsliste"\
]\
} \
},\
"einkaufen": {\
"commands": [\
"setreading $SELF $recipient_history Einkaufsliste|noch einzukaufen"\
],\
"message": [\
"{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1])) . ') ')}",\
"(fertig) ",\
"Bitte die Waren der Reihenfolge nach auswählen in der sie eingekauft werden."\
]\
},\
"noch einzukaufen": {\
"message": [\
"{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1])) . ') ')}",\
"(fertig) ",\
"Noch einzukaufen:"\
],\
"Ware eingekauft": {\
"match": "^(?!beenden).+",\
"commands": [\
"set %PostMe% remove %list% $message",\
"set $SELF say @$recipient Einkaufsliste|noch einzukaufen"\
]\
},\
"fertig": {\
"commands": [\
"set %PostMe% remove %list% $message",\
"set $SELF say @$recipient Einkaufsliste|noch einzukaufen",\
"set $SELF say @$recipient Einkaufsliste"\
]\
} \
\
},\
"Standard-Waren": {\
"match": "Standard",\
"message": [\
"(Standard-Waren hinzufügen) ", \
"(Standard-Waren entfernen) ",\
"(Menü) ",\
"{my $content = (split(': ', fhem('get %PostMe% list %standard%')))[1];;;; return('Keine Einträge vorhanden') unless($content);;;; return(join('\n', split(',', $content)));;;;}"\
],\
"Standard-Waren hinzufügen": {\
"message": [\
"(fertig) ",\
"Bitte jede Ware als neue Nachricht hinzufügen.",\
"Das hinzufügen von Waren durch \"/beenden\" beenden."\
],\
"Ware hinzufügen": {\
"match": "[^/]+",\
"commands": [\
"set %PostMe% add %standard% $message",\
"setreading $SELF $recipient_history Einkaufsliste|Standard|Standard-Waren hinzufügen",\
"set $SELF say @$recipient Einkaufsliste|Standard|Standard-Waren hinzufügen"\
]\
},\
"fertig": {\
"commands": [\
"set $SELF say @$recipient Einkaufsliste"\
]\
} \
},\
"Standard-Waren entfernen": {\
"message": [\
"{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %standard%')))[1]), 'fertig'). ') ')}",\
"Welche Standard-Ware möchtest du entfernen?"\
],\
"Ware entfernen": {\
"match": "^(?!beenden).+",\
"commands": [\
"set %PostMe% remove %standard% $message",\
"set $SELF say @$recipient Einkaufsliste|Standard|Standard-Waren entfernen"\
]\
},\
"fertig": {\
"commands": [\
"set $SELF say @$recipient Einkaufsliste"\
]\
} \
}\
}\
}\
}
attr Einkaufsliste_Dialog allowed everyone
attr Einkaufsliste_Dialog evalSpecials PostMe=PostMe\
list=Einkaufsliste\
standard=Standardartikel
setstate Einkaufsliste_Dialog 2018-03-13 22:21:14 state Initialized
LG
Marlen
Hmmm..... cool wäre noch wenn beim Ware hinzufügen die Frage kommen würde in welchen Geschäft und wenn mann dann Edeka auswählt,
in der Einkaufsliste z.B.
ZitatEdeka - Toast
eingetragen würde.
Da die Liste alphabetisch sortiert ausgegeben wird, ist die Liste dann nach Geschäften sortiert.
LG
Marlen
Hallo,
gibt es dazu eine Lösung? Wie kann ich die $message in einer Variable schreiben, damit ich im weiterführenden Dialog damit arbeiten kann?
ZitatSobald ich die $message Variable in die $temp Variable kopieren möchte
Code: [Auswählen]
my $temp = $message;;;;
bekomme ich in Telegram die Rückmeldung: Unrecognized character \x{b0}
LG
Marlen
Poste mal bitte die komplette DEF mit der es nicht funktioniert, dann schaue ich es mir an.
Hab es jetzt über ein reading gelöst.
{
"5. Einkaufsliste": {
"match": "Einkaufsliste",
"message": [
"(Waren hinzufügen) ",
"(Waren entfernen|einkaufen) ",
"(Standard-Waren|Menü) ",
"{my $content = (split(': ', fhem('get %PostMe% list %list%')))[1];; return('Keine Einträge vorhanden') unless($content);; return(join('\n', split(',', $content)));;}"
],
"Waren hinzufügen": {
"message": [
"{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %standard%')))[1]), 'fertig'). ') ')}",
"Bitte jede Ware als neue Nachricht oder per Tastatur hinzufügen."
],
"Ware hinzufügen": {
"match": "[^/]+",
"commands": [
"setreading $SELF $recipient_artikel $message"
],
"message": [
"(ALDI|LIDL) ",
"(EDEKA|REWE) ",
"In welchem Geschäft soll [$SELF:$recipient_artikel] gekauft werden?"
],
"Geschäft wählen": {
"match": "[^/]+",
"commands": [
"my $temp = $message",
"set %PostMe% add %list% $message --> [$SELF:$recipient_artikel]",
"setreading $SELF $recipient_history Einkaufsliste|Waren hinzufügen",
"set $SELF say @$recipient Einkaufsliste|Waren hinzufügen"
]
}
},
"fertig": {
"commands": [
"set $SELF say @$recipient Einkaufsliste"
]
}
},
"Waren entfernen": {
"message": [
"{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1]), 'fertig'). ') ')}",
"Welche Ware möchtest du entfernen?"
],
"Ware entfernen": {
"match": "^(?!beenden).+",
"commands": [
"set %PostMe% remove %list% $message",
"set $SELF say @$recipient Einkaufsliste|Waren entfernen"
]
},
"fertig": {
"commands": [
"set $SELF say @$recipient Einkaufsliste"
]
}
},
"einkaufen": {
"commands": [
"setreading $SELF $recipient_history Einkaufsliste|noch einzukaufen"
],
"message": [
"{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1])) . ') ')}",
"(fertig) ",
"Bitte die Waren der Reihenfolge nach auswählen in der sie eingekauft werden."
]
},
"noch einzukaufen": {
"message": [
"{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1])) . ') ')}",
"(fertig) ",
"Noch einzukaufen:"
],
"Ware eingekauft": {
"match": "^(?!beenden).+",
"commands": [
"set %PostMe% remove %list% $message",
"set $SELF say @$recipient Einkaufsliste|noch einzukaufen"
]
},
"fertig": {
"commands": [
"set %PostMe% remove %list% $message",
"set $SELF say @$recipient Einkaufsliste|noch einzukaufen",
"set $SELF say @$recipient Einkaufsliste"
]
}
},
"Standard-Waren": {
"match": "Standard",
"message": [
"(Standard-Waren hinzufügen) ",
"(Standard-Waren entfernen) ",
"(Menü) ",
"{my $content = (split(': ', fhem('get %PostMe% list %standard%')))[1];; return('Keine Einträge vorhanden') unless($content);; return(join('\n', split(',', $content)));;}"
],
"Standard-Waren hinzufügen": {
"message": [
"(fertig) ",
"Bitte jede Standard-Ware als neue Nachricht hinzufügen."
],
"Ware hinzufügen": {
"match": "[^/]+",
"commands": [
"set %PostMe% add %standard% $message",
"setreading $SELF $recipient_history Einkaufsliste|Standard|Standard-Waren hinzufügen",
"set $SELF say @$recipient Einkaufsliste|Standard|Standard-Waren hinzufügen"
]
},
"fertig": {
"commands": [
"set $SELF say @$recipient Einkaufsliste"
]
}
},
"Standard-Waren entfernen": {
"message": [
"{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %standard%')))[1]), 'fertig'). ') ')}",
"Welche Standard-Ware möchtest du entfernen?"
],
"Ware entfernen": {
"match": "^(?!beenden).+",
"commands": [
"set %PostMe% remove %standard% $message",
"set $SELF say @$recipient Einkaufsliste|Standard|Standard-Waren entfernen"
]
},
"fertig": {
"commands": [
"set $SELF say @$recipient Einkaufsliste"
]
}
}
}
}
}
Bin gerade dabei mir das ganze noch für meinen Gefrierschrank zu bauen, dazu möchte ich beim hinzufügen (einfrieren) das Datum mit anhängen!
Steh irgendwie auf den Schlauch, sollte doch einfach mit $today funktionieren!
"commands": [
"set %PostMe% add %list% $message --> $today",
LG
Marlen
Zitat von: Marlen am 14 März 2018, 20:30:46
Hab es jetzt über ein reading gelöst.
teste doch mal bitte ob es mit einem '$message' als Zuweisung funktioniert (mit den Anführungszeichen).
Steh irgendwie auf den Schlauch, sollte doch einfach mit $today funktionieren!
"commands": [
"set %PostMe% add %list% $message --> $today",
[/quote]
Wird $today in einem normalen FHEM Befehl ausgewertet oder nur als Perl?
Hallo,
"commands": [
"set %PostMe% add %list% $message --> $today",
Das hab ich schon funktioniert, geht wohl nicht da $today in Perl ausgewertet wird.
LG
Marlen
also ein {fhem("...")} drumrum bauen
Ich versuche mich auch gerade an den Dialogen ... stehe aber irgendwie auf dem Schlauch. Vielleicht kann mich jemand erleuchten:
Ich habe drei Dialoge definiert: Eingang, Drucker, Verkehr.
Melde ich mich über Telegram mit meinem Keyword sehe ich einen Dialog, bei dem ich Eingang, Drucker, Verkehr auswählen kann.
Gehe ich dann zum Beispiel auf Eingang, wird mir der passende Dialog angezeigt und nach der Auswahl auch die enstprechende Aktion auch ausgeführt. Will ich aber die gleiche Aktion nochmal durchführen, dann funktioniert das nicht. Ich muss zunächst wieder per Keyword in den "Übersichtsdialog": Eingang, Drucker, Verkehr und kann dann eine weitere Aktion ausführen.
Ich vermute mal, dass das so eigentlich nicht Sinn der Sache ist, oder? Kann ich das Verhalten ändern bzw. woran liegt das?
Vielen Dank!
Bin jetzt noch kein msgDialog-Experte, vermute aber (ohne List des Dialogs kann man nur raten), dass du in einer tiefern Dialogebene bist und dort nicht anbietest, denselben Befehl nochmal zu senden. Du kommst also runter in den Ebenen, aber nicht wieder hoch.
Zitat von: Wuehler am 21 März 2018, 10:56:17
Bin jetzt noch kein msgDialog-Experte, vermute aber (ohne List des Dialogs kann man nur raten), dass du in einer tiefern Dialogebene bist und dort nicht anbietest, denselben Befehl nochmal zu senden. Du kommst also runter in den Ebenen, aber nicht wieder hoch.
Jein. Im Dialog wird der Befehl noch angeboten und ich kann ich auch auslösen, er wird auch an FHEM übermittelt, aber die Aktion wird nicht mehr ausgelöst.
Beispiel:
Mein Keyword startet den Startdialog, ich wähle Drucker und im Druckerdialog dann Anschalten. Funktioniert. Wenn ich dann aber im noch offenen Druckerdialog Ausschalten wähle, wird der Befehl zwar an FHEM geschickt aber nicht ausgeführt. Wenn ich wieder über das Keyword im Startdialog starte, dann Drucker wähle und dann Ausschalten, dann klappt es.
Zitat von: Wuehler am 21 März 2018, 10:56:17
(ohne List des Dialogs kann man nur raten)
Oder Raw Definition
Damit kann ich dienen:
Der Metadialog:
{ "%me%":
{
"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."]
}
}
Und hier beispielhaft einer der Dialoge:
{
"Drucker":{
"message": [ "(Bild) ", "(Anschalten) ", "(Ausschalten) ", "(%me%) ", "{'Aktueller Status: '.ReadingsVal('Drucker','progress','').' %'}", "Was kann ich für dich tun? ],
"Bild":{
"commands":[ "{get_octoprint_image();}", "set WeidenstationBot sendImage /public/temp/drucker.jpg" ]
},
"Anschalten":{
"commands":["set PowerDrucker on"]
},
"Ausschalten":{
"commands":["set PowerDrucker off"]
}
}
}
Ich vermute, da fehlt dann sowas wie bei Marlen eine Seite vorher in diesem Thread. Du kommst zwar tiefer im Dialog, der Dialog kommt von alleine aber nicht wieder hoch.
Im letzten command noch sowas wie
set $SELF say $recipient Drucker
Im Drucker Dialog fehlt auch noch ein abbrechen oder du nimmst in meinem code nicht Drucker sondern dein codewot für den Metadialog. Dann muss du aber immer wenn du auf Drucker klickst entweder an oder ausschalten.
Meiner Meinung nach wurde das Problem erkannt und beschrieben.
Ich finde es sehr schön zu sehen, dass hier so viel Hilfe aus der Community kommt :)
Danke :) und dir auch für das Modul. Der Grillthermometerdialog funktioniert übrigens Klasse.
Vielen Dank für die Hilfestellung.
Zitat von: Wuehler am 21 März 2018, 20:28:55
Ich vermute, da fehlt dann sowas wie bei Marlen eine Seite vorher in diesem Thread. Du kommst zwar tiefer im Dialog, der Dialog kommt von alleine aber nicht wieder hoch.
Im letzten command noch sowas wie
set $SELF say $recipient Drucker
Leider verstehe ich das nicht. In welchem letzten Command? Nach jedem Kommando, dass ich schicken möchte?
Zitat von: Wuehler am 21 März 2018, 20:28:55
Im Drucker Dialog fehlt auch noch ein abbrechen oder du nimmst in meinem code nicht Drucker sondern dein codewot für den Metadialog. Dann muss du aber immer wenn du auf Drucker klickst entweder an oder ausschalten.
Die Funktion hat doch "(%me%) ". Damit komm ich wieder in den Startdialog.
Stimmt. Das me wirkt wie abbrechen. Dann musst du nur bei den unterdialogen Bild, anschalten und ausschalten ein zusätzliches Kommando einfügen. Siehe im Dialog von Marlen. Wenn du in der tiefsten Dialogebene bist bringst du deen Dialog damit automatisch wieder in eine höhere Ebene. Ansonsten bleibt er dort stehen und du bekommst weder ein neues Menü noch reagiert er auf eine Eingabe, da ja keine tiefere Ebene zur Verfügung steht.
Vielen Dank!
So klappt es, allerdings kommt dann natürlich wieder der Dialogtext ... je nach Kommando sogar vor der eigentlichen Antwort des Befehls, was ein wenig doof aussieht. Ich fürchte das kann man nicht unterdrücken? Wäre nett, aber damit kann ich leben :-)
Eine Alternative wäre, dass du jedesmal auf unterer Ebene folgendes mitsendest (kopiert aus dem Notfalldialog von Seite 27):
"message": [
"TelegramBot_MTYPE=queryInline (%me%) "
Hallo zusammen.
Ich habe heute meinen Dialog für Geräte um ein Gerät erweitert aber es wird mir nicht angezeigt und somit kann ich es nicht schalten.
Der Dialog ansonsten funktioniert ohne Probleme, nur das neue Gerät wird nicht angezeigt. Habe Fhem aber auch neu gestartet, das alles neu eingelesen wird.
es handelt sich um das Büroladegerät
defmod geraete_Dialog msgDialog {"Geräte":{\
"message": [\
"(Geräte einschalten) ",\
"(Geräte ausschalten) ",\
"(zurück) ",\
"(abbrechen) ",\
"Geräte schalten:"\
],\
"Geräte einschalten":{\
"message":[\
"{return('(Spüle einschalten) ') if(ReadingsVal('SPUELE', 'state', '') eq 'off')}",\
"{return('(Büroventilator einschalten) ') if(ReadingsVal('VENT_BUERO', 'state', '') eq 'off')}",\
"{return('(Büroladegerät einschalten) ') if(ReadingsVal('LADEGERAET', 'state', '') eq 'off')}",\
"{return('(Wohnzimmer TV einschalten) ') if(ReadingsVal('TV_WOHN', 'state', '') eq 'off')}",\
"{return('(Wohnzimmerventilator einschalten) ') if(ReadingsVal('VENT_WOHN', 'state', '') eq 'off')}",\
"{return('(Ladegerät einschalten) ') if(ReadingsVal('PLUG_BED', 'state', '') eq 'off')}",\
"{return('(Schlafzimmer TV einschalten) ') if(ReadingsVal('TV_BED', 'state', '') eq 'off')}",\
"(zurück) ",\
"(abbrechen) ",\
"Welches Gerät soll eingeschaltet werden?"\
],\
"Spüle einschalten":{\
"commands": "set SPUELE on",\
"message":[\
"(%me%) ",\
"Spüle wurde eingeschaltet."\
]\
},\
"Büroventilator einschalten":{\
"commands": "set VENT_BUERO on",\
"message":[\
"(%me%) ",\
"Büroventilator wurde eingeschaltet."\
]\
},\
"Büroladegerät einschalten":{\
"commands": "set LADEGERAET on",\
"message":[\
"(%me%) ",\
"Büroladegerät wurde eingeschaltet."\
]\
},\
"Wohnzimmer TV einschalten":{\
"commands": "set TV_WOHN on",\
"message":[\
"(%me%) ",\
"Wohnzimmer TV wurde eingeschaltet."\
]\
},\
"Wohnzimmerventilator einschalten":{\
"commands": "set VENT_WOHN on",\
"message":[\
"(%me%) ",\
"Wohnzimmerventilator wurde eingeschaltet."\
]\
},\
"Ladegerät einschalten":{\
"commands": "set PLUG_BED on",\
"message":[\
"(%me%) ",\
"Ladegerät wurde eingeschaltet."\
]\
},\
"Schlafzimmer TV einschalten":{\
"commands": "set TV_BED on",\
"message":[\
"(%me%) ",\
"Schlafzimmer TV wurde eingeschaltet."\
]\
}\
},\
"Geräte ausschalten":{\
"message":[\
"{return('(Spüle ausschalten) ') if(ReadingsVal('SPUELE', 'state', '') ne 'off')}",\
"{return('(Büroventilator ausschalten) ') if(ReadingsVal('VENT_BUERO', 'state', '') ne 'off')}",\
"{return('(Büroladegerät ausschalten) ') if(ReadingsVal('LADEGERAET', 'state', '') eq 'off')}",\
"{return('(Wohnzimmer TV ausschalten) ') if(ReadingsVal('TV_WOHN', 'state', '') ne 'off')}",\
"{return('(Wohnzimmerventilator ausschalten) ') if(ReadingsVal('VENT_WOHN', 'state', '') ne 'off')}",\
"{return('(Ladegerät ausschalten) ') if(ReadingsVal('PLUG_BED', 'state', '') ne 'off')}",\
"{return('(Schlafzimmer TV ausschalten) ') if(ReadingsVal('TV_BED', 'state', '') ne 'off')}",\
"(zurück) ",\
"(abbrechen) ",\
"Welches Gerät soll ausgeschaltet werden?"\
],\
"Spüle ausschalten":{\
"commands": "set SPUELE off",\
"message":[\
"(%me%) ",\
"Spüle wurde ausgeschaltet."\
]\
},\
"Büroventilator ausschalten":{\
"commands": "set VENT_BUERO off",\
"message":[\
"(%me%) ",\
"Büroventilator wurde ausgeschaltet."\
]\
},\
"Büroladegerät ausschalten":{\
"commands": "set LADEGERAET off",\
"message":[\
"(%me%) ",\
"Büroladegerät wurde ausgeschaltet."\
]\
},\
"Wohnzimmer TV ausschalten":{\
"commands": "set TV_WOHN off",\
"message":[\
"(%me%) ",\
"Wohnzimmer TV wurde ausgeschaltet."\
]\
},\
"Wohnzimmerventilator ausschalten":{\
"commands": "set VENT_WOHN off",\
"message":[\
"(%me%) ",\
"Wohnzimmerventilator wurde ausgeschaltet."\
]\
},\
"Ladegerät ausschalten":{\
"commands": "set PLUG_BED off",\
"message":[\
"(%me%) ",\
"Ladegerät wurde ausgeschaltet."\
]\
},\
"Schlafzimmer TV ausschalten":{\
"commands": "set TV_BED off",\
"message":[\
"(%me%) ",\
"Schlafzimmer TV wurde ausgeschaltet."\
]\
}\
}\
}\
}
attr geraete_Dialog allowed rr_Marcus
attr geraete_Dialog room Telegram
setstate geraete_Dialog 2018-03-27 18:33:44 state Initialized
Könnte mal bitte jemand drüber schauen, ob ich da ein Fehler drin habe, den ich selbst nicht sehe. Danke.
Hi,
Ein list von LADEGERAET wäre hilfreich. Welchen state hat denn LADEGERAET?
Zitat
"Geräte ausschalten":{\
...
"{return('(Büroladegerät ausschalten) ') if(ReadingsVal('LADEGERAET', 'state', '') eq 'off')}",\
Du musst dort 'ne' statt 'eq' verwenden.
Das war es, danke Tom_Tom. Copy & Paste Fehler.
Ich stehe gerade auf dem Schlauch, in meinem MetaDialog ist folgendes definiert:
"zurück": {
"commands": "set $recipient_history=.+ say @$recipient {(ReadingsVal($DEV, '$recipient_history', '') =~ m/(.+)\\|.+$/;; return($2 ? $2 : $1;;)}"
},
In meinen Dialogen sieht das dann z.B. so aus
defmod Lichtsteuerung_Dialog msgDialog {\
"Lichtsteuerung": {\
"message": [\
"(Weihnachtsbaum einschalten) ",\
"(Weihnachtsbaum ausschalten) ",\
"(Arbeitsplatzlichter einschalten) ",\
"(Arbeitsplatzlichter ausschalten) ",\
"(Zurück:%me%) ",\
"Bitte gewünschtes Licht auswählen"\
],\
"Arbeitsplatzlichter einschalten": {\
"commands": ["set HUEDevice7 on", "set az.verteilerdose_Out2 on"],\
"message":[\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"Arbeitsleuchte eingeschaltet"\
]\
}, \
"Arbeitsplatzlichter ausschalten": {\
"commands": ["set HUEDevice7 off", "set az.verteilerdose_Out2 off force"],\
"message":[\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"Arbeitsleuchte ausgeschaltet"\
]\
}, \
"Weihnachtsbaum einschalten": {\
"commands": ["set HUEDevice8 on"],\
"message":[\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"Weihnachtsbaum eingeschaltet"\
]\
}, \
"Weihnachtsbaum ausschalten": {\
"commands": ["set HUEDevice8 off"],\
"message":[\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"Weihnachtsbaum ausgeschaltet"\
]\
}\
}\
}
Ich habe schon (zurück) als auch (zurück:%me%) versucht aber er beendet dann einfach, auch mit Groß/Kleinschreibung habe ich es schon versucht, könnt ihr mir einen Tipp geben ?
Du bist auf der Einstiegsebene, wohin soll er denn zurück Springen?
Hallo.
Ich habe den Temperatur Dialog von Tom versucht an meine Bedürfnisse anzupassen aber es klappt nicht komplett.
Ich kann alle Heizkörper schalten und das wird auch ausgeführt aber bei der Temperaturauflistung, wird mir nie das Büro angezeigt. Ich verstehe aber nicht warum und deswegen bitte ich Euch um Hilfe.
Der Dialog:
defmod heizungs_Dialog msgDialog {\
"Raumtemperaturen": {\
"match": "Raumtemperaturen",\
"message": [\
"(Büro|Küche) (Schlafzimmer|Wohnzimmer) ",\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"{return telegramBotGetRoomTemperatureListMessage() }"\
],\
"Raum": {\
"match": "(Büro|Küche|Schlafzimmer|Wohnzimmer)",\
"commands": "setreading $SELF $recipient_Room $message",\
"message": [\
"(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 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==\"Büro\"?\"HZ_BUERO\": ($room==\"Küche\"?\"HZ_KUECHE\":($room==\"Schlafzimmer\"?\"HZ_BED\":($room==\"Wohnzimmer\"?\"HZ_WOHNZ\":\"\"))));;;;;;;; fhem (\"set $clima desired-temp $temp\") }"\
],\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"{my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; return \"Temperatur im $room auf $message eingestellt.\";;;;;;;; }"\
]\
}\
}\
}\
}
attr heizungs_Dialog allowed rr_Marcus
attr heizungs_Dialog room Telegram
setstate heizungs_Dialog rr_Marcus: Raumtemperaturen
setstate heizungs_Dialog 2018-03-30 19:07:09 state rr_Marcus: Raumtemperaturen
Die angepasste Subroutine:
######## Status der Raumtemperaturen abfragen ############
sub
telegramBotGetRoomTemperatureListMessage()
{
my $tempBuero = ReadingsVal("HZ_BUERO", "measured-temp", "0");
my $desiredTempBuero = ReadingsVal("HZ_BUERO", "desired-temp", "0");
my $tempKueche = ReadingsVal("HZ_KUECHE", "measured-temp", "0");
my $desiredTempKueche = ReadingsVal("HZ_KUECHE", "desired-temp", "0");
my $tempSchlafzimmer = ReadingsVal("HZ_BED", "measured-temp", "0");
my $desiredTempSchlafzimmer = ReadingsVal("HZ_BED", "desired-temp", "0");
my $tempWohnzimmer = ReadingsVal("HZ_WOHNZ", "measured-temp", "0");
my $desiredTempWohnzimmer = ReadingsVal("HZ_WOHNZ", "desired-temp", "0");
my $returnMessage = "Büro: $tempBuero °C (-> $desiredTempBuero °C)\n";
$returnMessage = "Küche: $tempKueche °C (-> $desiredTempKueche °C)\n";
$returnMessage .= "Schlafz.: $tempSchlafzimmer °C (-> $desiredTempSchlafzimmer °C)\n";
$returnMessage .= "Wohnz.: $tempWohnzimmer °C (-> $desiredTempWohnzimmer °C)\n";
return $returnMessage;
}
######## Ende Status der Raumtemperaturen abfragen ############
Die Subroutine steht in der myyUtils. Die Utils funktioniert auch, andere Routinen funzen einwandfrei. Ganze System ist neu gestartet worden, das alle Daateien neu eingelesen werden. Fhem ist in der neusten Version aufgespielt, da mir Update sagt, keine neuen Updates vorhanden.
In der util fehlt vorm = in der viertletzen Zeile ( mit Küche) der punkt. $returnMessage wird da neu gesetzt,,
Besten Dank. Der fehlende Punkt war es. Obwohl ich mir den Code x mal durchgelesen habe, habe ich das nicht gesehen.
Moin.
Habe ein kleines Problem mit einem neuen Dialog. Verstehe leider nicht warum, weil manuelle funktioniert jeder Aufruf. Im Dialog bricht es immer beim schalten ab, es wird nichts mehr angezeigt und nichts geschaltet.
defmod klima_Dialog msgDialog {"Automatik":{\
"message": [\
"(Automatik einschalten) ",\
"(Automatik ausschalten) ",\
"(zurück) ",\
"(abbrechen) ",\
"Automatik schalten:"\
],\
"Automatik einschalten":{\
"message":[\
"{return('(Büro Heizung) ') if(ReadingsVal('HZ_BUERO', 'mode', '') ne 'auto')}",\
"{return('(Büro Ventilator) ') if(ReadingsVal('buero_autovent', 'state', '') ne 'Active')}",\
"{return('(Wohnzimmer Heizung) ') if(ReadingsVal('HZ_WOHNZ', 'mode', '') ne 'auto')}",\
"{return('(Wohnzimmer Ventilator) ') if(ReadingsVal('wohn_autovent', 'state', '') ne 'Active')}",\
"{return('(Küchen Heizung) ') if(ReadingsVal('HZ_KUECHE', 'mode', '') ne 'auto')}",\
"{return('(Schlafzimmer Heizung) ') if(ReadingsVal('HZ_BED', 'mode', '') ne 'auto')}",\
"(zurück) ",\
"(abbrechen) ",\
"Welche Automatik soll eingeschaltet werden?"\
],\
"Büro Heizung umschalten":{\
"commands": "set HZ_BUERO mode auto",\
"message":[\
"(%me%) ",\
"Büro Heizung wurde umgeschaltet."\
]\
},\
"Büro Ventilator umschalten":{\
"commands": "set buero_autovent state Active",\
"message":[\
"(%me%) ",\
"Büro Ventilator wurde umgeschaltet."\
]\
},\
"Wohnzimmer Heizung umschalten":{\
"commands": "set HZ_WOHNZ mode auto",\
"message":[\
"(%me%) ",\
"Wohnzimmer Heizung wurde umgeschaltet."\
]\
},\
"Wohnzimmer Ventilator umschalten":{\
"commands": "set wohn_autovent state Active",\
"message":[\
"(%me%) ",\
"Wohnzimmer Ventilator wurde umgeschaltet."\
]\
},\
"Küchen Heizung umschalten":{\
"commands": "set HZ_KUCHE mode auto",\
"message":[\
"(%me%) ",\
"Küchen Heizung wurde umgeschaltet."\
]\
},\
"Schlafzimmer Heizung umschalten":{\
"commands": "set HZ_BED mode auto",\
"message":[\
"(%me%) ",\
"Schlafzimmer Heizung wurde umgeschaltet."\
]\
}\
},\
"Automatik ausschalten":{\
"message":[\
"{return('(Büro Heizung) ') if(ReadingsVal('HZ_BUERO', 'mode', '') ne 'manual')}",\
"{return('(Büro Ventilator) ') if(ReadingsVal('buero_autovent', 'state', '') ne 'Inactive')}",\
"{return('(Wohnzimmer Heizung) ') if(ReadingsVal('HZ_WOHNZ', 'mode', '') ne 'manual')}",\
"{return('(Wohnzimmer Ventilator) ') if(ReadingsVal('wohn_autovent', 'state', '') ne 'Inactive')}",\
"{return('(Küchen Heizung) ') if(ReadingsVal('HZ_KUECHE', 'mode', '') ne 'manual')}",\
"{return('(Schlafzimmer Heizung) ') if(ReadingsVal('HZ_BED', 'mode', '') ne 'manual')}",\
"(zurück) ",\
"(abbrechen) ",\
"Welche Automatik soll ausgeschaltet werden?"\
],\
"Büro Heizung umschalten":{\
"commands": "set HZ_BUERO mode manual",\
"message":[\
"(%me%) ",\
"Büro Heizung wurde umgeschaltet."\
]\
},\
"Büro Ventilator umschalten":{\
"commands": "set buero_autovent state Inactive",\
"message":[\
"(%me%) ",\
"Büro Ventilator wurde umgeschaltet."\
]\
},\
"Wohnzimmer Heizung umschalten":{\
"commands": "set HZ_WOHNZ mode manual",\
"message":[\
"(%me%) ",\
"Wohnzimmer Heizung wurde umgeschaltet."\
]\
},\
"Wohnzimmer Ventilator umschalten":{\
"commands": "set wohn_autovent state Inactive",\
"message":[\
"(%me%) ",\
"Wohnzimmer Ventilator wurde umgeschaltet."\
]\
},\
"Küchen Heizung umschalten":{\
"commands": "set HZ_KUECHE mode manual",\
"message":[\
"(%me%) ",\
"Küchen Heizung wurde umgeschaltet."\
]\
},\
"Schlafzimmer Heizung umschalten":{\
"commands": "set HZ_BED mode manual",\
"message":[\
"(%me%) ",\
"Schlafzimmer Heizung wurde umgeschaltet."\
]\
}\
}\
}\
}
attr klima_Dialog allowed rr_Marcus
attr klima_Dialog room Telegram
setstate klima_Dialog rr_Marcus: Automatik einschalten
setstate klima_Dialog 2018-04-08 09:01:44 state rr_Marcus: Automatik einschalten
Hast du mal geschaut, ob dein json korrekt ist zB mit http://jsonprettyprint.com (http://jsonprettyprint.com).
Beim Check auf der Seite, erhalte ich eine NULL als Ausgabe.
Json ist korrekt. Du musst die \ am Ende der Zeilen entfernen. Das Problem liegt in den Dialogworten:
"Automatik einschalten":{\
"message":[\
"{return('(Büro Heizung) ')
],\
"Büro Heizung umschalten":{\
"commands": "set HZ_BUERO mode auto",\
Büro Heizung
versus
Büro Heizung umschalten
Ich denke, du kannst das umschalten immer entfernen.
Das "umschalten" war es. Danke Dir für die Hilfe.
Hallo zusammen,
ich stehe gerade - wahrscheinlich der späten Stunde geschuldet - arg auf dem Schlauch, vielleicht könnt ihr mir ja runterhelfen ;-)
Kann ich irgendwie einen "Titel" mit übergeben, der dann im Nachrichtenteil auf der Telegramseite fett markiert wird?
Im TelegramBot hab ich den "parseModeSend" auf "3_InMsg" stehen, und in notifies funktioniert es auch mit set TelegramBot msg Markdown *fetterText*
Allerdings bekomme ich es aus msgDialog nicht hin. Selbst wenn ich den Mardown als Titel im msgconfig Modul einstelle.
Hat jemand eine Idee?
Vielen Dank vorab!
Edit: Auch mehrere Tage später hab ich immer noch keine Möglichkeit gefunden, die Formatierung mit zu übergeben. Hat das wirklich noch nie jemand probiert?
Hallo.
Ich versuche gerade, den ein oder anderen Dialog auf die Beine zu stellen aber stoße da auf größere Probleme mit der Erstellung. Ich habe da wohl noch eine große Wissenslücke. Könnt Ihr mir mal bitte ein paar Tipps geben, welche Lektüre ich mir durchlesen sollte, um es zu lernen. Danke.
Hallo zusammen,
ich habe folgendes Problem:
Ich habe die Einrichtung des msgDialog Gerätes und Kopplung mit dem TelegramBot Device erfolgreich abgeschlossen.
Ein erster Testdialog funktioniert problemlos. Nun habe ich gemäß Wiki-Artikel von "normalem" auf "Inline-Keyboard" umgestellt.
Dazu habe ich die das notify-Device "sentMsgIdByPeerId notify" und das cmdalias "message2queryEditInline" gemäß Beispiel angelegt.
Soweit, so gut, das Menü des Meta-Dialogs wird nun "inline" angezeigt. Prima!
Aber: Sobald ich einen Menüeintrag auswähle, sehe ich ein fröhlich vor sich hinkringelndes Kringel in der Schaltfläche und es passiert genau: nichts. (siehe Screenshot)
Interessant: Gebe ich das Command direkt ein, funktioniert es.
Was könnte die Ursache für dieses verhalten sein?
Hier die Raw Definition meines Meta-Dialog:
defmod meta_Dialog msgDialog {\
"%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."\
]\
}\
}
attr meta_Dialog allowed everyone
attr meta_Dialog room msg
setstate meta_Dialog Daniel: /start
setstate meta_Dialog 2018-05-20 20:29:03 state Daniel: /start
Moin,
Ist das 1:1 der Meta-Dialog aus dem Wiki? Der hat bei mir super funktioniert (und ich meine ohne Anpassung).
Ansonsten wäre der Dialog der nicht funktioniert noch hilfreich als Info.
VG,
Dirk
Hallo Dirk,
ja, das ist der metaDialog aus dem Wiki, völlig unverändert.
Er hat auch super funktioniert, solange ich ihn mit dem "normalen" Keyboard verwendet habe.
Erst, als ich die Schritte zur Aktivierung des inline Keyboards aus dem Wiki nachgestellt habe, fingen die geschilderten Probleme an.
Gerne poste ich auch noch den Dialog, "der nicht funktioniert."
Allerdings tritt das Problem auch bei der Schaltfläche "abbrechen" auf, die ja bereits im Meta-Dialog definiert ist und angezeigt wird....
Hier die Raw Def des Dialogs "Kamera_Dialog":
defmod Kamera_Dialog msgDialog {\
"Kameras": {\
"message": [\
"(Kamera Carport) ",\
"(Kamera Garten) ",\
"(zurück) ",\
"Menü Kameras"\
]\
},\
"Kamera Carport": {\
"commands": "set FHEM_Bot sendImage /opt/fhem/www/images/ipcams/ipcam1_snapshot.jpg",\
"message": [\
"So siehts in deinem Carport aus!"\
]\
\
},\
"Kamera Garten": {\
"commands": "set FHEM_Bot sendImage /opt/fhem/www/images/ipcams/ipcam2_snapshot.jpg",\
"message": [\
"So siehts in deinem Garten aus!"\
]\
}\
}
attr Kamera_Dialog allowed everyone
attr Kamera_Dialog room msg
setstate Kamera_Dialog Daniel: Kameras
setstate Kamera_Dialog 2018-05-20 22:52:35 Daniel_history
setstate Kamera_Dialog 2018-05-20 22:52:35 state Daniel: Kameras
Mhh, ist nen bissl schwer zu erraten, da ich da auch lange nichts mehr mit gemacht habe. Folgande Ansätze:
1. hast du im device msgConfig den me-Eintrag in evalSpecials richtig gesetzt?
2. der screenshot ist ja schon im Kameras-Dialog. D.h. Du bist aus dem meta schon eine Ebene tiefer gekommen. Ich denke, daher kommt msg auch durcheinander und es kommt keine Antwort.
Zu 1.: Ich habe für das msgConfig Device sowohl das Attribut "evalSpecials" als auch "msgDialog_evalSpecials" gesetzt. Ich bin nicht ganz sicher, welches das richtige ist, habe widersprüchliche Angaben hier im Thread gefunden.
defmod myMsgConfig msgConfig
attr myMsgConfig userattr evalSpecials:textField-long msgDialog_evalSpecials:textField-long msgDialog_msgCommand:textField
attr myMsgConfig comment FHEM Global Configuration for command 'msg'
attr myMsgConfig evalSpecials me=Tach TelegramBot=FHEM_Bot
attr myMsgConfig group Global
attr myMsgConfig msgContactPush FHEM_Bot
attr myMsgConfig msgDialog_evalSpecials me=Tach TelegramBot=FHEM_Bot
attr myMsgConfig msgType text
attr myMsgConfig room msg
attr myMsgConfig stateFormat fhemMsgState
attr myMsgConfig verbose 3
setstate myMsgConfig initialized
setstate myMsgConfig 2018-05-10 22:53:11 fhemMsgState initialized
Zu 2.: Nein, der Screenshot zeigt tatsächlich den Meta-Dialog. Mir ist es noch nicht gelungen, die Einträge für die Kameras auszublenden, die eigentlich erst im Kamera-Dialog erscheinen sollen. Habe noch nicht verstanden, wie man das macht. aber das ist erst mal nebensächlich...
Ich habe nur msgDialog_evalSpecials.
Genauso im userattr. Da fehlt bei mir dein erster Eintrag.
Dass bei dir gleich die Menüpunkte des Unterdialogs angezeigt werden ist meiner Meinung nach ein Hinweis auf das Problem. Mach mal bei den Dialogen ein set reset und updateAllowed.
Wenn ich dich richtig verstanden habe hat das Ganze ohne inline-Tastatur funktioniert. Welchen Dialog hast du denn auf welche Weise angepasst?
Hallo zusammen,
mittlerweile komme ich mit dem msgDialog-Modul relativ gut klar und steigere momentan den Wife-Acceptance-Faktor von Fhem dadurch gewaltig. ;)
Daher schonmal danke an dieser Stelle.
Hatte mir überlegt, dass es gut wäre, fertige Dialoge - welche auch für andere interessant sein könnten - in einem Thread zu sammeln.
Wie ist denn da so die Meinung zu? Lohnt das? Oder sollte sowas eher im Wiki stattfinden?
Ich hab bspw. einen Dialog für verpasste Anrufe zuhause, über den ich direkt auch neue Namen im Fritzbox-Telefonbuch anlegen kann.
Viele Grüße!
Zitat von: jazzor am 22 Mai 2018, 23:02:19
Hallo zusammen,
mittlerweile komme ich mit dem msgDialog-Modul relativ gut klar und steigere momentan den Wife-Acceptance-Faktor von Fhem dadurch gewaltig. ;)
Daher schonmal danke an dieser Stelle.
Hatte mir überlegt, dass es gut wäre, fertige Dialoge - welche auch für andere interessant sein könnten - in einem Thread zu sammeln.
Wie ist denn da so die Meinung zu? Lohnt das? Oder sollte sowas eher im Wiki stattfinden?
Ich hab bspw. einen Dialog für verpasste Anrufe zuhause, über den ich direkt auch neue Namen im Fritzbox-Telefonbuch anlegen kann.
Viele Grüße!
Ich würde einer Sammlung von Dialogen zusprechen. Ich tue mich da nämlich noch etwas schwer^^
Ich finde die Idee auch gut. Eigentlich ist das Wiki meiner Meinung nach besser dazu geeignet, zum Start sollte aber ein eigener Thread hier reichen. Mal schauen wie viel zusammen kommt. Wenn es im Thread zu unübersichtlich wird kann man immer noch die Dialoge ins Wiki bringen.
Zitat von: Wuehler am 23 Mai 2018, 08:38:26
Ich finde die Idee auch gut. Eigentlich ist das Wiki meiner Meinung nach besser dazu geeignet, zum Start sollte aber ein eigener Thread hier reichen. Mal schauen wie viel zusammen kommt. Wenn es im Thread zu unübersichtlich wird kann man immer noch die Dialoge ins Wiki bringen.
Ich hab den Thread jetzt mal spontan hier (https://forum.fhem.de/index.php/topic,88050.0.html)ins Leben gerufen.
Bei Wünschen oder Anregungen bitte gerne per PM anstubsen.
Zitat von: igami am 20 Januar 2018, 06:29:04
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))}
Mein Vorhaben habe ich vor 4 Monaten erstmal liegen gelassen.
Kriege es 4 Monate später allerdings immer noch nicht hin.
Mein Vorhaben ist es ein Reading eines Presence Devices auszulesen und direkt mit zu schicken.
Siehe hier:
{
"Anwesenheit":{
"message":[
"Anwesenheit der Familienmitglieder:"
"Name1:" <> #auslesen und darstellen des status vom Gtag
"Name2:" <> #auslesen und darstellen des status vom Gtag
"Name3:" <present> #Beispielsweise present ausgelesen
"Name4:" <Zuhause> #aus present wird dann mit Hilfe der Sub von igamai "Zuhause"
]
}
Ich habe bereits schon ein wenig mit ReadingsVal rum gespielt allerdings nur Syntax Fehler bekommen...
Kann mir jemand einen Tipp geben?
Hi,
Bei mir gehts zB in folgendem Mini-Dialog:
{
"Voucher": {
"commands": [
"{fhem('set voucherComment comment '.ReadingsVal('Unifi','-VC_2h','').' (2h): $recipient')}"
],
"message": "{return('Code: '.fhem('get Unifi voucher 2h'))}"
}
}
VG,
Dirk
Zitat von: Keule_09 am 30 Januar 2018, 12:36:25
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
Hallo Marco,
ich stehe gerade vor genau dem gleichen Rätsel. Wie hast du es gelöst?
Grüße
Daniel
Zitat von: Wuehler am 23 Mai 2018, 15:36:12
Hi,
Bei mir gehts zB in folgendem Mini-Dialog:
{
"Voucher": {
"commands": [
"{fhem('set voucherComment comment '.ReadingsVal('Unifi','-VC_2h','').' (2h): $recipient')}"
],
"message": "{return('Code: '.fhem('get Unifi voucher 2h'))}"
}
}
VG,
Dirk
Danke, aber irgendwie kann ich damit nicht viel anfangen.
Ich bin nun so weit gekommen, dass das Reading ausgelesen wird. Allerdings kriege ich es anschließend nicht dargestellt. Ich kriege immer innerhalb Telegram "unknown command absent, try help" Es wird wohl versucht das ausgelesene Reading als command zu interpretieren...
Was mache ich falsch? Habe lange nicht mehr mit Perl gearbeitet. :(
Hier mein Code:
{
"Anwesenheit":{
"message":[
"Anwesenheit der Familienmitglieder:",
"Felix:", "{my $bla = fhem(ReadingsVal('FelixGtag','presence','')); return $bla;}",
"Katharina:", "{my $bla = fhem(ReadingsVal('KatharinaGtag','presence','')); return $bla;}",
"Martina:", "{my $bla = fhem(ReadingsVal('MartinaGtag','presence','')); return $bla;}",
"Rolf:", "{my $bla = fhem(ReadingsVal('RolfGtag','presence','')); return $bla;}"
]
}
}
Hi,
Sieht bei dir nach message ja auch iwie anders aus.
Zitat von: Wuehler am 24 Mai 2018, 15:45:46
Hi,
Sieht bei dir nach message ja auch iwie anders aus.
In wie fern? Und ist "anders" in diesem Fall falsch?
Bin leider unterwegs und kann es nicht ausprobieren um dir da besser zu helfen.
Laut Wiki muss jede message in einer Zeile stehen. Bei dir sind Es in den Zeilen mit den Namen jeweils zwei. Ersetz die mal ungefähr folgendermaßen:
"{return('Felix: '.fhem(ReadingsVal('FelixGtag','presence,''))},
Achtung: habe auf dem Handy die Hochkommata nicht richtig hinbekommen!!!
Zitat von: Wuehler am 24 Mai 2018, 22:28:35
Bin leider unterwegs und kann es nicht ausprobieren um dir da besser zu helfen.
Laut Wiki muss jede message in einer Zeile stehen. Bei dir sind Es in den Zeilen mit den Namen jeweils zwei. Ersetz die mal ungefähr folgendermaßen:
"{return('Felix: '.fhem(ReadingsVal('FelixGtag','presence,''))},
Achtung: habe auf dem Handy die Hochkommata nicht richtig hinbekommen!!!
Danke für die Hilfe. Allerdings kriege ich die gleiche Meldung wie bei meiner Variante:
Zitatunknown command absent, try help
Was genau hat der Punkt in dem nachfolgendem Code zu bedeuten? Ich nehme an, das Wort fhem leitet den nachstehenden fhem Befehl ein?
{return('Felix: [color=red]'.[/color]fhem(ReadingsVal('FelixGtag','presence,''))}
Hi,
Das sind dann jetzt aber ein paar fhem und perl Grundlagen:
- mit der geschweiften Klammer wechselt man in den perl-Modus
- Message möchte einen Text zum vversenden, daher aus oerl ein return
- der Punkt verbindet Zeichenketten.
- fhem() ist der Aufruf eines fhem Befehls(darin gehört kein perl)
- der ist hier natürlich falsch, sorry dafür, aber beim Handytippen sieht man manches nicht so gut.
- hier würde also direkt ReadingsVal(...) als perl Funktion reichen.
{return('Felix: [color=red]'.ReadingsVal('FelixGtag','presence','m)."[/color]"}
Das wusste ich alles, bis auf dem Punkt. Danke für die Erläuterung :)
Aber warum wird nun mein ausgelesenes Reading mit Readingsval als command interpretiert und nicht als Textausgabe dargestellt? ???
Wie sieht dein Dialog denn jetzt in Gänze aus?
Folgendermaßen sieht er nun aus:
{
"Anwesenheit":{
"message":[
"Anwesenheit der Familienmitglieder:",
"{return('Felix: '.fhem(ReadingsVal('FelixGtag','presence','')))}",
"{return('Katharina: '.fhem(ReadingsVal('KatharinaGtag','presence','')))}",
"{return('Martina: '.fhem(ReadingsVal('MartinaGtag','presence','')))}",
"{return('Rolf: '.fhem(ReadingsVal('RolfGtag','presence','')))}",
"(beenden) ",
"(zurück:Start) "
]
}
}
Wobei das beenden und zurück:Start mir nicht als anklickbare Tastatur angezeigt wird. Wie bei anderen Dialogen. Liegt vielleicht daran, dass dort noch Fehlermeldungen vorkommen.
Hier die Nachricht, wie sie in Telegram ankommt:
Anwesenheit der Familienmitglieder:
Felix: Unknown command absent, try help.
Katharina: Unknown command absent, try help.
Martina: Unknown command present, try help.
Rolf: Unknown command present, try help.
(beenden)
(zurück:Start)
Das fhem() kannst du entfernen. Siehe mein post oben.
Was passiert denn wenn du direkt als message ,,Felix: absent" ausgibst?
Und wenn es dann immer noch nicht geht wäre ein log mit verbose=3 hilfreich. Auf welchen devices (dialog und/oder globalmsg) weiss ich auch nicht. Musst du probieren.
Warum nicht einfach
{
"Anwesenheit":{
"message":[
"Anwesenheit der Familienmitglieder:",
"Felix: [FelixGtag:presence]",
"Katharina: [KatharinaGtag:presence]",
"Martina: [MartinaGtag:presence]",
"Rolf: [RolfGtag:presence]",
"(beenden) ",
"(zurück:Start) "
]
}
}
?
Das hat Funktioniert! Kenne die Angaben in den eckigen Klammern nur von dem DOIF Modul. Das ist doch eigentlich nicht Perl oder fhem Syntax, oder irre ich mich?
Nun nur noch die Frage, warum das eigentlich klickbare "beenden" in Telegram nur als Text erscheint.
Hier nochmal der gesamte code:
{
"Anwesenheit":{
"message":[
"Anwesenheit der Familienmitglieder:",
"Felix: [FelixGtag:presence]",
"Katharina: [KatharinaGtag:presence]",
"Martina: [MartinaGtag:presence]",
"Rolf: [RolfGtag:presence]",
"(beenden) "
]
}
}
Danke!
Zitat von: Fixel2012 am 28 Mai 2018, 09:38:08
Das hat Funktioniert! Kenne die Angaben in den eckigen Klammern nur von dem DOIF Modul. Das ist doch eigentlich nicht Perl oder fhem Syntax, oder irre ich mich?
Es ist FHEM Syntax. Siehe commandref zu set (http://commandref.fhem.de/commandref_DE.html#set)
Zitat
Ab featurelevel 5.7 ersetzt das set und setreading Befehl
[device:name] mit dem Wert des Readings, Internals oder Attributes für device, falls sowohl device, als auch Reading, Internal oder Attribut existiert, und nicht leer ist.
Man kann einen der Präfixe r:, i: oder a: verwenden, um die Suche einzuschränken, genau wie im devspec.
Das Suffix :d extrahiert die erste Zahl.
Das Suffix :i extrahiert die erste Zahl als Ganzzahl.
Das Suffix :r<n> extrahiert die erste Zahl, und rundet sie auf <n> Dezimalstellen. Falls <n> fehlt, dann wird auf eine Dezimalstelle gerundet.
Das Suffix :t liefert den Zeitstempel des Readings
Das Suffix :sec liefert Anzahl der Sekunden seit Änderung des Readings.
Beispiel:
set Lamp blink [blinkDummy:number] [r:blinkDummy:duration:d]
{(perlExpression)} mit dem Ergebnis der perlExpression. $DEV wird dabei mit dem Namen des vom set betroffenen Gerätes ersetzt.
Diese Ersetzungen sind unter dem Namen "set magic" bekannt.
Zitat von: Fixel2012 am 28 Mai 2018, 09:38:08
Nun nur noch die Frage, warum das eigentlich klickbare "beenden" in Telegram nur als Text erscheint.
Vor dem "beenden" steht kein Leerzeichen.
msgDialog ist eine klasse Methode Fhem übersichtlich und auch für Nichttechniker verständlich zu gestalten. Einfach gut und Hut ab.
Grundsätzlich gestaltet sich ein ausgewählter Befehl klar nach dem Muster : TRIGGER => COMMAND => MESSSAGE. Dabei wird die gesendete Nachricht als Quittung gewertet bzw. genutzt. Ob das System den Befehl wirklich umgesetzt hat ist nicht sicher.
Bei bedingten Nachrichten wird durch die Verwendung von Readingsabfragen der wirkliche Zustand genutzt. Also habe ich versucht die Nachricht "Das Deckenlicht ist eingeschaltet" durch folgenden Konstrukt zu ersetzen:
"Deckenlicht ein": {
"commands": "set Li_Sz_Decke on","message":[
"{return('(Das Deckenlicht wurde eingeschaltet) ') if(ReadingsVal('Li_Sz_Decke', 'state', '') eq 'on')}",
"{return('(Ups, da ist was schiefgelaufen!) ') if(ReadingsVal('Li_Sz_Decke', 'state', '') ne 'on')}",
"okay?"
]
},
Hierbei wird Command zwar abgearbeitet, aber die gewünschte Rückmeldung bleibt aus. Mit der Abfrage auf set_on habe ich ERfolg.
Hier der relevante Teil als Code:
"Schlafzimmer": {
"commands": "set $recipient_history=.+ say @$recipient {(ReadingsVal($DEV, '$recipient_history', '') =~ m/((.+)\\|.+$)/;; return($2 || $1);;)}",
"message": [
"{return('(Deckenlicht ein) ') if(ReadingsVal('Li_Sz_Decke', 'state', '') ne 'on')}",
"{return('(Deckenlicht aus) ') if(ReadingsVal('Li_Sz_Decke', 'state', '') ne 'off')}",
"{return('(Nachttischlampen ein) ') if(ReadingsVal('Li_Sz_HUEGroup3', 'any_on', '') ne '1')}",
"{return('(Nachttischlampen aus) ') if(ReadingsVal('Li_Sz_HUEGroup3', 'any_on', '') ne '0')}",
"{return('(linke NTL ein) ') if(ReadingsVal('Li_Sz_HUEDevice21', 'onoff', '') ne '1')}",
"{return('(linke NTL aus) ') if(ReadingsVal('Li_Sz_HUEDevice21', 'onoff', '') eq '1')}",
"{return('(rechte NTL ein) ') if(ReadingsVal('Li_Sz_HUEDevice12', 'onoff', '') ne '1')}",
"{return('(rechte NTL aus) ') if(ReadingsVal('Li_Sz_HUEDevice12', 'onoff', '') eq '1')}",
"(zurück) ",
"Bitte wählen:"
],
"Deckenlicht ein": {
"commands": "set Li_Sz_Decke on",
"message":[
"{return('(Das Deckenlicht wurde eingeschaltet) ') if(ReadingsVal('Li_Sz_Decke', 'state', '') eq 'set_on')}",
"{return('(Ups, da ist was schiefgelaufen!) ') if(ReadingsVal('Li_Sz_Decke', 'state', '') ne 'set_on')}",
"okay?"
]
},
Der Zustand, auf den aufgeprüft wird, soll "on" sein. Da fhem so schnell ist, befindet sich der Homaticschalter noch im Zustand "set_on", der aber einen Zwischenzustand darstellt. Erst der Zustand "on" ist endgültig. Ich müsste mit der Abfrage ca 1 Sekunde warten, dann dürfte der Befehl zu 95% abgearbeitet sein (hängt von der Auslastung der Funkschnittstelle ab).
Welche Lösungsmöglichkeit gibt es?
Viele Grüße
Eberhard
Ich habe den Dialog noch einmal verändert und in den Commands eine Wartezeit mit
sleep 1 sowie anschließendem erneuten Aufruf des Gesamtschlafzimmers eingefügt.
"Deckenlicht ein": {
"commands": [
"set Li_Sz_Decke on",
"sleep 1",
"set $SELF say @$recipient Schlafzimmer"
],
"message": "Das Deckenlicht wurde eingeschaltet."
},
Ich hatte die Hoffnung, dass beim Aufruf von
set $SELF... der Zustand bereits stabil wäre, ist er leider nicht, da die beiden Zeilen
"{return('(Deckenlicht ein) ') if(ReadingsVal('Li_Sz_Decke', 'state', '') ne 'on')}",
"{return('(Deckenlicht aus) ') if(ReadingsVal('Li_Sz_Decke', 'state', '') ne 'off')}",
zu einer Anzeige führen. Also sind sie weder
on noch
off. Wieso? Nach einer Sekunde müsste der Zustand
"on" doch erreicht sein, oder?
Zitat aus der CommandRef für sleep:
ZitatBemerkung: falls sleep von keinem Befehl gefolgt wird, dann wird FHEM blockiert. Das ist unerwünscht, und im FHEM-Log wird eine Warnung protokolliert.
Kann es sein, dass fhem den nachfolgenden Befehl
set $SELF say ... nicht als solchen erkennt und blockiert? Ein Blick ins Logbuch zeigt es:
2018.06.01 09:51:58 1 : WARNING: sleep without additional commands is deprecated and blocks FHEM
Was nun?
Bin ich der Einzige, der das Problem mit den HM Tastern/Schaltern hat? Ich werde heute Nachmittag das Thema mit HUE testen.
Viele Grüße
Eberhard
ZitatAlso sind sie weder on noch off. Wieso? Nach einer Sekunde müsste der Zustand "on" doch erreicht sein, oder?
Hallo Eberhard,
die Prüfung zum Einschalten
if(ReadingsVal('Li_Sz_Decke', 'state', '') ne 'on')
liefert auch ja zurück, wenn state = "dim irgendwas" steht, also die Lampe bereits eingeschaltet ist. Vorausgesetzt es ist eine HUE oder so wovon ich mal ausgehe.
Probier mal:
if(ReadingsVal('Li_Sz_Decke', 'state', '') eq 'off')
Hier mal mein Beleuchtungs-Dialog als RAW. Vielleicht kannst Du ja was adaptieren...
defmod Beleuchtung_Dialog msgDialog {"01.💡Beleuchtung":{\
"message": [\
"(💡Szenen: [Standard.LS:state]:💡Szenen) ",\
"(💡Lampen einschalten) ",\
"(💡Lampen ausschalten) ",\
"(💡Flur dimmen) ",\
"(💡Wohnzimmer dimmen) ",\
"(zurück:%me%) ", \
"Möchtest Du Szenen einstellen oder Lampen schalten?"\
],\
"💡Szenen":{\
"message":[\
"{return('(💡abwesend einschalten) ') if(ReadingsVal('Standard.LS','state','') ne 'abwesend')}",\
"{return('(💡anwesend einschalten) ') if(ReadingsVal('Standard.LS', 'state','') ne 'anwesend')}",\
"{return('(💡anwesend_alle einschalten) ') if(ReadingsVal('Standard.LS', 'state','') ne 'anwesend_alle')}",\
"{return('(💡anwesend_alle_farbe einschalten) ') if(ReadingsVal('Standard.LS','state','') ne 'anwesend_alle_farbe')}",\
"{return('(💡schlafen einschalten) ') if(ReadingsVal('Standard.LS','state','') ne 'schlafen')}",\
"{return('(💡kino einschalten) ') if(ReadingsVal('Standard.LS','state','') ne 'kino')}",\
"{return('(💡panik einschalten) ') if(ReadingsVal('Standard.LS','state','') ne 'panik')}",\
"(abbrechen|zurück) ",\
"Welche Szene soll ich aktivieren?"\
],\
"💡abwesend einschalten":{\
"commands": [\
"set Standard.LS scene abwesend",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
]\
},\
"💡anwesend einschalten":{\
"commands": [\
"set Standard.LS scene anwesend",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
]\
},\
"💡anwesend_alle einschalten":{\
"commands": [\
"set Standard.LS scene anwesend_alle",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
]\
},\
"💡anwesend_alle_farbe einschalten":{\
"commands": [\
"set Standard.LS scene anwesend_alle_farbe",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
]\
},\
"💡schlafen einschalten":{\
"commands": [\
"set Standard.LS scene schalfen",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
]\
},\
"💡panik einschalten":{\
"commands": [\
"set Standard.LS scene panik",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
]\
},\
"💡kino einschalten":{\
"commands": [\
"set Standard.LS scene kino",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
]\
}\
},\
"💡Lampen einschalten":{\
"message":[\
"{return('(💡Flur einschalten: [fl_tischlampe_licht:state]:Flur einschalten) ') if(ReadingsVal('fl_tischlampe_licht', 'state', '') eq 'off')}",\
"{return('(💡Küche: [SteckdoseIT2:state]:Küche einschalten) ') if(ReadingsVal('SteckdoseIT2', 'state', '') eq 'off')}",\
"{return('(💡Schlafzimmer: [sz_bett_licht:state]:Schlafzimmer einschalten) ') if(ReadingsVal('sz_bett_licht', 'state', '') eq 'off')}",\
"{return('(💡Büro: [SteckdoseIT6:state]:Büro einschalten) ') if(ReadingsVal('SteckdoseIT6', 'state', '') eq 'off')}",\
"{return('(💡Kugel: [wz_kugel_licht:state]:Kugel einschalten) ') if(ReadingsVal('wz_kugel_licht', 'state', '') eq 'off')}",\
"{return('(💡Linker Spot: [wz_treppe_licht:state]:Linker Spot einschalten) ') if(ReadingsVal('wz_treppe_licht', 'state', '') eq 'off')}",\
"{return('(💡Rechter Spot: [wz_strasse_licht:state]:Rechter Spot einschalten) ') if(ReadingsVal('wz_strasse_licht', 'state', '') eq 'off')}",\
"{return('(💡Stehlampe: [wz_stehlampe_licht:state]:Stehlampe einschalten) ') if(ReadingsVal('wz_stehlampe_licht', 'state', '') eq 'off')}",\
"(abbrechen|zurück) ",\
"Welche Lampe soll ich einschalten?"\
],\
"Stehlampe einschalten":{\
"commands": [\
"set wz_stehlampe_licht on",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
]\
},\
"Linker Spot einschalten":{\
"commands": [\
"set wz_treppe_licht on",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
]\
},\
"Rechter Spot einschalten":{\
"commands": [\
"set wz_strasse_licht on",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
]\
},\
"Kugel einschalten":{\
"commands": [\
"set wz_kugel_licht on",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
]\
},\
"Flur einschalten":{\
"commands": [\
"set fl_tischlampe_licht on",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
]\
},\
"Küche einschalten":{\
"commands": [\
"set SteckdoseIT2 on",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
]\
},\
"Büro einschalten":{\
"commands": [\
"set SteckdoseIT6 on",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
]\
},\
"Schlafzimmer einschalten":{\
"commands": [\
"set sz_bett_licht on",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
]\
}\
},\
"💡Flur dimmen":{\
"message":[\
"(abbrechen|zurück) ",\
"(5%:5|10%:10|20%:20|25%:25) ",\
"(30%:30|40%:40|50%:50|60%:60) ",\
"(70%:70|80%:80|90%:90|100%:100) ",\
"Aktuell sind [fl_tischlampe_licht:pct]% eingestellt. Auf welchen Wert soll ich dimmen?"\
],\
"dimmen_Flur":{\
"match": "?([1-9][0]|[1][0][0]) ?",\
"commands": [\
"{my $dimm = '$message';;;; fhem(\"set fl_tischlampe_licht pct $dimm 3\");;;;}",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
]\
}\
},\
"💡Wohnzimmer dimmen":{\
"message":[\
"(abbrechen|zurück) ",\
"(5%:5|10%:10|20%:20|25%:25) ",\
"(30%:30|40%:40|50%:50|60%:60) ",\
"(70%:70|80%:80|90%:90|100%:100) ",\
"Aktuell sind [wz_stehlampe_licht:pct]% eingestellt. Auf welchen Wert soll ich dimmen?"\
],\
"dimmen_WZ":{\
"match": "?([1-9][0]|[1][0][0]) ?",\
"commands": [\
"{my $dimm = '$message';;;; fhem(\"set wz_.*_licht pct $dimm 3\");;;;}",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
]\
}\
},\
"💡Lampen ausschalten":{\
"message":[\
"{return('(💡Flur: [fl_tischlampe_licht:pct]:Flur ausschalten) ') if(ReadingsVal('fl_tischlampe_licht', 'state', '') ne 'off')}",\
"{return('(💡Küche: [SteckdoseIT2:state]:Küche ausschalten) ') if(ReadingsVal('SteckdoseIT2', 'state', '') ne 'off')}",\
"{return('(💡Schlafzimmer: [sz_bett_licht:pct]:Schlafzimmer ausschalten) ') if(ReadingsVal('sz_bett_licht', 'state', '') ne 'off')}",\
"{return('(💡Büro: [SteckdoseIT6:state]:Büro ausschalten) ') if(ReadingsVal('SteckdoseIT6', 'state', '') ne 'off')}",\
"{return('(💡Kugel: [wz_kugel_licht:pct]:Kugel ausschalten) ') if(ReadingsVal('wz_kugel_licht', 'state', '') ne 'off')}",\
"{return('(💡Linker Spot: [wz_treppe_licht:pct]:Linker Spot ausschalten) ') if(ReadingsVal('wz_treppe_licht', 'state', '') ne 'off')}",\
"{return('(💡Rechter Spot: [wz_strasse_licht:pct]:Rechter Spot ausschalten) ') if(ReadingsVal('wz_strasse_licht', 'state', '') ne 'off')}",\
"{return('(💡Stehlampe: [wz_stehlampe_licht:pct]:Stehlampe ausschalten) ') if(ReadingsVal('wz_stehlampe_licht', 'state', '') ne 'off')}",\
"(abbrechen|zurück) ",\
"Welche Lampe soll ich ausschalten?"\
],\
"Stehlampe ausschalten":{\
"commands": [\
"set wz_stehlampe_licht off",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
]\
},\
"Linker Spot ausschalten":{\
"commands": [\
"set wz_treppe_licht off",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
]\
},\
"Rechter Spot ausschalten":{\
"commands": [\
"set wz_strasse_licht off",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
]\
},\
"Kugel ausschalten":{\
"commands": [\
"set wz_kugel_licht off",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
]\
},\
"Flur ausschalten":{\
"commands": [\
"set fl_sw_1 off",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
]\
},\
"Küche ausschalten":{\
"commands": [\
"set SteckdoseIT2 off",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
]\
},\
"Büro ausschalten":{\
"commands": [\
"set SteckdoseIT6 off",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
]\
},\
"Schlafzimmer ausschalten":{\
"commands": [\
"set sz_bett_licht off",\
"set $SELF say @$recipient 01.💡Beleuchtung"\
]\
}\
}\
}\
}\
\
\
attr Beleuchtung_Dialog allowed rr_Sebastian,1
attr Beleuchtung_Dialog disable 0
attr Beleuchtung_Dialog group Dialog
attr Beleuchtung_Dialog icon dialog@green
attr Beleuchtung_Dialog room 91_Webdevices
attr Beleuchtung_Dialog verbose 0
VG Sebastian
Hallo Sebastian,
ich habe inzwischen weitergeforscht und eine Lösung gefunden: einfach zwei Befehle in eine Zeile, nämlich so:
"sleep 1;set $SELF say @$recipient Schlafzimmer"
Das führt bei mir zu klaren wechselnden Anzeigen beim ernuten Aufruf des Dialoges. Normalerweise dürfen keine zwei Befehle in eine Zeile, aber diesen hier erkennt er wohl nicht richtig und arbeitet beide ab. Im Log erkenne ich den sleep 1 leider nicht, trotz verbose 5.
Hier mal für zwei Trigger meinen momentanen Code:
"Deckenlicht ein": {
"commands": [
"set Li_Sz_Decke on",
"sleep 1;set $SELF say @$recipient Schlafzimmer"
],
"message": "Das Deckenlicht wurde eingeschaltet."
},
"Deckenlicht aus": {
"commands": [
"set Li_Sz_Decke off",
"sleep 1;set $SELF say @$recipient Schlafzimmer"
],
"message": "Das Deckenlicht wurde ausgeschaltet."
},
ZitatVorausgesetzt es ist eine HUE oder so wovon ich mal ausgehe.
Das ist es ja, kein HUE sondern ein Homematicdeckenlampenschalter ;).
Deinen Dialog schaue ich mir im Laufe des Tages mal genau an, ob ich was gebrauchen kann. Danke dafür.
ZitatVielleicht kannst Du ja was adaptieren...
Würde ich gerne, deshalb dieFrage: Wie bekommst Du die Icons dort hinein? Den Code davor schreiben reicht wohl nicht, da stehen dann Hex-Zahlen vor der Nachricht. Das ist dann nix für den WAF.
Viele Grüße
Eberhard
ZitatDas ist es ja, kein HUE sondern ein Homematicdeckenlampenschalter ;).
Ja OK dann habe ich nicht gesagt... ;D
ZitatWie bekommst Du die Icons dort hinein?
Einfach per copy&paste im RAW einfügen. Eine Liste der Emojis findest du hier:
https://apps.timwhitlock.info/emoji/tables/unicode (https://apps.timwhitlock.info/emoji/tables/unicode)
Ich habe mir aber auch schon welche per Telegram geschickt. Dann stehen sie direkt im Reading msgText vom TelegramBot device.
Hier im Forum im Editor kommt bei der Vorschau eine Fehlermeldung. Einfach ignorieren ;)
VG Sebastian
Ich arbeite gerade an einer Umschaltung für Sommer- bzw. Winterbetrieb der Heizung. Normalerweise relativ einfach, aber (wie immer) bei mir läuft irgend etwas schief. Zuerst soll in den manuellen mode mit:
"set Th_.*_Climate controlMode manual" umgeschaltet werden. Danach soll in allen Thermostaten die Temperatur auf 5 °C gesetzt werden. Aber ein Schritt nach dem anderen. Bereits das Umschalten des ControlModes auf manuell bereitet Probleme dahingehend, dass keinerlei Reaktion geschieht. Unter Verbose 5 zwar einzelne Meldungen aber keine Fehler uns kein Umschalten in den Thermostaten.
Hier die gesamte Raw-Definition:
Heftig: Wenn ich die Raw-Definition einfüge kommt oben ein Hinweis:
Zitat
Fehler beim Schreiben des Beitrages.
Textfeld wurde nicht ausgefüllt.
Offensichtlich kommt der Forumsserver nicht mit den geschweiften Klammern klar, deshalb als Auszug:
"Sommerbetrieb": {
"match" : "(☀️ Sommerbetrieb|Sommerbetrieb)",
"commands": "set Th_.*_Climate controlMode manual",
"message" : "Sommerbetrieb ist jetzt eingeschaltet."
}
}
Im Einsatz sind fünf HM-Thermostaten.
Was ist falsch bzw. was habe ich übersehen?
Gruß Eberhard
Ich lese mir gerade zum gefühlten tausendsten Male die CommansRef für msgDialog durch und speziell den Absatz zu set only.
ZitatWenn setOnly auf true gestellt wird kann der Dialog an dieser Stelle nicht durch eingehnde Nachrichten ausgelöst werden, sondern nur über "get <name> say TRIGGER".
Das habe ich versucht und bin kläglich gescheitert! Bis ich dahintergekommen bin, dass es sich hier um einen Schreibfehler handelt. Erst bei "
set <name> say TRIGGER" wird der Dialog <TRIGGER> angestoßen!
Viele Grüße
Eberhard
Zitat von: FHEm2005 am 03 Juni 2018, 18:57:36
Was ist falsch bzw. was habe ich übersehen?
Funktioniert denn
set Th_.*_Climate controlMode manual
wenn du es direkt in der Kommandozeile eingibst?
Zitat von: FHEm2005 am 03 Juni 2018, 22:26:06
Ich lese mir gerade zum gefühlten tausendsten Male die CommansRef für msgDialog durch und speziell den Absatz zu set only.
Das habe ich versucht und bin kläglich gescheitert! Bis ich dahintergekommen bin, dass es sich hier um einen Schreibfehler handelt. Erst bei "set <name> say TRIGGER" wird der Dialog <TRIGGER> angestoßen!
Vielen Dank, habe ich korrigiert.
Zitat von: igami am 04 Juni 2018, 05:32:15
Funktioniert denn
set Th_.*_Climate controlMode manual
wenn du es direkt in der Kommandozeile eingibst?
Das ist es ja: von der Kommandozeile aus funktioniert es.
Gruß Eberhard
Ich mache wohl jeden Fehler, der irgendwie machbar ist. :(
Ich habe den Heizungsdialog in mehreren Ebenen aufgebaut. Den Dialog für Sommerbetrieb hatte ich fälschlicherweise in die falsche Ebene gepackt. (Vereinfachte Darstellung)
%me%: match:
message:
Raum: match:
commands:
message:
Sommerbetrieb:
match:
commands:
massage:
So ist der "Sommerbetrieb" ein Teil von Raum. Richtig ist ihn eine Ebenen höher zu schieben:
%me%: match:
message:
Raum: match:
commands:
message:
Sommerbetrieb:
match:
commands:
massage:
Sinnvoll ist es die beabsichtigte Hierarchie eines Dialoges vorher mal zu skizzieren. Lesson learned!
Viele Grüße
Eberhard
Hallo igami,
vielen Dank für das überaus geniale Modul!
Ich hätte eine Anregung, die ich zur Diskussion stellen möchte. Wenn ich das richtig verstanden habe, versendet msgDialog die Nachrichten über "msg push ...". Wäre hier "msg text ..." nicht flexibler? So könnte man die Nachrichten, die über "set <NAME> say" oder den gesamten Dialog nicht nur über einen Messenger, sonderen gleichzeitig auch noch per EMail versenden, ohne dafür einen weiteren Benutzer anlegen zu müssen. So könnte nach meinem Verständnis auch relativ einfach zweigleißig gefahren werden. Hier ein Zitat aus dem Wiki:
Zitat
text
Sendet eine Textnachricht per Push oder E-Mail. Je nach Priorität wird gepusht, gemailt oder beides. E-Mails werden mit der entsprechenden Priorität im Header markiert (dafür sind bei High und Low Prio HTML Mails zwingend erforderlich. Normale Mails werden als Nur-Text gesendet).
Die Befehle, wie gepusht oder gemailt werden soll, können über Attribute am Device "globalMsg" für die Prioritäts-Kategorien "High", "Normal" und "Low" angepasst werden. Standardmäßig wird für Push das Pushover Modul sowie für E-Mail system() per /usr/bin/mail verwendet.
Die Sub-Typen "mail" und "push" können auch explizit für sich aufgerufen werden.
Freundliche Grüße
Quantum
Zitat von: FHEm2005 am 05 Juni 2018, 08:47:19
Lesson learned!
Freut mich, dass es nun funktioniert :)
Zitat von: Quantum am 05 Juni 2018, 11:01:07
Ich hätte eine Anregung, die ich zur Diskussion stellen möchte. Wenn ich das richtig verstanden habe, versendet msgDialog die Nachrichten über "msg push ...". Wäre hier "msg text ..." nicht flexibler? So könnte man die Nachrichten, die über "set <NAME> say" oder den gesamten Dialog nicht nur über einen Messenger, sonderen gleichzeitig auch noch per EMail versenden, ohne dafür einen weiteren Benutzer anlegen zu müssen. So könnte nach meinem Verständnis auch relativ einfach zweigleißig gefahren werden.
Darauf möchte ich mit einem Zitat aus der Commandref antworten:
Zitat
Attribute
[...]
msgCommand <command>
Befehl der zum Versenden einer Nachricht verwendet wird.
Die Vorgabe ist "msg push \@$recipients $message"
Dieses Attribut ist als "msgDialog_msgCommand" im msgConfig Gerät vorhanden.
Ist also alles schon vorbereitet ;)
Zitat von: igami am 21 November 2017, 21:26:15
Okay, ist fhemMsgRcvPush. Hast du Einschränkungen durch event-on- Attribute?
verdammte axt!
ich sitze hier seit zwei Stunden und kämpfe mich nebenbei durch den Thread, da ich mir sicher war, dass ich irgendeinen dummen Fehler mache
und auf Seite 16 finde ich die Lösung: auch ich hatte beim ROOMMATE (aus dubiosen historischen Gründen) noch ein even-on- Attribut drin.
DANKE!
Vielleicht auch ein Thema für "Fehlersuche" Bereich im Wiki :)
So, jetzt kann ich mich endlich richtig mit deinem grandios klingenden Modul auseinander setzen :)
Zitat von: igami am 06 März 2018, 18:06:32
Auf Wunsch hier noch der Einkaufslisten Dialog:
defmod Einkaufsliste_Dialog msgDialog { \
"Einkaufsliste": {\
"message": [\
"(Waren hinzufügen) ", \
"(Waren entfernen) ", \
"(einkaufen) ", \
"(abbrechen) ",\
"{my $content = (split(': ', fhem('get %PostMe% list %list%')))[1];;;; return('Keine Einträge vorhanden') unless($content);;;; return(join('\n', split(',', $content)));;;;}"\
],\
"Waren hinzufügen": {\
"message": [\
"Bitte jede Ware als neue Nachricht hinzufügen.",\
"Das hinzufügen von Waren durch \"/beenden\" beenden."\
],\
"Ware hinzufügen": {\
"match": "[^/]+",\
"commands": [\
"set %PostMe% add %list% $message",\
"setreading $SELF $recipient_history Einkaufsliste|Waren hinzufügen"\
]\
}\
},\
"Waren entfernen": {\
"message": [\
"{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1]), 'beenden'). ') ')}",\
"Welche Ware möchtest du entfernen?"\
],\
"Ware entfernen": {\
"match": "^(?!beenden).+",\
"commands": [\
"set %PostMe% remove %list% $message",\
"set $SELF say @$recipient Einkaufsliste|Waren entfernen"\
]\
}\
},\
"einkaufen": {\
"commands": [\
"setreading $SELF $recipient_history Einkaufsliste|noch einzukaufen"\
],\
"message": [\
"{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1])) . ') ')}",\
"(beenden) ",\
"Bitte die Waren der Reihenfolge nach auswählen in der sie eingekauft werden."\
]\
},\
"noch einzukaufen": {\
"message": [\
"{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1])) . ') ')}",\
"(beenden) ",\
"Noch einzukaufen:"\
],\
"Ware eingekauft": {\
"match": "^(?!beenden).+",\
"commands": [\
"set %PostMe% remove %list% $message",\
"set $SELF say @$recipient Einkaufsliste|noch einzukaufen"\
]\
}\
} \
}\
}
attr Einkaufsliste_Dialog evalSpecials PostMe=PostMe\
list=Einkaufsliste
hi,
ich habe das bei mir übernommen, nur der Name ist anders (Einkaufsliste_Dialog vs. md_einkauf).
Sobold ich den den Dialog starte kommt folgendes im Log als Fehler:
3: get PostMe list Einkaufsliste : Please define PostMe first
Und ja, das attr evalSpecials ist gesetzt, auch mit Zeilenumbruch (also im Raw mit einem \ ).
Ich bin verwirrt.
Grüße
Hast du denn ein Device mit dem Namen "PostMe"?
Wahrscheinlich vom gleichnamigen Typ:
https://fhem.de/commandref.html#PostMe (https://fhem.de/commandref.html#PostMe)
VG, Thomas
Zitat von: ToM_ToM am 11 Juni 2018, 11:51:18
Hast du denn ein Device mit dem Namen "PostMe"?
Wahrscheinlich vom gleichnamigen Typ:
https://fhem.de/commandref.html#PostMe (https://fhem.de/commandref.html#PostMe)
VG, Thomas
oh man....ja, das ist es.
erst
define PostMe PostMe
Und dann noch
set create Einkaufsliste
Jetzt funktioniert es.
Danke dir!
....so schnellt der WAF in die Höhe ;)
Grüße
Hallo,
ich finde das Modul wirklich toll.
Nur leider bekomme ich 2 Dinge überhaupt nicht zum laufen - und habe auf Eure Hilfe gehofft:)
1) (zurück) funktioniert bei mir nicht. (Abbrechen) und (beenden) aber schon.
Habe in diesem Thread das Problem schon ein paarmal gesehen, aber keine für mich passende Antwort gefunden.
Mir scheint ich habe irgendwas noch falsch konfiguriert - In ROOMATE, msgConfig, msgDialog - ich weiß es nicht.
Ein Indiz ist vielleicht, dass das Reading <MeinName>_history im meta_Dialog immer "leer" angelegt wird (nach dem beenden des eigentlichen Dialogs wieder korrekt gelöscht). Die History steht stattdessen im Reading <MeinName>_history in dem Dialog, aus dem ich zum Beispiel in den meta_Dialog zurück möchte. Woher bekommt der meta_dialog das (history) reading - damit der korrekte TRIGGER aufgerufen werden kann?
2) Wenn ich (ohne das Inline-Keyboard konfiguriert zu haben) nach Abbruch des "meta-Dialog"s auf den Inline-Key des "%me%" readings drücke, kommt der Fehler "UNAUTHORIZED: TelegramBot FHEM request from user : <MeinName> (<MeineTelegramID>) Msg: Callback for inline query id: <ID> from :<MeineTelegramID>: data: <MeinName>".
Ich bin für jede Hilfe dankbar!
Viele Grüße
Rainer
Naja, wenn sich keiner erbarmt - hab ich mich selber mühsam auf Fehlersuche begeben.
Lösung für das 1. Problem - "Zurück" (wie im meta_Dialog definiert) funktioniert nicht:
Lösung: Wenn in einem Trigger keine weiteren Sub-trigger definiert sind, bleibt das Reading $User_history (im entsprechenden msgDialog) <void>.
Imho ein Bug. Kann man auf 2 Arten lösen:
a) Ein "Dummy-sub-trigger" unterhalb des Triggers, der sonst keine unter-Trigger hätte - definiert mit einer leeren message: [].
b) Über ein command "set $SELF say <übergeordneterTrigger>" einfach selbst eine Ebene hochspringen. Dann braucht man auch das "zurück" im meta_Dialog nicht (und das $User_history reading kann dann leer bleiben)
Für das 2. Problem - Inline-keyboard-Fehler:
a) Im TelegramBot device das Default-peer reading löschen (sonst gehts daneben mit der Fehlermeldung aus vorigem Post)
b) die erlaubten Peers im Reading cmdRestrictedPeer auf jeden Fall durch ein <blank> trennen.
(Ich hatte ein Komma verwendet, mit dem Effekt, dass das inline-Keyboard trotz gelöschtem Default-peer keine Reaktion zeigte)
Wär' vielleicht ein Hinweis im Wiki wert. Für dummies wie mich.
Hi,
versuche gerade verzweifelt mir ein Bild der Webcam aus einem Dialog heraus zusenden zu lassen.
Habe es erst so versucht.
"get Kamera image;sleep 2;set Telegram sendImage ./www/snapshots/Kamera_snapshot.jpg"
Bild wird auch aufgenommen und versendet, allerdings egal welcher Peer dieses Bild anfordert es landet immer bei mir.
Ist ja eigetlich auch klar, da meine ID als defaultPeer im Telegram Device eingetragen ist.
Dann habe ich folgendes Versucht, jedem Roommate ein userReading mit der Telegram ID verpasst und den Dialog folgendermaßen angepasst.
"get Kamera image;sleep 2;set Telegram sendImage @[$recipient:TelegramID] ./www/snapshots/Kamera_snapshot.jpg"
Funktioniert eigentlich auch soweit, bin aber irgendwie nicht so 100% damit zufrieden.
Hat von euch jemand so etwas in der Art auch schon gebastelt oder hat eine gute Idee wie ich das vernünftig umsetzten könnte?
Hallo,
ich suche schon tagelang nach dem Fehler.
Mein Bot läuft, und ich kann Nachrichten zum Telefon schicken und auch die Nachrichten vom Telefon werden im FHEM angezeigt.
Nun möchte ich mit myMsgConfig ein Menü erstellen.
Im EventMonitor kommt immer, wenn ich was an den FHEM sende folgende Nachricht:
msgConfig myMsgConfig ERROR RCV (NamemeinesBot) (hier meine msgPeerId): Missing reference in msgContact attribute of any device
Kann mir bitte jemand helfen, an welcher Schraube ich drehen muß? Ich habe alles, was ich gefunden habe schon probiert.
Dankeschön
Es handelt sich um eine Fehlermeldung aus dem msgConfig Modul, die da besagt, dass die Nachricht nicht zugeordnet werden kann. Du brauchst für jeden Benutzer ein ROOMMATE in dem die Kontaktinformationen hinterlegt sind.
Hallo Zusammen,
mein Dialoge antworten nicht mehr :-[
Also im erstenj Moment der meta_Dialog zum Anzeigen aller verfügbaren Dialoge.
Ich habe mir schon einen Wolf gesucht aber leider nichts finden können. TelegramBot arbeitet ohne Probleme.
Hier mal ein paar Listings - vielleicht seht ihr ja wo der Fehler liegt...
TelegramBot:
list fhemBot
Internals:
FAILS 0
NAME fhemBot
NR 54
OLD_POLLING 126
POLLING 126
SNAME fhemBot
STATE Polling
TYPE TelegramBot
UPDATER 0
WAIT 0
me 123456789:FHEM:@usernamebot
offset_id 124465321
sentLastResult SUCCESS
sentMsgId 24078
sentMsgOptions
sentMsgPeer Sebastian_nachname
sentMsgPeerId 123456789
sentMsgResult SUCCESS
sentMsgText Favoriten beendet
Contacts:
123456789 123456789:Sebastian_nachname:@username
HU_DO_PARAMS:
NAME
addr https://api.telegram.org:443
auth 0
boundary TelegramBot_boundary-x0123
buf
code 200
compress 1
conn
data
displayurl <hidden>
header agent: TelegramBot/1.0
User-Agent: TelegramBot/1.0
Accept: application/json
Accept-Charset: utf-8
Content-Type: multipart/form-data; boundary=TelegramBot_boundary-x0123
hideurl 1
host api.telegram.org
httpheader HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Thu, 09 Aug 2018 08:19:23 GMT
Content-Type: application/json
Content-Length: 307
Connection: close
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Expose-Headers: Content-Length,Content-Type,Date,Server,Connection
Strict-Transport-Security: max-age=31536000; includeSubdomains
hu_blocking 0
hu_filecount 51
hu_port 443
hu_portSfx
loglevel 4
method POST
path /bot123456789:AAFJlxVxmjbrAZH0ZzWDcvkxd2YPm6xqtlg/editMessageText
protocol https
redirects 0
timeout 30
url https://api.telegram.org/bot123456789:AAFJlxVxmjbrAZH0ZzWDcvkxd2YPm6xqtlg/editMessageText
args:
123456789
Favoriten beendet
undef
10
24078
undef
1
hash:
sslargs:
HU_UPD_PARAMS:
FD 5
NAME
addr https://api.telegram.org:443
auth 0
buf
code 200
compress 1
displayurl <hidden>
header agent: TelegramBot/1.0
User-Agent: TelegramBot/1.0
Accept: application/json
Accept-Charset: utf-8
hideurl 1
host api.telegram.org
hu_blocking 0
hu_filecount 1910
hu_port 443
hu_portSfx
isPolling update
loglevel 4
method GET
offset 124465321
path /bot123456789:.../getUpdates?offset=124465321&limit=5&timeout=120
protocol https
redirects 0
timeout 245
url https://api.telegram.org/bot123456789:.../getUpdates?offset=124465321&limit=5&timeout=120
hash:
sslargs:
READINGS:
2017-10-12 10:44:30 Contacts 123456789:Sebastian_nachname:@username
2018-08-09 03:13:36 PollingErrCount 2
2018-08-09 03:13:36 PollingLastError Callback returned error :Bad Gateway:
2017-11-16 07:08:25 _sentMsgId 12940
2018-02-22 19:24:28 msg ACHTUNG Agave2_flower muss gegossen werden!
2018-08-09 10:39:42 msgChat Sebastian_nachname
2018-08-09 10:39:42 msgChatId 123456789
2018-08-09 10:39:42 msgFileId
2018-08-09 10:39:42 msgId 24090
2018-08-09 10:39:42 msgPeer Sebastian_nachname
2018-08-09 10:39:42 msgPeerId 123456789
2018-08-09 10:39:42 msgReplyMsgId
2018-08-09 10:39:42 msgText Q
2018-08-09 10:39:42 prevMsgChat Sebastian_nachname
2018-08-09 10:39:42 prevMsgFileId
2018-08-09 10:39:42 prevMsgId 24089
2018-08-09 10:39:42 prevMsgPeer Sebastian_nachname
2018-08-09 10:39:42 prevMsgPeerId 123456789
2018-08-09 10:39:42 prevMsgReplyMsgId
2018-08-09 10:39:42 prevMsgText Q
2018-08-09 10:19:23 queryData TBOT_FAVORITE_CANCEL
2018-08-09 10:19:23 queryID 1120423487649871249
2018-08-09 10:19:23 queryPeer Sebastian_nachname
2018-08-09 10:19:23 queryPeerId 123456789
2018-08-09 10:19:23 queryReplyMsgId 24078
2018-08-09 10:39:42 replyId Sebastian_nachname
2018-01-05 11:00:00 rg_Gast_sentMsgId
2018-08-09 10:19:23 rr_Sebastian_sentMsgId 24078
2018-08-09 10:19:23 sentMsgId 24078
2018-08-09 10:19:23 sentMsgPeerId 123456789
2018-08-09 10:19:23 sentMsgResult SUCCESS
2018-02-10 12:29:35 state msg sz_bwm
inlinechats:
sentQueue:
Attributes:
alias Telegram Bot
allowUnknownContacts 0
cmdFavorites /menu
cmdKeyword doit
cmdRestrictedPeer @username
cmdReturnEmptyResult 0
defaultPeer @username
favoritesInline 1
group Kommunikation
icon telegram
pollingTimeout 120
room 91_Webdevices
stateFormat msgText
userReadings replyId:msgText.* {ReadingsVal($name, "msgChat", "") eq "" ? ReadingsVal($name, "msgPeerId", "") : (split(" ", ReadingsVal($name, "msgChat", ""), 2))[0]}
utf8Special 1
verbose 5
msgConfig:
list globalMsg
Internals:
NAME globalMsg
NOTIFYDEV TYPE=(Jabber|TelegramBot|yowsup)
NR 98
NTFY_ORDER 50-globalMsg
STATE 1
TYPE msgConfig
READINGS:
2018-08-09 06:03:02 fhemMsgAudio ...
2018-08-09 06:03:02 fhemMsgAudioGw play1_wz:OK
2018-08-09 06:03:02 fhemMsgAudioPrio 0
2018-08-09 06:03:02 fhemMsgAudioState 1
2018-08-09 06:03:02 fhemMsgAudioTitle -
2018-08-09 07:35:34 fhemMsgPush ...
2018-08-09 07:35:34 fhemMsgPushGw fhemBot:OK
2018-08-09 07:35:34 fhemMsgPushPrio 0
2018-08-09 07:35:34 fhemMsgPushState 1
2018-08-09 07:35:34 fhemMsgPushTitle -
2018-08-09 07:35:34 fhemMsgState 1
2018-08-09 07:35:34 fhemMsgStateTypes push:1
Attributes:
comment FHEM Global Configuration for command 'msg'
devStateIcon {ReadingsVal($name,"STATE","1") eq "1" ? ".*:ios-on-blue" : ".*:ios-NACK"}
group Global
icon rc_SETUP
msgContactAudio play1_wz
msgContactLight fl_tischlampe_licht
msgContactPush fhemBot
msgContactScreen KODI
msgDialog_evalSpecials me=Q
TelegramBot=fhemBot
msgDialog_msgCommand msg push \@$recipients $message
msgFwPrioGoneAudio -2
msgResidentsDev rgr_zuhause
msgTitleAudio jingle
msgType text
room 90_System
stateFormat fhemMsgState
userattr msgDialog_evalSpecials:textField-long msgDialog_msgCommand:textField
verbose 5
meta_Dialog:
list meta_Dialog
Internals:
DEF {
"%me%": {
"match": "\/?(start|%me%)",
"commands": "deletereading TYPE=msgDialog $recipient_history",
"message": [
"{return('(' . join(') (', sort(split('\n', fhem('get TYPE=msgDialog:FILTER=NAME!=$SELF:FILTER=NAME!=.*_fav:FILTER=NAME!=.*_sys:FILTER=NAME!=.*_user:FILTER=allowed=.*($recipient|everyone).* trigger')))) . ') ')}",
"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."
]
}
}
MSGCOMMAND msg push \@$recipients $message
NAME meta_Dialog
NOTIFYDEV TYPE=(ROOMMATE|GUEST)
NR 152
NTFY_ORDER 50-meta_Dialog
STATE everyone,rr_Sebastian:
TRIGGER beenden,zurück,Q,abbrechen
TYPE msgDialog
READINGS:
2018-08-09 10:28:52 everyone_history
2018-08-09 10:28:52 rr_Sebastian_history
2018-08-09 10:28:52 state everyone,rr_Sebastian:
Attributes:
alias 1 meta_Dialog
allowed everyone,rr_Sebastian
group Dialog
icon dialog@green
room 91_Webdevices
verbose 5
Log mit verbose 5 beim Aufruf von %me (in meinem Fall Q):
2018.08.09 10:54:17 5: msg: found types=push
2018.08.09 10:54:17 5: msg: found priority=2018.08.09
2018.08.09 10:54:24 5: TelegramBot_Callback fhemBot: called from Polling
2018.08.09 10:54:24 5: TelegramBot_Callback fhemBot: data returned :{"ok":true,"result":[{"update_id":124465321,
"message":{"message_id":24091,"from":{"id":123456789,"is_bot":false,"first_name":"Sebastian","last_name":"nachname","username":"username","language_code":"de"},"chat":{"id":123456789,"first_name":"Sebastian","last_name":"nachname","username":"username","type":"private"},"date":1533804864,"text":"Q"}}]}:
2018.08.09 10:54:24 5: TelegramBot_Deepencode fhemBot: encoded a String from :1: to :1:
2018.08.09 10:54:24 5: TelegramBot_Deepencode fhemBot: found an ARRAY
2018.08.09 10:54:24 5: TelegramBot_Deepencode fhemBot: encoded a String from :1533804864: to :1533804864:
2018.08.09 10:54:24 5: TelegramBot_Deepencode fhemBot: encoded a String from :username: to :username:
2018.08.09 10:54:24 5: TelegramBot_Deepencode fhemBot: encoded a String from :de: to :de:
2018.08.09 10:54:24 5: TelegramBot_Deepencode fhemBot: encoded a String from :123456789: to :123456789:
2018.08.09 10:54:24 5: TelegramBot_Deepencode fhemBot: encoded a String from :0: to :0:
2018.08.09 10:54:24 5: TelegramBot_Deepencode fhemBot: encoded a String from :Sebastian: to :Sebastian:
2018.08.09 10:54:24 5: TelegramBot_Deepencode fhemBot: encoded a String from :nachname: to :nachname:
2018.08.09 10:54:24 5: TelegramBot_Deepencode fhemBot: found a HASH
2018.08.09 10:54:24 5: TelegramBot_Deepencode fhemBot: encoded a String from :24091: to :24091:
2018.08.09 10:54:24 5: TelegramBot_Deepencode fhemBot: encoded a String from :Q: to :Q:
2018.08.09 10:54:24 5: TelegramBot_Deepencode fhemBot: encoded a String from :private: to :private:
2018.08.09 10:54:24 5: TelegramBot_Deepencode fhemBot: encoded a String from :Sebastian: to :Sebastian:
2018.08.09 10:54:24 5: TelegramBot_Deepencode fhemBot: encoded a String from :nachname: to :nachname:
2018.08.09 10:54:24 5: TelegramBot_Deepencode fhemBot: encoded a String from :username: to :username:
2018.08.09 10:54:24 5: TelegramBot_Deepencode fhemBot: encoded a String from :123456789: to :123456789:
2018.08.09 10:54:24 5: TelegramBot_Deepencode fhemBot: found a HASH
2018.08.09 10:54:24 5: TelegramBot_Deepencode fhemBot: found a HASH
2018.08.09 10:54:24 5: TelegramBot_Deepencode fhemBot: encoded a String from :124465321: to :124465321:
2018.08.09 10:54:24 5: TelegramBot_Deepencode fhemBot: found a HASH
2018.08.09 10:54:24 5: TelegramBot_Deepencode fhemBot: found a HASH
2018.08.09 10:54:24 5: TelegramBot_Callback fhemBot: after encoding
2018.08.09 10:54:24 5: TelegramBot_Callback fhemBot: polling returned result? 1
2018.08.09 10:54:24 5: UpdatePoll fhemBot: number of results 1
2018.08.09 10:54:24 5: UpdatePoll fhemBot: parse result
2018.08.09 10:54:24 4: TelegramBot_ParseMsg fhemBot: Textmessage
2018.08.09 10:54:24 4: TelegramBot_ParseMsg fhemBot: text :Q:
2018.08.09 10:54:24 4: TelegramBot_ContactUpdate # Contacts in hash before :1:
2018.08.09 10:54:24 4: TelegramBot_ContactUpdate # Contacts in hash after :1:
2018.08.09 10:54:24 4: TelegramBot_GetFullnameForContact # Contacts is 123456789:Sebastian_nachname:@username:
2018.08.09 10:54:24 4: TelegramBot_GetFullnameForContact # name is Sebastian_nachname
2018.08.09 10:54:24 4: TelegramBot_GetFullnameForContact # Contacts is 123456789:Sebastian_nachname:@username:
2018.08.09 10:54:24 4: TelegramBot_GetFullnameForContact # name is Sebastian_nachname
2018.08.09 10:54:24 5: msgConfig globalMsg: called function msgConfig_Notify()
2018.08.09 10:54:24 5: TelegramBot_Set fhemBot: called
2018.08.09 10:54:24 5: TelegramBot_UpdatePoll fhemBot: called
2018.08.09 10:54:24 5: TelegramBot_UpdatePoll fhemBot: - Initiate non blocking polling - With callback set
2018.08.09 10:54:24 5: TelegramBot_readToken: Read Telegram API token from file
2018.08.09 10:54:24 4: TelegramBot_UpdatePoll fhemBot: initiate polling with nonblockingGet with 120s
2018.08.09 10:54:24 5: TelegramBot_UpdatePoll fhemBot: - Ende > next polling started
2018.08.09 10:54:24 4: TelegramBot_Callback fhemBot: resulted in SUCCESS from Polling
2018.08.09 10:54:24 5: TelegramBot_Callback fhemBot: - Ende > Control back to FHEM
2018.08.09 10:54:31 5: msgDialog (meta_Dialog) - entering msgDialog_Notify
Falls noch was fehlen sollte kann ich das gerne nachliefern.
Vorab schon mal danke.
VG Sebastian
Guck doch mal bitte in den EventMonitior, wenn du eine Nachricht schickst. Ich kann aktuell nichts erkennen warum es nicht funktioniert.
Hast du etwas an deiner Installation geändert (update oder so)?
Hi,
im Eventmonitor ist erschreckend wenig zu sehen wenn ich %me% sende:
2018-08-10 18:43:05 TelegramBot fhemBot msgId: 24451
2018-08-10 18:43:05 TelegramBot fhemBot msgPeer: Sebastian_nachname
2018-08-10 18:43:05 TelegramBot fhemBot msgPeerId: 123456789
2018-08-10 18:43:05 TelegramBot fhemBot msgChat: Sebastian_nachname
2018-08-10 18:43:05 TelegramBot fhemBot msgChatId: 123456789
2018-08-10 18:43:05 TelegramBot fhemBot msgText: Q
2018-08-10 18:43:05 TelegramBot fhemBot msgReplyMsgId:
2018-08-10 18:43:05 TelegramBot fhemBot msgFileId:
2018-08-10 18:43:05 TelegramBot fhemBot replyId: Sebastian_Moebus
Scheint so als würde der metaDialog überhaupt nicht lauschen...
Updates? Ja mein FHEM ist immer aktuell. Habe aber gefühlt ewig nichts mehr an den Dialogen geschraubt.
VG Sebastian
Es scheint die vermittliung durch das msgConfig device zu fehlen, an der stelle solltest du ansetzen.
ZitatEs scheint die vermittliung durch das msgConfig device zu fehlen, an der stelle solltest du ansetzen.
Habs schon mit dem Minimal-msgConfig device aus dem Wiki versucht. Keine Änderung.
Ansonsten funktioniert das msgConfig device normal. Es routet zB. brav speak nach push, wenn kein msgContactAudio Attribut gesetzt ist.
Werde mal weiter fahnden...
VG Sebastian
Moin,
dachte schon den Fehler gefunden zu haben. Ein Klassiker eigentlich...
ZitatEs ist darauf zu achten, dass das Reading fhemMsgRcvPush ein Event erzeugt. Siehe auch Attribut "allowed" in msgDialog.
Event kommt wieder - aber leider kommt immer noch keine Antwort zurück.
Wollte dann nochmal mit dem metaDialog aus dem Wiki starten. Bekomme dann aber einen Fehler nach RAW-Import und Execute Commands:
Usage: define msgDialog {JSON}
invalid character encountered while parsing JSON string, at character offset 11 (before "\n "match": "\\/?...") at ./FHEM/76_msgDialog.pm line 93.
Scheint mir so als meckert er die RegEx an. Warum auch immer...? Line 93 ist die hier:
$DEF = eval{JSON->new->decode($DEF)};
Meine libjson-perl ist diese:
libjson-perl ist schon die neueste Version (2.90-1).
So langsam gehen mir die Ideen aus. bzw. bekomme ich jetzt noch nicht mal mehr den metaDialog zurück ins System...
Alles sehr komisch... :o
VG Sebastian
Wenn ich mich richtig erinnere habe ich beim Metadialog aus dem wiki auch eine solche Meldung erhalten. Lag evtl. am Weg des Einfügens. Da waren irgendwelche unsichtbaren Sonderzeichen drin.
Bei mir geht es mit copy/paste aus dem Wiki. Versuch es doch mal von hier:
defmod meta_Dialog msgDialog {\
"%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."\
]\
}\
}
attr meta_Dialog allowed everyone
Zitat von: igami am 12 August 2018, 10:02:45
Bei mir geht es mit copy/paste aus dem Wiki. Versuch es doch mal von hier:
defmod meta_Dialog msgDialog {\
"%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."\
]\
}\
}
attr meta_Dialog allowed everyone
Leider nein:
Usage: define msgDialog {JSON}
invalid character encountered while parsing JSON string, at character offset 11 (before "\n "match": "\\/?...") at ./FHEM/76_msgDialog.pm line 93.
Und als ob das noch nicht genügt:
Habe dann eine fhem.cfg und fhem.save von gestern eigespielt. Nach Neustart sind alle msgDialog-devices verschwunden :(
Messages collected while initializing FHEM:
No global configuration device defined: Please define a msgConfig device first
No global configuration device defined: Please define a msgConfig device first
No global configuration device defined: Please define a msgConfig device first
No global configuration device defined: Please define a msgConfig device first
No global configuration device defined: Please define a msgConfig device first
No global configuration device defined: Please define a msgConfig device first
No global configuration device defined: Please define a msgConfig device first
No global configuration device defined: Please define a msgConfig device first
No global configuration device defined: Please define a msgConfig device first
No global configuration device defined: Please define a msgConfig device first
No global configuration device defined: Please define a msgConfig device first
No global configuration device defined: Please define a msgConfig device first
No global configuration device defined: Please define a msgConfig device first
No global configuration device defined: Please define a msgConfig device first
No global configuration device defined: Please define a msgConfig device first
No global configuration device defined: Please define a msgConfig device first
./log/fhem.save: Please define Abwesenheit_Dialog_user first
Please define Abwesenheit_Dialog_user first
Please define Beleuchtung_Dialog first
Please define Berechtigungen_Dialog_sys first
Please define Bewohner_Dialog first
Please define Fahrzeit_Dialog_user first
Please define Favoriten_Dialog first
Please define Gast_Dialog_user first
Please define Haus_Automatisierung_Dialog_fav first
Please define Kamera_Dialog_fav first
Please define Notfall_Dialog first
Please define Status_dialog_sys first
Please define Steckdosen_Dialog_fav first
Please define System_Dialog first
Please define Systemverwaltung_Dialog_sys first
Please define Tagesschau_Dialog_fav first
Please define meta_Dialog first
Das angemeckerte fehlende msgConfig device ist vorhanden und komplett konfiguriert:
Internals:
NAME globalMsg
NOTIFYDEV TYPE=(Jabber|TelegramBot|yowsup)
NR 352
NTFY_ORDER 50-globalMsg
STATE 1
TYPE msgConfig
READINGS:
2018-08-12 09:44:29 fhemMsgAudio ...
2018-08-12 09:44:29 fhemMsgAudioGw play1_wz:OK
2018-08-12 09:44:29 fhemMsgAudioPrio 0
2018-08-12 09:44:29 fhemMsgAudioState 1
2018-08-12 09:44:29 fhemMsgAudioTitle -
2018-08-12 09:42:30 fhemMsgPush FHEM1 wurde soeben neu gestartet!
2018-08-12 09:42:30 fhemMsgPushGw fhemBot:OK
2018-08-12 09:42:30 fhemMsgPushPrio 0
2018-08-12 09:42:30 fhemMsgPushState 1
2018-08-12 09:42:30 fhemMsgPushTitle -
2018-08-12 09:44:29 fhemMsgState 1
2018-08-12 09:44:29 fhemMsgStateTypes audio:1
Attributes:
comment FHEM Global Configuration for command 'msg'
group Global
icon rc_SETUP
msgCmdScreen KODI
msgContactAudio play1_wz
msgContactLight fl_tischlampe_licht
msgContactPush fhemBot
msgDialog_evalSpecials me=Q\
TelegramBot=fhemBot
msgResidentsDev <mein RESIDENTS device>
msgTitleAudio jingle
msgType text
room 90_System
stateFormat fhemMsgState
userattr msgDialog_evalSpecials:textField-long msgDialog_msgCommand:textField
verbose 2
Was läuft hier denn gerade für ein Film?! :o
Das msgDevice fehlte irgendwann zwischendurch mal. Die Meldungen werden nicht aufgeräumt, wenn es wieder da ist.
Schau mal im Notepad++, und lass dir dort alle Zeichen anzeigen. Liegt vielleicht am genutzten Browser oder irgendeine BS-Einstellung.
ZitatDas msgDevice fehlte irgendwann zwischendurch mal.
Korrekt, das msgConfig device wurde gelöscht und neu angelegt.
Es ist aber in unveränderter Form aus dem Backup wiederhergestellt.
Mehr als fhem.cfg und fhem.save muss ich doch nicht wiederherstellen oder?
ZitatDie Meldungen werden nicht aufgeräumt, wenn es wieder da ist.
Hmmm, das motd-Attribut aus der Sicherung ist leer. Die Meldungen sind also vom aktuellen Start.
ZitatSchau mal im Notepad++, und lass dir dort alle Zeichen anzeigen.
Was meinst du mit allen Zeichen anzeigen lassen?
Ich habe Dialoge mit Emojis, hatte aber noch nie Probleme damit. Der metaDialog hat zB. keine
und der lässt sich nicht per RAW importieren.
ZitatLiegt vielleicht am genutzten Browser oder irgendeine BS-Einstellung.
Hmm, was hat der Browser damit zu tun? Nutze ausschließlich Chrome und das
FHEM läuft auf einem aktuellen Debian Stretch. Aber mit Firefox gehts auch nicht...
Dann einfach mal Stück für Stück abtippen ;)
Hab jetzt mal mit
define metaDialog msgDialog {}
den nackten metaDialog erstellt und dann im DEF Fenster
{
"%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."
]
}
}
eingegeben (also schon noch c&p ;))
FHEM meldet stur:
Usage: define <name> msgDialog {JSON}
invalid character encountered while parsing JSON string, at character offset 11 (before "\n "match": "\\/?...") at ./FHEM/76_msgDialog.pm line 93.
https://jsonlint.com/ sagt aber bei Validate JSON
Valid JSON
in grün. Kein Gemecker. ???
Moin,
wenn ich in DEF versuche den metaDialog einzufügen kommt folgender Fehler:
Usage: define <name> msgDialog {JSON}
invalid character encountered while parsing JSON string, at character offset 11 (before "\n "match": "\\/?...") at ./FHEM/76_msgDialog.pm line 93.
Vor dem Zeilenumbruch kommt ein {
Wenn ich dagegen in RAW versuche den metaDialog einzufügen kommt diese Fehlermeldung:
Usage: define msgDialog {JSON}
'"' expected, at character offset 1 (before "(end of string)") at ./FHEM/76_msgDialog.pm line 93.
Was bedeutet in diesem Zusammenhang character offset 1 bzw. 11?
Wie bereits vorher geschrieben, ist das JSON selbst laut jsonlint.com (http://jsonlint.com) in Ordnung.
VG Sebastian
Ich glaube es waren die Leerzeichen bei mir damals. Da waren keine normalen Leerzeichen sondern geschützte oder Tabs. Damit kommen die unterschiedlichen Parser anders mit zurecht. Habe diese im notepad suchen und ersetzen lassen.
Offset ist das Zeichen in der Zeile.
Versuch mal die Leerzeichen der angemahnten Zeile zu entfernen. Das sollte eine geänderte Fehlermeldung geben.
Edit: ggf. auch den Zeilenumbruch neu machen.
Hallo,
also auf einem fast nackten und aktuellen FHEM funktioniert alles tiptop:
This is perl 5, version 24, subversion 1 (v5.24.1)
libjson-perl ist schon die neueste Version (2.90-1).
Auf dem betroffenen System laufen diese Versionen:
This is perl 5, version 26, subversion 1 (v5.26.1)
libjson-perl ist schon die neueste Version (2.90-1).
Am Ende ein PERL Problem?!
Auf beiden wurde getestet mit diesem Code:
{
"%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."
]
}
}
Der Code wurde nach einem validate auf jsonlint.com direkt per c&p in DEF eingefügt.
Nächste Frage: Wie komme ich mit PERL wieder nach 5.24.1?
VG Sebastian
Mit perl 5.26 wurde Unicode 9.0 unterstützt. Da gab es auf jeden Fall Anpassungen an LineBreaks.
Versuch mal meinen Vorschlag Leerzeichen und Linebreaks in den ersten vier Zeilen in einem Texteditor zu löschen und neu zu schreiben. Dann sollte eine andere Zeile beanstandet werden.
Hi Wuehler,
habe diesen Code eingefügt:
{"%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."
]
}
}
Die Fehlermeldung lautet nun:
Usage: define <name> msgDialog {JSON}
':' expected, at character offset 8 (before "match": "\\/?(start|...") at ./FHEM/76_msgDialog.pm line 93.
Offset 8 ist das ":"
: gelöscht und wieder eingetragen: keine Veränderung ???
Trotzdem Danke für den Support. :)
Hast du schon mal folgendes nachgeschaut:
https://forum.fhem.de/index.php/topic,77297.msg743993.html#msg743993 (https://forum.fhem.de/index.php/topic,77297.msg743993.html#msg743993)
Zitat von: Wuehler am 13 August 2018, 20:15:18
Hast du schon mal folgendes nachgeschaut:
https://forum.fhem.de/index.php/topic,77297.msg743993.html#msg743993 (https://forum.fhem.de/index.php/topic,77297.msg743993.html#msg743993)
Moin,
danke dir das war es! Im Attribut msgDialog_evalSpecials hat sich noch ein Backslash versteckt/eingeschlichen.
msgDialog_evalSpecials me=Q\
TelegramBot=fhemBot
Deshalb hat FHEM beim editieren in DEF und RAW - zurecht - ständig gemeckert. Wie so oft ein Layer 8 Problem ;D
Danke dir fürs Helfen! Jetzt kann ich mich wieder auf die Suche nach meinem eigentlichehn Problem machen... ;)
VG Sebastian
Meine Dialoge sind wieder online :)
Da ich nicht das Gegenteil beweisen kann, lag es wohl an mir... ::)
Danke an alle für eure Tipps und Hilfestellungen!
VG Sebastian
Hallo Leute
ich bin echt grad am verzweifeln und komme nicht weiter. Ich kriege einfach keine Antwort vom Boot. Telegram läuft soweit.. Was mache ich falsch??
myMsgConfig
defmod myMsgConfig msgConfig
attr myMsgConfig userattr evalSpecials:textField-long msgDialog_evalSpecials:textField-long msgDialog_msgCommand:textField
attr myMsgConfig comment FHEM Global Configuration for command 'msg'
attr myMsgConfig evalSpecials me=XXXX\
TelegramBot=XXX_Telegram
attr myMsgConfig group Global
attr myMsgConfig msgContactPush XXX_Telegram
attr myMsgConfig msgType text
attr myMsgConfig room Telegram
attr myMsgConfig stateFormat fhemMsgState
attr myMsgConfig verbose 3
setstate myMsgConfig 1
msgPushReceived notify
defmod msgPushReceived notify .*(msgText|queryData|(OTR)?LastMessage|message):(\n|.)* {\
my ($recipient, $received);;\
my $TYPE = InternalVal($NAME, "TYPE", "");;\
\
if($TYPE eq "TelegramBot" && $EVENT =~ m/^msgText/){\
$recipient = ReadingsVal($NAME, "msgPeerId", undef);;\
$received = ReadingsVal($NAME, "msgText", undef);;\
}\
elsif($TYPE eq "TelegramBot" && $EVENT =~ m/^queryData/){\
$recipient = ReadingsVal($NAME, "queryPeerId", undef);;\
$received = ReadingsVal($NAME, "queryData", undef);;\
}\
elsif($TYPE eq "Jabber" && $EVENT =~ m/^((OTR)?Last)Message/){\
$received = ReadingsVal($NAME, $1."Message", undef);;\
($recipient) = (ReadingsVal($NAME, $1."SenderJID", undef) =~ m/[^\/]+/g);;\
}\
elsif($TYPE eq "yowsup" && $EVENT =~ m/^message/){\
$recipient = $NAME;;\
$NAME = $modules{yowsup}{defptr}{yowsup}->{NAME};;\
$received = ReadingsVal($NAME, "message", undef);;\
}\
\
return unless($recipient && $received ne "");;\
\
my @contacts = devspec2array("TYPE=(ROOMMATE|GUEST):FILTER=msgContactPush=.*$recipient.*");;\
\
if(@contacts){\
foreach (@contacts){\
my $dev_hash = $defs{$_};;\
\
readingsBeginUpdate($dev_hash);;\
readingsBulkUpdate($dev_hash, "fhemMsgPushReceived", $received);;\
readingsBulkUpdate($dev_hash, "fhemMsgPushReceivedContact", $NAME);;\
readingsEndUpdate($dev_hash, 1);;\
}\
}\
else{\
fhem("msg push Unbekannter Kontaktversuch über $NAME von $recipient:\n$received");;\
}\
}
attr msgPushReceived devStateIcon {ReadingsVal($name, "state", "inactive") eq "active" ? ".*:ios-on-blue:inactive" : ".*:ios-off:active"}
attr msgPushReceived icon audio_mic
attr msgPushReceived room Telegram
setstate msgPushReceived 2018-08-18 15:08:02
setstate msgPushReceived 2018-08-18 14:29:36 state active
Waschmaschine Dialog
defmod Waschmaschine_Dialog msgDialog { "Waschmaschine": {\
"message": [\
"{return('(Zeitprogramm stoppen) ') if(ReadingsVal('%controlUnit%', 'controlMode', '') eq 'auto')}",\
"{return('(programmieren) (einschalten) ') if(ReadingsVal('%actor%', 'state', '') ne 'on')}",\
"(Verlaufsdiagramm) ",\
"(abbrechen) ",\
"{return('Waschmaschine: ' . (ReadingsVal('%actor%', 'state', '') eq 'on' ? 'eingeschaltet' : 'ausgeschaltet'))}",\
"{return('Modus: ' . (ReadingsVal('%controlUnit%', 'controlMode', '') eq 'auto' ? 'Automatik' : 'Manuell (' . ReadingsVal('%controlUnit%', 'time', '') . ')'))}"\
],\
"Zeitprogramm stoppen": {\
"commands": "set %controlUnit% controlMode manual",\
"message": [\
"(%me%) ",\
"Das Zeitprogramm wurde gestoppt."\
]\
},\
"programmieren": {\
"message": [\
"(bestätigen|abbrechen) ",\
"(00:00:00_00|00:30:00_30|01:00:01_00|01:30:01_30|02:00:02_00|02:30:02_30) ",\
"(03:00:03_00|03:30:03_30|04:00:04_00|04:30:04_30|05:00:05_00|05:30:05_30) ",\
"(06:00:06_00|06:30:06_30|07:00:07_00|07:30:07_30|08:00:08_00|08:30:08_30) ",\
"(09:00:09_00|09:30:09_30|10:00:10_00|10:30:10_30|11:00:11_00|11:30:11_30) ",\
"(12:00:12_00|12:30:12_30|13:00:13_00|13:30:13_30|14:00:14_00|14:30:14_30) ",\
"(15:00:15_00|15:30:15_30|16:00:16_00|16:30:16_30|17:00:17_00|17:30:17_30) ",\
"(18:00:18_00|18:30:18_30|19:00:19_00|19:30:19_30|20:00:20_00|20:30:20_30) ",\
"(21:00:21_00|21:30:21_30|22:00:22_00|22:30:22_30|23:00:23_00|23:30:23_30) ",\
"Wann soll die Wäsche fertig sein?",\
"Bitte Uhrzeit in HH:MM angeben.",\
"Aktuell ist [%controlUnit%:time] Uhr eingestellt."\
],\
"Uhrzeit": {\
"match": "([0-1][0-9]|2[0-3])[:_][0-5][0-9]",\
"commands": [\
"{my $time = '$message';;;; $time =~ s/_/:/;;;; fhem(\"set %controlUnit% time $time\");;;;}",\
"set $SELF say @$recipient Waschmaschine|programmieren|bestätigen"\
]\
},\
"bestätigen": {\
"commands": "set %controlUnit% controlMode auto",\
"message": [\
"(%me%) ",\
"Das Zeitprogramm wurde eingestellt.",\
"Die Wäsche wird voraussichtlich um [%controlUnit%:time] Uhr fertig sein.",\
"Bitte die Waschmaschine vorbereiten."\
]\
}\
},\
"einschalten": {\
"commands": [\
"set %controlUnit% controlMode manual",\
"set %actor% on"\
]\
},\
"Verlaufsdiagramm": {\
"commands": "set %TelegramBot% cmdSend {plotAsPng('%plot%')}",\
"message": [\
"(%me%) ",\
"Waschkeller: Waschmaschine"\
]\
}\
},\
"auto": {\
"setOnly": true,\
"commands": [\
"set %actor% on",\
"set %controlUnit% controlMode manual"\
],\
"message": [\
"(%me%) ",\
"Die Wachmaschine wurde automatisch eingeschaltet."\
]\
},\
"manual": {\
"setOnly": true,\
"message": [\
"(%me%) ",\
"Die Wachmaschine wurde manuell eingeschaltet."\
]\
},\
"done": {\
"setOnly": true,\
"commands": "set %actor% off",\
"message": [\
"(%me%) ",\
"Die Wachmaschine ist fertig."\
]\
}\
}\
attr Waschmaschine_Dialog room Telegram
setstate Waschmaschine_Dialog 2018-08-18 14:34:33 state Initialized
Beim Attribut msgContactPush bei rr_Reto habe ich folgendes eingegeben:
XXX_Telegram:@Nummer welcher im Telegram Bot Device unter Contacts steht
Wo ist mein Fehler??
Beim Dislog fehlt denke ich:
attr allowed rr_Reto
Zitat von: Wuehler am 18 August 2018, 16:48:54
Beim Dislog fehlt denke ich:
attr allowed rr_Reto
Menno..... ein Klick und es funktioniert.....
Das notify wird übrigens nicht mehr benötigt.
Hallo zusammen
Ich habe ein echt komisches Phänomen bei meinem Dialog. Und zwar ist es so, dass wenn ich der Reihe nach alle "Kästchen" abfrage funktioniert alles. Wenn ich jedoch direkt auf den Klima Dialog gehe und dort z.B. den Lux Werte anzeige auswähle passiert nichts. Wenn ich jedoch zuerst die aktuellen Temperaturen anzeige, anschliessend den Temperaturverlauf anzeige und dann erst die Lux Werte anzeige funktioniert es wie gewünscht....
defmod Klima_Dialog msgDialog {"02.Klima":{\
"message": [\
"(Aktuelle Temperaturen anzeigen) ",\
"(Temperatur Verlauf anzeigen) ",\
"(Helligkeits Werte anzeigen) ",\
"(Helligkeits Verlauf anzeigen) ", \
"(abbrechen) ",\
"%me% was möchtest Du tun mein Meister?:"\
],\
"Aktuelle Temperaturen anzeigen":{\
"message":[\
"Aktuelle Temperaturen:",\
"Küche: [Temp_Wohnzimmer:temperature]°C.",\
"Esszimmer: [blink:Cam_Wohnzimmer_Tempg]°C.",\
"Galerie: [blink:Cam_Galerie_Tempg]°C.",\
"Kinderzimmer Lean:[Temp_Lean:temperature]°C.",\
"Büro UG: [blink:Cam_Buero_Tempg]°C.",\
"Sitzplatz: [blink_outdoor:Cam_Garten_Tempg]°C.",\
"Vorbau: [blink_outdoor:Cam_Eingang_Tempg]°C.",\
"Fragen?"\
]},\
"Temperatur Verlauf anzeigen": {\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"{fhem(\"set %TelegramBot% cmdSend @\".\"R_Eppi {plotAsPng('SVG_FileLog_Temp_Lean_1')}\")}",\
"{fhem(\"set %TelegramBot% cmdSend @\".\"R_Eppi {plotAsPng('SVG_FileLog_Temp_Wohnzimmer_1')}\")}",\
"Temperatur Verlauf Lean & Wohnzimmer"\
]\
},\
\
\
"Helligkeits Werte anzeigen":{\
"message":[\
"Aktuelle Lux Werte:",\
"Ostseite: [Multisensor_Ost:state] lx.",\
"Südseite: [HM_Lichtsensor_Sued:state] lx.",\
"Westseite: [HM_Lichtsensor_West:state] lx.",\
"Fragen?"\
]\
},\
"Helligkeits Verlauf anzeigen": {\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"{fhem(\"set %TelegramBot% cmdSend @\".\"R_Eppi {plotAsPng('SVG_FileLog_Sensor_Licht_West_3')}\")}",\
"Helligkeitsverlauf"\
]\
},\
"Stehlampe Wohnzimmer einschalten":{\
"commands": "set Licht_Stehlampe_Wohnzimmer on",\
"message":[\
"(%me%) ",\
"Die Lampe im Wohnzimmer wurde eingeschaltet."\
]\
\
}\
}\
}
attr Klima_Dialog allowed rr_Reto
attr Klima_Dialog room Telegram
attr Klima_Dialog verbose 0
jemand eine Idee wo das Problem liegt?
Ich habe den Dialog bei mir importiert und kann direkt nach "02.Klima" auf "Helligkeits Werte anzeigen" gehen und bekomme eine Nachricht.
Poste doch mal ein List von dem Dialog, zu dem Zeitpunkt wo es nicht funktioniert.
Zitat von: igami am 22 August 2018, 05:39:37
Ich habe den Dialog bei mir importiert und kann direkt nach "02.Klima" auf "Helligkeits Werte anzeigen" gehen und bekomme eine Nachricht.
Poste doch mal ein List von dem Dialog, zu dem Zeitpunkt wo es nicht funktioniert.
Hier auch. Kann direkt zu "02.Klima" auf "Helligkeits Werte anzeigen" gehen.
VG Sebastian
Hallo Zusammen,
habe mal ein Icon für meine Dialoge gebaut. Und dazu ein passendes archetype device welches mir meine Dialoge automatisch mit Grundeinstellungen versorgt:
defmod msgConfig_archetype archetype defined_by=msgConfig_archetype TYPE=msgDialog
attr msgConfig_archetype userattr allowed
attr msgConfig_archetype alias Archetyp für msgDialog devices
attr msgConfig_archetype allowed everyone
attr msgConfig_archetype attributes allowed icon group room
attr msgConfig_archetype devStateIcon active:ios-on-blue
attr msgConfig_archetype group Dialoge
attr msgConfig_archetype icon dialog
attr msgConfig_archetype room 91_Dialogsteuerung
Vielleicht kann es ja noch jemand gebrauchen... :D
VG Sebastian
Zitat von: igami am 22 August 2018, 05:39:37
Ich habe den Dialog bei mir importiert und kann direkt nach "02.Klima" auf "Helligkeits Werte anzeigen" gehen und bekomme eine Nachricht.
Poste doch mal ein List von dem Dialog, zu dem Zeitpunkt wo es nicht funktioniert.
Also, ganz komisch! Ich habe zuerst die aktuelle Temperaturen angefragt und anschliessend den Helligkeitsverlauf. Die Temperaturen sind gekommen, der Verlauf nicht!
Hier das List des msgdDialogs:
Internals:
CFGFN
DEF {"02.Klima":{
"message": [
"(Aktuelle Temperaturen anzeigen) ",
"(Temperatur Verlauf anzeigen) ",
"(Helligkeits Werte anzeigen) ",
"(Helligkeits Verlauf anzeigen) ",
"(abbrechen) ",
"%me% was möchtest Du tun mein Meister?:"
],
"Aktuelle Temperaturen anzeigen":{
"message":[
"Aktuelle Temperaturen:",
"Küche: [Temp_Wohnzimmer:temperature]°C.",
"Esszimmer: [blink:Cam_Wohnzimmer_Tempg]°C.",
"Galerie: [blink:Cam_Galerie_Tempg]°C.",
"Kinderzimmer Lean:[Temp_Lean:temperature]°C.",
"Büro UG: [blink:Cam_Buero_Tempg]°C.",
"Sitzplatz: [blink_outdoor:Cam_Garten_Tempg]°C.",
"Vorbau: [blink_outdoor:Cam_Eingang_Tempg]°C.",
"Fragen?"
]},
"Temperatur Verlauf anzeigen": {
"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"{fhem(\"set %TelegramBot% cmdSend @\".\"R_Eppi {plotAsPng('SVG_FileLog_Temp_Lean_1')}\")}",
"{fhem(\"set %TelegramBot% cmdSend @\".\"R_Eppi {plotAsPng('SVG_FileLog_Temp_Wohnzimmer_1')}\")}",
"Temperatur Verlauf Lean & Wohnzimmer"
]
},
"Helligkeits Werte anzeigen":{
"message":[
"Aktuelle Lux Werte:",
"Ostseite: [Multisensor_Ost:state] lx.",
"Südseite: [HM_Lichtsensor_Sued:state] lx.",
"Westseite: [HM_Lichtsensor_West:state] lx.",
"Fragen?"
]
},
"Helligkeits Verlauf anzeigen": {
"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"{fhem(\"set %TelegramBot% cmdSend @\".\"R_Eppi {plotAsPng('SVG_FileLog_Sensor_Licht_West_3')}\")}",
"Helligkeitsverlauf"
]
},
"Stehlampe Wohnzimmer einschalten":{
"commands": "set Licht_Stehlampe_Wohnzimmer on",
"message":[
"(%me%) ",
"Die Lampe im Wohnzimmer wurde eingeschaltet."
]
}
}
}
MSGCOMMAND msg push \@$recipients $message
NAME Klima_Dialog
NOTIFYDEV TYPE=(ROOMMATE|GUEST)
NR 1340
NTFY_ORDER 50-Klima_Dialog
STATE rr_Reto: Aktuelle Temperaturen anzeigen
TRIGGER 02.Klima
TYPE msgDialog
OLDREADINGS:
READINGS:
2018-08-23 11:18:43 rr_Reto_history
2018-08-23 11:18:43 state rr_Reto: Aktuelle Temperaturen anzeigen
Attributes:
allowed rr_Reto
room Telegram
verbose 0
Daraus entnehme ich, dass die Anfrage gar nicht beim Dialog angekommen ist. Hier das Roomate Device:
Internals:
DEF rgr_Residents
DURATIONTIMER 1535016572.68152
NAME rr_Reto
NOTIFYDEV global,
NR 205
NTFY_ORDER 50-rr_Reto
READY 1
RESIDENTGROUPS rgr_Residents
STATE home
TYPE ROOMMATE
READINGS:
2018-08-23 11:13:32 durTimerAbsence 00:00:00
2018-08-23 11:13:32 durTimerAbsence_cr 0
2018-08-23 11:28:32 durTimerPresence 00:15:00
2018-08-23 11:28:32 durTimerPresence_cr 15
2016-01-07 05:45:26 durTimerSleep 00:00:00
2016-01-07 05:45:26 durTimerSleep_cr 0
2018-08-23 11:18:43 fhemMsgPush Aktuelle Temperaturen:
Küche: 25.8°C.
Esszimmer: 25.3°C.
Galerie: 25.3°C.
Kinderzimmer Lean:26.0°C.
Büro UG: 26.4°C.
Sitzplatz: 26.4°C.
Vorbau: 22.55°C.
Fragen?
2018-08-23 11:18:43 fhemMsgPushGw Eppi_Telegram:@285515829:OK
2018-08-23 11:18:43 fhemMsgPushPrio 0
2018-08-18 21:23:24 fhemMsgPushReceived abbrechen
2018-08-18 21:23:24 fhemMsgPushReceivedContact Eppi_Telegram
2018-08-23 11:18:43 fhemMsgPushState 1
2018-08-23 11:18:43 fhemMsgPushTitle -
2018-08-23 11:22:05 fhemMsgRcvPush Helligkeits Verlauf anzeigen
2018-08-23 11:22:05 fhemMsgRcvPushGw Eppi_Telegram
2018-08-23 11:18:43 fhemMsgState 1
2018-08-23 11:18:43 fhemMsgStateTypes push:1
2018-08-23 11:13:32 lastArrival 2018-08-23 11:13:32
2016-01-07 05:45:26 lastAwake 2016-01-07 05:45:26
2018-08-23 09:53:28 lastDeparture 2018-08-23 09:53:28
2018-08-23 11:13:32 lastDurAbsence 01:20:04
2018-08-23 11:13:32 lastDurAbsence_cr 80
2018-08-23 09:53:28 lastDurPresence 42:35:48
2018-08-23 09:53:28 lastDurPresence_cr 2556
2016-01-07 05:45:26 lastDurSleep 04:44:34
2016-01-07 05:45:26 lastDurSleep_cr 285
2017-10-25 17:57:31 lastLocation home
2018-08-23 09:53:28 lastMood calm
2016-01-07 01:00:52 lastSleep 2016-01-07 01:00:52
2018-08-23 11:13:32 lastState absent
2017-10-25 17:57:47 location home
2018-08-23 11:13:32 mood calm
2018-08-23 11:13:32 presence present
2018-08-23 11:13:32 state home
2015-12-15 06:14:57 wakeup 0
2015-12-15 06:12:18 wayhome 0
TIMER:
rr_Reto_DurationTimer:
HASH rr_Reto
MODIFIER DurationTimer
NAME rr_Reto_DurationTimer
Attributes:
alias Status Reto
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
group Home State
icon people_sensor
msgContactPush Eppi_Telegram:@xxxxxxxxx
room Steuerung
rr_realname group
sortby 4
webCmd state
Hier steht ja einerseits die aktuelle Temperatur, anderseits auch meine neue Anfrage, welche jedoch nicht weitergereicht wurde?
Jemand einen Plan?
Hallo zusammen,
Ich habe analog zum Wiki ein Meta-Menü erstellt. Das wird mir auch angezeigt. Allerdings erscheint als einziger Auswahlknopf "abbrechen"
Ich habe den Beispieldialog zur Waschmaschine in meiner fhem.cfg
Wo kann ich ansetzen ?
[Gelöst]: Mann muss offenbar "attr meta_Dialog allowed XXXX" für jeden Dialog setzen. Macht Sinn.
Hallo,
vielleicht kann mir jemand auf die Sprünge helfen.
Problem: Bild von SSCAm per Telegram auf Anforderung versenden.
Wenn ich diesen code in die fhem Kommandozeile eingebe funktioniert es:
set telegrambot sendImage @@meine_id {(ReadingsVal("syno_balkonien","full_path",""))}
im MSGDialog so, leider nicht :
"command": [
"{fhem(\"set telegrambot sendImage @@meine_id {(ReadingsVal(\"syno_balkonien\",\"full_path\",\"\"))}\")}"
]
Auch nicht wenn ich den kompletten code so in die command Zeile kopiere und die \ entferne dann kommt folgende Fehlermeldung:
Global symbol "@meine_id" requires explicit package name at (eval 7244) line 1.
syntax error at (eval 7244) line 1, near ""set telegrambot sendImage @@meine_id {(ReadingsVal("syno_balkonien"
Ich denke mal Irgendwo noch ein escapen oder "" oder {, aber ich komme nicht drauf.
Grüße
Moin,
mach doch sowas:
attr <dialog> evalSpecials datei={(ReadingsVal("syno_balkonien","full_path",""))}
Dann hast du dir das ganze Escapen gespart 8)
"command": [
"{fhem(\"set telegrambot sendImage @meine_id %datei%\")}"
]
VG Sebastian
Zitat von: binford6000 am 26 August 2018, 11:49:36
Moin,
mach doch sowas:
attr <dialog> evalSpecials datei={(ReadingsVal("syno_balkonien","full_path",""))}
Dann hast du dir das ganze Escapen gespart 8)
"command": [
"{fhem(\"set telegrambot sendImage @meine_id %datei%\")}"
]
VG Sebastian
Super, danke funktioniert nach kleiner Anpassung.
"set telegrambot sendImage @meine_id %datei% "
hat genügt.
Vielen Dank !
Nabend,
hab da ne Frage an die Experten. ich würde gerne folgendes in einem Dialog ausführen:
{qx(wget --no-cookies --no-cache --timestamping http://wetterstationen.meteomedia.de/messnetz/vorhersagegrafik/108241.png -O ./www/snapshots/4dwetter.png)}
Wie muss ich das bewerkstelligen, im Konsolenfester wird alles prima ausgeführt.
Zitat von: Smarti am 27 August 2018, 22:19:24
Wie muss ich das bewerkstelligen, im Konsolenfester wird alles prima ausgeführt.
Einfach einfügen als command:
defmod test_dialog msgDialog {\
"test": {\
"commands": "{qx(wget --no-cookies --no-cache --timestamping http://wetterstationen.meteomedia.de/messnetz/vorhersagegrafik/108241.png -O ./www/snapshots/4dwetter.png)}"\
}\
}
Zitat von: igami am 28 August 2018, 05:57:46
Einfach einfügen als command:
defmod test_dialog msgDialog {\
"test": {\
"commands": "{qx(wget --no-cookies --no-cache --timestamping http://wetterstationen.meteomedia.de/messnetz/vorhersagegrafik/108241.png -O ./www/snapshots/4dwetter.png)}"\
}\
}
Super! Das ist ja einfach...
Dann ist mir einfach noch nicht klar wann brauche ich z.B. fhem() bzw. system (). wo finde ich eine Doku?
Anderes Thema:
Gibt es auch die Möglichkeit in einen Dialog eine Passwortabfrage einzubauen, so dass diese nicht im Chatverlauf sichtbar ist...
Dank!
ZitatDann ist mir einfach noch nicht klar wann brauche ich z.B. fhem() bzw. system (). wo finde ich eine Doku?
Otto hat das Ganze mal sehr schön herausgearbeitet:
http://heinz-otto.blogspot.com/2018/02/in-fhem-externe-programme-aufrufen.html (http://heinz-otto.blogspot.com/2018/02/in-fhem-externe-programme-aufrufen.html)
{fhem("set device on");}
ist der PERL-Aufruf eines FHEM-Befehls.
VG Sebastian
Hallo,
nach der tollen Hilfe hab ich jetzt doch noch ein Problem.
Es wird leider immer das vorletzte Bild gesendet.
Hier der Aufruf
"set syno_balkonien snap ",
"sleep 5; set telegrambot sendImage %empfanger% %balkon_bild% "
Die beiden %Variablen% werden mit evalspecials direkt im modul ermittelt.
Es liegt mein user reading full_path aus dem sscamera Modul zu grunde.
Wenn ich das sscamera Modul beobachte, wird das user reading direkt geändert sobald in Telegram der Button gedrückt wird.
Wann werden denn die eval specials berechnet? Es scheint erst wenn das msgModul abgearbeitet wurde.
Dann kommt die Änderung erst beim nöchsten Aufruf zum Tragen.
Lässt sich dies beeinflussen oder gibt es eine idee wie es besser macht und die aktuelle Aufnahme gesendet werden kann.
Grüße
Schnitzelbrain
Grüße Schnitzelbrain
ZitatLässt sich dies beeinflussen oder gibt es eine idee wie es besser macht und die aktuelle Aufnahme gesendet werden kann.
Moin,
ich habe die Logik fürs Bilder senden in ein dummy + notify ausgelagert, da ich es auch an anderer Stelle nutze.
Such mal nach sleep hier im msgDialog-Thread. Das Thema ist bereits behandelt worden...
VG Sebastian
Zitat von: binford6000 am 29 August 2018, 09:02:53
Moin,
ich habe die Logik fürs Bilder senden in ein dummy + notify ausgelagert, da ich es auch an anderer Stelle nutze.
Such mal nach sleep hier im msgDialog-Thread. Das Thema ist bereits behandelt worden...
VG Sebastian
Danke für den Tipp, aber ich konnte es damit nicht Lösen.
Den Sleep hatte ich ja schon drin aber weder Zeitdauer (10 sekunden max) noch position (Vor, hinter dem anderen befehl oder auch einzeln) konnten etwas am Ergebnis ändern.
Sonst hatte ich bezüglich Sleep nix zusätzliches gefunden.
Der Sleep hat wohl verzögert (passend zu den Sekunden) aber es kam trotzdem das vorletzte Bild.
Ich habe jetzt einfach zwei getrennte Befehle geschrieben. Einmal Aufnahme und dann Abfrage.
auch wenn ich direkt nach der Aufnahme auf Versenden drücke kommt jetzt immer das aktuelle Bild.
Hallo und guten Abend,
eine kurze Frage an die Experten, denn bei meiner Suche habe ich nicht genau das gefunden, was ich gesucht habe (hoffentlich bin ich hier richtig):
Wenn meine Waschmaschine fertig ist bekomme ich per Telegram eine Nachricht, dass die Waschmaschine fertig ist - super.
Nun ist es aber so, dass ich mich "zwingen" möchte diese auszuräumen. Mit anderen Worten hätte ich gern:
- Einen Dialog, der in bestimmten Intervallen (alle 10) min "nervt", also die Nachricht wieder und wieder versendet, bis ich ein bestimmtes Schlüsselwort, oder ähnliches versendet habe, dass die Waschmaschine ausgeräumt ist.
Hat jemand sowas schon umgesetzt und kann mich auf den Weg bringen?
Liebe Grüße und einen schönen Abend
wolf
Zitat von: wolfram am 29 August 2018, 20:31:46
Hallo und guten Abend,
eine kurze Frage an die Experten, denn bei meiner Suche habe ich nicht genau das gefunden, was ich gesucht habe (hoffentlich bin ich hier richtig):
Wenn meine Waschmaschine fertig ist bekomme ich per Telegram eine Nachricht, dass die Waschmaschine fertig ist - super.
Nun ist es aber so, dass ich mich "zwingen" möchte diese auszuräumen. Mit anderen Worten hätte ich gern:
- Einen Dialog, der in bestimmten Intervallen (alle 10) min "nervt", also die Nachricht wieder und wieder versendet, bis ich ein bestimmtes Schlüsselwort, oder ähnliches versendet habe, dass die Waschmaschine ausgeräumt ist.
Hat jemand sowas schon umgesetzt und kann mich auf den Weg bringen?
Liebe Grüße und einen schönen Abend
wolf
Hallo,
ich würde beim auslösen der Telegram Nachricht noch ein Dummy setzen und in einem DOIF auswerten.
Im DOIF dann das attr repeatcmd benutzen.
Grüße Schnitzelbrain
Oder nach der message ein command "sleep ... $SELF; set $SELF say ..."
Beim abbrechen dann das sleep abbrechen, das steht in der doku zu sleep
Hallo,
zuerst einmal Danke für die Antworten/Anregungen. Ich versuche mich mich gerade grundsätzlich an den Telegram Dialogen, weil ich die Art der Kommunikation super finde, stehe aber ganz am Anfang der Lernkurve (copy&paste klappt schon ganz gut 8) ).
Zum Thema:
Im Moment schreibe ich in einen Dummy, wenn die Waschmaschine fertig ist. Den prüf ich dann ganz simpel mit einem Notify, das dann die Nachricht versendet:
HR.SpuelmaschineBetrieb:standby set telebot msg 🖐 Die Spülmaschine ist fertig 🖐
Klar, kann ich das Notify um einige Befehle erweitern, das bekomme ich schon hin:
HR.SpuelmaschineBetrieb:standby set telebot msg 🖐 Die Spülmaschine ist fertig 🖐;sleep 10;set telebot msg 🖐 Die Spülmaschine ist fertig und noch nicht ausgeräumt 🖐....usw
Das funktioniert auch. Jetzt hänge ich aber. Wie bekomme ich es 1. hin, dass ich den Dialog nicht 10 x in mein Notify schreiben muss und wie bekomme ich ein Schlüsselwort - gern auch einen Dialog hin, dass ich die Nachrichten abbrechen kann?
Wahrscheinlich ganz einfach, aber ich raff es einfach nicht :'(
Viele Grüße
wolf
Zitat von: wolfram am 30 August 2018, 12:40:43
Hallo,
zuerst einmal Danke für die Antworten/Anregungen. Ich versuche mich mich gerade grundsätzlich an den Telegram Dialogen, weil ich die Art der Kommunikation super finde, stehe aber ganz am Anfang der Lernkurve (copy&paste klappt schon ganz gut 8) ).
Zum Thema:
Im Moment schreibe ich in einen Dummy, wenn die Waschmaschine fertig ist. Den prüf ich dann ganz simpel mit einem Notify, das dann die Nachricht versendet:
HR.SpuelmaschineBetrieb:standby set telebot msg [emoji870] Die Spülmaschine ist fertig [emoji870]
Klar, kann ich das Notify um einige Befehle erweitern, das bekomme ich schon hin:
HR.SpuelmaschineBetrieb:standby set telebot msg [emoji870] Die Spülmaschine ist fertig [emoji870];sleep 10;set telebot msg [emoji870] Die Spülmaschine ist fertig und noch nicht ausgeräumt [emoji870]....usw
Das funktioniert auch. Jetzt hänge ich aber. Wie bekomme ich es 1. hin, dass ich den Dialog nicht 10 x in mein Notify schreiben muss und wie bekomme ich ein Schlüsselwort - gern auch einen Dialog hin, dass ich die Nachrichten abbrechen kann?
Wahrscheinlich ganz einfach, aber ich raff es einfach nicht :'(
Viele Grüße
wolf
Wie ich vorgeschlagen hatte.
Mit einem DOIF.
Im DOIF dann das attr repeatcmd benutzen.
Grüße Schnitzelbrain
Hallo Igami,
auch von mir zunächst einmal ein dickes "Dankeschön" für dieses Modul. nach einer gewissen Einlese- und Eingewöhnungszeit funktioniert es eigentlich auch sehr gut. Ich habe nur ein kleines "Schönheitsproblem" ;D
Ich habe beispielsweise folgenden Dialog:
defmod Informationen_dialog msgDialog {\
"Informationen": {\
"message": [\
"(mobile Blitzer|Notdienstapotheke) ",\
"(%me%) ",\
"Welche Information wird benötigt?"\
],\
\
"mobile Blitzer":{\
"message": "Aktuelle Blitzer in Deiner Umgebung (Radius: [Blitzer:maxkm] Km):\n\n[Blitzer:PushText]",\
"commands": "set $SELF say @$recipient Informationen"\
},\
\
"Notdienstapotheke": {\
"message": "Folgende Apotheke hat derzeit Notdienst:\n\n[NotdienstApotheke:STATE]",\
"commands": "set $SELF say @$recipient Informationen"\
}\
}\
}
attr Informationen_dialog allowed everyone
Funktionieren tut das soweit auch. Irgendwo in diesem Thread habe ich gelesen, dass die "commands" vor den "messages" ausgeführt werden. Das führt nun dazu, dass jedesmal bevor ich die aktuellen Blitzer zugesandt bekomme auch noch einmal die Frage gestellt bekomme "Welche Information wird benötigt?". Das macht an dieser Stelle allerdings gar keinen Sinn, sondern sie sollte sinnigerweise gesendet werden NACHDEM die aktuelle Information übermittelt wurde.
Wie gesagt nur ein Schönheitsproblem, aber gibt es irgendeine Möglichkeit die Reihenfolge wie die Nachrichten kommen zu beeinflussen?
Danke und Gruß
Wolle
Zitat von: Wolle02 am 30 August 2018, 19:56:51
Wie gesagt nur ein Schönheitsproblem, aber gibt es irgendeine Möglichkeit die Reihenfolge wie die Nachrichten kommen zu beeinflussen?
Du kannst eine message als command verschicken (ungetestet)
"commands": "msg push @$recipient ..."
Wahrscheinlich währe es aber Sinnvoll, wenn ich noch eine Möglichkeit einbaue, dass zu steuern. Neuer Parameter "intro" oder so?
Danke für den Tip.
ZitatDu kannst eine message als command verschicken (ungetestet)
"commands": "msg push @$recipient ..."
Das funtioniert gut. Die Meldungen kommen so in der richtigen Reihenfolge.
ZitatWahrscheinlich währe es aber Sinnvoll, wenn ich noch eine Möglichkeit einbaue, dass zu steuern. Neuer Parameter "intro" oder so?
Eine Möglichkeit das auch über einen Parameter steuern zu können würde wahrscheinlich die Flexibilität erhöhen, wobei ich das nicht wirklich beurteilen kann.
Vielen Dank erstmal an dich.
Vielen Dank für die Eingebungen.
Ich habe es jetzt wie folgt gelöst - kann man bestimmt besser machen, aber es läuft - Danke nochmal. Vielleicht braucht es ja ein Anfänger wie ich nochmal:
1. Ein Dummy der beim Fertigstellen des Waschgangs gesetzt wird:
define Spuelmaschine_telegram dummy
attr Spuelmaschine_telegram eventMap on:voll off:leer
attr Spuelmaschine_telegram room Kueche
attr Spuelmaschine_telegram setList voll leer
2. Einen Message Dialog für Telegram:
define D_Spueli_fertig msgDialog {\
"Spüli": {\
"message": [\
" (Ist die Spülmaschine schon ausgeräumt?) (JA|NEIN) ",\
"Meldung von 🍽",\
"Die Spülmaschine ist fertig und kann ausgeräumt werden!"\
],\
"NEIN": {\
"commands": [\
"%me%"\
]\
},\
"JA": {\
"commands": [\
"set Spuelmaschine_telegram off",\
"%me%"\
]\
}\
}\
}
attr D_Spueli_fertig allowed everyone,wolf
attr D_Spueli_fertig room Dialog
3. Das DOIF
define Spueli_message DOIF ([Spuelmaschine_telegram] eq "voll") (set D_Spueli_fertig say Spüli) DOELSEIF ([Spuelmaschine_telegram] eq "leer") (set telebot msg Sehr gut! 👍🏻 )
attr Spueli_message do always
attr Spueli_message repeatcmd 600
attr Spueli_message room Notify
Viele Grüße und ein schönes Wochenende
wolf
Vielen Dank für die Eingebungen.
Ich habe es jetzt wie folgt gelöst - kann man bestimmt besser machen, aber es läuft - Danke nochmal. Vielleicht braucht es ja ein Anfänger wie ich nochmal:
1. Ein Dummy der beim Fertigstellen des Waschgangs gesetzt wird:
define Spuelmaschine_telegram dummy
attr Spuelmaschine_telegram eventMap on:voll off:leer
attr Spuelmaschine_telegram room Kueche
attr Spuelmaschine_telegram setList voll leer
2. Einen Message Dialog für Telegram:
define D_Spueli_fertig msgDialog {\
"Spüli": {\
"message": [\
" (Ist die Spülmaschine schon ausgeräumt?) (JA|NEIN) ",\
"Meldung von 🍽",\
"Die Spülmaschine ist fertig und kann ausgeräumt werden!"\
],\
"NEIN": {\
"commands": [\
"%me%"\
]\
},\
"JA": {\
"commands": [\
"set Spuelmaschine_telegram off",\
"%me%"\
]\
}\
}\
}
attr D_Spueli_fertig allowed everyone,wolf
attr D_Spueli_fertig room Dialog
3. Das DOIF
define Spueli_message DOIF ([Spuelmaschine_telegram] eq "voll") (set D_Spueli_fertig say Spüli) DOELSEIF ([Spuelmaschine_telegram] eq "leer") (set telebot msg Sehr gut! 👍🏻 )
attr Spueli_message do always
attr Spueli_message repeatcmd 600
attr Spueli_message room Notify
Viele Grüße und ein schönes Wochenende
wolf
Hallo zusammen,
erstmal vielen Dank für das Modul!
Leider scheitere ich schon beim Einrichten.
Habe mich an den Eintrag im Wiki gehalten. Wenn ich nun den meta Dialog einrichten will erscheint:
Usage: define <name> msgDialog {JSON}
'"' expected, at character offset 1 (before "\\ "Hallo": {\\ ...") at ./FHEM/76_msgDialog.pm line 93.
Ich hatte bereits im Thread gelesen, dass das gleiche Problem hatte. Leider stehe ich total auf dem Schlauch, was die Lösung angeht.
ZitatLeerzeichen getrennte Liste von Name=Wert Paaren
Anbei mal meine RAW Definition:
defmod myMsgConfig msgConfig
attr myMsgConfig userattr msgDialog_evalSpecials:textField-long msgDialog_msgCommand:textField
attr myMsgConfig comment FHEM Global Configuration for command 'msg'
attr myMsgConfig group Global
attr myMsgConfig msgContactPush ***
attr myMsgConfig msgDialog_evalSpecials me=Hallo\ TelegramBot=***
attr myMsgConfig msgType text
attr myMsgConfig stateFormat fhemMsgState
attr myMsgConfig verbose 3
Könnte mich bitte jemand vom Schlauch schubsen... ;D
der \ hinter Hallo muss weg
Hallo,
danke für die schnelle Antwort.
Leider besteht der Fehler weiterhin.
Usage: define <name> msgDialog {JSON}
'"' expected, at character offset 1 (before "\\ "Hallo": {\\ ...") at ./FHEM/76_msgDialog.pm line 93.
Zeig doch mal bitte was du genau einfügen willst.
Ich kopiere die Definition des metaDialogs und packe ihn in die Leiste oben im FHEMWeb. Auch wenn ich einen leeren metaDialog anlege und dann in die DEF kopiere, erscheint der gleiche Fehler:
defmod meta_Dialog msgDialog {\
"%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."\
]\
}\
}
Hallo,
du musst den Code in eine RAW Definition packen und dann auf Execute commands klicken ;)
VG Sebastian
Vielen Dank, das wars! :)
Viele Grüße
Daniel
Hallo nochmal,
ich versuche mich in die Synthax für MsgDialog einzuarbeiten. Da bin ich eher schlecht als recht aufgestellt. ::)
Nun ja: Habe den msgConfig und den meta_Dialog angelegt.
Nun wollte ich mit einem ersten kleinen Dialog testen, leider passiert gar nichts, wenn ich meinem Bot "test" schreibe.
Hier mal die Raw Def vom Dialog:
defmod test msgDialog { "test": {\
"message": [\
"Das ist die Antwort"\
]\
}\
}
attr test allowed everyone
Zitat von: nanocosmos am 24 September 2018, 18:16:45
Hallo nochmal,
ich versuche mich in die Synthax für MsgDialog einzuarbeiten. Da bin ich eher schlecht als recht aufgestellt. ::)
Nun ja: Habe den msgConfig und den meta_Dialog angelegt.
Nun wollte ich mit einem ersten kleinen Dialog testen, leider passiert gar nichts, wenn ich meinem Bot "test" schreibe.
Hier mal die Raw Def vom Dialog:
defmod test msgDialog { "test": {\
"message": [\
"Das ist die Antwort"\
]\
}\
}
attr test allowed everyone
Ein Leerzeichen am Ende der message Antwort fehlt.
"Dies ist die Antwort. "
Grüße
Schnitzelbrain
Danke, hat leider aber nichts geändert.
Siehst du denn den Test-Dialog im Meta-Dialog? Und was kommt im Log, wenn du meta und test dialog auf verbose 5 stellst?
Ich muss gestehen, dass ich msgDialog noch nicht komplett verstanden habe.
Ich habe es so verstanden, dass eigentlich auf den trigger (Name des Bots) zumindest der metaDialog starten müsste, also "ich kann...".
Passiert aber leider nicht, d.h. ich muss schon bei der config eine Fehler haben..
Habe mich aber eigentlich an den Wiki Eintrag gehalten.
Danke für die Hilfe!
Grüße
Daniel.
Werden Events für eingehende Nachrichten im ROOMMATE device erzeugt? Das ist Voraussetzung für das funktionieren von msgDialog.
Äääh.. ROMMATE Device... da war ja was.
Zugegebenermaßen habe ich die Anleitung da nicht wirklich durchblickt.
Ich brauche also ein Residents Device?
Vielen Dank für eure (Anfänger-)Hilfe!
Zitat von: nanocosmos am 25 September 2018, 18:55:14
Äääh.. ROMMATE Device... da war ja was.
Zugegebenermaßen habe ich die Anleitung da nicht wirklich durchblickt.
Ich brauche also ein Residents Device?
Vielen Dank für eure (Anfänger-)Hilfe!
Steht so alles im Wiki. Einfach mal von oben bis unten durchlesen und schritt für schritt durcharbeiten.
VG Sebastian
Gesendet von iPhone mit Tapatalk
Danke für den Hinweis!
Leider bringt mich der Text im Wiki nicht weiter. Ich weiß ehrlich gesagt nicht, was ich machen soll.
ZitatFür jeden Dialog kann festgelegt werden welche Person dazu berechtigt ist. Dazu sind Geräte vom Typ ROOMMATE oder GUEST mit definiertem msgContactPush Attribut erforderlich. Es ist darauf zu achten, dass das Reading fhemMsgRcvPush ein Event erzeugt. Siehe auch Attribut "allowed" in msgDialog.
Bräucht als Anfänger ein wenig Starthilfe. :-)
Hallo,
du musst erst ein ROOMMATE anlegen, z.B. für deine Person. Im Roommate hinterlegst du deine Telegram ID.
In jeden msgDialog kannst du dann im Reading allowed auswählen wer berechtigt ist.
LG
Marlen
Hallo,
vielen Dank für den Tipp!!!
Jetzt läuft es. :)
Viele Grüße
Daniel
Wie kann man denn den meta-Dialog umbauen, dass er die Dialoge auf 2 Spalten anzeigt?
LG
Marlen
Hallo Marlen,
ich glaube das wird schwierig... Wenn es dir um größere Übersicht geht dann vielleicht so:
Mein Meta-Dialog zeigt mir nur diejenigen Dialoge, welche nicht auf .*_fav, .*_sys oder .*_user enden:
"{return('(' . join(') (', sort(split('\n', fhem('get TYPE=msgDialog:FILTER=NAME!=$SELF:FILTER=NAME!=.*_fav:FILTER=NAME!=.*_sys:FILTER=NAME!=.*_user:FILTER=allowed=.*($recipient|everyone).* trigger')))) . ') ')}",
Diese Dialoge werden dann (als Dialog) so aufgelistet (z.B. Favoriten):
"{return('(' . join(') (', sort(split('\n', fhem('get TYPE=msgDialog:FILTER=NAME=.*_fav:FILTER=allowed=.*($recipient|everyone).* trigger')))) . ') ')}",
Somit kann ich bereits bei der Benamung neuer Dialoge einer gewissen Struktur folgen.
Im Bild unten zeigen Favoriten, Bewohner und System weitere Dialoge an. Alle anderen sind "normale" Dialoge ohne Namenszusatz.
VG Sebastian
Zitat von: Marlen am 17 Oktober 2018, 21:24:04
Hallo,
gefällt mir!! :)
Wie geht das:
"{return('(' . join(') (', sort(split('\n', fhem('get TYPE=msgDialog:FILTER=NAME=.*_fav:FILTER=allowed=.*($recipient|everyone).* trigger')))) . ') ')}",
2 oder 3- spaltig?
LG
Marlen
Danke :)
Das würde ich auch gerne nutzen. Schafft mehr Platz.
Theoretisch betrachtet müsste das Ergebnis von join() in
(dialog_1|dialog_2)
...
(dialog_n-1|dialog_n)
landen. Aber leider übersteigt das meine bis Dato erlangten PERL-Kenntnisse :o
VG Sebastian
Würde ich auch gerne, aber so auf die Schnelle fällt mir da auch nichts ein :(
Hallo zusammen,
ich hab einen Dialog gebaut, den ich leider weder per RAWimport noch def modify im device ändern kann. Es passiert einfach nix, keine Meldung, kein Logeintrag, auch nicht bei verbose 5 des msgDialog device. Füge ich jedoch den code manuell in die fhem.cfg ein, funktioniert alles Fehlerfrei.
Hier der Code:
{
"Heizung": {
"message": [
"(Heizung Text) ",
"(Heizung Graph) ",
"(Heizung Hauptschalter) ",
"(Heizungsabsenkung) ",
"(SZ Nachtbetrieb) ",
"(AZ|Bad) ",
"(SZ|WZ) ",
"(zurück:%me%|ende) ",
"Aktuell Soll - Ist:",
"AZ: [az_ThstWand_Climate:desired-temp] - [az_ThstWand_Climate:measured-temp].",
"Bad: [bad_ThstWand_Climate:desired-temp] - [bad_ThstWand_Climate:measured-temp].",
"SZ: [sz_ThstWand_Climate:desired-temp] - [sz_ThstWand_Climate:measured-temp].",
"WZ: [wz_ThstWand_Climate:desired-temp] - [wz_ThstWand_Climate:measured-temp].",
"Draußen kälter: [raumdurchschnitt:draussenkaelter]"
],
"Heizung Text": {
"message": [
"AZ",
"[az_Thst1_Clima:state]%",
"[az_ThstWand_Weather:state]%",
"Bad",
"[bad_Thst1_Clima:state]%",
"[bad_ThstWand_Weather:state]%",
"SZ",
"[sz_Thst1_Clima:state]%",
"[sz_ThstWand_Weather:state]%",
"WZ",
"[wz_Thst1_Clima:state]%",
"[wz_Thst2_Clima:state]%",
"[wz_ThstWand_Weather:state]%"
]
},
"Heizung Graph": {
"commands": "set %TelegramBot% cmdSend {plotAsPng('SVG_rasp3_DbLog_Heizung')}",
"message": "Plot"
},
"Heizung Hauptschalter": {
"message": [
"(einschalten) ",
"(ausschalten) ",
"(zurück|abbrechen) ",
"Heizung Hauptschalter: [heizung_rasp3:state]"
],
"einschalten": {
"commands": [
"set heizung_rasp3 on",
"set $SELF say @$recipient Heizung"
]
},
"ausschalten": {
"commands": [
"set heizung_rasp3 off",
"set $SELF say @$recipient Heizung"
]
}
},
"Heizungsabsenkung": {
"message": [
"(einschalten) ",
"(ausschalten) ",
"(zurück|abbrechen) ",
"Heizungsabsenkung: [heizungsabsenkung_rasp3:state]"
],
"einschalten": {
"commands": [
"set heizungsabsenkung_rasp3 on",
"set $SELF say @$recipient Heizung"
]
},
"ausschalten": {
"commands": [
"set heizungsabsenkung_rasp3 off",
"set $SELF say @$recipient Heizung"
]
}
},
"SZ Nachtbetrieb": {
"message": [
"(einschalten) ",
"(ausschalten) ",
"(zurück|abbrechen) ",
"SZ Nachtbetrieb: [sz_nachtbetrieb_rasp3:state]"
],
"einschalten": {
"commands": [
"set sz_nachtbetrieb_rasp3 on",
"set $SELF say @$recipient Heizung"
]
},
"ausschalten": {
"commands": [
"set sz_nachtbetrieb_rasp3 off",
"set $SELF say @$recipient Heizung"
]
}
},
"AZ": {
"message": [
"(zurück|abbrechen) ",
"(19.5°C:19.5|20°C:20.0|20.5°C:20.5|21°C:21.0) ",
"(21.5°C:21.5|22°C:22.0|22.5°C:22.5|23°C:23.0) ",
"(23.5°C:23.5|24°C:24.0|25°C:25.0|26°C:26.0) ",
"Ist: [az_ThstWand_Climate:measured-temp]",
"Soll: [az_ThstWand_Climate:desired-temp]",
"Tag: [az_ThstWand_Climate:R-dayTemp]",
"Nacht: [az_ThstWand_Climate:R-nightTemp]"
],
"Setup": {
"match": "[0-2][0-9][.]([0]|[5])",
"commands": [
"{my $temperatur = '$message';;;; fhem(\"set az_ThstWand_Climate desired-temp $temperatur\");;;;}",
"set $SELF say @$recipient Heizung"
]
}
},
"Bad": {
"message": [
"(zurück|abbrechen) ",
"(19.5°C:19.5|20°C:20.0|20.5°C:20.5|21°C:21.0) ",
"(21.5°C:21.5|22°C:22.0|22.5°C:22.5|23°C:23.0) ",
"(23.5°C:23.5|24°C:24.0|25°C:25.0|26°C:26.0) ",
"Ist: [bad_ThstWand_Climate:measured-temp]",
"Soll: [bad_ThstWand_Climate:desired-temp]",
"Tag: [bad_ThstWand_Climate:R-dayTemp]",
"Nacht: [bad_ThstWand_Climate:R-nightTemp]"
],
"Setup": {
"match": "[0-2][0-9][.]([0]|[5])",
"commands": [
"{my $temperatur = '$message';;;; fhem(\"set bad_ThstWand_Climate desired-temp $temperatur\");;;;}",
"set $SELF say @$recipient Heizung"
]
}
},
"SZ": {
"message": [
"(zurück|abbrechen) ",
"(19.5°C:19.5|20°C:20.0|20.5°C:20.5|21°C:21.0) ",
"(21.5°C:21.5|22°C:22.0|22.5°C:22.5|23°C:23.0) ",
"(23.5°C:23.5|24°C:24.0|25°C:25.0|26°C:26.0) ",
"Ist: [sz_ThstWand_Climate:measured-temp]",
"Soll: [sz_ThstWand_Climate:desired-temp]",
"Tag: [sz_ThstWand_Climate:R-dayTemp]",
"Nacht: [sz_ThstWand_Climate:R-nightTemp]"
],
"Setup": {
"match": "[0-2][0-9][.]([0]|[5])",
"commands": [
"{my $temperatur = '$message';;;; fhem(\"set sz_ThstWand_Climate desired-temp $temperatur\");;;;}",
"set $SELF say @$recipient Heizung"
]
}
},
"WZ": {
"message": [
"(zurück|abbrechen) ",
"(19.5°C:19.5|20°C:20.0|20.5°C:20.5|21°C:21.0) ",
"(21.5°C:21.5|22°C:22.0|22.5°C:22.5|23°C:23.0) ",
"(23.5°C:23.5|24°C:24.0|25°C:25.0|26°C:26.0) ",
"Ist: [wz_ThstWand_Climate:measured-temp]",
"Soll: [wz_ThstWand_Climate:desired-temp]",
"Tag: [wz_ThstWand_Climate:R-dayTemp]",
"Nacht: [wz_ThstWand_Climate:R-nightTemp]"
],
"Setup": {
"match": "[0-2][0-9][.]([0]|[5])",
"commands": [
"{my $temperatur = '$message';;;; fhem(\"set wz_ThstWand_Climate desired-temp $temperatur\");;;;}",
"set $SELF say @$recipient Heizung"
]
}
},
"ende": {
"match": "\/?abbrechen",
"commands": "deletereading TYPE=msgDialog $recipient_history",
"message": "Pfiat di!"
}
}
}
Zitat von: sku am 19 Oktober 2018, 23:47:52
ich hab einen Dialog gebaut, den ich leider weder per RAWimport noch def modify im device ändern kann.
Das spricht ja für ein Fehlverhalten von FHEMWEB.
Zitat von: sku am 19 Oktober 2018, 23:47:52
Es passiert einfach nix, keine Meldung, kein Logeintrag, auch nicht bei verbose 5 des msgDialog device. Füge ich jedoch den code manuell in die fhem.cfg ein, funktioniert alles Fehlerfrei.
Ist denn das allowed Attritbut vergeben?
Moin,
einfach in eine Leere msgDialog Definition einegeben. Läuft.
define test msgDialog {}
Und dann dein Dialog reinkopiert. Kann ihn sofort in Telegram aufrufen.
Vg Sebastian
Und wie igami schreibt dass Attribut allowed nicht vergessen.
Ich hab bei mir ein archetype device eingerichtet was das automatisch für mich tut...
VG Sebastian
Vielen Dank für die Antworten, leider war die zündende Idee nicht dabei...
Attribut ist gesetzt.
neues device anlegen und reinkopieren funktioniert bei mir auch nicht, hatte ich schon probiert und jetzt eben wieder.
list, hatte ich vergessen (hier ohne DEF weil das schon weiter oben steht):
MSGCOMMAND msg push \@$recipients $message
NAME Heizung_Dialog
NOTIFYDEV TYPE=(ROOMMATE|GUEST)
NR 228
NTFY_ORDER 50-Heizung_Dialog
STATE rr_michi: Heizung
TRIGGER Heizung
TYPE msgDialog
OLDREADINGS:
READINGS:
2018-10-20 16:22:38 state rr_michi: Heizung
Attributes:
allowed everyone
room msg
list WEB:
Internals:
CONNECTS 545
CSRFTOKEN csrf_633
DEF 8083 global
FD 7
NAME WEB
NR 5
NTFY_ORDER 50-WEB
PORT 8083
STATE Initialized
TYPE FHEMWEB
READINGS:
2018-10-18 14:29:17 state Initialized
Attributes:
JavaScripts codemirror/fhem_codemirror.js pgm2/fhem_details.js
allowfrom 127.0.0.1
confirmDelete 1
editConfig 1
longpoll 1
menuEntries fhem-PC,/fhem,fhem-rasp1,/fhem-rasp1
stylesheetPrefix dark
title { if($FW_room) { "rasp3: $FW_room" } elsif($FW_detail) { "rasp3: $FW_detail" } else { "rasp3" } }
webname fhem-rasp3
fhemweb hatte ich auch schon im Verdacht, hatte schon probiert die Attr. JavaScripts und title zu entfernen, leider ohne Erfolg.
Zitatneues device anlegen und reinkopieren funktioniert bei mir auch nicht, hatte ich schon probiert und jetzt eben wieder.
Kommt da eine Fehlermeldung?
Zitat von: binford6000 am 22 Oktober 2018, 11:01:25
Kommt da eine Fehlermeldung?
nein, keine Meldung, kein Logeintrag...
WEB verbose 5:
2018.10.22 12:08:22 4: WEB_192.168.0.210_56080 => 304 Not Modified
2018.10.22 12:08:22 4: WEB_192.168.0.210_56082 GET /fhem-rasp3/pgm2/jquery-ui.min.css; BUFLEN:0
2018.10.22 12:08:22 4: WEB_192.168.0.210_56082 => 304 Not Modified
2018.10.22 12:08:22 4: WEB_192.168.0.210_56084 GET /fhem-rasp3/pgm2/jquery.min.js; BUFLEN:0
2018.10.22 12:08:22 4: WEB_192.168.0.210_56084 => 304 Not Modified
2018.10.22 12:08:22 4: WEB_192.168.0.210_56080 GET /fhem-rasp3/pgm2/fhemweb.js; BUFLEN:0
2018.10.22 12:08:22 4: WEB_192.168.0.210_56080 => 304 Not Modified
2018.10.22 12:08:22 4: WEB_192.168.0.210_56082 GET /fhem-rasp3/pgm2/doif.js; BUFLEN:0
2018.10.22 12:08:22 4: WEB_192.168.0.210_56082 => 304 Not Modified
2018.10.22 12:08:22 4: WEB_192.168.0.210_56084 GET /fhem-rasp3/pgm2/fhemweb_readingsGroup.js; BUFLEN:0
2018.10.22 12:08:22 4: WEB_192.168.0.210_56084 => 304 Not Modified
2018.10.22 12:08:22 4: Connection accepted from WEB_192.168.0.123_56088
2018.10.22 12:08:22 4: WEB_192.168.0.210_56088 GET /fhem-rasp3/pgm2/jquery-ui.min.js; BUFLEN:0
2018.10.22 12:08:22 4: WEB_192.168.0.210_56088 => 304 Not Modified
2018.10.22 12:08:22 4: WEB_192.168.0.210_56080 GET /fhem-rasp3/pgm2/darkCommon.css; BUFLEN:0
2018.10.22 12:08:22 4: WEB_192.168.0.210_56080 => 304 Not Modified
2018.10.22 12:08:22 4: WEB_192.168.0.210_56080 GET /fhem-rasp3/pgm2/dashboard_darkstyle.css; BUFLEN:0
2018.10.22 12:08:22 4: WEB_192.168.0.210_56080 => 304 Not Modified
2018.10.22 12:08:23 4: WEB_192.168.0.210_56080 GET /fhem-rasp3/images/default/icoEverything.png; BUFLEN:0
2018.10.22 12:08:23 4: WEB_192.168.0.210_56080 => 304 Not Modified
2018.10.22 12:08:23 4: WEB_192.168.0.210_56082 GET /fhem-rasp3/images/default/fhemicon_dark.png; BUFLEN:0
2018.10.22 12:08:23 4: WEB_192.168.0.210_56082 => 304 Not Modified
Dein FHEMWEB hat aber nichts mit msgDialog zu tun... :o
Also zumindest wäre mir dieser Zusammenhang neu... ;D
Dein Dialog frisch angelegt mit:
define test msgDialog {}
dann auf DEF und deinen Dialog eingefügt. Speichern. Keine Fehlermeldung. Einmal in Telegram aufgerufen:
Historie löschen
Internals:
CFGFN
DEF {
"Heizung": {
"message": [
"(Heizung Text) ",
"(Heizung Graph) ",
"(Heizung Hauptschalter) ",
"(Heizungsabsenkung) ",
"(SZ Nachtbetrieb) ",
"(AZ|Bad) ",
"(SZ|WZ) ",
"(zurück:%me%|ende) ",
"Aktuell Soll - Ist:",
"AZ: [az_ThstWand_Climate:desired-temp] - [az_ThstWand_Climate:measured-temp].",
"Bad: [bad_ThstWand_Climate:desired-temp] - [bad_ThstWand_Climate:measured-temp].",
"SZ: [sz_ThstWand_Climate:desired-temp] - [sz_ThstWand_Climate:measured-temp].",
"WZ: [wz_ThstWand_Climate:desired-temp] - [wz_ThstWand_Climate:measured-temp].",
"Draußen kälter: [raumdurchschnitt:draussenkaelter]"
],
"Heizung Text": {
"message": [
"AZ",
"[az_Thst1_Clima:state]%",
"[az_ThstWand_Weather:state]%",
"Bad",
"[bad_Thst1_Clima:state]%",
"[bad_ThstWand_Weather:state]%",
"SZ",
"[sz_Thst1_Clima:state]%",
"[sz_ThstWand_Weather:state]%",
"WZ",
"[wz_Thst1_Clima:state]%",
"[wz_Thst2_Clima:state]%",
"[wz_ThstWand_Weather:state]%"
]
},
"Heizung Graph": {
"commands": "set %TelegramBot% cmdSend {plotAsPng('SVG_rasp3_DbLog_Heizung')}",
"message": "Plot"
},
"Heizung Hauptschalter": {
"message": [
"(einschalten) ",
"(ausschalten) ",
"(zurück|abbrechen) ",
"Heizung Hauptschalter: [heizung_rasp3:state]"
],
"einschalten": {
"commands": [
"set heizung_rasp3 on",
"set $SELF say @$recipient Heizung"
]
},
"ausschalten": {
"commands": [
"set heizung_rasp3 off",
"set $SELF say @$recipient Heizung"
]
}
},
"Heizungsabsenkung": {
"message": [
"(einschalten) ",
"(ausschalten) ",
"(zurück|abbrechen) ",
"Heizungsabsenkung: [heizungsabsenkung_rasp3:state]"
],
"einschalten": {
"commands": [
"set heizungsabsenkung_rasp3 on",
"set $SELF say @$recipient Heizung"
]
},
"ausschalten": {
"commands": [
"set heizungsabsenkung_rasp3 off",
"set $SELF say @$recipient Heizung"
]
}
},
"SZ Nachtbetrieb": {
"message": [
"(einschalten) ",
"(ausschalten) ",
"(zurück|abbrechen) ",
"SZ Nachtbetrieb: [sz_nachtbetrieb_rasp3:state]"
],
"einschalten": {
"commands": [
"set sz_nachtbetrieb_rasp3 on",
"set $SELF say @$recipient Heizung"
]
},
"ausschalten": {
"commands": [
"set sz_nachtbetrieb_rasp3 off",
"set $SELF say @$recipient Heizung"
]
}
},
"AZ": {
"message": [
"(zurück|abbrechen) ",
"(19.5°C:19.5|20°C:20.0|20.5°C:20.5|21°C:21.0) ",
"(21.5°C:21.5|22°C:22.0|22.5°C:22.5|23°C:23.0) ",
"(23.5°C:23.5|24°C:24.0|25°C:25.0|26°C:26.0) ",
"Ist: [az_ThstWand_Climate:measured-temp]",
"Soll: [az_ThstWand_Climate:desired-temp]",
"Tag: [az_ThstWand_Climate:R-dayTemp]",
"Nacht: [az_ThstWand_Climate:R-nightTemp]"
],
"Setup": {
"match": "[0-2][0-9][.]([0]|[5])",
"commands": [
"{my $temperatur = '$message';;;; fhem(\"set az_ThstWand_Climate desired-temp $temperatur\");;;;}",
"set $SELF say @$recipient Heizung"
]
}
},
"Bad": {
"message": [
"(zurück|abbrechen) ",
"(19.5°C:19.5|20°C:20.0|20.5°C:20.5|21°C:21.0) ",
"(21.5°C:21.5|22°C:22.0|22.5°C:22.5|23°C:23.0) ",
"(23.5°C:23.5|24°C:24.0|25°C:25.0|26°C:26.0) ",
"Ist: [bad_ThstWand_Climate:measured-temp]",
"Soll: [bad_ThstWand_Climate:desired-temp]",
"Tag: [bad_ThstWand_Climate:R-dayTemp]",
"Nacht: [bad_ThstWand_Climate:R-nightTemp]"
],
"Setup": {
"match": "[0-2][0-9][.]([0]|[5])",
"commands": [
"{my $temperatur = '$message';;;; fhem(\"set bad_ThstWand_Climate desired-temp $temperatur\");;;;}",
"set $SELF say @$recipient Heizung"
]
}
},
"SZ": {
"message": [
"(zurück|abbrechen) ",
"(19.5°C:19.5|20°C:20.0|20.5°C:20.5|21°C:21.0) ",
"(21.5°C:21.5|22°C:22.0|22.5°C:22.5|23°C:23.0) ",
"(23.5°C:23.5|24°C:24.0|25°C:25.0|26°C:26.0) ",
"Ist: [sz_ThstWand_Climate:measured-temp]",
"Soll: [sz_ThstWand_Climate:desired-temp]",
"Tag: [sz_ThstWand_Climate:R-dayTemp]",
"Nacht: [sz_ThstWand_Climate:R-nightTemp]"
],
"Setup": {
"match": "[0-2][0-9][.]([0]|[5])",
"commands": [
"{my $temperatur = '$message';;;; fhem(\"set sz_ThstWand_Climate desired-temp $temperatur\");;;;}",
"set $SELF say @$recipient Heizung"
]
}
},
"WZ": {
"message": [
"(zurück|abbrechen) ",
"(19.5°C:19.5|20°C:20.0|20.5°C:20.5|21°C:21.0) ",
"(21.5°C:21.5|22°C:22.0|22.5°C:22.5|23°C:23.0) ",
"(23.5°C:23.5|24°C:24.0|25°C:25.0|26°C:26.0) ",
"Ist: [wz_ThstWand_Climate:measured-temp]",
"Soll: [wz_ThstWand_Climate:desired-temp]",
"Tag: [wz_ThstWand_Climate:R-dayTemp]",
"Nacht: [wz_ThstWand_Climate:R-nightTemp]"
],
"Setup": {
"match": "[0-2][0-9][.]([0]|[5])",
"commands": [
"{my $temperatur = '$message';;;; fhem(\"set wz_ThstWand_Climate desired-temp $temperatur\");;;;}",
"set $SELF say @$recipient Heizung"
]
}
},
"ende": {
"match": "\/?abbrechen",
"commands": "deletereading TYPE=msgDialog $recipient_history",
"message": "Pfiat di!"
}
}
}
MSGCOMMAND msg push \@$recipients $message
NAME test
NOTIFYDEV TYPE=(ROOMMATE|GUEST)
NR 2076
NTFY_ORDER 50-test
STATE rr_Sebastian: Heizung
TRIGGER Heizung
TYPE msgDialog
READINGS:
2018-10-22 13:16:56 rr_Sebastian_history Heizung
2018-10-22 13:16:56 state rr_Sebastian: Heizung
Attributes:
allowed rr_Sebastian
group Dialoge
icon dialog
room 91_Dialogsteuerung
Was mir auffällt: Bei dir fehlt das reading <ROOMMATE>_history -> wird vom Meta-Dialog wieder gelöscht.
Und bei mir gibt es kein OLDREADINGS.
Da ich nicht das Rad neu erfinden wollte bzw. geringe Kentnisse in Perl habe, wollte ich einen Heizungs Dialog hier aus dem Thread verwenden.
Erstmal danke für die tolle Vorarbeit.
Leider habe ich zwei Fehler:
1. Es wird immer nur mein Büro geschaltet, auch wenn ich als Zimmer beispielsweise Wohnzimmer wähle. Meine sehr rudimentären Kentnisse in Perl haben mir leider nicht weitergeholfen den Fehler zu finden.
{
"1. Heizung": {
"match": "Raumtemperaturen",
"message": [
"(Schlafzimmer) (Bücherzimmer|Wohnzimmer) (Küche|Bad unten) (Büro Daniel|Büro Lisa) ",
"TelegramBot_MTYPE=queryInline (%me%) ",
"{return telegramBotGetRoomTemperatureListMessage() }"
],
"Raum": {
"match": "(Küche|Schlafzimmer|Wohnzimmer|Büro Daniel|Büro Lisa|Esszimmer)",
"commands": "setreading $SELF $recipient_Room $message",
"message": [
"(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 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==\"Büro Daniel\"?\"dz_heizung_Clima\": ($room==\"Esszimmer\"?\"ez_heizung_Clima\":($room==\"Schlafzimmer\"?\"sz_heizung_Clima\":($room==\"Wohnzimmer\"?\"wz_heizung_Clima\":\"\"))));;;; fhem (\"set $clima desired-temp $temp\") }"
],
"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"{my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;; return \"Temperatur im $room auf $message eingestellt.\";;;; }"
]
}
}
}
}
2. Ich habe, um die aktuellen Temperaturen zu erhalten, die Änderung an der 99myUtils.pm vorgenommen.
Dies klappt auch wunderbar, doch nach 1-2 Tagen erscheint immer die Fehlermeldung:
Undefined subroutine &main:: telegramBotGetRoomTemperatureListMessage called at (eval 4421) line 1.
Wenn ich die 99myUtils öffne und ohne Änderung nochmal speichere, funktioniert es wieder, d.h. die Raumtemperaturen werden geschickt.
sub telegramBotGetRoomTemperatureListMessage()
{
my $tempDaniel = ReadingsVal("dz_heizung_Clima", "measured-temp", "0");
my $desiredTempDaniel = ReadingsVal("dz_heizung_Clima", "desired-temp", "0");
my $tempLisa = ReadingsVal("lz_heizung_Clima", "measured-temp", "0");
my $desiredTempLisa = ReadingsVal("lz_heizung_Clima", "desired-temp", "0");
my $tempBadunten = ReadingsVal("bz_heizung_Clima", "measured-temp", "0");
my $desiredBadunten = ReadingsVal("bz_heizung_Clima", "desired-temp", "0");
my $tempKueche = ReadingsVal("HZ_KUECHE", "measured-temp", "0");
my $desiredTempKueche = ReadingsVal("HZ_KUECHE", "desired-temp", "0");
my $tempSchlafzimmer = ReadingsVal("sz_heizung_Clima", "measured-temp", "0");
my $desiredTempSchlafzimmer = ReadingsVal("sz_heizung_Clima", "desired-temp", "0");
my $tempWohnzimmer = ReadingsVal("wz_heizung_Clima", "measured-temp", "0");
my $desiredTempWohnzimmer = ReadingsVal("wz_heizung_Clima", "desired-temp", "0");
my $tempBuecher = ReadingsVal("bz_heizung", "measured-temp", "0");
my $desiredTempBuecher = ReadingsVal("bz_heizung", "desired-temp", "0");
my $tempEsszimmer = ReadingsVal("ez_heizung", "measured-temp", "0");
my $desiredTempEsszimmer = ReadingsVal("ez_heizung", "desired-temp", "0");
my $returnMessage = "- 1. Stock -\n";
$returnMessage .= "Daniel: $tempDaniel °C (-> $desiredTempDaniel °C)\n";
$returnMessage .= "Lisa: $tempLisa °C (-> $desiredTempLisa °C)\n";
$returnMessage .= "Schlafz.: $tempSchlafzimmer °C (-> $desiredTempSchlafzimmer °C)\n";
$returnMessage .= "- Erdgeschoss -\n";
$returnMessage .= "Bad unten: $tempBadunten °C (-> $desiredBadunten °C)\n";
$returnMessage .= "Bücherzimmer: $tempBuecher °C (-> $desiredTempBuecher °C)\n";
$returnMessage .= "Esszimmer: $tempEsszimmer °C (-> $desiredTempEsszimmer °C)\n";
$returnMessage .= "Wohnzimmer: $tempWohnzimmer °C (-> $desiredTempWohnzimmer °C)\n";
return $returnMessage;
}
Hallo,
Zu 1:
my $clima = ($room==\"Büro Daniel\"?\"dz_heizung_Clima\": ($room==\"Esszimmer\"?\"ez_heizung_Clima\":($room==\"Schlafzimmer\"?\"sz_heizung_Clima\":($room==\"Wohnzimmer\"?\"wz_heizung_Clima\":\"\"))));;;;
Der Rest nach "Büro Daniel" wird wohl nicht mehr ausgewertet. Da mein PERL auch noch in Level 2-3 steckt würde ich hier klassisches if/elsif verwenden.
Was ich definitiv besser lesen kann als die Kurzform... :o
Zu 2:
Das liegt wohl eher nicht an msgDialog. Aber ich probier es einfach nochmal am Wochenende aus.
VG Sebastian
Hallo nochmal,
probier mal den hier:
{
"1. Heizung": {
"match": "Raumtemperaturen",
"message": [
"(Schlafzimmer|Büro Daniel) (Esszimmer|Wohnzimmer) ",
"TelegramBot_MTYPE=queryInline (%me%) ",
"{return telegramBotGetRoomTemperatureListMessage() }"
],
"Raum": {
"match": "(Esszimmer|Schlafzimmer|Wohnzimmer|Büro Daniel)",
"commands": "setreading $SELF $recipient_Room $message",
"message": [
"(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 im $message einstellen"
],
"Temperatur": {
"match": "on|off|[0-2][0-9][:.]([0]|[5])",
"commands": [
"{my $temp = $message;;;; my $clima;;;; $temp =~ s/([\\d]{1,2}\\.[\\d{1}])/$1/g;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;; if ($room eq \"Büro Daniel\") {$clima = \"dz_heizung_Clima\";;;;} elsif ($room eq \"Esszimmer\") {$clima = \"ez_heizung_Clima\";;;;} elsif ($room eq \"Schlafzimmer\") {$clima = \"sz_heizung_Clima\";;;;} elsif ($room eq \"Wohnzimmer\") {$clima = \"wz_heizung_Clima\";;;;} fhem (\"set $clima desired-temp $temp\") }" ],
"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"{my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;; return \"Temperatur im $room auf $message eingestellt.\";;;; }"
]
}
}
}
}
VG Sebastian
Vielen Dank!!!
Hat super funktioniert. :)
Hallo,
ich versuche gerade den Dialog mit der Einkaufsliste zu erweitern, komme aber nicht weiter... meine Perl Kenntnisse sind eher rudimentär, kenne eigentlich eher C.
Dabei der eigentliche Dialog von igami:
Zitat von: igami am 12 Oktober 2017, 20:18:13
[..]
Ich nutze PostMe mit msgDialog, aber ohne TBot_List
defmod Einkaufsliste_Dialog msgDialog { \
"Einkaufsliste": {\
"message": [\
"(Waren hinzufügen) ", \
"(Waren entfernen) ", \
"(einkaufen) ", \
"(abbrechen) ",\
"{my $content = (split(': ', fhem('get %PostMe% list %list%')))[1];;;; return('Keine Einträge vorhanden') unless($content);;;; return(join('\n', split(',', $content)));;;;}"\
],\
"Waren hinzufügen": {\
"message": [\
"Bitte jede Ware als neue Nachricht hinzufügen.",\
"Das hinzufügen von Waren durch \"/beenden\" beenden."\
],\
"Ware hinzufügen": {\
"match": "[^/]+",\
"commands": [\
"set %PostMe% add %list% $message",\
"setreading $SELF $recipient_history Einkaufsliste|Waren hinzufügen"\
]\
}\
},\
"Waren entfernen": {\
"message": [\
"{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1]), 'beenden'). ') ')}",\
"Welche Ware möchtest du entfernen?"\
],\
"Ware entfernen": {\
"match": "^(?!beenden).+",\
"commands": [\
"set %PostMe% remove %list% $message",\
"set $SELF say @$recipient Einkaufsliste|Waren entfernen"\
]\
}\
},\
"einkaufen": {\
"commands": [\
"setreading $SELF $recipient_history Einkaufsliste|noch einzukaufen"\
],\
"message": [\
"{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1])) . ') ')}",\
"(beenden) ",\
"Bitte die Waren der Reihenfolge nach auswählen in der sie eingekauft werden."\
]\
},\
"noch einzukaufen": {\
"message": [\
"{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1])) . ') ')}",\
"(beenden) ",\
"Noch einzukaufen:"\
],\
"Ware eingekauft": {\
"match": "^(?!beenden).+",\
"commands": [\
"set %PostMe% remove %list% $message",\
"set $SELF say @$recipient Einkaufsliste|noch einzukaufen"\
]\
}\
} \
}\
}
attr Einkaufsliste_Dialog evalSpecials PostMe=PostMe\
list=Einkaufsliste
Ich habe nun eine Erweiterung geschrieben um alle bestehenden Listen auszulesen:
defmod test_Dialog msgDialog {\
"Listen": {\
"message": [\
"{my $content = ReadingsVal('%PostMe%', 'postmeCnt', '');;my $list;; my @a;; for my $i (0..$content) { $list = 'postme'.sprintf('%02i',$i).'Name';; push(@a,ReadingsVal('%PostMe%',$list,''));;};; return('Keine Listen vorhanden') unless(@a);; return (join(',',@a));;}"\
]\
}\
}
attr test_Dialog evalSpecials PostMe=PostIt
Nun will / sollten diese vergleichbar wie bei "Ware entfernen" als Buttons zurückgegeben werden, damit dann bei der "Einkaufliste" eingestiegen werden kann.
Kann mir da jemand weiterhelfen...
Bin über Optimierungen in meinem Code auch offen.
THX
moin zusammen,
hat sich in seit dem Wochenende irgendwas geändert?
Bei mir scheint der msgDialog nicht mehr auf die Trigger zu reagieren. Kann das noch jemand bestätigen?
Außerdem habe ich noch eine Frage:
Ich möchte gerne Pushover als default für msg benutzer und zusätzlich für msgDialog dann Telegram. Ich habe mir also testweise im globalmsg folgendes gesetzt:
attr msgDialog_msgCommand msg \@Telegram:\@$recipients $message
ist das korrekt? Leider bekomme ich keine Antworten auf meine Trigger, egal ob ich das Attribut jetzt setze oder nicht. Aktuell steht msgContactPush wieder auf Telegram. Leider bekomme ich auch hier keine Nachrichten.
EDIT: scheint jetzt wieder zu laufen. Ich hab aber keine Ahnung woran es gelegen hat ;-)
Gruß Michael
ZitatEDIT: scheint jetzt wieder zu laufen. Ich hab aber keine Ahnung woran es gelegen hat ;-)
Moin Michael,
als ich deinen Post gelesen habe hat es bei mir auch nicht funktioniert. Siehe Log-Auszug:
2019.01.11 10:15:57 3: get TYPE=msgDialog:FILTER=NAME!=metaDialog:FILTER=NAME!=.*_fav:FILTER=NAME!=.*_sys:FILTER=NAME!=.*_user:FILTER=allowed=.*(rr_Sebastian|everyone).* trigger : 01.⭐️...Favoriten...⭐️
02.💡Beleuchtung💡
03.👩🏼..Bewohner..👩🏻
05.🛠....System....🛠
06.⚠️....Notfall.....⚠️
07.⏰....Wecker.....⏰
04.💡...Lampen....💡
08.🚧.....Staus.....🚧
2019.01.11 10:15:57 3: TelegramBot_Callback fhembot: resulted in Callback returned error :Bad Request: there is no text in the message to edit: from SendIt
2019.01.11 10:15:57 3: TelegramBot_Callback fhembot: No retry for (ret: Callback returned error :Bad Request: there is no text in the message to edit:) for msg 260868921 :
Hallo Sebastian!
Ich kann das für dich tun:
Nach einem FHEM-Update gehts jetzt auch wieder bei mir. Ohn Callback returned error...
VG Sebastian
hi,
meine Dialoge laufen wieder, nur leider bekomme ich es nicht hin, dass nur für die Dialoge Telegram benutzt wird, für alles andere Pushover, da ich ja bei meinem Resident im Attribut msgContactPush auch Telegram setzen muss. Alle meine Versuche im globalMsg die Syntax für den Befehl zu ändern sind leider fehlgeschlagen. Jemand noch ne Idee?
Gruß Michael
hallo zusammen,
einen Vorschlag hätte ich:
Wie wäre es, wenn es bei den Residents ein weiteres Attribut msgDialog_msgContactPush
geben würde, in das ich dann Telegram eintragen würde.
Von der Handhabung müsste man dann zuerst dieses Attribut abfragen und wenn es nicht gesetzt ist, msgContactPush
benutzen. Dann funktionieren nach wie vor alle bestehenden Configs und ich könnte meinen Spezialfall auch abdecken.
Gruß Michael
Zitat von: l2r am 11 Januar 2019, 09:42:09
moin zusammen,
hat sich in seit dem Wochenende irgendwas geändert?
Bei mir scheint der msgDialog nicht mehr auf die Trigger zu reagieren. Kann das noch jemand bestätigen?
Außerdem habe ich noch eine Frage:
Ich möchte gerne Pushover als default für msg benutzer und zusätzlich für msgDialog dann Telegram. Ich habe mir also testweise im globalmsg folgendes gesetzt:
attr msgDialog_msgCommand msg \@Telegram:\@$recipients $message
ist das korrekt? Leider bekomme ich keine Antworten auf meine Trigger, egal ob ich das Attribut jetzt setze oder nicht. Aktuell steht msgContactPush wieder auf Telegram. Leider bekomme ich auch hier keine Nachrichten.
EDIT: scheint jetzt wieder zu laufen. Ich hab aber keine Ahnung woran es gelegen hat ;-)
Gruß Michael
Mit dem Routing von verschiedenen Diensten habe ich mich nicht befasst, dazu bitte den Maintainer von msg befragen. Generell ist das von dir gewählte Attribut aber die richtige stelle zum anpassen.
Hallo,
ich hätte mal wieder paar Fragen:
Kann man in commands irgendwie mit if arbeiten?
So etwa:
"commands": [
"{my $Liste = '$message';;;; fhem(\"if ($Liste eq 'kompl.Essen - Liste') {setreading $SELF gewliste $message}\")}"
],
Kann man irgendwie im Code kommentieren?
LG
Marlen
Sowohl perl if als auch FHEM IF sollten sich normal anwenden lassen (habe aber grad kein Beispiel parat).
Auskommentieren ist aktuell nicht möglich, da dann das json nicht richtig erkannt wird.
Hat vielleicht jemand anders ein Beispiel?
LG
Marlen
Zitat von: Marlen am 17 Januar 2019, 12:01:15
Hat vielleicht jemand anders ein Beispiel?
LG
Marlen
Hier gabs mal was mit Heizungssteuerung. Das ist daraus und funktioniert soweit:
"commands": ["{my $temp = $message;;;; my $clima;;;; $temp =~ s/([\\d]{1,2}\\.[\\d{1}])/$1/g;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;; if ($room eq \"Büro Daniel\") {$clima = \"dz_heizung_Clima\";;;;} elsif ($room eq \"Esszimmer\") {$clima = \"ez_heizung_Clima\";;;;} elsif ($room eq \"Schlafzimmer\") {$clima = \"sz_heizung_Clima\";;;;} elsif ($room eq \"Wohnzimmer\") {$clima = \"wz_heizung_Clima\";;;;} fhem (\"set $clima desired-temp $temp; msg push $clima $temp\") }"],
VG Sebastian
Zitat von: binford6000 am 17 Januar 2019, 12:08:50
Hier gabs mal was mit Heizungssteuerung. Das ist daraus und funktioniert soweit:
"commands": ["{my $temp = $message;;;; my $clima;;;; $temp =~ s/([\\d]{1,2}\\.[\\d{1}])/$1/g;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;; if ($room eq \"Büro Daniel\") {$clima = \"dz_heizung_Clima\";;;;} elsif ($room eq \"Esszimmer\") {$clima = \"ez_heizung_Clima\";;;;} elsif ($room eq \"Schlafzimmer\") {$clima = \"sz_heizung_Clima\";;;;} elsif ($room eq \"Wohnzimmer\") {$clima = \"wz_heizung_Clima\";;;;} fhem (\"set $clima desired-temp $temp; msg push $clima $temp\") }"],
VG Sebastian
Danke! :-*
Problem mit dem Auslesen von Variablen im msgDialog
Hallo zusammen,
so langsam gehen mir die Ideen aus. Ich habe ein Problem mit dem Auslesen von Werten über ReadingsVal.
Was ich tun möchte:
Ich baue mir derzeit einen Dialog für Telegram auf. Neben der Steuerung der Beleuchtung und (sehr einfachen) Squeezebox-Player Befehlen möchte ich nun die Wettervorhersage abrufen. Das ist in dem Post von Tiroso ganz gut sehen.
In meinem Wetter-Dialog habe ich im ersten Schritt folgendermaßen versucht, ein Bild des aktuellen Wetters zu senden:
"commands": "set Telegram sendImage /opt/fhem/www/images/default/weather/".ReadingsVal('WessumWetter','icon','0').".png" ,\
Das führt zu folgendem JSON-Fehler
, or ] expected while parsing array, at character offset 715 (before ".ReadingsVal('Wessum...") at ./FHEM/76_msgDialog.pm line 93.
Diverse unterschiedliche Versuche (mit \ vorm ", ' statt " schlugen fehl.
Mein letzter Versuch war das Ganze über Variablensubstitution zu machen:
"Wetter morgen":{\
"commands":[\
"{my $wi = ReadingsVal(%VAR%, %WIP%, '0')}",\
"set Telegram message %wi%"\
],\
"message":[\
"(%me%) ",\
"Das Wetter von morgen: {my $wi = ReadingsVal(%VAR%, %WIP%, '0')} "\
]\
},\
"Wetterdaten aktualisieren":{\
"commands": "set WessumWetter update",\
"message":[\
"(%me%) ",\
"Aktualisierung Wetterdaten angefragt."\
]\
}\
}\
}
attr wetter_Dialog allowed Trixer, everyone
attr wetter_Dialog evalSpecials VAR=Variablenspeicher\
WIP=WEATHER_ICON_PATH
attr wetter_Dialog room Messages
Das ist zwar syntaktisch korrekt, die Variablen werden aber nciht aufgelöst.
Ich hoffe mal auf einen klassischen Anfängerfehler und bitte um Erleuchtung.
Schönen Dank und Gruß
Trixer
Moin,
leider kann ich nur vom handy antworten, daher auch erst eine späte Antwort. Versuch mal folgendes, wie gesagt mit Handy getippt und nicht getestet, daher evtl. auch nicht ohne Fehler.
senden:
"commands": "{fhem(\"set Telegram sendImage /opt/fhem/www/images/default/weather/\".ReadingsVal(\"WessumWetter\",\"icon\",\"0\").\".png\"}" ,\
Ich denke du hast ganz am Ende die schließenden Anführungszeichen vergessen.
Ausserdem bitte code immer in die Codetags setzen. Dass macht es uns einfacher den code zu lesen.
Viele Grüße,
Dirk
Nabend,
vielen Dank für deine - wie ich finde - schnelle Antwort.
Auf die Code-Tags werde ich ab sofort achten. - Sorry.
Syntaktisch ist deine Ausführung korrekt. Allerdings sind das scheinbar zu viele Anführungszeichen.
Ich vermute
"{fhem...
führt dazu, dass der Befehl gar nicht ausgeführt wird. Zumindest sehe ich auch im Event Monitor nichts.
Nehme ich diese Anführungsstriche weg, also
"commands": {fhem(\"set Telegram sendImage /opt/fhem/www/images/default/weather/\".ReadingsVal(\"WessumWetter\",\"icon\",\"0\").\".png\"} ,\
bekomme ich wieder den JSON-Fehler
'"' expected, at character offset 431 (before "fhem(\\"set Telegram...") at ./FHEM/76_msgDialog.pm line 93.
Dieses Problem verfolgt mich...
Viele Grüße
Mark
Deine untere Variante verstösst gegen die Regeln, wie ein json aufgebaut sein muss. Die Anführungszeichen sind Pflicht.
Wenn du keine Fehler im Log siehst wird der Befehl voraussichtlich ausgeführt, und es gibt ein anderes Problem, dass du kein Bild gesendet bekommst. Ein Event wird dabei ja meines Wissens auch nicht erzeugt, daher kein Output im Eventmonitor. Was passiert denn, wenn du den set-Befehl direkt in die fhem-Befehlszeile eingibst? Vielleicht feheln Leserechte auf die Bilddatei? Gibt es die Datei überhaupt?
Hi Dirk,
die Datei existiert und die Zugriffsrechte sind auch ok.
Über den Befehle
set Telegram sendImage /opt/fhem/www/images/default/weather/mostlycloudy.png
wird das Bild versendet.
Der folgende Befehl in die Kommandozueile eingegeben liefert auch genau diesen Pfad als Ergebnis:
{ ReadingsVal("Variablenspeicher", "WEATHER_ICON_PATH", "NixDa1") . ReadingsVal("WessumWetter", "icon", "NixDa2") . ReadingsVal("Variablenspeicher", "WEATHER_ICON_TYPE", "NixDa3") }
Nur leider gelingt es mir nicht, die beiden Befehle zu kombinieren.
Gruß
Mark
Hi Mark,
Dann könnte es noch an irgendeinem Leerzeichen an unpassender Stelle liegen. Hast du schon eine 99_myUtils.pm? Darin neue Funktion anlegen und aus dem Dialog aufrufen.
Das wäre meiner Meinung nach die einfachste Variante das Problem weiter einzugrenzen. Darin kannst du dann auch alles mit Logausgaben zupflastern.
VG,
Dirk
Zitat von: Wuehler am 26 Januar 2019, 15:25:14
Hi Mark,
Dann könnte es noch an irgendeinem Leerzeichen an unpassender Stelle liegen. Hast du schon eine 99_myUtils.pm? Darin neue Funktion anlegen und aus dem Dialog aufrufen.
Das wäre meiner Meinung nach die einfachste Variante das Problem weiter einzugrenzen. Darin kannst du dann auch alles mit Logausgaben zupflastern.
VG,
Dirk
Hi Dirk,
das mach ich heute Abend mal.
Danke
Mark
Gesendet von meinem LG-H870 mit Tapatalk
Hi Dirk,
habe das jetzt mal auf die Schnelle in die 99_myUtils.pm ausgelagert.
So hat es funktioniert. Ich werde aber noch mal auf die API von openweathermap schauen müssen und das Ganze etwas liebevoller gestalten aber das ist ein anderes Thema.
Es sieht jetzt so aus (Textarray habe ich nur interessehalber aufgebaut):
############################################################################
### Hilfsroutine für SendImage ###
############################################################################
sub MsgSendImage ($)
{
my ($msgText) = @_;
Log(3,'Übergabe an MsgSendImage: ' . $msgText);
my @msgTextarray = split(/.*:\s/, $msgText);
my $msgTextTeil1 = $msgTextarray[1];
my $msgTextTeil2 = split(/;/, $msgTextTeil1);
if ($msgText eq "Wetterjetzt") {
fhem "set Telegram sendImage /opt/fhem/www/images/default/weather/".ReadingsVal('WessumWetter','icon','0').".png Das Wetter jetzt: "
.ReadingsVal('WessumWetter','current_date_time','0')." ".ReadingsVal('WessumWetter','condition','0')." "
.ReadingsVal('WessumWetter','temp_c','0')."C° ".ReadingsVal('WessumWetter','humidity','0')."% "
.ReadingsVal('WessumWetter','wind_condition','0');
}elsif ($msgText eq "Wetterprognose") {
fhem "set Telegram sendImage /opt/fhem/www/images/default/weather/".ReadingsVal('WessumWetter','hfc1_icon','0').".png Das Wetter am: "
.ReadingsVal('WessumWetter','hfc1_pubDate','0')." ".ReadingsVal('WessumWetter','hfc1_condition','0')." Min:"
.ReadingsVal('WessumWetter','hfc1_tempLow','0')."C° Max: ".ReadingsVal('WessumWetter','hfc1_tempHigh','0')."C° ";
}else {
fhem "set Telegram message Keine Wetterdaten vorhanden!"
}
}
...und Aufruf im msdDialog entsprechend:
"Wetter jetzt":{\
"commands": "{ MsgSendImage('Wetterjetzt') }",\
"message":[\
"(%me%) ",\
"Aktuelles Wetter."\
]\
},\
"Wetter Prognose":{\
"commands": "{ MsgSendImage('Wetterprognose') }" ,\
"message":[\
"(%me%) ",\
"Das Wetter von heute."\
]\
},\
"Wetterdaten aktualisieren":{\
"commands": "set WessumWetter update",\
"message":[\
"(%me%) ",\
"Aktualisierung Wetterdaten angefragt."\
]\
}\
}\
}
Danke für den Tipp!
Schönes Wochenende
Mark
Guten Abend zusammen,
kann man die Menüeinträge löschen?
Ich nutze den Metadialog als Hauptmenü und wenn ich dann per abbrechen - egal an welchem Punkt - den Dialog abbreche, bekomme ich zwar die Antwort "Dialog abgebrochen" aber die Menüeinträge bleiben sicht- und klickbar.
Ich hatte im Kopf, dass die sich auch mal ausblendeten, bin mir aber nicht sicher. Hat jemand eine Idee?
Zitat von: jazzor am 02 Februar 2019, 23:28:52
Guten Abend zusammen,
kann man die Menüeinträge löschen?
Ich nutze den Metadialog als Hauptmenü und wenn ich dann per abbrechen - egal an welchem Punkt - den Dialog abbreche, bekomme ich zwar die Antwort "Dialog abgebrochen" aber die Menüeinträge bleiben sicht- und klickbar.
Ich hatte im Kopf, dass die sich auch mal ausblendeten, bin mir aber nicht sicher. Hat jemand eine Idee?
Du benutzt inline keyboards? Ich selbst nutze die nicht, aber es gibt die Möglichkeit Nachrichten zu verändern.
Zitat von: igami am 03 Februar 2019, 08:31:49
Du benutzt inline keyboards? Ich selbst nutze die nicht, aber es gibt die Möglichkeit Nachrichten zu verändern.
Tatsächlich nutze ich die normalen Keyboards.
Anbei mal zwei Bilder, um das Problem zu verdeutlichen.
Nachdem ich abbrechen eingegeben habe, wird das Keyboard nicht ausgeblendet, und ich war mir sicher, dass es früher ausgeblendet wurde.
Moin,
Ich denke du könntest dem Keyboard den Parameter one_time_keyboard mitgeben oder den Key ReplyKeyboardRemove verwenden.
Siehe
https://core.telegram.org/bots/api (https://core.telegram.org/bots/api)
VG,
Dirk
Edit: Ist noch ein ToDo (https://forum.fhem.de/index.php/topic,38328.msg545796.html#msg545796)im TelegramBot. Vielleicht kannst du Viegener ja unterstützen
Zitat von: Wuehler am 05 Februar 2019, 18:56:47
Moin,
Ich denke du könntest dem Keyboard den Parameter one_time_keyboard mitgeben oder den Key ReplyKeyboardRemove verwenden.
Siehe
https://core.telegram.org/bots/api (https://core.telegram.org/bots/api)
VG,
Dirk
Edit: Ist noch ein ToDo (https://forum.fhem.de/index.php/topic,38328.msg545796.html#msg545796)im TelegramBot. Vielleicht kannst du Viegener ja unterstützen
Habe gerade mal mit verbose 5 auf meinem TelegramBot-Device mitgeloggt, als ich den meta-Dialog aus dem wiki frisch aufgerufen habe.
2019.02.06 21:27:13 5: TelegramBot_Set Telegram: called
2019.02.06 21:27:13 4: TelegramBot_Set Telegram: Processing TelegramBot_Set( message )
2019.02.06 21:27:13 4: TelegramBot_MakeKeyboard Telegram: json :{"keyboard":[["Tankstelle"],["abbrechen"]],"one_time_keyboard":true}: is utf8? yes
2019.02.06 21:27:13 4: TelegramBot_MakeKeyboard Telegram: json downgraded :{"keyboard":[["Tankstelle"],["abbrechen"]],"one_time_keyboard":true}: is utf8? no
2019.02.06 21:27:13 5: TelegramBot_Set Telegram: start send for cmd :message: and sendType :0:
2019.02.06 21:27:13 5: TelegramBot_SendIt Telegram: called
2019.02.06 21:27:13 5: TelegramBot_SendIt Telegram: try to send message to :############: -:
Ich kann folgendes für dich tun:: - add :{"keyboard":[["Tankstelle"],["abbrechen"]],"one_time_keyboard":true}: - replyid :<undef>:: options ::
Wie man sieht, wird "one_time_keyboard":true mitgesendet.
Um den Fehler dann weiter einzugrenzen, habe ich das Menü mit der portable Variante von Telegram am PC getestet, aber da scheint alles zu funktionieren.
Ich gehe also momentan davon aus, dass es ein Bug in der iOs Version von Telegram ist.
Kann das jemand bestätigen oder alternativ widerlegen?
Vielen Dank!
Erst mal vielen Dank an igami für das nette Modul.
Ich habe inzwischen mehrere Dialoge erstellt funktioniert alles bestens.
Allerdings frage ich mich, ob es möglich wäre nach absetzen der commands ein weiteren commands sofort hinterher zu senden, ohne erst ins Menü zu wechseln. Ich denke da an Lautstärke, wenn die z.B. zu laut gewählt wurdeund man diese mit absetzen erneuten commands auf passenden Wert bringt? Danke.
Hier ein Ausschnitt:
"Player":{
"message":[
"(0%|5%|10%|15%|20%) ",
"(25%|30%|35%|40%|45%) ",
"(50%|55%|60%|65%|70%) ",
"(75%|80%|85%|90%|100%) ",
"(abbrechen|zurück) ",
"Bitte die Laustärke wählen"
],
"0%":{
"commands": "set Player_XY volume 0",
"message":[
"(%me%) ",
"Lautstärke wurde verändert"
]
},
"5%":{
"commands": "set Player_XY volume 5",
"message":[
"(%me%) ",
"Lautstärke wurde verändert"
]
},
"10%":{
"commands": "set Player_XY volume 10",
"message":[
"(%me%) ",
"Lautstärke wurde verändert"
]
},
"15%":{
"commands": "set Player_XY volume 15",
"message":[
"(%me%) ",
"Lautstärke wurde verändert"
]
}
Hallo,
ich tobe mich gerade am Einkaufs Dialog aus, ich möchte / habe dieser erweitert. Allerdings habe ich noch ein Perl Verständnis Problem.
Ich lasse mir die Listen auflisten und kann eine auswählen, diese "merke" ich mir mit einem setreading. Nun benötige ich diese Liste wieder an diversen stellen dieses lese ich entweder durch ein ReadingsVal oder [$SELF:reading] zurück.
Allerdings kann ich nicht $SELF nutzen, da sonst einen error bekomme "Bareword "PostIt_Dialog" not allowed". Mir ist klar, dass dies mit dem Gültigkeitsbereich der Variable zusammenhängt, aber wie bekomme ich dies universell gelöst?
Momentan tut der Dialog, allerdings nur wenn ich $SELF durch den entsprechend Dialog Namen ersetze, ich möchte dies aber universell haben...
defmod PostIt_Dialog msgDialog { "Listen": {\
"message": [\
"{my $content = ReadingsVal('%PostMe%', 'postmeCnt', '');;my $list;; my @a;; for my $i (0..$content) { $list = 'postme'.sprintf('%02i',$i).'Name';; push(@a,ReadingsVal('%PostMe%',$list,''));;};; foreach (@a) {$content .= '('.$_.') ';;};;return('Keine Listen vorhanden') unless(@a);; return ($content);;}",\
"Bitte eine Liste auswählen:"\
],\
\
"Einkaufsliste": {\
"match": "^(?!beenden).+",\
"commands": "setreading $SELF list $message",\
"message": [\
"(Waren hinzufügen) ", \
"(Waren entfernen) ", \
"(einkaufen) ", \
"(abbrechen) ",\
"{my $content = (split(': ', fhem('get %PostMe% list '.ReadingsVal('PostIt_Dialog','list',''))))[1];;;; return('Keine Einträge vorhanden in \"[$SELF:list]\"') unless($content);;;; return(join('\n', split(',', $content)));;;;}"\
],\
"Waren hinzufügen": {\
"message": [\
"Bitte jede Ware als neue Nachricht hinzufügen.",\
"Das hinzufügen von Waren durch \"/beenden\" beenden."\
],\
"Ware hinzufügen": {\
"match": "[^/]+",\
"commands": [\
"set %PostMe% add [$SELF:list] $message",\
"setreading $SELF $recipient_history Listen|Einkaufsliste|Waren hinzufügen"\
]\
}\
},\
"Waren entfernen": {\
"message": [\
"{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list '.ReadingsVal('PostIt_Dialog','list',''))))[1]), 'beenden'). ') ')}",\
"Welche Ware möchtest du entfernen?"\
],\
"Ware entfernen": {\
"match": "^(?!beenden).+",\
"commands": [\
"set %PostMe% remove [$SELF:list] $message",\
"set $SELF say @$recipient Listen|Einkaufsliste|Waren entfernen"\
]\
}\
},\
"einkaufen": {\
"commands": [\
"setreading $SELF $recipient_history Listen|Einkaufsliste|noch einzukaufen"\
],\
"message": [\
"{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list '.ReadingsVal('PostIt_Dialog','list',''))))[1])) . ') ')}",\
"(beenden) ",\
"Bitte die Waren der Reihenfolge nach auswählen in der sie eingekauft werden."\
]\
},\
"noch einzukaufen": {\
"message": [\
"{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list '.ReadingsVal('PostIt_Dialog','list',''))))[1])) . ') ')}",\
"(beenden) ",\
"Noch einzukaufen:"\
],\
"Ware eingekauft": {\
"match": "^(?!beenden).+",\
"commands": [\
"set %PostMe% remove [$SELF:list] $message",\
"set $SELF say @$recipient Listen|Einkaufsliste|noch einzukaufen"\
]\
}\
} \
}\
}\
}
attr PostIt_Dialog allowed rr_xxx,rr_yyy
attr PostIt_Dialog evalSpecials PostMe=PostIt
attr PostIt_Dialog group Dialog
attr PostIt_Dialog room Einkaufsliste,msg
setstate PostIt_Dialog rr_yyy: Toom
setstate PostIt_Dialog 2019-02-21 23:05:29 list Toom
setstate PostIt_Dialog 2019-02-21 23:05:29 state rr_yyy: Toom
Edit: Habe noch das History set $SELF say @$recipient Listen|Einkaufsliste|noch einzukaufen
angepasst, damit der Dialog "läuft"
Zitat von: perez am 21 Februar 2019, 19:41:04
Allerdings frage ich mich, ob es möglich wäre nach absetzen der commands ein weiteren commands sofort hinterher zu senden, ohne erst ins Menü zu wechseln. Ich denke da an Lautstärke, wenn die z.B. zu laut gewählt wurdeund man diese mit absetzen erneuten commands auf passenden Wert bringt?
Dafür muss das "history"-Reading passend mit einem command gesetzt werden:
"setreading $SELF $recipient_history [i:$SELF:TRIGGER]|<Pfad zur passenden Stelle>"
Hallo zusammen.
Ich versuche mir gerade einen Dialog zu bauen, indem ich Stausinformationen vom System erhalte.
Aber er funktioniert jetzt schon nicht, weil ich immer eine Fehlermeldung beim speichern erhalte, irgendwas mit den Klammern stimmt da nicht aber mir wills nicht in den Schädel, was ich falsch mache. Kann mal bitte einer von Euch drauf schauen und mir sagen, wo mein Fehler ist. Danke.
defmod status_Dialog msgDialog {"Systeminformationen":{\
"message": [\
"(Fenster) ",\
"(Batterien Fenster) ",\
"(Batterien Heizung) ",\
"(Netzwerk) ",\
"(System) ",\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"Welche Informationen:"\
],\
"Fenster":{\
"message":[\
"{return('(Wohnzimmer links) ') if(ReadingsVal('W_WOHN_L', 'state', ''))}",\
"{return('(Wohnzimmer mitte) ') if(ReadingsVal('W_WOHN_M', 'state', ''))}",\
"{return('(Wohnzimmer rechts) ') if(ReadingsVal('W_WOHN_R', 'state', ''))}",\
"{return('(Büro links) ') if(ReadingsVal('W_BUERO_L', 'state', ''))}",\
"{return('(Büro rechts) ') if(ReadingsVal('W_BUERO_R', 'state', ''))}",\
"{return('(Küche links) ') if(ReadingsVal('W_KUECHE_L', 'state', ''))}",\
"{return('(Küche rechts) ') if(ReadingsVal('W_KUECHE_R', 'state', ''))}",\
"{return('(Schlafzimmer links) ') if(ReadingsVal('W_BED_L', 'state', ''))}",\
"{return('(Schlafzimmer rechts) ') if(ReadingsVal('W_BED_R', 'state', ''))}",\
"(zurück) ",\
"TelegramBot_MTYPE=queryInline (%me%) "\
],\
},\
"Batterien Fenster":{\
"message":[\
"{return('(Wohnzimmer links) ') if(ReadingsVal('W_WOHN_L', 'batteryState', ''))}",\
"{return('(Wohnzimmer mitte) ') if(ReadingsVal('W_WOHN_M', 'batteryState', ''))}",\
"{return('(Wohnzimmer rechts) ') if(ReadingsVal('W_WOHN_R', 'batteryState', ''))}",\
"{return('(Büro links) ') if(ReadingsVal('W_BUERO_L', 'batteryState', ''))}",\
"{return('(Büro rechts) ') if(ReadingsVal('W_BUERO_R', 'batteryState', ''))}",\
"{return('(Küche links) ') if(ReadingsVal('W_KUECHE_L', 'batteryState', ''))}",\
"{return('(Küche rechts) ') if(ReadingsVal('W_KUECHE_R', 'batteryState', ''))}",\
"{return('(Schlafzimmer links) ') if(ReadingsVal('W_BED_L', 'batteryState', ''))}",\
"{return('(Schlafzimmer rechts) ') if(ReadingsVal('W_BED_R', 'batteryState', ''))}",\
"(zurück) ",\
"TelegramBot_MTYPE=queryInline (%me%) "\
],\
},\
"Batterien Heizung":{\
"message":[\
"{return('(Wohnzimmer) ') if(ReadingsVal('HZ_WOHNZ', 'battery', ''))}",\
"{return('(Büro) ') if(ReadingsVal('HZ_BUERO', 'battery', ''))}",\
"{return('(Küche) ') if(ReadingsVal('HZ_KUECHE', 'battery', ''))}",\
"{return('(Schlafzimmer) ') if(ReadingsVal('HZ_BED', 'battery', ''))}",\
"(zurück) ",\
"TelegramBot_MTYPE=queryInline (%me%) "\
],\
},\
}\
}\
}
attr status_Dialog allowed rr_Marcus
attr status_Dialog room Telegram
Zitat von: ErzGabriel am 24 Februar 2019, 13:54:26
Hallo zusammen.
Ich versuche mir gerade einen Dialog zu bauen, indem ich Stausinformationen vom System erhalte.
Aber er funktioniert jetzt schon nicht, weil ich immer eine Fehlermeldung beim speichern erhalte, irgendwas mit den Klammern stimmt da nicht aber mir wills nicht in den Schädel, was ich falsch mache. Kann mal bitte einer von Euch drauf schauen und mir sagen, wo mein Fehler ist. Danke.
defmod status_Dialog msgDialog {"Systeminformationen":{\
"message": [\
"(Fenster) ",\
"(Batterien Fenster) ",\
"(Batterien Heizung) ",\
"(Netzwerk) ",\
"(System) ",\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"Welche Informationen:"\
],\
"Fenster":{\
"message":[\
"{return('(Wohnzimmer links) ') if(ReadingsVal('W_WOHN_L', 'state', ''))}",\
"{return('(Wohnzimmer mitte) ') if(ReadingsVal('W_WOHN_M', 'state', ''))}",\
"{return('(Wohnzimmer rechts) ') if(ReadingsVal('W_WOHN_R', 'state', ''))}",\
"{return('(Büro links) ') if(ReadingsVal('W_BUERO_L', 'state', ''))}",\
"{return('(Büro rechts) ') if(ReadingsVal('W_BUERO_R', 'state', ''))}",\
"{return('(Küche links) ') if(ReadingsVal('W_KUECHE_L', 'state', ''))}",\
"{return('(Küche rechts) ') if(ReadingsVal('W_KUECHE_R', 'state', ''))}",\
"{return('(Schlafzimmer links) ') if(ReadingsVal('W_BED_L', 'state', ''))}",\
"{return('(Schlafzimmer rechts) ') if(ReadingsVal('W_BED_R', 'state', ''))}",\
"(zurück) ",\
"TelegramBot_MTYPE=queryInline (%me%) "\
],\
},\
"Batterien Fenster":{\
"message":[\
"{return('(Wohnzimmer links) ') if(ReadingsVal('W_WOHN_L', 'batteryState', ''))}",\
"{return('(Wohnzimmer mitte) ') if(ReadingsVal('W_WOHN_M', 'batteryState', ''))}",\
"{return('(Wohnzimmer rechts) ') if(ReadingsVal('W_WOHN_R', 'batteryState', ''))}",\
"{return('(Büro links) ') if(ReadingsVal('W_BUERO_L', 'batteryState', ''))}",\
"{return('(Büro rechts) ') if(ReadingsVal('W_BUERO_R', 'batteryState', ''))}",\
"{return('(Küche links) ') if(ReadingsVal('W_KUECHE_L', 'batteryState', ''))}",\
"{return('(Küche rechts) ') if(ReadingsVal('W_KUECHE_R', 'batteryState', ''))}",\
"{return('(Schlafzimmer links) ') if(ReadingsVal('W_BED_L', 'batteryState', ''))}",\
"{return('(Schlafzimmer rechts) ') if(ReadingsVal('W_BED_R', 'batteryState', ''))}",\
"(zurück) ",\
"TelegramBot_MTYPE=queryInline (%me%) "\
],\
},\
"Batterien Heizung":{\
"message":[\
"{return('(Wohnzimmer) ') if(ReadingsVal('HZ_WOHNZ', 'battery', ''))}",\
"{return('(Büro) ') if(ReadingsVal('HZ_BUERO', 'battery', ''))}",\
"{return('(Küche) ') if(ReadingsVal('HZ_KUECHE', 'battery', ''))}",\
"{return('(Schlafzimmer) ') if(ReadingsVal('HZ_BED', 'battery', ''))}",\
"(zurück) ",\
"TelegramBot_MTYPE=queryInline (%me%) "\
],\
},\
}\
}\
}
attr status_Dialog allowed rr_Marcus
attr status_Dialog room Telegram
Wenn's "nur" an den Klammer liegt, versuche es mal hiermit https://jsonformatter.org/json-parser (https://jsonformatter.org/json-parser), hilft mir immer...
@ ErzGabriel:
Falls noch aktuell. Im Skript waren zu viele Kommas und Klammern..
defmod status_Dialog msgDialog {"Systeminformationen":{
"message": [
"(Fenster) ",
"(Batterien Fenster) ",
"(Batterien Heizung) ",
"(Netzwerk) ",
"(System) ",
"TelegramBot_MTYPE=queryInline (%me%) ",
"Welche Informationen:"
],
"Fenster":{
"message":[
"{return('(Wohnzimmer links) ') if(ReadingsVal('W_WOHN_L', 'state', ''))}",
"{return('(Wohnzimmer mitte) ') if(ReadingsVal('W_WOHN_M', 'state', ''))}",
"{return('(Wohnzimmer rechts) ') if(ReadingsVal('W_WOHN_R', 'state', ''))}",
"{return('(Büro links) ') if(ReadingsVal('W_BUERO_L', 'state', ''))}",
"{return('(Büro rechts) ') if(ReadingsVal('W_BUERO_R', 'state', ''))}",
"{return('(Küche links) ') if(ReadingsVal('W_KUECHE_L', 'state', ''))}",
"{return('(Küche rechts) ') if(ReadingsVal('W_KUECHE_R', 'state', ''))}",
"{return('(Schlafzimmer links) ') if(ReadingsVal('W_BED_L', 'state', ''))}",
"{return('(Schlafzimmer rechts) ') if(ReadingsVal('W_BED_R', 'state', ''))}",
"(zurück) ",
"TelegramBot_MTYPE=queryInline (%me%) "
]
},
"Batterien Fenster":{
"message":[
"{return('(Wohnzimmer links) ') if(ReadingsVal('W_WOHN_L', 'batteryState', ''))}",
"{return('(Wohnzimmer mitte) ') if(ReadingsVal('W_WOHN_M', 'batteryState', ''))}",
"{return('(Wohnzimmer rechts) ') if(ReadingsVal('W_WOHN_R', 'batteryState', ''))}",
"{return('(Büro links) ') if(ReadingsVal('W_BUERO_L', 'batteryState', ''))}",
"{return('(Büro rechts) ') if(ReadingsVal('W_BUERO_R', 'batteryState', ''))}",
"{return('(Küche links) ') if(ReadingsVal('W_KUECHE_L', 'batteryState', ''))}",
"{return('(Küche rechts) ') if(ReadingsVal('W_KUECHE_R', 'batteryState', ''))}",
"{return('(Schlafzimmer links) ') if(ReadingsVal('W_BED_L', 'batteryState', ''))}",
"{return('(Schlafzimmer rechts) ') if(ReadingsVal('W_BED_R', 'batteryState', ''))}",
"(zurück) ",
"TelegramBot_MTYPE=queryInline (%me%) "
]
},
"Batterien Heizung":{
"message":[
"{return('(Wohnzimmer) ') if(ReadingsVal('HZ_WOHNZ', 'battery', ''))}",
"{return('(Büro) ') if(ReadingsVal('HZ_BUERO', 'battery', ''))}",
"{return('(Küche) ') if(ReadingsVal('HZ_KUECHE', 'battery', ''))}",
"{return('(Schlafzimmer) ') if(ReadingsVal('HZ_BED', 'battery', ''))}",
"(zurück) ",
"TelegramBot_MTYPE=queryInline (%me%) "
]
}
}
[/code]
Zitat von: igami am 22 Februar 2019, 06:27:45
Dafür muss das "history"-Reading passend mit einem command gesetzt werden:
"setreading $SELF $recipient_history [i:$SELF:TRIGGER]|<Pfad zur passenden Stelle>"
Danke!! Versuche so umzusetzen:)
@perez
Ja, Thema ist noch aktuell und ich danke Dir fürs überarbeiten.
Könntest Du mit das mit dem set history bitte mal erklären? Danke.
Ich stehe gerade etwas auf dem Schlauch bei dem Inline-Keyboard. Im Meta Dialog wird %me% als Inline-Keyboard angezeigt, jedoch funktioniert nichts wenn ich drauf klicke. Habe auch schon bereits "(%me%:%me%)" ausprobiert, ohne erfolgt. Kann mir jemand von euch weiterhelfen und schauen was ich bei meiner Definition übersehen habe?
mein Meta Dialog
Internals:
CFGFN /opt/fhem/config_cfg/Test-Funktionen.cfg
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%:%me%) ",
"Dialog beendet."
]
}
}
FUUID 5c7a3f7e-f33f-31dd-5434-13278f6e258f01b3
MSGCOMMAND msg push \@$recipients $message
NAME Main_MsgDialog
NOTIFYDEV TYPE=(ROOMMATE|GUEST)
NR 1294
NTFY_ORDER 50-Main_MsgDialog
STATE rr.Marcus: abbrechen
TRIGGER Beenden,Zurück,Abbrechen,start
TYPE msgDialog
OLDREADINGS:
READINGS:
2019-03-02 09:33:44 state rr.Marcus: abbrechen
Attributes:
allowed everyone
mein Roommate
Internals:
CFGFN /opt/fhem/config_cfg/Homestatus_rgr.Bewohner_rr.Marcus.cfg
CHANGED
DEF rgr.Bewohner
DURATIONTIMER 1551515955.04479
FUUID 5c7a3f80-f33f-31dd-38bd-24b10b168609b931
NAME rr.Marcus
NOTIFYDEV global,BT_Tag.Marcus
NR 1421
NTFY_ORDER 50-rr.Marcus
READY 1
RESIDENTGROUPS rgr.Bewohner
STATE ???
TYPE ROOMMATE
VERSION 20_ROOMMATE.pm:v0.0.18681/2019-02-21
READINGS:
2019-02-21 19:59:52 durTimerAbsence 00:00:00
2019-02-21 19:59:52 durTimerAbsence_cr 0
2019-02-21 19:59:52 durTimerPresence 00:00:00
2019-02-21 19:59:52 durTimerPresence_cr 0
2019-02-21 19:59:52 durTimerSleep 00:00:00
2019-02-21 19:59:52 durTimerSleep_cr 0
2019-03-02 09:33:45 fhemMsgPush (start)
Dialog abgebrochen.
2019-03-02 09:33:45 fhemMsgPushGw TelegramBot:@XXXXXXXXX:OK
2019-03-02 09:33:45 fhemMsgPushPrio 0
2019-03-02 09:33:45 fhemMsgPushState 1
2019-03-02 09:33:45 fhemMsgPushTitle -
2019-03-02 09:33:44 fhemMsgRcvPush abbrechen
2019-03-02 09:33:44 fhemMsgRcvPushGw TelegramBot
2019-03-02 09:33:45 fhemMsgState 1
2019-03-02 09:33:45 fhemMsgStateTypes push:1
TIMER:
rr.Marcus_DurationTimer:
HASH rr.Marcus
MODIFIER DurationTimer
NAME rr.Marcus_DurationTimer
Attributes:
alias Marcus
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 .*aufgestanden:scene_sleeping_alternat:home .*:user_unknown:home
eventMap home:zuhause absent:abwesend gone:verreist gotosleep:bettfertig asleep:schlaeft awoken:aufgestanden
group Bewohner
icon people_sensor
msgContactPush TelegramBot:@XXXXXXXXX
room Homestatus
rr_presenceDevices BT_Tag.Marcus
rr_realname alias
webCmd state
widgetOverride state:zuhause,bettfertig,schlaeft,aufgestanden,abwesend,verreist
mein Bot
Internals:
CFGFN /opt/fhem/config_cfg/Service_Message.cfg
CHANGED
DEF
FAILS 0
FUUID 5c7a3f7b-f33f-31dd-11ca-d411b41fea09434f
NAME TelegramBot
NR 761
OLD_POLLING 12
POLLING 12
SNAME TelegramBot
STATE Polling
TYPE TelegramBot
UPDATER 0
WAIT 0
me XXXXXXXXX:SmartHomeCCU:@SmartHomeCCU_bot
offset_id XXXXXXXXX
sentLastResult SUCCESS
sentMsgId 2880
sentMsgOptions
sentMsgPeer Marcus
sentMsgPeerId XXXXXXXXX
sentMsgResult SUCCESS
sentMsgText
Dialog abgebrochen.
AliasCmds:
Contacts:
XXXXXXXXX XXXXXXXXX:Marcus:
HU_DO_PARAMS:
NAME
addr https://api.telegram.org:443
auth 0
boundary TelegramBot_boundary-x0123
buf
code 200
compress 1
conn
data
displayurl <hidden>
header agent: TelegramBot/1.0
User-Agent: TelegramBot/1.0
Accept: application/json
Accept-Charset: utf-8
Content-Type: multipart/form-data; boundary=TelegramBot_boundary-x0123
hideurl 1
host api.telegram.org
httpheader HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Sat, 02 Mar 2019 08:33:45 GMT
Content-Type: application/json
Content-Length: 266
Connection: close
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Expose-Headers: Content-Length,Content-Type,Date,Server,Connection
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
hu_blocking 0
hu_filecount 1
hu_port 443
hu_portSfx
loglevel 4
method POST
path /bot780003243:AAHZZpvq-uKMarNXYzVCeOL8H3PFuFktofc/sendMessage
protocol https
redirects 0
timeout 30
url https://api.telegram.org/bot780003243:AAHZZpvq-uKMarNXYzVCeOL8H3PFuFktofc/sendMessage
args:
XXXXXXXXX
Dialog abgebrochen.
{"inline_keyboard":[[{"callback_data":"start","text":"start"}]]}
0
undef
1
hash:
sslargs:
HU_UPD_PARAMS:
FD 11
NAME
addr https://api.telegram.org:443
auth 0
buf
code 200
compress 1
displayurl <hidden>
header agent: TelegramBot/1.0
User-Agent: TelegramBot/1.0
Accept: application/json
Accept-Charset: utf-8
hideurl 1
host api.telegram.org
hu_blocking 0
hu_filecount 11
hu_port 443
hu_portSfx
isPolling update
loglevel 4
method GET
offset XXXXXXXXX
path /bot780003243:AAHZZpvq-uKMarNXYzVCeOL8H3PFuFktofc/getUpdates?offset=200413272&limit=5&timeout=120
protocol https
redirects 0
timeout 245
url https://api.telegram.org/bot780003243:AAHZZpvq-uKMarNXYzVCeOL8H3PFuFktofc/getUpdates?offset=200413272&limit=5&timeout=120
hash:
sslargs:
READINGS:
2019-03-02 09:31:55 Contacts XXXXXXXXX:Marcus:
2019-03-02 00:00:48 PollingErrCount 0
2019-02-21 19:58:33 PollingLastError NonBlockingGet timed out on read from <hidden> after 245s
2019-03-02 08:59:52 StoredCommands FHEM set WZ.HKTH.001_Control controlMode auto
start
2019-03-02 09:33:44 msgChat Marcus
2019-03-02 09:33:44 msgChatId XXXXXXXXX
2019-03-02 09:33:44 msgFileId
2019-03-02 09:33:44 msgId 2879
2019-03-02 09:33:44 msgPeer Marcus
2019-03-02 09:33:44 msgPeerId XXXXXXXXX
2019-03-02 09:33:44 msgReplyMsgId
2019-03-02 09:33:44 msgText abbrechen
2019-03-02 09:33:44 prevMsgChat Marcus
2019-03-02 09:33:44 prevMsgFileId
2019-03-02 09:33:44 prevMsgId 2877
2019-03-02 09:33:44 prevMsgPeer Marcus
2019-03-02 09:33:44 prevMsgPeerId XXXXXXXXX
2019-03-02 09:33:44 prevMsgReplyMsgId
2019-03-02 09:33:44 prevMsgText Berechtigungen
2019-03-02 09:33:46 queryData start
2019-03-02 09:33:46 queryID 2961880442298486279
2019-03-02 09:33:46 queryPeer Marcus
2019-03-02 09:33:46 queryPeerId XXXXXXXXX
2019-03-02 09:33:46 queryReplyMsgId 2880
2019-03-02 09:33:45 sentMsgId 2880
2019-03-02 09:33:45 sentMsgPeerId XXXXXXXXX
2019-03-02 09:33:45 sentMsgResult SUCCESS
inlinechats:
sentQueue:
Attributes:
alias Telegram
allowUnknownContacts 0
cmdFavorites /cmd
cmdKeyword FHEM
cmdRestrictedPeer XXXXXXXXX
defaultPeer XXXXXXXXX
event-on-change-reading state
event-on-update-reading msgText
favorites /[WZTemp_20]=set WZ.HKTH.001_Clima desired-temp 20.0;
/[WZTemp_23]=set WZ.HKTH.001_Clima desired-temp 23.0;
/[BADTemp_20]=set BAD.HKTH.001_Clima desired-temp 20.0;
/[BADTemp_25]=set BAD.HKTH.001_Clima desired-temp 25.0;
favorites2Col 1
group Message-Service
parseModeSend 1_Markdown
pollingTimeout 120
room System
utf8Special 1
Moin,
dein msgConfig device wäre noch interessant...
Und hast du schon eigene Dialoge erstellt?
VG Sebastian
Ich habe bereits eigene Dialoge erstellt, unter anderem auch einen mit einem Ziffernblock, welcher ebenfalls über ein Inline-Keyboard laufen soll.
mein msgConfig
Internals:
CFGFN /opt/fhem/config_cfg/Service_Message.cfg
FUUID 5c7a46ae-f33f-31dd-4d29-eca3aac0bf5c581b
NAME globalMsg
NOTIFYDEV TYPE=(Jabber|TelegramBot|yowsup)
NR 752
NTFY_ORDER 50-globalMsg
STATE ???
TYPE msgConfig
VERSION 75_msgConfig.pm:v0.0.18681/2019-02-21
READINGS:
2019-02-28 19:58:36 fhemMsgPush (%me%) aaaa
2019-02-28 19:58:36 fhemMsgPushGw TelegramBot:OK
2019-02-28 19:58:36 fhemMsgPushPrio 0
2019-02-28 19:58:36 fhemMsgPushState 1
2019-02-28 19:58:36 fhemMsgPushTitle -
2019-02-28 19:58:36 fhemMsgState 1
2019-02-28 19:58:36 fhemMsgStateTypes push:1 forwards:text>push
Attributes:
group Global
msgContactPush TelegramBot
msgDialog_evalSpecials me=start
TelegramBot=TelegramBot
room System
userattr msgDialog_evalSpecials:textField-long msgDialog_msgCommand:textField
Der cmdalias "message2queryEditInline" ist auch nicht disabled?
Zitat von: binford6000 am 02 März 2019, 10:13:51
Der cmdalias "message2queryEditInline" ist auch nicht disabled?
Ist dieser notwendig? Dieser ist doch nur zum Versenden und nicht zum Empfang notwendig. Oder liege ich da falsch?
Ich schalte mit einem notify von normal auf Inline Keyboard um:
inline_normal.DUM:.* {
if ("$EVENT" =~ "on") {
fhem("set sentMsgIdByPeerId active; attr message2queryEditInline disable 0");
}
elsif ("$EVENT" =~ "off") {
fhem("set sentMsgIdByPeerId inactive; attr message2queryEditInline disable 1");
}
}
Wobei ich das ewig nicht mehr gemacht habe. Finde gerade das Inline Keyboard bei Telegram super!
VG Sebastian
Zitat von: binford6000 am 02 März 2019, 10:35:37
Ich schalte mit einem notify von normal auf Inline Keyboard um:
inline_normal.DUM:.* {
if ("$EVENT" =~ "on") {
fhem("set sentMsgIdByPeerId active; attr message2queryEditInline disable 0");
}
elsif ("$EVENT" =~ "off") {
fhem("set sentMsgIdByPeerId inactive; attr message2queryEditInline disable 1");
}
}
Wobei ich das ewig nicht mehr gemacht habe. Finde gerade das Inline Keyboard bei Telegram super!
VG Sebastian
Siehe meine vorherige Antwort #604
Ich schalte im MsgDialog auf Inline um, in dem ich vor den Button "TelegramBot_MTYPE=queryInline" setze. Das funktioniert auch soweit, nur bekomm ich es nicht hin, dass der MsgDialog auf "queryData" vom TelegramBot triggert.
Hmm da kann ich dir leider nicht weiterhelfen.
Aber vielleicht haben die anderen msgDialog-Junkies noch eine Idee... ;)
VG Sebastian
Habe mir e mal etwas genauer angeschaut. Der MsgDialog trigger nur auf "TYPE=(ROOMMATE|GUEST)"-Devices, also nicht direkt auf den TelegramBot. Somit müsste der Fehler doch im ROOMMATE Device liegen? Aber laut Logfile triggert ROOMATE auf nicht auf die queryData vom Bot.
Dann probier mal
attr rr.Marcus event-on-update-reading fhemMsgRcvPush
VG Sebastian
Zitat von: binford6000 am 02 März 2019, 11:19:14
Dann probier mal
attr rr.Marcus event-on-update-reading fhemMsgRcvPush
VG Sebastian
Bringt auch nichts, da die queryData vom Bot nicht in das Reading geschrieben werden.
Fehler gefunden 😏
ZitatFehler gefunden 😏
Und möchtest du vielleicht gerne andere User, die eventuell das gleiche Problem haben an deiner Lösung teilhaben lassen?
Zitat von: Wolle02 am 02 März 2019, 17:24:48
Und möchtest du vielleicht gerne andere User, die eventuell das gleiche Problem haben an deiner Lösung teilhaben lassen?
Gern, die Fehlerquelle saß wie so oft vorm Bildschirm :-\
attr TelegramBot event-on-change-reading state
attr TelegramBot event-on-update-reading msgText
Da war es kein Wunder, dass nichts auf "queryData" getriggert wurde.
Hallo zusammen,
ich würde gerne das Modul mit Pushbullet nutzen, bekommen jedoch immer eine Fehlermeldung beim Gateway, please help :=)
fhemMsgPushGw Pushbullet:UNDEFINED aber es ist doch da :
5c592822-f33f-c225-5839-14874032f9cbcbb6
LAST_PUSH 2019-03-10 09:27:57 NAME push NR 73 STATE Initialized TYPE Pushbullet Readings state Initialized
Besten Dank vorab ! :=)
Zitat von: toensi am 10 März 2019, 10:06:35
Hallo zusammen,
ich würde gerne das Modul mit Pushbullet nutzen, bekommen jedoch immer eine Fehlermeldung beim Gateway, please help :=)
fhemMsgPushGw Pushbullet:UNDEFINED aber es ist doch da :
5c592822-f33f-c225-5839-14874032f9cbcbb6
LAST_PUSH 2019-03-10 09:27:57 NAME push NR 73 STATE Initialized TYPE Pushbullet Readings state Initialized
Besten Dank vorab ! :=)
also geht der msg Befehl schon nicht? Dann bitte an den Maintainer von msg wenden
Hallo,
Ich wollte die Begrüßung etwas freundlicher gestalten.
So in der Art ,,Hallo Gerhard, was kann ich für dich tun?"
Dazu hätte ich einfach die Rückmeldung im meta_Dialog ändern wollen:
"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) ')}",\
"'Hallo ' . ReadingsVal($recipient, 'group','') . ', was kann ich für dich tun?'"\
]\
Damit sollte entweder mein Name oder der meiner Frau erscheinen.
Tut es aber nicht.
Wenn ich statt $recipient rr_Gerhard schreibe, dann kommt folgende Meldung im Telelgramn:
'Hallo ' . ReadingsVal(rr_Gerhard, 'group','') . ', was kann ich für dich tun?'
Könnte mir da bitte jemand helfen?
Danke, Lg, Gerhard
Zitat von: gestein am 13 April 2019, 09:23:44
Könnte mir da bitte jemand helfen?
Die zweite Zeile auch noch mit {} versehen
Also wenn ich folgendes schreibe, reagiert das System gar nicht mehr:
"{'Hallo ' . [$recipient:group] . ', was kann ich für dich tun?'}"
Als log-Eintrag erscheint:
2019.04.13 18:42:56.268 1: No match: 'msgText: Marvis'
2019.04.13 18:42:56.271 1: Nothing to do: msgText: Marvis
Der Wert "group" ist nämlich ein Attribut, da kann ReadingsVal nicht helfen.
Was mache ich falsch?
Du hast nun zwei Änderungen gleichzeitig gemacht. Jede für sich sollte funktionieren, zusammen aber nicht.
Manchmal sieht man den Wald vor lauter Bäumen nicht mehr.
Bei einem Roommate ist "group" kein Reading, sondern ein Attribut. Daher muss ich ja AttrVal nehmen.
Für alle, die das auch haben möchten, hier die richtige Zeile:
"{'Hallo ' . AttrVal('$recipient', 'group','') . ', was kann ich für dich tun?'}"
Danke und lg, Gerhard
Hallo,
nachdem die Begrüßung nun funktioniert ;) , bin ich dabei mir einen Dialog zu basteln, der alle Lampen auf meiner Terrasse schaltet.
Das funktioniert auch schon ganz gut.
Manchmal passiert es, dass die Lampen nicht funktionieren, da sie relativ weit weg sind (Empfangsprobleme).
Daher würde ich gerne im Message-Teil des Dialog alle nicht funktionierenden Lampen auflisten.
Das sollte über z.B. den "state" und den Raum funktionieren.
Ich könnte natürlich alle Lampen dort einzeln aufführen und den state prüfen.
Dann muss ich bei Änderungen aber auf den Dialog wieder ändern.
Ginge das auch automatisch über eine Schleife?
Danke für jede Hilfe!
lg, Gerhard
Mittlerweile habe ich diesen Dialog von Sebastian gefunden:
https://forum.fhem.de/index.php/topic,77297.msg747254.html#msg747254 (https://forum.fhem.de/index.php/topic,77297.msg747254.html#msg747254)
Im Prinzip wäre das genau das, was ich auch machen möchte.
Allerdings komme ich mit dem "get" nicht hin, da die devices vom Typ CUL_HM kein "Get name" oder ähnliches kennen.
Oder verstehe ich das falsch?
Wie könnte ich das lösen?
Vielen Dank für jede Hilfe!
lg, Gerhard
Hallo,
und noch eine Frage ist leider aufgetaucht.
Ich habe mir den tollen Dialog von Sebastian für meine Beleuchtungen adaptiert.
https://forum.fhem.de/index.php/topic,77297.msg807252/topicseen.html#msg807252 (https://forum.fhem.de/index.php/topic,77297.msg807252/topicseen.html#msg807252)
Was ich aber nicht verstehe, sind die Zeilen wie diese:
"{return('(💡Küche: [SteckdoseIT2:state]:Küche einschalten) ') if(ReadingsVal('SteckdoseIT2', 'state', '') eq 'off')}",\
Warum steht da "Küche: [SteckdoseIT2:state]:Küche einschalten"?
Im Telegramm erscheint der Text "💡Küche: on:Küche einschalten" oder "💡Küche: off:Küche einschalten".
Beim Drücken des Knopfes in Telegramm tut sich nix.
Im log-File erscheint dann:
2019.04.15 00:53:26.115 5: msgDialog (Status_Dialog) - entering msgDialog_Notify
2019.04.15 00:53:26.119 4: msgDialog (Status_Dialog) triggered by "rr_Gerhard fhemMsgRcvPush: 💡Küche einschalten: off:Küche einschalten"
2019.04.15 00:53:26.122 5: msgDialog (Status_Dialog)
entering msgDialog_progress
recipients: rr_Gerhard
message: 💡Küche einschalten: off:Küche einschalten
force: 0
2019.04.15 00:53:26.125 5: msgDialog (Status_Dialog) - entering msgDialog_evalSpecials
2019.04.15 00:53:26.607 1: No match: 'msgText: 💡Küche einschalten: off:Küche einschalten'
2019.04.15 00:53:26.611 1: Nothing to do: msgText: 💡Küche einschalten: off:Küche einschalten
Mit dem msgText kann ja auch nichts funktionieren, da das Command nur "Küche einschalten" heißt.
Was mache ich falsch bzw. was verstehe ich denn da nicht?
Danke für jede Hilfe.
lg, Gerhard
Moin,
Im Dialog von Sebastian gibt es weiter unten den Dialogteil zum ,,Küche einschalten", dort steht der set ... on Befehl . Falls du den Teil auch hast und es trotzdem nicht funktioniert, hast du evtl ein Problem mit den Umlauten.
VG,
Dirk
Zitat von: gestein am 15 April 2019, 01:22:33
Hallo,
und noch eine Frage ist leider aufgetaucht.
Ich habe mir den tollen Dialog von Sebastian für meine Beleuchtungen adaptiert.
https://forum.fhem.de/index.php/topic,77297.msg807252/topicseen.html#msg807252 (https://forum.fhem.de/index.php/topic,77297.msg807252/topicseen.html#msg807252)
Was ich aber nicht verstehe, sind die Zeilen wie diese:
"{return('(💡Küche: [SteckdoseIT2:state]:Küche einschalten) ') if(ReadingsVal('SteckdoseIT2', 'state', '') eq 'off')}",\
Warum steht da "Küche: [SteckdoseIT2:state]:Küche einschalten"?
Im Telegramm erscheint der Text "💡Küche: on:Küche einschalten" oder "💡Küche: off:Küche einschalten".
Beim Drücken des Knopfes in Telegramm tut sich nix.
Im log-File erscheint dann:
2019.04.15 00:53:26.115 5: msgDialog (Status_Dialog) - entering msgDialog_Notify
2019.04.15 00:53:26.119 4: msgDialog (Status_Dialog) triggered by "rr_Gerhard fhemMsgRcvPush: 💡Küche einschalten: off:Küche einschalten"
2019.04.15 00:53:26.122 5: msgDialog (Status_Dialog)
entering msgDialog_progress
recipients: rr_Gerhard
message: 💡Küche einschalten: off:Küche einschalten
force: 0
2019.04.15 00:53:26.125 5: msgDialog (Status_Dialog) - entering msgDialog_evalSpecials
2019.04.15 00:53:26.607 1: No match: 'msgText: 💡Küche einschalten: off:Küche einschalten'
2019.04.15 00:53:26.611 1: Nothing to do: msgText: 💡Küche einschalten: off:Küche einschalten
Mit dem msgText kann ja auch nichts funktionieren, da das Command nur "Küche einschalten" heißt.
Was mache ich falsch bzw. was verstehe ich denn da nicht?
Danke für jede Hilfe.
lg, Gerhard
Moin Gerhard,
wie Dirk bereits geschrieben hat kommt der set Befehl dann weiter unten im Dialog.
Diesen habe ich so allerdings nicht mehr im Einsatz, da ich irgendwann keine Lust mehr hatte einzelne
Lampen hinzuzufügen. Ich mach das jetzt mit einem Dialog und ein paar Zeilen in der myUtils:
Dialog:
defmod 02.Lampen_Dialog msgDialog {\
"04.💡...Lampen....💡": {\
"message": [\
"(💡 Lampe einschalten) ",\
"(💡 Lampe ausschalten) ",\
"(abbrechen|zurück:%me%) ",\
"Bitte wählen:"\
],\
"💡 Lampe einschalten": {\
"message": [\
"{return(lightsOn())}"\
],\
"Einschalten": {\
"match": ".*licht",\
"commands": [\
"set $message on",\
"set $SELF say @$recipient 04.💡...Lampen....💡|Lampe einschalten"\
]\
},\
"Aktualisieren": {\
"commands": [\
"set $SELF say @$recipient 04.💡...Lampen....💡|Lampe einschalten"\
]\
},\
"Zurück": {\
"commands": [\
"set $SELF say @$recipient 04.💡...Lampen....💡"\
]\
}\
},\
"💡 Lampe ausschalten": {\
"message": [\
"{return(lightsOut())}"\
],\
"Ausschalten": {\
"match": ".*_licht",\
"commands": [\
"set $message off",\
"set $SELF say @$recipient 04.💡...Lampen....💡|Lampe ausschalten"\
]\
},\
"Aktualisieren": {\
"commands": [\
"set $SELF say @$recipient 04.💡...Lampen....💡|Lampe ausschalten"\
]\
},\
"Zurück": {\
"commands": [\
"set $SELF say @$recipient 04.💡...Lampen....💡"\
]\
}\
}\
\
}\
}
attr 02.Lampen_Dialog allowed everyone
attr 02.Lampen_Dialog group Dialoge
attr 02.Lampen_Dialog icon dialog
attr 02.Lampen_Dialog room 90_System->96_Dialogsteuerung
myUtils:
sub lightsOut
{
my @lights = devspec2array('.*_licht:FILTER=state!=off');
my $msg = '';
if (@lights > 0 and defined($defs{$lights[0]})) {
foreach (@lights) {
$msg .= '('.AttrVal($_,"alexaName","").' :'.$_.') ';
}
$msg .= '(🔄Aktualisieren) (Zurück) (⬆️Hauptmenü:Q) Folgende Lampen sind an:';
}
else {
$msg = '(🔄Aktualisieren) (Zurück) (⬆️Hauptmenü:Q) Alle Lampen sind aus.';
}
return $msg;
}
sub lightsOn
{
my @lights = devspec2array('.*_licht:FILTER=state!=on');
my $msg;
if (@lights > 0 and defined($defs{$lights[0]})) {
foreach (@lights){
$msg .= '('.AttrVal($_,"alexaName","").' :'.$_.') ';
}
$msg .= '(🔄Aktualisieren) (Zurück) (⬆️Hauptmenü:Q) Folgende Lampen sind aus:';
}
else {
$msg = '(🔄Aktualisieren) (Zurück) (⬆️Hauptmenü:Q) Alle Lampen sind an.';
}
return $msg;
}
VG Sebastian
Hallo Dirk, hallo Sebastian,
Den set-Befehl habe ich natürlich auch drinnen.
Allerdings mit "Küche einschalten" und der wird so nie aufgerufen.
Danke für die Tipps.
Ich denke, ich werde das dann auch so machen.
Und das dürfte auch meine zweite Frage nach dem Auflisten der fehlerhaften Schalter beantworten.
Schaut übrigens echt toll aus und hebt den WAF (fast) ins Unendliche.
Endlich ist mein fhem keine Spinnerei und Bastelei mehr sondern wird auch von meiner Holden geschätzt und genutzt.
Danke dafür.
lg, Gerhard
@Dirk:
Das mit den Umlauten sollte ja durch das Attribut utf8Special im TelegramBot device funktionieren. Dargestellt wird zumindest alles richtig.
Das einzige was nicht funktioniert ist das hier (und es irritiert mich etwas):
defmod status_Dialog msgDialog {"Systeminformationen":{\
"message": [\
"Fenster und Türen) ",\
"(Batterien Fenster) ",\
"(Batterien Heizung) ",\
"(Netzwerk) ",\
"(System) ",\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"Welche Informationen:"\
],\
"Fenster und Türen":{\
"message":[\
"{return('Gästezimmer: [OZW772:GZ.Fenster] ')}",\
"{return('Eingangstür: [OZW772:Eingangstür] ')}",\
"(zurück) ",\
"TelegramBot_MTYPE=queryInline (%me%) "\
]\
},\
.
.
.
Angezeigt wird im Telegram folgendes:
Gästezimmer: Zu
Eingangstür: [OZW772:Eingangstür]
(zurück) (Marvis)
Warum wird das "[OZW772:GZ.Fenster]" richtig durch "Zu" ersetzt, aber nicht das "[OZW772:Eingangstür]"?
Liegt sehr wahrscheinlich am Umlaut. Oder?
lg, Gerhard
Kannst du bitte ein list des Gerätes OZW772 posten.
Natürlich gerne.
Hier das "list OZW772":
Internals:
CHANGED
FUUID 5c5575c5-f33f-0b7a-1ec1-3fa7426881bec4c7
FVERSION 99_OZW672.pm:?/2019-02-02
NAME OZW772
NR 1212
STATE OK
TYPE OZW672
READINGS:
2019-03-10 10:20:29 Abwesenheit Anwesend
2019-04-15 16:58:30 Aussentemperatur 18.1
2019-04-15 16:58:30 Aussentemperatur-Heizgrenze 19.0
2019-04-15 16:58:30 Bad.Fenster Zu
2019-04-15 16:58:30 Bad.TempIst 27.3
2019-03-23 21:19:37 Eingangstür Zu
2019-03-23 21:19:37 FensterTürzustand Zu
2019-04-15 16:58:30 GZ.Fenster Zu
2019-04-15 16:58:30 GZ.TempIst 23.1
2019-04-15 16:58:30 KZ.Fenster Zu
2019-04-15 16:58:30 KZ.TempIst 21.3
2019-04-15 16:58:30 Luftdruck 1019
2019-04-15 16:58:30 SZ.Fenster Zu
2019-04-15 16:58:30 SZ.TempIst 21.5
2019-03-10 01:48:07 SZ.Temperatur 22.3
2019-04-15 16:58:30 Sommerbetrieb-Vorgabe Auto
2019-04-15 16:58:30 WZ.Fenster Zu
2019-04-15 16:58:30 WZ.TempIst 24.1
2019-04-15 16:58:30 Whg.Abwesenheit Abwesend
2019-04-15 16:58:30 Whg.Eingangstür Zu
2019-04-15 16:58:30 Whg.FensterTürzustand Zu
2019-04-15 16:58:30 state OK
helper:
DATAPOINT_TO_TYPE
RUNNING_GET_PID:
abortFn OZW672_queryValuesAborted
arg OZW772|192.168.0.103|http|Administrator|Triniti_|[['960','Aussentemperatur',''],['1451','Luftdruck',''],['1009','WZ.TempIst',''],['1050','KZ.TempIst',''],['1091','Bad.TempIst',''],['1132','SZ.TempIst',''],['1173','GZ.TempIst',''],['1416','WZ.Fenster',''],['1423','KZ.Fenster',''],['1437','SZ.Fenster',''],['1430','Bad.Fenster',''],['1444','GZ.Fenster',''],['1409','Whg.Eingangstür',''],['980','Aussentemperatur-Heizgrenze',''],['971','Sommerbetrieb-Vorgabe',''],['962','Whg.FensterTürzustand',''],['1454','Whg.Abwesenheit','']]
bc_pid 39997
finishFn OZW672_queryValuesCallback
fn OZW672_queryValues
pid 21516
telnet telnetPort_127.0.0.1_47982
timeout 60
abortArg:
Attributes:
dataPointDefinitions Aussentemperatur:960,Luftdruck:1451,WZ.TempIst:1009,KZ.TempIst:1050,Bad.TempIst:1091,SZ.TempIst:1132,GZ.TempIst:1173,WZ.Fenster:1416,KZ.Fenster:1423,SZ.Fenster:1437,Bad.Fenster:1430,GZ.Fenster:1444,Whg.Eingangstür:1409,Aussentemperatur-Heizgrenze:980,Sommerbetrieb-Vorgabe:971,Whg.FensterTürzustand:962,Whg.Abwesenheit:1454
event-on-change-reading .*
interval 10
ozw672host XXX
ozw672password XXX
ozw672protocol http
ozw672username XXX
room Zentrale
verbose 0
Egal, ob ich "Whg.Eingangstür", "Eingangstür" oder "Whg.FensterTürzustand" verwende, im msgDialog wird der Zustand nicht angezeigt.
lg, Gerhard
Hallo,
tolles Modul.
Ich habe eventuell eine kleine Verbesserung:
Da JSON->new->decode die Keys nicht ordnet bzw. in der Reihenfolge wie definert übernimmt funktioniert folgendes Szenario nicht:
Wenn man mit match (Regex) arbeitet und hier die Reihenfolge von oben nach unten verwendet werden soll funktioniert dies nicht wie gewünscht. Ich möchte z. B. am Ende alle anderen Nachrichten/Texte als Fehlermeldung ausgeben mit .* als Regex.
Man könnte hier dann folgende Funktion verwenden:
--Zeile 303: $dialog = eval{JSON->new->decode($dialog)};
++Zeile 303: $dialog = eval{JSON::MultiValueOrdered->new->decode( encode('utf-8', $dialog))};
Zusätzlich noch die Library am Anfang einbinden:
++Zeile 29: use JSON::MultiValueOrdered;
Und zu guter Letzt noch die Libraray im System installieren
apt-get install libjson-multivalueordered-perl
Eventuell hilft dies ja jemanden. Oder das könnte man in der Wiki geränzen oder so.
VG obi
@gestein: Ja, denke, dass es am Umlaut liegt. Versuch mal alternativ folgendes zu verwenden (ungetestet).
{return('Eingangstür: '.ReadingsVal('OZW772','Eingangstür','Fehler').' ')}
Hallo Dirk,
Das versuche ich heute Abend. Mal sehen.
Ich denke, dass die entsprechende Funktion im msgDialog nicht mit Umlauten umgehen kann.
Wenn es nicht einfach geht, benenne ich halt die "Eingangstür" in "Eingangstuer" um.
lg, Gerhard
Hallo Sebastian,
Danke nochmals für den Dialog und die Funktionen.
Da habe ich einen Ansatzpunkt um das für mich anzupassen.
Eine Frage aber bitte noch:
Mit Deinen Funktionen schaltest Du immer alle Lampen die an sind aus und alle die aus sind, wieder an.
Damit schaltet keine einzelnen Lampen. Oder?
lg, Gerhard
Zitat von: gestein am 16 April 2019, 12:23:15
Eine Frage aber bitte noch:
Mit Deinen Funktionen schaltest Du immer alle Lampen die an sind aus und alle die aus sind, wieder an.
Damit schaltet keine einzelnen Lampen. Oder?
Nein, das Schalten macht der Dialog. Die Funktionen sammeln nur die Devices ein und erstellen dann dynamisch den Dialog.
Damit erhalte ich beim Einschalten nur die Devices die auch tatsächlich aus sind und umgekehrt. ;)
Das Schalten erfolgt dann im Dialog und nur für das gewählte Device:
"Einschalten": {
"match": ".*_licht",
"commands": [
"set $message on",
"set $SELF say @$recipient 04.💡...Lampen....💡|Lampe einschalten"
]
},
"Ausschalten": {
"match": ".*_licht",
"commands": [
"set $message off",
"set $SELF say @$recipient 04.💡...Lampen....💡|Lampe ausschalten"
]
},
VG Sebastian
Hallo Sebastian,
das ist echt elegant. Danke für die Erklärung.
lg, Gerhard
Jetzt hätte ich noch eine Frage:
Ich steure mittlerweile auch die Rollläden über Telegram. Funktioniert soweit ganz gut.
Dafür habe ich mehrere Reihen mit den entsprechenden Tasten für die Kommandos "rauf", "runter", "my".
Allerdings sieht das nicht wirklich gut aus, vor allem weil ja ein Text bei den Tasten angegeben werden muss (siehe Foto).
Wie sollte ich auch sonst die Tasten den Kommandos zuordnen?
Seht ihr eine Möglichkeit das schöner und leichter lesbar zu gestalten?
Also z.B. links die Bezeichnung und dann rechts 3 Tasten für "rauf", "runter", "my".
Danke für jede Hilfe.
lg, Gerhard
Hallo,
ich verwende auch den Systemverwaltung-Dialog von Sebastian aus diesem Thread:
https://forum.fhem.de/index.php/topic,77297.msg724964.html#msg724964 (https://forum.fhem.de/index.php/topic,77297.msg724964.html#msg724964)
Dazu hätte ich eine Frage an Sebastian:
Wie kommst Du zu den Angaben von "FHEM_Sys_Dialog.DUM:updates" und "FHEM_Sys_Dialog.DUM:last_10"?
Das wäre nämlich echt praktisch :)
Vielen Dank im Voraus
liebe Grüße
Gerhard
Zitat von: gestein am 29 April 2019, 21:42:04
Hallo,
ich verwende auch den Systemverwaltung-Dialog von Sebastian aus diesem Thread:
https://forum.fhem.de/index.php/topic,77297.msg724964.html#msg724964 (https://forum.fhem.de/index.php/topic,77297.msg724964.html#msg724964)
Dazu hätte ich eine Frage an Sebastian:
Wie kommst Du zu den Angaben von "FHEM_Sys_Dialog.DUM:updates" und "FHEM_Sys_Dialog.DUM:last_10"?
Das wäre nämlich echt praktisch :)
Vielen Dank im Voraus
liebe Grüße
Gerhard
Hallo Gerhard,
FHEM_Sys_Dialog.DUM
ist war ein dummy in dem ich Systeminfos gespeichert habe.
updates und
last_10 sind jeweils Readings welche ich mit dem unten stehenden Perl-Code gefüllt habe.
In FHEM_Sys_Dialog.DUM:updates stehen vorhandene Updates. In eine Variable gespeichert so:
my $fhu = `wget -qO - http://fhem.de/fhemupdate4/svn/controls_fhem.txt | cat - FHEM/controls_fhem.txt | sort | uniq -u | cut -d " " -f 4 | uniq`."-";
In FHEM_Sys_Dialog.DUM:last_10 sind die letzten 10 Logeinträge. Du bekommst sie so:
defmod FHEM_Sys_Dialog.AT at +*02:00:00 {\
my $loglines = fhem "{qx(tail -20 $currlogfile)}";;\
fhem "setreading FHEM_Sys_Dialog.DUM last_10 $loglines";;\
}
attr FHEM_Sys_Dialog.AT alignTime 01:00:00
attr FHEM_Sys_Dialog.AT comment Schreibt alle 120 min die letzten 10 Zeilen des FHEM-Log in einen Dummy.
VG Sebastian
Hallo Sebastian,
Danke! Echt toll.
lg, Gerhard
Hallo,
ich bin nun leider auf ein neues Thema gestoßen.
Um einen Dimmer zu steuern habe ich einen Dialog von hier kopiert: https://forum.fhem.de/index.php/topic,77297.msg807252/topicseen.html#msg807252 (https://forum.fhem.de/index.php/topic,77297.msg807252/topicseen.html#msg807252)
"💡Geländer dimmen":{
"message":[
"(abbrechen|zurück) ",
"(5%:5|10%:10|20%:20|25%:25) ",
"(30%:30|40%:40|50%:50|60%:60) ",
"(70%:70|80%:80|90%:90|100%:100) ",
"Aktuell sind [TW.DimmerGelaender:pct]% eingestellt. Auf welchen Wert soll ich dimmen?"
],
"dimmen_Geländer":{
"match": "?([1-9][0]|[1][0][0]) ?",
"commands": [
"{my $dimm = '$message';; fhem(\"set TW.DimmerGelaender pct $dimm 3\");;}",
"set $SELF say @$recipient 💡Beleuchtung"
]
}
}
Damit ergeben sich aber 2 Probleme:
1.) Es wird z.B. "5%:5" in der Tastatur angezeigt und nicht "5%", wie ich erwartet hätte.
2.) Der Befehl zum Setzen des Dimmers wird nicht ausgeführt.
Was mache ich falsch?
Danke, lg, Gerhard
Zitat von: gestein am 02 Mai 2019, 00:03:00
1.) Es wird z.B. "5%:5" in der Tastatur angezeigt und nicht "5%", wie ich erwartet hätte.
2.) Der Befehl zum Setzen des Dimmers wird nicht ausgeführt.
"5%:5" funktioniert nur bei inline Keyboards.
Hallo,
Verstanden. Dann werde ich mal diese Inline-Keyboards zu Gemüte führen.
Danke.
Beim msgDialog gab es ja jede Menge Weiterentwicklung.
Ist das Wiki mit den Notifys immer noch aktuell?
Vielen Dank für das tolle Modul!
Lg, Gerhard
Zitat von: gestein am 02 Mai 2019, 19:15:28
Beim msgDialog gab es ja jede Menge Weiterentwicklung.
Ist das Wiki mit den Notifys immer noch aktuell?
Ja, das ist noch aktuell.
Danke. Mittlerweile klappt das mit den Inline-Keyboards.
Allerdings muss ich gestehen, dass mir die normalen Keyboards besser vorkommen.
Beim Dimmer wäre das aber eigentlich ganz praktisch.
Kann man innerhalb des Dialogs (also wenn gedimmt werden soll) das Inline-Keyboard einschalten und dann wieder ausschalten?
lg, Gerhard
Zitat von: gestein am 03 Mai 2019, 17:10:46
Danke. Mittlerweile klappt das mit den Inline-Keyboards.
Allerdings muss ich gestehen, dass mir die normalen Keyboards besser vorkommen.
Beim Dimmer wäre das aber eigentlich ganz praktisch.
Kann man innerhalb des Dialogs (also wenn gedimmt werden soll) das Inline-Keyboard einschalten und dann wieder ausschalten?
Ich finde die normalen Keyboards meist auch besser :)
Die Snippets aus dem Wiki stammen nicht von mir, aber ich verstehe es so, dass sich mit dem Dummy inline ein und aus schalten lässt.
Ansonsten kannst du für jede Nachricht einzeln am Anfang "TelegramBot_MTYPE=queryInline" in der message senden.
Hallo zusammen,
ich wollte das gerne mal ausprobieren, nur stehe ich noch auf dem Schlauch und kämpfe mit der Mitteilung "Unbekannter Kontaktversuch über TelegramBot von ..."
- Roommate mit attr. msgContactPush TelegramBot:@peerID ist angelegt -> Testnachricht "msg push @Roommate Test" kommt in Telegram an.
- meta_Dialog mit allowed everyone und Roommate ist angelegt
- Wird der der Notify noch benötigt? Nur wenn der an ist, kommt der Fehler in "myMsgConfig" unter Reading fhemMsgPush (Unbekannter Kontaktversuch..:)
- attr myMsgConfig evalSpecials me=.... TelegramBot=TelegramBot ist auch mit einem Leerzeichen..
Das steht im Event, wenn ich /start in Telegram auslöse
2019-05-21 22:18:20 msgConfig myMsgConfig ERROR RCV TelegramBot 2.........: Missing reference in msgContact attribute of any device
Hoffe ihr habt noch eine Idee, wo der Fehler steckt.
Danke,
SteRa
Hallo,
ich konnte das Problem mittlerweile lösen.. Hatte nicht die ID sondern meinen Namen benutzt ::)
Jetzt habe ich noch ein weiteres Problem: Ausführen mit /start funktioniert, allerdings geht der alias %me% nicht. Bekomme beim Dialog beenden auch immer %me% zurück.
Das "evalSpecials" habe ich richtig gesetzt. Von was hängt das alles ab?
Gruß,
SteRa
Zitat von: stera am 21 Mai 2019, 22:22:43
Hallo zusammen,
ich wollte das gerne mal ausprobieren, nur stehe ich noch auf dem Schlauch und kämpfe mit der Mitteilung "Unbekannter Kontaktversuch über TelegramBot von ..."
- Roommate mit attr. msgContactPush TelegramBot:@peerID ist angelegt -> Testnachricht "msg push @Roommate Test" kommt in Telegram an.
- meta_Dialog mit allowed everyone und Roommate ist angelegt
- Wird der der Notify noch benötigt? Nur wenn der an ist, kommt der Fehler in "myMsgConfig" unter Reading fhemMsgPush (Unbekannter Kontaktversuch..:)
- attr myMsgConfig evalSpecials me=.... TelegramBot=TelegramBot ist auch mit einem Leerzeichen..
Das steht im Event, wenn ich /start in Telegram auslöse
2019-05-21 22:18:20 msgConfig myMsgConfig ERROR RCV TelegramBot 2.........: Missing reference in msgContact attribute of any device
Hoffe ihr habt noch eine Idee, wo der Fehler steckt.
Danke,
SteRa
Hallo ,
ich hab eine Verständnisfrage zu Match:
"match": "?([1-9][0]|[1][0][0]) ?",
wenn ich das richtig verstanden habe:
[1-9]
lässt Zahlen von 1 bis 9 zu
[0]
lässt nur die Zahl 0 zu
was aber macht der Teil mit folgendemCode |[1][0][0]
Gruß Marco
Edit: Erst denken dann schreiben ??? ;)
hab es selbst herausbekommen
| bedeutet oder
[1][0][0] läst nur die Zahlenkombination 100 zu
Hallo,
ich kämpfe gerade auch mit dem Dialog. Hat soweit alles getan. Nach einem Backup/Neustart hatte ich einen Fehler, dass der Telegrambot nicht mehr definiert ist, was ich wieder korrigiert habe.
Nun kann ich Nachrichten versenden über:
msg push @rr_Benedikt test
was auch im Log gut ausssieht:
2019.08.01 18:43:03 3: msg rr_Benedikt: ID=xxx TYPE=push ROUTE=myTelegramBot RECIPIENT=@xxx STATUS=OK PRIORITY=0 TITLE='' MSG='test'
2019.08.01 18:43:03 3: sentMsgIdByPeerId return value: rr_Benedikt_sentMsgId: 10763
Wenn ich den Dialog aufrufe, sehe ich im Log, dass etwas gesendet wird (oder versucht!?) Allerdings erhalte ich keine Nachricht auf dem Handy...
2019.08.01 18:37:05 3: get TYPE=msgDialog:FILTER=NAME!=meta_Dialog:FILTER=allowed=.*(rr_Benedikt|everyone).* trigger : Heizung
🐔 Huehner
IPCAM
Listen
Lichtwecker
🛠Systemverwaltung
Terrarium
Reset Jeelink
Update Check
Replace Batt. Jeelink
Waschmaschine
⛅ Wetter
2019.08.01 18:37:05 3: msg rr_Benedikt: ID=xxx TYPE=push ROUTE=myTelegramBot RECIPIENT=@xxx STATUS=OK PRIORITY=0 TITLE='' MSG='(Heizung) (IPCAM) (Lichtwecker) (Listen) (Replace Batt. Jeelink) (Reset Jeelink) (Terrarium) (Update Check) (Waschmaschine) (⛅ Wetter) (🐔 Huehner) (🛠Systemverwaltung) (abbrechen)
Ich kann folgendes für dich tun:'
2019.08.01 18:37:35 3: TelegramBot_Callback myTelegramBot: resulted in NonBlockingGet timed out on read from <hidden> after 30s from SendIt
2019.08.01 18:37:35 3: TelegramBot_Callback myTelegramBot: Reached max retries (ret: NonBlockingGet timed out on read from <hidden> after 30s) for msg 416088197 :
Ich kann folgendes für dich tun:
2019.08.01 18:37:35 3: sentMsgIdByPeerId return value: rr_Benedikt_sentMsgId:
Was hat es mit dem "NonBlockingGet timed out" auf sich?
THX
Zitat von: Smarti am 01 August 2019, 18:48:58
Was hat es mit dem "NonBlockingGet timed out" auf sich?
Das kann ich dir leider nicht beantworten, bitte im TelegramBot Thread nachfragen.
Zitat von: igami am 02 August 2019, 17:11:18
Das kann ich dir leider nicht beantworten, bitte im TelegramBot Thread nachfragen.
Ok, dann werde ich das mal tun...
Zitat von: Smarti am 02 August 2019, 21:23:06
Ok, dann werde ich das mal tun...
Also ist gelöst, das Attribut hat gefehlt:
attr Telegram utf8Special 1/code]
Hallo,
ich habe auch das Problem, dass das evalSpecials im meinem Dialog nicht ersetzt wird.
Es sollte ja auf /test reagieren, tut es aber nicht. Wenn ich %me% über Telegram schicke funktioniert es.
Irgendwas einfaches hab ich vergessen...
defmod myMsgConfig msgConfig
attr myMsgConfig userattr evalSpecials:textField-long msgDialog_evalSpecials:textField-long msgDialog_msgCommand:textField
attr myMsgConfig comment FHEM Global Configuration for command 'msg'
attr myMsgConfig evalSpecials me=test
attr myMsgConfig group Global
attr myMsgConfig msgContactPush telegram
attr myMsgConfig msgType text
attr myMsgConfig stateFormat fhemMsgState
attr myMsgConfig verbose 3
defmod meta_dialog msgDialog {\
"(%me%)": {\
"match": "(%me%)",\
"message": "funktioniert"}\
}
Edit:
Habe die Lösung selber gefunden. Habe die Einstellungen vom post auf Seite 1 übernommen. Dort wird das Attribut evalSpecials benutzt, welches bei mir nicht funktioniert. Im Wiki und in der commandref steht die richtige Variante. Man sollte das Attribut msgDialog_evalSpecials benutzten. Jetzt funktioniert es auch bei mir.
ich hänge gerade an einem wahrscheinlich ganz einfachen Thema: Ich möchte mein Inline Keyboard in einer Gruppe aufrufen und dort auch die Ausgabe bekommen. Er sendet die Ausgabe aber nicht an die Gruppe sondern an mich Privat. Wie kann ich das ändern?
edit: Mit Ausgabe meine ich das Keyboard selbst... das wird nicht in der Gruppe angezeigt
Mal eine grundsätzliche Frage:
ich muss ja im ROOMMATE das msgContactPush auf den TelegramBot setzen, dadurch setze ich aber quasi meinen Default für alle Push-Nachrichten auf Telegram. Hier habe ich mich aber an PushOver gewöhnt und finde dort die Möglichkeiten angenehmer.
Gibt es eine Möglichkeit msgDialog zu nutzen OHNE msgContactPush anpassen zu müssen?
@StephanFHEM
Eventuell ein weiteres Roommate für die Gruppe anlegen?
@kjmEjfu
Ist eher eine msg spezifische Frage. Wie das routing genau funktioniert habe ich nicht verstanden. Wenn du das rausgefunden hast kannst du es bestimmt mit dem Attribut msgDialog_msgCommand
einrichten. Alternativ auch hier ein weiters Roommate anlegen?
Zitat von: igami am 29 August 2019, 06:13:16
@StephanFHEM
Eventuell ein weiteres Roommate für die Gruppe anlegen?
Hatte ich schon probiert, er hat trotzdem mir das Menü gesendet weil er gemerkt hat, dass ich aus der Gruppe geschrieben habe. Er sendet dann eher an den Namen als an die ChatID. Hab auch schon probiert die ChatID in meinen Roommate einzutragen aber das hat garnicht geklappt.
Hallo.
Ich habe da mal eine kurze Frage, auf die ich keine richtige Antwort finde.
Habe meine Freundin in Fhem eingetragen und wollte jetzt auch den Bot für Sie einrichten. Habe Ihren Telegram Account angelegt, kann auch von Fhem aus eine Nachricht an Sie senden aber schickt Sie dem Bot ne Nachricht, wird Ihr nicht der Dialog angezeigt.
Ich habe den Account angelegt.
Sie bei Fhem überall eingetragen über ALLOWED.
Nachricht von Fhem aus an Sie funktioniert.
Aber wo ist mein Fehler gerade???
Da das Thema Freundin -> FHEM -> TelegramBot auch früher oder später auf mich zu kommt klinke ich mich da mal ein... ;)
ZitatAber wo ist mein Fehler gerade???
Hast du im ROOMMATE deiner Freundin das Atrribut msgContactPush gestezt?
Ist das Attribut allowed in den Dialogen korrekt gesetzt (everyone bzw. alle ROOMMATEs)?
VG Sebastian
ZitatHast du im ROOMMATE deiner Freundin das Atrribut msgContactPush gestezt?
Ist das Attribut allowed in den Dialogen korrekt gesetzt (everyone bzw. alle ROOMMATEs)?
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.
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
Hi Sebastian.
Es geht nur um 5 Readings, soviele Allergien hat Sie zum Glück nicht.
LG Marcus
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
Danke Sebastian, ich versuche mal mein Glück.
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
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
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
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
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
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
@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
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?
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.
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.
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?
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.
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.
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.
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.
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.
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.
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 (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
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 (https://forum.fhem.de/index.php/topic,106003.0.html)
Antwort folgt. Über diesen Thread werde ich informiert, wenn es Neuigkeiten gibt :)
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
so bin nun soweit das ich test bekomme und auch in Fhem test steht wenn ich anfrage. Aber wieso bekomme ich keine Rückantwort?
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
Es läuft.
Ja habe ein Raw genommen und seit dem läuft es.
Danke
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!
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)
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?
Zitat von: brown78 am 04 April 2020, 10:15:22
Derzeit habe ich keinen Roommate, brauche ich den zwingend?
Ja!
VG Sebastian
Gesendet von iPad mit Tapatalk
Ok, habe ich angelegt. In welchem Device muss das Reading fhemMsgRcvPush ein Event erzeugen?
Zitat von: brown78 am 04 April 2020, 11:58:45
Ok, habe ich angelegt. In welchem Device muss das Reading fhemMsgRcvPush ein Event erzeugen?
Aus dem Wiki:
ROOMMATE / GUEST
Für jeden Dialog kann festgelegt werden welche Person dazu berechtigt ist. Dazu sind Geräte vom Typ ROOMMATE oder GUEST mit definiertem msgContactPush Attribut erforderlich. Es ist darauf zu achten, dass das Reading fhemMsgRcvPush ein Event erzeugt. Siehe auch Attribut "allowed" in msgDialog.
Der Inhalt vom Attribut msgContactPush muss folgendem Muster entsprechen:
<NAME des TelegramBot Device>:@<zum ROOMMATE/GUEST gehörende Telegram ID>
Event-on-update für o.g. Reading [emoji6]
VG Sebastian
Gesendet von iPad mit Tapatalk
Ja das habe ich gelesen, war nur unsicher ob das event-on-update in msgDialog oder Roommate muß...
Bekomme trotzdem keinen Dialog...
Hier mal die Listings:
msgConfig:
Internals:
CFGFN
FUUID 5e88317a-f33f-47f9-e073-7bdcd458fb6930c4
FVERSION 75_msgConfig.pm:0.189950/2019-03-22
NAME SkynetConfig
NOTIFYDEV TYPE=(Jabber|TelegramBot|yowsup)
NR 1239
NTFY_ORDER 50-SkynetConfig
STATE initialized
TYPE msgConfig
READINGS:
2020-04-04 09:04:26 fhemMsgState initialized
Attributes:
comment FHEM Global Configuration for command 'msg'
group Global
msgContactPush Skynet
msgDialog_evalSpecials me=diag TelegramBot=Skynet
msgType text
room Steuerung->Benachrichtigungen
stateFormat fhemMsgState
userattr msgDialog_evalSpecials:textField-long msgDialog_msgCommand:textField
verbose 3
msgDialog:
Internals:
CFGFN
CHANGED
DEF {
"%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:"
]
},
"abbrechen": {
"match": "\/?abbrechen",
"commands": [
"deletereading TYPE=msgDialog $recipient_history",
"deletereading %TelegramBot% $recipient_sentMsgId"
],
"message": [
"(%me%) ",
"Dialog abgebrochen."
]
},
"beenden": {
"match": "\/?beenden",
"commands": [
"deletereading TYPE=msgDialog $recipient_history",
"deletereading %TelegramBot% $recipient_sentMsgId"
],
"message": [
"(%me%) ",
"Dialog beendet."
]
}
}
FUUID 5e8832a4-f33f-47f9-49a7-a358ef363ba732f4
MSGCOMMAND msg push \@$recipients $message
NAME metaDialog
NOTIFYDEV TYPE=(ROOMMATE|GUEST)
NR 1274
NTFY_ORDER 50-metaDialog
STATE Initialized
TRIGGER beenden,abbrechen,diag
TYPE msgDialog
READINGS:
2020-04-04 13:44:19 state Initialized
Attributes:
allowed Marius_Kraft
disable 1
room Steuerung->Benachrichtigungen
Roommate:
Internals:
CFGFN
CHANGED
DURATIONTIMER 1586001016.11085
FUUID 5e884bcf-f33f-47f9-2dfa-594fcee60dbb8ade
FVERSION 20_ROOMMATE.pm:0.195330/2019-06-02
NAME Marius_Kraft
NOTIFYDEV global,
NR 1694
NTFY_ORDER 50-MKr
READY 1
STATE home
SUBTYPE adult
TYPE ROOMMATE
READINGS:
2020-04-04 10:57:02 durTimerAbsence 00:00:00
2020-04-04 10:57:02 durTimerAbsence_cr 0
2020-04-04 13:49:16 durTimerPresence 02:51:32
2020-04-04 13:49:16 durTimerPresence_cr 172
2020-04-04 10:57:02 durTimerSleep 00:00:00
2020-04-04 10:57:02 durTimerSleep_cr 0
2020-04-04 10:57:44 lastArrival 2020-04-04 10:57:44
2020-04-04 10:57:44 lastLocation undefined
2020-04-04 10:57:44 lastState initialized
2020-04-04 10:57:44 location home
2020-04-04 10:57:44 mood calm
2020-04-04 10:57:44 presence present
2020-04-04 10:57:44 state home
2020-04-04 10:57:44 wayhome 0
TIMER:
MKr_DurationTimer:
HASH Marius_Kraft
MODIFIER DurationTimer
NAME MKr_DurationTimer
Marius_Kraft_DurationTimer:
HASH Marius_Kraft
MODIFIER DurationTimer
NAME Marius_Kraft_DurationTimer
Attributes:
alias Status
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
event-on-change-reading fhemMsgRcvPush
event-on-update-reading fhemMsgRcvPush
group MKr
icon people_sensor
msgContactPush Skynet:@[i]TelegramID[/i]
room Steuerung->Benachrichtigungen
rr_realname group
sortby 1
webCmd state
Sind im device globalMsg die msgDialog_evalSpecials eingetragen?
Gesendet von iPhone mit Tapatalk
Ja sind sie, ist das Listing msgConfig aus oberem Post.
Edit: Das senden von Nachrichten mittels msg an Telegram funktioniert, die Befehle von Telegram aus kommen auch im Bot an.
Dein metaDialog ist (immer noch) disabled? Und es fehlt auch noch das allowed-Attribut.
Entweder auf everyone oder auf deinen ROOMMATE setzen.
VG Sebastian
Gesendet von iPhone mit Tapatalk
Wenn ich disabled auf 0 Stelle, bekommt das device den status disabled. Deswegen disabled 1, damn ist der Status initialized. Das allowed schau ich nochmal an
Edit: allowed war auf meinen Nutzernamen bei Telegram gesetzt, hab es auf everyone geändert - ohne Erfolg leider.
Zitat von: brown78 am 04 April 2020, 16:42:38
Wenn ich disabled auf 0 Stelle, bekommt das device den status disabled. Deswegen disabled 1, damn ist der Status initialized. Das allowed schau ich nochmal an
Edit: allowed war auf meinen Nutzernamen bei Telegram gesetzt, hab es auf everyone geändert - ohne Erfolg leider.
Dann lösche halt das Attribut disable. Sonst sieht eigentlich alles Okay aus. Wenn du dich nach dem Wiki hältst sollte es funktionieren.
Wenn ich das Attribut lösche, springt es auch auf disabled...?
Zitat von: brown78 am 04 April 2020, 17:03:44
Wenn ich das Attribut lösche, springt es auch auf disabled...?
Dann ist irgendwas total faul... :o
Lösche mal alle
"deletereading %TelegramBot% $recipient_sentMsgId"
aus deinem metaDialog. Wo hast du die her? Aus dem Wiki jedenfalls nicht....
Also entweder von hier aus dem thred oder aus dem Wiki. Hab nur C&P gemacht bisher
Edit: hab jetzt nochmal den metaDialog aus dem Wiki genommen, leider bekomme ich immer noch keine Dialoge in Telegram. Brauch ich noch etwas anders? Ich habe den TelegramBot, msgConfi, Roommate, einen metaDialog und den Waschmaschinen Dialog?
Was mir noch einfällt:
Das Attribut utf8Special fehlt beim TelegramBot device?
Ja, da habe ich bisher darauf verzichtet. Habe im TekegramBot Favoriten angelegt und da sind Umlaute dabei die werden angezeigt.
Irgendwelche Fehlermeldungen im Log? Ggf. verbose hochsetzen.
Werde ich morgen machen (verbose hoch) derzeit keine Einträge. Danke schon mal für diese geduldige Hilfe. Schönen Abend noch!
Zitat von: brown78 am 04 April 2020, 10:15:22
Derzeit habe ich keinen Roommate, brauche ich den zwingend?
Ja
So, nachdem heute morgen alle devices, also Roommate, TelegramBot, msgConfig und msgDialog verschwunden waren, habe ich alles nochmal mit anderen Bezeichnungen angelegt. Verbose habe ich gleich auf 5 gesetzt. Immer noch kein Dialog in Telegram aber hier mal das Log:
2020.04.05 08:05:30 5: msgConfig msg_Config: called function msgConfig_Notify()
2020.04.05 08:05:30 4: msg MKr: Received push message from Homebot: diag
2020.04.05 08:05:30 5: msgDialog (met_Dialog) - entering msgDialog_Notify
2020.04.05 08:05:30 4: msgDialog (met_Dialog) triggered by "MKr fhemMsgRcvPush: diag"
2020.04.05 08:05:30 5: msgDialog (met_Dialog)
entering msgDialog_progress
recipients: MKr
message: diag
force: 0
2020.04.05 08:05:30 5: msgDialog (met_Dialog) - entering msgDialog_evalSpecials
Edit: Jetzt geht es, hatte im msgConfig me: statt me=....
Habe nochmal eine Frage. Als erstes mal mein Code aus dem rllDialog:
{ "Rolläden": {
"message": [
"( Schlafzimmer ) ",
"( Kinderzimmer ) ",
"( Galerie ) ",
"( abbrechen ) ",
"Raum auswählen"
],
"Schlafzimmer": {
"message": [
"( Auf ) ",
"( Zu ) ",
"( Schritt auf ) ",
"( Schritt zu ) ",
"( abbrechen ) ",
"Rolladen im $message bedienen"
],
"Auf": {
"commands": [
"set HM_Schlafzimmer_RA off"
],
"message": [
"Rolladen im Schlafzimmer geöffnet"
]
},
"Zu": {
"commands": [
"set HM_Schlafzimmer_RA on"
],
"message": [
"Rolladen im Schlafzimmer geschlossen"
]
},
"Schritt auf": {
"commands": [
"set HM_Schlafzimmer_RA up 10"
],
"message": [
"Rolladen im Schlafzimmer +10% geöffnet"
]
},
"Schritt zu": {
"commands": [
"set HM_Schlafzimmer_RA down 10"
],
"message": [
"Rolladen im Schlafzimmer +10% geschlossen"
]
}
}
}
}
Um den Code nicht für jeden Raum wiederholen zu müssen, dachte ich mit $message kann ich das bestimmt irgendwie hinbekommen. Bisher funktioniert das natürlich nur für Schlafzimmer, da ich ja nur das definiert habe. Wie kann ich festlegen, dass in diesen "Block" gesprungen wird wenn Schlafzimmer oder Kinderzimmer oder Galerie geklickt wurde? Und wie baue ich das cmd dann zusammen?
Meine Schalter sind so benannt wie im Beispiel ersichtlich: HM_Schlafzimmer_RA, ich möchte also so etwas wie "HM_" + $message + "_RA" machen.
Habe es so probiert, funktioniert aber nicht.
{ "Rolläden": {
"message": [
"( Schlafzimmer ) ",
"( Kinderzimmer ) ",
"( Galerie ) ",
"( abbrechen ) ",
"Raum auswählen"
],
"Raum": {
"match": " ?([Schlafzimmer] | [Kinderzimmer] | [Galerie]) ?",
"message": [
"( Auf ) ",
"( Zu ) ",
"( Schritt auf ) ",
"( Schritt zu ) ",
"( abbrechen ) ",
"Rolladen im $message bedienen"
],
"Auf": {
"commands": [
"set HM_Schlafzimmer_RA off"
],
"message": [
"Rolladen im $message geöffnet"
]
},
"Zu": {
"commands": [
"set HM_Schlafzimmer_RA on"
],
"message": [
"Rolladen im $message geschlossen"
]
},
"Schritt auf": {
"commands": [
"set HM_Schlafzimmer_RA up 10"
],
"message": [
"Rolladen im $message +10% geöffnet"
]
},
"Schritt zu": {
"commands": [
"set HM_Schlafzimmer_RA down 10"
],
"message": [
"Rolladen im $message +10% geschlossen"
]
}
}
}
}
Edit:
Mit
"match": "Schlafzimmer|Kinderzimmer|Galerie",
Funktioniert zumindest die Raumauswahl. bleibt noch das cmd zu basteln.
Bei den commands hatte ich auch ein Problem.
Ich wollte unter gewissen Umständen die letzte Message löschen. Die ID steht im Reading Telegram:sentMsgId
.
Im Message-Teil werden Readings mittels eckiger Klammern ausgewertet, z.B.
"message": [
"Temperatur: [DR.DWD:temperature]",
...]
Im Command-Teil geht das NICHT, also
"commands": [ "set Telegram msgDelete [Telegram:sentMsgId]",
hat keine Funktion.
Was aber geht, ist mit dem Attribut "evalSpecials" zu arbeiten:
attr Dialog evalSpecials sentMsgId=[Telegram:sentMsgId]
Dies kann dann mittels "%...%" verwendet werden:
"commands": [
"set Telegram msgDelete %sentMsgId%",
...]
Dieses Konstrukt funktioniert problemlos.
Langer Rede kurzer Sinn: vielleicht hilft Dir "evalSpecials" weiter.
Gruß Heiko
Zitat von: HeikoE am 05 April 2020, 21:50:50
Langer Rede kurzer Sinn: vielleicht hilft Dir "evalSpecials" weiter.
Gruß Heiko
Vielen Dank für die Antwort! Habe es etwas anders gelöst. Im TelegramBot gibt es das Reading "prevMsgText", dem Namen entsprechend enthält dieses Reading die vorhergehende Nachricht. Damit habe ich es nun hinbekommen, dass auch nach dem Steuern eines Rollo, der entsprechende Raumname angezeigt wird. Bleibt nur noch das Problem mit dem cmd. Hierzu müsste ich ja einen String zusammenbasteln und zwar aus "HM_" + [TelegramBot:prevMsgText] + "_RA". Hier dann ggf. evalSpecials verwenden... Mal schauen ob ich das noch hinbekomme.
Hier mal mein Versuch, hab in evalSpecials noch prevMsg=[TelegramBot:prevMsgText] bCmd=HM_ eCmd=_RA hinzugefügt. In command funktioniert das zusammensetzen scheinbar nicht, der Befehl wird nicht ausgeführt, im Log steht nichts dazu. In message funktioniert das Zusammensetzen der strings %bCmd%%prevMsg%%eCmd%, dort brauche ich es aber eingentlich nicht...
{ "Rolläden": {
"message": [
"( Schlafzimmer ) ",
"( Kinderzimmer ) ",
"( Galerie ) ",
"( abbrechen ) ",
"Raum auswählen"
],
"Schlafzimmer": {
"match": "Schlafzimmer|Kinderzimmer|Galerie",
"message": [
"( Auf ) ",
"( Zu ) ",
"( Schritt auf ) ",
"( Schritt zu ) ",
"( abbrechen ) ",
"Rolladen $message bedienen"
],
"Auf": {
"commands": [
"set %bCmd%%prevMsg%%eCmd% off"
],
"message": [
"Rolladen %bCmd%%prevMsg%%eCmd% geöffnet"
]
},
"Zu": {
"commands": [
"set HM_Schlafzimmer_RA on"
],
"message": [
"Rolladen %prevMsg% geschlossen"
]
},
"Schritt auf": {
"commands": [
"set HM_Schlafzimmer_RA up 10"
],
"message": [
"Rolladen %prevMsg% +10% geöffnet"
]
},
"Schritt zu": {
"commands": [
"set HM_Schlafzimmer_RA down 10"
],
"message": [
"Rolladen %prevMsg% +10% geschlossen"
]
}
}
}
}
Also ich bräuchte bitte nochmal Hilfe. Ich hab einiges ausprobiert, mein command wird aber nicht ausgeführt bzw. zeigt keine Wirkung.
Im msg_Config habe ich das Attribut evalSpecials xCmd=HM_[Homebot:prevMsgText]_RA angelegt. Wenn ich in message nun %xCmd% ausgeben lasse, dann steht da HM_Schlafzimmer_RA.
Wenn ich aber in command "set %xCmd% off" angebe, dann wir der Rollo nicht geöffnet.
Zitat von: brown78 am 07 April 2020, 11:15:28
Im msg_Config habe ich das Attribut evalSpecials xCmd=HM_[Homebot:prevMsg]_RA angelegt.
Sollte das Reading nicht 'Homebot:prevMsgText'?
Ja richtig , tut es im attr auch.
Habe gerade einen weiteren Dialog erstellt für meine Leselampen, diese werden mit einer LightScene gesteuert. Hier muss also kein String zusammengesetzt werden.
trotzdem funktioniert das command "set Leselampen scene $message" nicht. Kann man im command überhaupt eine variable verwenden?
Hi zusammen.
Ich habe da mal ne Frage.
Mein Device liefert mir ein Symbole in Fhem, im Bot taucht nur die Bezeichnung des Symboles auf, wie kann ich das in Text umwandeln.
Beispiel:
Device gibt rc_dot@blue als blauen Punkt aus. In Telegram taucht rc_dot@blue auf, das würde ich gerne in Text "blau" umwandeln.
Zitat von: ErzGabriel am 08 April 2020, 19:16:17
Hi zusammen.
Ich habe da mal ne Frage.
Mein Device liefert mir ein Symbole in Fhem, im Bot taucht nur die Bezeichnung des Symboles auf, wie kann ich das in Text umwandeln.
Beispiel:
Device gibt rc_dot@blue als blauen Punkt aus. In Telegram taucht rc_dot@blue auf, das würde ich gerne in Text "blau" umwandeln.
Bin zwar kein Profi, aber du könntest bspw. in Deinem device ein userattr anlegen und da den Text "blau" rein schreiben. Nehmen wir an es ist ein dummy, der mittels DOIF die Farbe blau anzeigt, dann kann das DOIF auch das attr color blau setzen. Wenn DU jetzt in dem msg_Config device in msg_evalSpecials
color=[dmy:color]
, dann kannst Du im msg_Dialog
"message": [ "%color%" ]
verwenden um den Text "blau" anzeigen zu lassen.
Vielleicht geht es aber auch mit Perl Code in message, das weiß ich aber nicht.
Okay, hört sich jetzt interessant an, nur verstehe ich das leider null. Meine Dialoge basieren nur auf Copy & Paste, da ich irgendwie zu blöde bin eine Dialoge zu schreiben. Mag dran liegen, das ich mit Perl nicht klar komme oder ich einfach zu blöde bin es zu lernen, weil ich vielleicht versuche das falsche zu lernen.
Aber ich werde mal schauen, was ich erreichen kann, wenn ich Google bemühe.
Die Dialoge selbst sind in JSON, das kann man schon so halbwegs durchschauen, wenn man sich die Beispiele anschaut. Zumindest hast Du das msg_Config angelegt und das userattr msg_evalSpecials solltest Du auch haben, wenn Du nach dem Wiki vorgegangen bist. In dieses Attribut kannst Du ein eigenes "Feld" eintragen. Nach Anleitung hast Du dort drin stehen:
me=aktivierungswort TelegramBot=BotDevice
Dieser Zeile einfach hinzufügen color=[device:Reading]
-Da merke ich gerade ich hatte vorher geschrieben Du brauchst das Attribut color, das stimmt nicht, das muß ein Reading sein. Also:
setreading Farbpunkt_Device color blau
msg_Config "erhält" dadurch bei Ausführung den Inhalt des Readings color von Deinem Farbpunkt_Device.
Soweit die Theorie, ich weiß natürlich nicht wie Deine Devices aussehen und was die machen, z.B. wechselt die Farbe und wer sagt wann gewechselt werden soll...
Weiter in der Theorie, derjenige der dem Farbpunkt_Device sagt: mach jetzt blau, der muß auch das setreading machen.
In den Dialogen hast du ja irgendwo dann "message": [
stehen, das ist die Nachricht die in Telegram angezeigt wird. Ohne zu wissen wie das bei Dir aussieht, kannst Du den message "Block" sagen, dass er das Reading color von Deinem Farbpunkt_Device anzeigen soll.
"message": [
"Die Farbe [Farbpunkt_Device:color] wurde ausgewählt"
]
Ich hoffe, dass Dir das etwas weiterhilft.
Hallo.
Ich kriege es einfach nicht hin, das Telegram mir ein Wort anzeigt.
Also mal ganz von Anfang an. Ich will für meine Maus eine Meldung auf Telegram senden, da Sie Allergien hat und damit dann weiß, ob Sie abends eine Tablette nehmen muss.
Mein Sub in der Utils.
sub telegramBotGetPollenListMessage()
{
my $pol1 = ReadingsVal("Pollen", "fc1_Birke", "0");
my $pol2 = ReadingsVal("Pollen", "fc1_Erle", "0");
my $pol3 = ReadingsVal("Pollen", "fc1_Hasel", "0");
my $pol4 = ReadingsVal("Pollen", "fc1_Graeser", "0");
my $pol5 = ReadingsVal("Pollen", "fc1_Roggen", "0");
my $returnMessage;
$returnMessage .= "Birke: $pol1 \n" if($pol1 !~ /white/);
$returnMessage .= "Erle: $pol1 \n" if($pol2 !~ /white/);
$returnMessage .= "Hasel: $pol1 \n" if($pol3 !~ /white/);
$returnMessage .= "Gräser: $pol1 \n" if($pol4 !~ /white/);
$returnMessage .= "Roggen: $pol1 \n" if($pol5 !~ /white/);
return $returnMessage;
}
Mein Dialog
efmod doif_pollen1 DOIF ([18:10]) (set Jarvis msg @M**** Birke: [Pollen:fc2_Birke]\n\
Gräser: [Pollen:fc2_Graeser]\n\
Roggen: [Pollen:fc2_Roggen])
attr doif_pollen1 do always
attr doif_pollen1 room Telegram
setstate doif_pollen1 cmd_1
setstate doif_pollen1 2020-04-27 18:10:00 cmd 1
setstate doif_pollen1 2020-04-27 18:10:00 cmd_event timer_1
setstate doif_pollen1 2020-04-27 18:10:00 cmd_nr 1
setstate doif_pollen1 2020-04-24 18:07:07 mode enabled
setstate doif_pollen1 2020-04-27 18:10:00 state cmd_1
setstate doif_pollen1 2020-04-27 19:33:29 timer_01_c01 28.04.2020 18:10:00
Funzt so weit. Die Meldung kommt jeden Abend auf dem Handy an, nur das Ergebniss sieht mies aus.
Ergebnis:
Birke: rc_dot@white
Gräser: rc_dot@yellow
Roggen: rc_dot@white
Die beiden unteren Angaben sind in Telegram auch so eingerückt, damit könnte ich ja noch leben aber die Anzeige vom Ergebnis hätte ich gerne anders.
rc_dot@white = keine
rc_dot@yellow = leichte
rc_dot@orange = mittel
rc_dot@red = stark
Ich habe es nach der Anleitung von brown78 versucht aber ich kriege es nicht hin.
Kann mir bitte jemand helfen?
Danke.
Zitat von: ErzGabriel am 27 April 2020, 19:52:47
Ich habe es nach der Anleitung von brown78 versucht aber ich kriege es nicht hin.
Kann mir bitte jemand helfen?
Danke.
Ich habe die Pollen momentan so am Start:
Dialog:
{"11.🌿🌼.Pollen.🌸🌺": {
"commands": "{pollen()}",
"message": [
"(%me%) ",
"Hole Pollen..."
]
}
}
PERL-Funktion:
sub pollen() {
my $msg;
my @plants = ("Ahorn", "Ambrosia", "Ampfer", "Beifuss", "Birke", "Brennnessel", "Buche", "Eiche", "Erle", "Esche", "Fichte", "Flieder", "Gaensefuss", "Gerste", "Graeser", "Hafer", "Hasel", "Holunder", "Hopfen", "Kiefer", "Linde", "Loewenzahn", "Mais", "Nessel", "Pappel", "Platane", "Raps", "Roggen", "Rotbuche", "Spitzwegerich", "Tanne", "Ulme", "Wegerich", "Weide", "Weizen");
foreach my $plant (@plants) {
my $pol = ReadingsVal("Allergene","fc2_$plant", "");
if ($pol !~ /white|yellow/) {
$msg .= "🌳" if ($plant =~ /Ahorn|Birke|Buche|Eiche|Erle|Esche|Linde|Rotbuche|Pappel|Platane|Ulme|Weide/);
$msg .= "🌲" if ($plant =~ /Fichte|Kiefer|Tanne/);
$msg .= "🌿" if ($plant =~ /Ambrosia|Ampfer|Beifuss|Brennessel|Gaensefuss|Graeser|Holunder|Nessel|Spitzwegerich|Wegerich/);
$msg .= "🌾" if ($plant =~ /Gerste|Hafer|Hopfen|Raps|Roggen|Weizen/);
$msg .= "🌼" if ($plant =~ /Flieder|Loewenzahn/);
$msg .= "🌽" if ($plant =~ /Mais/);
$msg .= "🌰" if ($plant =~ /Hasel/);
$msg .= "$plant: mittel. 🟡\n" if ($pol =~ /yellow/);
$msg .= "$plant: hoch! 🟠\n" if ($pol =~ /orange/);
$msg .= "$plant: extrem hoch! 🔴\n" if ($pol =~ /red/);
}
}
fhem("msg push $msg") if ($msg);
}
Ist nicht schön aber funktioniert ;D
VG Sebastian
Hi Sebastian.
Das sieht ja nicht schlecht aus aber dafür muss meine Maus selbst abfragen und sowas vergisst Sie gerne mal. Ende vom Lied ist dann, das ich mir am nächsten Tag das Gejammer anhören kann, weil Sie ihre Tablette nicht genommen hat.
Mir ist aber mit Deinem Post jetzt schon mal ein Fehler bei meinem Gebastel aufgefallen. Meine Sub ist sinnlos, da ich die Readings für die Message abfrage.
Also muss ich jetzt erstmal raus kriegen, wie ich das Ergebnis meiner Sub per Telegram versenden kann und dann kann ich vielleicht den unteren Part von Dir in meine Sub einbauen um ordentliche Punkte zu haben.
Zitat von: ErzGabriel am 28 April 2020, 18:35:41
Hi Sebastian.
Das sieht ja nicht schlecht aus aber dafür muss meine Maus selbst abfragen und sowas vergisst Sie gerne mal. Ende vom Lied ist dann, das ich mir am nächsten Tag das Gejammer anhören kann, weil Sie ihre Tablette nicht genommen hat.
Mir ist aber mit Deinem Post jetzt schon mal ein Fehler bei meinem Gebastel aufgefallen. Meine Sub ist sinnlos, da ich die Readings für die Message abfrage.
Also muss ich jetzt erstmal raus kriegen, wie ich das Ergebnis meiner Sub per Telegram versenden kann und dann kann ich vielleicht den unteren Part von Dir in meine Sub einbauen um ordentliche Punkte zu haben.
Ob du eine Sub in einem Dialog aufrufst oder in einem at/doif ist ja wurscht ;)
VG Sebastian
Okay, das ist einleuchtend. Ich muss trotzdem erstmal raus kriegen, wie ich die Subroutine in die Message kriege, das der Bot sie versendet.
Zitat von: ErzGabriel am 28 April 2020, 20:11:16
Okay, das ist einleuchtend. Ich muss trotzdem erstmal raus kriegen, wie ich die Subroutine in die Message kriege, das der Bot sie versendet.
Das verstehe ich nicht. Dein doif könnte so aussehen:
defmod test.di DOIF ([18:10]) ({pollen()})
Das Versenden der $msg muss nicht mit dem msg-Befehl erfolgen, kann auch direkt mit dem bot gemacht werden:
fhem("set Jarvis msg $msg") if ($msg);
VG Sebastian
@Sebastian
Ich habe die Subroutine jetzt so eingepflegt wie von Dir gepostet und das DOIF auch soweit umgebaut. Habe noch die gesendeten Daten ein wenig angepasst aber irgendwas habe ich wohl übersehen, weil beim Bot kommt immer nur ein
Zitatpush
raus. Muss ich irgendwo noch was eintragen, das der Bot das umsetzen kann, weil ne Fehlermeldung erhalte ich nicht.
Das hatte ich auch schon. Dann gibts laut Prüfung keine Warnungen und somit kein $msg. Also wird anstatt $msg ,,push" als Text gesendet...
Schaum mal oben in den Code - ich hab noch ein if ($msg)
eingefügt [emoji6]
Noch schöner: ein else-Block mit eine Nachricht dass die Belastung gering ist oder so...
VG Sebastian
Gesendet von iPhone mit Tapatalk
Jo, funzt. Danke Dir.
Eine Frage hätte ich jetzt noch und die nur aus Faulheit, weil ich das jetzt nicht ewig testen und probieren möchte.
fhem("msg push $msg") if ($msg);
Diese Zeile ist für das senden zuständig und die Nachricht kommt jetzt immer bei mir an, wie muss ich die ändern, das es an meine Maus gesendet wird.
Ist das so richtig?
fhem("msg @NAME push $msg") if ($msg);
Zitat von: ErzGabriel am 02 Mai 2020, 08:41:45
Jo, funzt. Danke Dir.
Eine Frage hätte ich jetzt noch und die nur aus Faulheit, weil ich das jetzt nicht ewig testen und probieren möchte.
fhem("msg push $msg") if ($msg);
Diese Zeile ist für das senden zuständig und die Nachricht kommt jetzt immer bei mir an, wie muss ich die ändern, das es an meine Maus gesendet wird.
Ist das so richtig?
fhem("msg @NAME push $msg") if ($msg);
help msg
zeigt
msg [<type>] [<@device>|<e-mail address>] [<priority>] [|<title>|] <message>
Also so zB.:
msg push @rr_Sebastian $msg
Im verlinkten Forums-Thread findet du weiterhin:
Auch können mehrere Typen oder Empfänger durch Komma getrennt angegeben werden (Und-Verknüpfung).VG Sebastian
Im Dialog habe ich es jetzt so umgebaut, dass der Dialog aufrufende User die Nachricht bekommt:
{"08.🌿🌼.Pollen.🌸🌺": {
"message": [
"(%me%) ",
"Aktuelle Pollenbealstung:",
"{return pollen() }"
]
}
}
In der sub dann:
return $msg;
VG Sebastian
Es klappt noch nicht die Daten an meine Maus zu schicken.
Habe die Zeile entsprechend umgebaut aber es kommen die Daten immer noch bei mir an, sollen aber zu meiner Maus.
DoIF's, wo der Code im Define steht kann ich an meine Maus schicken lassen aber hier wo der Code in der Subroutine steht, will es einfach nicht klappen.
Sie ist aber natürlich als User eingetragen und auch vom Bot.
Zitat von: ErzGabriel am 02 Mai 2020, 11:26:59
Es klappt noch nicht die Daten an meine Maus zu schicken.
Habe die Zeile entsprechend umgebaut aber es kommen die Daten immer noch bei mir an, sollen aber zu meiner Maus.
DoIF's, wo der Code im Define steht kann ich an meine Maus schicken lassen aber hier wo der Code in der Subroutine steht, will es einfach nicht klappen.
Sie ist aber natürlich als User eingetragen und auch vom Bot.
Zeig mal bitte den Code für DOIF und in der sub...
Hat sich in dem Sinne erledigt, meine Maus war nicht in der Lage mir mitzuteilen, das sie die Nachricht erhält.
Klappt also, winzigste, ich erhalte es auch noch, was ich eigentlich gar nicht wollte.
sub pollen() {
my $msg;
my @V****;
my @plants = ("Birke", "Erle", "Graeser", "Hasel", "Roggen");
foreach my $plant (@plants) {
my $pol = ReadingsVal("Pollen","fc2_$plant", "");
if ($pol !~ /white|yellow/) {
$msg .= "🌳" if ($plant =~ /Birke|Erle/);
$msg .= "🌿" if ($plant =~ /Graeser/);
$msg .= "🌾" if ($plant =~ /Roggen/);
$msg .= "🌰" if ($plant =~ /Hasel/);
$msg .= "$plant: leicht 🟡\n" if ($pol =~ /yellow/);
$msg .= "$plant: mittel 🟠\n" if ($pol =~ /orange/);
$msg .= "$plant: hoch 🔴\n" if ($pol =~ /red/);
}
}
fhem("set Jarvis msg @V**** $msg") if ($msg);
}
defmod doif_Pollen DOIF ([18:00]) ({pollen()})
attr doif_Pollen do always
attr doif_Pollen room Telegram
Ist zwar ne unnötige Nachricht auf meine Smartphone aber kann ich zur Not mit leben.
Zitat von: ErzGabriel am 02 Mai 2020, 11:42:00
Hat sich in dem Sinne erledigt, meine Maus war nicht in der Lage mir mitzuteilen, das sie die Nachricht erhält.
Klappt also, winzigste, ich erhalte es auch noch, was ich eigentlich gar nicht wollte.
sub pollen() {
my $msg;
my @V****;
my @plants = ("Birke", "Erle", "Graeser", "Hasel", "Roggen");
foreach my $plant (@plants) {
my $pol = ReadingsVal("Pollen","fc2_$plant", "");
if ($pol !~ /white|yellow/) {
$msg .= "🌳" if ($plant =~ /Birke|Erle/);
$msg .= "🌿" if ($plant =~ /Graeser/);
$msg .= "🌾" if ($plant =~ /Roggen/);
$msg .= "🌰" if ($plant =~ /Hasel/);
$msg .= "$plant: leicht 🟡\n" if ($pol =~ /yellow/);
$msg .= "$plant: mittel 🟠\n" if ($pol =~ /orange/);
$msg .= "$plant: hoch 🔴\n" if ($pol =~ /red/);
}
}
fhem("set Jarvis msg @V**** $msg") if ($msg);
}
defmod doif_Pollen DOIF ([18:00]) ({pollen()})
attr doif_Pollen do always
attr doif_Pollen room Telegram
Ist zwar ne unnötige Nachricht auf meine Smartphone aber kann ich zur Not mit leben.
Ja du bist halt in PERL. Brauchst aber kein Array definieren:
my @V****;
So gehts auch:
{ my $recipient ="@";
$recipient .= "V****";
fhem("msg push $recipient $msg")
}
Man könnte das "@" bestimmt auch noch maskieren, weiß aber gerade nicht wie... Deshalb Quick and dirty concat... ;D
VG Sebastian
Hallo,
ich wollte heute meine Dialoge um die neuen Lichter erweitern und komme mit der Syntax für die Trigger und match nicht zusammen:
Die folgenden Menüpunkte sind im Dialog und ich würde gerne alle Trigger - außer die für die Terrassen - in einem Eintrag abfangen:
{"💡Beleuchtung":{
"message": [
"(💡Terrasse West) ",
"(💡Terrasse West Podest) ",
"(💡Terrasse Ost) ",
"(💡Badezimmer) ",
"(💡Vorzimmer) ",
"(💡Gästezimmer) ",
"(💡Kinderzimmer) ",
"(💡Gästebad) ",
"(💡Schrankräume) ",
"(💡Schlafzimmer) ",
"(💡Küche) ",
"(💡Wohnzimmer) ",
"(💡🎄Weihnachten) ",
"(🔚beenden|🔙zurück) ",
"Was möchtest Du tun?"
],
"💡[^T].*":{
"message":[
"{GetLights('$message')}",
"Welche Lampe soll ich schalten?"
]
}, .....
Der Teil mit "💡[^T].*" wird aber nie aufgerufen.
Wenn ich dort z.B. "💡Gästezimmer" eintrage, wird die Funktion "GetLights" aufgerufen - aber nicht mit dem RegEx.
Was mache ich falsch bzw. wie muss ich das richtig machen?
Danke im Voraus
liebe Grüße
Gerhard
Manchmal kommt man auf die verzwicksten Dinge selber drauf, wenn man es jemand anderen erklären muss (oder wie hier eine Frage dazu formulieren muss):
Die Lösung scheint so zu sein: Der <Trigger> kann ein beliebiger Text sein, wenn im Feld "match" das Richtige steht.
Wenn ich in meinen Dialog die Zeile "match": "💡[^T].*" dazugebe, dann geht's.
"Lichter":{
"match": "💡[^T].*",
"message":[
"{GetLights($message);}",
"Welche Lampe soll ich schalten?"
]
},
lg, Gerhard
Hi zusammen.
Ich habe da mal ne Frage. Ich bin beruflich täglich in zwei bis drei Städten unterwegs und da zur Zeit Corona ja fleißig steigt, hats man in jeder Stadt eine andere Inzidenzzahl und somit anderen Vorgaben. Da drauf hin habe ich mir nach dem Thread https://forum.fhem.de/index.php/topic,113798.0.html (https://forum.fhem.de/index.php/topic,113798.0.html) mir die Daten vom RKI ins Fhem geholt.
Alles soweit eingerichtet und klappt auch super. Nun möchte ich gerne, das mein Bot mir morgens vor Arbeitsbeginn die Inzidenz der drei Städte schickt. Mit einer normalen Pushnachricht kriege ich nur einen Wert übermittelt und mir drei Nachrichten schicken lassen, finde ich doof.
Meine Frage, wie kriege ich das hin, das mir die drei Werte in einer Nachricht geschickt werden. Ich bin für Perl einfach zu blöde. Sorry.
Hi zusammen,
ich stehe aktuell auf dem Schlauch, was das das zurück zum metaDialog angeht.
Folgendes habe ich konfiguriert:
defmod msg_cams msgDialog {\
"Kameras": {\
"message": [\
"(Kamera Tür) ",\
"(Kamera Garten) ",\
"(Kamera 3d-Drucker) ",\
"(abbrechen|🔙zurück) ",\
"Menü Kameras"\
]\
},\
"Kamera Tür": {\
"commands": "set FHEM_Bot sendImage /opt/fhem/www/images/ipcams/ipcam1_snapshot.jpg",\
"message": [\
"So siehts vor der Tür aus aus!"\
]\
},\
"Kamera Garten": {\
"commands": "set SSCam.INSTAR_IN_9008HD snap",\
"message": [\
"So siehts in deinem Garten aus!"\
]\
},\
"Kamera 3d-Drucker": {\
"commands": [\
"get og_az_cam3d image",\
"set homy sendImage /tmp/og_az_cam3d_snapshot.jpg"\
],\
"message": [\
"So siehts auf Deinem 3d-Drucker aus!"\
]\
},\
"🔙zurück": {\
"commands": [\
"set $SELF say @$recipient %me%"\
]\
}\
}
attr msg_cams allowed rr_Sandra,rr_Tobi
setstate msg_cams rr_Tobi: 🔙zurück
setstate msg_cams 2020-11-15 12:36:29 state rr_Tobi: 🔙zurück
Aber bei drücken auf zurück passiert nichts.
Der Metadialog:
defmod meta_Dialog msgDialog {\
"%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."\
]\
}\
}
attr meta_Dialog allowed everyone
setstate meta_Dialog rr_Tobi: do
setstate meta_Dialog 2020-11-15 12:40:27 state rr_Tobi: do
Hat jemand einen Tipp für mich?
Danke & Gruß,
Tobi
Zitat von: ErzGabriel am 26 Oktober 2020, 18:19:09
Hi zusammen.
Ich habe da mal ne Frage. Ich bin beruflich täglich in zwei bis drei Städten unterwegs und da zur Zeit Corona ja fleißig steigt, hats man in jeder Stadt eine andere Inzidenzzahl und somit anderen Vorgaben. Da drauf hin habe ich mir nach dem Thread https://forum.fhem.de/index.php/topic,113798.0.html (https://forum.fhem.de/index.php/topic,113798.0.html) mir die Daten vom RKI ins Fhem geholt.
Alles soweit eingerichtet und klappt auch super. Nun möchte ich gerne, das mein Bot mir morgens vor Arbeitsbeginn die Inzidenz der drei Städte schickt. Mit einer normalen Pushnachricht kriege ich nur einen Wert übermittelt und mir drei Nachrichten schicken lassen, finde ich doof.
Meine Frage, wie kriege ich das hin, das mir die drei Werte in einer Nachricht geschickt werden. Ich bin für Perl einfach zu blöde. Sorry.
Bin mir nicht ganz sicher ob das hier im Thread richtig ist, geht aber so:
([07:47])(set homy send @#HA "Guten morgen, hier die neuesten Inzidenzzahlen:\nBorken: [RKI7:Borken]\nRhein Erft: [RKI7:Rhein-Erft-Kreis]\nKöln: [RKI7:Koln]\nMünster: [RKI7:Munster]")
Hi zusammen,
danke auch von meiner Seite für das Modul! Klappt soweit gut. Ich versuche mich gerade am Heizungsdialog von
subseven.
Ich würde gerne 3 Thermostate vom Typ HM-CC-RT-DN damit steuern:
- Flur: FL.HM_RT
- Wohnzimmer: WZ.HM_RT
- Büro: BR.HM_RT
Die Geräte befinden sich in den jeweiligen Räumen.
Da die Temperatur der HM-Thermostate für das Gerät *_Clima gesteuert wird, klappt bei mir noch nicht die Auswahl des richtigen Gerätes im Dialog über
:FILTER=....
Hier das Original von
subseven zum setzen der Temperatur:
"{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 \");;;;;;;; }"\
Und hier mein Versuch für meine Thermostate:
"{my $temp = \"$message\";;;;;;;; $temp =~ s/([\\d]{1,2}\\.[\\d{1}])/$1/g;;;;;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; fhem (\"set room=$room:FILTER=NAME!=.*_Clima desired-temp $temp\");;;;;;;; }"\
Leider funktioniert das noch nicht. Ich habe auch die Befehle schon direkt probiert:
set room=Flur:FILTER=NAME!=.*_Clima desired-temp 13
- Fehler: Unknown argument desired-temp
set room=Flur:FILTER=type=CUL-HM:FILTER=NAME!=.*_Clima desired-temp 13
- Der Raum "Flur" wird aufgerufen.
Hat jemand eine Idee, wie die richtige Syntax lautet?
Ok, hat geklappt mit
set room=$room:FILTER=model=HM-CC-RT-DN:FILTER=chanNo=04 desired-temp $temp
Hallo zusammen,
ich will bei msgDialog tiefer einsteigen. Ich habe bereits Dialoge zum Übertragen eines Kamerabildes von meiner Kamera (funktioniert nicht ganz, weil immer erst das zweite Bild aktuell ist), zur Rückmeldung ob irgendwo Batterien leer sind und zur Rückmeldung ob noch Fenster oder Türen offen sind erfolgreich angelegt. Jetzt kommt der erste Dialog mit Untermenü und dabei komme ich etwas ins Stolpern. Ich möchte einen Dialog Heizung aufrufen bei dem ich gefragt werde wo aufgeheizt werden soll. Im folgenden Auswahlmenü möchte ich zwischen "Bad" und "Büro" auswählen. Der folgende Dialog funktioniert zwar, aber...
defmod dialog_heizung msgDialog {\
"Heizung": {\
"match": "\/Heizung",\
"commands": "deletereading TYPE=msgDialog $recipient_history",\
"message": [\
"(Büro) ",\
"(Bad) ",\
"Wo soll die Temperatur erhöht werden?"\
]},\
"Büro": {\
"commands": "set cc_clima_buero desired-temp 21",\
"message": "Temperatur im Büro auf 21°C gestellt."\
},\
"Bad": {\
"commands": "set tc_climate_bad desired-temp 23",\
"message": "Temperatur im Bad auf 23°C gestellt."\
}\
}
attr dialog_heizung allowed everyone
attr dialog_heizung group IO
attr dialog_heizung room _FHEM
setstate dialog_heizung 2021-01-10 17:50:28 state Initialized
Meine Frage bzw. mein Problem: Die Menüeinträge "Bad" und "Büro" werden sowohl im Hauptmenü (über meta_Dialog wie im Wiki beschrieben) als auch im "Untermenü" Heizung angezeigt. Wie kann ich das abstellen? Vielen Dank für Tipps.
Viele Grüße,
matrois.
Hallo zusammen,
ich habe die Antwort gefunden. Bin wohl etwas durcheinander gekommen mit den ganzen Klammern, Kommas und Leerzeichen... Hier mein funktionierender Dialog mit dem "Extra" der Temperaturanzeige im Menü (habe ich im Thread gefunden, für gut befunden und übernommen ;) )
{
"Heizung": {
"match": "\/Heizung",
"message": [
"(Büro # Soll [cc_dev_buero:desired-temp]°C # Ist [cc_dev_buero:measured-temp]°C) ",
"(Bad # Soll [tc_dev_bad:desired-temp]°C # Ist [tc_dev_bad:measured-temp]°C) ",
"(beenden) ",
"Wo soll die Temperatur erhöht werden?"
],
"Büro": {
"match": "Büro.*",
"commands": "set cc_clima_buero desired-temp 21",
"message": "Temperatur im Büro auf 21°C gestellt."
},
"Bad": {
"match": "Bad.*",
"commands": "set tc_climate_bad desired-temp 23",
"message": "Temperatur im Bad auf 23°C gestellt."
}
}
}
Hallo zusammen.
Da ich mein Fhem System komplett neu aufgesetzt habe, neuer RPi, neue Installation von Fhem, muss ich natürlich auch den Bot neu einrichten.
Aber ich bin irgendwie zu blöde dazu, habe die gleichen Probleme wie ich sie schon damals damit hatte.
Ich habe nach dem Wiki, den Bot angelegt und dann den msgDialog.
defmod myMsgConfig msgConfig
attr myMsgConfig userattr msgDialog_evalSpecials:textField-long msgDialog_msgCommand:textField
attr myMsgConfig comment FHEM Global Configuration for command 'msg'
attr myMsgConfig group Global
attr myMsgConfig msgContactPush Jarvis
attr myMsgConfig msgDialog_evalSpecials me=Jarvis TelegramBot=Jarvis
attr myMsgConfig msgType text
attr myMsgConfig room Telegram
attr myMsgConfig stateFormat fhemMsgState
attr myMsgConfig verbose 3
Alles geklappt, jetzt wollte ich den meta_Dialos anlegen und kriege immer wieder die gleiche Fehlermeldung:
ZitatUsage: define msgDialog {JSON}
'"' expected, at character offset 1 (before "(end of string)") at ./FHEM/76_msgDialog.pm line 93.
Mein meta_Dialog sieht wie folgt aus:
defmod meta_Dialog msgDialog {
"%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."
]
}
}
Ich schnalle einfach nicht, was ich da wieder falsch mache. Kann mir bitte jemand helfen? Danke.
Wenn ich Deinen meta_dialog bei mir probiere, bekomme ich auch einen Fehler.
Probier mal folgendes:
1) einen leeren msgDialog anlegen mit
defmod meta_Dialog msgDialog {}
2) unter Def die Definition ändern, sprich den restlichen Code einfügen und "modify" drücken.
Damit sollte es klappen.
lg, Gerhard
Edit: Code korrigiert.
Hallo Gerhard.
Defmode ist ein unbekannter Befehl und gehe ich von einem Schreibfehler aus, das es defmod heißen soll. Das war die Methode, die ich versucht habe. Einen Modify Button habe ich nciht.
Ist der meta_Dialog aus dem Wiki.
Tja, die Rechtschreibprüfung ::)
Tschuldige. Natürlich war defmod gemeint.
Nachdem Du den leeren meta_Dialog angelegt hast, kannst Du die Definition des Devices in der Device-Übersicht ändern indem Du auf das "DEF" klickst.
In dem Feld kannst Du dann die ausführliche Definition reinkopieren - also nur das was in den geschwungenen Klammern steht (ohne "defmod meta_Dialog msgDialog").
Unter dem Feld ist ein Link namens "modify meta_Dialog".
Wenn Du darauf klickst, wird die neue Definition übernommen und alles sollte funktionieren.
Manchmal scheint sich fhem bei komplexeren Definitionen zu verschlucken.
Da hilft es ein leeres Device anzulegen und dann die Definition zu ändern.
lg, Gerhard
Ach so, Du meintest in der Def es zu bearbeiten. Ich mache das immer in der RAW, deswegen war ich wegen dem Button verwirrt.
Das hat leider auch nicht geklappt aber dein Hinweis, das Du mit dem Meta Dialog auch ne Fehlermeldung hast, brachte mich auf die richtige Idee. Ich habe mir hier im Thread einen Meta Dialog gesucht und den benutzt, da hat es geklappt. Ergo schließe ich daraus, das der Meta Dialog im Wiki einen Fehler drin hat.
Danke für die Hilfe.
Eigenartig.
Deine Definition hat bei mir so geklappt.
Aber wenn es gelöst ist und nun funktioniert, passt es ja.
lg, Gerhard
Ich habe die Konfiguration für MsgDialog entsprechend der Anleitung im Wiki vorgenommen und dabei auch die Hinweise hier im Forum berücksichtigt. Ein Problem mit dem inlineKeyboard konnte ich leider nicht beheben:
Um den inlineKeyboard-Modus zu nutzen, wird mit Hilfe von cmdAlias die TelegramBot-Ausgabefunktion "umgeschrieben". Im Wiki ist hierfür nach Vorschlag von Igami in Post#10 die Funktion message2queryEditInline definiert. Diese Funktion wird bei mir aber NUR beim ersten Aufruf eines msgDialogs aktiviert. Alle nachfolgenden Aufrufe gehen an der Funktion vorbei. Deshalb kann ich nur die erste Ebene eines MsgDialogs aktivieren.
Woran kann das liegen bzw. wie kann ich der Ursache einen Schritt näher kommen kann?
Hallo zusammen,
ich habe noch Probleme in Zusammenhang mit dem Erzeugen von Google Maps Links mit msgDialog, um Positionen und Distanzen von Livetracking Devices auszugeben.
Ich habe dazu folgenden Beitrag von ToM_ToM gefunden. Jedoch funktioniert bei mir seine Lösung nicht.
Zitat von: ToM_ToM am 06 März 2018, 08:22:18
Funktionierte leider auch nicht. Aber habe den Fehler jetzt gefunden. :)
Das Komma und das Gleichheitszeichen in der URL mussten auch encodiert werden damit die URL im Telegram-Messenger angezeigt wird.
{
"Notfall": {
"message": [
"(Standort) ",
"TelegramBot_MTYPE=queryInline (%me%) ",
"Letzen Standort abfragen"
],
"Standort": {
"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"{my $locLat = ReadingsVal(\"Thomas\", \"locationLat\", \"0\");; my $locLong = ReadingsVal(\"Thomas\", \"locationLong\", \"0\");; my $locLatTimestamp = ReadingsTimestamp(\"Thomas\", \"locationLat\", \"0\"); my $locAddress = ReadingsVal(\"Thomas\", \"locationAddr\", \"0\"); return \"Letzte Position war $locLatTimestamp: $locLat x $locLong $locAddress https:\/\/www.google.de\/maps\/%40\".$locLat.\",$locLong%2C15z?hl%3Dde\"}"
]
}
}
}
VG, Thomas
Mit dem für mich angepassten Code erhalte ich folgenden Link (Geokoordinaten verändert):
https://www.google.de/maps/%4050.80571,12.66600%2C15z?hl%3Dde (https://www.google.de/maps/%4050.80571,12.66600%2C15z?hl%3Dde)
Mein Versuch sieht derzeit so aus. Die Syntax der Google Maps URLs hat sich laut Doku zu der Version von ToM_ToM auch verändert:
"{my $locLat = ReadingsVal(\"RR_Livetracking\", \"latitude\", \"0\");; my $locLong = ReadingsVal(\"RR_Livetracking\", \"longitude\", \"0\");; my $locLatTimestamp = ReadingsTimestamp(\"RR_Livetracking\", \"latitude\", \"0\"); my $locAddress = ReadingsVal(\"RR_Livetracking\", \"place\", \"0\"); return \"Letzte Position war $locLatTimestamp: $locLat x $locLong $locAddress https:\/\/www.google.com\/maps\/search\/%3Fapi%3D1%26query%3D\".$locLat.\",$locLong\"}"
Daraus erhalte ich dann folgenden Link: https://www.google.com/maps/search/%3Fapi%3D1%26query%3D50.80571,12.66600 (https://www.google.com/maps/search/%3Fapi%3D1%26query%3D50.80571,12.66600)
Beide Links führen noch nicht zum Ergebnis. Mir ist daher noch nicht ganz klar welche Zeichen maskiert und welche per URL Encoding verändert werden müssen.
Ohne jetzt die 51 Seite durchzustöbern eine kurze Frage...
Ich versuche einen else-Zweig in die Dialog-Ausgabe einzubauen...So wie ich es versucht habe funktioniert es leider nicht.
Ist es überhaupt möglich, dieses in eine Zeile zu packen ?
"{return('Garagentor ist offen') if(ReadingsVal('SW_AU_Garagentor_N', 'state', '') eq 'on') else (return ('Garagentor ist geschlossen'))}",
Ich mache das Beispielsweise im message Zweig wie folgt:
{
"Alarmanlage": {
"message": [
"{return('(🔒 Alarmanlage Level 0 Ein) ') if(ReadingsVal('AlarmAnlage','level0','') eq 'disarmed')}",
"{return('(🔓 Alarmanlage Level 0 Aus) ') if(ReadingsVal('AlarmAnlage','level0','') eq 'armed')}",
Schau mal ob du das für dich ableiten kannst.
Grüße
So hatte ich es bisher auch gemacht, aber wenn die eine Bedingung nicht zutrifft. hat man halt eine Leerzeile und das wollte ich halt nicht.
Reine Kosmetik, deshalb mein Versuch, den else-Zweig in den Einzeiler zu packen...
Danke und Gruß
Grüße,
mit dem IF (fhem) geht es. Mit if (Perl) ist es mir bisher auch nicht gelungen - und da habe ewig nach einen Fehler gesucht.
...
"commands": [
"IF ([KNX_0003001:g1] == 0) (set KNX_0003001 g1 1) ELSE (set KNX_0003001 g1 0),"
...
habs mal zum Test mit dummys eingebaut.. es wird bei mir die Befehlszeile als String ausgegeben...hm... na mal weiter probieren
Danke für den Denkanstoss Richtung IF
Grüße,
vielleicht ein Fehler vor mir :)
Ich benutze es im "commands" nicht in "message".
Ich habe mein FHEM neu aufgesetzt und wollte jetzt den msgDialog wieder einbauen. Allerdings bekomme ich beim Meta immer folgenden Fehler im Log:
2021.08.02 20:16:46 3: eval: {return('(' . join(') (', sort(split('
', fhem('get TYPE=msgDialog:FILTER=NAME!=meta_Dialog:FILTER=allowed=.*(rr_Etienne|everyone).* trigger')))) . ') ')}
2021.08.02 20:16:46 3: msg rr_Etienne: ID=xxx TYPE=push ROUTE=Telegram RECIPIENT=@xxxx STATUS=OK PRIORITY=0 TITLE='' MSG='()
(abbrechen)
Ich kann folgendes für dich tun:'
Hier ein list des Meta Dialogs aus dem Wiki kopiert:
Internals:
CFGFN
DEF {
"%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:"
]
},
"abbrechen": {
"match": "\/?abbrechen",
"commands": [
"deletereading TYPE=msgDialog $recipient_history",
"deletereading %TelegramBot% $recipient_sentMsgId"
],
"message": [
"(%me%) ",
"Dialog abgebrochen."
]
},
"beenden": {
"match": "\/?beenden",
"commands": [
"deletereading TYPE=msgDialog $recipient_history",
"deletereading %TelegramBot% $recipient_sentMsgId"
],
"message": [
"(%me%) ",
"Dialog beendet."
]
}
}
FUUID 61083038-f33f-92c6-2ed8-67692e6f5898a707
MSGCOMMAND msg push \@$recipients $message
NAME meta_Dialog
NOTIFYDEV TYPE=(ROOMMATE|GUEST)
NR 26980
NTFY_ORDER 50-meta_Dialog
STATE rr_Etienne: Meta
TRIGGER beenden,abbrechen,Meta
TYPE msgDialog
OLDREADINGS:
READINGS:
2021-08-02 20:16:46 state rr_Etienne: Meta
Attributes:
allowed rr_Etienne
evalSpecials me=Meta
TelegramBot=Telegram
verbose 2
Und hier mal ein Test Dialog, dass er was finden kann:
Internals:
CFGFN
DEF {
"Test": {
"match": "Test",
"setOnly": false,
"commands": ["set test off",
"set test on"],
"message": [
"Schalte test Dummy:"
]
}
}
FUUID 610831dd-f33f-92c6-4700-f38c0c8cc043d6c1
MSGCOMMAND msg push \@$recipients $message
NAME Test_Dialog
NOTIFYDEV TYPE=(ROOMMATE|GUEST)
NR 27202
NTFY_ORDER 50-Test_Dialog
STATE Initialized
TRIGGER
TYPE msgDialog
READINGS:
2021-08-02 20:00:09 state Initialized
Attributes:
allowed rr_Etienne
evalSpecials TelegramBot=Telegram
Kann mich mal einer auf die Antwort für den Fehler schubsen? Ich finde ihn nicht. Ich bekomme als Nachricht auch den Text:
(abbrechen)
Ich kann folgendes für dich tun:
Dabei kann man abbrechen nicht anklicken und alles ist reine Textform. Ich hab kein Plan woran es liegen könnte.
echt niemand eine Idee, oder alle im Urlaub? :D
Grüße,
was mir auffällt: in der Fehlermeldung steht in MSG nichts.
MSG='()
Bei mir steht da immer etwas.
Hast Du im Device "msgConfig" unter "msgDialog_evalSpecials" Dein "me" definiert?
defmod myMsgConfig msgConfig
attr myMsgConfig userattr msgDialog_evalSpecials:textField-long msgDialog_msgCommand:textField
attr myMsgConfig comment FHEM Global Configuration for command 'msg'
attr myMsgConfig msgContactPush TelegramBot
attr myMsgConfig msgDialog_evalSpecials me=DeinMe TelegramBot=TelegramBot
attr myMsgConfig msgType text
attr myMsgConfig stateFormat fhemMsgState
@GammaTwin
Du warst schneller
@Amenophis86
Ich habe nichts gesehen bei Durchsehen, außer dass Du die evalSpecials in den Dialogen festlegst. Bei mir steht das im msgConfig:
Internals:
FUUID 5c433c7b-f33f-739f-ec70-8426623598c12e7f
FVERSION 75_msgConfig.pm:0.189950/2019-03-22
NAME myMsgConfig
NOTIFYDEV TYPE=(Jabber|TelegramBot|yowsup)
NR 49
NTFY_ORDER 50-myMsgConfig
STATE 0
TYPE msgConfig
READINGS:
2020-09-22 11:49:54 fhemMsgPush @rr_Peter,rr_Yvonne,rr_Christine,rr_Cornelia
2020-09-22 11:49:54 fhemMsgPushGw TeleBot:ERROR
2020-09-22 11:49:54 fhemMsgPushPrio 0
2020-09-22 11:49:54 fhemMsgPushState 0
2020-09-22 11:49:54 fhemMsgPushTitle -
2020-09-22 11:49:54 fhemMsgState 0
2020-09-22 11:49:54 fhemMsgStateTypes push:0
Attributes:
alias Globale Konfiguration für Kommando 'msg'
comment FHEM Global Configuration for command 'msg'
group Konfiguration Benachrichtigungen
icon edit_settings
msgCmdMail {DebianMail('%DEVICE%','%TITLE%','%MSG%')}
msgContactPush TeleBot
msgDialog_evalSpecials me=Q
TelegramBot=TeleBot
msgType text
room Infrastruktur->Messenger
stateFormat fhemMsgState
userattr msgDialog_evalSpecials:textField-long msgDialog_msgCommand:textField
verbose 3
Peter
Ich hatte die wichtigen evalSpecials im Dialog, weil ich mittels msgconfig eigentlich Pushover nutze. Im resident habe ich dann jedoch Telegram als PushDevice angelegt. Auf meiner alten Version ging das auch so. Werde es mal ändern und schauen, ob es daran liegt. Habt ihr mal meinen MetaDialog gecheckt, ob ihr dort einen Fehler sehr oder der bei euch geht?
Das Problem ist glaube, dass die get Abfrage keine Antwort erhält. Gebe ich folgendes in die Commandline ein:
get TYPE=msgDialog:FILTER=NAME!=meta_Dialog:FILTER=allowed=.*(rr_Etienne|everyone).* trigger
bekomme ich ein leeres Popup. Und das obwohl ich ja einen Test Dialog noch angelegt habe.
Fehler gefunden. In meinem Test Dialog fehlte der Trigger:
"%me%": {
zu Beginn. Damit war die get Abfrage immer 0 und damit hat die Nachricht nicht geklappt. Jetzt geht es :)
Dein Konstrukt ist trotzdem nicht klar. Ich habe in keinem Dialog den Trigger "%me%": {
, außer im Meta-Dialog.
Dein me ist ja "Meta"
evalSpecials me=Meta
Daher sollte nach der Eingabe von "Meta" aus dem Test-Dialog der Trigger "Test" angezeigt werden, aus:
"Test": {
Und zusätzlich "abbrechen", in Summe:
Schaltflächen:
Test
abbrechen
angezeigter Text:
Ich kann folgendes für dich tun:
Aber wenn es funktioniert :)
Es war nicht expliziert der Trigger %me% sondern es hatte wohl generell der Trigger gefehlt.
So sah der fehlerhafte Code aus:
{
"Test": {
"match": "Test",
"setOnly": false,
"commands": ["set test off",
"set test on"],
"message": [
"Schalte test Dummy:"
]
}
}
Was fehlte war noch ein Trigger vor allem. Bei meinem Test, dann der Trigger %me%. Inzwischen ist es ein anderer Trigger. Aber ich kam nur drauf, weil ich den Meta Dialog einfach nochmal kopiert und angepasst hatte und dabei ist das %me% stehen geblieben und hat mir dann gezeigt was der Fehler war.
Hallo
Ich bekomme es nicht zum Laufen / finde nicht den Fehler.
Es lief mal kurz, dann bekam ich nur noch Text als Antwort.
message @rr_Matti (test) (abbrechen)
Ich kann folgendes für dich tun:
Ok dachte ich, setzte ich alles nochmal neu auf. Danach wird es schon gehen.
Pustekuchen
Immernoch der selbe Fehler, nur Text dazu kommt das in Telegamm alte normale Keyboard angezeit werden.
Ich hoffe Ihr könnt mir helfen es hin zubekommen.
Telegam
defmod Telegram TelegramBot
attr Telegram defaultPeer 1xxxxxxxx
attr Telegram pollingTimeout 120
attr Telegram utf8Special 1
setstate Telegram Polling
setstate Telegram 2021-08-23 12:10:48 Contacts 1xxxxxxx:Matti:
setstate Telegram 2021-08-23 12:07:40 PollingErrCount 0
setstate Telegram 2021-08-23 23:29:11 msgChat Matti
setstate Telegram 2021-08-23 23:29:11 msgChatId 1xxxxxxx
setstate Telegram 2021-08-23 23:29:11 msgFileId
setstate Telegram 2021-08-23 23:29:11 msgId 44152
setstate Telegram 2021-08-23 23:29:11 msgPeer Matti
setstate Telegram 2021-08-23 23:29:11 msgPeerId 1xxxxxxxx
setstate Telegram 2021-08-23 23:29:11 msgReplyMsgId
setstate Telegram 2021-08-23 23:29:11 msgText Q
setstate Telegram 2021-08-23 23:29:11 prevMsgChat Matti
setstate Telegram 2021-08-23 23:29:11 prevMsgFileId
setstate Telegram 2021-08-23 23:29:11 prevMsgId 44150
setstate Telegram 2021-08-23 23:29:11 prevMsgPeer Matti
setstate Telegram 2021-08-23 23:29:11 prevMsgPeerId 1xxxxxxx
setstate Telegram 2021-08-23 23:29:11 prevMsgReplyMsgId
setstate Telegram 2021-08-23 23:29:11 prevMsgText Q
setstate Telegram 2021-08-23 17:47:47 rr_Matti_sentMsgId 44145
setstate Telegram 2021-08-23 23:29:12 sentMsgId 44153
setstate Telegram 2021-08-23 23:29:12 sentMsgPeerId 1xxxxxxx
setstate Telegram 2021-08-23 23:29:12 sentMsgResult SUCCESS
msgConfig
defmod myMsgConfig msgConfig
attr myMsgConfig userattr msgDialog_evalSpecials:textField-long msgDialog_msgCommand:textField
attr myMsgConfig comment FHEM Global Configuration for command 'msg'
attr myMsgConfig group Global
attr myMsgConfig msgContactPush Telegram
attr myMsgConfig msgDialog_evalSpecials me=Q\
TelegramBot=Telegram
attr myMsgConfig msgDialog_msgCommand msg message \@$recipients $message
attr myMsgConfig msgType text
attr myMsgConfig stateFormat fhemMsgState
attr myMsgConfig verbose 5
setstate myMsgConfig 1
setstate myMsgConfig 2021-08-23 23:29:11 fhemMsgPush message @rr_Matti (test) (abbrechen) \
Ich kann folgendes für dich tun:
setstate myMsgConfig 2021-08-23 23:29:11 fhemMsgPushGw Telegram:OK
setstate myMsgConfig 2021-08-23 23:29:11 fhemMsgPushPrio 0
setstate myMsgConfig 2021-08-23 23:29:11 fhemMsgPushState 1
setstate myMsgConfig 2021-08-23 23:29:11 fhemMsgPushTitle -
setstate myMsgConfig 2021-08-23 23:29:11 fhemMsgState 1
setstate myMsgConfig 2021-08-23 23:29:11 fhemMsgStateTypes push:1 forwards:text>push
Residents
defmod rr_Matti ROOMMATE Residents
attr rr_Matti alias Status
attr rr_Matti comment Auto-created by Residents
attr rr_Matti 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_Matti group Matti
attr rr_Matti icon people_sensor
attr rr_Matti msgContactPush Telegram:@1xxxxxxxx
attr rr_Matti room Residents
attr rr_Matti rr_realname group
attr rr_Matti sortby 1
attr rr_Matti webCmd state
setstate rr_Matti home
setstate rr_Matti 2021-08-23 12:03:40 durTimerAbsence 00:00:00
setstate rr_Matti 2021-08-23 12:03:40 durTimerAbsence_cr 0
setstate rr_Matti 2021-08-24 00:01:36 durTimerPresence 11:57:56
setstate rr_Matti 2021-08-24 00:01:36 durTimerPresence_cr 718
setstate rr_Matti 2021-08-23 12:03:40 durTimerSleep 00:00:00
setstate rr_Matti 2021-08-23 12:03:40 durTimerSleep_cr 0
setstate rr_Matti 2021-08-23 23:29:11 fhemMsgRcvPush Q
setstate rr_Matti 2021-08-23 23:29:11 fhemMsgRcvPushGw Telegram
setstate rr_Matti 2021-08-23 12:03:40 lastArrival 2021-08-23 12:03:40
setstate rr_Matti 2021-08-23 12:03:40 lastState initialized
setstate rr_Matti 2021-08-23 12:03:40 mood calm
setstate rr_Matti 2021-08-23 12:03:40 presence present
setstate rr_Matti 2021-08-23 12:03:40 state home
setstate rr_Matti 2021-08-23 12:03:40 wayhome 0
meta_Dialog
defmod meta_Dialog msgDialog {\
"%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."\
]\
}\
}
attr meta_Dialog allowed everyone
attr meta_Dialog room Dialog
setstate meta_Dialog rr_Matti: Q
setstate meta_Dialog 2021-08-23 23:29:11 state rr_Matti: Q
test_dialog
defmod test_dialog msgDialog {\
"test": {\
"message": [\
"(Fernsehbeleuchtung AN|Fernsehbeleuchtung AUS) ",\
"(%me%) ",\
"** Beleuchtung** ",\
"Fernsehbeleuchtung ist: [test:STATE]"\
],\
"Fernsehbeleuchtung AN": {\
"commands": [\
"set test on",\
"set $SELF say @$recipient test"\
]\
},\
"Fernsehbeleuchtung AUS": {\
"commands": [\
"set test off",\
"set $SELF say @$recipient test"\
]\
}\
}\
}
attr test_dialog allowed everyone
attr test_dialog room Dialog
setstate test_dialog 2021-08-23 17:22:16 state Initialized
dummy
defmod test dummy
setstate test on
message2queryEditInline
defmod message2queryEditInline cmdalias set .+ message (.|\n)+ AS {\
my ($NAME, $cmd, $message) = split(/[\s]+/, $EVENT, 3);;\
my $TYPE = InternalVal($NAME, "TYPE", "");;\
(my $recipient, $message) = ($message =~ m/(@\S+)? (.+)/s);;\
\
if($TYPE eq "TelegramBot" && $recipient){\
my ($contact) = devspec2array("TYPE=(ROOMMATE|GUEST):FILTER=msgContactPush=.*$recipient.*");;\
my $sentMsgId = ReadingsVal($NAME, "$contact\_sentMsgId", "");;\
\
if($sentMsgId ne ""){\
fhem("set $NAME queryEditInline $sentMsgId $recipient $message");;\
}\
else{\
fhem("set $NAME queryInline $recipient $message");;\
}\
}\
else{\
fhem("set $EVENT");;\
}\
}
attr message2queryEditInline room msg
setstate message2queryEditInline defined
sentMsgIdByPeerId
defmod sentMsgIdByPeerId notify .+:sentMsgId.+ {\
return unless($TYPE eq "TelegramBot");;\
\
my $dev_hash = $defs{$NAME};;\
my $sentMsgId = ReadingsVal($NAME, "sentMsgId", "");;\
my $sentMsgPeerId = ReadingsVal($NAME, "sentMsgPeerId", "");;\
my ($contact) = devspec2array("TYPE=(ROOMMATE|GUEST):FILTER=msgContactPush=.*$sentMsgPeerId.*");;\
\
readingsSingleUpdate($dev_hash, "$contact\_sentMsgId", $sentMsgId, 1);;\
}
attr sentMsgIdByPeerId devStateIcon {ReadingsVal($name, "state", "inactive") eq "active" ? ".*:ios-on-blue:inactive" : ".*:ios-off:active"}
attr sentMsgIdByPeerId icon audio_mic
attr sentMsgIdByPeerId room msg
setstate sentMsgIdByPeerId active
setstate sentMsgIdByPeerId 2021-08-24 00:08:17 state active
inline_normal.NOT
defmod inline_normal.NOT notify inline_normal.DUM:.* {\
if ("$EVENT" =~ "on") {\
fhem "set sentMsgIdByPeerId active;; attr message2queryEditInline disable 0";;\
} \
elsif ("$EVENT" =~ "off") {\
fhem "set sentMsgIdByPeerId inactive;; attr message2queryEditInline disable 1";;\
}\
}
attr inline_normal.NOT room msg
setstate inline_normal.NOT active
setstate inline_normal.NOT 2021-08-23 17:43:48 state active
Wenn ich Q sende zum Bot steht das im log
2021.08.24 00:20:30 5: msgConfig myMsgConfig: called function msgConfig_Notify()
2021.08.24 00:20:30 5: msg myMsgConfig: msgType lookup for myMsgConfig:
2021.08.24 00:20:30 5: msg myMsgConfig: Adding to @typesOr: text
2021.08.24 00:20:30 5: msg myMsgConfig: Adding to @type: text
2021.08.24 00:20:30 5: msg myMsgConfig: Checking for available routes (triggered by type text)
2021.08.24 00:20:30 5: msg myMsgConfig: screen route check result: ROUTE_UNAVAILABLE
2021.08.24 00:20:30 5: msg myMsgConfig: light route check result: ROUTE_UNAVAILABLE
2021.08.24 00:20:30 5: msg myMsgConfig: audio route check result: ROUTE_UNAVAILABLE
2021.08.24 00:20:30 5: msg myMsgConfig: push route check result: ROUTE_AVAILABLE
2021.08.24 00:20:30 5: msg myMsgConfig: mail route check result: ROUTE_UNAVAILABLE
2021.08.24 00:20:30 4: msg myMsgConfig: Available routes: screen=0 light=0 audio=0 text=1 push=1 mail=0
2021.08.24 00:20:30 4: msg myMsgConfig: Text routing decision: push(4)
2021.08.24 00:20:30 5: msg myMsgConfig: Checking for available routes (triggered by type push)
2021.08.24 00:20:30 5: msg myMsgConfig: screen route check result: ROUTE_UNAVAILABLE
2021.08.24 00:20:30 5: msg myMsgConfig: light route check result: ROUTE_UNAVAILABLE
2021.08.24 00:20:30 5: msg myMsgConfig: audio route check result: ROUTE_UNAVAILABLE
2021.08.24 00:20:30 5: msg myMsgConfig: push route check result: ROUTE_AVAILABLE
2021.08.24 00:20:30 5: msg myMsgConfig: mail route check result: ROUTE_UNAVAILABLE
2021.08.24 00:20:30 4: msg myMsgConfig: Available routes: screen=0 light=0 audio=0 text=1 push=1 mail=0
2021.08.24 00:20:30 5: msg myMsgConfig: Trying to send message via gateway Telegram
2021.08.24 00:20:30 5: msg myMsgConfig: Determined default title:
2021.08.24 00:20:30 5: msg myMsgConfig: msgSchema: replacing %RECIPIENT% and $RECIPIENT by ''
2021.08.24 00:20:30 5: msg myMsgConfig: msgSchema: replacing %TelegramBot_MTYPE% and $TelegramBot_MTYPE by 'message'
2021.08.24 00:20:30 5: msg myMsgConfig: push route command (fhem): set Telegram message message @rr_Matti (test) (abbrechen)
Ich kann folgendes für dich tun:
2021.08.24 00:20:30 3: cmdalias message2queryEditInline called recursively, skipping execution
2021.08.24 00:20:30 3: msg myMsgConfig: ID=1629757230.57401.1 TYPE=push ROUTE=Telegram STATUS=OK PRIORITY=0 TITLE='' MSG='message @rr_Matti (test) (abbrechen)
Ich kann folgendes für dich tun:'
2021.08.24 00:20:30 5: msgConfig myMsgConfig: called function msgConfig_Notify()
2021.08.24 00:20:30 3: sentMsgIdByPeerId return value: rr_Matti_sentMsgId: 44157
Event Monitor
2021-08-24 00:20:30 msgDialog meta_Dialog rr_Matti_history:
2021-08-24 00:20:30 msgDialog meta_Dialog rr_Matti: Q
2021-08-24 00:20:30 msgConfig myMsgConfig fhemMsgPush: message @rr_Matti (test) (abbrechen) Ich kann folgendes für dich tun:
2021-08-24 00:20:30 msgConfig myMsgConfig fhemMsgPushTitle: -
2021-08-24 00:20:30 msgConfig myMsgConfig fhemMsgPushPrio: 0
2021-08-24 00:20:30 msgConfig myMsgConfig fhemMsgPushGw: Telegram:OK
2021-08-24 00:20:30 msgConfig myMsgConfig fhemMsgPushState: 1
2021-08-24 00:20:30 msgConfig myMsgConfig fhemMsgStateTypes: push:1 forwards:text>push
2021-08-24 00:20:30 msgConfig myMsgConfig fhemMsgState: 1
2021-08-24 00:20:30 ROOMMATE rr_Matti fhemMsgRcvPush: Q
2021-08-24 00:20:30 ROOMMATE rr_Matti fhemMsgRcvPushGw: Telegram
2021-08-24 00:20:30 TelegramBot Telegram msgId: 44156
2021-08-24 00:20:30 TelegramBot Telegram msgPeer: Matti
2021-08-24 00:20:30 TelegramBot Telegram msgPeerId: 1xxxxxx
2021-08-24 00:20:30 TelegramBot Telegram msgChat: Matti
2021-08-24 00:20:30 TelegramBot Telegram msgChatId: 1xxxxxx
2021-08-24 00:20:30 TelegramBot Telegram msgText: Q
2021-08-24 00:20:30 TelegramBot Telegram msgReplyMsgId:
2021-08-24 00:20:30 TelegramBot Telegram msgFileId:
2021-08-24 00:20:30 TelegramBot Telegram sentMsgResult: SUCCESS
2021-08-24 00:20:30 TelegramBot Telegram sentMsgId: 44157
2021-08-24 00:20:30 TelegramBot Telegram sentMsgPeerId: 1xxxxx
2021-08-24 00:20:30 TelegramBot Telegram rr_Matti_sentMsgId: 44157
Gruß Matti
Hallo allerseits,
Ich habe mich grade neu angemeldet, habe aber mit Hilfe dieses Forums schon so einige Probleme gelöst!
Ich möchte fhem gern über telegram steuern und auslesen, was mit Hilfe des msgDialog auch problemlos funktioniert.
Was aber absolut nicht klappen will ist das Inline Keyboard. Ohne Inline (also mit schaltflächen unten) reagiert fhem wie erwartet auf eingehende Nachrichten. Inline schaltflächen werden auf dem Handy auch angezeigt, aber fhem reagiert nicht, wenn ich darauf klicke...
Habt ihr einen Tipp, was ich übersehe?
Danke
Ich verzweifle gerade. Habe mein FHEM neu aufgesetzt. Telegram selber funktioniert (Nachrichten kommen am Handy an).
msgDialog nach WIKI eingerichtet, aber der Meta-Dialog wird schon nicht vernünftig angezeigt.
define myMsgConfig msgConfig
attr myMsgConfig userattr msgDialog_evalSpecials:textField-long msgDialog_msgCommand:textField
attr myMsgConfig comment FHEM Global Configuration for command 'msg'
attr myMsgConfig group Global
attr myMsgConfig msgContactPush TelegramFhem
attr myMsgConfig msgDialog_evalSpecials me=QQ\
TelegramBot=TelegramFhem
attr myMsgConfig msgType text
attr myMsgConfig room Z_Dialoge,Z_System
attr myMsgConfig stateFormat fhemMsgState
attr myMsgConfig verbose 3
# CFGFN
# FUUID 637bdc79-f33f-006c-1d70-680dfe33189f587f
# FVERSION 75_msgConfig.pm:0.189950/2019-03-22
# NAME myMsgConfig
# NOTIFYDEV TYPE=(Jabber|TelegramBot|yowsup)
# NR 16683
# NTFY_ORDER 50-myMsgConfig
# STATE initialized
# TYPE msgConfig
# eventCount 1
# READINGS:
# 2022-11-21 21:15:53 fhemMsgState initialized
#
setstate myMsgConfig initialized
setstate myMsgConfig 2022-11-21 21:15:53 fhemMsgState initialized
define meta_Dialog msgDialog {\
"%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."\
]\
}\
}
attr meta_Dialog allowed msg_Heiko
attr meta_Dialog room Z_Dialoge
# 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 637bdd34-f33f-006c-c457-981ee96444046f42
# MSGCOMMAND msg \@$recipients $message
# NAME meta_Dialog
# NOTIFYDEV TYPE=(ROOMMATE|GUEST)
# NR 16710
# NTFY_ORDER 50-meta_Dialog
# STATE msg_Heiko: QQ
# TRIGGER zurück,beenden,abbrechen,Dialog
# TYPE msgDialog
# eventCount 10
# OLDREADINGS:
# READINGS:
# 2022-11-21 22:13:02 state msg_Heiko: QQ
#
setstate meta_Dialog msg_Heiko: QQ
setstate meta_Dialog 2022-11-21 22:13:02 state msg_Heiko: QQ
define msg_Heiko ROOMMATE
attr msg_Heiko alias Status
attr msg_Heiko 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 msg_Heiko group msg_Heiko
attr msg_Heiko icon people_sensor
attr msg_Heiko msgContactPush TelegramFhem:791060837
attr msg_Heiko room ,Z_Dialoge
attr msg_Heiko rr_realname group
attr msg_Heiko sortby 1
attr msg_Heiko webCmd state
# CFGFN
# DURATIONTIMER 1669065545.36769
# FUUID 637bddfc-f33f-006c-a79a-6fc61728a9db5a11
# FVERSION 20_ROOMMATE.pm:0.195330/2019-06-02
# NAME msg_Heiko
# NOTIFYDEV global,
# NR 16739
# NTFY_ORDER 50-msg_Heiko
# READY 1
# STATE home
# SUBTYPE adult
# TYPE ROOMMATE
# eventCount 65
# READINGS:
# 2022-11-21 21:22:35 durTimerAbsence 00:00:00
# 2022-11-21 21:22:35 durTimerAbsence_cr 0
# 2022-11-21 22:18:05 durTimerPresence 00:54:00
# 2022-11-21 22:18:05 durTimerPresence_cr 54
# 2022-11-21 21:22:35 durTimerSleep 00:00:00
# 2022-11-21 21:22:35 durTimerSleep_cr 0
# 2022-11-21 22:13:02 fhemMsgPush () (abbrechen)
#Ich kann folgendes für dich tun:
# 2022-11-21 22:13:02 fhemMsgPushGw TelegramFhem:791060837:OK
# 2022-11-21 22:13:02 fhemMsgPushPrio 0
# 2022-11-21 22:13:02 fhemMsgPushState 1
# 2022-11-21 22:13:02 fhemMsgPushTitle -
# 2022-11-21 22:13:02 fhemMsgRcvPush QQ
# 2022-11-21 22:13:02 fhemMsgRcvPushGw TelegramFhem
# 2022-11-21 22:13:02 fhemMsgState 1
# 2022-11-21 22:13:02 fhemMsgStateTypes push:1 forwards:text>push
# 2022-11-21 21:24:05 lastArrival 2022-11-21 21:24:05
# 2022-11-21 21:24:05 lastLocation undefined
# 2022-11-21 21:24:05 lastState initialized
# 2022-11-21 21:24:05 location home
# 2022-11-21 21:24:05 mood calm
# 2022-11-21 21:24:05 presence present
# 2022-11-21 21:24:05 state home
# 2022-11-21 21:24:05 wayhome 0
# TIMER:
# msg_Heiko_DurationTimer:
# HASH msg_Heiko
# MODIFIER DurationTimer
# NAME msg_Heiko_DurationTimer
#
setstate msg_Heiko home
setstate msg_Heiko 2022-11-21 21:22:35 durTimerAbsence 00:00:00
setstate msg_Heiko 2022-11-21 21:22:35 durTimerAbsence_cr 0
setstate msg_Heiko 2022-11-21 22:18:05 durTimerPresence 00:54:00
setstate msg_Heiko 2022-11-21 22:18:05 durTimerPresence_cr 54
setstate msg_Heiko 2022-11-21 21:22:35 durTimerSleep 00:00:00
setstate msg_Heiko 2022-11-21 21:22:35 durTimerSleep_cr 0
setstate msg_Heiko 2022-11-21 22:13:02 fhemMsgPush () (abbrechen) \
Ich kann folgendes für dich tun:
setstate msg_Heiko 2022-11-21 22:13:02 fhemMsgPushGw TelegramFhem:791060837:OK
setstate msg_Heiko 2022-11-21 22:13:02 fhemMsgPushPrio 0
setstate msg_Heiko 2022-11-21 22:13:02 fhemMsgPushState 1
setstate msg_Heiko 2022-11-21 22:13:02 fhemMsgPushTitle -
setstate msg_Heiko 2022-11-21 22:13:02 fhemMsgRcvPush QQ
setstate msg_Heiko 2022-11-21 22:13:02 fhemMsgRcvPushGw TelegramFhem
setstate msg_Heiko 2022-11-21 22:13:02 fhemMsgState 1
setstate msg_Heiko 2022-11-21 22:13:02 fhemMsgStateTypes push:1 forwards:text>push
setstate msg_Heiko 2022-11-21 21:24:05 lastArrival 2022-11-21 21:24:05
setstate msg_Heiko 2022-11-21 21:24:05 lastLocation undefined
setstate msg_Heiko 2022-11-21 21:24:05 lastState initialized
setstate msg_Heiko 2022-11-21 21:24:05 location home
setstate msg_Heiko 2022-11-21 21:24:05 mood calm
setstate msg_Heiko 2022-11-21 21:24:05 presence present
setstate msg_Heiko 2022-11-21 21:24:05 state home
setstate msg_Heiko 2022-11-21 21:24:05 wayhome 0
Irgendwie werden mir am Handy noch Favoriten der alten FHEM-Installation angezeigt, obwohl aktuell keine definiert sind.
Sicherheitshalber noch mal der TelegramBot:
define TelegramFhem TelegramBot
attr TelegramFhem allowUnknownContacts 0
attr TelegramFhem cmdRestrictedPeer 791060837
attr TelegramFhem defaultPeer 791060837
attr TelegramFhem event-on-change-reading state
attr TelegramFhem event-on-update-reading msgText
attr TelegramFhem pollingTimeout 120
attr TelegramFhem room Z_Bridges,Z_System
attr TelegramFhem utf8Special 1
# FAILS 0
# NAME TelegramFhem
# NR 27
# OLD_POLLING 182
# POLLING 182
# SNAME TelegramFhem
# STATE Polling
# TYPE TelegramBot
# UPDATER 0
# WAIT 0
# eventCount 26
# me 813746914:HeikoFHEM:@HeikoFHEM_bot
# offset_id 192616767
# sentLastResult SUCCESS
# sentMsgId 13489
# sentMsgOptions
# sentMsgPeer Heiko
# sentMsgPeerId 791060837
# sentMsgResult SUCCESS
# sentMsgText 791060837 () (abbrechen)
#Ich kann folgendes für dich tun:
# sourceVersion $Id: 50_TelegramBot.pm 24867 2021-08-23 10:23:15Z viegener $
# Contacts:
# 791060837 791060837:Heiko:@HeikoStr
# HU_DO_PARAMS:
# NAME
# addr https://api.telegram.org:443
# auth 0
# boundary TelegramBot_boundary-x0123
# buf
# code 200
# compress 1
# conn
# data
# displayurl <hidden>
# header agent: TelegramBot/1.0
#User-Agent: TelegramBot/1.0
#Accept: application/json
#Accept-Charset: utf-8
#Content-Type: multipart/form-data; boundary=TelegramBot_boundary-x0123
# hideurl 1
# host api.telegram.org
# httpheader HTTP/1.1 200 OK
#Server: nginx/1.18.0
#Date: Mon, 21 Nov 2022 21:13:02 GMT
#Content-Type: application/json
#Content-Length: 307
#Connection: close
#Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
#Access-Control-Allow-Origin: *
#Access-Control-Allow-Methods: GET, POST, OPTIONS
#Access-Control-Expose-Headers: Content-Length,Content-Type,Date,Server,Connection
# hu_blocking 0
# hu_filecount 25
# hu_port 443
# hu_portSfx
# loglevel 4
# method POST
# path /###/sendMessage
# protocol https
# redirects 0
# timeout 30
# url https://api.telegram.org/###/sendMessage
# args:
# 791060837
# 791060837 () (abbrechen)
#Ich kann folgendes für dich tun:
# undef
# 0
# undef
#
# 1
# hash:
# sslargs:
# HU_UPD_PARAMS:
# FD 7
# NAME
# addr https://api.telegram.org:443
# auth 0
# buf
# code 200
# compress 1
# displayurl <hidden>
# header agent: TelegramBot/1.0
#User-Agent: TelegramBot/1.0
#Accept: application/json
#Accept-Charset: utf-8
# hideurl 1
# host api.telegram.org
# hu_blocking 0
# hu_filecount 5281
# hu_inProgress TelegramBot_UpdatePoll:2429 TelegramBot_Callback:729 __ANON__:779
# hu_port 443
# hu_portSfx
# isPolling update
# loglevel 4
# method GET
# offset 192616767
# path /###/getUpdates?offset=192616767&limit=5&timeout=120
# protocol https
# redirects 0
# timeout 245
# url https://api.telegram.org/###/getUpdates?offset=192616767&limit=5&timeout=120
# hash:
# sslargs:
# READINGS:
# 2022-11-21 21:40:38 Contacts 791060837:Heiko:@HeikoStr
# 2022-11-21 00:00:29 PollingErrCount 0
# 2022-11-20 02:13:53 PollingLastError Callback returned error :Too Many Requests: retry after 5:
# 2022-11-21 22:13:02 msgChat Heiko
# 2022-11-21 22:13:02 msgChatId 791060837
# 2022-11-21 22:13:02 msgFileId
# 2022-11-21 22:13:02 msgId 13488
# 2022-11-21 22:13:02 msgPeer Heiko
# 2022-11-21 22:13:02 msgPeerId 791060837
# 2022-11-21 22:13:02 msgReplyMsgId
# 2022-11-21 22:13:02 msgText QQ
# 2022-11-21 22:13:02 prevMsgChat Heiko
# 2022-11-21 22:13:02 prevMsgFileId
# 2022-11-21 22:13:02 prevMsgId 13487
# 2022-11-21 22:13:02 prevMsgPeer Heiko
# 2022-11-21 22:13:02 prevMsgPeerId 791060837
# 2022-11-21 22:13:02 prevMsgReplyMsgId
# 2022-11-21 22:13:02 prevMsgText Dialog
# 2022-11-21 22:13:02 sentMsgId 13489
# 2022-11-21 22:13:02 sentMsgPeerId 791060837
# 2022-11-21 22:13:02 sentMsgResult SUCCESS
# inlinechats:
# sentQueue:
#
setstate TelegramFhem Polling
setstate TelegramFhem 2022-11-21 21:40:38 Contacts 791060837:Heiko:@HeikoStr
setstate TelegramFhem 2022-11-21 00:00:29 PollingErrCount 0
setstate TelegramFhem 2022-11-20 02:13:53 PollingLastError Callback returned error :Too Many Requests: retry after 5:
setstate TelegramFhem 2022-11-21 22:13:02 msgChat Heiko
setstate TelegramFhem 2022-11-21 22:13:02 msgChatId 791060837
setstate TelegramFhem 2022-11-21 22:13:02 msgFileId
setstate TelegramFhem 2022-11-21 22:13:02 msgId 13488
setstate TelegramFhem 2022-11-21 22:13:02 msgPeer Heiko
setstate TelegramFhem 2022-11-21 22:13:02 msgPeerId 791060837
setstate TelegramFhem 2022-11-21 22:13:02 msgReplyMsgId
setstate TelegramFhem 2022-11-21 22:13:02 msgText QQ
setstate TelegramFhem 2022-11-21 22:13:02 prevMsgChat Heiko
setstate TelegramFhem 2022-11-21 22:13:02 prevMsgFileId
setstate TelegramFhem 2022-11-21 22:13:02 prevMsgId 13487
setstate TelegramFhem 2022-11-21 22:13:02 prevMsgPeer Heiko
setstate TelegramFhem 2022-11-21 22:13:02 prevMsgPeerId 791060837
setstate TelegramFhem 2022-11-21 22:13:02 prevMsgReplyMsgId
setstate TelegramFhem 2022-11-21 22:13:02 prevMsgText Dialog
setstate TelegramFhem 2022-11-21 22:13:02 sentMsgId 13489
setstate TelegramFhem 2022-11-21 22:13:02 sentMsgPeerId 791060837
setstate TelegramFhem 2022-11-21 22:13:02 sentMsgResult SUCCESS
Log wirft folgendes aus:
2022.11.21 22:04:15 3: TelegramBot TelegramFhem: Found from id in message - id : 791060837
2022.11.21 22:04:15 1: PERL WARNING: Use of uninitialized value in split at (eval 71974) line 1.
2022.11.21 22:04:15 3: eval: {return('(' . join(') (', sort{lc($a) cmp lc($b)} (split('
', fhem('get TYPE=msgDialog:FILTER=NAME!=meta_Dialog:FILTER=allowed=.*(msg_Heiko|everyone).* trigger', 1)))) . ') (abbrechen) ')}
2022.11.21 22:04:15 3: msg msg_Heiko: ID=1669064655.51613.1 TYPE=push ROUTE=TelegramFhem RECIPIENT=791060837 STATUS=OK PRIORITY=0 TITLE='' MSG='() (abbrechen)
Ich kann folgendes für dich tun:'
Das Handy siehe Screenshot.
Sieht m.E. OK aus, was versendet wird. Das Problem scheint eher auf der Handy-app zu sein. Hatte das auch schon, dass die inline-Tastatur veraltet war, weiß aber grade auch nicht mehr, wie das zu beheben war. Alte Nachricht löschen?
Zitat von: Beta-User am 08 Dezember 2022, 07:41:34
Sieht m.E. OK aus, was versendet wird. Das Problem scheint eher auf der Handy-app zu sein. Hatte das auch schon, dass die inline-Tastatur veraltet war, weiß aber grade auch nicht mehr, wie das zu beheben war. Alte Nachricht löschen?
Ich habe tatsächlich mal den kompletten Nachrichtenverlauf (für alle Teilnehmer) gelöscht, jetzt ist die alte Inline-Tastatur weg.
Ändert aber nichts daran, dass der Meta-Dialog nicht angezeigt wird.
Ist denn wenigstens der "Umschalter" sichtbar? Da müsste nirgendwo ein komischer Schnörkel auf einer Taste sein.
Meint das Symbol mit den 4 Kästen drin? (Im Screenshot links von Anhangklammer/Kamera)
Ja.
Grüße,
mir ist etwas unschönes passiert - aber auch interessant :)
Folgendes ist passiert:
- Der Telegram-Bot war in einem Menu, in dem sich Dinge schalten lassen - z.B Licht. Dort sind mehrere Lampen.
- Gleichzeitig war FHEM down
- Ich habe Licht geschalten, erst eins, dann ein weiteres. Passiert ist natürlich nicht. Die zu sendenden Texte standen aber da (logisch)
- Als ich FHEM wieder gestartet habe, wurden die Befehle abgearbeitet - Lichter gehen an :)
Das ist aber unschön. Wenn dies bei der Haustür passiert. Öffnung nach Stunden, vielleicht niemand da :o
Daher meine Frage: kann ich in FHEM erkennen, wann die Nachricht in Telegram gesendet wurde? Ich habe kein Reading gefunden.
Hallo Zusammen,
ich habe heute bemerkt, dass msgDialog nicht mehr Dialoge ausliefert und der TelegramBot nur eine Fehlermeldung ausgibt wenn ich den Metadialog anfordere:
Callback returned error :Bad Request: message is not modified: specified new message content and reply markup are exactly the same as a current content and reply markup of the message:
Im Log ist aber sehr schön zu sehen, dass der Metadialog den Dialog korrekt zusammenbaut:
2023.01.24 10:50:50.742 3: get TYPE=msgDialog:FILTER=NAME!=metaDialog:FILTER=NAME!=.*_fav:FILTER=NAME!=.*_sys:FILTER=NAME!=.*_user:FILTER=allowed=.*(rr_Sebastian|everyone).* trigger : 01.⭐️...Favoriten...⭐️
02.👩🏼..Bewohner..👩🏻
03.💡...Lampen....💡
04.🔋.Steckdosen.🔋
05.👾....Robbi.....👾
05.↕️..Rollläden..↕️
06.⚠️....Notfall.....⚠️
09.🛒.Einkaufsliste.🛍
10.🛠....System....🛠
Was läuft denn hier schief?
EDIT: set metaDialog reset hat nicht geholfen...
VG Sebastian
Hmm, scheint mir kein originäres Problem von msgDialog zu sein, die Meldung würde ich in TelegramBot verorten (#2325).
Eventuell musst du zwischendurch mal was anderes senden? (Ansonsten müßte die alte message ja noch vorhanden sein?)
Zitat von: Beta-User am 25 Januar 2023, 11:24:42
Eventuell musst du zwischendurch mal was anderes senden? (Ansonsten müßte die alte message ja noch vorhanden sein?)
Das hab ich bereits probiert. Sende ich zB
msg push hallo
kommt dann ein "SUCCESS". Schicke ich danach %me (Q) dann kommt sofort wieder
Callback returned error :Bad Request: message is not modified: specified new message content and reply markup are exactly the same as a current content and reply markup of the message:
set TelegramBot reset war auch leider nicth von Erfolg gekrönt. Ich poste mal im TelegramBot Thread...
Zitat von: Beta-User am 25 Januar 2023, 11:24:42
Hmm, scheint mir kein originäres Problem von msgDialog zu sein, die Meldung würde ich in TelegramBot verorten (#2325).
Der Post #2325 im Telegram Thread hat aber so gar nichts mit meinem Thema zu tun oder?
EDIT: Beim Aufruf des Dialogs wird das Reading "sentMsgId" nicht geschrieben. Vermutlich ist das der Grund warum die Fehlermeldung auftaucht?
VG Sebastian
Zitat von: binford6000 am 25 Januar 2023, 12:09:01
Der Post #2325 im Telegram Thread hat aber so gar nichts mit meinem Thema zu tun oder?
Nein, gemeint war die Zeilennummer im 50_TelegramBot.pm ;D .
Zitat von: Beta-User am 25 Januar 2023, 12:14:20
Nein, gemeint war die Zeilennummer im 50_TelegramBot.pm ;D .
Ah OK ;)
Wenn ich das Inline Keyboard ausschalte funktionieren die Dialoge wieder und sentMsgId wird wieder gesetzt. Also scheint dort was schief zu laufen. Im Prinzip ist es ja nur das Aktivieren/Deaktivieren dieses notifys:
.+:sentMsgId.+ {
return unless($TYPE eq "TelegramBot");
my $dev_hash = $defs{$NAME};
my $sentMsgId = ReadingsVal($NAME,"sentMsgId","");
my $sentMsgPeerId = ReadingsVal($NAME,"sentMsgPeerId","");
my $contact = devspec2array("TYPE=(ROOMMATE):FILTER=msgContactPush=.*$sentMsgPeerId.*");
readingsSingleUpdate($dev_hash,"$contact\_sentMsgId",$sentMsgId,1);
}
...und dieses cmdAliases:
set .+ message (.|\n)+ AS {
my ($NAME, $cmd, $message) = split(/[\s]+/, $EVENT, 3);
my $TYPE = InternalVal($NAME, "TYPE", "");
(my $recipient, $message) = ($message =~ m/(@\S+)? (.+)/s);
if($TYPE eq "TelegramBot" && $recipient){
my ($contact) = devspec2array("TYPE=(ROOMMATE|GUEST):FILTER=msgContactPush=.*$recipient.*");
my $sentMsgId = ReadingsVal($NAME, "$contact\_sentMsgId", "");
if($sentMsgId ne ""){
fhem("set $NAME queryEditInline $sentMsgId $recipient $message");
}
else{
fhem("set $NAME queryInline $recipient $message");
}
}
else{
fhem("set $EVENT");
}
}
Hmm, bin grad nicht allzutief in dem Thema drin. Falls da eine Frage versteckt war, ob man was bestimmtes an msgDialog ändern kann: Bitte deutlicher schreiben :) ...
Ja dann frag ich mal @Alle: Geht bei euch noch das Inline-Keyboard?
Zitat von: binford6000 am 25 Januar 2023, 17:02:25
Ja dann frag ich mal @Alle: Geht bei euch noch das Inline-Keyboard?
Ja inline keyboards gehen bei mir noch ohne Probleme.
Da ich msgDialog nicht kenne kann ich wenig dazu sagen, was hier passiert. Auch den Hinweis auf Zeile 2325 im Telegrambot-Modul verstehe ich nicht, hier wird ja nur eine Fehlermeldung vom Telegramserver zurückgegeben.
Ich kannte diese Meldung bisher nicht, aber sie deutet doch recht klar auf das Problem hin: "Es wird wohl eine Message verändert, die von Telegram abgelehnt wird, da sie keine Veränderung darstellt". Zumindest ist das mein Verständnis und so ähnliches liefert auch Google zurück:
https://core.telegram.org/method/messages.editMessage (https://core.telegram.org/method/messages.editMessage)
Also wäre es gut zu wissen/protokollieren, welche Nachrichten versendet wurden. Wenn sich dann rausstellt, dass eine Nachricht mit exakt demselben Inhalt als "edit" versucht wird zu verändern - Erklärung gefunden.
Im Prinzip wäre es dann wohl am besten beim Aufruf zu verhindern, dass eine unveränderte Nachricht per editMsg verändert wird
Zitat von: viegener am 25 Januar 2023, 23:43:39
Ja inline keyboards gehen bei mir noch ohne Probleme.
Habe das via Favoriten vorhin auch ausprobiert und hatte auch bei wiederholtem Aufruf des da hinterlegten Menüs keine Probleme.
Zitat
Da ich msgDialog nicht kenne kann ich wenig dazu sagen, was hier passiert. Auch den Hinweis auf Zeile 2325 im Telegrambot-Modul verstehe ich nicht, hier wird ja nur eine Fehlermeldung vom Telegramserver zurückgegeben.
msgDialog verwendet intern den "msg"-Befehl und kann darüber mit ROOMMATES vorstrukturierte Dialoge führen. Anders gesagt: es hat nur lose was mit TelegramBot zu tun, das ist halt vermutlich nur die am häufigsten anzutreffende Gegenstelle... Der Hinweis war nur so gemeint, dass das die Stelle ist, die den Logeintrag erzeugt.
Zitat
Ich kannte diese Meldung bisher nicht, aber sie deutet doch recht klar auf das Problem hin: "Es wird wohl eine Message verändert, die von Telegram abgelehnt wird, da sie keine Veränderung darstellt". Zumindest ist das mein Verständnis und so ähnliches liefert auch Google zurück:
https://core.telegram.org/method/messages.editMessage (https://core.telegram.org/method/messages.editMessage)
Danke für die Fundstelle, so ähnlich hätte ich das auch interpretiert.
Zitat
Also wäre es gut zu wissen/protokollieren, welche Nachrichten versendet wurden. Wenn sich dann rausstellt, dass eine Nachricht mit exakt demselben Inhalt als "edit" versucht wird zu verändern - Erklärung gefunden.
Im Prinzip wäre es dann wohl am besten beim Aufruf zu verhindern, dass eine unveränderte Nachricht per editMsg verändert wird
Das Problem scheint also das queryEditInline im cmdAlias zu sein. An der Stelle müßte man sich merken, wer grade welche Fassung des Inline-Keyboards hat, oder? Und dann ggf. eine andere Funktion aufzurufen, um das Inline-Keyboard anzuzeigen?
ZitatDas Problem scheint also das queryEditInline im cmdAlias zu sein.
Ja genau. Mit queryInline werden die Dialoge ja wenigstens als Text ausgeliefert.
ZitatAn der Stelle müsste man sich merken, wer grade welche Fassung des Inline-Keyboards hat, oder?
Sollte das nicht das notify "sentMsgIdByPeerId.n" erledigen?
.+:sentMsgId.+ {
return unless($TYPE eq "TelegramBot");
my $dev_hash = $defs{$NAME};
my $sentMsgId = ReadingsVal($NAME,"sentMsgId","");
my $sentMsgPeerId = ReadingsVal($NAME,"sentMsgPeerId","");
my $contact = devspec2array("TYPE=(ROOMMATE):FILTER=msgContactPush=.*$sentMsgPeerId.*");
readingsSingleUpdate($dev_hash,"$contact\_sentMsgId",$sentMsgId,1);
}
Es sollte die sentMsgId per Peer in <peerId>_<msgId> im TelegramBot speichern.
Macht es bei mir aber nicht. Das Reading bleibt unangetastet obwohl das notify auslöst.
sentMsgId wird nur gesetzt wenn ich normal was sende, nicht aber wenn ein Dialog sendet.
Hmm, die Notation von diesem notify ist aber auch komisch. devspec2array() liefert - Überraschung - ein array zurück; das wird aber in deinem Code gar nicht und im Wiki anders berücksichtigt. Versuch mal das, das sollte sauberer sein:
.+:sentMsgId.+ {
return if $TYPE ne 'TelegramBot';
my $sentMsgId = ReadingsVal($NAME,'sentMsgId','');
my $sentMsgPeerId = ReadingsVal($NAME,'sentMsgPeerId','');
my $contact = shift devspec2array("TYPE=(ROOMMATE):FILTER=msgContactPush=.*$sentMsgPeerId.*") // return;
readingsSingleUpdate($defs{$NAME},"$contact\_sentMsgId",$sentMsgId,1);
return;
}
Experimental shift on scalar is now forbidden at (eval 12656) line 5, near ") //"
Computer sagt nein ::) :o
..dann halt vielleicht so:
my $contact = (devspec2array("TYPE=(ROOMMATE):FILTER=msgContactPush=.*$sentMsgPeerId.*"))[0] // return;
Danke Beta-User, damit funktioniert es wieder!
Thx, hab's im Wiki auch angepaßt, bitte kurz drüberschauen ;) .
Leider zu früh gefreut :-\
Heute erscheint der Fehler erneut:
- sentMsgId wird nicht gesetzt
- Callback returned error :Bad Request: message is not modified: specified new message content and reply markup are exactly the same as a current content and reply markup of the message:
Merkwürdig dass das Ändern des notifys kurzzeitig für Abhilfe gesorgt hat...
Habe auch mal versucht den Bot neu zu starten - aber auch ohne Erfolg.
Zitat von: GammaTwin am 22 Januar 2023, 08:19:38
Grüße,
mir ist etwas unschönes passiert - aber auch interessant :)
Folgendes ist passiert:
- Der Telegram-Bot war in einem Menu, in dem sich Dinge schalten lassen - z.B Licht. Dort sind mehrere Lampen.
- Gleichzeitig war FHEM down
- Ich habe Licht geschalten, erst eins, dann ein weiteres. Passiert ist natürlich nicht. Die zu sendenden Texte standen aber da (logisch)
- Als ich FHEM wieder gestartet habe, wurden die Befehle abgearbeitet - Lichter gehen an :)
Das ist aber unschön. Wenn dies bei der Haustür passiert. Öffnung nach Stunden, vielleicht niemand da :o
Daher meine Frage: kann ich in FHEM erkennen, wann die Nachricht in Telegram gesendet wurde? Ich habe kein Reading gefunden.
Grüße,
ich wollte nochmal fragen, ob irgendwer eine Idee hat.
Zitat von: GammaTwin am 05 Februar 2023, 14:08:35
Grüße,
ich wollte nochmal fragen, ob irgendwer eine Idee hat.
Schau mal hier...
https://forum.fhem.de/index.php/topic,38328.msg1263792.html#msg1263792 (https://forum.fhem.de/index.php/topic,38328.msg1263792.html#msg1263792)