PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : multimon (der Vorgänger des monitord) auf Raspberry Pi



Seiten : [1] 2

Smith
28.12.2014, 01:19
Ist das alsa aus dem repo auf Stand 2010?
Ich verstehe auch nicht warum sich das normale wheezy vom raspian "wheezy" so unterscheidet...

Ich für meinen Teil bin nun aber, so wie es sich hier gerade darstellt, vom monitord weg.
Soeben habe ich mir ein python-Script fertig geschrieben und arbeite nun mit multimon auf dem pi.
50% weniger CPU Zeit als der Monitor, wenn ich die Daten noch richtig im Kopf hatte.
Und dank der Übernahme per stdin/out kann ich das ganze nun auch im "Background" ohne shell laufen lassen. Zumindest denke ich das, muss das ganze gleich mal per Startscript verbasteln.
Beim monitord mit rtl_fm schien es so als wäre ohne aktive shell kein Sounddevice mehr offen. Es liefen beide Programme aber keine Dekodierung mehr.

Edit:
multimon-ng mit rtl_sdr per python funktioniert spitze!
Er schreibt ohne aktive Shell alle Daten in eine MySQL-DB.
Alleine schon der Tatsache entsprechend das er weniger Ressourcen frisst und ich anscheindend dadurch nun auch 2 Instanzen (FMS vielleicht?) mit einem 2. Stick nutzen kann bin ich durch mit monitord. Es funktioniert, aber es ist nicht für einen Dauereinsatz geeignet!
Im Übrigen: underruns sind auch nicht mehr vorhanden da das ganze ohne aplay auskommt. Die Daten fließen jetzt rtl_fm -> multimon.
beim monitord war das ganze vorher rtl_fm -> aplay -> monitord
Wer also mit einem raspberry pi und sdr Stick arbeiten will, sollte sich das ganze entsprechend anschauen.

Ich werde, wenn ich die Tage nochmal Zeit habe, eine kleine Anleitung und das python-Script hier einstellen.

Fabpicard
28.12.2014, 16:46
nun auch 2 Instanzen (FMS vielleicht?) mit einem 2. Stick
...

Ich werde, wenn ich die Tage nochmal Zeit habe, eine kleine Anleitung und das python-Script hier einstellen.

Zumindest den python-code fänd ich schon mal nicht schlecht ;)

Wieviel Load hast du denn jetzt mit dem "einen Kanal"?

Ich geh das hier gerade anders an, und "häng" noch beim Empfang...

Aber auch nur, da es durch die 2,4 MHz Bandbreite von dem rtl ja möglich ist, gleich mehrere Kanäle gleichzeitig zu empfangen :D

Bisher bin ich noch bei einer "Sammelausgabe" der Audio, einen Auswerter hab ich da noch nicht direkt dran gepappt und beschaut, ob der das auch so frisst *G*

MfG Fabsi

McBo
28.12.2014, 17:26
@Smith, was decodierst Du? ZVEI ?

Ich habe rtl_fm mit multimon noch nicht zum decodieren von ZVEI überreden können. [emoji15]

Multimon schreibt doch nur die Ausgabe in die Konsole.
Dein Script schreibt dann in die DB?

Wäre da auch eine Aufnahme Funktion möglich?

Der monitor 1.81 basiert ja auf den multimon.

Hat es schon jemand geschafft, den für ARM zu kompilieren?


Sent from my iPhone using Tapatalk

Smith
29.12.2014, 23:42
Erstmal: Multimon und Multimon-NG sind nicht unterschiedlich vom Kern her aber die NextGen Version vom Elias Oenal ist scheinbar echt gut.
Kompilieren war einfach. Elias hat gute Arbeit geleistet.

POCSAG1200 ist der Spaß den ich hier teste. Für FMS (Option FMSFSK) ist der Antennenstandort im Keller zu schlecht. ZVEI wird hier nicht mehr benutzt, wenn ich irgendwann mal die Tage Zeit habe funke ich mal selbst ZVEI.
Aufnahmen sind nicht in meinem Interesse. Zumal hier ab 01.01. alles im TETRA laufen soll.
Übergabe erfolgt über stdin/out. Ich denke da wird es schwer eine Aufnahme zwischen zu packen.

@Fabpicard:
Der Load liegt bei ca. 0.5
multimon-ng nimmt sich ca. 5 CPU% - rtl_fm 37-40 CPU% und beide zusammen gerade mal 5-7 MEM% (lt. htop)

Der python-Code ist eine angepasste Version von russinnes aus dem raspberrypi.org-Forum. Ich habe Anpassung vorgenommen um die Daten anstatt nur in 2 txt schreiben zu lassen auch in eine MySQL zu schreiben.

So gut meine python Kenntnisse nicht sind, die Kommentare habe ich noch gesetzt um den Code selbst ein wenig zu verstehen. Außerdem habe ich noch die mySQL-Funktion eingebaut. Hier muss allerdings der Connector noch manuell installiert werden. Ich habe die Codezeile in das Script mit eingefügt.

Smith
29.12.2014, 23:44
-- Schritt 1:
RTL_SDR kompilieren:
Hier aus dem Forum irgendwo.



# Install dependencies
sudo apt-get update
sudo apt-get -y install git cmake build-essential libusb-1.0 qt4-qmake libpulse-dev libx11-dev

# Fetch and compile rtl-sdr source
mkdir -p ~/src/
cd ~/src/
git clone git://git.osmocom.org/rtl-sdr.git
cd rtl-sdr
mkdir build && cd build
cmake ../ -DINSTALL_UDEV_RULES=ON && make && sudo make install
sudo ldconfig


-- Schritt 2:

Multimon-NG:



sudo su -
apt-get install libpulse-dev libx11-dev qt4-qmake git cmake build-essential
git clone https://github.com/EliasOenal/multimonNG.git
cd multimonNG/
mkdir build
cd build
qmake ../multimon-ng.pro && make && make install


-- Schritt 3:
Pyton MySQL-Support installieren:


wget "http://dev.mysql.com/get/Downloads/Connector-Python/mysql-connector-python-1.0.9.tar.gz/from/http://cdn.mysql.com/" -O mysql-connector.tar
tar xfv mysql-connector.tar
cd mysql-connector-python*
chmod +x ./setup.py
sudo ./setup.py install


-- Schritt 4:
Sktipte anlegen:


mkdir /home/pi/py-sripte && cd /home/pi/py-sripte
FÜR MYSQL:
nano poc-to-mysql.py

Für das MySQL Script dann folgenden Text einfügen:


#!/usr/bin/python
# -*- coding: cp1252 -*-
'''
!! This requires a recent build of Multimon-NG as the old builds wont accept a piped input !!
Change the rtl_fm string to suit your needs.. add -a POCSAG512 , 2400 etc if needed to the Multimon-ng string
This just prints and writes to a file, you can put it in a threaded class and pass though a queue
or whatever suits your needs.

Änderungen für Deutschland und Kommentare von Smith - Funkmeldesystem.de-Forum.
Bitte beachten, bei POC512 ist die Zeichenkette jeweiles um ein Zeichen kürzer!
MySQL-Funktion hinzugefügt.

Pyton MySQL-Support installieren
wget "http://dev.mysql.com/get/Downloads/Connector-Python/mysql-connector-python-1.0.9.tar.gz/from/http://cdn.mysql.com/" -O mysql-connector.tar && tar xfv mysql-connector.tar && cd mysql-connector-python* && chmod +x ./setup.py && sudo ./setup.py install

'''

import time
import sys
import subprocess
import os
import mysql
import mysql.connector

try:
connection = mysql.connector.connect(host = "DATENBANKSERVER", user = "DATENBANKUSER", passwd = "DBPASSWORT", db = "DATENBANK")
except:
print "Keine Verbindung zum Server"
exit(0)

def curtime():
return time.strftime("%Y-%m-%d %H:%M:%S")

with open('Fehler.txt','a') as file:
file.write(('#' * 20) + '\n' + curtime() + '\n')

multimon_ng = subprocess.Popen("sudo rtl_fm -f XXX.XXXM -M fm -s 22050 -p 37 -E dc -F 0 -g 40 | multimon-ng -a POCSAG1200 -f alpha -t raw -",
#stdin=rtl_fm.stdout,
stdout=subprocess.PIPE,
stderr=open('error.txt','a'),
shell=True)

try:
while True:
line = multimon_ng.stdout.readline()
multimon_ng.poll() # multimon wird gestartet
if line.__contains__("Alpha:"): # Die Ausgabe wird nach dem Text "Alpha" durchsucht
if line.startswith('POCSAG'):
address = line[21:28].replace(" ", "") # Zeichen 22 bis 28. RIC wird in die Variabel "adress" gelegt.Leerzeichen werden entfernt. Wenn kleiner als 7 Stellen wird der Rest vorne weg mit 0 aufgefüllt (zfill). Feld muss in VARCHAR vorliegen, führendene 0 wird sonst nicht geschrieben!
subric = line[40:41].replace(" ", "").replace("3", "4").replace("2", "3").replace("1", "2").replace("0", "1") # Sub-RIC auslesen und anpassen (3=4, 2=3, 1=2, 0=1)
message = line.split('Alpha: ')[1].strip().rstrip('<EOT>').strip() # Die Nachricht wird nach dem Bereich Alpha in die Variabel "message" abgelegt. EOT wird entfernt.
output=(curtime()+' '+ address+' '+ subric+' '+ message+'\n') # Es wird ein String in die Variabel "output" gelegt. Hier: Adresse + Zeitstempel + Text
print curtime(), address, subric, message # Die Meldung wird im Terminal angezeigt
with open('POCSAG.txt','a') as f: # Der String output wird in die Datei POCSAG.txt geschrieben.
f.write(output)
#Datensatz einfügen per mySQL
cursor = connection.cursor()
cursor.execute("INSERT INTO DATENBANKTABELLE (time,ric,funktion,text,einsatz) VALUES (%s,%s,%s,%s,%s)",(curtime(),address,subric,message,'0',))
cursor.close()
connection.commit()
if not "Alpha:" in line: # Wenn kein Alpha im String der Ausgabe multimon steht, wird die Zeile in die Datei POCSAG_KeinText.txt geschrieben.
with open("POCSAG_KeinText.txt","a") as missed:
address = line[21:28].replace(" ", "") # Zeichen 22 bis 28. RIC wird in die Variabel "adress" gelegt.Leerzeichen werden entfernt. Wenn kleiner als 7 Stellen wird der Rest vorne weg mit 0 aufgefüllt (zfill). Feld muss in VARCHAR vorliegen, führendene 0 wird sonst nicht geschrieben!
subric = line[40:41].replace(" ", "").replace("3", "4").replace("2", "3").replace("1", "2").replace("0", "1") # Sub-RIC auslesen und anpassen (3=4, 2=3, 1=2, 0=1)
print curtime(), address, sum # Die Meldung wird im Terminal angezeigt
missed.write(line) # Der String output wird in die Datei POCSAG_KeinText.txt geschrieben.
#Datensatz einfügen per mySQL
cursor = connection.cursor()
cursor.execute("INSERT INTO DATENBANKTABELLE (time,ric,funktion,text,einsatz) VALUES (%s,%s,%s,%s,%s)",(curtime(),address,subric,'','0',))
cursor.close()
connection.commit()

except KeyboardInterrupt:
os.kill(multimon_ng.pid, 9)

HINWEIS: die fett-Texte oben im Script sind anzupassen.

-- Schritt 5:
Script ausführbar machen:



sudo chmod +x poc-to-mysql.py
bei Problemen beim starten:
sudo chmod 777 poc-to-mysql.py


-- Schritt 6:
Autotart:
Ich verweise dafür auf:


http://www.forum-raspberrypi.de/Thread-tutorial-autostart-eines-python-script?pid=24741#pid24741

McBo
30.12.2014, 14:24
@Smith

Danke für Deine Anleitung.

Ich habe den multimon-ng jetzt auf meinem Cubietruck laufen.

ZVEI2 und FMS funktioniert mit Konsolenausgabe.

Wie bekomme ich die ZVEI und FMS Daten in die Datenbank?
Dein Pythonscript ist ja nur für Pocsag.


Gruß

Marcel

Smith
30.12.2014, 16:54
Schick mir mal jeweils eine ZVEI und FMS Zeile per PN.
Ich schaue dann eben nach und baue die ein Script für den 4m-Empfang.
Also Auswertung für beides.

Smith
30.12.2014, 16:55
Schick mir mal jeweils eine ZVEI und FMS Zeile per PN.
Ich schaue dann eben nach und baue die ein Script für den 4m-Empfang.
Also Auswertung für beides.

McBo
30.12.2014, 16:56
Super, mache ich.


Sent from my iPhone using Tapatalk

coastboy
03.01.2015, 21:31
Hi,

ich habe jetzt das Script am laufen.

Wie kann ich multimon-ng sagen, dass er nur pocsag1200 decodieren soll
und keine Skyper etc.?

Der zerstört mir immer einige Meldungen, weil er die falsch interpretiert.


Und wie kann ich die Umlaute einstellen?


Danke

MfG
coastboy

chortyenz
05.01.2015, 20:17
Vielen Dank an Smith für die tolle Anleitung.
Klappt nun auch bei mir mit dem Raspberry und dem BananaPi.
1. Vorschlag meiner Seite wäre noch das evtl. in der Anleitung das Tool Kalibrate-rtl mit einfließen könnte.
Kalibrate errechnet den Offset des DVB-T Sticks mit Hilfe von Mobilfunkfrequenzen (GSM). Es gibt, so wie ich es verstanden habe, bei den Sticks verschiedene Abweichungen. Bei mir waren es 11ppm und habe das entsprechend im Python Script angepasst.

2. Vorschlag sollten wir für einen neuen Thread erstellen mit einer passenden Überschrift?
Ich denke das decodieren mit dem Raspberry ist viel versprechend.

Fabpicard
06.01.2015, 11:26
Kalibrate errechnet den Offset des DVB-T Sticks mit Hilfe von Mobilfunkfrequenzen (GSM). Es gibt, so wie ich es verstanden habe, bei den Sticks verschiedene Abweichungen. Bei mir waren es 11ppm und habe das entsprechend im Python Script angepasst.

So sicher ist das Script aber leider auch nicht wirklich...

Hab das hier mal ne ganze Weile lang getestet und Korrekturwerte von +10 bis +28 ppm erhalten. Die Tendenz ging in richtung +19...

Vergleich mit Messsender zeigte dann eine ziehmlich stabile Abweichung von +21 ppm ;)

MfG Fabsi

P.S.: Wenn es jemand genau wissen will: Wenn ein frankierter Rückaufkleber im Packet liegt, meine Versandadresse gibts per PM... Für das Ausmessen der Abweichung am Messplatz berechne ich nichts :)

Reissdorf
06.01.2015, 14:57
Hallo zusammen,
danke erst mal an Smith für die gute Anleitung. Habe mich mal mit einer neuen SD-Karte zum wiederholten Male an das Thema gemacht.
Habe also alles installiert, incl. Apache, PHP, MySQL, FTP, PHPmyAdmin.
Habe es auch geschafft das Pythonscript so weit an zu passen das ich eine Verbindung zur Datenbank bekomme. Nun zu den Fragen und Problemen:
1. Irgendwas bewirkt das das Script scheinbar bei jedem Schleifendurchlauf einen Eintrag in die Datenbank haut. Das sind schon ganz schön viele. Die Ausgabe in der Konsole hatte ich schon dadurch gestoppt das ich die Zeile "print curtime(), address, sum" erst mal nach "print curtime(), address, subric" korrigiert habe und dann auskommentiert habe. So spuckt das Skript aber immer noch über 30Zeilen pro sec in die Datenbank. Ist da noch ein Fehler in der while-Schleife oder habe ich was übersehen.
2. Habe dann zu Testzwecken nur die Zeile zum Starten von multimonNG und rlt-fm aus dem Script genommen und so in der Konsole gestartet, das funktioniert schon ganz prima. Leider aber halt nur als ssh-Konsolenausgabe.
3. Die Zelle Einsatz habe ich nicht verstanden bei der Übergabe im Script. Wenn ich das richtig lese wird da auch nichts rein geschrieben. Richtig?
4. Kann ich deine Korrektur der Subric einfach auskommentieren?
5. Der Treiber für den DVB-T Stick blockiert bei mir den Zugriff durch RTL-fm und muß händisch beendet werden. Lässt sich das vielleicht noch in die Anleitung integrieren? Wie das mit der Blacklist funktioniert finde ich noch raus.

Gruß und Danke

Reissdorf

Smith
07.01.2015, 11:13
Vielen Dank an Smith für die tolle Anleitung.
Klappt nun auch bei mir mit dem Raspberry und dem BananaPi.
1. Vorschlag meiner Seite wäre noch das evtl. in der Anleitung das Tool Kalibrate-rtl mit einfließen könnte.
Kalibrate errechnet den Offset des DVB-T Sticks mit Hilfe von Mobilfunkfrequenzen (GSM). Es gibt, so wie ich es verstanden habe, bei den Sticks verschiedene Abweichungen. Bei mir waren es 11ppm und habe das entsprechend im Python Script angepasst.

2. Vorschlag sollten wir für einen neuen Thread erstellen mit einer passenden Überschrift?
Ich denke das decodieren mit dem Raspberry ist viel versprechend.

Lasse mir mal den Teil zukommen, ich schau es mir mal an?
Ich habe am Script mit McBo´s System noch weiter gearbeitet. Es soll demnächst eine Version 0.2 rauskommen, das Script passe ich gerade so gut es geht für FMS und ZVEI an, dann kann das da mit rein.. Eine Änderung muss bei FMS allerdings in den Sourcen vorgenommen werden, da die Umlaute etwas zicken. Einen Push im multimon-ng-GIT habe ich bereits vorgenommen.


So sicher ist das Script aber leider auch nicht wirklich...

Hab das hier mal ne ganze Weile lang getestet und Korrekturwerte von +10 bis +28 ppm erhalten. Die Tendenz ging in richtung +19...

Vergleich mit Messsender zeigte dann eine ziehmlich stabile Abweichung von +21 ppm ;)


Naja, einfach den Mittelwert nehmen. *g* Aber das mit dem Messplatz, da komm ich aus Interesse vielleicht nochmal drauf zurück.


Hallo zusammen,
danke erst mal an Smith für die gute Anleitung. Habe mich mal mit einer neuen SD-Karte zum wiederholten Male an das Thema gemacht.
Habe also alles installiert, incl. Apache, PHP, MySQL, FTP, PHPmyAdmin.
Habe es auch geschafft das Pythonscript so weit an zu passen das ich eine Verbindung zur Datenbank bekomme. Nun zu den Fragen und Problemen:
1. Irgendwas bewirkt das das Script scheinbar bei jedem Schleifendurchlauf einen Eintrag in die Datenbank haut. Das sind schon ganz schön viele. Die Ausgabe in der Konsole hatte ich schon dadurch gestoppt das ich die Zeile "print curtime(), address, sum" erst mal nach "print curtime(), address, subric" korrigiert habe und dann auskommentiert habe. So spuckt das Skript aber immer noch über 30Zeilen pro sec in die Datenbank. Ist da noch ein Fehler in der while-Schleife oder habe ich was übersehen.

Das bedeutet aber das er auch in der Console irgendwas anzeigt. Reden wir bei dir über reinen POCSAG Empfang? Ich habe dies nur festgestellt wenn das ganze einen unsauberen restart der Prozesse erlebte. Meist beim stopppen des Script und direkten wieder aufrufen, da die Prozesse aus dem vorherigen Aufruf noch geöffnet waren. Ich denke es liegt an dem Abbruch der Pipe von rtl_fm an multimon. Die Daten gehen dann in die neue Pipe und multimon spielt dann verückt.
Evtl. schaue ich mal ob man noch eine ausgebaute Start-Stop Routine einbauen sollte.


2. Habe dann zu Testzwecken nur die Zeile zum Starten von multimonNG und rlt-fm aus dem Script genommen und so in der Konsole gestartet, das funktioniert schon ganz prima. Leider aber halt nur als ssh-Konsolenausgabe.

Richtig, denn das Py-Script durchsucht genau diese Ausgaben auf den gesuchten Inhalt und schreibt dieses dann, nach manipulation der Strings, in eine Datei und/oder Datenbank.



3. Die Zelle Einsatz habe ich nicht verstanden bei der Übergabe im Script. Wenn ich das richtig lese wird da auch nichts rein geschrieben. Richtig?

Korrekt. Das ganze landet bei mir ein einer bos2web-Oberfläche. Ich habe ja nicht damit gerechnet dies mal zu veröffentlichen. Wird bei der Version 0.2 rausfliegen.


4. Kann ich deine Korrektur der Subric einfach auskommentieren?

wenn du mit 0-3 arbeiten willst, klar. Sollte kein Problem sein. Ich meine die Variabel bleibt erhalten.


5. Der Treiber für den DVB-T Stick blockiert bei mir den Zugriff durch RTL-fm und muß händisch beendet werden. Lässt sich das vielleicht noch in die Anleitung integrieren? Wie das mit der Blacklist funktioniert finde ich noch raus.

Was meinst du hier genau? :-)

Reissdorf
07.01.2015, 14:00
Hallo Smith,
danke für die schnelle Antwort. Ja bei mir geht es um Pocsag 512.

Das das Printf nur zur Ausgabe in der Konsole ist, war mir schon klar. Werde dann noch mal versuchen es noch mal zu starten und gucken ob es dann nicht spinnt. Habe da ja so was hin und her probiert, da könnte es schon sein das da was durcheinander gekommen ist.

Ich werde dann auch mal die Korrektur der Subric auskommentieren und gucken wie es wird.

Das Problem mit dem Treiber welches beim manuellen Starten von MultimonNG und RTL-FM aufgetreten ist, ist diese Meldung hier:
$ rtl_test -t
Found 1 device(s):
0: Terratec T Stick PLUS

Using device 0: Terratec T Stick PLUS

Kernel driver is active, or device is claimed by second instance of librtlsdr.
In the first case, please either detach or blacklist the kernel module
(dvb_usb_rtl28xxu), or enable automatic detaching at compile time.

usb_claim_interface error -6
Failed to open rtlsdr device #0.

Habe dazu aber die Lösung gefunden den Treiber einfach zu deaktivieren. Das muss man nur bei jedem Reboot neu machen. Man kann aber auch einstellen das er den Treiber für DVB-T erst gar nicht startet. Dazu muss man ihn in einer Blacklist eintragen. Da werde ich mich noch mal mit beschäftigen.

Gruß
Reissdorf

Smith
07.01.2015, 15:12
Das Problem mit dem Treiber welches beim manuellen Starten von MultimonNG und RTL-FM aufgetreten ist, ist diese Meldung hier:
$ rtl_test -t
Found 1 device(s):
0: Terratec T Stick PLUS

Using device 0: Terratec T Stick PLUS

Kernel driver is active, or device is claimed by second instance of librtlsdr.
In the first case, please either detach or blacklist the kernel module
(dvb_usb_rtl28xxu), or enable automatic detaching at compile time.

usb_claim_interface error -6
Failed to open rtlsdr device #0.

Genau, einfacj den entsprechenden Bereich per Eintrag in /etc/modprobe.d/raspi-blacklist.conf auf die Blacklist schmeißen.



# blacklist the DVB drivers to avoid conflict with the SDR driver
blacklist dvb_usb_rtl28xxu
blacklist rtl2830
blacklist dvb_usb_v2
blacklist dvb_core


danach ein sudo reboot und es sollte keine Probleme mehr geben.

McBo
08.01.2015, 00:40
Hi Smith,

ich habe heute mal versucht den rtl_fm Stream mit "tee" zu Splitten und
damit das Signal gleichzeitig auf den multimon-ng und auf den
Lautsprecher (Soundkarte), gegeben.

aplay versagt bei meinem Cubietruck total.
Nur Underuns und kein verständliches Audiosignal. :-(

Dann habe ich mir "sox" installiert.
Mit "play" klappt es tadellos.

Hier mein Befehl zum Testen:


rtl_fm -f XX.XXXM -M fm -s 22050 -l 20 -p 31 -E DC -F 0 -g 40 | tee >(multimon-ng -a ZVEI2 -a FMSFSK -f alpha -t raw /dev/stdin) >(AUDIODEV=hw:1 play -t raw -r 22050 -e signed-integer -b 16 -c1 -V1 -q -) > /dev/null



Gruß

McBo

Smith
08.01.2015, 11:38
Ja dann, kommt ins ToDo für die Anleitung noch ein apt-get install sox?! :-)

Dann sollten wir jetzt kein Problem mehr haben deinem alten System ebenbürtig zu werden. ^^

Reissdorf
10.01.2015, 15:49
Hallo Zusammen,
vermelde Erfolg. Danke Smith an die gute Hilfestellung. Das Blacklisten und der Autostart läuft auch. MySQL wird dann jetzt zu Testzwecken aus zwei Quellen gefüttert. Einmal von extern und einmal von MultimonNG.

PHP-Skript läuft auch.

Auswertung gut, jetzt warten wir mal die Stabilität ab.

Gruß und schönes Wochenende.

Reissdorf

Smith
11.01.2015, 23:31
Ich habe wie gesagt mit McBo zusammen bereits 0.2 des python-Script fast fertig.
Bei mir war diese Woche auf der Wache etwas mehr los, daher hat es gedauert.

Was bisher anscheinend ganz gut läuft:
- Filter der Doppelalarmierungen FMS & ZVEI
- Fehlerekennung bzw. plausibilitätskontrolle ZVEI
- Automatische Frequenzberechnung für 4m Kanäle UB &OB sowie technische Kanäle 2-m Band.
- 2 SDR in einem System (Test lief hier bisher auf dem Cubie, der Raspy könnte zu schwach sein. Der Test läuft bei mir gerade)

Was ich gerade noch teste bzw. baue ist ein automatisches Instalations-Script. Das ganze Projekt liegt bald bei github. Damit ist es auch bei Änderungen recht einfach diese einzuspielen.

McBo
11.01.2015, 23:44
Hi Smith,

ich war das Wochenende auch verreist und hatte keine Zeit ;-)


Was ich gerade noch teste bzw. baue ist ein automatisches Instalations-Script.
Das hatte ich auch noch auf meiner Wunschliste :-)

Dann fehlt nur noch die Memofunktion (Record) für ZVEI :-)

Bist Du mit "tee" schon weiter gekommen?


Gruß

Marcel

Smith
12.01.2015, 01:02
Das Installations-Script wird wohl nicht mal eben... da sind eine Menge Dinge zu beachten um das ganze per python zu machen. Ich denke ein shell-Script wird hier sinniger.
Ich habe in meiner Anleitung ja schon die ganzen Code-Blöcke zu gut wie es geht verbunden.

Solche Scripte sind halt immer ein wenig Vertrauenssache. Jeder sollte sich die Daten, welche er ausführt immer kurz anschauen.

:-)

Und Marcel, nein... noch nicht. Wobei deine tee-Pipe doch eigentlich schon gut lief oder nicht? Schreib mir mal ne WhatsApp was du jetzt noch brauchst ;)

edit: Das Installation-Script ist schon fast erledigt. Ich muss es morgen nur auf einem frischen Pi-System ausprobieren. Es sollte eigentlich auch auf einem normalen Debian Wheezy ARM laufen. Solang man das Script einmalig als root ausführen kann.

Smith
14.01.2015, 07:31
Das aktuelle Script ist ab sofort unter folgendem Link zu finden:
https://github.com/Smith-fms/raspoc/

Achtung! die install.sh ist noch nicht auf einem frischen System getestet, hat hier noch Probleme gemacht...
Das py-Script läuft hingegen sehr gut. Es sei denn, der Fehlerteufel hat sich irgendwo wieder eingeschlichen :-)

Wenn ihr Fragen, Kritik oder Anregungen habt immer raus damit. Auch bin ich gerne bereit auf Github den ein oder anderen mit ins Team zu nehmen. Das Ding ist und bleibt OpenSource und soll hier gerne weiterentwickelt werden.
Ich habe hier in den letzten Jahren genug kurzweilige Projekte gesehen, auch wenn ich keinen Bock mehr habe so kann zumindest wer anderes mit dem Code weiter machen... ;)

Und Danke nochmal an McBo. Wenigstens einer von uns beiden der ein wenig programmieren kann :-)

Smith
16.01.2015, 05:20
wünscht sich irgendwer eine Übergabe der Alarme an firEmergency?
Ich hab das Script für mich gerade umgestellt, wenn es wer will muss er was sagen.
Dann baue ich es öffentlichkeitstauglich ein.

Dtrieb7482
21.01.2015, 13:55
Denke als Server ware cool dann kann man die Daten auch mit z.b. Radio Operator weiter nutzen! ;-)

McBo
21.01.2015, 23:07
Und Danke nochmal an McBo. Wenigstens einer von uns beiden der ein wenig programmieren kann :-)

Ich denke mal Du übertreibst ;-)

coastboy
12.02.2015, 21:44
Hi,

hab das Script angepasst und jetzt seit ein paar Wochen erfolgreich am laufen.


Die CPU Last von rtl_fm liegt bei 40%
und Meldungen die im Sekundentakt reinkommen werden nicht erkannt.

Kann das noch irgendwie optimiert werden? Wie

MfG
coastboy

McBo
12.02.2015, 22:56
Welchen Demodulator verwendest Du?
ZVEI2 / FMSFSK / POCSAG1200 ???

Bei mir funktioniert perfekt, ZVEI2 und FMSFSK.

Ich habe die Erfahrung gemacht, das die PPM-Fehlerkorrektur 100ig,
bei rtl_fm richtig eingestellt werden muss.
Alle DVB-T Sticks sind unterschiedlich !!!!

Also kalibrate-rtl installieren:

cd ~/src
sudo apt-get install libtool autoconf automake libfftw3-dev
git clone https://github.com/asdil12/kalibrate-rtl.git
cd kalibrate-rtl
git checkout arm_memory
./bootstrap
./configure
make
sudo make install

stärksten GSM-Kanal auswählen mit
kal -s GSM900

und dann (z.B.: Kanal 36)
kal -c 36

dann wird Dir der ppm-Wert Deines Sticks angezeigt.

Bei rtl_fm ist es dann die Option -p [ppm-Wert]

"average absolute error: 31.083 ppm" ==> -p 31


Gruß

Marcel

coastboy
13.02.2015, 16:49
Hi,

ok werde ich mal testen.

Ich werte nur POC1200 aus.

MfG
coastboy

coastboy
14.02.2015, 20:42
Hi,

also das kalibrieren klappt irgendiwe nicht.

Es kommt immer der Fehler bei kal -s GSM900:
no valid PLL configuration found for...

Wenn ich es abbreche und kal -c 36 eingebe,
dann passiert nix, oder ich bin zu ungeduldig :-(

MfG
coastboy

Fabpicard
15.02.2015, 07:26
Also: das Programm "Kalibrate" sucht nach GSM Basisstationen im 900 MHz Band...

Du musst also auch einen rtl-sdr-Stick haben, der da auch empfangen kann... ;)

Ansonsten musst du vielleicht auf das 1800 MHz Band ausweichen...

MfG Fabsi

coastboy
19.02.2015, 15:51
Mh,

hab gerade geschaut,
der Stick kan nur bis 863.25 MHz

Und nun? Kann da Kalibrate auch irgendwie etwas ermitteln
oder geht es nur mit GSM Stationen?


MfG
coastboy

McBo
19.02.2015, 19:04
Probiere mal

kal -s GSM850


Ich weiß aber nicht,
ob es da noch GSM Sender gibt.

Oder neuen Stick.
Die gibt es beim Chinamann
für 9€.

ffw123
20.02.2015, 16:59
Benutzt ihr die mitgelieferte Antenne?
Bei mir läuft die Auswertung mit dem DVB-T Stick überhaupt nicht. Über einen Scanner mit Soundkarte klappt es.

Der zweite Punkt ist, dass mein Stick einen ppm Error von -27 liefert. Kann man bei rtl_fm in den negativen Bereich?

coastboy
20.02.2015, 21:03
Mh.

das klappt nicht.
GSM850 geht noch, aber der erste GSM850 Kanal ist bei 869.xx MHz
Da kommt dann nichts :-(

Hab eine Stab-Antenne am Stick, parallel zum Scanner

MfG
coastboy

Kermit_t_f
20.02.2015, 22:07
Hab ich überlesen, was für einen Stick mit welchem Tuner du verwendest?
Ansonsten ist die Kalibrierung doch nicht schwer, musst es ja nicht am Raspi machen. Nimmst ne Software wie sdr# auf dem Rechner, suchst dir ein Signal, bei dem du die Frequenz kennst und welches einigermaßen schmalbandig ist, bspw. ein Amateurfunkrelais im 2m Band. Jetzt guckst, auf welcher Frequenz es die Software anzeigt und dann öffnest du die Konfiguration und stellst die Korrektur solange ein, bis das Relais passend auf der Frequenz liegt. Voher noch bissi den Stick warmlaufen lassen und alles wird gut.

Fabpicard
20.02.2015, 23:25
Der zweite Punkt ist, dass mein Stick einen ppm Error von -27 liefert. Kann man bei rtl_fm in den negativen Bereich?

Klar, die Abweichung kann ja in beide Richtungen sein ;)

Sowas nennt sich im professionellen Bereich dann "Offset"...
Wobei ich mir bei den SDR-Dingern nicht sicher bin, ob die "ppm" sich wirklich auf die Achweichung in Herz beziehe oder irgend was eigenes mit der Referenzfrequenz...

MfG Fabsi

Reissdorf
21.02.2015, 09:02
Benutzt ihr die mitgelieferte Antenne?
Bei mir läuft die Auswertung mit dem DVB-T Stick überhaupt nicht. Über einen Scanner mit Soundkarte klappt es.
(...)

Ja, in den meisten Fällen sollte die popelige DVB-T Antenne die dabei ist reichen. Hast du denn mal reingehört ob du überhaupt ein Signal empfängst? Entweder am Pi selber oder wenn da nichts passendes zu Hand übers Netzwerk an dem "Bedien"-PC.

Gruß
Reissdorf

ffw123
24.02.2015, 19:00
Habe nochmals ein wenig rumprobiert.

Wenn ich einen Radiosender einschalte und mit aplay auf den Soundausgang lege, klappt es, wenn auch nicht sehr gut. (leise, und Rauschen)

Wenn ich ZVEI2 und FMSFSK auswerten möchte, wertet er Statusmeldung aus, aber völlig falsch.
Fünftonfolgen, wertet er nicht aus.


Bei folgendem Aufruf



rtl_fm -M fm -f 86081425 -p-27 -g 100 -s22050 - | multimon-ng -a ZVEI2 -a FMSFSK -t raw -


kommt diese Ausgabe.



Found 1 device(s):
multimon-ng (C) 1996/1997 by Tom Sailer HB9JNX/AE4WA
(C) 2012-2014 by Elias Oenal
available demodulators: 0: Realtek, RTL2838UHIDIR, SN: 00000001

POCSAG512 POCSAG1200 usw.
Enabled demodulators: FMSFSK ZVEI2
Using device 0: Generic RTL2832U OEM
Found Rafael Micro R820T tuner
Tuner gain set to 49.60 dB.
Tuner error set to -27 ppm.
Tuned to 86335000 Hz.
Oversampling input by: 46x.
Oversampling output by: 1x.
Buffer size: 8.08ms
Exact sample rate is: 1014300.020041 Hz
Sampling at 1014300 S/s.
Output at 22050 Hz.


Somit kann der Stick wohl nur maximal rund 50dB, die Frequenz weicht um 253575 Hertz ab.

Ich habe die Vermutung, dass die Auswertung wegen der Samplingrate nicht funktioniert. Hat dazu jemand Ideen?

Smith
03.03.2015, 03:18
Daher solltest du ja auch das Script nehmen welches ich hier bereits gestellt habe (bzw. auf Github)
Damit das ganze von Fehlern etc. befreit wird bzw. die Fehler abgefangen werden.
Nachdem die ppm per kalibrate ermittelt wurden, geht eigentlich alles einwandfrei.
Es gibt hier mittlerweile einige User die es dadurch geschafft haben, den Pi mit einem SDR Stick zu nutzen.
Das Script checkt die Ausgaben gegen und verwirft Ausgaben wie ZVEI unter 5 Stellen, Wiederhoungen von Alarmen innerhalb 3 Sekunden etc.

Das reine Anzeigen lassen allerdings von multimon-ng ist fürs Debug am Anfang gut. Nur schau dir mal die Kommandozeile an die verwendet wird. Es benötigt schon ein wenig mehr damit die Dekodierung überhaupt und sauber funktioniert.

JHC
03.03.2015, 11:33
Hallo Smith,

Du weist an mehreren Stellen darauf hin, dass für POCSAG512 Anpassungen am Script durchgeführt werden müssten. Welche wären das?

Auf anderen Web-Seiten wird darüber diskutiert, ob man für POCSAG die aktuelle LTR-SDR-Version nutzen kann oder auf eine ältere Version zurückgreifen muss?!?
Wie sind hier Eure Erfahrungen? Geht POCSAG512 mit der aktuellen LTR-SDR-Version?

Ich verwende zum Testen aktuell folgende Parameter:

rtl_fm -M fm -f xyz -g 19.7 -s 22050 -E dc -F 0 | multimon-ng -t raw -a POCSAG512 -f alpha /dev/stdin

"Mithören" klingt wie am nebenstehenden Scanner, Multimon gibt aber nichts auf der Konsole aus. :-(

Grüße
Jens

dataflash
03.03.2015, 16:47
[Gefährliches Halbwissen OPEN]

Versuch mal die folgenden Zeilen bei Zeile 218 und bei Zeile 233 zu ändern, von:
address = line[21:28].replace(" ", "").zfill(7)
subric = line[40:41].replace(" ", "").replace("3", "4").replace("2", "3").replace("1", "2").replace("0", "1")
in:
address = line[20:27].replace(" ", "").zfill(7)
subric = line[39:40].replace(" ", "").replace("3", "4").replace("2", "3").replace("1", "2").replace("0", "1")

[Gefährliches Halbwissen CLOSE]

Wenn mich nicht alles täuscht, wird hier eine String-Function mit Positionsangabe ausgeführt.

Da POCSAG512 sich von POCSAG1024 in der Zeichenlänge um ein Zeichen unterscheidet, könnte es hinhauen.
Versuchs mal

JHC
04.03.2015, 16:34
Moin, moin,

im Installations-Skript ist noch ein Fehler:

install.sh, Zeile 85:


echo -e "# blacklist the DVB drivers to avoid conflict with the SDR driver\n blacklist dvb_usb_rtl28xxu \n blacklist rtl2830\n blacklist dvb_usb_v2\n blacklist dvb_core" >> /etc/modprobe.d/raspi-blacklist_sdr.conf


Das "-e" wird mit in die Datei geschrieben und führt zu Fehlermeldungen beim Booten...

Grüße
Jens

Smith
05.03.2015, 00:08
Danke!! Ich ändere das morgen mal. Das install.sh-Script ist wie groß geschrieben BETA. Warum ich den Fehler auf meinen Geräten nicht hatte, weiß der Geier...
edit: bzgl. der Diskussion - hast du mal einen Link? Das ist mir bisher neu. Muss aber auch gestehen das ich den Stand von vor 4 Wochen noch auf den Geräten habe.

Hat der Beitrag von dataflash geholfen? Denn es ist richtig, es muss um ein Zeichen gekürzt werden wenn der POC512 Decoder genutzt werden soll.

Perfectionist
06.03.2015, 23:03
Hallo miteinander,

habe gerade euren Thread gefunden und mit Begeisterung gelesen. Ich habe unabhängig gestern meinen Stick bekommen und heute mal ans Laufen gebracht (POCSAG1200). Multimon scheint auch was auszuwerfen.
Wie reif ist der git-clone? Gibt es noch was besonderes zu beachten?
Muss mir nochmal ne SD-Card holen und will dann RasPoc testen.
Kann man Euch noch bei was unterstützen?

Auf jeden Fall ein dickes Lob an Euch!!!

Perfectionist
07.03.2015, 22:35
Hi,

was nutzt ihr als Webfrontend vor der mysqldb? Habe mir das Python-Skript von github gezogen und versucht POCSAG1200 laufen zu lassen. Leider hat es nicht geklappt. Habe jetzt mal das proprietäre aus dem Thread genommen. Das geht ganz gut. Da ich noch keine mysqldb installiert habe, habe ich einfach die mysql-Statements auskommentiert.

Was haltet Ihr von einer Parameterdatei. Man könnte darin die Filter etc. definieren?

Reissdorf
09.03.2015, 00:20
Ich nutze mysql mit PHP.
Aber alles learning by doing und noch sehr einfach gestrickt. Es ist nichts komplexes, erfüllt aber im Moment seinen Sinn. Da lässt sich mit der Datenbank bestimmt auch viel machen wenn man mysql und php gut beherrscht.

Was für Filter würdest du definieren wollen?

Gruß
Reissdorf

Perfectionist
09.03.2015, 13:28
Hallo Reissdorf,

PHP und mysql ist schon klar. Das ist bei mir zwar schon ein bisschen her, aber wird schon gehen. Die Frage war eher, ob es schon etwas fertiges gibt bspw. Weboberfläche von BOS2Web oder so.

Zum Thema Filter denke ich an Filter wie Sie Arne in AllFMS einsetzt. So kommt es beispielsweise immer wieder zu Fehlauswertungen, d.h. es werden RICs ausgewertet, welche gar nicht zur DA genutzt werden. Diesen "Müll" würde ich gerne gar nicht in der DB stehen haben. Auf den jeweiligen Landkreis bezogen beginnen die RICs ja immer mit der gleichen Abfolge. Weiterhin kommt es auf Grund der verschiedenen DAUs zu "Doppelalarmierungen". Diese kommen innerhalb eines kurzen Zeitfensters. Diese sollen natürlich auch nur einmal in die DB wandern.

Derzeit schreibe ich noch nicht in die DB, sondern nur in die Textfiles. Außerdem teste ich derzeit nur die POCSAG-Auswertung, da ich derzeit nur einen DVBT-Stick habe.

Ich habe das Python-Skript bereits angepasst, um die Doppelalarmierungen raus zu bekommen. Sieht bislang auch ganz gut aus, jedoch möchte ich dies noch etwas testen, ob mein Code auch wirklich stimmt. Was die Filter angeht, so habe ich bereits mal begonnen, bin jedoch noch ganz am Anfang.

Da es nun immer mehr Paramter werden, war der Gedanke die ganzen Parameter in eine conf-Datei auszulagern. Die erleichtert es anderen evtl. Dinge einfacher auf Ihre Gegebenheiten bzw. Wünsche anzupassen, ohne durch das Python-Skript zu müssen.

Gruß

Perfectionist
12.03.2015, 22:06
Hi,

was nutzt ihr bei der Auswertung von FMS und ZVEI für Antennen am DVBT-Stick?

hobbybastler72
15.03.2015, 12:32
Irgendwie komme ich nie zu einer Auswertung...
Bräuchte Pocsac 1200, Frequenz ist bekannt.

Vielleicht kann noch jemand bei der SQL-Datenbank helfen. Wo wird die Datenbank abgelegt, woher nehme ich die Daten für das Skript?

Ich würde gerne auf der Himbeere oder der Banane ein Auswertesystem nutzen, und mit ner 2. Himbeere einen Monitor zur Darstellung der Einsatzstellen (in den letzten 15 min.).
Vielleicht auch mit der 3. Himbeere ein GoogleMaps-Fenster, zur Darstellung des Einsatzortes.

Das ist wohl Ziel der meisten User hier. Vielleicht kann man hier Images bereit stellen.

Perfectionist
15.03.2015, 14:02
Hallo hobbybastler72,

wo genau hängt es denn? Hast Du rtl_fm installiert bekommen und die Sachen von RasPoc von github gezogen und installiert? Zusätzlich zu diesen Dingen muss natürlioch auch noch ein mysql als Datenbank installiert werden und anschließend eine DB angelegt werden und die darin enthaltenen Tabellen mit dem von Smith zur Verfügung gestellten Skript erzeugt werden.

Ein komplettes Image bereits zustellen denke ich ist nicht sinnvoll, da hier auch sehr viele Anpassunge dann noch gemacht werden müssten, so dass dies dann einwandfrei in Deiner Umgebung läuft.

Prinzipiell vesrtehe ichw as Du damit machen möchtest, allerdings denke ich das dies auch ein RasPi 2 Modell B evtl. je nach Lastaufkommen einzeln bewerkstelligen könnte.

Schrolli
31.03.2015, 11:20
Erst mal Danke für das Script, der MySQL Support arbeitet Top.

Ich würde gerne bei bestimmten ZVEI Schleifen eine ca 30 Sekunden Aufzeichnung starten.
Dazu habe ich zu erst einmal im Script rtl_fm und multimon in 2 einzelne subprocess'es gepackt und leite den stdout von rtl_fm auf den stdin von multimon. Das klappt auch super.

Nun versuche ich bei einem ZVEI Alarm mit einem weiteren Subprozess eine Aufnahme zu starten. Der Sound komtm hierbei wieder direkt von rtl_fm als raw über rtl_fm.stdout in den stdin des Aufnahme Prozess.

Aufnahme versuche ich aktuell per "sox" genue Codeänderung kann ich erst heute Abend Posten. Die Aufnahme an sich funktioniert auch, allerdings total abgehackt und nicht zu verstehen. Multimon wertet aber während der Aufnahme sauber weiter aus.

Ich hoffe Ihr versteht was ich meine und könnt mir evtl helfen.

Gruß

PS: Programmiere zwar kein python, spreche aber viele andere Sprachen, und kann mich daher schnell einarbeiten. Wenn Interesse besteht würde ich mich gerne im Projekt mit einbringen. PHP zwecks Front End ist auch kein Problem :-)

McBo
31.03.2015, 20:41
@Schrolli,

das wird so nix.
Ich denke mal Python kommt da mit dem Timing nicht nach.
Habe da schon einiges an Lehrstunden ;-) investiert.

Bei mir funktioniert das so, fast perfekt:

Ich nutze dafür das snd_aloop Device.
Sollte unter Raspian verfügbar sein.
Auf meinem Banana Pi habe ich mir selbst einen Kernel mit aloop gebaut.

1. Mache mal ein "modprobe snd-aloop" und schaue mal mit "aplay -l" ob Du ein Loopback Device hast.

2. Erstelle Dir folgende .asoundrc (bei mir liegt die unter /root/)

pcm.dsnooped {
type dsnoop
ipc_key 2048
ipc_perm 0666
slave {
pcm "hw:Loopback,1"
channels 1
rate 22050
}
}

3. Jetzt kannst Du hiermit das Signal einspeisen:

rtl_fm = subprocess.Popen("sudo rtl_fm -d "+str(deviceid)+" -f "+str(frequenz)+"M -M fm -s 22050 -l " + str(squelch) + " -p "+str(ppmerror)+" \
-E DC -F 0 -g 50 | AUDIODEV=plughw:Loopback,0 play -t raw -r 22050 -e signed-integer -b 16 -c1 -V1 -q -",
stdout=subprocess.PIPE,
stderr=open(LogString_rtl_fm,'a'),
shell=True)

Und hiermit in den multimon-ng wieder einspeisen:

multimon_ng = subprocess.Popen("sudo arecord_multimonng" +str(deviceid)+ " -r 22050 -D plug:dsnooped -c 1 -f S16_LE -t wav | \
multimon-ng" +str(deviceid)+ " "+str(demod1)+" "+str(demod2)+" "+str(demod3)+" -f alpha -t raw -",
stdout=subprocess.PIPE,
stderr=open(LogString_multimonng,'a'),
shell=True)

Einen Record mache ich hiermit:

record = subprocess.Popen("sudo arecord_memo" +str(deviceid)+ " -D plug:dsnooped -f S16_LE -r 22050 -c 1 -d " + str(zvei_RecTime) + " -t raw | lame --scale 10 -s 22050 -r -m mono -b 16 --cbr --resample 48k --lowpass 4 --tt '" + ID3 + "' - " + zvei_RecPath + memolink_zvei,
stdout=subprocess.PIPE,
stderr=open(LogString_memo,'a'),
shell=True)

Das funktioniert so eigentlich ganz gut. Nur nach ca. 12-24 Stunden,
hängt sich der rtl_fm weg. In den Logfiles steht aber kein Fehler.
Eventuell läuft da irgend ein Buffer voll.
Ich habe mir hierfür ein Python WatchDog Script geschrieben.
Damit werden alle Dienste dann durch gestartet.

Momentan experimentiere ich mit dem "tee" Befehl.
Damit starte ich alles vom Bash und splitte den Stream zum
multimon-ng (hier wird ein Python-Filter-Script mit aufgerufen)
und in das snd-aloop Device.

Das läuft so jetzt schon 3 Tage durch !!!!

Gruß

Marcel

Schrolli
31.03.2015, 22:45
Super, Danke!
Werde das morgen mal testen.

Wenn ich das richtig verstehe, leitest du die Daten also in eine virtuelle Soundkarte, von der dann multimon und das record wieder abgreift, ist das so korrekt?

Gruß

McBo
31.03.2015, 22:47
Genau, virtuelles Sounddevice.


Sent from my iPhone using Tapatalk

Schrolli
31.03.2015, 22:56
Damit wäre es ja dann möglich die Sound Daten an verschiedenste separat laufende Scripte zu verteilen, da man nicht mehr an das Piping innerhalb der Python Datei gebunden ist... Klingt gut :-)

McBo
31.03.2015, 22:57
So mache ich das auch.
Aber mit tee scheint es noch besser zu laufen.
Aber vielleicht findest Du ja auch den Fehler.


Sent from my iPhone using Tapatalk

Schrolli
02.04.2015, 07:59
Also bin leider noch nicht zum testen gekommen, aber hab nachgeschaut, das Loopback Device ist da, von daher gehe ich davon aus das es so gehen würde.

Wie machst du es denn mit tee?

Gruß

McBo
02.04.2015, 20:19
Wie machst du es denn mit tee?

So vom Bash:

sudo rtl_fm$ID -d 0 -f XXX.XXXM -M fm -s 22050 -l 15 -p 12 -E DC -F 0 -g 32 | tee >(sudo multimon-ng -a XXXXX -f alpha -t raw - | python /install/py-scripte/raspoc/multimon-filter.py) >(AUDIODEV=plughw:Loopback,0 play -t raw -r 22050 -e signed-integer -b 16 -c1 -V1 -q -) > /dev/null

Das Pythonscript "multimon-filter.py" sieht dann so aus:


import sys
reload(sys)
sys.setdefaultencoding("UTF-8")

try:
line = sys.stdin.readline()
while line:

line = sys.stdin.readline()
.......


Du brauchst die ganzen SubProzesse für rtl_fm und multimon-ng nicht starten.
Der Rest ist dann gleich.

Gruß

Marcel

Jannis
02.04.2015, 21:59
Hi,

Bei meinen Tests (meist FMS und 5-Ton) hat sich herausgestellt, dass die Dekodierung zuverlässiger wird, wenn man auf das NF (Audio)-Signal noch einen lowpass und highpass-Filter anwendet. Die Frequenzen, die zur Modulation verwendet werden, sind ja bekannt. Muss natürlich noch Rechenleistung dafür übrig sein.

Beispiel für's Dekodieren, wenn die Demodulation von gqrx gemacht wird (und das Audiosignal per UDP weitergegeben wird):

nc -l -u -p 7355 | sox -t raw -esigned-integer -b16 -r 48000 - -esigned-integer -b16 -r 22050 -t raw - highpass 1k lowpass 2500 | multimon-ng -t raw -a ZVEI2 -a fmsfsk -

Wenn ihr im Python-Programm eh schon mit tee und virtuellen ALSA-Karten arbeitet, sollte das aber auch einfach in den bestehenden Signalfluß einzubauen sein.

Schrolli
02.04.2015, 22:17
Wie würde das wohl aussehen, wenn man statt Python einfach mal zu C greift?
Kaum Erfahrung mit C unter Linux, aber daran sollte es nicht scheitern.
Hätte echt Lust ne Rahmensoftware um Multimon zu erstellen.
Schön mit übersichtlicher Konfigurationsfile usw.

-variable Datenquelle (rtl_fm, soundkarte, ...)
- Ausgaben Parsen
- diese dann Filtern, nach gewünschten Kriterien
- nach belieben MySQL
- nach belieben Audio Record
- HTTP-Request
- weiß-der-Geier-wohin-mit-den-Daten-Modul

Würde das Performance mäßig überhaupt was bringen?

Gruß

Jannis
02.04.2015, 22:41
Ich würde keine großen Performanceunterschied erwarten, Python kann auch verdammt performant und effizient sein (siehe https://www.paypal-engineering.com/2014/12/10/10-myths-of-enterprise-python/ ). Zugegebenermaßen bin ich eher der C++/Qt4-Typ, Python kann ich nur rudimentär. Aber ich gehen davon aus, dass die meisten Sachen die du beschreibst (MySQL, HTTP, Filtern, Parsen, ...) mit Python einfacher und mit weniger Code zu erreichen sind als in reinem C. Mit Qt sind so Sachen auch nicht kompliziert, ist halt eine andere Philosophie als Python.

Schrolli
02.04.2015, 22:52
Ok, angesichts dessen, macht es wohl der einfachheit halber schon Sinn, bei Python zu bleiben.

Aber die Idee mit der schön zu konfigurierbaren, modularen Rahmen Software würde mir trotzdem schmecken :-D

McBo
03.04.2015, 13:34
Hi,

ich habe meine Konfigurationen in MySQL Tabellen.
Diese werden beim Start vom Bash-Script und Python ausgelesen.

Dazu noch ein passendes Webinterface mit PHP, für das Setup.


Gruß

Marcel

Schrolli
03.04.2015, 14:26
Klingt nicht schlecht, darf man das mal sehen?
Welche Einstellungsmöglichkeiten hast du den? Filter Regeln?

Hätte große Lust per GitHub an was gemeinsamen zu entwickeln :-)
Sauberes PHP Frontend mit Python dahinter

Gruß

Smith
04.04.2015, 15:08
Dann macht das einfach!
Ich ernenne hier jeden, der mir eine PN schreibt mit ein paar vernünftigen Sätzen zu dem was er vor hat, gerne zum Entwickler beim GitHub Projekt RasPoc.

Oder wir machen es neu auf, mir gleich.
Vorteil wäre, es kann jeder nach seinem Dünken an dem Projekt arbeiten und es gibt eine History.
Ich hab diese Tage nicht viel Zeit (McBo, ich schreib dir bald zurück! :) ) aber wer helfen will... ;)

Schrolli
04.04.2015, 19:33
Ich konnts einfach nicht lassen :-D
Hab da mal was "Vorbereitet" https://github.com/Schrolli91/BOSWatch

Mir fehlen noch RAW Daten zu den verschiedenen POCSAG Arten aus Multimon um dafür die Auswertung zu machen. Evtl. hat da jemand was parrat?

Und das Web-Frontend ist auch noch EXTREM rudimentär.
Und vorallem auch sehr "Dirty-Coding". Sollte zu testen erst mal schnell gehen.
Aber das wird auch noch :-)

Bis auf das POCSAG kann es aber schon das gleiche wie RasPOC. MySQL eben ^^

Nächste große Baustelle wird dann die Sache mit dem Audio Recording werden.

Gruß

Hobo
05.04.2015, 22:05
Ich konnts einfach nicht lassen :-D
Hab da mal was "Vorbereitet" https://github.com/Schrolli91/BOSWatch

Mir fehlen noch RAW Daten zu den verschiedenen POCSAG Arten aus Multimon um dafür die Auswertung zu machen. Evtl. hat da jemand was parrat?

Und das Web-Frontend ist auch noch EXTREM rudimentär.
Und vorallem auch sehr "Dirty-Coding". Sollte zu testen erst mal schnell gehen.
Aber das wird auch noch :-)

Bis auf das POCSAG kann es aber schon das gleiche wie RasPOC. MySQL eben ^^

Nächste große Baustelle wird dann die Sache mit dem Audio Recording werden.

Gruß

Sehr schön.

Kann ich das auch wieder einfach im Hintergrund laufen lassen?

Das einzige ist, irgendwie bekomme ich nichts gescheites rein, meine Error-PPM scheint nicht zu stimmen, was rtl_test und kalibrate mir auswerfen...

Schrolli
06.04.2015, 21:38
Sollte man im Hintergrund laufen lassen können, jou.

Mit den Error PPM kann ich dir leider nicht weiter helfen.
Bei mir habe ich sogar ohne eine Angabe (also 0 PPM Error) recht gute Auswertungen.
Da scheint mein Stick recht glücklich zu liegen.

Gruß

Hobo
07.04.2015, 12:54
Hi,

Danke. Ja mit & geht es :-)


Aber ich habe noch ein paar Punkte ;)

1. Ich habe im install.sh das /home/pi durch ~ ersetzt, da ich einen anderen User verwende. vielelciht als Änderung für dich interessant.

2. starten mit mySQL kann man es nur, wenn man sich im Ordner ~/bos/BOSWatch/ befindet. sonst kommt ein Error.

3. ich habe eine DB im Internet, auf meinem eigentlichen Server.
Wie bekomm ich da die Daten rein?`
Ich bekomme folgende Fehlermeldung in der log_bos.txt:


12:26:23 [LOG] reading config file
12:26:23 [LOG] pre-load variables
12:26:23 [LOG] connect to MySQL database
12:26:23 [LOG] starting rtl_fm
12:26:23 [LOG] starting multimon-ng
12:26:23 [LOG] start decoding
12:29:21 [LOG] recived FMS
12:29:21 [INFO] BOS:6 Bundesland:3 Ort:93 Fahrzeug:4301 Status:1 Richtung:0 TKI:III
12:29:21 [LOG] FMS to MySQL
12:29:21 [ERROR] FMS cannot insert
12:29:21 [LOG] recived FMS
12:29:21 [INFO] BOS:6 Bundesland:3 Ort:93 Fahrzeug:4301 Status:f Richtung:1 TKI:IV
12:29:21 [LOG] FMS to MySQL
12:29:21 [ERROR] FMS cannot insert


Danke,

Schrolli
07.04.2015, 13:00
Also 1.) macht Sinn, werde ich sicher anpassen ;-) Danke!

2.) Versteh ich nicht genau was du damit meinst? Error Text?

3.) schau mal ob in der config.ini auch der richtige Name der Tabelle eingetragen ist.


12:26:23 [LOG] connect to MySQL database
Die Verbindung zur Datenbank kommt zustande, sonst würde gleich danach ein Error kommen. Userdaten sind also korrekt


12:29:21 [LOG] FMS to MySQL
12:29:21 [ERROR] FMS cannot insert
Hier dann aber: Er startet das speichern in die Datenbank, wirft dabei aber einen Error. Also entweder findet er die Tabelle wie in der config.ini angegeben nicht, oder aber die Struktur dieser Tabelle ist nicht wie in der boswatch.sql

Liegt diese Datenbank online auf einem gehosteten Server? Die meisten Server blockieren anfragen von extern.

Gruß

Hobo
07.04.2015, 13:02
Was meinst du damit?

s.o. falscher Button :-(

Hobo
07.04.2015, 13:30
Also 1.) macht Sinn, werde ich sicher anpassen ;-) Danke!
Bitte


2.) Versteh ich nicht genau was du damit meinst? Error Text?
Das ist die Fehlermeldung wenn ich die .py Datei aus einem anderen Verzeichnis aufrufe:

13:21:53 [ERROR] config reading error
13:21:53 [ERROR] unknown Error
Traceback (most recent call last):
File "/home/felix/bos/BOSWatch/boswatch.py", line 298, in <module>
if useMySQL: #only if MySQL is active
NameError: name 'useMySQL' is not defined

Der Aufruf:

felix@monitor-pi ~ $ sudo python /home/felix/bos/BOSWatch/boswatch.py -f 85.555M -e 35 -a FMS ZVEI -s 50


3.) schau mal ob in der config.ini auch der richtige Name der Tabelle eingetragen ist.

12:26:23 [LOG] connect to MySQL database
Die Verbindung zur Datenbank kommt zustande, sonst würde gleich danach ein Error kommen. Userdaten sind also korrekt

12:29:21 [LOG] FMS to MySQL
12:29:21 [ERROR] FMS cannot insert
Hier dann aber: Er startet das speichern in die Datenbank, wirft dabei aber einen Error. Also entweder findet er die Tabelle wie in der config.ini angegeben nicht, oder aber die Struktur dieser Tabelle ist nicht wie in der boswatch.sql
Ich habe die Datei zum Einrichten verwendet. nur der DB Name lautet nicht boswatch sondern anders. Die ist leider vorgegeben.
Muss ich das dann in der .sql ändern?


Liegt diese Datenbank online auf einem gehosteten Server? Die meisten Server blockieren anfragen von extern.

Ja liegt sie. Wie kann ich das kontrollieren? Weil mit einer anderen DB geht es auch.

Schrolli
07.04.2015, 13:39
13:21:53 [ERROR] config reading error
13:21:53 [ERROR] unknown Error
Traceback (most recent call last):
File "/home/felix/bos/BOSWatch/boswatch.py", line 298, in <module>
if useMySQL: #only if MySQL is active
NameError: name 'useMySQL' is not defined

Kurz zuvor fliegt der Error, das beim einlesen der Config was nicht klappt, wodurch logischerweise auch keine MySQL Daten gefunden werden. Das lässt sich sicher beheben. Schau ich heute abend drüber, Danke für den Log...




Ich habe die Datei zum Einrichten verwendet. nur der DB Name lautet nicht boswatch sondern anders. Die ist leider vorgegeben.
Muss ich das dann in der .sql ändern?


nene, der Name der Datenbank an sich ist egal, muss nur in der config bei "database=###" eingetragen werden.
Diese boswatch.sql sollte dann zB per PHPmyadmin importiert werden. Damit die Tabellen und ihre Struktur in der Datenbank liegen.

Und die jeweiligen Tabellen Namen müssen dann natürlich auch mit denen in der config.ini übereinstimmen.

Um welchen Hoster geht es denn? Ich weis nur das die meisten Hoster eben externe Zugriffe auf ihre Datenbanken blockieren. Wenn es aber mit anderen Sachen geht, muss man mal schauen woran das liegt.

Gruß

Hobo
07.04.2015, 13:48
nene, der Name der Datenbank an sich ist egal, muss nur in der config bei "database=###" eingetragen werden.
Diese boswatch.sql sollte dann zB per PHPmyadmin importiert werden. Damit die Tabellen und ihre Struktur in der Datenbank liegen.

Und die jeweiligen Tabellen Namen müssen dann natürlich auch mit denen in der config.ini übereinstimmen.

Um welchen Hoster geht es denn? Ich weis nur das die meisten Hoster eben externe Zugriffe auf ihre Datenbanken blockieren. Wenn es aber mit anderen Sachen geht, muss man mal schauen woran das liegt.

Gruß

Also der Hoster ist http://all-inkl.com

Ja genau das habe ich gemacht. die sql importiert.

Im phpMyAdmin unter Server --> Prozesse sehe ich:


Prozesse

Zeige die SQL-Abfragen vollständig an ID Benutzer Host Datenbank Befehl Zeit Status SQL-Befehl
Beenden 51750 d01DB-Name [my öfftl. IP]:45307 keine Query 0 init SHOW PROCESSLIST


Kann ich noch irgendwo das kontrollieren?


[edit]
Also ich habe gerade beim start der py applikation die Prozesse noch mal angeschaut, da ist dann ein zweiter in phpMyAdmin zu sehen. Der eher passt, weil er direkt auf die Datenbank zugreift. der von oben ist der SQL-Server itself.

Also scheint die mySQL Applikation zu sterben.

Schrolli
07.04.2015, 13:59
was hast du den als dbhost angegeben? Hoffentlich nicht localhost, sondern domainname.de? ^^

Gruß

Hobo
07.04.2015, 14:46
was hast du den als dbhost angegeben? Hoffentlich nicht localhost, sondern domainname.de? ^^

Gruß

Ja hab ich. :)
Beim start von boswatch.py seh ich ja nen Zugriff in der db.


Prozesse

Zeige die SQL-Abfragen vollständig an ID Benutzer Host Datenbank Befehl Zeit Status SQL-Befehl
Beenden 55033 d01User Client-IP:40048 d01Name Sleep 1 --- ---
Beenden 55034 d01User Server-IP:46023 keine Query 0 init SHOW PROCESSLIST

Scheinbar läuft der bei Zeit 120 [Sekunden?] auf nen timeout.
Hab es mal probiert. bei exakt 2 Minuten ist der Prozess weg.

Wie bekommen wir hier einen keep-alive hin?

Schrolli
07.04.2015, 14:50
oke, schau ich mir ebenfalls heute abend an, ob ich da was machen kann...
Im Notfall die Verbindung immer neu öffnen und danach schließen.

Teste mal ob Meldungen dann wenigstens in die Datenbank geschrieben werden.
Musst halt solange probieren bis mal was kommt, was innerhalb der ersten 2 Minuten liegt :-D
Damit wenigstens das als funktionierend betrachtet werden kann ^^

Gruß

Hobo
07.04.2015, 19:22
Hab das ganze mittels tcpdump mitgeschnitten:

Man sieht den Login, einwandfrei und dann über die ganze Zeit nichts mehr.

Wegen dem Test zum schreiben konnte ich noch nicht probieren. Immer wenn ich dran war, ist Ruhe 8)

[EDIT]

Hab mich mal etwas auf die Suche begeben und das gefunden:
MySQL (http://dev.mysql.com/doc/connector-python/en/connector-python-connectargs.html)


Troubleshooting and Error Handling
Warnings generated by queries are fetched automatically when get_warnings is set to True. You can also immediately raise an exception by setting raise_on_warnings to True. Consider using the MySQL sql_mode setting for turning warnings into errors.

To set a timeout value for connections, use connection_timeout.

Und das:


connect-timeout=seconds Connect timeout in seconds. On Linux this timeout is also used for waiting for the first answer from the server. (timeout has been replaced by connect-timeout, but timeout is still supported in MySQL 5.0 for backward compatibility.)

interactive-timeout=seconds Permit seconds of inactivity before closing the connection. The client's session wait_timeout variable is set to the value of the session interactive_timeout variable.

Ich weiß aber nicht wo und wie man das einbauen muss.
Bei mir müsste es kleiner 120 sein.

Danke.

Schrolli
07.04.2015, 21:25
Also:

- install.sh auf ~ gefixt
- Pfadangaben absolut - es sollte nun egal sein, von wo das script aufgerufen wird
- mysql connect gefixt
Edit: Also der fix sieht follgendermaßen aus, das für jede aktion eine neue Verbindung geöffnet wird, Daten geschrieben und diese danach geschlossen wird. Nur so kann man sauber einen Timeout umgehen. Hat auch den Vorteil, das falls die Verbindung mal abreist, beim nächsten mal ist sie wieder da, da ja eine neue aufgebaut wird :-)

allerdings erst mal alles im Develop-Branch.
Kannst ja mal testen:
https://github.com/Schrolli91/BOSWatch/tree/develop

Gruß

Hobo
07.04.2015, 22:05
Danke :)

Bekomm aber folgenden Fehler:

./boswatch.py: 5: ./boswatch.py: Syntax error: newline unexpected


Edit 1:
Fehler gefunden, hatte die HTML geladen :(

Edit 2:
Ich würde gern in den parser noch die Ortskennungen vom FMS, sowie die Fahrzeuge mit Namen versehen.
Ebenfalls die ZVEI-Schleifen eine Spalte daneben mit den Ortsnamen.

Im Parser habe ich die Kategorien:

//Data for location Parsing
$location = array(
"21" => "Ort1",
);
//Data for vehicle Parsing
$vehicle = array(
"8401" => "Ort1 40/1",
);

sowie:



case "location":
return $location[substr($fms,2,1)];
break;

case "vehicle":
return $vehicle[substr($fms,3,1)];
break;

hinzugefügt.
Bekomm aber nur leere Spalten.


Wie muss ich den parse mode zvei gestalten?
Sollte so aussehen:

ID | Timestamp | Schleife | Ortsname

Danke schon mal für deinen spitzen support. Ich warte noch auf "Traffic" das ich sagen kann ob das mit der DB jetzt klappt. Die bisherigen Daten habe ich händisch eingetragen.

Und dann wäre noch interessant, ob ich in der Ausgabe filtern kann auf Orts oder Fahrzeugkennungen udn ZVEI Schleifen, à la 531XX Und 53241 ausgeben.

In die DB soll aber alles 8)

Gruß und GN8

Schrolli
08.04.2015, 07:07
Morgen ;-)

Zum Parser...
Alle variablen Sachen würde ich gerne direkt in der Datenbank speichern, soweit bin ich aber noch nicht. Der statische Parser den du eben ansprichst ist eigentlich nur für die Organisation und das Bundesland gedacht, weil eben diese Werte fest stehen. Fahrzeuge und Ortschaften sind dann aber sehr individuell.
Werde da aber evtl heute oder morgen noch was kleines basteln :-)

Übergangsweise:

return $location[substr($fms,2,1)];

2,1 ist hier ausschlaggebend. Hier schnappt er sich ab Ziffer "2" genau "1" Zeichen.
Das müsstest du eben anpassen. Lass dir einfach mal mit echo $fms; den übergebenen String ausgeben, dann kannst du ja abzählen ab wo die Orts und Fhz Kennung anfängt

Edit: https://github.com/Schrolli91/BOSWatch/tree/develop
schnapp dir mal die index.php und parser.php aus dem dev-branch ;-)
und Werf nen Blick in die parser.php - sollte vorerst so gehen (ungetestet, need Feedback)

Gruß

Edit:
Filtermöglichkeiten ala 123** usw sind geplant.
Aber wann ich damit soweit bin kann ich noch net genau sagen.
Meinst du eigentlich Filter im Python oder im Webend?

Hobo
08.04.2015, 10:01
Danke für deine Hilfe.

Also bekomme in Zeile 117 nen Fehler:
Parse error: syntax error, unexpected '{' in /www/htdocs/v114403/alarm/parser.php on line 117
Habe mal ein paar Korrekturen (Klammern, Variablen):


//Parse direction
case "direction":
if(substr($data,9,1) == 1)
{
return "L->F";
}elseif(substr($data,9,1) == 0)
{
return "F->L";
}else
{
return "ERR!";
}
break;

Aber jetzt parsed er nichts mehr.
Überall steht der komplette string.

Und hier ist noch nen Fehler drin, den ich noch nicht gefunden habe:
if (array_key_exists($data, $zvei))



Warning: array_key_exists() expects parameter 2 to be array, null given in /www/htdocs/hobo/bos/parser.php on line 134
Die Zeile ist bei mir anders. ;)

Und ZVEI übernimmt er nicht.

Aber wenn das dann irgendwann über ne eigene DB läuft wär natürlich noch besser 8)


Morgen ;-)
Edit:
Filtermöglichkeiten ala 123** usw sind geplant.
Aber wann ich damit soweit bin kann ich noch net genau sagen.
Meinst du eigentlich Filter im Python oder im Webend?
Ich meine im Webfrontend.
Die Python darf ruhig alles in die DB meißeln.

Übrigens habe ich seit gestern Abend noch nichts empfangen. Entweder Empfangs oder ppm stimmt mal wieder nicht.

Schrolli
08.04.2015, 10:11
Acherje :-D
Da ist mir ja ein ganz "schöner" Fehler unterlaufen, ich meld mich gleich mit Korrekturen zurück ;-)

EDIT:
Sollte alles gefixt sein, und diesmal auch grob getestet! :-D
Einfach nochmal die parser.php aus dem dev-Branch ziehen
Sorry für den Müll den ich da hochgeladen habe ^^

Hobo
08.04.2015, 10:30
Sehr schön :)

Danke. Geht!

Jetzt muss ich nur den Empfang endlich hinbekommen...

Edit:
Was mir gerade einfällt/auffällt.

In einem Funkkreis kann die Fahrzeugkennung (0101) in Bayern für X/10/1 mit unterschiedlichen Ortskennungen auftauchen. Das sollte dann in der Endlösung eine Abhängigkeit sein.

VG und Danke!

Schrolli
08.04.2015, 10:36
Das sollte man tatsächlich bedenken...
Theoretisch müsste ein einzelnes Fahrzeug ja sogar noch die BOS und das Bundesland enthalten um es wirklich eindeutig zuordnen zu können....

Smith
08.04.2015, 16:36
Da hab ich was losgetreten... :-D

Okay, ich übergebe hiermit an Bastian! Ich bin raus und werde es mal die Tage auf meinem Pi testen.

Edit:
Aber die Kanalangabe hättest mitnehmen können :-)

Schrolli
08.04.2015, 20:43
Edit:
Aber die Kanalangabe hättest mitnehmen können :-)

:-D
Na gut, hast mich überzeugt. Dir zu Liebe bau ich sowas wieder ein ^^
Aber Danke für die Blumen :-) Freut mich...

Edit:
Wenn du mal in den Code schaust, findest sich im Argument Parser eine auskommentierte Zeile die den Kanal entgegen nimmt :-D War also bereits seit Beginn vorgesehen.
Meine Prioritäten lagen nur erst wo anders :-P

EDIT2:
Falls jemand POCSAG Rohdaten, wie sie aus Multimon kommen, hat, würde ich mich sehr freuen :-)

c0bRa
09.04.2015, 14:48
Edit:
Was mir gerade einfällt/auffällt.

In einem Funkkreis kann die Fahrzeugkennung (0101) in Bayern für X/10/1 mit unterschiedlichen Ortskennungen auftauchen. Das sollte dann in der Endlösung eine Abhängigkeit sein.
In Bayern ist es der Regelfall, dass die ersten 5 Blöcke den Ort angeben und die letzten 3 das Fahrzeug...

Siehe auch:
https://www.stmi.bayern.de/assets/stmi/sus/feuerwehr/id2_17a_03_02_fms_kenng_fw_anl1_20020523.pdf

Für FMS Fahrzeuge in Gemeinden, die nicht der Hauptwehr entsprechen brauchst du dann eine Referenz über alle 8 Blöcke.

Angenommenes Beispiel:
Gemeinde/Stadt Andechs hat Block 2-5: 3**2
Andechs hat angenommenerweise ein TSF also FMS: 63**2441 Rufname: Florian Andechs 44/1
Dorf Rothenfeld daneben hat auch ein TSF also FMS: 63**2442 aber Rufname: Florian Rothenfeld 44/1, nach FMS Kennung aufgedröselt wäre es aber Florian Andechs 44/2

Schrolli
09.04.2015, 20:06
Dann ist eine auftrennung der FMS Daten nach BLand Ort und FHZ ja so ohne weiteres gar nicht möglich, und man müsste die FMS Daten immer als ganzes sehen... :/

Also zumindest Deutschlandweit gesehen.
Um ein Fahrzeug also bundesweit sicher zuordnen zu können müsste ich alle 8 Blöcke hernehmen. Damit ist das zerlegen innerhalb des Scriptes natürlich völliger Unfug -.-

Smith
09.04.2015, 23:11
Du musst die Daten jetzt sowieso als ganzes sehen.
Im Rahmen der in NRW stattgefundenen TETRA-Umstellung sind die FMS Kennungen nach NRW System jetzt ehh ab absurdum geführt.
Man kann versuchen den alten Rufnamen über den NRW Konverter in die FMSKennung umzusetzen spätestens die LST wird da aber das letzte Wort haben da hier dann eine Zuordnung zur TETRA OPTA im ELR stattfindet.

Ich denke auf kurz oder lang wird das gleiche Schicksal auch die anderen Bundesländer erreichen.

Ich persönlich finde die Aufdröselung in Bundesland Ort etc. hinfällig für die Webseitendarstellung. Einfach den kompletten FMS Code als alphanumerischen Block in die DB und fertig. Es muss eh mit einer anderen Tabelle übersetzt werden.

c0bRa
10.04.2015, 00:27
Dann ist eine auftrennung der FMS Daten nach BLand Ort und FHZ ja so ohne weiteres gar nicht möglich, und man müsste die FMS Daten immer als ganzes sehen... :/

Also zumindest Deutschlandweit gesehen.
Um ein Fahrzeug also bundesweit sicher zuordnen zu können müsste ich alle 8 Blöcke hernehmen. Damit ist das zerlegen innerhalb des Scriptes natürlich völliger Unfug -.-

Für ne grobe Zuordnung (in Bayern) ist die Aufdröselung der FMS Kennung vollkommen hinreichend und in den meisten Fällen auch richtig, wenn es wenige bis keine Fahrzeuge in den Dörfern gibt. Falls doch fahrzeuge in den Ortswehren sind, dann haben 90% der TSF kein FMS, lediglich die 10% mit FMS brauchen dann ne Referenz über alle 8 Blöcke...

Ich fackel die mit nem SQL ab der mit einem COALESCE erst die referenz aus der 8-Block-Tabelle zieht, sofern er den findet, ansonsten sich das aus der 2-5-Block-Refernz zusammenstückelt...

Schrolli
10.04.2015, 07:20
Oke Danke für die Infos.
Dann bau ich jetzt erst mal alles so um, das die 8 Blöcke als ganzes gespeichert werden.
Und danach mache ich mir dann mal Gedanken wie man das Vernünftig parsen kann :-)
Das ganze soll ja nicht nur für Bayern funktionieren, sondern theoretisch Bundesweit, also muss das schon irgendwie einheitlicher Misch-Brei werden ^^

Edit:
Aber wenn ich das richtig sehe, kann man zumindest die BOS und das Bundesland bundesweit einheitlich anhand der ersten beiden Blöcke bestimmen, oder?
Und bis einschließlich Block 5 sind Hexa Möglich? Oder könnten alle Hexa sein? Wichtig wegen der Validation im Script (Plausibilität der Daten prüfen)

Fabpicard
10.04.2015, 11:10
Die BOS-Art und das BuLa sind immer so wie in der TR-BOS festgelegt :)
Zudem steht da drin, das alle Stellen in HEX sind...

Ob man jetzt die Ortskenner nur bis 9 oder auch den "Ort 11" alias B nutzt, ist natürlich jedem selbst überlassen... möglich ist es aber ;)

MfG Fabsi

c0bRa
10.04.2015, 12:22
Die BOS-Art und das BuLa sind immer so wie in der TR-BOS festgelegt :)
Zudem steht da drin, das alle Stellen in HEX sind...

Ob man jetzt die Ortskenner nur bis 9 oder auch den "Ort 11" alias B nutzt, ist natürlich jedem selbst überlassen... möglich ist es aber ;)

MfG Fabsi
Nich nur das, geht ja bei den Fahrzeugen weiter... Wenn ein relativ großes Gemeindegebiet mehr als 10 TSF hat, kanns dir da auch passieren, dass es in HEX auf der 8. Stelle weitergeht. Beispiel 63***44A für das 10. oder 11. (je nachdem ob die 0 auf der Stelle noch genutzt wird oder nicht) TSF in dem Gemeindegebiet. Mal davon ab, dass das dann sowieso eine Ortswehr ist und der Rufname sich von der FMS Kennung unterscheidet.

Anhänger haben ja auch eine eigene Kennung, auch wenn sie keinen Funkgerät haben. Für Alarmierungszwecke können sie dennoch ein C von der Leitstelle bekommen. Ein P250 kann die Kennung 63***250 haben.

Leg für die Kennung erstmal alle 8 Stellen ab und entscheide dann anhand der ersten 2 Blöcke, wie du sie weiter aufdröselst, sofern du keine Referenz in der 8-Block-Referenztabelle hast. Und die würd ich für den Monitor auch nur mit den Einheiten befüllen, die für den Monitor relevant sind.

Einen bundesweit ohne Anpassung funktionierenden Monitor zu programmieren, scheint mir eh alles andere als trivial.

In der Theorie solltest du davon ausgehen dass FMS Kennungen von '00000000' bis 'FFFFFFFF' möglich sein können...

Schrolli
11.04.2015, 20:54
Aktueller master-Branch
https://github.com/Schrolli91/BOSWatch

So jetzt ist es erst mal zusammen gefasst....
Also es werden jetzt alle 8 Blöcke zusammen gespeichert und aktuell auf im Webend zusammen angezeigt.
Nächster Schritt wird jetzt, das ganze einigermaßen Vernünftig zu Parsen.

BOS und BLand scheint ja wie angesprochen einheitlich zu sein, also kann man die beiden dann schon mal "Hardcoded" erschalgen, da is ja alles statisch.

Beim Rest überleg ich mir mal noch was die Tage ;-)

Schönes Wochenende noch zusammen

Smith
12.04.2015, 05:24
Scholli, wofür benötigst du eigentlich die RAW vom POCSAG?
Die passenden Zeilenbereiche für eine Übernahme aus dem STDOUT vom multimon kannst auch aus meiner py nehmen.
Was du allerdings dann abfangen kannst die die Verkürzung der einen Stelle bei Nutzung von POCSAG512.
POCSAG lief perfekt, war eiegentlich auch erst gedacht das ganze nur für POCSAG zu coden.
Nur dank McBo hatte ich mich mit ihm zusammen an ZVEI und FMS gemacht.

Ich bin auch ganz ehrlich, dies wird vermutlich auch das einzige Feature sein was in den nächsten Jahren noch benötigt wird.
In meinem Umkreis wird in spätestens 12 Monaten kein LK mehr FMS absetzen. Es erreichen uns regelmäßig die Infos der jeweiligen LST das umgestellt wird...

Schrolli
12.04.2015, 10:36
Würde halt gerne mal wissen, wie die Daten Roh aussehen.
Kopiere ungerne, selbst geschrieben ist mir einfach lieber.

Gruß

Smith
12.04.2015, 21:26
Das ist sogar in den Sourcen vom multimon zu sehen :-P

Aber, es gibt zwei unterschiedliche Lines zum POCSAG Modul.
Wichtig ist nur das Abfangen der POCSAG1200 und POCSAG512. Und kopieren hin oder her, ich beschwere mich hier auch nicht über irgendwas ;)
Da mein raspoc mir aktuell nur meine veränderten Lines ausgibt und ich gerade nicht die Muse habe eben den DebugMode einzuschalten Hier eben aus einem alten Log zumindest

Variante 1 (POCSAG1200 ohne Text - DAU Überprüfung)

POCSAG1200: Address: 1XXXXXX Function: 3

Variante 2 müsste dann am Ende so aussehen (aus dem Kopf, passt aber eigentlich, sagt mein Script.):

POCSAG1200: Address: 1XXXXXX Function: 2 Alpha: XXXXXXXXX XXX XXX XXXX

POSAG512 um ein Zeichen dann verkürzt.

Ich hab gestern heute morgen einfach mal deinen ZVEI Block genommen und die Anpassungen für POCSAG1200 vorgenommen.
Da du ungerne kopierst, brauch ich mir die Arbeit des push ja nicht zu machen :-D

Smith
13.04.2015, 00:16
POCSAG1200: Address: XXXXXXX Function: 1 Alpha: XXXXXXXXXXXX

hier ne Originale Line mit Alpha... ;)
Die wird zwischen Alpha und dem Text noch getabt.

Schrolli
13.04.2015, 07:07
Super Danke für die Info. Auf die Idee mit den Multimon Sourcen hätte ich auch selber kommen können *Kopf auf Tisch* ^^



Ich hab gestern heute morgen einfach mal deinen ZVEI Block genommen und die Anpassungen für POCSAG1200 vorgenommen.
Da du ungerne kopierst, brauch ich mir die Arbeit des push ja nicht zu machen :-D
Leg doch bitte nicht alles auf die Goldwaage :-D
Du bist herzlich eingeladen, deine Anpassung im Repo zu Pushen ;-)
Sonst hätte ich mit den Git auch sparen können... ^^

Gruß

Smith
15.04.2015, 22:20
Ja, das habe ich den Abend und morgen getan ;-)
Ich gelobe Besserung. Solltest du bereits angefangen haben, schieb es ins devel. Ich nehme dann Anpassungen vor. Wenn nicht, baue ich den POCSAG Bereich gerne nach deinem System weiter.
Außerdem schaue ich mal am WE was wir auf der PHP Ausgabe noch machen können. Wobei McBo da besser ist. Der hat das mal gelernt :-D ;-)

Schrolli
16.04.2015, 07:01
Ne bis jetzt habe ich in Richtung POC noch nix gemacht. Kannst dich also gerne austoben :-)
Bei mir wirds bis zum Wochenende zeitlich eh eng...

Und was das PHP angeht. Das was aktuell existiert war ne absolut quick and dirty Lösung. Wenn McBo da Zeit und Lust hat, kann er sich gerne mit Einbringen. Ansonsten würde ich sagen frickeln wir uns da halt selbst was zusammen, wird schon werden :-P

Gruß

McBo
17.04.2015, 22:30
Wobei McBo da besser ist. Der hat das mal gelernt :-D ;-)

Ne, nix gelernt habe mir das selber angelesen.
Meine Zeit ist aber sehr knapp.

Aber mal was anderes, was mir aufgefallen ist.
Ich habe dafür keine Erklärung.
Ich speise über das Loop Device ezstream (Icecast).
Der multimon-ng wird über tee jetzt direkt gespeist.

Vorher hatte ich auch den multimon-ng aus dem Loop-Device gespeist.
Dabei war mir aufgefallen, dass nach einer bestimmten Laufzeit multimon-ng
beendet wurde.

Darauf hin habe ich mir jetzt mal ein Watchdog-Script mit Log-Funktion gebaut.
Exakt nach 18,6625 Stunden (67185 Sekunden) bricht der Stream ab.

Kann sich das jemand erklären?
Ist das ein Linux Problem?


Gruß

Marcel

Smith
18.04.2015, 00:53
Das einzige was mir dazu einfallen würde wäre ein Speicherüberlauf.
Eines der eingebundenen Programme in deiner Struktur wird wohl alles schön in den RAM schreiben aber wenn er es nicht mehr braucht kicken.
Ich denke irgendein Audioprogramm welches zu den Datenstrom zukommen lässt denn der Audiostream wird immer gleich groß sein da feste Samplerate etc.

Check doch einfach mal per htop Daten der Prozesse kurz vor dem Zeitablauf.

Smith
18.04.2015, 04:36
@Schrolli:
du gehst ja einen etwas anderen weg als ich es am Anfang getan habe. Hast du das Script auch auf einem Pi laufen? ich habe eine CPU Auslastung unter htop bei 100%. Das Python Script schlägt da mit 65% zubuche... bei Übertaktung auf 1000Mhz...

zum POCSAG:
Ich habe das Script umgeschrieben, bekomme aber noch keine Auswertung hin.
Vermutlich aufgrund der Systemauslastung. Der Pocsag demod brauch halt mehr. FMS und ZVEI frisst halt nix im decode...
Ich werde später mal nach den Pipes schauen. Ich habe irgendwie das Gefühl das da was nicht passt... Jetzt ist aber auch erstmal die Luft raus :-) zzZZzz

Schrolli
18.04.2015, 09:13
Hö? Also hier auf nem Raspi der auf 800 oder 900 MHz getaktet ist...
http://www.bilder-upload.eu/upload/ff1f99-1429341615.png
Also bei mir sieht die Auslastung definitiv anders aus ^^

Die Last vom Python Script ist so gering, das es nicht mal in der Auflistung auftaucht... und JA es läuft ;-)

McBo
18.04.2015, 11:53
@Smith,

Dadurch dass ich mit tee den rtl_fm Stream direkt in den multimon-ng gebe,
läuft die Auswertung sehr stabil.
Nur der Audio-Teil (Verwendung für Memo-Record, Icecast, lokaler Lautsprecher), den ich in das Loop-Device einspeise,
der muß über den Watchdog nach besagter Zeit neu gestartet werden.
Das ist aber nur ein Schönheitsfehler.

Ich habe momentan 2 Testsysteme im Dauerlauf (schon 4 Monate).
- Banana Pi Pro
- RaspBerry Pi 2 mit Touch Display

Im Anhang meine htops (4-Kerne = RaspBerry Pi2, 2-Kerne = Banana Pi Pro).

Die 2 Systeme langweilen sich :-)
Auf dem Banana Pi laufen 2 Kanäle gleichzeitig (2x rtl_fm und multimon-ng).
Auf dem RaspBerry Pi2 läuft noch ein Display-Script, welches mir eine schöne Ausgabe macht. :-)
Dieses Script zieht die größte Last.
Außerdem kommuniziere ich zwischen den Scripten mit einem TCP-IP Socket.


Gruß

Marcel

Smith
19.04.2015, 13:12
ich hab es mir schon gedacht.... :-)
Dann mal debugen...

und Marcel, ein Abbruch des Script nach immer der gleichen Zeit spricht von Überlauf durch eines der Programme oder durch die tee. Das wollte ich damit sagen. Deine Systeme sind performant genug, das wusste ich auch vorher schon ;-)
Bist mit dem Pi2 zufrieden?

McBo
19.04.2015, 14:00
Dann mal debugen...
Nur wie? Mir fehlt der Ansatz.
Ich kann auf die Sekunde genau berechnen, wann der Stream abreißt.
Unter htop sieht man aber keinen CPU-Last oder Mem-Last Anstieg.
Man sieht nur wie sich die Dienste beenden und durch meinen Watchdog
wieder neu gestartet werden.


Bist mit dem Pi2 zufrieden?
Wenn Du kein GBit-Lan oder S-ATA benötigst,
ist der Pi2 echt Top.
Habe schon einige Projekte damit umgesetzt.
Die Community ist einfach beim Pi am besten.

Gruß

Marcel

Smith
19.04.2015, 15:24
Das debuggen war auf mich bezogen. :)

Ich melde mich gleich mal bei dir. Ich denke es hat bei dir mit dem Audioplay zu tun.
Im Zweifel, dein Watchdog zeigt dir keine einzelenen Prozesse an oder?
Das wäre eine Möglichkeit. Denn es wird irgendwas zuerst gehen.

Smith
19.04.2015, 15:49
Schrolli, irgendwas passt hier noch nicht.
Allerdings hab ich gerade keine Ahnung wie man das abfangen kann...
Außer ins finally noch eine if-Schleife zu setzten welche checkt ob überhaupt einer der Prozesse gestartet wurde und dann erst versucht diese zu beenden.


root@raspoc1:/boswatch# ./boswatch.py
usage: boswatch.py [-h] -f FREQ [-d DEVICE] [-e ERROR] -a
{FMS,ZVEI,POC512,POC1200,POC2400}
[{FMS,ZVEI,POC512,POC1200,POC2400} ...] [-s SQUELCH] [-v]
[-q]
boswatch.py: error: argument -f/--freq is required
Traceback (most recent call last):
File "./boswatch.py", line 321, in <module>
rtl_fm.terminate()
NameError: name 'rtl_fm' is not defined


Edit:
Auslastung:
Ein frisch installierter Raspi B mit unverändertem per git und install.sh installiertem boswatch:
99.6% boswatch.py...
die anderen Prozesse sehe ich gar nicht erst unter top und htop...

Smith
19.04.2015, 16:52
Zum Thema Auslastung, das hat sich erledigt.
Ich habe gerade noch nen apt-get update etc gemacht. Dabei wurde auch python gefixt.
Erledigt.

Schrolli
19.04.2015, 19:12
Das mit dem beenden fixe ich später noch schnell.. Danke für den Hinweis


Zum Thema Auslastung, das hat sich erledigt.
Ich habe gerade noch nen apt-get update etc gemacht. Dabei wurde auch python gefixt.
Erledigt.
;-) - Wobei ja eigentlich in der install.sh eine update als erstes gemacht wird???

McBo
19.04.2015, 19:41
@Smith,

kann es sein das rtl_fm nach besagter Zeit (67185 Sekunden),
den Stream unterbricht?
Bei direkter Versorgung des multimon-ng stört das sicher nicht.
Aber bei einer Einspeisung über Sound Loop-Device bricht sicher die Pipe.

Gruß

Marcel

Smith
19.04.2015, 20:26
Das mit dem beenden fixe ich später noch schnell.. Danke für den Hinweis


;-) - Wobei ja eigentlich in der install.sh eine update als erstes gemacht wird???

dann funktioniert da aber was nicht richtig? :)
ändere mal den Befehl
<CODE>apt-get update > ~/bos/install/setup_log.txt 2>&1</CODE>
in
<CODE>apt-get update -y > ~/bos/install/setup_log.txt 2>&1</CODE>
Nur hierdurch wird keine Benutzerinteraktion gefordert.

Smith
19.04.2015, 20:28
@Smith,

kann es sein das rtl_fm nach besagter Zeit (67185 Sekunden),
den Stream unterbricht?
Bei direkter Versorgung des multimon-ng stört das sicher nicht.
Aber bei einer Einspeisung über Sound Loop-Device bricht sicher die Pipe.

Gruß

Marcel

rtl_fm wird da nichts unterbrechen. Ich kann es mir nicht vorstellen, denn dann wäre auch bei uns nach 67185 Sekunden ende da die Pipe sich auflösen würde.

McBo
19.04.2015, 20:58
rtl_fm wird da nichts unterbrechen. Ich kann es mir nicht vorstellen, denn dann wäre auch bei uns nach 67185 Sekunden ende da die Pipe sich auflösen würde.

OK, neuer Versuchsaufbau :-)

rtl_fm ist jetzt mal bei mir raus :-)
Habe über "arecord -r 22050 -D plughw:1,0 -f S16_LE -t wav"
den Soundkarten-Eingang direkt auf meine tee Pipe / Loop-Device gegeben.
Als Quelle verwende ich einen analogen Funkempfänger.

Mal sehen was hier nach 67185 Sekunden passiert.


Gruß

Marcel

Schrolli
19.04.2015, 21:47
au Mist, das -y hab ich total verschwitzt... oke mein Fehler ^^

McBo
26.04.2015, 21:03
OK, neuer Versuchsaufbau :-)
rtl_fm ist jetzt mal bei mir raus :-)
Habe über "arecord -r 22050 -D plughw:1,0 -f S16_LE -t wav"
den Soundkarten-Eingang direkt auf meine tee Pipe / Loop-Device gegeben.
Als Quelle verwende ich einen analogen Funkempfänger.
Mal sehen was hier nach 67185 Sekunden passiert.

So, habe jetzt lange getestet - gleiches Problem,
nach 67185 Sekunden bricht die Pipe.
Es liegt also an dem Sound Loop Device.

Jetzt habe ich noch etwas anderes ausprobiert.
Ich habe jetzt auf meinem RaspBerry Pi2
2x rtl_fm und 2x monitord (auf 2 verschiedenen Kanälen)
und zusätzlich noch monitord,
gleichzeitig laufen.

Läuft perfekt !!!!

Dabei ist mir aufgefallen, das monitord mit FMS besser klar kommt.
mit multimon-ng werden z.B.: Fahrzeugkenner "3A44" nicht ausgewertet.

Hat jemand dafür eine Lösung?


Gruß

Marcel

Smith
27.04.2015, 01:12
Warum? keine Ahnung.
Ich bin aber bei FMS auch raus. Ich habe keine Möglichkeit mehr das zu testen.
Wir sind hier komplett umgestellt auf TETRA. Und die 2-4 KTW FMS´sen zu wenig um da eine genaue Aussage zuzulassen.

Marcel, haut der diesen 65718 Sekunden Fehler auf allen Geräten raus?
Wenn ja, lass deinen Watchdog einfach kurz vor Ablauf das Programm reseten.
Damit umgehst du zumindest die Fehler.
Und die Wahrscheinlichkeit das in der Zeit ein Alarm eingeht der verarbeitet werden soll/muss ist wohl eher gering.

@Schrolli:
Wann kommen denn mal neue Ideen von dir? :-D :-P
Ich habe dir gerade einen Pull zum POC1200 und POC512 gesetzt.
Zieh den mal in den Masterbranch.

@all:
Ich werde die Tage mal einen kleinen Desktopclienten fertig machen der per Socket die Alarme auf dem PC anzeigt. Erstmal nix besonderes.
Wer es testen will, kann ja mal hier schreien. Vielleicht schmeiße ich es es dann auch ins Git.

Smith
27.04.2015, 15:48
- POCSAG Rangefilter im forke eingebaut.
In der config ist ein Start und ein Ende für den POCSAG-Bereich anzugeben.
Die Alarmierungen innerhalb der Range werden in die Datenbank oder per HTTP ausgeführt.
Alle anderen werden in der Console angezeigt.

McBo
27.04.2015, 17:46
Warum? keine Ahnung.
Ich bin aber bei FMS auch raus.

Schade, kannst Du vielleicht mal über den Quellcode von multimon-ng
schauen?
Den Fehler mit den Umlauten hast Du doch auch gefunden. :-)

Du hast keine Lust? :-)


Ich habe keine Möglichkeit mehr das zu testen.

Ich habe mir dafür einen Versuchsaufbau gemacht.
Über eine USB-Soundkarte und Line-IN,
gebe ich das von meinem PC-Tool erzeugte FMS-Signal auf den RaspBerry Pi.
multimon-ng und monitord gleichzeitig.

Das geht auch mit ZVEI und POCSAG.

Dabei habe ich festgestellt, das multimon-ng aus einer Fahrzeugkennung "3A44"
"FZG 31044". (monitord: kfz = "3A44")
Er macht also aus der "10" eine "10" und kein "A".

Kannst Du mal im Code nachschauen?


Marcel, haut der diesen 65718 Sekunden Fehler auf allen Geräten raus?
Wenn ja, lass deinen Watchdog einfach kurz vor Ablauf das Programm reseten.
Damit umgehst du zumindest die Fehler.
Und die Wahrscheinlichkeit das in der Zeit ein Alarm eingeht der verarbeitet werden soll/muss ist wohl eher gering.

Ja, haut alles hinter der Pipe weg.
Mit Reseten meinst Du Neustart der Pipe-Einspeisung?


Gruß

Marcel

McBo
27.04.2015, 19:13
So, habe das KFZ-Kennungs-Problem, jetzt erst einmal im Python Script
gerade gebogen :-)

Da fällt mir noch ein Fehler auf :-(

multimon-ng erkennt die vom Fahrzeug gesendeten Statis 4-7,
mit der falschen Richtung ( 1=LST->FZG ).
Bei den anderen Statis passt es ( 0=FZG->LST ).

monitord macht es auch richtig !!!


Gruß

Marcel

Smith
28.04.2015, 00:16
Also wenn er immer aus der 10 ein A macht, dann ist das mit Sicherheit im Quellcode zu finden. Da kann ich die Tage, wenn ich dran denke, mal ran gehen.
Testen werde ich das dann einfach auf einer deiner Kisten ;-P
Wenn du willst, ruf am Freitag einfach mal an. Ich habe Tagesdienst.

und ja, ich meine einfach ein Reset des Programm. Da er alles hinter der Pipe weg haut gehe ich einfach von einem Speicherüberlauf aus. Damit meine ich nicht das er auch physich voll ist sondern er in den Registern dann irgendwann am Ende ist. Oder was auch immer.
Das wird eher ein Thema für die snd_aloop aplay Foren :-)

Ansonsten läuft der multimon stabiler als monitor wie ich finde.
Der Fehler mit den Richtungen lässt sich reproduzieren?
Dann kann ich das im Zweifel auch ändern. Du musst dann nur für eine git clone den Fork aus meinem Repo nehmen. Elias pushed anscheindend keine Änderungen mehr.... :(

McBo
28.04.2015, 00:23
OK,

habe es erst einmal so im Py Script gelöst:


# FMS - Abfrage
elif line.startswith('FMS'):

utc_stamp = int(time.time())
bos = line[19]
land = line[36]
kreis= line[65:67]

# In multimon-ng ist ein Fehler bei der KFZ-Kennung. Fahrzeuge mit alphanumerischer Kennung werden 5-stellig uebermittelt.
# Pruefen ob KFZ-Kennung 4 oder 5 stellig

if str(line[76:77]).isdigit() is True:
#5-stellig erkannt
k1 = line[72:73]
k2 = line[73:75]
k3 = line[75:76]
k4 = line[76:77]

k2 = chr((int(k2)-9)+64)
fhzg = str(k1) + str(k2) + str(k3) + str(k4)
status = line[85]
richtung = line[102]

else:
#4-stellig erkannt
fhzg = line[72:76]
status = line[84]
richtung = line[101]

status = status.replace("\n","")
status = status.replace("\r","")

richtung = richtung.replace("\n","")
richtung = richtung.replace("\r","")

address = (bos+''+ land+''+ kreis+''+ fhzg)8)

Gruß

Marcel

Schrolli
28.04.2015, 10:58
@Smith
Danke habe deine Änderungen in den Master gemerged und auch gleich den Dev Branch geupdatet, damit der auf dem selben Stand ist.

Komme zur zeit leider nicht wirklich oft an den Rechner, hoff das ändert sich bald wieder etwas...

Kann die poc_id nur Zahlen enthalten und muss 7 Stellen lang sein? oder Können auch Buchstaben vorkommen?

Gruß

Smith
28.04.2015, 11:44
Nur Zahlen, ich wollte den Regex auch wieder eingebaut haben. Im Rahmen einer Fehlersuche ist der geflogen.
Allerdings gibt der multimon-ng eh nur Zahlen aus. Von daher ist es egal. :)

McBo
28.04.2015, 11:57
Also wenn er immer aus der 10 ein A macht, dann ist das mit Sicherheit im Quellcode zu finden.

multimon-ng kennt keine Buchstaben.

A ist bei multimon-ng = 10
B = 11
C = 12
D = 13
........


Du musst dann nur für eine git clone den Fork aus meinem Repo nehmen. Elias pushed anscheindend keine Änderungen mehr.... :(

Da benötige ich aber Zugangsdaten von Dir?

Smith
29.04.2015, 08:22
Ahh okay. Das hat sich Elias dann anscheinend bei FMS32 abgeschaut. Ich weiß ehrlich gesagt gar nicht wie es die TR vorsieht.

Hobo
06.05.2015, 21:46
Habe mal das ganze neu geladen, aber jetzt lief ich in einen Fehler, wo vor einem else: leerzeichen statt tabs waren, aber jetzt bekomm ich folgende Meldung:

File "./boswatch.py", line 345
if len(poc_id) == 7: #if POC is valid
^
IndentationError: unindent does not match any outer indentation level

[1]+ Exit 1 sudo ./boswatch.py -f 88.888M -a FMS ZVEI -s 50 -e 33

Hobo
06.05.2015, 22:05
Das ist die erste Meldung:


File "./boswatch.py", line 342
else:
^
IndentationError: unindent does not match any outer indentation level

[1]+ Exit 1 sudo python ./boswatch.py -f 88.888M -a FMS ZVEI -s 50 -e 33

Smith
07.05.2015, 19:07
Ich schaue gleich mal. Der Fehler wird wohl aus meiner Feder stammen, Copy&Past geschuldet...
Ich werde es gleich über Schrolli einstellen lassen.

Smith
07.05.2015, 20:54
Ich weiß nicht ob es hier irgendwer braucht, aber wenn wer Beta-Tester für eine Verbindung zu firEmergency sein möchte, der melde sich bitte bei mir per PN.
Bitte unter Angabe der Alarmierungsart - bisher habe ich nur POCSAG1200 -> firEmergency programmiert. Bei Bedarf würde ich es auch für Analog und POCSAG512 umschreiben für die Beta-Phase.

Smith
08.05.2015, 00:28
Fehler behoben. Script funktioniert wieder.

Jannis
12.05.2015, 20:24
Also wenn er immer aus der 10 ein A macht, dann ist das mit Sicherheit im Quellcode zu finden. Da kann ich die Tage, wenn ich dran denke, mal ran gehen.

So, als der, der den FMS-Dekoder im multimon implementiert hat, hab' ich hier auch mal wieder vorbeigeschaut. Da in meiner Gegend nur "dezimale" Fahrzeugkenner habe, ist das beim Testen nicht weiter aufgefallen, aber das Problem liegt hier:
https://github.com/EliasOenal/multimon-ng/pull/22/files#diff-6687140c8eea68be25afd0058ac3885dR88

Im Prinzip müsste man wohl nur die %1d durch %1x ersetzen und gut is. Elias nimmt bestimmt noch Pull-requests an, wenn man ausreichend Begründung dazuschreibt. Ansonsten halt im eigenen Branch weiterpflegen.

Was war denn mit den Umlauten konkret das Problem? Die kommen bei mit wunderbar UTF-8 kodiert raus und sollten dementsprechend weiterverarbeitet werden.

VG, Jannis

Jannis
12.05.2015, 21:01
multimon-ng erkennt die vom Fahrzeug gesendeten Statis 4-7,
mit der falschen Richtung ( 1=LST->FZG ).
Bei den anderen Statis passt es ( 0=FZG->LST )

Das Problem verstehe ich nicht ganz. Kannst du dafür Beispiele nennen? Ich hab' mich an die PDF-Dokumente gehalten, ich kann die URLs später nochmal raussuchen.
*UPDATE*: http://www.lfs-bw.de/Fachthemen/Digitalfunk-Funk/Documents/Pruefstelle/TRBOS-FMS.pdf ab Seite 54 der Datei

Und wg. dem crash nach gewisser Zeit: Schau mal in die Kernel-Nachrichten ("dmesg"), ob du da was über den crash zu lesen ist.

McBo
13.05.2015, 00:59
Das Problem verstehe ich nicht ganz. Kannst du dafür Beispiele nennen? Ich hab' mich an die PDF-Dokumente gehalten, ich kann die URLs später nochmal raussuchen.
*UPDATE*: http://www.lfs-bw.de/Fachthemen/Digitalfunk-Funk/Documents/Pruefstelle/TRBOS-FMS.pdf ab Seite 54 der Datei

Ich hatte in meinem Python Script, nur Statis mit der Richtung 0=FZG->LST
ausgewertet und war verwundert, das ich nicht alle Statis dieser Richtung bekommen habe.

Darauf hin habe ich mir das Treiben mal auf der Konsole angesehen.
multimon-ng und monitord parallel.
(Ich verwende die Standard Version aus dem Git https://github.com/EliasOenal/multimon-ng)

multimon-ng erkennt die vom Fahrzeug gesendeten Statis 4-7,
mit der falschen Richtung ( 1=LST->FZG ).
Bei den anderen Statis passt es ( 0=FZG->LST ).

monitord macht es richtig.

Ich habe das dann mit einem Windows FMS-Geber-Tool ausprobiert
und hatte bei den Statis 4-7, die falsche Richtung.

Gruß

Marcel

Smith
13.05.2015, 16:03
Hallo Jannis,

Zum UmlautProblem:
Es kam tatsächlich kein UTF-8 raus. Gut möglich das auf dem Pi der Satz fehlte. Dadurch war es nicht möglich zu zählen und bestimme Bereiche zu verarbeiten.
Ich hatte Elias einen Pull gesetzt in welchem einfach nur die Umlaute von Ü auf U etc. Geändert wurde.
Dadurch lief es.
der Pull wurde allerdings nicht gemerged.

VG
Rene

PS.: vom Handy geschrieben. Verzeiht die Fehler ..

JHC
15.05.2015, 17:31
Moin, moin,

ich habe mal etwas mit den beiden Skripten herum gespielt und habe da noch ein paar Fragen:

1a) Wird an Raspoc überhaupt noch entwickelt, oder ist es zugunsten von BOSWatch eingestellt worden?

1b) In Raspoc schaffen es nur die Alarmierungen mit Text in den DB, Alarmierungen ohne Text kommen dort nicht an...

1c) In Raspoc ist die Kanal-Angabe zwar bequem, aber leider sind die meisten TV-Sticks nicht so genau, so dass man einen "Versatz" angeben muss (bei meinen Sticks z.B. 9kHz)

2a) Ich habe hier im Thread von dem Zeitproblem gelesen. Daher eine Verständnisfrage: Warum wird dann im Skript nicht direkt rtl -> multimon-ng genutzt, wie bei Raspoc?

2b) In der Konfiguration ist ein Fehler:
Die Pocsag-Tabelle ist im config-File falsch angegeben.

2c) Ist es geplant den HTTP-Request parametrisierbar zu machen? Dann könnten die Alarmierungen an einen zentralen Server "weitergereicht" werden.

3) Hat schon jemand Erfahrung mit der Anbindung an BOSMon?

Grüße
Jens

Schrolli
15.05.2015, 20:31
1a) Wird an Raspoc überhaupt noch entwickelt, oder ist es zugunsten von BOSWatch eingestellt worden?

Ich gehe davon aus, das Rene an Raspoc nicht weiterarbeitet, da er sich mittlerweile auch bei BOSWatch beteiligt




1b) In Raspoc schaffen es nur die Alarmierungen mit Text in den DB, Alarmierungen ohne Text kommen dort nicht an...

Willst du alles in die DB oder nicht? BOSWatch speichert prinzipiell alles was ankommt, solange es dem Filter entspricht.




1c) In Raspoc ist die Kanal-Angabe zwar bequem, aber leider sind die meisten TV-Sticks nicht so genau, so dass man einen "Versatz" angeben muss (bei meinen Sticks z.B. 9kHz)

BOSWatch hat aktuell nur eine direkte Frequenz Angabe. Optionale Angabe des BOS Kanals ist aber angedacht. Für diesen Versatz gibt es im übrigen die Möglichkeit direkt einen Fehler in PPM des Sticks anzugeben.




2a) Ich habe hier im Thread von dem Zeitproblem gelesen. Daher eine Verständnisfrage: Warum wird dann im Skript nicht direkt rtl -> multimon-ng genutzt, wie bei Raspoc?

Wird doch auch bei BOSWatch gemacht. Der Out Stream von rtl_fm wird direkt in Multimon-NG eingespeist. Das Zeitproblem bezog sich auf eine Audioaufnahme des Streams.




2b) In der Konfiguration ist ein Fehler:
Die Pocsag-Tabelle ist im config-File falsch angegeben.

Schau ich mir an, wird behoben!
EDIT: Done!




2c) Ist es geplant den HTTP-Request parametrisierbar zu machen? Dann könnten die Alarmierungen an einen zentralen Server "weitergereicht" werden.

Ja ist angedacht. Hast du evtl Vorschläge oder Anregung für die Art der Parametrisierung?




3) Hat schon jemand Erfahrung mit der Anbindung an BOSMon?

Ich Persönlich nicht.

Gruß Basti

JHC
15.05.2015, 21:02
Hallo Basti,

okay, die Themen zu raspoc verfolge ich dann nicht weiter und konzentriere mich auf BOSWatch:


Für diesen Versatz gibt es im übrigen die Möglichkeit direkt einen Fehler in PPM des Sticks anzugeben.
Wie muss man diesen Versatz angeben? PPM ist was für eine Einheit?
Aktuell übergebe ich einfach die "richtige" Frequenz an BOSWatch...

zu 2c/3: BosMon-Anbindung
Tja, hier ist leider noch die Antwort von Thimo offen, welche Parameter BosMon da erwartet/anbieten kann.
Ich hoffe, dass ein parametrisierter http-Request funktionieren wird.

2d) Filter:
Ich habe hier noch ein kleines "Problem" mit dem Duplikats-Filter:

Wir sind hier im Grenzgebiet der DAU-Abdeckung, die durch eine Überlappung von
mehreren DAUs sichergestellt wird. Je nach Wetter kommt mal der eine oder mal
der andere DAU gut rein.
Wenn ich den Filter ausschalte, gibt es mehrere und meistens auch mindestens einen
vollständigen Eintrag:



20:35:26 1234567 SR!*R 105*H...*G...*Friedrich-Ebert-Str. 00
20:35:33 1234567 SR!*R 105*H...*G...*Friedr
20:35:49 1234567 SR!*R 105*H...*G...*Friedrich-Ebert-Str. 00*Gebäude
xyz im 1. OG<EOT>
20:35:57 1234567 SR!*R 105*H...*G...*Friedrich-Ebert-Str. 00*Gebäude xyz

Wenn ich den Duplikats-Filter hier jetzt einschalte, wird im Zweifel nur der 1. Datensatz angezeigt und ist leider nicht vollständig...
Ich befürchte, dass hier das Herausfischen des vollständigen Datensatzes nicht trivial wäre oder?
Solange würde ich den Filter ausstellen und später in der Auswertung die Duplikate hinaus schmeißen.

Grüße
Jens

Schrolli
15.05.2015, 21:11
Wie muss man diesen Versatz angeben? PPM ist was für eine Einheit?
Aktuell übergebe ich einfach die "richtige" Frequenz an BOSWatch...

erstmal was didaktisches zu PPM: http://de.wikipedia.org/wiki/Parts_per_million :-D
Im Prinzip wird der Versatz vom Tuner abgegeben. und zwar nicht in Prozent oder Promille, sondern in PPM (also Millionstel)
Hier eine Anleitung wie man den Error für seinen Stick per kalibrate-rtl ermitteln kann
http://www.rtl-sdr.com/how-to-calibrate-rtl-sdr-using-kalibrate-rtl-on-linux/
Einfach die empirisch ermittelte, passende Frequenz anzugeben, ist natürlich einfacher und ebenso zielführend ;-)



zu 2c/3: BosMon-Anbindung
Tja, hier ist leider noch die Antwort von Thimo offen, welche Parameter BosMon da erwartet/anbieten kann.
Ich hoffe, dass ein parametrisierter http-Request funktionieren wird.

Oke, wenn du was weist, melden :-)



2d) Filter:
Ich habe hier noch ein kleines "Problem" mit dem Duplikats-Filter:

Wir sind hier im Grenzgebiet der DAU-Abdeckung, die durch eine Überlappung von
mehreren DAUs sichergestellt wird. Je nach Wetter kommt mal der eine oder mal
der andere DAU gut rein.
Wenn ich den Filter ausschalte, gibt es mehrere und meistens auch mindestens einen
vollständigen Eintrag:

Wenn ich den Duplikats-Filter hier jetzt einschalte, wird im Zweifel nur der 1. Datensatz angezeigt und ist leider nicht vollständig...
Ich befürchte, dass hier das Herausfischen des vollständigen Datensatzes nicht trivial wäre oder?
Solange würde ich den Filter ausstellen und später in der Auswertung die Duplikate hinaus schmeißen.
Schwierig. Der erste Einrag wird direkt gespeichert, alle folgenden mit dem selben RIC verworfen. Um sowas zu bewerkstelligen müsste man im Prinzip JEDES irgendwo zwischenspeichern, hinterher alle Vergleichen und dann das größte Paket nehmen. Kommt bei der Auswertung nun Müll an, der an Zeichen mehr Inhalt hat als das korrekte Paket, so würde auch das fehlerhafte gespeichert.
Also durchaus nicht so trivial leider.

Gruß Basti

JHC
15.05.2015, 21:27
Hallo Basti,


Hier eine Anleitung wie man den Error für seinen Stick per kalibrate-rtl ermitteln kann http://www.rtl-sdr.com/how-to-calibrate-rtl-sdr-using-kalibrate-rtl-on-linux/ Einfach die empirisch ermittelte, passende Frequenz anzugeben, ist natürlich einfacher und ebenso zielführend ;-)
Das habe ich schon ausprobiert, geht mit meinem Stick nicht.
Daher die "händische Frequenzwahl" per graphischem SDR...



Schwierig. Der erste Einrag wird direkt gespeichert, alle folgenden mit dem selben RIC verworfen. Um sowas zu bewerkstelligen müsste man im Prinzip JEDES irgendwo zwischenspeichern, hinterher alle Vergleichen und dann das größte Paket nehmen. Kommt bei der Auswertung nun Müll an, der an Zeichen mehr Inhalt hat als das korrekte Paket, so würde auch das fehlerhafte gespeichert.
Also durchaus nicht so trivial leider.
Wäre auch nur nice-to-have gewesen...

2e) Installations-Script:
Ich hatte mir die Skripte per "git clone" in mein Home "/home/pi/scr/" geholt.
Nach dem Ausführen des Installationsskriptes mit root-Rechten wurde BosWatch ins Root-Home-Verzeichnis installiert. Das war sicherlich nicht beabsichtigt oder?

Grüße
Jens

Schrolli
15.05.2015, 22:39
2e) Installations-Script:
Ich hatte mir die Skripte per "git clone" in mein Home "/home/pi/scr/" geholt.
Nach dem Ausführen des Installationsskriptes mit root-Rechten wurde BosWatch ins Root-Home-Verzeichnis installiert. Das war sicherlich nicht beabsichtigt oder?


Nein, eigentlich sollte das Paket dann in den Ordner ~/boswatch installiert werden, wobei das '~' dem home des aktuell angemeldeten Users entspricht. Daher sollten die Daten eigentlich im Ordner /home/pi/boswatch/ landen, wenn du als pi angemeldet bist.
Ich schau mir das Script aber morgen bei Gelegenheit noch mal an.

Gruß Basti

JHC
15.05.2015, 23:00
Hallo Basti,


Nein, eigentlich sollte das Paket dann in den Ordner ~/boswatch installiert werden, wobei das '~' dem home des aktuell angemeldeten Users entspricht. Daher sollten die Daten eigentlich im Ordner /home/pi/boswatch/ landen, wenn du als pi angemeldet bist.
Ich schau mir das Script aber morgen bei Gelegenheit noch mal an.

gefunden hatte ich es hier: "/root/bos/BOSWatch"

Grüße
Jens

Schrolli
16.05.2015, 08:33
Hab jetzt noch eine kleine Änderung am Install Script vorgenommen.
Dies liegt aktuell allerdings nur dim Dev Branch https://github.com/Schrolli91/BOSWatch/tree/develop

Die Daten werden jetzt nach /home/USER/boswatch installiert
und die Daten der Installation liegen unter /home/USER/boswatch/install ebenso wie das Logfile(setup_log.txt), das es zu sichten gilt wenn bei der Installation was schief geht.

Wenn das Zeug bei dir in /home/root/... gelandet ist, dann warst du auf dem Raspi auch als root eingeloggt, so einfach ist das ^^
~/ verweist immer auf das eigene home Verzeichnis des aktuell angemeldeten Users.

(~/ == /home/USER/)

Gruß Basti

JHC
16.05.2015, 14:24
Hallo Bastion,

jein... ich war mit dem pi-User angemeldet. Da ich davon ausging, dass das Skript root-Rechte benötigt, habe ich es mit "sudo ./install.sh" ausgeführt.

Grüße
Jens

McBo
16.05.2015, 15:32
Mal eine dumme Frage ;-)

Auch wenn die meisten von Euch schon digital sind.
Kann multimon-ng - FMS-Text?

Und könnte man nicht so eine "Auto-Tune" Funktion
einbauen (eventuell mit Hilfe von "kal"),
der die genaue Centerfrequenz bestimmt und verwendet.

Schrolli
16.05.2015, 15:37
Auch wenn die meisten von Euch schon digital sind.
Kann multimon-ng - FMS-Text?

Weis ich leider nicht...



Und könnte man nicht so eine "Auto-Tune" Funktion
einbauen (eventuell mit Hilfe von "kal"),
der die genaue Centerfrequenz bestimmt und verwendet.
Geht bestimmt... Kann ich aber nicht machen, da bei mir nicht mal Kal läuft... irgendwas haut da nicht hin. Scheint nicht mit meinem Stick zu wollen

JHC
16.05.2015, 19:09
Geht bestimmt... Kann ich aber nicht machen, da bei mir nicht mal Kal läuft... irgendwas haut da nicht hin. Scheint nicht mit meinem Stick zu wollen

Kal arbeitet mit GSM-Frequenzen, da dort die richtige "Kanal/Frequenz"-Zuordnung bekannt ist. Viele Sticks (z.B. meine) kommen aber nicht bis in die bei uns verwendeten GSM-Frequenzen.


Und könnte man nicht so eine "Auto-Tune" Funktion
einbauen (eventuell mit Hilfe von "kal"), der die genaue Centerfrequenz bestimmt und verwendet.
Mit einem Tool mit graphischer Ausgabe (z.B. SDRSharp oder HDR) kann man die korrekte Frequenz sehr schnell/einfach ermitteln.

Grüße
Jens

McBo
16.05.2015, 19:32
Mit einem Tool mit graphischer Ausgabe (z.B. SDRSharp oder HDR) kann man die korrekte Frequenz sehr schnell/einfach ermitteln.

Und was nutzt Du als Signalgeber?
Einen Frequenzgenerator?

Gibt es ein Howto zum Ermitteln der Offsetfrequenz
mittels grafischen SDR-Tools?

Mir ist aufgefallen, das die ermittelten Werte von "kal" sehr stark
Temperaturabhängig sind.

JHC
16.05.2015, 19:57
Moin McBo,


Und was nutzt Du als Signalgeber?
Einen Frequenzgenerator?
Nein, die echte Frequenz.


Gibt es ein Howto zum Ermitteln der Offsetfrequenz
mittels grafischen SDR-Tools?
Im BosMon-Forum wurde das mal beschrieben: hier (http://www.bosmon.de/forum/viewtopic.php?f=4&t=2059)


Mir ist aufgefallen, das die ermittelten Werte von "kal" sehr stark
Temperaturabhängig sind.
Ja, gib dem Stick 10-20 Minuten Zeit um auf Betriebstemperatur zu kommen.

Grüße
Jens

McBo
16.05.2015, 20:02
Nein, die echte Frequenz.

Das ist im 4m Band schlecht :-)

Aber da könnte ich ja die GSM Frequenzen nehmen.

Und du setzt dann den rtl_fm Parameter "-p" auf "0"
und gibst Deine korrigierte Frequenz ein?

JHC
16.05.2015, 20:04
Und du setzt dann den rtl_fm Parameter "-p" auf "0"
und gibst Deine korrigierte Frequenz ein?
Ja, genau...

Smith
16.05.2015, 20:20
JHC, raspoc ist quasi tot.
Ich werde an BOSWatch weiter machen.
raspoc war von mir eigentlich auch nur für POCSAG gedacht. Durch McBo bin ich dann auch auf FMS etc. Eingegangen.
BOSWatch ist eigentlich auch das gleiche wie vorher, ohne Schrolli jetzt zu nahe treten zu wollen :-)
Ich will nur nicht an zwei Programmen arbeiten.

So und zu BOSMon, was wünscht du dir?
Das Programm dekodiert ja selbst. Planst du einen RTL Stick -> Bos Mon Einsatz unter Linux? Oder multimon -> BOSMon?

JHC
16.05.2015, 20:47
Hallo Smith,

ich habe auf einem Raspberry Pi einen RTL-Stick mit BOSWatch laufen und will die Eingänge an einen zentralen BosMon-Server weiterreichen.

Beide Seiten laufen, jetzt schraube ich gerade an der Übergabe...
Aufgrund meiner nicht vorhandenen python-Kenntnisse kann das etwas dauern ;)

BosMon erwartet folgenden Aufruf:

http://SERVER:PORT/telegramin/KANALNAME/input.xml?type=pocsag&address=1234567&flags=0&function=a&message=HelloWorld

Grüße
Jens

Schrolli
16.05.2015, 21:16
... ohne Schrolli jetzt zu nahe treten zu wollen :-)
Awoh, da steh ich drüber :-D Freut mich aber, das du hier mitwirkst :-)



BosMon erwartet folgenden Aufruf:

http://SERVER:PORT/telegramin/KANALNAME/input.xml?type=pocsag&address=1234567&flags=0&function=a&message=HelloWorld


Schau ich mir bei Gelegenheit an.
In der config kann man inzwischen (DEV-branch) für den HTTP request für jede Funktion (FMS,ZVEI,POC) eine eigene URL angeben. Da muss man eigentlich nur noch Platzhalter definieren, und diese Parsen. Sollte keine große Sache werden...

Gruß

JHC
16.05.2015, 21:25
Hallo Basti,

ich habe mal quick and dirty einen "useBosMon"-Zweig gebaut:



if useBosMon: #only if BosMon is active
log("POC512 to BosMon")
try:
#BosMon-Schnittstelle erwartet als RIC-Sub/Funktion a-d
bosmon_poc_sub = poc_sub.replace("1", "a").replace("2", "b").replace("3", "c").replace("4", "d")
params = urllib.urlencode({'type':'pocsag', 'address':poc_id, 'flags':'0', 'function':bosmon_poc_sub, 'message':poc_text})
headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}
httprequest = httplib.HTTPConnection(bosmon_server, bosmon_port)
# ToDo: "pocsag" durch bosmon_kanal ersetzen
httprequest.request("POST", "/telegramin/pocsag/input.xml", params, headers)
httpresponse = httprequest.getresponse()
if str(httpresponse.status) == "200": #Check HTTP Response an print a Log or Error
log("BosMon response: "+str(httpresponse.status)+" - "+str(httpresponse.reason))
else:
log("BosMon response: "+str(httpresponse.status)+" - "+str(httpresponse.reason),"error")
except:
log("POCSAG512 to BosMon failed","error")

Aktuell verzweifel ich gerade am Thema User/Passwort für den Aufruf...

Grüße
Jens

McBo
16.05.2015, 21:32
Da kann ich helfen.

Im Anhang ein Auszug aus meinem Icast2 Meata-Update:


# Icecast Meta-Update
import urllib2

icecastrun = process_num("icecast2")
ezstreamrun = process_num("ezstream")

if int(icecastrun) > 0 and int(ezstreamrun) > 0:

print "Icecast und ezstream laufen"

metadata = str(datum) + " " + str(zeit) + " [" + str(schleife) + "] " + str(org) + " " + str(ort) + " " + str(bez)

metadata = metadata.replace(" ","+") #add "+" instead of " " for icecast2
url = "http://" + str(icecast_server) + ":" + str(icecast_port) + "/admin/metadata?mount=/" + str(icecast_mountpoint) + "&mode=updinfo&charset=UTF-8&song=" + str(metadata)

# simple wrapper function to encode the username & pass
def encodeUserData(user, password):
return "Basic " + (user + ":" + password).encode("base64").rstrip()

# create the request object and set some headers
req = urllib2.Request(url)
req.add_header('Accept', 'application/json')
req.add_header("Content-type", "application/x-www-form-urlencoded")
req.add_header('Authorization', encodeUserData(icecast_user, icecast_password))
# make the request and print the results
res = urllib2.urlopen(req)
print res.read()

else:
print "Icecast oder/und ezstream laufen nicht"

Gruß

Marcel

Smith
16.05.2015, 22:39
Edit... :)
Vergesst es.. das war ein anderes Programm.

Okay, dann muss neben User und Passwort in die Config auch noch der Kanalname sowie die IP/URL des Server.

ich baue das dann morgen im Dienst um.

Dann setzte ich auch direkt die firEmergency-Erweiterung ins Dev-Branch ein.

Nächster Schritt ist die Installation von VPN-Komponenten... Das ist gerade im Mulltiserver-Bereich einn Muss! Ich habe hier zwar eines laufen, aber die meisten werden wohl Probleme damit haben...

JHC
16.05.2015, 22:56
Moin, moin,

so, bei mir läuft jetzt alles wie gewünscht.

Hier meine Code-Änderungen:

1.) config.ini

[Module]
useMySQL = 1
#useAudiorecord = 0
useHTTPrequest = 0
useBosMon = 1


[BosMon]
#Server without http://, as IP oder DNS-Name
bosmon_server = 192.168.0.1
bosmon_port = 80
bosmon_user = user
bosmon_password = password
#Channel of type "Web Telegramme"
bosmon_kanal = kanal

2.) boswatch.py

import urllib #for the HTTP request and BosMon with parameters
import base64 #for the HTTP request and BosMon with User/Password



#BosMon config
useBosMon = int(config.get("Module", "useBosMon")) #use BosMon support?
if useBosMon: #only if BosMon is active
bosmon_server = config.get("BosMon", "bosmon_server")
bosmon_port = config.get("BosMon", "bosmon_port")
bosmon_user = config.get("BosMon", "bosmon_user")
bosmon_password = config.get("BosMon", "bosmon_password")
bosmon_kanal = config.get("BosMon", "bosmon_kanal")



if useBosMon: #only if BosMon is active
log("POC512 to BosMon")
try:
#BosMon-Telegramin expected "a-d" as RIC-sub/function
bosmon_poc_sub = poc_sub.replace("1", "a").replace("2", "b").replace("3", "c").replace("4", "d")
params = urllib.urlencode({'type':'pocsag', 'address':poc_id, 'flags':'0', 'function':bosmon_poc_sub, 'message':poc_text})
headers = {}
headers['Content-type'] = "application/x-www-form-urlencoded"
headers['Accept'] = "text/plain"
if bosmon_user:
headers['Authorization'] = "Basic {0}".format(base64.b64encode("{0}:{1}".format(bosmon_user, bosmon_password)))
httprequest = httplib.HTTPConnection(bosmon_server, bosmon_port)
httprequest.request("POST", "/telegramin/"+bosmon_kanal+"/input.xml", params, headers)
httpresponse = httprequest.getresponse()
if str(httpresponse.status) == "200": #Check HTTP Response an print a Log or Error
log("BosMon response: "+str(httpresponse.status)+" - "+str(httpresponse.reason))
else:
log("BosMon response: "+str(httpresponse.status)+" - "+str(httpresponse.reason),"error")
except:
log("POCSAG512 to BosMon failed","error")

BosMon erwartet kein XML, es reicht ein einfacher Get/Post-Aufruf.
Die Parametrisierung ist aber schon speziell (z.B. Funktion a-d)
Was in der BosMon-Schnittstelle "Flags" bedeutet, entzieht sich meiner Kenntnis, bezieht sich evtl. auf andere Protokolle, ich habe nur POCSAG berücksichtigt.

Viel Spaß beim Einbauen ;)

Grüße
Jens

Smith
17.05.2015, 00:08
Sieht gut aus.
Ich baue es morgen in den POCSAG512 und POCSAG1200 Bereich ein.
kannst du dann morgen abend den dev-branch von boswatch nochmal testen?
Ich schmeiß, wie bereits geschrieben, dann auch direkt firEmergency mit rein. Das läuft auch wie geplant.

Zum filtern:
Wie schrolli bereits geschrieben hat, es wird echt schwer das ganze direkt im Script zu filtern. Im Moment habe ich sogar das "Problem" wenn mehrere RICs unserer Einheit alarmiert werden, dann bringt die filterung nichts da RIC A und RIC B im Wechsel kommen, ergo überschreiben die Variabeln sich dann und es wird nicht gefiltert.
Und der Range-Check ist auch nicht ganz dabei. Steht für morgen auf der ToDo...

JHC
17.05.2015, 00:17
Moin, moin,


Sieht gut aus.
Ich baue es morgen in den POCSAG512 und POCSAG1200 Bereich ein.
kannst du dann morgen abend den dev-branch von boswatch nochmal testen?
Die BosMon-Schnittstelle ist generell und übergreifend für alle Dienste (FMS, ZVEI, POCSAG) identisch, so dass die BosMon-Konfiguration in BOSWatch global eingebaut werden kann.
Unterschiedlich sind halt nur die Werte, die man übergeben kann/muss.


Zum filtern:
Wie schrolli bereits geschrieben hat, es wird echt schwer das ganze direkt im Script zu filtern. Im Moment habe ich sogar das "Problem" wenn mehrere RICs unserer Einheit alarmiert werden, dann bringt die filterung nichts da RIC A und RIC B im Wechsel kommen, ergo überschreiben die Variabeln sich dann und es wird nicht gefiltert.
Und der Range-Check ist auch nicht ganz dabei. Steht für morgen auf der ToDo...
Ich lasse BosMon weiterhin den Duplikats-Check machen. Dort sind alle Informationen in der DB vorhanden sind.

Evtl. lasse ich den DAG/DAU-Test in BOSWatch filtern. Andererseits wäre ein "Alarmskript" interessant. Wenn keine Test-Alarme mehr ankommen, läuft etwas falsch.

Grüße
Jens

JHC
17.05.2015, 01:04
Moin, moin,

leider sind meine Linux-Kenntnisse nicht so gut, wie meine Programmiererfahrungen, daher hätte ich da noch eine Frage bzw. ein Feature-Request.

Wie kann ich BOSWatch automatisch (als Dienst) starten?
Wird dafür eine "Dienst-Steuer-Datei" in etc/init.d benötigt, die Start/Stop/Restart implementiert?

Grüße
Jens

Smith
17.05.2015, 08:30
okay. Ich baue es nachher für den Rest auch ein. Hast ja recht.

Zum start-Script: aktuell lasse ich hier beim Reboot das Script inkl. Aufruf über die rc.local ausführen. läuft quasi direkt nach dem init.
wenn ich es noch schaffe heute, baue ich das start-Script. Allerdings werde ich mir nicht die Arbeit machen und die Argument-Übergabe einbauen. Es kann dann jeder seine BOSWatch Zeile einfügen und dann einfach mit ./boswatch.sh start etc. Zum laufen bringen. ;-)

Was aber heute noch kommt ist die Funktion im py Script welche die -p Übergabe ermöglicht.

Schrolli
17.05.2015, 09:22
Was aber heute noch kommt ist die Funktion im py Script welche die -p Übergabe ermöglicht.

Ist doch schon drin? 'boswatch.py -e PPM' gibt den Error in PPM an...


-e ERROR, --error ERROR | Frequency-Error of your Device in PPM


EDIT:
BTW... Sobald Smith seine getesteten Änderungen eingebaut hat, werde ich beginnen den Code zu strukturieren. Also trennen in einzelne Dateien. Denn so langsam wird es unübersichtlich und der Code wiederholt sich eh ständig, wieso also nicht Funktionen erstellen die immer genutzt werden...
Am sinnvollsten wäre es wohl, das ganze als eine Art Plugin System aufzubauen.

JHC
17.05.2015, 10:04
Moin, moin,


okay. Ich baue es nachher für den Rest auch ein. Hast ja recht.
So war das jetzt auch nicht gemeint. ;-)
Ich meinte, dass es nur so einen BosMon-Eingang gibt, so dass man nicht mehrere Konfigurationen (ini) für die verschiedenen Dienste benötigt. (Annahme: keine verschiedenen BosMon-Server)

Testen kann ich allerdings nur POCSAG, die anderen Dienste nutze ich hier nicht.


Als trennen in einzelne Dateien. Denn so langsam wird es unübersichtlich und der Code wiederholt sich eh ständig, wieso also nicht Funktionen erstellen die immer genutzt werden...
Das klingt gut. Für den BosMon-Teil sind -wie bereits erwähnt - die Aufruf-Parameter je Dienst allerdings unterschiedlich. Entweder die Parameter einzelnd oder das params-Objekt übergeben.


Zum start-Script: aktuell lasse ich hier beim Reboot das Script inkl. Aufruf über die rc.local ausführen. läuft quasi direkt nach dem init.
Hast Du mal ein Bsp? Dann würde ich das bei mir auch mal einbauen...


wenn ich es noch schaffe heute, baue ich das start-Script. Allerdings werde ich mir nicht die Arbeit machen und die Argument-Übergabe einbauen. Es kann dann jeder seine BOSWatch Zeile einfügen und dann einfach mit ./boswatch.sh start etc. Zum laufen bringen. ;-)
Anpassungen wären für mich okay, spätestens den Pfad zum Verzeichnis muss auch jeder angeben (oder das install-Skript mit erledigen).

Grüße
Jens

Smith
17.05.2015, 12:21
Ist doch schon drin? 'boswatch.py -e PPM' gibt den Error in PPM an...


-e ERROR, --error ERROR | Frequency-Error of your Device in PPM



ja, als ich mir die Kommandos nochmal angeschaut habe viel es mir auch auf.
Ich bin mit dem -e von boswatch und -p vom sdr durcheinander gekommen zwischen den Fahrten hier... :-)

Und wie ich bereits per PN schrieb, ich bin auch für das auslagern in einzelene Dateien. ;)
der Import eines Modules Verzeichnis ist ja in Py ohne weiteres möglich.
Die Routine dazu schreibst dann du :-D

Schrolli
17.05.2015, 16:52
ja, als ich mir die Kommandos nochmal angeschaut habe viel es mir auch auf.
Ich bin mit dem -e von boswatch und -p vom sdr durcheinander gekommen zwischen den Fahrten hier... :-)

Und wie ich bereits per PN schrieb, ich bin auch für das auslagern in einzelene Dateien. ;)
der Import eines Modules Verzeichnis ist ja in Py ohne weiteres möglich.
Die Routine dazu schreibst dann du :-D

Augen auf im "Verkehr" ;-)

Und zum auslagern... NA TOLL xD muss ich mich mal einlesen.. aber wird schon :-D :-)

BTW falls es jmd interssiert, ich komm grade vom Feuerwehr Fest und nein, heute bin ich nicht mehr in der Lage was zu "coden" :-D

JHC
17.05.2015, 17:26
Hallo Basti,


Und zum auslagern... NA TOLL xD muss ich mich mal einlesen.. aber wird schon :-D :-)
So als alter Softwareentwickler würde ich sagen: Erst in Funktionen auslagern, dann darüber Gedanken machen, wie man die Funktionen in eigene Dateien auslagert. ;)

Grüße
Jens

Schrolli
17.05.2015, 18:01
Hallo Basti,


So als alter Softwareentwickler würde ich sagen: Erst in Funktionen auslagern, dann darüber Gedanken machen, wie man die Funktionen in eigene Dateien auslagert. ;)

Grüße
Jens

Also ich als "alter Software Entwickler" würde da sagen:
Python bietet ne Top Möglichkeit Code auszulagern in Module und Pakete, und die per Import einzubinden. Man müsste nur eine Daten Schnittstelle definieren...

Smith
17.05.2015, 21:24
Und ich als Anfänger sage:
globale Funktionen benötigen dann klar definierte vari. für Datenein- und -ausgang.
nicht mehr poc_id und zvei_id sondern id. ;)

Schrolli
17.05.2015, 21:44
Und ich als Anfänger sage:
globale Funktionen benötigen dann klar definierte vari. für Datenein- und -ausgang.
nicht mehr poc_id und zvei_id sondern id. ;)

Jupp, genau das meinte ich mit der definierten Schnittstelle...
Wenn ein Alarm ausgelöst wird, muss ein definierter Datensatz an die Module übergeben werden. Und jedes Modul macht dann dementsprechend was es eben machen soll (jenachdem ob FMS ZVEI oder POC).

Smith
17.05.2015, 22:14
naja, was ist immer gleich?
typ = POC1200, FMS, ZVEI
id = RIC, ZVEI-Code, FMS-Code
data = poc_text, ZVEI-Festtext (z.B.: Alarm), FMS-Status
sub_id = poc_sub, ZVEI-Festtext (0), FMS-Festtext (0)
time = klar oder?

Wenn wir alle Ausgaben in diese 5 vars bringen sind wir denke ich durch?
Es muss ja nicht alles dann von den Modulen genutzt werden.
Aber ausgeben seitens der Decoder-Routine sollte man alles.
Entsprechend jetzt kann dann jedes Modul schauen ob was für ihn was dabei ist und es verarbeiten.
Oder denke ich falsch?

Edit:
das gefällt mir eigentlich immer mehr. Wenn wir für den Ordner "module" quasi ein wildcard import und diese feste Datenstruktur einbauen, dann kann einfach jeder mal eben ein Modul bauen und veröffentlichen.
Und das Pflegen der Daten ist noch einfacher, ich muss für POC1200, 512, FMS, etc. alles mehrfach ändern. Bei der Modulversion reicht es einmal. Solange ich definiere, dass ich es für den jeweiligen Typ ausführen will (im Modul halt)...
Außerdem wäre das Error-Management sinniger, ich kann beim try/ex. auch direkt die Fehlermeldung generieren und weiß welcher Bereich gerade aus den Fugen springt. Sei es mySQL (okay, zeigt er jetzt auch an) oder mein firEmergency-Block oder was auch immer.

Schrolli
18.05.2015, 07:13
Genau da will ich hin Smith.
Es soll vorallem so laufen, das die Daten einfach rausgehauen werden. Und zwar wie du sagtest "Wildcard" an alle. Man muss also um ein neues Modul zu nutzen nix am Hauptcode ändern müssen, sondern einfach in den Module Ordner sein neues Modul reinkopieren.

Natürlich muss man wie du schon begonnen hast, eine Daten Schnittstelle fest definieren und diese dokumentieren. und schon wird es zum Kinderspiel alle möglichen Module zu nutzen.

Die boswatch.py soll im Prinzip nur die Daten annehmen. Auf Plausibilität checken, double check bzw alles was eben vorher zum filtern Sinn macht und dann einfach an die Module verteilen. Was die dann damit machen, Wayne ;-)

Nur wie man die Daten sauber an beliebig viele Module verteilt ... ?

JHC
18.05.2015, 08:03
Wollt Ihr wirklich den Aufwand treiben und das so generisch bauen?

In Funktionen/Module auslagern ist das eine, das ganze auch noch generisch....
Da muss man dann Helfermethoden haben...

Ich glaube bei Bedarf den if-Zweif in der Hauptdatei zu erweitern ist da einfacher.
Muss sich dann aber auf wenig Code beschränken:

if useMethode: #hier evtl. sogar den get.config-Aufruf, wenn einmalig
doMethode(typ, id, sub, msg)

Schrolli
18.05.2015, 08:38
steh ich auf dem Schlauch, oder liese sich das ganz simpelst so umsetzen?
https://lkubuntu.wordpress.com/2012/10/02/writing-a-python-plugin-api/

Und im Prinzip immer an die run() Funktion den definierten Satz an Argumenten übergeben...

JHC
18.05.2015, 09:03
Ja,klingt so...

Das Programm führt aber immer alle Plugins aus.
Eine Konfigurationsmöglichkeit müsste man noch einbauen.

Schrolli
18.05.2015, 09:07
Ja,klingt so...

Das Programm führt aber immer alle Plugins aus.
Eine Konfigurationsmöglichkeit müsste man noch einbauen.

Für die config der einzelnen Plugins kann man das dann auch fest in die Python Datei am Anfang als constanten einbauen. Da sollte man den Aufwand eines Config Parsers evtl vermeiden. Keep it simple ;-) Und da kann man ja dann auch angeben, ob das Modul überhaupt aktiv sein soll. Das bisschen Rechenaufwand zum "sinnlosen" Einbinden des Moduls sollte kein Problem sein.

Oder man legt nur die config sowie andere Initialisierungen in die __init__.py und macht dann für den eigentlichen Modul Code eine Datei die importiert wird. Man muss die Einstigesdatei ja nicht zwingend __init__.py nennen - siehe pluginloader.py da kann mans ja angeben

Schaut mal in den Dev-Branch / plugin_test
pluginloader.py enthält die Funktionen zum load/reload der Plugins
und die plugin_test.py ruft jede sekunde die Plugins auf.

das schöne an imp.load_module ist, dass schon geladene Module einfach nur neu geladen werden. Also äquivalent zu reload(). man könnte die Plugins also während Boswatch läuft verändern. Die werden bei jedem Aufruf sowieso nachgeladen :-)

JHC
18.05.2015, 09:14
das schöne an imp.load_module ist, dass schon geladene Module einfach nur neu geladen werden. Also äquivalent zu reload(). man könnte die Plugins also während Boswatch läuft verändern. Die werden bei jedem Aufruf sowieso nachgeladen :-)
Das ist für die Entwicklung ganz nett, für eine produktive Umgebung würde ich load_once bevorzugen... ;-)

Schrolli
18.05.2015, 09:19
Das ist für die Entwicklung ganz nett, für eine produktive Umgebung würde ich load_once bevorzugen... ;-)

Das sind aber meiner Meinung nach alles Dinge, die man im Nachhinein ändern kann. Mit der prinzipiellen Funktion eines Plugin Systems hats ja nix zu tun. Ob ich die Module nun EINMALIG lade oder öfters. Würde erst mal priorisieren das so umzusetzen, dass der Code ausgelagert ist, und es funktioniert.

Dann kann man über den "produktiv" Feinschliff nachdenken, oder hast du da eine andere Meinung?

Gruß

JHC
18.05.2015, 09:28
Nein, ich hätte ja noch kleiner mit Funktionen angefangen, bevor ich die Funktionen in Module ausgelagert hätte. Deswegen habe ich nichts gegen schrittweise Vorgehen.

config.ini

useMySQL = 1
Pflicht für Plugin-Name: MySQL

Plugins ausführen:


for i in pluginloader.getPlugins():
if int(config.get("Modules", "use"+i["name"]))
print("Loading plugin " + i["name"])
plugin = pluginloader.loadPlugin(i)
plugin.run()


Edit: Fehler im Code bereinigt

Wäre die minimale Anpassung config.ini um eine neue Zeile ergänzen.

Schrolli
18.05.2015, 09:29
Oke das würde ich so kaufen :-D Die Idee ist gut. Ich mach mich später mal dran, das Grundlegende einzubauen.

Naja wir machen jetzt ja nichts anderes, als die Dinge in eine Funktion zu packen. Nur das die Funktionen jetzt eben driekt in eigenen Dateien liegen :-) Und bis auf die paar Zeilen loader Srcipt ist es ja kein Unterschied...

Schrolli
18.05.2015, 11:34
Würde das wohl reichen, jedem Plugin folgende 6 Daten zu übergeben, oder hab ich was wichtiges vergessen?



ZVEI:
=====
typ = zvei
time = datetime
frequenz= empfangsfrequenz
data1 = zvei code
data2 =
data3 =

FMS:
====
typ = fms
time = datetime
frequenz= empfangsfrequenz
data1 = fms kennung
data2 = status
data3 = richtung

POCSAG 1200:
============
typ = poc1200
time = datetime
frequenz= empfangsfrequenz
data1 = ric
data2 = sub_ric
data3 = text

JHC
18.05.2015, 11:51
Moin, moin,

1.) Warum die Zeit übergeben? Wird ja nicht "über Funk" übertragen. Ermittlung wenn nötig im Modul, bzw. bei MySQL die DB machen lassen.

2.) Ist später eine Unterscheidung in POCSAG 512/1024/2048 nötig?
Wird doch nur für die Stringzerlegung benötigt.

Ich würde nicht data1-3 nennen, das finde ich zu unverbindlich.
Bisher werden im Script id, function/status, msg/richtung genutzt.
Wenn inhaltlich etwas anderes genutzt wird, müsste man in meinen Augen auch einen neuen Parameter definieren.

Grüße
Jens

Schrolli
18.05.2015, 12:09
Moin, moin,

1.) Warum die Zeit übergeben? Wird ja nicht "über Funk" übertragen. Ermittlung wenn nötig im Modul, bzw. bei MySQL die DB machen lassen.

2.) Ist später eine Unterscheidung in POCSAG 512/1024/2048 nötig?
Wird doch nur für die Stringzerlegung benötigt.

Ich würde nicht data1-3 nennen, das finde ich zu unverbindlich.
Bisher werden im Script id, function/status, msg/richtung genutzt.
Wenn inhaltlich etwas anderes genutzt wird, müsste man in meinen Augen auch einen neuen Parameter definieren.


1.) Macht Sinn, die zeit kann wirklich weg...
2.) Hab hier kein Pocsag, und kenn mich damit auch nicht aus. Keine Ahnung inwiefern eine Unterscheidung im nachhinein nötig ist.

Die Daten werden an die Plugins ja auch nur an eine Funktion übergeben. Also brauchen wir eine FEST definierte Anzahl an Parametern. Und wie die dann heißen ist eigentlich egal, das ändert sich ja auch nie mehr, denn dann müssten alle Plugins umgeschrieben werden.
Oder wie sollte ich sie denn sonst nennen, um die Daten an die Plugin.run() zu übergeben?

Schrolli
20.05.2015, 11:10
Servus zusammen,

JHC und ich entwickeln zusammen gerade an einem Plugin-System für BOSWatch.
Also nicht das Ihr denkt, hier geht nix weiter. Wir koordinieren uns nur privat, da es viel zu viel zu besprechen gibt.

Das ganze arbeitet inzwischen auch recht sauber.
Wir beginnen jetzt die einzelnen Module zu programmieren.

Vorgesehen sind aktuell auf jeden Fall:
- MySQL
- BosMon
- HTTP-Request (einacher URL Aufruf, evtl mit Parametern)
- E-Mail

Evtl gibt's ja noch weitere Wünsche, deren Umsetzbarkeit man prüfen sollte?

Gruß Basti

Hobo
20.05.2015, 14:26
Evtl gibt's ja noch weitere Wünsche, deren Umsetzbarkeit man prüfen sollte?


Also ich würde ein SMS ein/ausgang interessant finden und auch ein Pushbullet (https://pushbullet.com).

SMS eingang deshalb, wenn die Leitstelle eine SMS versendet, dass diese mit in die DB kommt, und evtl auch weitergeleitet wird, anhand von Daten: Uhrzeit/Stichwort/Ort.

Geht evtl. auch eine Threema und WhatsApp Anbindung?

--> Ihr seid gut! [:)]

Schrolli
20.05.2015, 14:34
Also ich würde ein SMS ein/ausgang interessant finden und auch ein Pushbullet (https://pushbullet.com).

SMS eingang deshalb, wenn die Leitstelle eine SMS versendet, dass diese mit in die DB kommt, und evtl auch weitergeleitet wird, anhand von Daten: Uhrzeit/Stichwort/Ort.

Geht evtl. auch eine Threema und WhatsApp Anbindung?

--> Ihr seid gut! [:)]

SMS Ausgang wäre normalerweise per HTTP-request erledigt, da so ziemlich jeder Anbieter so versendet.
Dieses Pushbullet muss ich mir mal ansehen...

SMS Eingang geht am Sinn der Software vorbei, da sehe ich aktuell einfach keinen Sinn
BOSWatch ist ja ursprünglich nur ein Script um den Multimon-NG Datenstrom auszuwerten.

Threema und WA geht meines Wissens nicht so einfach, und das ist auch gut so. Es gibt keine öffentlichen APIs - zwecks Sicherheitsaspekten.

Gruß

Schrolli
21.05.2015, 07:22
So,
im Master-Branch liegt jetzt erst mal eine aktuelle Version.
Im Moment arbeitet nur das MySQl Plugin. BosMon sollte bald folgen.

https://github.com/Schrolli91/BOSWatch

Wenn Fehler gefunden werden, entweder hier, oder gleich auf Github per Issue melden :-)
Und bitte bei Fehler mal ins Logfile schaun (logs/boswatch.log) und ggf. die letzten paar Zeilen kopieren.
Feedback erwünscht... ;-)

Gruß Basti


@Smith: Wo ist eigentlich der Unterschied zwischen Pocsag512, Pocsag1200 und Pocsag2400 zwecks Auswertung? Nur weil 512 eine Stelle kürzer ist als 1200/2400 ? Oder woran liegt das, dass es dafür 2 getrennte Auswerte Zweige gibt (512/1200)

Dtrieb7482
21.05.2015, 19:33
Vielleicht könnt ihr Telegram anstatt Whatsapp oder Threema nutzen?

https://core.telegram.org/api

Perfectionist
21.05.2015, 19:57
Hey Jungs, könnt ihrbdie Zeit nicht wenigstens optional für POCSAG drin lassen? Bei uns wird hier die Leitstellenzeit mitgeschickt. Fürs ETB ist es immer ganz gut wenn man hier nochmal nachschauen kann und dann definitiv die Zeit der LST mit drin hat.

Habt ihr schon was um POCSAG Doppelalarmierungen abzufangen? Hab hier bei mir mal was proprietäres eingebaut was ganz gut funktioniert auch wenn blockweise mehrere Rics Durcheinander reinkommen. Falls gewünscht kann ich Euch den Code mal zukommen lassen auch wenn dieser sicher noch verbesserungswürdig ist.

Gruß

JHC
21.05.2015, 23:50
Hey Jungs, könnt ihrbdie Zeit nicht wenigstens optional für POCSAG drin lassen? Bei uns wird hier die Leitstellenzeit mitgeschickt.

Moin, wie wird die Zeit mitgeschickt? Im Text?
Der Text wird nicht verändert. Da Multimon-NG keine Zeit ausspuckt, wird die Zeit immer vom Skript berechnet.

Grüße Jens

Schrolli
22.05.2015, 07:24
Vielleicht könnt ihr Telegram anstatt Whatsapp oder Threema nutzen?
https://core.telegram.org/api
Ich persönlich kenne Telegram nicht, dementsprechend auch niemand der es nutzt.
Von daher sehe ich nicht unbedingt einen Nutzen für mich, mir da jetzt die Arbeit zu machen. Aber die Plugin Schnittstelle ist dokumentiert, es kann also gerne jeder selber ran und versuchen :-)



Bei uns wird hier die Leitstellenzeit mitgeschickt.

In welcher Form wird die denn mitgeschickt? Die Plugins ermitteln die Zeit ja selbst, und die dürfte sich von der LST Zeit kaum unterscheiden. (1-2 sek evtl)



Falls gewünscht kann ich Euch den Code mal zukommen lassen...

Gerne, anpassen kann ich zur Not immer noch ;-)

Gruß

skyfire
22.05.2015, 09:01
Hallo ,

verfolge euer Projekt schon ein Weile. Danke für eure Arbeit.
Wäre es möglich eine Schnittstelle zu firemergency zu integrieren?

Grüße Florian

Schrolli
22.05.2015, 09:03
verfolge euer Projekt schon ein Weile. Danke für eure Arbeit.
Wäre es möglich eine Schnittstelle zu firemergency zu integrieren?

Davon hatte Smith mal was geschrieben glaube ich. Weis nur nicht ob er schon was dafür Entwickelt hat.

EDIT:
Gerade den aktuellen Dev Stand in den Master Branch gemerged.
Wir sind jetzt funktional auf dem Stand von vor dem Plugin System nur eben mit der tollen neuen Plugin Unterstützung ;-):
- MySQL Support geht
- HTTP Request ohne Parameter geht
- Zusätlich geht für POCSAG schon das BosMon Plugin.

btw: Pocsag 512/1200/2400 support

Außerdem fallen die Logfiles nun VIEL ausführlicher aus und Fehler werden vernünftig protokolliert, sodass anhand der Logfiles auch eine schnelle Fehlerbeseitigung möglich wird. Hier ein Beispiel: http://pastebin.com/raw.php?i=JEL95RSQ

Perfectionist
22.05.2015, 12:50
Moin, wie wird die Zeit mitgeschickt? Im Text?
Der Text wird nicht verändert. Da Multimon-NG keine Zeit ausspuckt, wird die Zeit immer vom Skript berechnet.

Grüße Jens

Ja die Zeit steht im Alarmierungstext. Schön wäre es wenn man den Text auch splitten könnte.

Schrolli
22.05.2015, 19:43
Ja die Zeit steht im Alarmierungstext. Schön wäre es wenn man den Text auch splitten könnte.

Wenn die Zeit im Text steht ist doch alles ok, der Text wird sowieso übertragen...
Wieso splitten? Wo? Warum?

Gruß

chortyenz
24.05.2015, 09:42
Hallo zusammen.
Ich habe ein Problem mit dem ausführen der install.sh
Ich verwende einen Raspberry mit Raspian_2015_5_5.
Update und Upgrade wurden ausgeführt.
Mit sudo wget https://github.com/Schrolli91/BOSWatch/blob/master/install.sh habe ich mir die install.sh in das \home Verzeichnis geladen.
Danach mit sudo chmod +x install.sh die Rechte angepasst.
Mit dem Befehl sudo sh install.sh versucht die install.sh auszuführen.
Hier bekomme ich folgende Fehlermeldung.
install.sh: 5: install.sh: Syntax error: newline unexpected

Habe ich hier was falsch gemacht oder liegt es an der install.sh?
Habe die install.sh mal mit nano geöffnet habe aber in Zeile fünf, wenn ich die Fehlerbeschreibung richtig interpretiere, nichts auffälliges gefunden.

Danke schon mal für die Unterstützung.

chortyenz
24.05.2015, 09:47
Hallo zusammen.
Ich habe ein Problem mit dem ausführen der install.sh
Ich verwende einen Raspberry mit Raspian_2015_5_5.
Update und Upgrade wurden ausgeführt.
Mit sudo wget https://github.com/Schrolli91/BOSWatch/blob/master/install.sh habe ich mir die install.sh in das \home Verzeichnis geladen.
Danach mit sudo chmod +x install.sh die Rechte angepasst.
Mit dem Befehl sudo sh install.sh versucht die install.sh auszuführen.
Hier bekomme ich folgende Fehlermeldung.
install.sh: 5: install.sh: Syntax error: newline unexpected

Habe ich hier was falsch gemacht oder liegt es an der install.sh?
Habe die install.sh mal mit nano geöffnet habe aber in Zeile fünf, wenn ich die Fehlerbeschreibung richtig interpretiere, nichts auffälliges gefunden.

Danke schon mal für die Unterstützung.

Ich glaube ich habe den Fehler gefunden. Mit wget bekomme ich eine HTML Datei und nicht das Script. Habe die Datei händisch angelegt danach ging es.

Schrolli
24.05.2015, 12:06
Ich glaube ich habe den Fehler gefunden. Mit wget bekomme ich eine HTML Datei und nicht das Script. Habe die Datei händisch angelegt danach ging es.

Oke, damit scheint der Fall ja erledigt zu sein :-)

chortyenz
01.06.2015, 12:12
Hallo zusammen.
Ich teste gerade mit meinem Pi und zwei DVB-T Sticks. Ich habe derzeit Probleme mit der Pocsaq Auswertung. FMS funktioniert einwand frei. Pocsaq kann ich mit SDRSharp empfangen, nur mit BOSWatch hab ich da ein wenig Schwierigkeiten.

Wie kann ich den Develope branch bei mir installieren?
Ich hatte es versucht mit git clone https://github.com/Schrolli91/BOSWatch/tree/develop aber dort ist keine git hinterlegt!? Google half mir hier auch nicht weiter.

Wie muss ich das mit dem Squelch Attribut verstehen? Ist dies 0-100 oder was mach ich dort generell mit :) .

Ansonsten finde ich das Script sehr gelungen. Gute arbeit Jungs!!!

JHC
01.06.2015, 19:18
Hallo chortyenz,

Ich teste gerade mit meinem Pi und zwei DVB-T Sticks. Ich habe derzeit Probleme mit der Pocsaq Auswertung. FMS funktioniert einwand frei. Pocsaq kann ich mit SDRSharp empfangen, nur mit BOSWatch hab ich da ein wenig Schwierigkeiten.
Gibst Du bei BOSWatch die Frequenz und einen evtl. Versatz an?
POCSAG ist sehr empfindlich, wenn man nicht die genaue Frequenz einstellt.


Wie kann ich den Develope branch bei mir installieren?
Ich hatte es versucht mit git clone https://github.com/Schrolli91/BOSWatch/tree/develop aber dort ist keine git hinterlegt!?
Develop ist auch kein eigenes git, sondern eine andere Sicht (Branch Develop) auf dieses.
Wenn Du den Develop-Branch clonen willst, musst Du folgendes eingeben:

git clone -b develop https://github.com/Schrolli91/BOSWatch.git


Wie muss ich das mit dem Squelch Attribut verstehen? Ist dies 0-100 oder was mach ich dort generell mit :)
Das ist die Rauschsperre, schau bei SDRSharp, was Du da einstellst, damit Du gerade kein Rauschen mehr hörst.

Grüße
Jens

JHC
01.06.2015, 19:35
Hallo Perfectionist,

Ja die Zeit steht im Alarmierungstext. Schön wäre es wenn man den Text auch splitten könnte.
Du müsstest dann im gewünschten Plugin (z.B. MySQL) die entsprechende Änderung vornehmen, so dass die Zeit aus der Nachricht entnommen und für den DB-Eintrag verwendet wird.

Da im Normalfall keine Zeit in der POCSAG-Msg steht, können wir das nicht allgemeingültig einbauen.

Grüße
Jens

joki
01.06.2015, 19:37
Hallo zusammen,
ich habe das ganze mal unter debian zum laufen gebracht, mysql läuft auf einem vserver bei hosteurope, aber irgendwie schlagen da keine POCSAG Meldungen auf, bzw. im Webfrontend gibts nur ZVEI und FMS, ist das gewollt so und wenn ja wir kann ich die POCSAG´s sehen?



Grüße aus dem Rhein-Neckar-Delta

joki

JHC
01.06.2015, 19:41
Hallo Joki,

ich habe das ganze mal unter debian zum laufen gebracht, mysql läuft auf einem vserver bei hosteurope, aber irgendwie schlagen da keine POCSAG Meldungen auf, bzw. im Webfrontend gibts nur ZVEI und FMS, ist das gewollt so und wenn ja wir kann ich die POCSAG´s sehen?
Das Web-Frontend kenne ich leider gar nicht, so dass ich dazu nichts sagen kann.

Hast Du mal direkt in die DB geschaut, ob dort überhaupt POCSAG-Einträge vorhanden sind?
Werden POCSAG-Meldungen auf der Console ausgegeben?

Grüße
Jens

Smith
01.06.2015, 20:10
sorry Jungs, ich war ein wenig arg eingespannt.
Jetzt im Urlaub und ein paar Stunden Zeit die Tage.
Das firEmergency funktioniert, ich habe allerdings noch keinen Blick auf das neue Plug-In System geworfen.
Ich werde es aber heute Abend noch stricken. :)

Viele Grüße
Rene

Reissdorf
02.06.2015, 17:40
Hallo Joki!
Hast du von extern denn Zugriff auf den mySQL Server? Viele Server erlauben in der Standartkonfiguration nur einen Zugriff vom Localhost.
Hast du mal einen externen Zugriff versucht?

Gruß
Rissdorf

JHC
02.06.2015, 18:06
Hallo Joki,

die RICs werden von BOSWatch aussortiert, da sie nicht 7-stellig sind.
https://de.wikipedia.org/wiki/Radio_Identification_Code

Stimmen die ausgegebenen RICs bei Euch? 0123456 -> 123456?

Ich werde mal bei multimon-ng gucken, ob führende Nullen unterdrückt werden, dann hätten wir da ein ToDo...

Grüße,
Jens

PS: Ich würde Dir empfehlen Deine Beiträge zu editieren.
Das Veröffentlichen des Logs mit echten RICs/Adressen/Meldungen ist nicht erlaubt.

Schrolli
03.06.2015, 08:31
Na dann melde ich mich auch mal kurz aus dem Urlaub ;-)

Wegen den 6 stelligen RICs müsste eben mal geklärt werden, ob das nur führende 0en Betrifft, oder generell 6stellig geht. Da kann man das Vadlidation RegEX ja recht schnell umstricken...

Und zum Web Frontend:
Das wurde mal angefangen zum testen, da jetzt aber derzeit große Änderungen an BOSWatch selbst laufen, lag das erst mal auf Eis. Eine Pocsag Anzeige wurde bisher noch gar nicht im Frontend implementiert.
Aber das wird dann wohl die nächste Baustelle sein, wenn die größten Bugs aus dem Aktuellen Dev Stand raus sind.

Grüße aus Prag - Basti

Smith
03.06.2015, 17:03
Hey,


Wegen den 6 stelligen RICs müsste eben mal geklärt werden, ob das nur führende 0en Betrifft, oder generell 6stellig geht. Da kann man das Vadlidation RegEX ja recht schnell umstricken...
RICs müssen definitv 7-Stellig sein, wie JHC schon schrieb. Das einzige was auftreten kann, sind führende Nullen.
Die ersten 3 Stellen sind zur Identifizierung des LK in der BRD, soweit ich weiß.
Also muss der RegEx dementsprechend angepasst werden. Ich hab da aber ehrlich gesagt nicht dran gedacht.... :)

@JHC:
Es sieht so aus als wäre es auch so das Multimon die führende Null rauswirft. Es muss also auch die Plausibilitätskontrolle (ric==7) angepasst werden oder es schreibt wer einen Pull-Req. an Elias :)



Grüße aus Prag - Basti
Grüße aus den Niederlanden! :-)

JHC
03.06.2015, 18:16
Moin Smith,


Es sieht so aus als wäre es auch so das Multimon die führende Null rauswirft. Es muss also auch die Plausibilitätskontrolle (ric==7) angepasst werden oder es schreibt wer einen Pull-Req. an Elias

Ich habe im Quellcode von multimon-ng keinen Abschnitt gefunden, der dafür sorgt, dass eine führende Null ausgegeben wird. Ich habe nur Längenprüfungen 1-7 gesehen und die Ausgabeformatierung auf 7 Zeichen Platz, rechtsbündig. Das passt soweit zum geposteten Bild mit " 123456". Entweder Dekodierungsfehler oder der RIC war wirklich 0123456 und multimon-ng lässt irgendwo in der Typkonventierng die null fallen.
Ich habe es mir mal erlaubt Elias eine eMail zu schreiben, mal schauen ob er darauf reagiert.

Grüße
Jens

PS: Leider habe ich keine offiziellen RIC-Struktur-Dokumente gefunden, die das vorgeben...

Smith
03.06.2015, 18:27
Ich habe im Quellcode von multimon-ng keinen Abschnitt gefunden, der dafür sorgt, dass eine führende Null ausgegeben wird. Ich habe nur Längenprüfungen 1-7 gesehen und die Ausgabeformatierung auf 7 Zeichen Platz, rechtsbündig. Das passt soweit zum geposteten Bild mit " 123456". Entweder Dekodierungsfehler oder der RIC war wirklich 0123456 und multimon-ng lässt irgendwo in der Typkonventierng die null fallen.

Ich gehe davon aus, das dies der Fall ist. Ich habe mir zwar den Quelltext nicht angeschaut, aber es wird so sein.

Die RIC wird dann von boswatch aktuell nicht mehr aufgefüllt. Ich hatte das damals so geschrieben.
.replace(" ", "").zfill(7)
Ich denke damit sollte der Fehler dann behoben sein.
Mit der Filterung der Range, welche dann nach diesem Schritt ausgeführt wird, sollte dann auch Fehldekodierungen nicht mehr vorhanden sein.
Eingang -> RIC auf 7 Stellen -> RIC in Range? -> weitere Ausführung.



Ich habe es mir mal erlaubt Elias eine eMail zu schreiben, mal schauen ob er darauf reagiert.

Bin gespannt, was er dazu sagt. :-)



PS: Leider habe ich keine offiziellen RIC-Struktur-Dokumente gefunden, die das vorgeben...
Naja, offizielle Doku kenne ich auch nicht. Aber schonmal einen DME mit 6 Stellen versucht zu programmieren? Lässt das Programm nicht zu :-)

JHC
03.06.2015, 19:38
Hi Smith,


Die RIC wird dann von boswatch aktuell nicht mehr aufgefüllt. Ich hatte das damals so geschrieben.
.replace(" ", "").zfill(7)
Ich denke damit sollte der Fehler dann behoben sein.

Ich sehe das nicht als "Fehler" in BOSWatch, wenn RICs eigentlich 7-Stellig sind sollte. Eigentlich dürfte BOSWatch die RIC nur von links beginnend auffüllen, ein Leerzeichen rechts von der Zahl oder zwischen den Ziffern wäre ein echter Fehler.


Naja, offizielle Doku kenne ich auch nicht. Aber schonmal einen DME mit 6 Stellen versucht zu programmieren? Lässt das Programm nicht zu :-)
Da wir hier nur RICs > 1xxxxxxx haben, hat sich mir das Problem mit 0xxxxxx noch nicht gestellt.

Grüße
Jens

Smith
03.06.2015, 22:36
Ich denke du weißt was ich meine.
das zfill ist schon der passende Weg um eine von multimon nicht übergebene führende Null wieder hinzu zufügen.
Damit sollten wir auch für Landkreise in denen es mit 00 beginnt gewapnet sein. Auch wenn es nur 9 sein können ;)
Ich wollte auch nur darauf hinaus, das ich damals in meinem Script und in der ersten Phase von BosWatch aus diesem Grund das zfill eingesetzt habe.

Und damit wäre dann das "Problem", welches kein Fehler ist, erledigt :-)

Schrolli
03.06.2015, 23:02
Ich denke du weißt was ich meine.
das zfill ist schon der passende Weg um eine von multimon nicht übergebene führende Null wieder hinzu zufügen.
Damit sollten wir auch für Landkreise in denen es mit 00 beginnt gewapnet sein. Auch wenn es nur 9 sein können ;)
Ich wollte auch nur darauf hinaus, das ich damals in meinem Script und in der ersten Phase von BosWatch aus diesem Grund das zfill eingesetzt habe.

Und damit wäre dann das "Problem", welches kein Fehler ist, erledigt :-)


Falls ich das damals entfernt/nicht übernommen habe tuts mir leid. Habe das vermutlich als Unnütz angenommen, da sowas ja eigentlich nicht vorkommen kann/darf ^^
Aber ist ja schnell wieder eingebaut...

Grüße

JHC
04.06.2015, 19:12
Moin, moin,

das "multimon-ng"-Problem mit den RICs habe ich gefixed.
Sollte jetzt wieder funktionieren.

Weiterhin habe ich
- das firEmergency-Plugin von Smith
- und ein eMail-Plugin
dem develop-Branch hinzugefügt.

Grüße
Jens

Schrolli
05.06.2015, 08:33
Super... :-)

Wenn jemand das mal noch kurz testen könnte? Oder ist schon alles auf den ersten Blick Bugfrei? Dann würde ich am Wochenende endlich mal wieder in den Master mergen :-)

"noch" Grüße aus Prag ^^

joki
17.06.2015, 12:57
Hallo zusammen,
kam die letzten Tage leider nicht zum testen, heute hab ich die aktuelle Boswatch mal mit install.sh drübergebügelt.

Leider laufen bei mir immer noch die Fehler mit den 6-stelligen Rics auf :-(
Dachte da wäre dran gearbeitet/gelöst worden, oder war das nur im Developer-Branch.

Gruß Jörg

JHC
17.06.2015, 13:20
Hallo Jörg,

Habe eben nochmal im Repository nachgeschaut, der Bug ist dort behoben.
Hat er bei Dir nicht den aktuellen Code gezogen?
Oder das Problem ist noch etwas ganz anderes.

Bitte schicke mir mal das log als pm.

Grüße
Jens

joki
24.06.2015, 09:46
Hallo zusammen,
es funktioniert alles wunderbar, die Emailfunktion, die Auschlussliste, die Description-Liste, das einzige was im Moment noch nicht so super funktioniert ist die Unterdrückung der Wiederholungen, aber evtl. muss ich da nur mal die Zeit ein wenig hochsetzen.
Ansonsten: super!
Dankeschön.

JHC
27.06.2015, 12:01
Moin, moin,

die BOSWatch Version im develop-Zweig kann jetzt auch als Dienst ausgeführt werden.
Installation muss manuell erfolgen, die Beschreibung findet ihr in service/README.md

Gerne testen und Fehler melden.

Grüße,
Jens

Schrolli
30.06.2015, 12:00
Aktuell steuern wir auf ein Release 2.0 zu
Letzte kleine Fehler werden noch behoben, und dann wird nochmal eine Runde getestet.

Grüße

joki
02.07.2015, 14:08
Hallo zusammen,
ich habe da ein 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.

Das hab ich bisher gemacht:

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 :-(

Jemand ne Idee dazu?

Gruß Jörg

Schrolli
02.07.2015, 21:22
Hallo zusammen,
ich habe da ein 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.

...

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



Wir sind dran ;-) Issue ist offen...
Scheint nix großes zu sein.

https://github.com/Schrolli91/BOSWatch/issues/41

Gruß Basti

Schrolli
07.07.2015, 11:10
So aktuell ist die Version 2.0 als "Release Candidate" veröffentlicht:
https://github.com/Schrolli91/BOSWatch/releases/tag/v2.0-RC

Wenn Ihr Lust habt könnt ihr das ganze ja mal auf "Herz und Nieren" testen ;-)
Evtl. findet sich dann noch der ein oder andere - sicher nicht auszuschließende - Bug, vor der Veröffentlichung.

Probleme, Bugs, Fragen, Wünsche oder Erweiterungsvorschläge könnt Ihr uns gerne hier hinterlassen, wir schauen uns das ganze dann mal an :-)
https://github.com/Schrolli91/BOSWatch/issues

Falls jemand gerne selbst Code, Plugins, Änderungen oder Bugfixes beisteuern möchte, bitte vom develop-Branch einen fork ziehen...

Grüße Basti

btw:

Wir sind dran ;-) Issue ist offen...
https://github.com/Schrolli91/BOSWatch/issues/41

Ist erledigt ;-)

Schrolli
13.07.2015, 10:01
Kann die alten Beiträge leider nicht editieren... :/

Release 2.0 - https://github.com/Schrolli91/BOSWatch/releases/tag/v2.0
Bei Problemen oder Fragen einfach ein Issue aufmachen, Danke

joki
16.07.2015, 12:06
Hallo zusammen,
nachdem das System jetzt mal ein paar Tage läuft wollte ich mal feedback geben:

Es werden zuverlässig alle POCSAG Alarme bei mir aufgefangen, was leider oftmals nicht tut ist das Filtern der Wiederholung, habe inzwischen
[POC]
# time to ignore same alarm in a row (sek)
double_ignore_time = 20
gesetzt, aber es laufen immer noch doppelte auf obwohl die meist nur 3-6 Sekunden aufeinander folgen, aber immer wenn eben Löschzüge alarmiert werden bzw. mehrere RIC nacheinander durchlaufen funktioniert wohl die Unterdrückung der Wiederholung nicht zuverlässig, d.h. beispielsweise:
2015-07-16 08:21:05: HLF-T (Wache xxx) 0113732
2015-07-16 08:21:03: HLF (Wache xxx) 0113724
2015-07-16 08:21:01: HLF-T (Wache xxx) 0113732
2015-07-16 08:20:59: HLF (Wache xxx) 0113724

Desweiteren werden bei uns die Orte zwar mit Strassennamen angegeben, aber es werden auch noch Koordinaten mitgesendet, leider im Format: *X08, 62633100 Y50, 12238900*
Wobei man das irgendwie umsetzen müsste nach http://www.google.de/search?q=E08.62633100+N50.12238900 (Achtung: fiktive Adresse ;-) )
Jemand ne Idee wie man so einen Filter realisieren könnte?

Vielen Dank im voraus.
Viele Grüße
Jörg

JHC
16.07.2015, 14:34
Moin Jörg,

Du benutzt entweder die alte Version oder hast die config.ini nicht angepasst (und daher im Moment gar keinen Filter).

Schaue mal in config.ini im Block [BOSWatch]:


# for double check save the last n IDs
# it is used in combination with double_ignore_time
# 1 is required if you want to use the double alarm filter
doubleFilter_ignore_entries = 10

# time to ignore same alarm (see next param too) (sek)
doubleFilter_ignore_time = 5

# ignore msg is only usefull for POCSAG (0|1)
# 0: double check ignores the msg-text (only check ID + function)
# 1: if you want to differentiate between with/ without msg
# f.e. if they use quick-alarm (without text, then same ric with msg)
# you will get more then one alarm anyway if the msg is different (receiving-problems)
doubleFilter_check_msg = 0

Du musst dann bei Dir mal ausprobieren, welche Anzahl für entries bei Dir sinnvoll ist.

Grüße
Jens

joki
17.07.2015, 15:38
moin zusammen,
update gemacht, config angepasst und keine doppelten mehr! dankeschön!

schon jemand ne idee für die geo daten?

Gruß Jörg

JHC
17.07.2015, 15:56
Hallo Jörg,

ein Editieren der Msg ist aktuell als allgemeine Funktion nicht vorgesehen.
Wie willst Du die Information denn weitergeben/ anzeigen?

Grüße,
Jens

joki
17.07.2015, 19:14
Hallo Jens,
zur Zeit geb ich die Infos per Email an Boxcar.io, dann kriege ich ne Nachricht per Push aufs iphone, und da könnte ich dann eben auf den googlemapslink drücken und hätte die Karte.

So weit mein Gedanke, aber ist eher was für die Kür, auf keinen Fall Pflicht ;-)

Desweiteren hab ich noch so ein Projekt was evtl. einfacher zu realisieren ist, ich würde gerne nach 1-2 speziellen Rics filtern und dann per linphone einen Anruf initiieren, SIP-Server wäre eine Fritzbox.

Hintergrund: ich bin es leid einen FME durch die Gegend zu tragen, und dann würde ich mich eben von einer speziellen Nummer anrufen lassen, die würde dann als Favorit im Handy gespeichert werden und dann wäre auch die nächtliche Stummschaltung des Iphone kein Problem mehr, da die Anrufe im Gegensatz zu Nachrichten nicht stummgeschaltet werden.

Wünsche ein schönes (nicht zu heißes) Wochenende.
Gruß Jörg

JHC
17.07.2015, 19:41
Hallo Jörg,

für den Google-Link müsstest Du das eMail-Plugin erweitern...

Hier mal ein ungetesteter Lösungsansatz:
Replace auf " Y" ist natürlich ziemlich weitgehend, evtl. " Y50" nehmen, wenn das immer zutreffend ist.

data['msg'] = data['msg'].replace("*X", "http://www.google.de/search?q=E").replace(" Y", "+N")

Mal davon abgesehen, dass ich nichts davon halte, den FME zu Hause zu lassen, ist hier die Frage mit welchem Technologie-Stack Du das durchführen müsstest.

Die Filterung wäre trivial: per RegEx in der config.ini filtern:

sipAlarm = POC;ric;"PLUGIN";*;(1234567|1234568)

Grüße
Jens

joki
24.07.2015, 18:11
Hallo Jörg,

für den Google-Link müsstest Du das eMail-Plugin erweitern...

Hier mal ein ungetesteter Lösungsansatz:
Replace auf " Y" ist natürlich ziemlich weitgehend, evtl. " Y50" nehmen, wenn das immer zutreffend ist.

data['msg'] = data['msg'].replace("*X", "http://www.google.de/search?q=E").replace(" Y", "+N")

Grüße
Jens

Hallo Jens,
ich hab das mal ausprobiert und das eMail.py in Zeile 184 folgend geändert:

mailtext = mailtext.replace("%MSG%", data["msg"]).replace("X08, "," http://www.google.de/search?q=E08.").replace(" Y50, ","+N50." #replace Wildcards

Aber da tut sich leider nix :-(

Noch ne Idee?

Gruß Jörg

joki
24.07.2015, 18:15
Und noch ein komisches Verhalten:

seit ich am Email.py geschraubt habe passiert jetzt:

H:M:S: FF XXXXXXXXX (B1) 0114137

statt

2015-07-23 03:02:30: FF XXXXXXXXX (B1) 0114137

Habe wieder die Urversion von github eingespielt, aber Phänomen bleibt :-(

JHC
24.07.2015, 19:23
Moin Joki,

da scheint ein Bug im eMail-Plugin im Master-Zweig zu sein.

Als Übergangslösung kannst Du die zwei Zeilen nach folgender Syntax ändern:


mailtext = mailtext.replace("%TIME%", timeHandler.getTime()).replace("%DATE%", timeHandler.getDate())

Oder Du nimmst das eMail-Plugin aus dem Developer-Zweig.

Grüße
Jens

JHC
24.07.2015, 19:51
Hallo Jörg,



mailtext = mailtext.replace("%MSG%", data["msg"]).replace("X08, "," http://www.google.de/search?q=E08.").replace(" Y50, ","+N50." #replace Wildcards


Folgende (zusätzliche) Zeile führt bei mir zum gewünschten Ergebnis:


mailtext = mailtext.replace("*", " * ").replace("X08, ", "http://www.google.de/search?q=E08.").replace(" Y50, ", "+N50.")

Einfach am Ende des Blocks anfügen.

Grüße
Jens

Dtrieb7482
24.07.2015, 21:31
Ich habe mir einen PiTFT als Display gekauft:

http://www.adafruit.com/product/2298

Wäre es möglich die Ausgabe an die Größe (320x240) anzupassen,
bzw. dafür ein Anzeigemodus zu programmieren?

Datum&Uhrzeit | RIC | Einsatzmittel | Nachricht

JHC
24.07.2015, 21:51
Hi Dtrieb,


Wäre es möglich die Ausgabe an die Größe (320x240) anzupassen,
bzw. dafür ein Anzeigemodus zu programmieren?

Datum&Uhrzeit | RIC | Einsatzmittel | Nachricht

BOSWatch selber ist eigentlich kein Anzeige-Programm, daher wird es direkt nicht mit Deinem Display arbeiten können. Es macht eine reine serielle Verarbeitung der einzelnen Nachrichten.

Trotzdem fallen mir jetzt mehrere Optionen zu ein:
1.) Du passt den Logogging-Formatter in boswatch.py an, so dass die Anzeige kleiner wird. Ist aber nur eine Annäherung, der Logger macht keine Auswertung der msg.
2.) Du baust Dir einen jsonSocketServer, der die Ausgabe für das Display macht.
Vorschläge dafür findest Du hier: https://github.com/Schrolli91/BOSWatch/tree/develop/exampleAddOns
- jsonSocketServer wäre eine Basis für eine beliebige Ausgabe
- alarmMonitorRPi habe ich für mein Display gebaut, funktioniert aber von der Anzeigeanforderung ein bisschen anders
3.) Lass auf dem Display ein (Web-) Skript laufen, welches die Daten aus der DB aufbereitet
4.) Man müsste ein weiteres Plugin bauen, welches die Daten wie gewünscht anbietet (eigene Datei oder ähnliches)

Grüße
Jens

joki
25.07.2015, 10:07
Ich habe mir einen PiTFT als Display gekauft:

http://www.adafruit.com/product/2298

Wäre es möglich die Ausgabe an die Größe (320x240) anzupassen,
bzw. dafür ein Anzeigemodus zu programmieren?

Datum&Uhrzeit | RIC | Einsatzmittel | Nachricht

Hi Dtrieb,
wenn du an dem PI eine Netzverbindung hast, dann schieß die daten doch einfach in einen Wordpressblog per Email, den kannste dann in der Mobilversion aufrufen, das tut auch auf dem kleinen Display, muss ja nicht öffentlich sein, bzw. theoretisch kannste das ja sogar lokal bewerkstelligen. das Delay sollte zu vernachlässigen sein, musste halt nur alle paar Sekunden einen Refresh der Website anstoßen.

Nur so als Idee, mehr so quick&dirty ;-)

Dtrieb7482
25.07.2015, 11:08
Vielen Dank für eure Ideen ...
Jetzt muss ich erstmal den Pi in betrieb nehmen und dann mal schauen welche Lösung mir am besten gefällt.

Vielleicht hat mein Bruder der Python kann auch noch eine Idee für mich ...

coastboy
27.07.2015, 21:26
Hi,

ich hab an meinem Pi ein 2,8" Display. ( www.reichelt.de/RASP-C-BERRY-28/3/index.html?&ACTION=3&LA=446&ARTICLE=144719&artnr=RASP+C-BERRY+28 )

Da lasse ich mir die alarmierte Einheit und die Meldung anzeigen.

Läuft noch nicht perfekt, aber es erfüllt seinen Zweck :-)

Habe das Testprogramm angepasst und in die pocsag.py mit eingebunden

MfG
coastboy

funkwart
28.07.2015, 08:02
Hallo Forum,

klasse, welche Dynamik dieses Projekt aufgenommen hat.
Ich habe folgendes Problem: Ich besitze zwei USB-DAB-Sticks. Der eine hat einen E4000 Tuner, der andere ist ein Rafael Micro R820T.
Mit dem E4000 Stick bekomme ich keinerlei Empfang hin. Ich habe mit Stick am Pi mit rtl_tcp und SDR# auf meinem Heimrechner konnte ich nicht einmal einen starken lokalen Radiosender empfangen.
Mit dem R820T Stick bekomme ich mit gleichem Setup Radiosender gut rein, wenn ich das Gain etwas heraufsetze.
Lasse ich jetzt boswatch laufen, startet es auch, jedoch kommt keine Decodierung von POCSAG-Signalen zustande. Dieses Verhalten habe ich bei beiden Sticks identisch.
Doofe Frage: Zeigt boswatch in der Grundkonfiguration eigentlich Decodierungen an? Ich habe lediglich die config.template.ini in config.ini umbenannt.
Kann ich bei boswatch irgendwie Einfluss auf das Gain nehmen, oder wird das automatisch geregelt?

Danke und Gruß,
Funkwart

JHC
28.07.2015, 08:26
Moin Funkwart,

da fallen mir mehrere Dinge ein:
1. richtige Antenne?
2. richtige Frequenz?

Gerade POCSAG reagiert ziemlich empfindlich, wenn die Frequenz nicht stimmt.
Mein Stick hat z.B. einen Versatz von 9 KHz, damit würde POCSAG nie klappen.

Nimm Dir ein Tool mit einer grafischen Oberfläche (z.B. Wasserfalldarstellung) und kontrolliere die Frequenz. Für den E4000 Tuner gibt es auch ein rtl_test-Tool für Linux.

Wenn Du die richtigen Parameter kennst, kannst Du BOSWatch damit starten.
Die Parameter "-f xxx und -a xyz" sind Pflicht. Gain und andere optional.
BOSWatch macht in der Richtung Empfang/ Dekodierung gar nichts automatisch, er gibt die Parameter nur an multimon-ng weiter.

Wenn Dein Debug-Level niedrig genug ist, sollte eine eingehende Nachricht als info ausgegeben werden.

Grüße
Jens

funkwart
28.07.2015, 08:39
Hallo zurück,

die richtige Frequenz ist so eine Sache. Leider funktioniert das rtl_test Tool bei mir nicht. Wenn ich kalibrate auf dem GSM900 Band aufrufe, kommen keine Ergebnisse.
Den Parameter für Gain sehe ich bei boswatch nicht:


optional arguments:
-h, --help show this help message and exit
-f FREQ, --freq FREQ Frequency you want to listen
-d DEVICE, --device DEVICE
Device you want to use (Check with rtl_test)
-e ERROR, --error ERROR
Frequency-Error of your device in PPM
-a {FMS,ZVEI,POC512,POC1200,POC2400} [{FMS,ZVEI,POC512,POC1200,POC2400} ...], --demod {FMS,ZVEI,POC512,POC1200,POC2400} [{FMS,ZVEI,POC512,POC1200,POC2400} ...]
Demodulation functions
-s SQUELCH, --squelch SQUELCH
Level of squelch
-v, --verbose Shows more information
-q, --quiet Shows no information. Only logfiles

Welcher ist denn der Parameter für Gain?

Danke und Gruß,
Funkwart

JHC
28.07.2015, 08:47
Moin Funkwart,

dann ist da wirklich etwas im Argen, wenn das mit einem E4000 nicht geht, GSM gibt's ja überall.
Mit dem Wasserfall findet man die Frequenz in wenigen Minuten raus. :-)
Gab mal eine Anleitung dazu, müsste ich mal suchen.

Update: Anleitung zur Frequenzfindung (http://www.bosmon.de/forum/viewtopic.php?f=4&t=2059)

Stimmt, habe gerade im Quellcode nachgeschaut, Gain setzen wir pauschal auf 100, das sollte bei jedem Stick automatisch den höchsten Wert ergebe .

Grüße
Jens

joki
28.07.2015, 10:32
Hallo Jörg,



Folgende (zusätzliche) Zeile führt bei mir zum gewünschten Ergebnis:


mailtext = mailtext.replace("*", " * ").replace("X08, ", "http://www.google.de/search?q=E08.").replace(" Y50, ", "+N50.")

Einfach am Ende des Blocks anfügen.

Grüße
Jens

Sehr sehr geil! das funktioniert hervorragend!

aber, eins noch, für eine bessere Strukturierung der Email würde ich gerne im NachrichtenBody einen Zeilenumbruch drinne haben, im Moment sieht das bei mir so aus:

poc_message = %DATE% %TIME%: %DESCR% %RIC% %MSG%

Ich hätte gerne vor %MSG% einen Zeilenumbruch eingefügt, Ich habe schon folgendes probiert, allerdings ohne Erfolg: \r\n oder \n

Jemand ne Idee dazu, oder wäre es vielleicht eine Idee wert die Struktur der Email in einem template zu definieren und in der config zu verlinken?

Gruß Jörg

funkwart
28.07.2015, 10:54
Moin Jens und alle anderen,

ich bin ein Stück weiter und will kurz berichten, da es vielleicht auch anderen so ergeht.
Nach einigem Suchen habe ich folgende Anleitung gefunden: https://arrrr.com/rtl-sdr.shtml
Der erfolgbringende Faktor war bei mir folgende Vorgehensweise:
- rtl_test -p aufrufen (bei mir ergab sich ein grober Offset von 55ppm)
- kal -s 900 -g 48 -e 55 aufrufen (g: Gain Wert, falls das Signal zu schwach ist, erhöhen / e: der im vorigen Schritt ermittelte Offset)
Damit konnte ich jetzt mit kal auch einen geeigneten GSM-Kanal ermitteln und den Offset bestimmen (liegt bei mir auch mit kal bei 55).

Leider bekomme ich mit der Standard-Konfiguration von boswatch auch jetzt weder eine POCSAG1200 noch eine FMS Dekodierung hin.

Kann mir jemand sagen, ob ich noch explizit an der Squelch-Einstellung etwas ändern muss? Wofür ist die überhaupt, ich höre ja nichts mit.

Danke und Gruß,
Funkwart

JHC
28.07.2015, 19:47
Hi Jörg,


aber, eins noch, für eine bessere Strukturierung der Email würde ich gerne im NachrichtenBody einen Zeilenumbruch drinne haben

in der aktuellen Version im Develop-Zweig gibt es jetzt für das eMail-Plugin ein %BR% Wildcard, welches einen Zeilenumbruch in der eMail erzeugt.

Grüße
Jens