Telegram instant messaging TelegramBot - Empfangen und Senden per FHEM

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

Vorheriges Thema - Nächstes Thema

viegener

Zitat von: wbini am 08 August 2017, 15:52:56
gibt es eine Möglichkeit an die Geodaten (longitude und latitude) des Users zu kommen ala GetLocation(...) ohne dem User einen Button anzubieten ?

Mir ist dazu keine Möglichkeit über den Bot bekannt. Es müsste aber möglich das Versenden per IFTTT oder ähnlichem (Tasker ?) auf dem Telefon zu machen und ein Trigger könnte dann wieder eine bestimmte Nachricht sein.

Als Bot-Funktion wäre das aus meiner Sicht eher ein Problem für die Privatsphäre
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

binford6000

ZitatJa, würde mich gerne selbst überwachen, also stündlich meine Geodaten abfragen und speichern.

Ja das geht zB. mit
{
  my @pos=split(/,/,ReadingsVal("livetracking","location",""));
  fhem "set fhemBot sendLocation $pos[0] $pos[1]";
}


Siehe dazu den livetracking Thread hier: https://forum.fhem.de/index.php/topic,37412.135.html

VG Sebastian

viegener

Zitat von: binford6000 am 10 August 2017, 08:22:19
Ja das geht zB. mit
{
  my @pos=split(/,/,ReadingsVal("livetracking","location",""));
  fhem "set fhemBot sendLocation $pos[0] $pos[1]";
}


Siehe dazu den livetracking Thread hier: https://forum.fhem.de/index.php/topic,37412.135.html

Nur der Vollständigkeit halber: Hier sendest Du die Information über die Position per TelegramBot an den Benutzer, die Anfrage war, ob das über TelegramBot vom Benutzer abgefragt werden kann (ohne Button). Trotzdem löst das livetracking vermutlich das Problem von wbini
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

binford6000

ZitatTrotzdem löst das livetracking vermutlich das Problem von wbini

Das denke ich auch - mit oder ohne Button  ;)

wbini


ErzGabriel

Guten Morgen.
Ich habe jetzt hier den ganzen Thread durchgelesen, gegooglet und rum probiert aber komme nicht weiter.
Mein ziel ist es, mir mehrer DOIF zu erstellen, die ich für Telegram nutze aber ich scheitere am Perl. Perl ist für mich ein Buch mit sieben Siegeln.

1. Ein DOIF, wo ich die Temperaturen, der Heizkürper und des Außenthermometers abrufen kann.
2. Ein DOIF, was eine Meldung schickt, wenn Batterien leer werden.
3. Ein DOIF, was zum bestimmten Zeitpunkt mir bestimmte Temperaturen meldet.

Ein notify zum schalten diverse Geräte ist vorhanden und funktioniert. Somit ist sicher, das der Bot richtig eingerichtet ist und funktioniert.
Kann mir bitte jemand helfen?

Danke.

MadMax-FHEM

Hab nicht genau verstanden was du erreichen willst...

1. Du willst eine Nachricht per Telegram an fhem schicken und Werte erhalten? (Gut bei dem Batterie-Dingens läuft es wohl andersrum)

2. Du willst bei bestimmten Situationen (da passt dann auch das mit Batterie) eine Nachricht bekommen?

Bei 1. mal nach chatbot suchen bzw.:

https://forum.fhem.de/index.php?topic=51425.0

Bei 2. (da das Verschicken wohl geht) eher eine gezielte Frage im Bereich DOIF bzw. zu Batteriewarnung schicken gibt es gefühlt 100000 Threads. Mit Temperatur geht es ja dann analog (nur andere Geräte, andere Readings und andere Schwellwerte)...

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)

ErzGabriel

Hallo Joachim.
Den Thread, auf den Du verweist, war meine erste Anlaufstelle und da wurde ich nach hier verwiesen.

UweH

Zitat von: ErzGabriel am 12 August 2017, 07:29:59
1. Ein DOIF, wo ich die Temperaturen, der Heizkürper und des Außenthermometers abrufen kann.
So hatte ich das mal gelöst, bevor ich das alles in eine Funktion in die 99_myUtils ausgelagert habe bzw. in den ChatBot:

define DI_Status DOIF ([09:00|8] or [13:00|8] or [19:00|8] and [Key_Uwe] eq "on") (set myTeleBot msg Temp [Temp.Aussen:temperature] || AZ [Temp.AZ:temperature] || GZ [FHT.GZ:temperature] / [FHT.GZ:battery] / [FHT.GZ:windowsensor] / [Fenster.GZ:Window] || WZ [FHT.WZ:temperature] / [FHT.WZ:battery] / [FHT.WZ:windowsensor] / [Fenster.WZ:Window] || Bad [FHT.Bad:temperature] / [FHT.Bad:battery] / [FHT.Bad:windowsensor] / [Fenster.Bad:Window] || SZ [FHT.SZ:temperature] / [FHT.SZ:battery] / [FHT.SZ:windowsensor] / [Fenster.SZ:Window])

Das DOIF hat Wochentags um 9, 13 und 18h die Temperaturen der Sensoren und den Status der FHT ausgelesen und verschickt, wenn mein Schlüssel nicht am Brett hing.

Hast Du Dir das so vorgestellt?

Gruß
Uwe

ErzGabriel

Jo, genau sowas suche ich. Danke.
Aber muss da nicht noch was in die Utils, weil der Bot doch nur Text überträgt und so kriege ich doch nicht die Werte rein. Oder verstehe ich das jetzt falsch?

UweH

Da muss nichts in myUtils. Das DOIF holt sich die Werte von den Devices und schickt sie los. Ersetze doch einfach mal meine Device-Namen mit Deinen.
Und weshalb sollte der Bot nur Text übertragen?

ErzGabriel

#1496
Okay, werde ich machen. Danke Dir.
Mit dem Text war schlecht ausgedrückt. Hatte wo gelesen, das der Bot keinen Perlcode umsetzen kann und nur den text rausschickt.

Edit:
Habe ich auf meine Device umgebaut und funktioniert bestens. Danke.
Hast du auch einen tipp für mich, wie ich eine Abfrage machen kann, weil baue ich das ganze um, das ich zum Beispiel an FHEM Außentemperatur sende, passiert nichts. Der Umbau sieht wie folgt aus:
define n_ChatMH notify Jarvis:msgText.* {\
    if ($EVTPART1 eq 'Außentemperatur') {\
        fhem("set Jarvis _msg Die Außentemperatur beträgt [THERMOMETER:temperature]");;\
    }\
    elsif ($EVTPART1 eq 'Büro') {\
        if ($EVENT =~ 'an') {\
            fhem("set LSR_BUERO on");;\
        }\
        elsif ($EVENT =~ 'aus') {\
            fhem("set LSR_BUERO off");;\
        }\
    }\
    elsif ($EVTPART1 eq 'Wohnzimmer') {\
        if ($EVENT =~ 'an') {\
            fhem("set VITRINE on");;\
        }\
        elsif ($EVENT =~ 'aus') {\
            fhem("set VITRINE off");;\
        }\
    }\
    elsif ($EVTPART1 eq 'Schlafzimmer') {\
        if ($EVENT =~ 'an') {\
            fhem("set LSR_BED on");;\
        }\
        elsif ($EVENT =~ 'aus') {\
            fhem("set LSR_BED off");;\
        }\
    }\
    elsif ($EVTPART1 eq 'Küche') {\
        if ($EVENT =~ 'an') {\
            fhem("set LSR_KUECHE on");;\
        }\
        elsif ($EVENT =~ 'aus') {\
            fhem("set LSR_KUECHE off");;\
        }\
    }\
}

Wobei alle anderen Einträge funktionieren.

smart.builder

Hallo Zusammen,

seit längerer Zeit verwende ich es zum Versenden von Telegramnachrichten.
Es werden z.B. Bilder der Webcams nach Bewegungserkennung an mein Handy gesendet. Funktionierte bisher alles perfekt!
Seit ca. 1 Woche läuft mein Fhem Amok (nach Neustart). Das Versenden der Photos funktioniert zwar, aber es kommt anscheinend keine Bestätigungsnachricht an. Daraufhin versucht es das Telegrammodul automatisch im Sekundentakt nachmal zu versenden. Somit werde ich zugespamt. Einzige Abhilfe ein Reset des Telegrammodul im Fhem (set TelegramBot reset).

Es handelt sich um folgende Fehlermeldungen (im Sekundentakt):
Callback returned no valid JSON: JSON text must be an object or array (but found number, string, true, false or null, use allow_nonref to allow this) at ./FHEM/50_TelegramBot.pm line 2092.

pollingTimeout ist auf 120.
Es wird die aktuellste Version aus Github verwendet.

Ich habe es auch bereits mit einem neuen Bot probiert, jedoch ohne Besserung.

Interessanterweise bekomme ich auch beim Wettermodul zyklisch eine ähnliche Meldung:
2017.08.12 23:58:02 3: Wetter: JSON text must be an object or array (but found number, string, true, false or null, use allow_nonref to allow this) at FHEM/YahooWeatherAPI.pm line 247.

Ich vermute, dass es irgendwie an meiner Debian-Installation liegt. Die libjson-perl ist auf dem aktuellen Stand.

Danke!!!

Gruß
Viktor

viegener

@smart.builder:
- Wenn Du im Sekundentakt zugespammt wirst stellt sich die Frage, wer macht diese Sendebefehle - Der Bot versendet normalerweise bei Fehlern mit ansteigender Wartezeit 1, 10, 100 Sekunden. Das sollte nicht im Sekundentakt passieren und eigentlich auch nicht endlos.
Frage: Wie steht der Wert des Attributes maxRetries?

- Kannst Du mal beim Bot das Attribut verbose 5 stellen und dann den Logausschnitt im Fehlerfall hier posten?



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

UweH

@ErzGabriel: Der Ausführungsteil funktioniert in der Form bei mir. Das "if" reagiert dann wohl nicht.