diff --git a/docu/docs/plugin/telegram.md b/docu/docs/plugin/telegram.md index c072556..92319d2 100644 --- a/docu/docs/plugin/telegram.md +++ b/docu/docs/plugin/telegram.md @@ -6,7 +6,10 @@ Mit diesem Plugin ist es moeglich, Telegram-Nachrichten für POCSAG-Alarmierunge Außerdem werden Locations versendet, wenn die Felder `lat` und `lon` im Paket definiert sind. (beispielsweise durch das [Geocoding](../modul/geocoding.md) Modul) ## Unterstütze Alarmtypen +- Fms - Pocsag +- Zvei +- Msg ## Resource `telegram` @@ -15,9 +18,12 @@ Außerdem werden Locations versendet, wenn die Felder `lat` und `lon` im Paket d |Feld|Beschreibung|Default| |----|------------|-------| -|message|Format der Nachricht|| |botToken|Der Api-Key des Telegram-Bots|| |chatIds|Liste mit Chat-Ids der Empfängers / der Emfänger-Gruppen|| +|message_fms|Format der Nachricht für FMS|`{FMS}`| +|message_pocsag|Format der Nachricht für Pocsag|`{RIC}({SRIC})\n{MSG}`| +|message_zvei|Format der Nachricht für ZVEI|`{TONE}`| +|message_msg|Format der Nachricht für MSG|| **Beispiel:** ```yaml @@ -25,7 +31,7 @@ Außerdem werden Locations versendet, wenn die Felder `lat` und `lon` im Paket d name: Telegram Plugin res: telegram config: - message: "{RIC}({SRIC})\n{MSG}" + message_pocsag: "{RIC}({SRIC})\n{MSG}" botToken: "BOT_TOKEN" chatIds: - "CHAT_ID" @@ -33,7 +39,7 @@ Außerdem werden Locations versendet, wenn die Felder `lat` und `lon` im Paket d --- ## Modul Abhängigkeiten -Aus dem Modul [Geocoding](../modul/geocoding.md) (optional): +Aus dem Modul [Geocoding](../modul/geocoding.md) (optional/nur POCSAG): - `lat` - `lon` diff --git a/plugin/telegram.py b/plugin/telegram.py index 5dea41f..46018d9 100644 --- a/plugin/telegram.py +++ b/plugin/telegram.py @@ -35,27 +35,65 @@ class BoswatchPlugin(PluginBase): def onLoad(self): """!Called by import of the plugin""" - self.bot = telegram.Bot(token=self.config.get("botToken", default="")) + self.bot = telegram.Bot(token=self.config.get("botToken")) + + def fms(self, bwPacket): + """!Called on FMS alarm + + @param bwPacket: bwPacket instance""" + msg = self.parseWildcards(self.config.get("message_fms", default="{FMS}")) + self._sendMessage(msg) def pocsag(self, bwPacket): """!Called on POCSAG alarm @param bwPacket: bwPacket instance""" - msg = self.parseWildcards(self.config.get("message")) + msg = self.parseWildcards(self.config.get("message_pocsag", default="{RIC}({SRIC})\n{MSG}")) + self._sendMessage(msg) + if bwPacket.get("lat") is not None and bwPacket.get("lon") is not None: logging.debug("Found coordinates in packet") (lat, lon) = (bwPacket.get("lat"), bwPacket.get("lon")) + self._sendMessage(lat, lon) + def zvei(self, bwPacket): + """!Called on ZVEI alarm + + @param bwPacket: bwPacket instance""" + msg = self.parseWildcards(self.config.get("message_zvei", default="{TONE}")) + self._sendMessage(msg) + + def msg(self, bwPacket): + """!Called on MSG packet + + @param bwPacket: bwPacket instance""" + msg = self.parseWildcards(self.config.get("message_msg")) + self._sendMessage(msg) + + def _sendMessage(self, message): for chatId in self.config.get("chatIds", default=[]): try: # Send Message via Telegram logging.info("Sending message to " + chatId) - self.bot.send_message(chat_id=chatId, text=msg) + self.bot.send_message(chat_id=chatId, text=message) + + except Unauthorized: + logging.exception("Error while sending Telegram Message, please Check your api-key") + except (TimedOut, NetworkError): + logging.exception("Error while sending Telegram Message, please Check your connectivity") + except (BadRequest, TelegramError): + logging.exception("Error while sending Telegram Message") + except Exception as e: + logging.exception("Unknown Error while sending Telegram Message: " + str(type(e).__name__) + ": " + str(e)) + + def _sendLocation(self, lat, lon): + for chatId in self.config.get("chatIds", default=[]): + try: + # Send Location via Telegram + if lat is not None and lon is not None: + logging.info("Sending location to " + chatId) + self.bot.sendLocation(chat_id=chatId, latitude=lat, longitude=lon) - # Send Location via Telegram if lat and lon are defined - if lat is not None and lon is not None: - logging.info("Sending location to " + chatId) - self.bot.sendLocation(chat_id=chatId, latitude=lat, longitude=lon) except Unauthorized: logging.exception("Error while sending Telegram Message, please Check your api-key") except (TimedOut, NetworkError):