BOSWatch/BW3-Core

Error in Wildcards Handler

Closed this issue · 7 comments

Hi,

ich habe gerade versucht das Telegram Plugin einzurichten. Mittels curl kann ich im Chat Nachrichten senden, die kommen auch an.

curl https://api.telegram.org/bot1621634058:AAFzOmGWLIILIwFIYx8u9JJ-z/sendMessage -d chat_id=-552117958 -d text="Testnachricht"

*Token und Chat ID geändert

Nun habe ich das Plugin in die config aufgenommen:

  - type: plugin
    name: Telegram Plugin
    res: telegram
    config:
      message_pocsag: "{RIC}({SRIC})\n{MSG}"
      botToken: "1621634058:AAFzOmGWLIILIwFIYx8u9JJ-z"
      chatIds:
        - "-552117958"    

server yaml gestartet. Bei der nächsten RIC die reinkommt, nun diese Fehlermeldung:

15.02.2021 22:50:07,515 - pluginBase      [ERROR   ] [plugin.telegram] alarm error
Traceback (most recent call last):
  File "/opt/boswatch3/plugin/pluginBase.py", line 90, in _run
    self.pocsag(bwPacket)
  File "/opt/boswatch3/plugin/telegram.py", line 82, in pocsag
    msg = self.parseWildcards(self.config.get("message_pocsag", default="{RIC}({SRIC})\n{MSG}"))
  File "/opt/boswatch3/plugin/pluginBase.py", line 192, in parseWildcards
    return wildcard.replaceWildcards(msg, self._bwPacket)
  File "/opt/boswatch3/boswatch/wildcard.py", line 102, in replaceWildcards
    message = message.replace(wildcard, bwPacket.get(field))
TypeError: replace() argument 2 must be str, not None
15.02.2021 22:50:07,516 - pluginBase      [DEBUG   ] [plugin.telegram] teardown()
15.02.2021 22:50:07,516 - pluginBase      [DEBUG   ] [plugin.telegram] took 0.004 seconds
15.02.2021 22:50:07,517 - router          [DEBUG   ] [Router 1] finished

Habe ich noch etwas vergessen einzurichten?

Lag daran, dass ich noch keine Filter eingerichtet hatte. Daher kam jede menge Müll rein.
telegram.py Zeile 82 ersetzen mit:

        try:
            msg = self.parseWildcards(self.config.get("message_pocsag", default="{RIC}({SRIC})\n{MSG}"))
        except:
            msg = "Alarm ohne Nachricht"
            logging.warning("None msg ")
        self._sendMessage(msg)

Dann kann man auch ohne Filter testen. Wollte deswegen nur kein PR erstellen.

Das scheint aber wohl ein generelles Problem zu sein, sollte eigentlich garnicht auftretenz dass das message field leer ist, dann sollte das denke ich ein leerer string sein.

Meinung @Schrolli91 ?

Hier läuft definitiv was falsch - der Fehler passiert ja bei den "extra" wildcards.
Je nach genutzten Modulen sollten dort aber gar keine drin sein.

@raugbein Wir bräuchten hier mal einen vollständigen Log, vom Hochlauf bis zum ersten fehlgeschlagenen Alarm - sensible Daten bitte schwärzen.

Hi,
Hier der server.log im Anhang und die Server.yaml

server.log

server.yaml.txt

Zusätzliche Frage, kann man eine RIC über Kommandline an den Server schicken?

So ohne weiteres geht das nicht, ich habe mot mal irgendwann den TCPClient genommen und damit was zum schicken von den alarm-json's gebastelt, das hat wohl funktioniert, aber war doof gelöst.

Bitte nimm mal sas descriptor-modul raus, da fragst du fms felder ab, obwohl du vorher alles bisauf pocsag raus filters.
Scheint dennoch ein Bug zu sein, dass dann Felder (gewiped?!) werden bzw. der mode sich verstellt.

Ich glaube der Fehler kommt zustande, weil ein Custom Wildcard registiert wird, allerdings für ein Feld, dass in diesem Paket Typ nicht vorhanden ist.
Der Fehler tritt ja nur bei dem Custom Wildcards auf.
Ist also wohl wirklich ein Bug, denn es kann ja sein das ein anderer Router andere Pakete liefert - wildcards sind ja global.

# only pocsag at this point
# tone is zvei - field not available here

      - scanField: tone 
        descrField: description
        wildcard: "{DESCR}"
        descriptions: