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: mrfloppy am 23 September 2017, 08:54:30
Kannst du das offiziell einchecken sonst schreit Fhem immer beim Update , Weis ich kann es auch ausnehmen.
Aber das es ja funktioniert wie gewollt kann man es ja auch offiziell machen.

Schon passiert - es gibt halt noch ein paar weiter Änderungen die inzwischen dazugekommen sind - diese machen aber bisher auch keine Probleme.

Aber Frage, wie oft machst Du denn ein update, dass das nach einer Woche ein Problem darstellt?
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

ChrisW

Gibt es nun eine möglichkeit mitgesendete Bilder als VOrschau anzuzeigen in CHrome oder WIn/Linux ? Und Android Statusbar beim runterziehen wie Pushbullet?
Raspberry PI3 mit allem möglichen.

viegener

Zitat von: ChrisW am 24 September 2017, 21:59:39
Gibt es nun eine möglichkeit mitgesendete Bilder als VOrschau anzuzeigen in CHrome oder WIn/Linux ? Und Android Statusbar beim runterziehen wie Pushbullet?

Ich muss zugeben ich verstehe nur Bahnhof. Kannst Du die Frage mal etwas erklärne?
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

igami

Wie könnte ich denn wohl ein

set myTelegramBot queryInline (15:00) Uhrzeit

senden?
: wird ja als Trennzeichen für text und data verwendet. Wäre es viel Aufwand das vielleicht auf :: zu ändern?
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

viegener

Zitat von: igami am 28 September 2017, 11:06:19
Wie könnte ich denn wohl ein

set myTelegramBot queryInline (15:00) Uhrzeit

senden?
: wird ja als Trennzeichen für text und data verwendet. Wäre es viel Aufwand das vielleicht auf :: zu ändern?

Der Aufwand hält sich in Grenzen, aber damit würden alle anderen Verwender von queryInline gezwungen sein den Code zu ändern.
Ich verstehe aber nicht, warum die Uhrzeit in Klammern stehen muss oder sonst eine leichte Veränderung geht?
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

igami

Zitat von: viegener am 28 September 2017, 22:09:31
Der Aufwand hält sich in Grenzen, aber damit würden alle anderen Verwender von queryInline gezwungen sein den Code zu ändern.
Ich verstehe aber nicht, warum die Uhrzeit in Klammern stehen muss oder sonst eine leichte Veränderung geht?
Das war ein zu stark vereinfachtes Beispiel. Ich benutze Telegram um z.B. meine Waschmaschine zu programmieren. Dafür sende ich mir ein Keyboard mit 24 Zeilen und 4 Spalten, also Uhrzeit im 15 Minuten Takt. Noch nutze ich dafür die normalen Keyboards, würde das aber gerne auf die InlineKeyboards umstellen und habe dabei festgestellt, dass ich mir eben keine Uhrzeiten per inline Keyboard senden kann.
Wie wäre es mit einem Attribut, sagen wir mal inlineMsgDataSeperator, mit dem man das Trennzeichen festlegen kann? Default steht es auf : und kann von jedem Nutzer eingestellt werden.
Oder, wenn man den : einfach maskieren könnte, damit er nicht als Trennzeichen gewertet wird.

Noch etwas: Gibt es eine einfache Möglichkeit um die letzte Nachricht zu editieren? Bei queryEditInline muss ja msgId und peer angegeben werden und es muss noch darauf geachtet werden, dass die Nachricht nicht älter als 48 h ist. Ein neuer set "tryQueryEditInline" der die letzte msgId zu dem peer automatisch sucht und prüft ob diese im angegebenen Zeitraum ist wäre cool 8)
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

viegener

Zitat von: igami am 29 September 2017, 08:17:09
Das war ein zu stark vereinfachtes Beispiel. Ich benutze Telegram um z.B. meine Waschmaschine zu programmieren. Dafür sende ich mir ein Keyboard mit 24 Zeilen und 4 Spalten, also Uhrzeit im 15 Minuten Takt. Noch nutze ich dafür die normalen Keyboards, würde das aber gerne auf die InlineKeyboards umstellen und habe dabei festgestellt, dass ich mir eben keine Uhrzeiten per inline Keyboard senden kann.
Wie wäre es mit einem Attribut, sagen wir mal inlineMsgDataSeperator, mit dem man das Trennzeichen festlegen kann? Default steht es auf : und kann von jedem Nutzer eingestellt werden.
Oder, wenn man den : einfach maskieren könnte, damit er nicht als Trennzeichen gewertet wird.

Noch etwas: Gibt es eine einfache Möglichkeit um die letzte Nachricht zu editieren? Bei queryEditInline muss ja msgId und peer angegeben werden und es muss noch darauf geachtet werden, dass die Nachricht nicht älter als 48 h ist. Ein neuer set "tryQueryEditInline" der die letzte msgId zu dem peer automatisch sucht und prüft ob diese im angegebenen Zeitraum ist wäre cool 8)

Ist aus meienr Sicht gar nicht nötig, denn bei inlineButtons sollte (kann) man ja hinter dem Doppelpunkt die Daten mitgeben, die von Telegram zurückgegeben werden bei Betätigen des Knopfes.

Versuch doch einfach mal
set myTelegramBot queryInline (15:00:1500) Uhrzeit
Dann hast Du einen Button auf dem 15:00 steht (nur der letzte Doppelpunkt wird zur Abtrennung verwendet)

Zu dem anderen Punkt - Ja ich kann eine Routine einbauen, die die letzte gesendete Message verändert.
Allerdings ist wohl bei vielen das Szenario da, dass man ja nicht weiss, ob inzwischen von irgendeinem notify eine Warnung versendet wurde und dann die Warnung überschrieben wird.

Vielleicht braucht man eher so etwas wie ein queryDialog (zuqueryInline) - bei dem dann die msgId festgehalten wird
und alle folgende queryEditInline ohne msgId beziehen sich dann auf diese msgId

Das mit den 48 hrs gilt meines Wissens nach für delete.
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

igami

Zitat von: viegener am 29 September 2017, 09:06:09
Ist aus meienr Sicht gar nicht nötig, denn bei inlineButtons sollte (kann) man ja hinter dem Doppelpunkt die Daten mitgeben, die von Telegram zurückgegeben werden bei Betätigen des Knopfes.

Versuch doch einfach mal
set myTelegramBot queryInline (15:00:1500) Uhrzeit
Dann hast Du einen Button auf dem 15:00 steht (nur der letzte Doppelpunkt wird zur Abtrennung verwendet)
Funktioniert selbstverständlich, nur muss ich dann die Nachricht wieder umformatieren um eine Uhrzeit zu erhalten und das wollte ich vermeiden ;)

Zitat von: viegener am 29 September 2017, 09:06:09
Zu dem anderen Punkt - Ja ich kann eine Routine einbauen, die die letzte gesendete Message verändert.
Allerdings ist wohl bei vielen das Szenario da, dass man ja nicht weiss, ob inzwischen von irgendeinem notify eine Warnung versendet wurde und dann die Warnung überschrieben wird.

Vielleicht braucht man eher so etwas wie ein queryDialog (zuqueryInline) - bei dem dann die msgId festgehalten wird
und alle folgende queryEditInline ohne msgId beziehen sich dann auf diese msgId

Das mit den 48 hrs gilt meines Wissens nach für delete.
Ich schreibe gerade ein msgDialog modul, welches mit dem msg Befel arbeitet, da steht das auf meiner Liste, auch wenn das dann nur Telegram spezifisch ist (was ich ausschließlich nutze), das Modul aber auch andere Messaging Dienste wie Jabber und Whatsapp unterstützt.

Da ich meine ganzen Dialoge, die vorher auf DOIF Basis waren nun umschreibe ist mir noch etwas aufgefallten. Meine Dialoge stammen alle aus der Zeit bevor man Keyboards per set versenden konnte. Da habe ich dann auf die Sub zurückgegriffen. Hier z.B. um mir meine Zählerstände zu schicken:

    ({my @meter = devspec2array("subType=meter:FILTER=disable!=1");;
      $_ =
          (split(": ", AttrVal($_, "alias", $_)))[1]
        . "\n" . InternalVal($_, "STATE", "")
        . " (" . (split(" ", ReadingsTimestamp($_, "state", "")))[0] . ")"
        for(@meter);;
      @meter = sort(@meter);;
      TelegramBot_SendKeyboard(
          "TelegramBot"           ## TelegramBot device
        , "[TelegramBot:replyId]" ## recipient
        , "Zählerstände"          ## msg
        , @meter, "abbrechen"     ## keyboards
      );;
     }
    )

Ich möchte da jetzt nicht näher drauf eingehen, nur eine Sache: Es war möglich ein "\n" im Keyboard zu haben. Mit dem set Befehl wird ein \n im Keyboard jedoch nicht ausgewertet. Vielleicht kannst du da ja noch mal gucken? ;)
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

igami

Zitat von: viegener am 29 September 2017, 09:06:09
Zu dem anderen Punkt - Ja ich kann eine Routine einbauen, die die letzte gesendete Message verändert.
Allerdings ist wohl bei vielen das Szenario da, dass man ja nicht weiss, ob inzwischen von irgendeinem notify eine Warnung versendet wurde und dann die Warnung überschrieben wird.

Vielleicht braucht man eher so etwas wie ein queryDialog (zuqueryInline) - bei dem dann die msgId festgehalten wird
und alle folgende queryEditInline ohne msgId beziehen sich dann auf diese msgId

Das mit den 48 hrs gilt meines Wissens nach für delete.
Es hat mich einfach nicht losgelassen: msgDialog: Instant Messaging als FHEM Interface
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

viegener

Zitat von: igami am 29 September 2017, 09:50:49
Ich möchte da jetzt nicht näher drauf eingehen, nur eine Sache: Es war möglich ein "\n" im Keyboard zu haben. Mit dem set Befehl wird ein \n im Keyboard jedoch nicht ausgewertet. Vielleicht kannst du da ja noch mal gucken? ;)

Kannst Du mit der obigen Routine wirklich eine zweizeilige taste im telegram-Keyboard erzeugen?
Ich bin damit gescheitert und habe verschiedene Optionen ausprobiert
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

igami

Zitat von: viegener am 03 Oktober 2017, 02:00:04
Kannst Du mit der obigen Routine wirklich eine zweizeilige taste im telegram-Keyboard erzeugen?
Ich bin damit gescheitert und habe verschiedene Optionen ausprobiert
Einfach mal folgenden Code ausführen :)

{
  my ($TelegramBot) = devspec2array("TYPE=TelegramBot");;
  my $peer = AttrVal($TelegramBot, "defaultPeer", "");;
  my $msg = "Mehrzeilige Keyboards für Alle!";;
  my $hash = $defs{$TelegramBot};;
  my (@rows, @keys);;
  push(@rows, "Zeile 1");;
  push(@rows, "Zeile 2\nZeile 3");;
  for (@rows){
    my @columns = split("\\|", $_);;
    push(@keys, \@columns);;
  }
  my $jsonkb = TelegramBot_MakeKeyboard($hash, 1, 1, @keys);;
  TelegramBot_SendIt($hash, $peer, $msg, $jsonkb, 0);;
  $jsonkb = TelegramBot_MakeKeyboard($hash, 1, 0, @keys);;
  TelegramBot_SendIt($hash, $peer, $msg, $jsonkb, 0);;
  return;;
}
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

viegener

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

igami

Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

viegener

@igami: Achso und auf iOS fehlt der Text Zeile 3 sogar komplett...

Testest Du auf Android? - auf einem alten Nexus geht es wohl

Also leider kann ich das wohl nicht unterstützen, denn auf iOS geht es gar nicht im web wird es ignoriert und nur auf Android scheint es zu gehen
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

igami

Ich hätte nicht gedacht, dass es bei den Clients solche Unterschiede gibt. Dann ist es wohl besser das raus zu lassen. Ist auch hier beschrieben.
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED