Ankündigung

Einklappen
Keine Ankündigung bisher.

Telegram, Alternative zu WhatsApp

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • henfri
    antwortet
    Hallo
    grisu911
    Forums-Einsteiger
    grisu911


    Zitat von grisu911 Beitrag anzeigen

    eine kleine Anregung:
    Ich habe in dem Bereich was erweitert:
    PHP-Code:
    def mHandler(selfbotupdate):
    """
    write the content (text) of the message in an SH-item
    """
    if self.has_write_access_rightupdate.message.chat_id ):
    text update.message.from_user.name ":" # add username
    text += update.message.text ":" # add the message.text
    text += str(update.message.chat_id)
    for 
    item in self._items_text_message:
    self.logger.debug("write item: {0} value: {1}".format(item.id(), text))
    item(textcaller=self.get_fullname()) # write text to SH-item 
    und zwar die Zeile um text += str(update.message.chat_id) hier noch die ChatID mit ins Item zu bekommen.
    Das Item wird zerteilt in seine Bestandteile User, Text und ChatID.
    Hat das irgendwelche negativen effekte? Ansonsten würde ich mich anbieten das als PR einzustellen.

    Ich habe mir dann eine Logik gebaut mit der ich per Button bestimmte Aktionen ausführen kann.

    Hier mal mein Logik in Auszügen:
    PHP-Code:

    if sh.Info.Chat_ID() == '-xxxxxxxxxx':
    custom_keyboard_ubersicht = [['Wetter''Status'],['Location''Tanken'], ['Tore''Schalten']]
    custom_keyboard_wetter = [['zurück'], ['aktuell''historisch'], ['Diagramme']]
    custom_keyboard_diagramm = [['zurück'], ['Wetter'], ['Temperatur''Luftdruck'], ['Luftfeuchte']]
    custom_keyboard_location = [['zurück'], ['xxxx''xxxx''xxxxx'], ['xxxxx-Info''xxxxx-Info''xxxx-Info']]
    custom_keyboard_tanken = [['zurück'], ['Preise''Günstigste']]
    custom_keyboard_tore = [['zurück'], ['Gehtür''Fahrtor'], ['Garage-J''Garage-N'], ['Garage-W']]
    custom_keyboard_schalten = [['zurück'], ['NAS']]

    chat_id sh.Info.Chat_ID()

    #Keyboard
    if sh.Info.Message() == 'Übersicht' or sh.Info.Message() == "zurück":
    bot.send_message(chat_id=chat_idtext='Bitte auswählen:'reply_markup=telegram.ReplyKeyboardMarkup(custom_keyboard_ubersichtresize_keyboard=True)) 
    Dazu habe ich noch Fragen:
    Was ist sh.Info? Würdest du die Item-Definition teilen?
    Wodurch wird sh.Info.Chat_ID aktualisiert?
    Wo reagierst du auf das Kommando das Garage-J geöffnet werden soll, oder das NAS angeschaltet? Und: Da müsste doch noch eine Abfrage für An oder Aus hinzukommen, oder?

    Gruß,
    Hendrik

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Hallo,

    in deinem ersten Beispiel ist es aber so, dass immer an den Chat 1234567 gesendet wird.
    Wenn ich aber mal an mich (1234567) und mal an meine Frau (345678) schicken will geht das aber so nicht.

    Oder verstehe ich etwas falsch?

    Gruß,
    Hendrik

    Einen Kommentar schreiben:


  • yachti
    antwortet
    Zitat von henfri Beitrag anzeigen
    Nochmal gemacht, klappt aber nicht. Gleiches Ergebnis.
    schon komisch und kann ich nicht navhvollziehen

    Ist es möglich hier auch die Nachricht an eine chat_id zu beschränken
    In dem Beispiel wird es doch an eine ChatID gesendet

    ChatID:
    Code:
    service:
        telegram:
            Chat_Ids:
                type: dict
                telegram_chat_ids: 'True'
                enforce_updates: 'true'
                cache: 'True'
                value: "{1234567: 1 }"
            senden:
                type: str
                enforce_updates: 'true'
                telegram_message: '[VALUE]'
    ChatGruppe:
    Code:
            telegram_message: Es klingelt an der Tür
            telegram_value_match_regex: (true|True|1)  # nur Nachricht senden wenn 1
            info:
                type: bool
                enforce_updates: 'true'
                eval_trigger: haustuer.klingel
                eval: sh.telegram.photo_broadcast("http://10.1.1.1/cgi-bin/api.cgi?cmd=Snap&channel=0&rs=wuuPhkmUCeI9WG7C&user=USER&password=GEHEIM","Türkamera",-1001111111) if sh.haustuer.klingel() == 1 else None

    Einen Kommentar schreiben:


  • Sisamiwe
    antwortet
    Das wird es bald geben.
    Ich mache kommende Woche einen PR, dann gibt es das.

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Danke für die genaue Beschreibung.

    Nochmal gemacht, klappt aber nicht. Gleiches Ergebnis.

    Wie auch immer: Es hat zwischendurch einmal geklappt und die Verbindung zu smarthomeng steht jetzt.

    Eine Frage hab ich noch. Ich nutze aus deinem Beispiel in einem Item:
    Code:
    telegram_message: '[VALUE]'
    Ist es möglich hier auch die Nachricht an eine chat_id zu beschränken, statt an alle zu senden?
    Aus der Doku:
    telegram_message


    Send (broadcast) message on item change to registered chats. It is possible to use placeholder tags in the message string, to use a template based communication.

    Available tags:
    • [ID]
    • [NAME]
    • [VALUE]
    • [CALLER]
    • [SOURCE]
    • [DEST]
    Aber leider gibt es da kein Beispiel für.

    Gruß,
    Hendrik

    Einen Kommentar schreiben:


  • yachti
    antwortet
    Zitat von henfri Beitrag anzeigen
    Wie genau meinst du das?
    In Telegram Botfather Chatfenster
    -> /mybots und den entsprechenden Bot auswählen
    Screenshot 2021-11-02 235356.png
    ->API Token nochmal kopieren
    und den Link zu ->Here is the token for bot ... benutzen

    in dem Chatfenster
    --> Hallo schreiben

    und nochmal die URL mit dem kopierten Token abfragen.
    Kontrollieren dass kein Leerzeichen im Link ist.

    Damit ist sichergestellt, dass der Token zu den Bot passt.

    Gruß
    Michael

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Hallo,

    ich bin einen Schritt weiter. Der Grund, weshalb es nicht funktioniert hat, wenn ich die Chat_id nicht explizit angegeben habe (dann wird sie ja aus dem Item genommen):
    Wenn man mit notepad++ eine YAML Datei speichert, ist die Default-Endung .yml. SmarthomeNG sucht aber nur nach .yaml.


    Zitat von yachti Beitrag anzeigen
    Ich kann die ChatID über den von mir beschrieben Weg jederzeit wieder abrufen.
    Ja, das ist komisch.

    Ruf doch den Bot mal direkt aus dem Botfather aus und nimm den Token direkt aus dem Botfather.
    Wie genau meinst du das?

    Gruß,
    Hendrik

    Einen Kommentar schreiben:


  • yachti
    antwortet
    Zitat von henfri Beitrag anzeigen
    Wenn der Token nicht stimmen würde, dann würde es ja auch unter Angabe der chat_id nicht funktionieren, oder?
    ja das stimmt.

    Ich weiß halt nicht, wie ich die chat_id reproduzierbar ermitteln kann.
    Ich meinte jetzt den Token beim ermitteln der ChatID. Hab da nicht zitiert, sorry.
    Ich kann die ChatID über den von mir beschrieben Weg jederzeit wieder abrufen.

    Gruß
    Michael

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Hallo,

    du hast mich falsch verstanden:
    Mein Punkt ist: Es funktioniert ja prinzipiell. Aber halt nur wenn ich die chat_id angebe. Nicht aber wenn ich die chat_id nicht angebe.

    Wenn der Token nicht stimmen würde, dann würde es ja auch unter Angabe der chat_id nicht funktionieren, oder?

    Gruß,
    Hendrik

    Einen Kommentar schreiben:


  • yachti
    antwortet
    Du hast einen zweiten Parameter: Code:

    sh.telegram.msg_broadcast("Test",-100112345678)
    und gibst die chat_id direkt an.
    Das ist die GruppenchatID .
    Ist schon zu lange her aber hatte damit glaube auch Probleme.

    und keine chat_id?
    Vielleicht stimmt der Token nicht. Ruf doch den Bot mal direkt aus dem Botfather aus und nimm den Token direkt aus dem Botfather. Sonst habe ich auch leider keine Idee

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Hallo,

    danke, das hat geholfen.
    Ich habe mein Beispiel aus https://smarthomeng.de/user/plugins/...m/README.html:
    # send a Hello world! message to all your trusted chat ids
    msg = "Hello world!"
    sh.telegram.msg_broadcast(msg)
    Das funktioniert bei mir nicht.

    Du hast einen zweiten Parameter:
    Code:
    sh.telegram.msg_broadcast("Test",-100112345678)
    und gibst die chat_id direkt an.

    So funktioniert es bei mir!

    Jetzt stelle ich mir zwei Fragen:
    1) Warum bekomme ich z.B. jetzt aktuell wieder
    {"ok":true,"result":[]}
    und keine chat_id?
    Ich weiß halt nicht, wie ich die chat_id reproduzierbar ermitteln kann. Mal geht es für einen Moment, meistens nicht. Und meinen Bot muss ich ja wieder löschen, denn ich habe hier ja den Key gepostet.
    2) Warum funktioniert es nicht ohne den zweiten Parameter bei mir?

    Gruß,
    Hendrik

    Einen Kommentar schreiben:


  • yachti
    antwortet
    Hier noch ein Beispiel für senden an eine Gruppe
    Code:
        klingel:
            type: bool
            visu_acl: rw
            knx_dpt: 1
            knx_listen: 11/1/11
            enforce_updates: 'true'
            telegram_message: Es klingelt an der Tür
            telegram_value_match_regex: (true|True|1)  # nur Nachricht senden wenn 1
            info:
                type: bool
                enforce_updates: 'true'
                eval_trigger: haustuer.klingel
                eval: sh.telegram.photo_broadcast("http://10.1.1.1/cgi-bin/api.cgi?cmd=Snap&channel=0&rs=wuuPhkmUCeI9WG7C&user=USER&password=GEHEIM","Türkamera",-1001111111) if sh.haustuer.klingel() == 1 else None

    Einen Kommentar schreiben:


  • yachti
    antwortet
    Bei mir sieht das Item so aus:
    Code:
    service:
        telegram:
            Chat_Ids:
                type: dict
                telegram_chat_ids: 'True'
                enforce_updates: 'true'
                cache: 'True'
                value: "{1234567: 1 }"
            senden:
                type: str
                enforce_updates: 'true'
                telegram_message: '[VALUE]'
    Code:
                 batterie:
                     type: num
                     visu_acl: ro
                     hm_address: 000393C99BFD72
                     hm_channel: 0
                     hm_function: LOW_BAT
                     on_change: service.telegram.senden = 'Stellventil Batterie EG Diele wechseln' if value else 'Stellventil Batterie EG Diele OK
    bei Gruppenchat
    Code:
                eval: sh.telegram.msg_broadcast("Test",-100112345678)

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Hallo,

    bei mir hat es jetzt auch einmal geklappt. Hab natürlich nix anders gemacht...
    https://api.telegram.org/bot20322749...EaY/getUpdates
    Code:
    {"ok":true,"result":[{"update_id":260390476,
    "message":{"message_id":1,"from":{"id":1327917037, "is_bot":false,"first_name":"Hendrik","language_co de":"en"},"chat":{"id":1327917037,"first_name":"He ndrik","type":"private"},"date":1635798860,"text": "/start","entities":[{"offset":0,"length":6,"type":"bot_command"}]}},{"update_id":260390477,
    "message":{"message_id":2,"from":{"id":1327917037, "is_bot":false,"first_name":"Hendrik","languag e_c
    Code:
    telegram:
        name: my_Smarthome_bot
        class_name: Telegram
        class_path: plugins.telegram
        token: '2032274972:AAHE04Z5j3FZSxs0UaVZQgETO3wqU14OEaY'
    Code:
    MyTelegramTest:
        Chat_Ids:
            type: dict
            telegram_chat_ids: True
            cache: 'True'
            # e.g. value: "{ 3234123342: 1, 9234123341: 0 }"
            # a dict with chat id and 1 for read and write access or 0 for readonly access
            # the above grants r/w access to 3234123342 and readonly to 9234123341
            value: "{  1327917037: 1  }"
    Damit sollte doch jetzt dies funktionieren:
    Code:
    msg = "Hello world!" sh.telegram.msg_broadcast(msg)
    Aber ich bekomme kein Hello world auf mein Handy.

    Gruß,
    Hendrik

    Einen Kommentar schreiben:


  • yachti
    antwortet
    Ich habe gerade nochmal einen neuen Testbot erstellt. Das funktioniert einwandfrei
    frage ich jetzt den Bot ab kommt
    Code:
    {"ok":true,"result":[]}
    Screenshot 2021-11-01 211120.png
    dann kommt
    Code:
    {"ok":true,"result":[{"update_id":454971001, "message":{"message_id":1,"from":{"id":179xxxxxx,"i s_bot":false,"first_name":
    Den Screenshot einfügen hat länger gedauert als das erstellen. Man kann da eigentlich nichts falsch machen.

    Einen Kommentar schreiben:

Lädt...
X