Ankündigung

Einklappen
Keine Ankündigung bisher.

Telegram, Alternative zu WhatsApp

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

  • Cannon
    antwortet
    Zitat von Sisamiwe Beitrag anzeigen
    Klingt interessant. Und wie funktioniert das genau?
    Das ich alles was an "Messages" so zu versenden habe in einer Stelle habe. Und das da von überall aufrufen kann. Das gleiche gilt auch für Szenen und man könnte das auch für E-Mails nutzen.

    Entweder in einer Logik:

    Code:
    sh.Service.Telegram.Senden('Test!')
    Oder in einem Item:

    Code:
    schalten:
        type: bool
        knx_dpt: 1
        knx_cache: 10/4/5
        knx_send: 10/4/5
        on_change: Service.Telegram.Senden = 'Der Lichtschalter ist eingeschaltet.' if value else 'Der Lichtschalter ist ausgeschaltet.'
    Langfristig, kann man das vielleicht auch mit Alexa verbinden zur Sprachausgabe.

    Und Fehler sind dann in der Regel nur an einer Stelle zu suchen.

    Zu deinem Fehler: Ich würde das auch mal mit on_change oder on_update probieren. Und um möglicherweise doppelte Zuweisungen zu vermeiden, den Telegram-Kram eben in einer Stelle legen. Da gabs auch mit dem letzten Update die Notwendigkeit, die ChatId so anzulegen, wie ichd as in dem Beispiel gemacht habe. In anderen Fällen funktionierte das nicht richtig.

    Einen Kommentar schreiben:


  • Sisamiwe
    antwortet
    Zitat von Cannon Beitrag anzeigen
    Ich habe mir (nicht nur für Telegram) eine Service-Gruppe gemacht:
    Klingt interessant. Und wie funktioniert das genau?

    Einen Kommentar schreiben:


  • Cannon
    antwortet
    Das "telegram_value_match_regex" ist meiner Meinung nach in diesem Fall gar nicht notwendig. Allerdings stellt sich mir die Frage, wo denn die ChatId definiert ist?

    Ich habe mir (nicht nur für Telegram) eine Service-Gruppe gemacht:

    Code:
    Service:
        Telegram:
            Chat_Ids:
                type: dict
                telegram_chat_ids: True
                cache: 'True'
                value: '{ XXXXXXXXX: 1 }'
    
            Senden:
                type: str
                telegram_message: '[VALUE]'

    Einen Kommentar schreiben:


  • ivande
    antwortet
    scheint etwas doppelt zu laufen. Hast du zwei Plugin Instanzen aktiv? Wenn es möglich ist versuch einmal dein System zu rebooten..

    Einen Kommentar schreiben:


  • Sisamiwe
    antwortet
    Danke.
    Klappt aber auch nicht. Im Log steht folgendes:
    WARNING plugins.telegram Update None caused error Conflict: terminated by other getUpdates request; make sure that only one bot instance is running (409

    Einen Kommentar schreiben:


  • ivande
    antwortet
    versuch es mit:
    Code:
    telegram_value_match_regex: (true|True|1)
    Gruß Ivan

    Einen Kommentar schreiben:


  • Sisamiwe
    antwortet
    Hallo,

    ich möchte mit täglich per Mail und telegram eine "Lebensnachricht" senden lassen.

    item.yaml
    Code:
    %YAML 1.1
    ---
    maintenance:
        watchdog:
            dailymail:
                type: bool
                eval: sh.mailsend('michaelwenzel@vodafone.de', 'shNG2 Watchdog', 'shNG2 gehts prima')
                crontab: 30 18 * * = 1
                enforce_updates: yes
                telegram_message: 'shNG2 gehts prima'
                telegram_value_match_regex: 1
    Per Mail klappt, per telegram leider nicht. Andere telegram Nachrichten klappen auch.

    Was mache ich falsch?
    Danke Euch.

    Einen Kommentar schreiben:


  • bmx
    antwortet
    Ok, ich habe das Plugin mal erweitert um dieses Problem beim Init als Fehler zu loggen.

    Einen Kommentar schreiben:


  • android
    antwortet
    Problem lag beim token...

    Einen Kommentar schreiben:


  • android
    antwortet
    Ja, das Item habe ich angelegt. Auf einem anderen System hab ich die gleiche Version mit gleicher konfig schon am laufen. Gefühlt scheint irgendwas von den Versionen nicht zu passen oder ein Paket fehlt, aber keine wie ich dahinter komme....

    Einen Kommentar schreiben:


  • bmx
    antwortet
    Zitat von bmx Beitrag anzeigen
    Ja, lies mal die Readme der develop Version. (develop ist work in progress)
    Da u.a. steht drin, das Du jetzt ein Item mit User-ID und Berechtigung benötigst.
    Hast Du obiges bereits berücksichtigt und umgesetzt? Aus develop ist für 1.6 ja release geworden ...

    Einen Kommentar schreiben:


  • android
    antwortet
    Habe einen Raspberry mit alten 1.5 Image von OnkelAndy hochgerüstet auf 1.6 und will dort jetzt das telegram Plugin nutzen, jetzt bekomm ich noch den Fehler aus dem Pulgin beim hochlaufen:
    Code:
    2019-08-01  08:17:23 INFO     Main         Loading '/usr/local/smarthome/plugins/telegram/plugin.yaml' to 'OrderedDict'
    2019-08-01  08:17:24 INFO     Main         plugin 'telegram': Metadata paramlist = '['token', 'name', 'long_polling_timeout', 'welcome_msg', 'bye_msg', 'no_access_msg', 'no_write_access_msg', 'pretty_thread_names']'
    2019-08-01  08:17:24 INFO     Main         plugin 'telegram': Metadata itemdeflist = '['telegram_message', 'telegram_info', 'telegram_text', 'telegram_value_match_regex', 'telegram_chat_ids']'
    2019-08-01  08:17:24 INFO     Main         plugin 'telegram': Metadata plugin_functionlist = '['msg_broadcast', 'photo_broadcast']'
    2019-08-01  08:17:24 INFO     Main         plugin 'telegram': Metadata get_plugin_function_defstrings -> '['msg_broadcast(msg, chat_id)', 'photo_broadcast(photofile_or_url, caption, chat_id)']'
    2019-08-01  08:17:24 INFO     Main         plugin 'telegram': Metadata get_plugin_function_defstrings -> '['msg_broadcast(msg:str, chat_id:int)', 'photo_broadcast(photofile_or_url:str, caption:str, chat_id:int)']'
    2019-08-01  08:17:24 INFO     Main         plugin 'telegram': Metadata get_plugin_function_defstrings -> '['msg_broadcast(msg, chat_id)', 'photo_broadcast(photofile_or_url, caption, chat_id)']'
    2019-08-01  08:17:24 INFO     Main         plugin 'telegram': Metadata get_plugin_function_defstrings -> '['msg_broadcast(msg:str, chat_id:int)', 'photo_broadcast(photofile_or_url:str, caption:str, chat_id:int)']'
    2019-08-01  08:17:24 INFO     Main         Loading '/usr/local/smarthome/plugins/telegram/locale.yaml' to 'dict'
    2019-08-01  08:17:24 INFO     Main         Plugin 'telegram': Loaded plugin translations = {'no items found with the attribute %s': {'fr': 'Ne pas trouvée une Item avec %s', 'en': '=', 'de': 'Keine Items mit Attribut %s gefunden'}, 'I will hide the keyboard': {'fr': 'Je cache le clavier', 'en': '=', 'de': 'Ich blende die Bedientasten aus'}, 'choose': {'fr': 'Choisissez parmi', 'en': '=', 'de': 'Auswählen'}, 'Info from the items:': {'fr': 'Info sur les Items:', 'en': '=', 'de': 'Infos von den Items:'}, 'unknown command %s': {'fr': 'commande inconnue %s:', 'en': '=', 'de': 'Unbekanntes Kommando %s:'}}
    2019-08-01  08:17:24 INFO     Main         plugin 'telegram': value not found in plugin configuration file for parameter 'long_polling_timeout' -> using default value '120.0' instead
    2019-08-01  08:17:24 INFO     Main         plugin 'telegram': value not found in plugin configuration file for parameter 'welcome_msg' -> using default value 'SmarthomeNG Telegram Plugin is up and running' instead
    2019-08-01  08:17:24 INFO     Main         plugin 'telegram': value not found in plugin configuration file for parameter 'bye_msg' -> using default value 'SmartHomeNG Telegram Plugin stops' instead
    2019-08-01  08:17:24 INFO     Main         plugin 'telegram': value not found in plugin configuration file for parameter 'no_access_msg' -> using default value 'This bot does not know your chat id and thus does not trust it, you are not allowed to use this bot' instead
    2019-08-01  08:17:24 INFO     Main         plugin 'telegram': value not found in plugin configuration file for parameter 'no_write_access_msg' -> using default value 'This bot knows your chat id but you are not allowed to use this bot to write to items' instead
    2019-08-01  08:17:24 INFO     Main         plugin 'telegram': value not found in plugin configuration file for parameter 'pretty_thread_names' -> using default value 'True' instead
    2019-08-01  08:17:31 ERROR    Main         Plugin 'telegram' from section 'telegram' exception: Unauthorized
    Traceback (most recent call last):
      File "/usr/local/smarthome/lib/plugin.py", line 145, in __init__
        plugin_thread = PluginWrapper(smarthome, plugin, classname, classpath, args, instance, self.meta, self._gtrans)
      File "/usr/local/smarthome/lib/plugin.py", line 627, in __init__
        exec("self.plugin.__init__(smarthome{0}{1})".format("," if len(arglist) else "", argstring))
      File "<string>", line 1, in <module>
      File "/usr/local/smarthome/plugins/telegram/__init__.py", line 109, in __init__
        self.logger.info("Telegram bot is listening: {0}".format(self._bot.getMe()))
      File "/usr/local/lib/python3.5/dist-packages/telegram/bot.py", line 65, in decorator
        result = func(self, *args, **kwargs)
      File "/usr/local/lib/python3.5/dist-packages/telegram/bot.py", line 204, in get_me
        result = self._request.get(url, timeout=timeout)
      File "/usr/local/lib/python3.5/dist-packages/telegram/utils/request.py", line 253, in get
        result = self._request_wrapper('GET', url, **urlopen_kwargs)
      File "/usr/local/lib/python3.5/dist-packages/telegram/utils/request.py", line 221, in _request_wrapper
        raise Unauthorized(message)
    telegram.error.Unauthorized: Unauthorized
    Kann mir jemand da weiterhelfen? Die gleiche Plugin Konfig nutze ich auf einem anderen System und da läufts. Danke

    Einen Kommentar schreiben:


  • grisu911
    antwortet
    Die Diagramme hole ich mir von Grafana, welches auf einer anderen virtuellen Maschine als Docker läuft.
    Auf der Maschine wo Smarthome.py läuft wird per crontab jede Minute ein Image vom Grafana Diagramm abgelegt:
    Code:
    * * * * * /usr/bin/curl -s 'http://user:pass@192.168.178.100:3000/render/d-solo/a2epkjemz/wetterstation?orgId=1&panelId=6&from=now-12h&width=800&height=600&timeout=45' > /home/smarthome/img/luftfeuchte.png &>/dev/nul$
    gesendet wird es dann mit:
    Code:
    if sh.Info.Message() == 'Luftfeuchte':
        bot.sendPhoto(chat_id=chat_id, photo=open('/home/smarthome/img/luftfeuchte.png', 'rb'))
    Sicherlich nicht die eleganteste Variante, aber es reicht mir ersteinmal.

    Einen Kommentar schreiben:


  • ivande
    antwortet
    toll was Du Dir da zusammengebaut hast.. wenn ich unterwegs bin hole ich mir mit dem telegram-plugin auch gerne den Status von Wetter + Co,..

    wie holst bzw. wie schickst Du Dir denn Diagramme von SH?


    Zitat von grisu911 Beitrag anzeigen
    Das was ich noch nicht hinbekommenhabe ist das auch mit InlineKeyboard zu realisieren. Somit könnte man besser auf bestimmte Aktionen reagieren.
    hab auch schon einmal versucht mit InlineKeyboard zu experimentieren, bin aber auch nicht weiter gekommen. Wäre interessant um Item-Werte zu Ändern.. bisher habe ich testweise im Plugin eine Funktion eingebaut um Items (boolean) zu toggeln,..

    Code:
    #wenn das Item True ist wird eine Logik getriggert welche das Bild der Kamera sendet
    Trigger_Kamera:
        type: bool
        autotimer: 2 = 0
        floor: trigger
        visu_acl: rw
        value: 0
        telegram_control:
        - name: Kamera,    # Kamera Button wird in telegram im Menu "Control" angelegt
        - type: toggle          # Beim Klicken auf den Button "Kamera" Toggelt das Item auf 1 (für 2 Sekunden wegen autotimer)
    Gruß Ivan

    Einen Kommentar schreiben:


  • grisu911
    antwortet
    Hallo,

    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.

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

    Bild1.jpeg Bild2.jpeg

    Hier mal mein Logik in Auszügen:
    PHP-Code:
    #!/usr/bin/env python3
    # telegram_message.py
    import telegram
    from telegram import InlineKeyboardButton
    InlineKeyboardMarkup
    from telegram
    .ext import Updater,CommandHandler,MessageHandler,Filters,CallbackQueryHandler
    import logging
    import locale
    from datetime import datetime
    bot 
    telegram.Bot('xxxxxxxx:xxxxxxxxxxxxbmLzIR19WtMXmQ8mnuOxK0')

    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']]

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

    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))
    if 
    sh.Info.Message() == 'Location':
        
    bot.send_message(chat_id=chat_idtext='Bitte auswählen:'reply_markup=telegram.ReplyKeyboardMarkup(custom_keyboard_locationresize_keyboard=True))
    if 
    sh.Info.Message() == 'Tanken':
        
    bot.send_message(chat_id=chat_idtext='Bitte auswählen:'reply_markup=telegram.ReplyKeyboardMarkup(custom_keyboard_tankenresize_keyboard=True))
    if 
    sh.Info.Message() == 'Wetter':
        
    bot.send_message(chat_id=chat_idtext='Bitte auswählen:'reply_markup=telegram.ReplyKeyboardMarkup(custom_keyboard_wetterresize_keyboard=True))
    if 
    sh.Info.Message() == 'Diagramme':
        
    bot.send_message(chat_id=chat_idtext='Bitte auswählen:'reply_markup=telegram.ReplyKeyboardMarkup(custom_keyboard_diagrammresize_keyboard=True))
    if 
    sh.Info.Message() == 'Tore':
        
    bot.send_message(chat_id=chat_idtext='Bitte auswählen:'reply_markup=telegram.ReplyKeyboardMarkup(custom_keyboard_toreresize_keyboard=True))
    if 
    sh.Info.Message() == 'Schalten':
        
    bot.send_message(chat_id=chat_idtext='Bitte auswählen:'reply_markup=telegram.ReplyKeyboardMarkup(custom_keyboard_schaltenresize_keyboard=True))

        
    #Massages
    #Wetter
    if sh.Info.Message() == 'aktuell':
        
    bot.sendMessage(chat_id=chat_id, \
            
    text='<b>Wetter:</b>\n<i>aktuelle. Temp.:</i> ' str(sh.Wetterstation.Wetter_var.w_temperatur()) + ' °C \
            \n<i>gefühlte Temp.:</i> ' 
    str(sh.Wetterstation.Wetter_var.w_windchill()) + ' °C \
            \n<i>rel. Luftfeuchte:</i> ' 
    str(sh.Wetterstation.Wetter_var.w_feuchte_rel()) + ' % \
            \n<i>Regen letzte h:</i> ' 
    str(sh.Wetterstation.Wetter_var.w_regen_letzte_h()) + ' l/m² \
            \n<i>Regen heute:</i> ' 
    str(sh.Wetterstation.Wetter_var.w_regen_mm_heute()) + ' l/m² \
            \n<i>Luftdruck:</i> ' 
    str(sh.Wetterstation.Wetter_var.w_barometer()) + ' hPa \
            \n<i>Luftdrucktrend:</i> ' 
    str(sh.Wetterstation.Wetter_var.w_barotrend()) + \
            
    '\n<i>Wind Mittel:</i> {:3.2f}'.format(sh.Wetterstation.Wetter_var.w_wind_mittel.w_wind_mittel_kmh()) + ' km/h \
            \n<i>Wind Spitze:</i> {:3.2f}'
    .format(sh.Wetterstation.Wetter_var.w_wind_mittel.w_wind_mittel_kmh()) + ' km/h ' \
            , 
    parse_mode=telegram.ParseMode.HTML)

    if 
    sh.Info.Message() == 'historisch':
        
    bot.sendMessage(chat_id=chat_id, \
            
    text='<b>Wetter:</b>\n<b>Gestern:</b>\n<i>min. Temp.:</i> ' str(sh.Wetterstation.Wetter_var.w_temperatur.TempMinGestern()) + ' °C \
            \n<i>max Temp.:</i> ' 
    str(sh.Wetterstation.Wetter_var.w_temperatur.TempMaxGestern()) + ' °C \
            \n<i>Regenmenge:</i> ' 
    str(sh.Wetterstation.Wetter_var.w_regen_mm_gestern()) + ' l/m² \
            \n<b>diese Woche:</b> \
            \n<i>min. Temp.:</i> ' 
    str(sh.Wetterstation.Wetter_var.w_temperatur.TempMinWoche()) + ' °C \
            \n<i>max. Temp.:</i> ' 
    str(sh.Wetterstation.Wetter_var.w_temperatur.TempMaxWoche()) + ' °C \
            \n<b>dieser Monat:</b> \
            \n<i>min. Temp:</i> ' 
    str(sh.Wetterstation.Wetter_var.w_temperatur.TempMinMonat()) + ' °C \
            \n<i>max. Temp:</i> ' 
    str(sh.Wetterstation.Wetter_var.w_temperatur.TempMaxMonat()) + ' °C '\
            , 
    parse_mode=telegram.ParseMode.HTML

    Über die ChatID können für jeden "Nutzer" eigene Keyboards definiert werden. Es wurden bei jedem "Nutzer" eine eigene Gruppe in Telegram erstellt und als Gruppenmitglieder der Bot und der "Nutzer" selbst. Somit ist sichergestellt das jeder "Nutzer" auch nur die Infos zurückbekommt die er gerade "angefordert" hat.

    Ich habe mir damit solche Spielereien realisiert wie: Garagen- und Hoftor öffnen, NAS per WOL starten, Daten der Wetterstation abfragen, günstigste Tankstelle im Umkreis von x km anzeigen. Der Fantasie sind hier sicherlich keine Grenzen gesetzt.

    Das was ich noch nicht hinbekommenhabe ist das auch mit InlineKeyboard zu realisieren. Somit könnte man besser auf bestimmte Aktionen reagieren.

    Gruß grisu911
    Angehängte Dateien

    Einen Kommentar schreiben:

Lädt...
X