Giter VIP home page Giter VIP logo

schrolli91 / boswatch Goto Github PK

View Code? Open in Web Editor NEW
132.0 47.0 60.0 1.7 MB

Python Script to process input data from rtl_fm and multimon-NG - multiple Plugin support

Home Page: https://bwcc.boswatch.de

License: GNU General Public License v2.0

PHP 11.62% Shell 4.73% Python 64.62% CSS 16.62% JavaScript 1.77% Hack 0.64%
fms pocsag zvei feuerwehr rettungsdienst rtl-fm multimon python decoder radio

boswatch's People

Contributors

cjharms avatar dabenzel avatar daguich avatar dk5ra avatar essigt avatar f-kessler avatar flothi avatar fwmarcel avatar grosj avatar imsoftware avatar jbollacke avatar jhcd avatar kruegerj avatar larsvommars avatar lgremme avatar marsch1 avatar mrduckspace avatar peterlaemmle avatar philipgiuliani avatar rumbel84 avatar schrolli91 avatar sesu85 avatar smith-fms avatar tauebenuss avatar thejockel avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

boswatch's Issues

Filter - Nur Daten, die in CSV vorhanden sind erlauben

Kann jemand eine Lösung einbauen die es ermöglicht nur RICs / Kennungen zu erlauben die in der passenden Description Datei vorhanden sind ? Denke wer auch immer das geschrieben hat kann das schneller als ich, danke.

Quellcode in UTF-8

Änderung der Kodierung des Quellcodes in UTF-8.

  • alle Dateien ändern
  • Datei-Header anpassen

Passwörter im Log

Wäre es nicht sinnvoll alle Passwortdaten etc. aus dem Log zu löschen, halte ich für nicht so sicher ...??!

NMA-Plugin

NotifyMyAndroid-Unterstützung einbauen.

  1. als normales Plugin
  2. als Infodienst im Fehlerfall (siehe #46)

E-Mail: Unterscheidung nach Sub-RIC

Servus,

wäre es nicht sinnvoll, die E-Mail-Aktion noch zusätzlich nach Sub-RIC zu unterscheiden? Bei uns wird via D bspw. der Probealarm alarmiert, da muss ich keine E-Mail versenden; bei A-C hingegen schon (und ggf. das als Alarmierung für zB GroupAlarm nutzen).

VG

Deutsche Schritt für Schritt Anleitung?

Liebe Community!
Ich bin über einen Tipp in einem Forum auf dieses Programm/Plugin gestoßen, hab jedoch keine Ahnung wie ich es richtig anwenden kann. Ich nutze SDR Sharp und PDW Pager zum Empfangen und Anzeigen von POCSAG Signalen. Da diese in letzter Zeit jedoch nur noch verschlüsselt gesendet werden, war ich auf der suche nach einem entsprechenden Programm zum entschlüsseln dieser Nachrichten und bin dabei auf BOSWatch gestoßen. Leider stieß ich jedoch bereits bei der Anleitung auf Probleme sodass ich jetzt keine Ahnung habe, wie ich BOSWatch nutzen kann. Daher meine Frage/Bitte - hat sich vielleicht mal jemand die Mühe gemacht, eine Schritt für Schritt Anleitung für Neulinge zu verfassen? Bzw. gibt es die Anleitung auch auf Deutsch? Danke für eure Hilfe und LG

Visualisierung der letzten Alamierungen und Statis

Hallo,

Möchte mal kurz ein kleines neues Projekt von mir vorstellen:

Das Plugin wird in der Lage sein ein Arduino zu steuern welcher x beliebig viele LED's schaltet.
Die Idee dahinter:
Wir haben eine große Karte mit allen Wachen drauf verzeichnet, diese wird auf Holz geklebt und dann von hinten für jede Wache eine LED eingesetzt. ( eventuell RGB LEDs) Bei eingehendem Alarm fängt die Lampe an rot zu blinken, wird der Status von 2 auf 3 gewechselt wird die Lampe nur noch Rot, wird die 4 gedrückt im FMS wird die LED grün, in der 1 gelb und so weiter und sofort.

Schritt eins wird erstmal sein die POCSAG Meldungen zu übergeben und alleine auszuwerten (rotes Blinken für 5 min)

Danach eine Verbindung zwischen POCSAG-RIC und FMS-Kennung herzustellen.
Dann die einzelnen Statis auszuwerten.

PS. Warum schreibe ich den Text..? Nicht das wir uns hier doppelte Arbeit machen

BOSWatch Überwachung/Watchdog

Wunsch-Feature:
Überwachung, ob BOSWatch noch arbeitet.
Im POCSAG werden alle n Minuten "keep alive"-Signale gesendet.
Wenn die nicht in BOSWatch ankommen, ist was fault.

Lösungsidee:
Asynchroner Timertask, der schaut, ob alle x Miuten ein Alarm verarbeitet wurde.

POCSAG Doppelung

POCSAG Nachrichten werden zwei Mal angezeigt, wenn mehrere Nachrichten auf einmal gesendet werden. ( Trotz eingeschalteter Doppelfunktion)

Ex.:

1130506
1130607
1130506
1130607

Testdaten-Treiber

Für den Test der umfangreichen Funktionen wird ein Testtreiber mit entsprechenden Testdaten benötigt.

1.) [x] Implementierung des Testreibers (Aufruf mit -t)
2.) Bereitstellung von Testdaten-Strings, die möglichst viele Funktionen abdecken:

  • FMS
  • FMS ungültig
  • FMS mit Eintrag im Description-lookUp
  • FMS Duplikat
  • POC512/1200/2400
  • POC mit allen 4 Funktionen
  • POC mit Text
  • POC ohne Text
  • POC ungültig
  • POC mit Eintrag im Description-lookUp
  • POC Duplikat
  • ZVEI
  • ZVEI mit Wiederholton (F)
  • ZVEI mit Sirenenauslösung
  • ZVEI ungültig
  • ZVEI mit Eintrag im Description-lookUp
  • ZVEI Duplikat
  • Range-Filter
  • Ignore-Filter

Zeitfunktionen in Plugins

Um jegliche (maximal eine Sekunde) Differenzen in der Alarmzeit zu eliminieren, schlage ich vor, ein data[time] einzuführen, damit jeder Alarm im Plugin die selbe Zeit hat - ansonsten kann es passieren, das ein Plugin 13:41:50 und das nächste 13:41:51 bekommt...
Was haltet ihr davon? 👍 ? 👎 ?

mysql Plugin

Habe ich das nicht gesehen oder gib es keine Beschreibung welche Felder in den Tabellen angelegt werden sollen?

MySQL Plugin testen

Ich habe gerade das MySQL Plugin ein wenig erweitert.
Aktuell kann ich es aber nicht testen, evtl könnte das jemand mal für mich übernehmen und mir eine Rückmeldung geben.

Grüße

EDIT:
Achtung die Datenbank Struktur hat sich ein wenig geändert. Es sollte also die neuste boswatch.sql eingespielt werden. Befindet sich jetzt im Ordner des MySQL Plugins.

Empfang CRC Fehler

Unten ein Auszug aus meinen LOG

Ich habe wohl schlechten Empfang, hier meine Frage wie sieht euer Setup aus?
Ich benutze einen raspberry pi mit DVB-T Stick mit (RTL2838UHIDIR) Chip und die Mitgelieferte Antenne.
Ich habe das Setup schon an verschiedenen Orten im Haus getestet.
Brauche ich eine Andere Antenne oder einen LNA Vorverstärker?
Hat jemand ein anderes Setup?
Der Gain in BOSWatch steht Standard mäßig auf 100, da habe ich auch schon kurz mit rumgespielt, macht das Sinn?

LOG
23.07.2015 16:02:19 - decoder [DEBUG ] recieved FMS
23.07.2015 16:02:19 - fms [WARNING ] FMS CRC incorrect
23.07.2015 16:02:19 - decoder [DEBUG ] recieved FMS
23.07.2015 16:02:19 - fms [WARNING ] No valid FMS: af238121s
[...]
23.07.2015 19:33:59 - decoder [DEBUG ] recieved FMS
23.07.2015 19:33:59 - fms [WARNING ] FMS CRC incorrect

Exception-Handling in PlugIns

Wenn PlugIn A eine Exception wirft, kann es passieren, dass das PlugIn B nicht mehr aufgerufen wird.
Lösung: try-cath-Block in alarmHandler.py plugin.run(typ,freq,data) mit exception: pass

Sammelalarm

Hallo,

Hab da eine Idee, mir fehlt aber noch der richtige Gedanke zur Umsetzung:

Es wird ja meist nicht nur eine Einheit Alamiert für eine Schadenslage, sondern meist mehrere.
Ich will nun das abfangen und global bereit stellen damit ich auf meinem Alarmmonitor darstellen kann wer noch alles kommt.
Also:
Ric1
Ric2
RicX werden alamiert innerhalb von y Sekunden zwischen den Meldungen Alamiert,
Schreibe alle Discriptions und RICs in 2 verschiedene Strings mit Komma getrennt und gebe es aus wenn Ric1 auch Alamiert ist als Pseudo-ric oder zvei ?!

Jemand ne Idee ?

data[description] --> falscher Zeichensatz

Überschrift sagt alles. data[description] ist in einem falschen Zeichensatz. daher hängt die Übergabe zu firEmergency .

Momentan hilft mir in der firE.py Zeile 102: einfach ein .encode('UTF-8') an das data[description]
Woher das rührt, ist mir unbekannt.

Zwei Frequenzen mit zwei Adaptern

Hallo zusammen,
ist es möglich zwei Frequenzen (FMS/POCSAG) mit zwei Adaptern an einem RPi auszuwerten? Wenn eine zweite Instanz gestartet wird, wird rtl-fm nicht ein zweites Mal geöffnet.
Grüße

Aktuellen Dev-Branch testen

Hallo zusammen,

falls jemand Lust hat, den aktuellen Dev-Branch ein bisschen auf Herz und Nieren zu testen, würde ich mich über Feedback und Berichte über evtl. auftauchende Probleme freuen.

Wenn das ganze nämlich soweit stabil läuft, würde ich das ganze gerne offiziell in den Master übernehmen.

eMail-Versand an mehrere Empfänger

Moin, moin,

folgender Fehler wurde im FMS-Forum gepostet:

Problem mit dem versenden von Emails,
d.h. es wird nur an die erste Adresse in der Zeile verschickt,
ich habe schon diverse Alternativen ausprobiert, allerdings ohne Erfolg:

1. to = user@irgendwo, user2@woanders
2. to = user@irgendwo,user2@woanders
3. to = user@irgendwo; user2@woanders
4. to = user@irgendwo;user2@woanders

der erste user@irgendwo bekommt die Email, alles was dahinter steht wird ignoriert :-(

Multimon-NG quiet Mode

Aus dem multimon-ng code:

if (!quietflg)
        fprintf(stdout, "Enabled demodulators:");

https://github.com/EliasOenal/multimon-ng/blob/master/unixinput.c ab Zeile 759

Was passiert wenn multimon im quiet mode startet?
Kommen die Decoder Ausgaben dann trotzdem zustande?
So könnte man die Ausgabe von dieser Zeile komplett unterbinden und erspart sich das Abfangen in der decoder.py

# For POCSAG we have to ignore the multimon-ng line "Enabled demodulators:"
elif "Enabled demodulators:" in decoded:
    pass

decoder.py ab Zeile 41

Da ich aktuell kein System zum testen habe, weis ich nicht was multimon ausspuckt wenn man es im quiet Mode startet. Wäre schön wenn sich das mal jemand anschauen könnte.

Dann würde ich die decoder.py sowie den multimon-ng Aufruf noch anpassen.

Lookup Description Funktion für Webinterface

Feature Request/Verbesserung: Die Description Lookup Funktion ist momentan leider noch nicht im BOSWatch "WebInterface" umgesetzt.

Wäre klasse wenn diese Funktion dort ebenfalls implementiert werden könnte.

Stdout fehlerhaft

Hallo,

Die Ausgabe des Programms wird trotz Disown im Terminal angezeigt.

"How to Code Plugins" - Readme schreiben

Es wäre so langsam mal angebracht, alle Informationen die zum schreiben eines Plugins von Relevanz sind, zentral als keines Readme zusammenzuschreiben.
Evtl. auch anhand von Beispielen zusammen mit dem template Plugin das ganze besser nachvollziehbar gestalten.

Wichtige Punkte die mit rein müssen:

  • Grundgerüst eines Plugins (.onload() und .run())
  • Benutzen des Loggers
  • Loglevel passend wählen
  • Nutzung der config.ini + Einlesen der Daten
  • Erklärung der globalen Hilfs-Funktionen
  • Verarbeitung der von BOSWatch bereitgestellten Daten

Am ende soll die interface.txt komplett abegelöst werden

Verschlucken den Alpha-Meldungen

Der neue doublefilter verschluckt meine Textnachrichten.
Bedeutet:
Es werden 3x Ton Rufe ausgesendet dann 3x Textmeldungen. Wenn der erste Tonruf in die Liste geschrieben wird sind die Textmeldungen weck...
Heißt also, man muss überprüfen ob es ein Text dabei gibt..?

UTF-Support für CSV-Files

Aktuell gibt es Probleme beim Import der csv-Files für die description.

  • Ist das file ANSI, platzt json bei Sonderzeichen.
  • eMail-Plugin verträgt kein UTF-8 keine Proleme,
  • MySQL noch nicht getestet
  • Bei UTF-8-Dateien gibt es Probleme mit der Verarbeitung der Spaltenüberschriften.

ToDos:

  • Korrekte Umwandlung der Strings für BOSWatch, wenn csv nicht UTF-8
  • Korrekte Verarbeitung, wenn csv in UTF-8
  • Korrekte Verarbeitung in eMail-Plugin
  • Prüfung MySQL-Plugin
  • Prüfung firEmergency

Alarmonitor/Bildschrim zeitgesteuert an-/ausschalten

Hallo,

habe ein Alarmmonitor Plugin geschrieben, allerdings durchblicke ich nicht wo ich eine Funktion einbringen kann die Überprüft ob der Alarm länger als 30 min her ist und das Display wieder ausschaltet. Habt ihr irgendeine Idee?

cannot send HTTP request

Ich nutze seit gestern dieses fantastische Tool und komme ganz gut zurecht.
Nun möchte ich aber bei einem empfangenen "Alarm" einen http-request ausführen. Die Parameter sollen in einer PHP weiterverarbeitet werden, sodass im Endergebnis eine Pushnachricht auf's iPhone erfolgt.

Leider scheitert es bereits beim http request:
request_error

Die config.ini sieht so aus:
config

Wenn ich die Adresse mit der PHP so im Browser aufrufe, funktioniert es. Ich kriege es nur nicht hin, dass die Datei im Plugin aufgerufen wird. Ich bin nicht der Experte, aber liegt es am GET-Befehl in der Plugin-Datei? Es müssen für meine Erfordernisse streng genommen keine Werte zurückgegben werden. Es reicht, wenn die PHP mit entsprechenden Parametern aufgerufen wird. Sozusagen Fire and forget.

Gruß, Christian

Folgefehler zu #30 --> BOSWatch startet nicht mehr

Folgefehler zu #30
Tut noch nicht ganz was es soll :

30.06.2015 00:32:25 - descriptionList [DEBUG ] -- loading csv finished
30.06.2015 00:32:25 - boswatch [DEBUG ] starting rtl_fm
30.06.2015 00:32:28 - boswatch [DEBUG ] 
Found 1 device(s):
0: Realtek, RTL2838UHIDIR, SN: 00000001

Using device 0: Generic RTL2832U OEM
Found Rafael Micro R820T tuner
Tuner gain set to 49.60 dB.
Tuner error set to 75 ppm.
Tuned to 172992800 Hz.
Oversampling input by: 64x.
Oversampling output by: 1x.
Buffer size: 5.80ms
Exact sample rate is: 1411200.013458 Hz
Sampling at 1411200 S/s.
Output at 22050 Hz.

30.06.2015 00:32:28 - boswatch [CRITICAL] cannot start rtl_fm
30.06.2015 00:32:28 - boswatch [DEBUG ] cannot start rtl_fm
Traceback (most recent call last):
File "./boswatch.py", line 268, in 
raise OSError("starting rtl_fm returns an error")
OSError: starting rtl_fm returns an error
30.06.2015 00:32:28 - boswatch [WARNING ] SystemExit received
30.06.2015 00:32:28 - boswatch [DEBUG ] BOSWatch shuting down
30.06.2015 00:32:28 - boswatch [DEBUG ] terminate rtl_fm (3393)

rtl_fm war bei mir zu dem Zeitpunkt frei, trotzdem hat er abgebrochen...

Übergabe durch json fehlerhaft? oder Fehler 60

Hallo,
folgenden Fehler bekomme ich:

recv timed out, retry later
14.07.2015 14:14:44 [DEBUG   ] Aus: 1436876041
14.07.2015 14:14:44 [DEBUG   ] Now: 1436876084
14.07.2015 14:14:44 [DEBUG   ] parsed message: {u'function': u'1', u'functionChar': u'a', u'description': u'(13) FF Muster', u'msg': u'H\xf6ffentlich d\xe4s letzte M\xe4l, verspr\xfcchen', u'bitrate': 1200, u'ric': u'1234567'}
14.07.2015 14:14:44 [DEBUG   ] Open Alarm.html
14.07.2015 14:14:44 [ERROR   ] unknown error
Traceback (most recent call last):
  File "Alarmmonitor.py", line 143, in <module>
    index.write(line.replace(repl,message))
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf6' in position 1: ordinal not in range(128)
14.07.2015 14:14:44 [DEBUG   ] socketServer shuting down
14.07.2015 14:14:44 [DEBUG   ] socket closed
14.07.2015 14:14:44 [DEBUG   ] exiting socketServer
14.07.2015 14:14:44 [DEBUG   ] close Logging
14.07.2015 14:14:44 [INFO    ] socketServer exit()

Leider sehe ich glaube ich den Wald vor lauter Bäumen nicht mehr...
Habe wirklich 0-Ahnung oder Ideen noch wo mein Fehler liegen könnte.

Danke schon mal.

Quelltext:

#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
PLATZHALTER
"""

IP = ""
# listen on port
PORT = 10501


import fileinput, sys, os
import logging
import logging.handlers
from time import *
import socket
import json




#
# Main Program
#
try:
    # Logging
    myLogger = logging.getLogger()
    myLogger.setLevel(logging.DEBUG)
    formatter = logging.Formatter('%(asctime)s [%(levelname)-8s] %(message)s', '%d.%m.%Y %H:%M:%S')
    ch = logging.StreamHandler()
    ch.setLevel(logging.DEBUG)
    ch.setFormatter(formatter)
    myLogger.addHandler(ch)

    # Start TCP socket:
    logging.debug("Start jsonSocketServer")
    sock = socket.socket()
    sock.bind((IP,PORT))
    sock.listen(1)
    sock.settimeout(5)
    logging.info("jsonSocketServer runs")
    aus = time()
    now = time()
    Display_active=0
    Areset = 1
    os.system("export DISPLAY=:0.0&&xhost +")
    os.system("xhost +")
    while True:
    #
    # Zeitüberwachung
    #   

        now = time()
        logging.debug("Aus: %i",aus)
        logging.debug("Now: %i",now)
        Display_active_man = 0



        if aus<now and Areset==1:
            logging.debug("Open Alarm.html")
            uhrzeit = open("uhr.html").readlines()
            index = open("index.html","w")
            for line in uhrzeit:
                index.write(line)
            index.close()
            Areset=0

        if Display_active==1 and aus<=now and Display_active_man!=1:
            os.system("tvservice -o")
            logging.debug("Display ausgeschaltet")
            Display_active = 0

        if Display_active_man==1 and Display_active==0:
            os.system("tvservice -p")
            os.system("chvt 6")
            os.system("chvt 7")
            Display_active = 1
            logging.debug("Display manuell eingeschaltet")

        if Display_active<1 and aus>now:
            os.system("tvservice -p")
            os.system("chvt 6")
            os.system("chvt 7")
            Display_active=1
            logging.debug("Display automatisch eingeschaltet")


        try:
            (clientsocket, address) = sock.accept()
            json_string = clientsocket.recv( 4096 ) # buffer size is 4096 bytes
        except socket.timeout, e:
            err = e.args[0]
            # this next if/else is a bit redundant, but illustrates how the
            # timeout exception is setup
            if err == 'timed out':
                sleep(1)
                print 'recv timed out, retry later'

            else:
                print e
                sys.exit(1)
        except socket.error, e:
            # Something else happened, handle error, exit, etc.
            print e
            sys.exit(1)
        else:
            if len(json_string) == 0:
                print 'orderly shutdown on server end'
                sys.exit(0)
            else:
                data = json.loads(json_string)
                logging.debug("parsed message: %s", data)
                alarmzeit = time()
                aus = alarmzeit+1800        
                try:
                    logging.debug("Open Alarm.html")
                    alarm = open("alarm.html").readlines()
                    index = open("index.html","w+")
                except:
                    logging.error("Cant open Alarmfile")

                TIME = strftime("%H:%M",localtime())                
                message = data["msg"]
                message.encode("utf-8")
                repl  = "%MELDUNG%"
                for line in alarm:
                    index.write(line.replace(repl,message))
                index.close()
                logging.debug("Chrome neu laden und Bildschirm anschalten")
                Display_active = 1
                Areset = 1
                os.system("Chrome-Refresh")
                os.system("tvservice -p")
                os.system("chvt 6")
                os.system("chvt 7") 



except KeyboardInterrupt:
    logging.warning("Keyboard Interrupt")
except:
    logging.exception("unknown error")
finally:
    try:
        logging.debug("socketServer shuting down")
        sock.close()
        logging.debug("socket closed")
        logging.debug("exiting socketServer")
    except:
        logging.warning("failed in clean-up routine")
    finally:
        logging.debug("close Logging")
        logging.info("socketServer exit()")
        logging.shutdown()
        ch.close()
        exit(0)

RegEX-Filter Fehler

Wenn zwei RegEX Filter auf ein Plugin zeigen und zwei verschiedene Felder filtern sollen, Wird entweder nach dem einen oder dem anderen RegEX Filter ausgefiltert (Immer unterschiedlich).

Testdaten vervollständigen

Jeder ist eingeladen zu helfen, die Testdaten in citest/testdata.txt mit zu vervollständigen.

  • FMS
  • FMS ungültig
  • FMS mit Eintrag im Description-lookUp
  • FMS Duplikat
  • POC512/1200/2400
  • POC mit allen 4 Funktionen
  • POC mit Text
  • POC ohne Text
  • POC ungültig
  • POC mit Eintrag im Description-lookUp
  • POC Duplikat
  • ZVEI
  • ZVEI mit Wiederholton (F)
  • ZVEI mit Sirenenauslösung
  • ZVEI ungültig
  • ZVEI mit Eintrag im Description-lookUp
  • ZVEI Duplikat
  • Range-Filter
  • Ignore-Filter

btw: die Felder kann man anklicken, um einen Haken zu setzen 👍

mehrere Kanäle überwachen

Nabend zusammen,

Ich würde gerne im 4m Band FMS und ZVEI Decodieren und im 2m Band POCSAG, auf Grund der Differenz der Frequenzen, werde ich wohl um 2 Sticks nicht drum herum kommen.

1. Frage: Hat jemand sowas schon realisiert?
2. Frage: Macht es Sinn dann einfach 2 Instanzen von BOSWatch laufen zu lassen (wird auf dem Raspberry dann glaube ich knapp)oder sollte man dann drüber nachdenken den Aufruf von rtl_fm zu verdoppeln im Script?
3. Anregung: Wäre es eventuell sinnvoll einen Multimix so wie unten im Link zu realisieren, und eventuell einzufügen? Mit 2 Sticks hätte man dann relativ viele Kanäle abgedeckt?
Nach Adam Riese würde es ja bedeuten das man maximal wenn man alle Unter und Oberbänder abhören will auf Grund der Frequenzweite von 3,4 MHz 4x RTL-Sticks benötigt, heißt also auch das wäre endlich und müsste nicht dynamisch programmiert werden.
https://github.com/hpdvanwyk/fm-multimix
4. Anregung: Momentan verbraucht mein Raspberry relativ viel seiner geringen CPU-Kapazität, gäbe es die Möglichkeit die Schnittstelle zu RTL SDR etwas zu konkretisieren bzw. zu Verbessern. Es gäbe ja auch eventuell die Möglichkeit Anpassungen an der: https://github.com/steve-m/librtlsdr/blob/master/src/rtl_adsb.c zu nehmen und auf POCSAG bzw. FMS / ZVEI umzubasteln, oder?
(Nur ich glaube sehr Aufwendig, oder?)

pluginHandler - unloadPlugin()

Aktuell werden bei jedem Plugin-Aufruf die benötigten connection-Objekte instanziiert und Verbindungen aufgebaut.
Je nach Plugin brauchen die Objekte nur einmal angelegt und teilweise (z.B. MySQL) auch nur einmalig eine Connection erstellt werden.
Um die Verbindungen am Ende sauber zu schließen, benötigt der pluginHandler dafür eine unloadPlugin()- Funktion, die die entsprechende Methoden im aktiven Plugin aufruft.

Neue Plugin-Struktur am Bsp MySQL:

# lokale Variablen
connection = None

# onLoad (init) function of plugin
# will be called one time by the pluginLoader on start
def onLoad():
    connection = mysql.connector.connect

# Main function of MySQL-plugin
# will be called by the alarmHandler
def run(typ,freq,data):
    cursor = connection.cursor()
    ....
    cursor.close()

# unLoad (close) function of plugin
# will be called one time by the pluginLoader on shuting down BOSWatch 
def unLoad():
    connection.close()

Aufruf von rtl_fm.log und multimon-ng ohne festen Pfad

Problem:
Wird BOSWatch als Dienst beim Systemstart in rc2.d/S99 gestartet, findet subprocess.popen() die Binaries nicht.
Workaraound:
Feste Pfadangabe /usr/local/bin

ToDo:
Andere Lösung finden, liegt vielleicht auch mal woanders und betrifft nur die, die einen Dienst starten wollen.

doubleFilter verschluckt Meldungen?

Wenn man zu viele Plugins aktiviert bzw Plugins viel Zeit brauchen, wird die nachfolgende Meldung von multimon verschluckt und nicht ausgelesen!

Fehler im Pluginloader wenn Plugin nicht ladbar

Mir ist heute folgendes aufgefallen,
wenn ein Plugin beim import einen Fehler wirft, wird es komischerweise trotzdem irgendwie in die globals.pluginList[ ] mit richtigen Namen aufgenommen, aber auf das zuvor geladene Plugin referenziert. Sprich das zuvor geladene Plugin wird 2 mal ausgeführt, siehe Logfile (MySQL)

Er schreibt call MySQL tatsächlich führt er in diesem Fall dann aber das httpRequest Plugin aus...

...
09.07.2015 07:51:13 - pluginLoader    [DEBUG   ] Search in plugin folder
09.07.2015 07:51:13 - pluginLoader    [DEBUG   ] Plugin [DISABLED] BosMon 
09.07.2015 07:51:13 - pluginLoader    [DEBUG   ] Plugin [DISABLED] eMail 
09.07.2015 07:51:13 - pluginLoader    [DEBUG   ] Plugin [DISABLED] firEmergency 
09.07.2015 07:51:13 - pluginLoader    [DEBUG   ] Plugin [ENABLED ] httpRequest
09.07.2015 07:51:13 - pluginLoader    [DEBUG   ] Plugin [DISABLED] jsonSocket 
09.07.2015 07:51:13 - pluginLoader    [DEBUG   ] Plugin [ENABLED ] MySQL
09.07.2015 07:51:13 - pluginLoader    [DEBUG   ] Plugin [DISABLED] template 
09.07.2015 07:51:13 - pluginLoader    [DEBUG   ] load plugin: httpRequest
09.07.2015 07:51:13 - pluginLoader    [DEBUG   ] call httpRequest.onLoad()
09.07.2015 07:51:13 - pluginLoader    [DEBUG   ] load plugin: MySQL
09.07.2015 07:51:13 - pluginLoader    [ERROR   ] cannot load plugin: MySQL
09.07.2015 07:51:13 - pluginLoader    [DEBUG   ] cannot load plugin: MySQL
Traceback (most recent call last):
  File "C:\Users\123\Documents\BOSWatch\includes\pluginLoader.py", line 108, in loadPlugin
    return imp.load_module(plugin["name"], *plugin["info"])
  File "C:\Users\123\Documents\BOSWatch/plugins\MySQL\MySQL.py", line 16, in <module>
    import mysql
ImportError: No module named mysql
09.07.2015 07:51:13 - pluginLoader    [ERROR   ] error loading plugin: MySQL
09.07.2015 07:51:13 - pluginLoader    [DEBUG   ] error loading plugin: MySQL
Traceback (most recent call last):
  File "C:\Users\123\Documents\BOSWatch\includes\pluginLoader.py", line 32, in loadPlugins
    plugin = loadPlugin(i)
  File "C:\Users\123\Documents\BOSWatch\includes\pluginLoader.py", line 108, in loadPlugin
    return imp.load_module(plugin["name"], *plugin["info"])
  File "C:\Users\123\Documents\BOSWatch/plugins\MySQL\MySQL.py", line 16, in <module>
    import mysql
ImportError: No module named mysql
09.07.2015 07:51:13 - pluginLoader    [DEBUG   ] call MySQL.onLoad()
09.07.2015 07:51:13 - boswatch        [WARNING ] !!! Test-Mode: rtl_fm not started !!!
09.07.2015 07:51:13 - boswatch        [WARNING ] !!! Test-Mode: multimon-ng not started !!!
09.07.2015 07:51:13 - boswatch        [DEBUG   ] start testing
09.07.2015 07:51:13 - boswatch        [INFO    ] Testdata: # Testdata for the BOSWatch Test Mode function
09.07.2015 07:51:14 - boswatch        [INFO    ] Testdata: POCSAG512: Address: 1000512  Function: 1  Alpha:   BOSWatch-Test ÖÄÜß: okay
09.07.2015 07:51:14 - decoder         [DEBUG   ] recieved POCSAG
09.07.2015 07:51:14 - poc             [DEBUG   ] POCSAG Bitrate: 512
09.07.2015 07:51:14 - poc             [INFO    ] POCSAG512: 1000512 2 BOSWatch-Test ÖÄÜß: okay 
09.07.2015 07:51:14 - alarmHandler    [DEBUG   ] [  ALARM  ]
09.07.2015 07:51:14 - alarmHandler    [DEBUG   ] call Plugin: httpRequest
09.07.2015 07:51:14 - configHandler   [DEBUG   ] read [httpRequest] from config file
09.07.2015 07:51:14 - configHandler   [DEBUG   ]  - fms_url = www.google.de?ric=%RIC%&subric=%TIME%&msg=%MSG%
09.07.2015 07:51:14 - configHandler   [DEBUG   ]  - zvei_url = www.google.de?ric=%RIC%&subric=%TIME%&msg=%MSG%
09.07.2015 07:51:14 - configHandler   [DEBUG   ]  - poc_url = www.google.de?ric=%RIC%&subric=%TIME%&msg=%MSG%
09.07.2015 07:51:14 - wildcardHandler [DEBUG   ] wildcards been replaced
09.07.2015 07:51:14 - httpRequest     [DEBUG   ] send POC HTTP request
09.07.2015 07:51:15 - httpRequest     [DEBUG   ] HTTP response: 200 - OK
09.07.2015 07:51:15 - httpRequest     [DEBUG   ] close HTTP-Connection
09.07.2015 07:51:15 - alarmHandler    [DEBUG   ] return from: httpRequest
09.07.2015 07:51:15 - alarmHandler    [DEBUG   ] call Plugin: MySQL
09.07.2015 07:51:15 - configHandler   [DEBUG   ] read [httpRequest] from config file
09.07.2015 07:51:15 - configHandler   [DEBUG   ]  - fms_url = www.google.de?ric=%RIC%&subric=%TIME%&msg=%MSG%
09.07.2015 07:51:15 - configHandler   [DEBUG   ]  - zvei_url = www.google.de?ric=%RIC%&subric=%TIME%&msg=%MSG%
09.07.2015 07:51:15 - configHandler   [DEBUG   ]  - poc_url = www.google.de?ric=%RIC%&subric=%TIME%&msg=%MSG%
09.07.2015 07:51:15 - wildcardHandler [DEBUG   ] wildcards been replaced
09.07.2015 07:51:15 - httpRequest     [DEBUG   ] send POC HTTP request
09.07.2015 07:51:15 - httpRequest     [DEBUG   ] HTTP response: 200 - OK
09.07.2015 07:51:15 - httpRequest     [DEBUG   ] close HTTP-Connection
09.07.2015 07:51:15 - alarmHandler    [DEBUG   ] return from: MySQL
09.07.2015 07:51:15 - alarmHandler    [DEBUG   ] [END ALARM]
....

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.