Telegram instant messaging TelegramBot - Empfangen und Senden per FHEM

Begonnen von viegener, 20 Juni 2015, 18:59:41

Vorheriges Thema - Nächstes Thema

krutojmax

#2025
Ich habe folgendes gesetzt:
cmdFavorites
cmdKeyword
defaultPeer (die Gruppe, da mit mehreren Personen)
favorites
pollingTimeout
allowUnknownContacts auf 1

und dann habe ich auf der Suche, wie ich die Rückmeldung deaktivieren kann, zusätzlich folgende Attribute gesetzt:
textResponseCommands
textResponseConfirm
textResponseFavorites
textResponseResult

Habe mit 0, 1, Leerzeichen (was nichts bringt) ausprobiert und bin am Ende beim Punkt angekommen, damit es nicht so lang ist.
Allerdings ist es doof, wenn da 2-3 Nachrichten hintereinander kommen.

Tueftler1983

textResponseResult habe ich \n

Die drei habe ich gar nicht

textResponseCommands
textResponseConfirm
textResponseFavorites

krutojmax

Perfekt!
\n hat genau den gewünschten Effekt gebracht.

Vielen Dank.

juppzupp

Hi,

Wenn ich die cmdref richtig verstehe, sollte

set teleBot cmdSendSilent @270815 @270816 { plotAsPng('SVG_logdb_1') }


Funktionieren. Bekomme aber als Rückmeldung


TelegramBot_Set: Command cmdSendSilent, need exactly one peer


Grüße!

Tueftler1983

Du hast zwei Empfänger, da steht doch das es nur einen Empfänger geben darf.

juppzupp


DS_Starter

#2031
Hallo viegener,

ich arbeite gerade daran in meinem SSCam-Modul den Versand von Schnappschüssen integriert anzubieten. Das funktioniert für Email schon sehr gut. Siehe Wiki: https://wiki.fhem.de/wiki/SSCAM_-_Steuerung_von_Kameras_in_Synology_Surveillance_Station#Integrierten_Email-Client_nutzen

Nun möchte ich gerne dein Modul einbinden etwa nach diesem Schema:

* über ein Attribut in SSCam wird festgelegt welches Telegram Device zum Versand verwendet werden soll
* ein oder mehrere Schnappschüsse werden ausgelöst
* alle diese Schnappschüsse werden alle in einer Message zusammengefasst und mit Text versehen per Telegram gesendet

Ich weiß wie man mit Telegram ein File versenden kann. Es muss aber meines Wissens physisch für FHEM zugänglich sein. Und auch nur eins (?) pro Message.
Mit meinem internen Mailclient im SSCam verwende ich aber Memory-Handles weil die Files remote auf der Synology liegen und nicht lokal. Das ist auch ein Vorteil weil man dann keine Mounts benötigt.

Das sieht etwa so aus:

      ### Images liegen in einem Hash (Ref in $sdat) base64-codiert vor und werden dekodiert in ein "in-memory IO" gespeichert (snap)
      my ($ct,$img,$decoded);
      @as = sort{$a<=>$b}keys%{$sdat};
      foreach my $key (@as) {
  $ct      = $sdat->{$key}{createdTm};
  $img     = $sdat->{$key}{imageData};
  $fname   = $sdat->{$key}{fileName};
  $fh      = '$fh'.$key;
  $decoded = MIME::Base64::decode_base64($img);
  my $mh   = '';
  if(open ($fh, '>', \$mh)) {            # in-memory IO Handle
  binmode $fh;
  print $fh $decoded;
  close $fh;
  open ($fh, '<', \$mh);
                 .....


Jetzt suche ich eine Einsprungpunkt in dein Modul um ein solches Konstrukt zum Versand übergeben zu können oder eine andere Möglichkeit.
Hättest du eine Idee ob/wo ich einen Übergabepunkt in deinem Code finden könnte oder hast du Lust mit mir gemeinsam eine solche Möglichkeit zu implementieren ?

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

viegener

Zitat von: juppzupp am 03 Januar 2019, 12:28:52
Richtig. In der commandref steht es aber anders.

Ja - Du hast recht, ist ein Fehler im Code, ich habe bereits eine Korrektur gemacht, ich werde demnächst eine neue Version hochladen in der dann mehrere Peers angegeben werden können. Ist interessanterweise in den letzten 16 Monaten nicht aufgefallen, solange ist der Fehler bereits drin.
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

viegener

Zitat von: DS_Starter am 05 Januar 2019, 13:29:26
...
Nun möchte ich gerne dein Modul einbinden etwa nach diesem Schema:

* über ein Attribut in SSCam wird festgelegt welches Telegram Device zum Versand verwendet werden soll
* ein oder mehrere Schnappschüsse werden ausgelöst
* alle diese Schnappschüsse werden alle in einer Message zusammengefasst und mit Text versehen per Telegram gesendet

Ich weiß wie man mit Telegram ein File versenden kann. Es muss aber meines Wissens physisch für FHEM zugänglich sein. Und auch nur eins (?) pro Message.
Mit meinem internen Mailclient im SSCam verwende ich aber Memory-Handles weil die Files remote auf der Synology liegen und nicht lokal. Das ist auch ein Vorteil weil man dann keine Mounts benötigt.

...

Jetzt suche ich eine Einsprungpunkt in dein Modul um ein solches Konstrukt zum Versand übergeben zu können oder eine andere Möglichkeit.
Hättest du eine Idee ob/wo ich einen Übergabepunkt in deinem Code finden könnte oder hast du Lust mit mir gemeinsam eine solche Möglichkeit zu implementieren ?


Also mehrere Bilder in einer Message sind wohl über das Bot API nicht möglich, zumindest lese ich die API-Beschreibung so. Auf jeden Fall ist es im Modul nicht vorgesehen und wäre auch nicht einfach zu realisieren, insbesondere wg. der Möglichkeit auch Bilder zu versenden, die nicht als File existieren.

Im Modul gibt es bereits statt eines Dateinamens einen Stream zu übergeben --> siehe Beispiel in der Command ref zu cmdSend :

Example: The following command would sent the resulting SVG picture to the default peer:
set tbot cmdSend { plotAsPng('SVG_FileLog_Aussen') }


Dahinter liegt eine rudimentäre Erkennung von Dateitypen (insbesondere png und jpg für Bilder)

Hilft das?
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

DS_Starter

ZitatIm Modul gibt es bereits statt eines Dateinamens einen Stream zu übergeben --> siehe Beispiel in der Command ref zu cmdSend :

Code: [Auswählen]

Example: The following command would sent the resulting SVG picture to the default peer:
set tbot cmdSend { plotAsPng('SVG_FileLog_Aussen') }


Dahinter liegt eine rudimentäre Erkennung von Dateitypen (insbesondere png und jpg für Bilder)

Hilft das?

Danke für die Info! Könnte schon was sein. Ich schaue mir das mal an und probiere etwas.
Wenn wir noch ein bisschen mit der Implementierung experimentieren müssen würde ich einen separaten Thread aufmachen um den hier damit nicht zu stören.

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

viegener

Zitat von: DS_Starter am 06 Januar 2019, 17:37:31
Danke für die Info! Könnte schon was sein. Ich schaue mir das mal an und probiere etwas.
Wenn wir noch ein bisschen mit der Implementierung experimentieren müssen würde ich einen separaten Thread aufmachen um den hier damit nicht zu stören.

LG,
Heiko

Die wichtigste Frage wäre, welches Dateiformat Deine Bilder haben, wenn es nicht png oder jpg ist, wird dieser Weg nicht erfolgreich sein.
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

DS_Starter

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

szoller

Bots können nun Nachrichten ja auch löschen, wie setze ich das am Besten via FHEM(-Bot) um?

Also dass eine Nachricht zB. nach 60 Sekunden/5-Minuten/x-Stunden wieder gelöscht wird?

Wenn das gut ginge, könnte ich FHEM besser für Push-Nachrichten "missbrauchen" ohne dass es sämtliche Geräte vollspammt :)

marvin78


szoller

Okay, dann klappt das auf jeden Fall schonmal, kann ich das in ein DOIF einbauen, dass die Nachricht dieses DOIFs wieder gelöscht wird?
Es soll ja nicht alle Nachrichten betreffen, sondern nur die von bestimmten DOIFs :)