Hallo zusammen,
Die Übersetzung von Talktofhem zu telegram und zurück läuft bei mir ganz gut, allerdings mit einer Einschränkung: Er findet sämtliche Devices nicht, wenn ich sie über Talktome respektive RiveScript anspreche. Der Direkte Aufruf über das Triggerword (also mit Umgehung von Talktome) funktioniert hingegen:
Telegram-Chat:
Me> Sarah, wie warm ist es in der Küche?
bot> Die Temperatur in der Küche beträgt [ERR: Object Not Found] °C ([ERR: Object Not Found])
Me> *Triggerword* set MAX_Thermostat_Kch desiredTemperature 20
bot> TelegramBot FHEM:
Befehl: set MAX_Thermostat_Kch desiredTemperature 20:
Ergebnis:
OK
List des Bots in Fhem:
Internals:
FAILS 0
NAME SarahSends
NR 377
OLD_POLLING 176
POLLING 176
SNAME SarahSends
STATE Polling
TYPE TelegramBot
UPDATER 0
WAIT 0
me *zensus*:SarahBot:@MessageFromSarahBot
offset_id 7034479
sentLastResult SUCCESS
sentMsgId 219
sentMsgPeer *zensus*
sentMsgPeerId *zensus*
sentMsgResult SUCCESS
sentMsgText TelegramBot FHEM : \n Befehl:set Einkaufsliste addTask Unobtanium:\n Ergebnis:\nOK
Contacts:
232422868 *zensus*:*zensus*:
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: Mon, 01 May 2017 11:30:30 GMT
Content-Type: application/json
Content-Length: 319
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 9
hu_portSfx
loglevel 4
method POST
path /bot249301559:AAEjy_SfGgpFQ4cF1pMPdUo-BjdIVIy9OfY/sendMessage
protocol https
redirects 0
timeout 30
url https://api.telegram.org/bot*zensus*:*zensus*/sendMessage
args:
*zensus*
TelegramBot FHEM : \n Befehl:set Einkaufsliste addTask Unobtanium:\n Ergebnis:\nOK
undef
0
undef
2
Hash:
Sslargs:
Hu_upd_params:
FD 4
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 2215
hu_portSfx
isPolling update
loglevel 4
method GET
offset 7034479
path /bot*zensus*:*zensus*/getUpdates?offset=7034479&limit=5&timeout=120
protocol https
redirects 0
timeout 245
url https://api.telegram.org/bot*zensus*:*zensus*/getUpdates?offset=7034479&limit=5&timeout=120
Hash:
Sslargs:
Readings:
2017-04-13 22:27:17 Contacts *zensus*:*zensus*:
2017-05-01 00:00:46 PollingErrCount 0
2017-04-22 04:09:32 PollingLastError Callback returned no valid JSON: malformed JSON string, neither array, object, number, string or atom, at character offset 0 (before "<html>\r\n<head><tit...") at ./FHEM/50_TelegramBot.pm line 1986.
2017-05-01 13:30:27 StoredCommands *Triggerword* set ITSwitch 6 on
*Triggerword* set ITSwitch_6 on
Mach im Schlafzimmer den Strom an
Schalte im Schlafzimmer den Strom aus
Schalte im schlafzimmer steckdose aus
Setze almigurt auf die einkaufsliste
Mach die Kaffeemaschine an
Packe unobtanium auf die liste
*Triggerword* set Einkaufsliste addTask Unobtanium
2017-05-01 13:30:27 msgChat *zensus*
2017-05-01 13:30:27 msgChatId *zensus*
2017-05-01 13:30:27 msgFileId
2017-05-01 13:30:27 msgId 217
2017-05-01 13:30:27 msgPeer *zensus*
2017-05-01 13:30:27 msgPeerId *zensus*
2017-05-01 13:30:27 msgReplyMsgId
2017-05-01 13:30:27 msgText *Triggerword* set Einkaufsliste addTask Unobtanium
2017-05-01 13:30:27 prevMsgChat *zensus*
2017-05-01 13:30:27 prevMsgFileId
2017-05-01 13:30:27 prevMsgId 214
2017-05-01 13:30:27 prevMsgPeer *zensus*
2017-05-01 13:30:27 prevMsgPeerId *zensus*
2017-05-01 13:30:27 prevMsgReplyMsgId
2017-05-01 13:30:27 prevMsgText *Triggerword* set Einkaufsliste addtask Unobtanium
2017-05-01 13:30:30 sentMsgId 219
2017-05-01 13:30:30 sentMsgPeerId *zensus*
2017-05-01 13:30:30 sentMsgResult SUCCESS
sentQueue:
Attributes:
cmdKeyword *Triggerword*
cmdRestrictedPeer *zensus*
defaultPeer *zensus*
pollingTimeout 120
room xSarah
talktouserModSourceDev %DEVICE%:@%%msgPeerId%%
talktouserMonitorReading msgText
userattr talktouserMonitorReading talktouserModSourceDev
List von Talktofhem:
Internals:
NAME FHEMTALKTOME
NR 380
STATE Reply sent to TALKTOUSER_ME
TYPE TALKTOME
Readings:
2017-05-01 13:30:27 state Reply sent to TALKTOUSER_ME
Attributes:
disable 0
room xSarah,xconf
rsbraindir ./FHEM/rive
List Talktouser_me
Internals:
FHEMTALKTOME_MSGCNT 5
FHEMTALKTOME_TIME 2017-05-01 13:30:27
FHEMTALKTOME_answer Tut mir leid, ich weiß nicht, was du von mir möchtest!
FHEMTALKTOME_answertype REPLY
FHEMTALKTOME_device FHEMTALKTOME
FHEMTALKTOME_modSourceDeviceName @SarahSends:@*zensus*
FHEMTALKTOME_sourceDeviceName SarahSends
IODev FHEMTALKTOME
LASTInputDev FHEMTALKTOME
MSGCNT 5
NAME TALKTOUSER_ME
NR 381
NTFY_ORDER 50-TALKTOUSER_ME
STATE Query sent
TYPE TALKTOUSER
Readings:
2017-05-01 13:30:27 lastprocessedquery *Triggerword* set Einkaufsliste addTask Unobtanium
2017-04-25 19:08:06 lastquery msgText: Hiho
2017-04-25 19:08:06 reply Bitte rede verständlich mit mir, ich hatte noch keinen Kaffee
2017-05-01 13:30:27 state Query sent
Attributes:
IODev FHEMTALKTOME
nomatch Ich konnte leider keine gute Antwort finden!
noreply Ich weiss leider nicht was ich darauf sagen soll!
realname TALKTOUSER_ME
room xSarah,xconf
Das "Tut mir leid, ich weiß nicht was du von mir möchtest" kommt darüber zustande, dass ich über das Triggerword einen direkten Befehl an Fhem gesendet hat - der ist in keiner Rivedatei drin, demnach ist das vollkommen korrekt, dass er diese Antwort bringt.
Ich glaube, ich habe den falschen Filter vor den Augen, ich finde zumindest nirgendwo einen Ansatz dieses Problem zu lösen - reden tun ja alle miteinander, warum also zum Teufel erkennt Talktome die (korrekt benannten) Devices nicht?
Ich darf das noch mal anschieben?
Auch ganz einfache Dummies, also solche, wo nur ein Wert übergeben wird, werden nicht gefunden. Irgendwas muss ich wahrscheinlich in der Talktofhem falsch gesetzt haben, aber ich glaube, ich sehe den Wald vor lauter Bäumen nicht *kopfkratz*
Hat niemamd eine Ahnung? Ich hab auch noch mal geprüft, ob alle Dateien auf OS-Ebene die richtige Berechtigung haben und habe sicherheitshalber noch mal ein
cd /
sudo chown -R fhem:dialout /opt/fhem/*
gemacht, um alle Dateien im Verzeichnis die Berechtigung zu erteilen. Aber auch das ändert nichts, mir gehen echt die Ideen aus, jede Hilfe wäre hochwillkommen ...
Ich habe die Lösung gefunden.
Wenn man Fhem - Calls machen möchte, MUSS die TALKTOME.rive im Verzeichnis ./FHEM liegen. Ich hatte einen eigenen Unterordner angelegt, in den ich die Rive-files hineingelegt habe. Da funktioniert RS zwar einwandfrei, aber so lange die TALKTOME.rive nicht im ./FHEM-Verzeichnis liegt, findet er auch keinerlei Fhem-Devices.
Wenn man also mehr als eine Rive-Datei nutzen möchte, muss alle rive-Dateien ebenfalls direkt im ./FHEM-Verzeichnis ablegen und dieses dann beim attr braindir setzen:
attr FHEMTALKTOME rsbraindir ./FHEM
(set FHEMTALKTOME reload nicht vergessen!)
Ich hoffe, die Lösung war klar genug formuliert, ansonsten lade ich nachfolgende mit dem selben Problem gern ein noch mal nachzufragen :)