50_SSChatBot - Integration des Synology Chat Servers

Begonnen von DS_Starter, 25 November 2019, 07:56:56

Vorheriges Thema - Nächstes Thema

DS_Starter

Ah, ok. Dann macht es sicherlich Sinn im HueBridge Forum mal nachzufragen.
Ich schaue mir auch dies und das nochmal an. Vielleicht kann ich auch im Modul noch etwas tun um solche Fälle zu behandeln.
Derartige Sonderzeichen sind imme runschön aber eben nicht auszuschließen.
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

DS_Starter

Hallo carlos,

ich glaube ich konnte das Characterproblem mit Å zentral im Modul lösen.
Teste mal bitte die Version aus meinem contrib.

Zum Download in der FHEMWEB Kommandozeile inklusive der Ausführungszeichen angeben und danach FHEM restarten:


"wget -qO ./FHEM/50_SSChatBot.pm https://svn.fhem.de/fhem/trunk/fhem/contrib/DS_Starter/50_SSChatBot.pm"
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

carlos

Funktioniert leider immer noch nicht:

2020.10.07 22:56:24 4: mySSChatBot - ####################################################
2020.10.07 22:56:24 4: mySSChatBot - ###          start Chat operation Receive
2020.10.07 22:56:24 4: mySSChatBot - ####################################################
2020.10.07 22:56:24 5: mySSChatBot - raw data received (urlDecoded):
$VAR1 = 'botname="mySSChatBot" fwcsrf="5f703ed4" token="xxx" text="/get myDeconz sensors" user_id="4" username="yyy"';

2020.10.07 22:56:24 4: mySSChatBot - received data decoded:
$VAR1 = {
          'botname' => 'mySSChatBot',
          'fwcsrf' => '5f703ed4',
          'text' => '/get myDeconz sensors',
          'token' => 'S5XlO9J599EDZJXOpscTnJpMRlsVnU2YfI09WRKouWQXYWnJAW4afxrVaGulHtgR',
          'user_id' => '4',
          'username' => 'yyy'
        };

2020.10.07 22:56:24 4: mySSChatBot - Synology Chat user "yyy" execute FHEM command: get myDeconz sensors
2020.10.07 22:56:24 4: mySSChatBot - FHEM command return: ID  NAME            FHEM            TYPE
1: Daylight                        Daylight
2: Transmitter 2-gang deconz.FB.2gang ZHASwitch
3: TRÅDFRI remote control deconz.Ikea.FB.E1810 ZHASwitch
4: Bewegungsmelder deconz.pir      ZHAPresence
5: Bewegungsmelder deconz.temp     ZHATemperature
6: Bewegungsmelder deconz.light    ZHALightLevel
9: TRADFRI on/off switch  deconz.Ikea.FB.E1743 ZHASwitch
10: BMEingang       deconz.pir1     ZHAPresence
11: BMEingang       deconz.temp1    ZHATemperature
12: BMEingang       deconz.light1   ZHALightLevel
13: TRÅDFRI Motion sensor deconz.ikea.pir ZHAPresence
14: TRÅDFRI Motion sensor (2) deconz.ikea.pir2 ZHAPresence
15: Rollo Schalter SZ deconz.rollo.remote ZHASwitch
16: FYRTUR block-out roller blind  deconz.rollo1.bat ZHABattery
17: FYRTUR block-out roller blind  deconz.rollo2.bat ZHABattery

2020.10.07 22:56:24 5: mySSChatBot - Add Item to queue - Index 11:
$VAR1 = {
          'attachment' => '',
          'channel' => '',
          'fileUrl' => '',
          'method' => 'chatbot',
          'opmode' => 'sendItem',
          'retryCount' => 0,
          'text' => "ID NAME FHEM TYPE \\n 1: Daylight Daylight \\n 2: Transmitter 2-gang deconz.FB.2gang ZHASwitch \\n 3: TR\x{c3} DFRI remote control deconz.Ikea.FB.E1810 ZHASwitch \\n 4: Bewegungsmelder deconz.pir ZHAPresence \\n 5: Bewegungsmelder deconz.temp ZHATemperature \\n 6: Bewegungsmelder deconz.light ZHALightLevel \\n 9: TRADFRI on/off switch deconz.Ikea.FB.E1743 ZHASwitch \\n10: BMEingang deconz.pir1 ZHAPresence \\n11: BMEingang deconz.temp1 ZHATemperature \\n12: BMEingang deconz.light1 ZHALightLevel \\n13: TR\x{c3} DFRI Motion sensor deconz.ikea.pir ZHAPresence \\n14: TR\x{c3} DFRI Motion sensor (2) deconz.ikea.pir2 ZHAPresence \\n15: Rollo Schalter SZ deconz.rollo.remote ZHASwitch \\n16: FYRTUR block-out roller blind deconz.rollo1.bat ZHABattery \\n17: FYRTUR block-out roller blind deconz.rollo2.bat ZHABattery \\n",
          'userid' => '4'
        };

2020.10.07 22:56:25 4: mySSChatBot - ####################################################
2020.10.07 22:56:25 4: mySSChatBot - ###         start Chat operation sendItem
2020.10.07 22:56:25 4: mySSChatBot - ####################################################
2020.10.07 22:56:25 4: mySSChatBot - API hashvalues already set - ignore get apisites
2020.10.07 22:56:25 4: mySSChatBot - botToken read from RAM: ********
2020.10.07 22:56:25 4: mySSChatBot - start SendQueue entry index "11" (sendItem) for operation.
2020.10.07 22:56:25 5: mySSChatBot - HTTP-Call will be done with httptimeout: 20 s
2020.10.07 22:56:25 4: mySSChatBot - Call-Out: http://192.168.178.9:5000/webapi/entry.cgi?api=SYNO.Chat.External&version=2&method=chatbot&token="<secret>"&payload={"text": "ID NAME FHEM TYPE \n 1: Daylight Daylight \n 2: Transmitter 2-gang deconz.FB.2gang ZHASwitch \n 3: TR▒ DFRI remote control deconz.Ikea.FB.E1810 ZHASwitch \n 4: Bewegungsmelder deconz.pir ZHAPresence \n 5: Bewegungsmelder deconz.temp ZHATemperature \n 6: Bewegungsmelder deconz.light ZHALightLevel \n 9: TRADFRI on/off switch deconz.Ikea.FB.E1743 ZHASwitch \n10: BMEingang deconz.pir1 ZHAPresence \n11: BMEingang deconz.temp1 ZHATemperature \n12: BMEingang deconz.light1 ZHALightLevel \n13: TR▒ DFRI Motion sensor deconz.ikea.pir ZHAPresence \n14: TR▒ DFRI Motion sensor (2) deconz.ikea.pir2 ZHAPresence \n15: Rollo Schalter SZ deconz.rollo.remote ZHASwitch \n16: FYRTUR block-out roller blind deconz.rollo1.bat ZHABattery \n17: FYRTUR block-out roller blind deconz.rollo2.bat ZHABattery \n","user_ids": [4]}
2020.10.07 22:56:25 5: mySSChatBot - JSON returned: $VAR1 = {
          'data' => {
                      'fail' => {
                                  'user_ids' => [
                                                  4
                                                ]
                                },
                      'succ' => undef
                    },
          'success' => bless( do{\(my $o = 1)}, 'JSON::PP::Boolean' )
        };

2020.10.07 22:56:25 4: mySSChatBot - Opmode "sendItem" finished successfully, Sendqueue index "11" deleted.
2


Lösche ich das erste "3: TR\x{c3} DFRI" raus geht es mit dem Rest.
Ich versteh's nicht.
FHEM svn auf Intel NUC mit proxmox, 3 Raspberry Pi, signalduino, nanoCUL,  toom Baumarkt Funksteckdosen, einige sonoffs, hue, shelly

DS_Starter

ZitatLösche ich das erste "3: TR\x{c3} DFRI" raus geht es mit dem Rest.
Ich versteh's nicht.
Das Leerzeichen muß keines sein, vllt. nur ein nicht druckbares Zeichen was man halt nicht sieht.
Ja das ist wirklich nicht so einfach.
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

DS_Starter

Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

DS_Starter

Wenn du das mit einem einfachen Send Kommando ausführst:


set <> asyncSendItem text="ID NAME FHEM TYPE \n 1: Daylight Daylight \n 2: Transmitter 2-gang deconz.FB.2gang ZHASwitch \n 3: TR\x{c3}\x{85}DFRI remote control deconz.Ikea.FB.E1810 ZHASwitch \n 4: Bewegungsmelder deconz.pir ZHAPresence \n 5: Bewegungsmelder deconz.temp ZHATemperature \n 6: Bewegungsmelder deconz.light ZHALightLevel \n 9: TRADFRI on/off switch deconz.Ikea.FB.E1743 ZHASwitch \n10: BMEingang deconz.pir1 ZHAPresence \n11: BMEingang deconz.temp1 ZHATemperature \n12: BMEingang deconz.light1 ZHALightLevel \n13: TR\x{c3}\x{85}DFRI Motion sensor deconz.ikea.pir ZHAPresence \n14: TR\x{c3}\x{85}DFRI Motion sensor (2) deconz.ikea.pir2 ZHAPresence \n15: Rollo Schalter SZ deconz.rollo.remote ZHASwitch \n16: FYRTUR block-out roller blind deconz.rollo1.bat ZHABattery \n17: FYRTUR block-out roller blind deconz.rollo2.bat ZHABattery \n"


kommt alles an wie es soll:


2020.10.08 00:05:47.778 4: SynChatBot - ####################################################
2020.10.08 00:05:47.778 4: SynChatBot - ###         start Chat operation sendItem   
2020.10.08 00:05:47.779 4: SynChatBot - ####################################################
2020.10.08 00:05:47.779 4: SynChatBot - API hashvalues already set - ignore get apisites
2020.10.08 00:05:47.780 4: SynChatBot - botToken read from RAM: ********
2020.10.08 00:05:47.780 4: SynChatBot - start SendQueue entry index "87" (sendItem) for operation.
2020.10.08 00:05:47.781 5: SynChatBot - HTTP-Call will be done with httptimeout: 10 s
2020.10.08 00:05:47.781 4: SynChatBot - Call-Out: https://192.168.2.10:5001/webapi/entry.cgi?api=SYNO.Chat.External&version=2&method=chatbot&token="<secret>"&payload={"text": "ID NAME FHEM TYPE \n 1: Daylight Daylight \n 2: Transmitter 2-gang deconz.FB.2gang ZHASwitch \n 3: TR%C3%85DFRI remote control deconz.Ikea.FB.E1810 ZHASwitch \n 4: Bewegungsmelder deconz.pir ZHAPresence \n 5: Bewegungsmelder deconz.temp ZHATemperature \n 6: Bewegungsmelder deconz.light ZHALightLevel \n 9: TRADFRI on/off switch deconz.Ikea.FB.E1743 ZHASwitch \n10: BMEingang deconz.pir1 ZHAPresence \n11: BMEingang deconz.temp1 ZHATemperature \n12: BMEingang deconz.light1 ZHALightLevel \n13: TR%C3%85DFRI Motion sensor deconz.ikea.pir ZHAPresence \n14: TR%C3%85DFRI Motion sensor (2) deconz.ikea.pir2 ZHAPresence \n15: Rollo Schalter SZ deconz.rollo.remote ZHASwitch \n16: FYRTUR block-out roller blind deconz.rollo1.bat ZHABattery \n17: FYRTUR block-out roller blind deconz.rollo2.bat ZHABattery \n","user_ids": [4]}
2020.10.08 00:05:47.915 5: SynChatBot - JSON returned: {
  'success' => bless( do{\(my $o = 1)}, 'JSON::PP::Boolean' ),
  'data' => {
              'succ' => {
                          'user_id_post_map' => {
                                                  '4' => '34359740251'
                                                }
                        },
              'fail' => undef
            }
}

2020.10.08 00:05:47.943 4: SynChatBot - Opmode "sendItem" finished successfully, Sendqueue index "87" deleted.
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

carlos

Nein, funktioniert leider immer noch nicht.
Das Ganze ist aber nicht richtig Ziel führen.
Das sollte auch nicht unbedingt in deinem Modul als workaround eingebaut werden.
Etwas ist mir da auch noch unklar. Du machst doch hier sicher einen synology api call, oder?
Warum hat der eigentlich da Probleme mit den Sonderzeichen?
Sollte doch einfach nur das Ergebnis im chat anzeigen.
Evtl. ist da dann doch ein Bug im API call.

Für mich war das eigentlich auch nur Test für dein Modul.
Ich habe jetzt einfach mal aus Å ein A gemacht, dann funktioniert das ja auch.
Also einfach in der Phoscon app die Sensoren ohne Sonderzeichen benennen.

Gruß
Carlos
FHEM svn auf Intel NUC mit proxmox, 3 Raspberry Pi, signalduino, nanoCUL,  toom Baumarkt Funksteckdosen, einige sonoffs, hue, shelly

DS_Starter

#97
Zitat
Etwas ist mir da auch noch unklar. Du machst doch hier sicher einen synology api call, oder?
Ja, das stimmt schon. Aber der Call muß einen vorgegebenen Aufbau einhalten und vor allem müssen die übermittelten Zeichen urlEncoded sein. Und speziell das Zeichen Å hat den Code \x{c3}\x{85} und wird dann zu %C3%85. Dieser Code wird vom Chat auch sauber als Å wiedergegeben.
Wenn das Encoding aber nicht sauber gemacht werden kann, aus welchen Gründen auch immer ... dann kann es Probleme geben.
Auf jeden Fall wird ein  Å  jetzt auch so dargestellt.  :)

Aber ganz allgemein können Sonderzeichen irgendwo immer Probleme verursachen weil sie meist nicht so einfach zu handhaben sind wie einfache Zeichen.
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

DS_Starter

Ich habe die Verarbeitung von Sonderzeichen noch komplettiert. Es werden nun auch solche Codes wie z.B. für Á, Â, Ã oder æ, ë, µ übertragen. Das Update ist seit heute früh in der Verteilung.

Grüße,
Heiko
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

TL60

Hallo, wie hier https://forum.fhem.de/index.php/topic,115371.msg1097112.html#msg1097112schon angedroht ;) habe ich mir den SSChatBot gemäß Wiki installiert. Ich kann dem Bot und der Bot mir Nachrichten schicken. Außerdem kann ich über einen Slash Befehl /get YiCam1 image meine Webcam veranlassen Bilder zu machen. Nicht schlecht für den Anfang. Ich wollte dann einen Schritt weitergehen und die Bilder mithilfe des Befehls /set SynFile Upload "/opt/fhem/www/snapshots" dest=/ShareFHEM/Cam2/%Y_%m_%d_%H_%M_ struc=false auf mein Synology Nas speichern. Das funktioniert nicht. Wie ich jetzt weiß,  weil in dem Code Leerzeichen sind. Es gibt auch keine Möglichkeit die zu maskieren o.ähnliches? Bei dieser Aktion ist mir aber noch etwas aufgefallen: Gemäß Wiki trage ich bei /get und /set Slash Befehlen
ZitatAnfrage-URL : hier wird wieder der Inhalt des Internals OUTDEF hineinkopiert
das Internal OUTDEF, welches auch den CSTFToken enthält, ein. Kann es sein das sich dieses Token bei einem Neustart von FHEM ändert und ich die Anfrage-URL ändern muß ?
Gruß
Thomas
PS: Morgen werde ich mal schauen, ob ich mit der Bewegungserkennung der Kamera notifys bzw. DOIFs triggern kann, welche Bilder machen, diese über SSFile auf meiner Diskstation sichern und mich über den Chatbot benachrichtigen.

DS_Starter

#100
Hi,

Zitat
Ich wollte dann einen Schritt weitergehen und die Bilder mithilfe des Befehls
Code: [Auswählen]

/set SynFile Upload "/opt/fhem/www/snapshots" dest=/ShareFHEM/Cam2/%Y_%m_%d_%H_%M_ struc=false

auf mein Synology Nas speichern. Das funktioniert nicht.

Habe es getestet, so funktioniert es:


/set SynFile Upload /opt/fhem/www/snapshots/*.* dest=/ShareFHEM/Cam2/%Y_%m_%d_%H_%M struc=false


sofern "/opt/fhem/www/snapshots" ein Verzeichnis ist.

Zitat
Kann es sein das sich dieses Token bei einem Neustart von FHEM ändert und ich die Anfrage-URL ändern muß ?
Nein, in dem automatisch angelegten FHEMWEB Device für den Chat (WEBSSChatBot) ist das Token mit dem Attribut csrfToken fest eingestellt.

Grüße,
Heiko 

Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

TL60

Moin,
bezüglich CSRF Token, denke ich mittlerweile das es sich um meinen Fehler bei der Erstellung eines 2 Bots handelte, der natürlich eine neue Webinstanz und somit auch einen neuenToken bekommt. Wenn man dann noch ohne nachdenken Copyy und Paste macht kann das schiefgehen.
ZitatHabe es getestet, so funktioniert es:

Code: [Auswählen]

/set SynFile Upload /opt/fhem/www/snapshots/*.* dest=/ShareFHEM/Cam2/%Y_%m_%d_%H_%M struc=false


sofern "/opt/fhem/www/snapshots" ein Verzeichnis ist.
Danke für das Codebeispiel. Funktioniert. Es funktioniert aber auch folgendes (gerade getestet) /set SynFile Upload /opt/fhem/www/snapshots dest=/ShareFHEM/Cam5/%Y_%m_%d_%H_%M struc=false Botantwort:
Zitatcommand 'set SynFile Upload /opt/fhem/www/snapshots dest=/ShareFHEM/Cam5/%Y_%m_%d_%H_%M struc=false' executed
Erwartungsgemäß entsteht enie Ordnerstruktur: /ShareFHEM/Cam/Datum-Uhrzeit/ mit allen Dateien aus dem Ursprungsverzeichnis  Mein Fehler war das ich Anführungszeichen benutzt habe, denke ich wenigstens. Das ganze ist schon ziemlich cool und wird vielleicht ein Schritt weg vom Telegrambot, mal sehen.
auf jeden Fall Danke für deine Unterstüzung
Gruß Thomas
PS Ich werde mal weitere Schritte probieren  :)

DS_Starter

#102
Hallo Thomas,

Die anführungszeichen hatte ich bei ssfile  als pflicht angegeben damit auch dateien mit leerzeichen im namen verarbeitet werden. Ist beim chatbot kontraproduktiv. Da werde ich mir noch was einfallen lassen müssen.  ;)
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

DS_Starter

Ich habe es jetzt realisiert, dass man einen Text-Tag an SSChatBot senden kann der selbst quotation Marks (") enthält.

Damit geht nun auch eine solche Upload-Anforderung an SSFile:


/set SynFile Upload "./log/cookies - Haus & Hof mit ä.txt,./log/cookies - Haus & Hof.txt" dest=/home/upload mode=full


Version ist eingecheckt und morgen früh im Update.
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

mobiljoe123

Hallo,
ich bräuchte mal eine kleine Unterstützung.

Bisher habe ich sämtliche Informationen mittels Telegramm ausgegeben.
So langsam baue ich Stück für Stück alles auf SSChat um.

Nun komme ich hier aber leider nicht weiter.

Nach einem Neustart lasse ich mich wie folgt informieren:
defmod notify.msg.fhem_reload notify global:INITIALIZED { fhem "set FHEMstatus msg FHEM Server wurde soeben neu gestartet."}

Stelle ich dies nun um:

defmod notify.msg.fhem_reload notify global:INITIALIZED { fhem "set SynChatBot asyncSendItem FHEM Server wurde soeben neu gestartet."}

kommt keine Nachricht an.

Im log steht:

2020.11.23 11:03:23 3: set SynChatBot asyncSendItem FHEM Server wurde soeben neu gestartet. : The registered Synology Chat users are unknown. Please retrieve them first with "get SynChatBot chatUserlist".
2020.11.23 11:03:23 3: notify.msg.fhem_reload return value: The registered Synology Chat users are unknown. Please retrieve them first with "get SynChatBot chatUserlist".
...
2020.11.23 11:03:26 3: SynChatBot - SSChatBot "SynChatBot" for URL /outchat registered



Lt. Wiki "Der Sendeprozess wird sofort gestartet. War die Übermittlung erfolgreich, wird die Nachricht aus der Queue gelöscht. Anderenfalls verbleibt sie in der Queue und der Sendeprozess wird, in einem von der Anzahl der Fehlversuche abhängigen Zeitintervall, erneut gestartet."

ein
set listSendqueue

zeigt aber
SendQueue is empty.

Was könnte ich tun?
Raspi 2; HM; MAX!; RFXtrx