50_SSChatBot - Integration des Synology Chat Servers

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

Vorheriges Thema - Nächstes Thema

Laffer72

Hallo Heiko,

tolles Modul, funktioniert sehr gut und ist einfach einzurichten.

Lassen sich damit eigentlich auch plots verschicken? Ich habe das in Telegram genutzt um mir Temperatur-Verläufe schicken zu lassen.
Dabei habe ich immer die Funktion {plotAsPng()} verwendet.

Danke schonmal für die Antwort.

Reinhard
Raspberry Pi Rev.B, FB7390 (FHEM2FHEM), Sonos, Smarter Coffee
Osram Lightify:2m LED-Streifen, 5m-LED-Streifen, Gartenspot, Surface 28W, Classic E14,E27, Classic RGBW E27, PAR16 GU10, Plug
CUL868:FS20-ST, FS20-DI, FS20-FMS, FS20-ES1
HMUSB:HM-Sec-RHS,HM-Sec-MDIR2
Jeelink868:TX-29-IT, TFA30.315

DS_Starter

Hallo Reinhard,

Synology hat es bisher so implementiert, dass man einen Link zu einer Datei/Bild angeben kann. Diese Datei/Biild wird dann vom Chat-Server an den User gesendet. D.h. die Datei muß vom Chat-Server auf der Syno per http Webseitenaufruf zugreifbar sein.

Zum Beispiel sendet dieser Aufruf:

text="Perl Buch" fileUrl="https://images-na.ssl-images-amazon.com/images/I/51ysOJaF3WL._SX301_BO1,204,203,200_.jpg"

das Cover eines Buches an den Empfänger.

Man müsste also dafür sorgen, dass die durch plotAsPng() enstandenene Datei per Link erreichbar ist.
Ich muß mal überlegen ob/wie das möglich wäre. Hatte mir bis jetzt dazu keine Gedanken gemacht.
Ideen sind jederzeit willkommen.

LG,
Heiko
ESXi@NUC+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

coolcat

Hallo Reihard,

ich kenne dieses plotAsPng()  nicht und weiss auch nicht, wo es läuft. Man könnte aber entweder in das plotAsPng() - Script ein ssh Befehl zum kopieren der fertiggestellten Bilddatei anfügen, das dieses Bild auf die Diskstation kopiert. Wenn keine Historie der Bilder gewünscht wird, kann es immer den gleichen Namen haben und sich selbst überschreiben.

Gruß
Ralf

Laffer72

Hallo,

das hab ich mir auch überlegt. Hab da mal ein Code-Schnipsel von Betateilchen gefunden:

sub test {
open(my $out, '>:raw', './log/test.png') or die "Unable to open: $!";
print $out plotAsPng('SVG_dbLog_2');
close($out);
}


Das soll die erzeugte Grafik speichern. Muss das mal nachher in Ruhe ausprobieren, ob das klappt.

Vielen Dank schonmal für die Hinweise.


Reinhard
Raspberry Pi Rev.B, FB7390 (FHEM2FHEM), Sonos, Smarter Coffee
Osram Lightify:2m LED-Streifen, 5m-LED-Streifen, Gartenspot, Surface 28W, Classic E14,E27, Classic RGBW E27, PAR16 GU10, Plug
CUL868:FS20-ST, FS20-DI, FS20-FMS, FS20-ES1
HMUSB:HM-Sec-RHS,HM-Sec-MDIR2
Jeelink868:TX-29-IT, TFA30.315

DS_Starter

Ich denke auch mal ein bisschen drüber nach.

Aber Reinhard, das die in dem Code

open(my $out, '>:raw', './log/test.png') or die "Unable to open: $!";

unbedingt  nicht verwenden. Damit schießt du die u.U. dein FHEM ab.
An der Stelle lieber eine Logausgabe und return.

Grüße,
Heiko
ESXi@NUC+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

Laffer72

Hab jetzt mal eine Funktion in die 99myutils angefügt:

sub PNGFile
{
my $FileName = shift;
my $Plot = shift;

open FILE, "> /tmp/$FileName";
binmode FILE;
print FILE $Plot;
close FILE;
}


mit dem Aufruf


{PNGFile("Dateiname.png",plotAsPng("<Name des Plots>"))]

wird eine PNG-Datei ins tmp-Verzeichnis geschrieben.
Jetzt muss ich die nur noch irgendwie als URL aufrufbar machen...???
Raspberry Pi Rev.B, FB7390 (FHEM2FHEM), Sonos, Smarter Coffee
Osram Lightify:2m LED-Streifen, 5m-LED-Streifen, Gartenspot, Surface 28W, Classic E14,E27, Classic RGBW E27, PAR16 GU10, Plug
CUL868:FS20-ST, FS20-DI, FS20-FMS, FS20-ES1
HMUSB:HM-Sec-RHS,HM-Sec-MDIR2
Jeelink868:TX-29-IT, TFA30.315

DS_Starter

Das ist doch schon nicht schlecht
Schau dir mal das Modul https://fhem.de/commandref.html#HTTPSRV  an. Damit kannst du eine FHEMWEB-Instanz auf ein bestimmtes Verzeichnis zeigen lassen und die darin befindlichen Dateien aufrufen.

Ich hab das mal zur Anzeige von Kameraaufnahmen hier beschrieben: https://wiki.fhem.de/wiki/SSCAM_-_Steuerung_von_Kameras_in_Synology_Surveillance_Station#Nutzung_des_FHEM-internen_HTTPSRV_Plug-In
ESXi@NUC+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

Laffer72

Also im Prinzip funktioniert es schon mit dem Aufruf:

fileUrl = "<ip-fhem>:8083/fhem/www/images/<Dateiname>

klappt der Aufruf (die Datei muss natürlich dann nicht im tmp-Verzeichnis, sondern im images-Verzeichnis erzeugt werden)

Leider funktioniert das aber nicht so schön wie in Telegram, da sehe ich gleich im Chat eingebettet das Bild.
Hier muss ich erst noch den Link anklicken. Schade
Raspberry Pi Rev.B, FB7390 (FHEM2FHEM), Sonos, Smarter Coffee
Osram Lightify:2m LED-Streifen, 5m-LED-Streifen, Gartenspot, Surface 28W, Classic E14,E27, Classic RGBW E27, PAR16 GU10, Plug
CUL868:FS20-ST, FS20-DI, FS20-FMS, FS20-ES1
HMUSB:HM-Sec-RHS,HM-Sec-MDIR2
Jeelink868:TX-29-IT, TFA30.315

DS_Starter

#38
Habe es gerade mal bei mir probiert.
Klappt einwandfrei und das Bild wird gleich dargestellt.
Der Aufruf war:

text="Bild" fileUrl="http://User:Passwort@<IP>:8083/fhem/www/images/Carport-20200522-1147234626.jpg"

Im Anhang siehst du ...
ESXi@NUC+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

Laffer72

Yepp, danke jetzt klappts bei mir auch...der Fehler sitzt doch meist vor dem Computer  ;)

ich habe text und fileUrl immer auf zwei Zeilen aufgeteilt. In einer Zeile funktioniert es so wie es soll.

Vielen Dank für Deine Hilfe und Deine Geduld.

Schönen Abend noch

Reinhard
Raspberry Pi Rev.B, FB7390 (FHEM2FHEM), Sonos, Smarter Coffee
Osram Lightify:2m LED-Streifen, 5m-LED-Streifen, Gartenspot, Surface 28W, Classic E14,E27, Classic RGBW E27, PAR16 GU10, Plug
CUL868:FS20-ST, FS20-DI, FS20-FMS, FS20-ES1
HMUSB:HM-Sec-RHS,HM-Sec-MDIR2
Jeelink868:TX-29-IT, TFA30.315

DS_Starter

Das klappt auch mit Verteilung über mehrere Zeilen.
Wichtig ist nur "fileUrl="http.." und nicht "fileUrl = "http..."

Dir auch schönen Abend !

Grüße,
Heiko
ESXi@NUC+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

Aber deine Vorgehensweise werde ich mal im Wiki zu SSChatBot hinterlegen.

LG
ESXi@NUC+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

Laffer72

Hallo Heiko,

habe die Sub nochmal etwas optimiert:

sub PNGFile
{
my $FileName = shift;
my $Plot = shift;

open FILE, "> /opt/fhem/www/images/$FileName";
        binmode FILE;
        print FILE plotAsPng($Plot);
        close FILE;

        return;
}


Aufruf der Sub erfolgt mit:

{PNGFile("<Name-des-PNG-Files>.png","<Name-des-SVG-Plots>")}
[/code]

So jetzt geht's dann ins Bett...gute Nacht

Reinhard
Raspberry Pi Rev.B, FB7390 (FHEM2FHEM), Sonos, Smarter Coffee
Osram Lightify:2m LED-Streifen, 5m-LED-Streifen, Gartenspot, Surface 28W, Classic E14,E27, Classic RGBW E27, PAR16 GU10, Plug
CUL868:FS20-ST, FS20-DI, FS20-FMS, FS20-ES1
HMUSB:HM-Sec-RHS,HM-Sec-MDIR2
Jeelink868:TX-29-IT, TFA30.315

DS_Starter

#43
Hallo Reinhard,

ich habe noch eine Variante gefunden mit der man unter Verwendung des  WEBSSChatBot-Devices das Plotfile hochladen kann.
Dieses Device wird ja bei der Definition des ChatBots mit angelegt und ist gleich mit einem CSRF-Token geschützt.

Dein Script habe ich noch geringfügig angepasst:


####################################################################################
#       Ausgabe der SVG-Funktion "plotAsPng" in eine Datei schreiben
#       Die Datei wird im Verzeichnis "/opt/fhem/www/images" erstellt
#
#       Aufruf mit: {PlotToFile('<Filename>.png','<Name-SVG-Device>')}
#
####################################################################################
sub PlotToFile {
    my $file = shift;
    my $plot = shift;
    my $dir  = "/opt/fhem/www/images";

    open FILE, "> $dir/$file" or do {
                                                   Log (1, ">PlotToFile< can't open $dir/$file for write access !");
                                                   return;
                                                 };
    binmode FILE;
    print FILE plotAsPng($plot);
    close FILE;

return;
}


Das folgende Notify versendet des erstellte Plotfile wenn der Event ".... user sendPng <SVG-Device>" auftritt:


user:sendPng.*
{
  my $server = "xxx.xxx.xxx.xxx:8086/sschat";   # <IP>:<Port> des WEBSSChatBot-Devices (Internal FW des SSChatBot)
  my $file   = "PlotToChat.png";                  # Filename
  my $path   = "www/images";                      # Pfad
  my $csrf   = "xxxxxxx";                        # CSRF-Token des WEBSSChatBot-Devices (Internal CSRFTOKEN)
  my $prot   = "http";
  PlotToFile($file, $EVTPART1);
  CommandSet (undef, "SynChatBot asyncSendItem text=\"aktueller Plot $EVTPART1\" fileUrl=\"$prot://$server/$path/$file?%26fwcsrf=$csrf\" ");
}
}


Das Regex user:sendPng.*  muss natürlich angepasst werden.

LG,
Heiko
ESXi@NUC+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

Das Versenden eines Plotfiles ist jetzt im Wiki beschrieben.
Wenn ich dazu komme, werde ich dem Modul einen integrierten Befehl spendieren mit dem das Versenden einfach und bequem durchgeührt werden kann.

Grüße,
Heiko
ESXi@NUC+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