Telegram instant messaging TelegramBot - Empfangen und Senden per FHEM

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

Vorheriges Thema - Nächstes Thema

Esjay

Zitat von: arokh12 am 12 August 2016, 18:19:46
Hallo,

ich bin gerade dabei, von yowsup zu telegram zu wechseln. Ich habe bei mir einzelne 3 Kontakte eingerichtet. Das Senden von FHEM an jeden Einzelnen Kontakt funktioniert problemlos.

Per Yowsup habe ich vorher aus meinen Utils Programm-Dateien alle nacheinander aufgerufen. (set yowsup msg <Nummer> Text; set yowsup2 msg <Nummer> Text;...). Jetzt habe ich das ganze an Telegram angepasst (set Telegram1 message Text;; set Telegram2 message Text;...).

Dabei stellte sich das folgende Problem heraus, das der letzte in der Auflistung die Nachricht bekommt, und die anderen beiden, die davor aufgerufen werden, die Nachricht nicht verschickt wird.

Im Internal sentMsgResult steht dann dauerhaft waiting. Woran kann das liegen?

Vielen Dank im voraus

arokh12

Grüße

Commandref sagt folgendes!

message|msg|send [ @<peer1> ... @<peerN> ] <text>


Versuch mal die @ zeichen vor deinen Kontakten rein zu nehmen, dann sollte es funktionieren.


arokh12

Zitat von: Esjaycc am 12 August 2016, 18:32:57
Grüße

Commandref sagt folgendes!

message|msg|send [ @<peer1> ... @<peerN> ] <text>


Versuch mal die @ zeichen vor deinen Kontakten rein zu nehmen, dann sollte es funktionieren.

Oh, das habe ich dann wohl überlesen. Jetzt funktioniert es aber problemlos

Danke,

arokh12

Knorki

Hallo,

leider sind die Polling time out Fehler doch wieder aufgetaucht:

2016-08-14 22:11:46 TelegramBot Telegram PollingLastError: NonBlockingGet timed out on read from  after 85s
2016-08-14 22:11:46 TelegramBot Telegram PollingErrCount: 412
2016-08-14 22:12:39 TelegramBot Telegram PollingLastError: NonBlockingGet timed out on read from  after 85s
2016-08-14 22:12:39 TelegramBot Telegram PollingErrCount: 413
2016-08-14 22:13:51 TelegramBot Telegram PollingLastError: NonBlockingGet timed out on read from  after 85s
2016-08-14 22:13:51 TelegramBot Telegram PollingErrCount: 414

Den Wert hatte ich auf 40 gesetzt. Wieso er einen time out nach 85s erhält ist mir ein Rätsel.
Hat irgendjemand vielleicht eine Lösung?

Gruß
Stefan

abc2006

Hi,
ich möchte gerne ein DOIF für 3h auf disable setzen und danach wieder enablen.

Da ich den Befehl oft brauchen werde, möchte ich das gerne über die Favoriten lösen.

dazu habe ich versucht
/off3h=set DF_machwas disable 1; defmod 3hON at +03:00 set DF_machwas disable 0;

Leider ist das Semikolon ja Trenner für Favoriten, so dass das defmod bereits den zweiten Platz belegt und nicht mit ausgeführt wird.

Wie könnte ich das hinkriegen?
Danke
Stephan



FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

viegener

Zitat von: abc2006 am 15 August 2016, 11:42:38
Hi,
ich möchte gerne ein DOIF für 3h auf disable setzen und danach wieder enablen.

Da ich den Befehl oft brauchen werde, möchte ich das gerne über die Favoriten lösen.

dazu habe ich versucht
/off3h=set DF_machwas disable 1; defmod 3hON at +03:00 set DF_machwas disable 0;

Leider ist das Semikolon ja Trenner für Favoriten, so dass das defmod bereits den zweiten Platz belegt und nicht mit ausgeführt wird.

Wie könnte ich das hinkriegen?
Danke
Stephan

Es gibt verschiedene Möglichkeiten in fhem mehrere kommandos als kombination zu definieren. Schau doch mal unter cmdalias oder notify/trigger.
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

hartenthaler

Ich möchte ein pdf Dokument verschicken, das im Dateinamen zwei Leerzeichen enthält. Laut command ref muss der Dateiname dazu in " eingeschlossen werden. Geht aber nicht.

set Telegram.Bot sendDocument "my_documents/a b c.pdf"

führt zur Fehlermeldung "TelegramBot_Set: Command sendDocument, extra parameter specified after filename".

Wenn ich die Leerzeichen im Dateinamen durch "_" ersetze, geht es natürlich (egal ob ich das fhem-Kommando dann mit oder ohne " schreibe).

Und ich habe noch ein Problem mit Umlauten. Normalerweise kommen diese beim Telegram-Client korrekt an. Wenn ich aber über das Modul TALKTOME ein Reading weiterschicke, dann klappt das nicht korrekt.
Ich habe ein Kalender-Device und dort ein User-Reading "sprache_heute" mit dem Inhalt "Für heute stehen keine Termine im Kalender.". Beim Telegram-Client kommt aber folgendes an: "Für heute stehen keine Termine im Kalender."
Im RiveScript-Konfigurationsfile von TALKTOME steht:

! array termintage = heute|morgen

+ welche termine ([habe ich]|[haben wir]|stehen|gibt es) [im kalender] [für] (@termintage) [im kalender|an]
* <star2> == heute => <call>readingsval cv_KalenderGH sprache_heute Error</call>
* <star2> == morgen => <call>readingsval cv_KalenderGH sprache_morgen Error</call>

Wie kann ich testen ob das Problem auf Seiten von TALKTOME oder auf Seiten des TelegramBot liegt? Ich komme nicht drauf wie ich den Inhalt eines Readings per Telegram verschicke. Ich habe es z.B. so versucht:
set Telegram.Bot message { ReadingsVal("cv_KalenderGH","sprache_heute","Error") }
Aber da kommt beim Client nur der Text "{ ReadingsVal("cv_KalenderGH","sprache_heute","Error") }" an, was ich natürlich fast vermutet hatte.
fhem 5.8 auf RaspberryPi 3 mit HMLAN und CCU2, ZWave, JeeLink, FHZ1000 für FS20, HMS, Fritz!Box, Fritz!DECT200, Harmony, Sonos, hue, netatmo, SSCam, Wetter- und Verkehrsmodule, Chat-Bot mit RiveScript/Telegram, IFTTT, pushover, ...

voodrax

Hallo!

Habe eine Frage, hoffe es kann mir jemand helfen.
Habe den Telegram-Bot eingerichtet. Funktioniert so weit so gut, Senden/Empfangen funktioniert. Habe ein Notify auf meinen Kellerlüfter gelegt, um informiert zu werden, wenn er sich einschaltet:
define TelegramCellarFanNotifyOn notify DOSE_Keller_Sw:.*on set Telegram message Keller-Luefter EIN

Mein Problem ist, dass ich in Telegram aber dann immer mehrere Messages bekomme, wenn ich dann zB den Lüfter ausschalte (das passiert gleich wie wenn ich im Web-IF den Lüfter ausschalte):
Ich: FHEM set DOSE_Keller_Sw off [14:18:53]

FHEMBot:
Keller-Luefter AUS [14:18:54]
TelegramBot FHEM :
Befehl:set DOSE_Keller_Sw off:
  Ergebnis:
OK

Keller-Luefter AUS [14:18:54]
Keller-Luefter AUS [14:18:54]



Meine Frage ist daher: Weiß jemand, wieso der Bot manchmal mehrere Nachrichten doppelt schickt? manchmal steht auch AUS, AUS, EIN, AUS...usw..
Ist nicht immer gleich, ist immer irgendwie, also zufällig.

Das macht der Bot aber nur beim Notify...wenn ich ein /SVG anfordere, bekomme ich es immer sauber nur 1x.

Weiß evtl. jemand Rat? Habe ich etwas übersehen?

Danke im Voraus für eure Hilfe.

LG

MadMax-FHEM

Hi,

schon mal im EventMonitor geschaut welche Events kommen...

Denn sobald was mit 'on' kommt löst das notify aus und schickt eine Nachricht...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

homeum

Vllt ist es sinnvoll, anstatt mit Notify die Sache mit DOIF zu lösen.
Denn bei DOIF kommt erst wieder eine neue Benachrichtigung, wenn zuvor wieder die andere Bedingung aktiv war. Zweifache Auslösung bei der selben Bedingungen ist damit generell nicht möglich.
Ich habe mit DOIF sämtliche Telegram-Benachrichtigungen eingestellt, völlig ohne Probleme.

Marlen

Hallo,

hab eine Problem mit Telegram_bot in FHEM:
Ich möchte Nachrichten an verschiedene Gruppen schicken, jedoch geht die Nachricht immer nur an defaultPeer!

Über der Eingabezeile in FHEM geht es allerdings!

Hab mir gedacht, ich erstell mir einfach mehrere bot's, allerdings gibt es hier dann wohl probleme beim polling!!!

Grrrrr......hoffe mir kann jemand helfen!

DS_Starter

Zitat von: hartenthaler am 20 August 2016, 17:01:18
...... Ich komme nicht drauf wie ich den Inhalt eines Readings per Telegram verschicke. Ich habe es z.B. so versucht.....

Hallo Hartenthaler,

um eine, in welcher Form auch immer, zusammengesetzte Message über TelegramBot zu versenden setze ich in einer 99_MyUtils Funktion eine Variable $msg zusammen und versende diese dann über den Dienst an den defaultPeer. Hier ein Beispiel wie ich das mit einer Alarmmessage mache die im Alarm-Modul verwendet wird:


######################################################
########   Alarmanlage Alarm Level 5 - Batt leer
######################################################
sub AlmLvl5() {
my $msg = 'Batterie schwach Alarm bei '.$defs{'LBatt.warn'}{READINGS}{'state'}{VAL}.' festgestellt. \n\nFHEM-Server';
fhem ("set teleBot message $msg");
}


Aufzurufen wäre das Ganze dann ganz einfach über {AlmLvl5()} in der FHEMWEB-Eingabezeile oder in einem Notify usw.
Vielleicht hift dir das bei deiner Fehlersuche bzw. Aufgabenstellung.

viele 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

heinzfo

Hallo

Ich bin von yowsup auf Telegram umgestiegen.
Senden und Empfangen geht mitlerweile.

Nun habe ich eine 99_TelegramUtils.pm die ich schon für Whatsapp verwende auf Telegram umgeschrieben.

Bei Whatsapp hatte ich 3 Mobiltelefone die Nachrichten senden/empfangen konnten, und von der 99_WhatsappUtils.pm daten bezogen haben.


Wie kann ich das bei Telegram lösen?

Das Whatsapp Beispiel

##############################################
# $Id: 99_WhatsAppUtils.pm $
package main;

use strict;
use warnings;
use POSIX;

sub
WhatsAppUtils_Initialize($$)

{ my ($hash) = @_; }

### define WhatsappHeinz notify HeinzMobil:message.* {WhatsappAnswer($NAME,$EVENT)}
### define WhatsappGabi notify GabiMobil:message.* {WhatsappAnswer($NAME,$EVENT)}
### define WhatsappNavi notify HeinzNavi:message.* {WhatsappAnswer($NAME,$EVENT)}

### define HeinzMobil yowsup 4917xxxxxxxxxx
### define GabiMobil yowsup 4917xxxxxxxxxx
### define HeinzNavi yowsup 4917xxxxxxxxxx

sub WhatsappAnswer($$)

{
  my ($NAME,$EVENT) = @_;

### Licht
if( $EVENT eq 'message: Licht' ) { fhem "set $NAME send Licht im Wohnzimmer ist jetzt eingeschaltet \xF0\x9F\x92\xA1";
fhem "set Stehlampe.wz dim43% 15"; sleep 0.5; fhem "set Bodenlampe.wz dim68% 48";}
elsif( $EVENT eq 'message: Licht aus' ) {fhem "set $NAME send Licht Wohnzimmer ist aus"; fhem "set AlleLampen.wz off";}
elsif( $EVENT eq 'message: Wandlampe' ) {fhem "set $NAME send Wandlampe bis 10:30 an"; fhem "set Stehlampe.wz on-till 10:23:17";}
elsif( $EVENT =~ /message: Wandlampe (dim+\d+%|on|off)/ ) {fhem "set $NAME send Wandlampe $1"; fhem "set Stehlampe.wz $1";}
elsif( $EVENT =~ /message: Bodenlampe (dim+\d+%|on|off)/ ) {fhem "set $NAME send Bodenlampe $1"; fhem "set Bodenlampe.wz $1";}
elsif( $EVENT =~ /message: Tischlampe (dim+\d+%|on|off)/ ) {fhem "set $NAME send Tischlampe $1"; fhem "set Tischlampe.az $1";}
elsif( $EVENT eq 'message: Flur' ) {fhem "set $NAME send Licht Flur"; fhem "set LichtFlur on-for-timer 0.5";}


Beste Grüße
Heinz

DeeSPe

Ich bin den für mich einfachsten/logischsten Weg gegangen ohne mich genau mit der Materie befasst zu haben.

Habe ein userattr bei meinen ROOMMATES erstellt, z.B. TelegramID.
Dieses attr lese ich dann einfach an gewünschter Stelle in einer Sub ein.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

hartenthaler

Danke Heiko @DS_Starter

Habe es nun testen können und festgestellt, dass das Problem mit den nicht richtig übertragenen Umlauten aus einem Reading nicht im Telegram-Modul liegt, sondern beim TALKTOME-Modul zu suchen ist. Habe mir dazu eine Routine in 99_myUtils.pm geschrieben mit der ich alles mögliche, u.a. auch Readings verschicken kann. Auch Readings mit Umlauten finden den Weg korrekt zum Telegram-Client.


#################################################################
###  Nachrichten, Readings, Bilder, Dokumente und Plots per Telegram verschicken                       ###
#################################################################

# Beispiele:
# Textnachricht:                                            send_telegram("Dies ist eine Nachricht.");
# Device, Reading:                                        send_telegram("cv_Kalender","t_001_summary");
# Plot:                                                         send_telegram("SVG_FileLog_NETATMO_CO2");
# Bild (.jpg oder .png zur direkten Ansicht):   send_telegram("picture.png");
# sonstiges Dokument (download):               send_telegram("document.pdf");
# Der erste Übergabeparameter darf maximal einen Punkt enthalten, der die Dateierweiterung abtrennt bzw. die Textnachricht abschließt.

sub send_telegram($;$) {
my ($document, $reading) = @_;
my $device = "Telegram.Bot";    # Telegram device ggf. anpassen
my $peer = "x_y";  # anpassen - bei mir ist das Vorname_Nachname
my $path   = "./my_documents/";  # default-Verzeichnis für Bilder und Dokumente; relativ zum fhem-Verzeichnis, also etwa /opt/fhem/my_documents/

if (!defined $device) {
   Log3 'send_telegram', 1, "Device ".$device." not found";
   return "Device not found";
}

if (defined $reading) {  # reading (first parameter = device, second parameter = reading)
   $document = ReadingsVal($document,$reading,"Error");
   fhem ("set $device message $document");
} else {  # message or plot or image or document
   my @parts = split(/\./,$document);
   if (!defined @parts or @parts == 1) { # plot or message
     my $plotfile="./www/gplot/".$document.".gplot";
     if (-e $plotfile) {  # plot
       $document = "{plotAsPng('".$document."')}";
       TelegramBot_ExecuteCommand($defs{$device}, $peer, $document);
     } else {  # message
       fhem ("set $device message $document");
     }
   }
   elsif (defined @parts) {  # image or document
     $document = $path.$document if (!-e $document);
     if (-e $document) {
       if (@parts[1] eq "png" or @parts[1] eq "jpg") { # image
     fhem("set $device sendImage $document");
       } else { # other document
         fhem("set $device sendDocument $document");
       }
     } else {
       Log3 'send_telegram', 1, "File not found";
       return "File not found";
     }
   }
}
return;
}


Es bleibt das Problem, dass man keine Dokumente verschicken kann, die Leerzeichen im Dateinamen enthalten.
fhem 5.8 auf RaspberryPi 3 mit HMLAN und CCU2, ZWave, JeeLink, FHZ1000 für FS20, HMS, Fritz!Box, Fritz!DECT200, Harmony, Sonos, hue, netatmo, SSCam, Wetter- und Verkehrsmodule, Chat-Bot mit RiveScript/Telegram, IFTTT, pushover, ...

DeeSPe

Mal irgendwie versucht die Leerzeichen zu escapen oder mit entsprechendem Codes aufzufüllen? z.B. %20

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe