P2000 ontvangen op Raspberry Pi 2 met RTL-SDR
|
P2000 is het netwerk is opgezet om personeel van de hulpdiensten zoals brandweer, reddingsbrigade, ambulance, politie, Rode Kruis, KNRM te alarmeren. Op talloze websites kun je deze P2000-alarmeringen live meelezen, maar je kunt de berichten ook zelf ontvangen. Hieronder staat beschreven hoe ik dit gedaan heb op een Raspberry Pi 2 in combinatie met een RTL-SDR, oftewel een DVB-T USB-stick met de R820T-chipset. Dit alles werkt overigens ook op een ‘gewone’ PC met Ubuntu of Linux Mint, zie onderaan deze pagina.
P2000
Frequentie: 169,650 MHz
Snelheid 1600 bit/s (2FSK)
Protocol: Motorola FLEX
Ik heb het vanaf een desktop-PC met Linux Mint op een ‘headless’ Raspberry Pi geinstalleerd: een Raspberry zonder monitor, toetsenbord of muis. Op de Raspberry wordt alleen de netwerkkabel, de DVB-T-stick en de voeding aangesloten.


Getest met:
Raspberry Pi 2
2016-05-27-raspbian-jessie-lite
R820T DVB-T USB
P2000 ontvangen: Raspberry Pi
Allereerst moet je Raspbian downloaden en op een SD-kaartje zetten. Ik gebruik hiervoor de Lite-versie van Raspbian Jessie. Zet de image op een SD-kaarje (ik gebruikte een kaartje van 16GB maar kleiner kan ook) en steek het kaartje in de Raspberry, De USB-stick is nog niet aangesloten. Start de Raspberry en doorloop de gebruikelijke installatiestappen zoals hieronder beschreven.
Mijn Raspberry had na het booten via DHCP het ip-adres 192.168.20.46 gekregen, en vanaf de PC logde ik via SSL in met het de standaard gebruikersnaam (‘pi’) en wachtwoord (‘raspberry’):
ssh [email protected]
Start de configuratie:
sudo raspi-config


Kies optie “1: expand filesystem”. Daarna rebooten en weer opnieuw inloggen. Dan zoals gebruikelijk de pakketlijsten updaten:
sudo apt-get update
Daarna kun je de vereiste pakketten downloaden (dit kan een paar minuten duren):
sudo apt-get -y install git cmake build-essential libusb-1.0 qt4-qmake libpulse-dev libx11-dev qt4-default
Vervolgens ondersteuning voor de RTL-SDR installeren.
P2000 ontvangen: RTL-SDR
Voer de volgende commando’s uit om de ondersteuning voor de USB-ontvanger te downloaden en te installeren:
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
Sluit nu de DVB-T-stick aan op de Raspberry en test de installatie met het commando:
rtl_test
Waarschijnlijk sluit rtl_test af met een foutmelding:
usb_claim_interface error -6
Failed to open rtlsdr device #0
De standaard drivers van Raspbian zitten in de weg en moeten ge-‘blacklist’ worden.
Bewerk daarvoor het bestand /etc/modprobe.d/raspi-blacklist.conf (is waarschijnlijk nog leeg)
sudo nano /etc/modprobe.d/raspi-blacklist.conf
en voeg er deze 3 regels aan toe:
blacklist dvb_usb_rtl28xxu
blacklist rtl2832
blacklist rtl2830
Opslaan met CRTL+O (letter O), afsluiten met CTRL+X.
Dan rebooten en opnieuw inloggen:
sudo reboot
Controleer nu opnieuw of de DVB-T-Stick goed werkt met:
rtl_test


Als alles goed werkt sluit je rtl_test af met CTRL+C en kun je nu multimonNG installeren om de FLEX-datastroom van P2000 te decoderen.
P2000 FLEX decoderen: multimon-NG
Voer de volgende commando’s uit om de decoder ‘multimonNG’ te downloaden en te installeren:
cd ~/src/
git clone https://github.com/Zanoroy/multimon-ng.git
cd multimon-ng
mkdir build
cd build
qmake ../multimon-ng.pro
make
sudo make install
Uiteindelijk kun je dan het ontvangen en decoderen van de P2000-meldingen starten met:
rtl_fm -f 169.65M -M fm -s 22050 -p 83 -g 30 | multimon-ng -a FLEX -t raw /dev/stdin


Waarbij:
- -g staat voor de gain, een getal tussen 0-50; weglaten voor automatische gain
- -p staat voor de specifieke ppm-afwijking van jouw RTL-SDR.
Je kunt aan het einde van die regel -v 1 (of -v 2/-v 3) toevoegen voor meer gedetailleerde output.


De uitvoer verwerken in een Python script
Als laatste kunnen we de uitvoer van multimon-ng nog naar een Python-script sturen. Op deze manier kunnen we:
- de datum en tijd omzetten van UTC naar CET
- de groepsberichten samenvoegen
- de weergave met kleuren verduidelijken.
Zet het script in ~/src/ en noem het ‘p2000.py’. Maak het uitvoerbaar met:
chmod +x p2000.py
Installeer dateutil en termcolor:
sudo apt-get install python-dateutil python-termcolor
Vergeet niet deze regel aan te passen naar de waarden van jouw RTL-SRD (-p en -g):
multimon_ng = subprocess.Popen("rtl_fm -f 169.65M -M fm -s 22050 -p 43 -g 30 | multimon-ng -a FLEX -t raw -",
Voer het script uit met:
python p2000.py
Het script is slechts een voorbeeld en verre van perfect. Gebruik het als basis voor je eigen script.
#!/usr/bin/python # P2000 ONTVANGEN OP RASPBERRY PI 2 MET RTL-SDR # https://nl.oneguyoneblog.com/2016/08/09/p2000-ontvangen-decoderen-raspberry-pi/ # # vergeet niet deze regel verderop aan te passen aan je eigen RTL-SDR ontvanger (-p en -g): # multimon_ng = subprocess.Popen("rtl_fm -f 169.65M -M fm -s 22050 -p 43 -g 30 | multimon-ng -a FLEX -t raw -", import time import sys import subprocess import os import re from datetime import datetime from dateutil import tz from termcolor import colored groupidold = "" def curtime(): return time.strftime("%H:%M:%S %Y-%m-%d") with open('error.txt','a') as file: file.write(('#' * 20) + '\n' + curtime() + '\n') multimon_ng = subprocess.Popen("rtl_fm -f 169.65M -M fm -s 22050 -p 43 -g 30 | multimon-ng -a FLEX -t raw -", stdout=subprocess.PIPE, stderr=open('error.txt','a'), shell=True) try: while True: line = multimon_ng.stdout.readline() multimon_ng.poll() if line.__contains__("ALN"): if line.startswith('FLEX'): flex = line[0:5] timestamp = line[6:25] melding = line[58:] groupid = line[35:41] capcode = line[43:52] regex_prio1 = "^A\s?1|\s?A\s?1|PRIO\s?1|^P\s?1" regex_prio2 = "^A\s?2|\s?A\s?2|PRIO\s?2|^P\s?2" regex_prio3 = "^B\s?1|^B\s?2|^B\s?3|PRIO\s?3|^P\s?3|PRIO\s?4|^P\s?4" if re.search(regex_prio1, melding, re.IGNORECASE): priokleur = 'red' elif re.search(regex_prio2, melding, re.IGNORECASE): priokleur = 'yellow' elif re.search(regex_prio3, melding, re.IGNORECASE): priokleur = 'green' else: priokleur = 'magenta' if groupid == groupidold: print colored(capcode, 'white'), else: utc = datetime.strptime(timestamp, '%Y-%m-%d %H:%M:%S') utc = utc.replace(tzinfo=tz.tzutc()) local = utc.astimezone(tz.tzlocal()) local = local.strftime("%d-%m-%Y %H:%M:%S") print ' ' print colored(local,'blue', attrs=['bold']), colored(melding, priokleur, attrs=['bold']), print ' ', print colored(capcode, 'white'), groupidold = groupid except KeyboardInterrupt: os.kill(multimon_ng.pid, 9)
Als alles gelukt is ziet de uitvoer van het script er ongeveer zo uit:


P2000 ontvangen en decoderen op Linux Mint, Ubuntu of Debian
Dit artikel gaat over het ontvangen en decoderen van P2000 op een Raspberry Pi met Raspbian. als OS Aangezien Raspbian een fork is van Debian, net als Ubuntu en Linux Mint, werkt het bovenstaande ook op die besturingssystemen. Ik heb zelf bovenstaande werkwijze getest op een PC met Linux Mint 17.3 en daarop werkt alles exact hetzelfde als op een Raspberry Pi 2 of 3 met Debian.
Is het je al gelukt om de UNK meldingen zichtbaar te krijgen?
Ik krijg de niet gedecodeerd en goed zichtbaar in beeld.
MultimonNG gaat op vaste momenten de fout in, volgens mij bij het parsen van gegroepeerde berichten. Dan verschijnen die UNK meldingen. Ik heb een tijdje geleden de sourcecode eens vluchtig bekeken maar kon zo snel het probleem niet vinden. Het staat nog steeds hoog op m’n TODO-lijstje, als ik er een oplossing voor gevonden heb zal ik die hier plaatsen.
Did you find any solution about that problem?
Not yet, unfortunately. It seems like just a parsing error, but I didn’t yet have the time to investigate it any further.
Het probleem is inmiddels opgelost en het artikel aan gepast. Een andere git-repository heeft verbeterde code waarmee die UNK-meldingen niet meer voorkomen. Dit gedeelte in het artikel is gewijzigd:
cd ~/src/
git clone https://github.com/Zanoroy/multimon-ng.git
cd multimon-ng
mkdir build
cd build
qmake ../multimon-ng.pro
make
sudo make install
Ondertussen hebben ze deze aanpassingen gemerged in de orginele repo. Maar fijn dat je dit gevonden had, want ik zat er ook op te wachten. 🙂
Wederom bedankt voor je oplettendheid, ik zal het artikel weer aanpassen 🙂
Beste,
Ik heb net geprobeerd om dit te doen, maar dan voor het Belgische Astrid systeem. Dit zou normaliter eveneens moeten werken. Echter krijg ik niks door (op PDW zie ik wel genoeg voorbij komen).
Ik gebruikte als laatste het volgende commando:
rtl_fm -f 169.625M -M fm -s 2400 -p 83 | multimon-ng -a FLEX -t raw /dev/stdin
Astrid werkt namelijk op 169.625MHz op 2400 baud. Echter is het hier geen FLEX maar ASTRID. Als ik FLEX verander in ASTRID krijg ik de volgende fout :
Using device 0: Generic RTL2832U OEM
Found Rafael Micro R820T tuner
Tuner gain set to automatic.
Tuner error set to 83 ppm.
Tuned to 169875200 Hz.
Oversampling input by: 417x.
Oversampling output by: 1x.
Buffer size: 8.19ms
Exact sample rate is: 1000800.030542 Hz
Sampling at 1000800 S/s.
Output at 2400 Hz.
Signal caught, exiting!
User cancel, exiting…
Kan u mij hier even mee helpen aub?
Met dank!
Beste Van Krisken,
Multimon geeft die foutmelding omdat het niet de optie “ASTRID” kent (zie https://github.com/EliasOenal/multimon-ng).
Astrid is echter 2400 baud POCSAG, dus door de optie FLEX te vervangen door POCSAG zou het moeten werken. Ik kan het helaas niet zelf testen omdat ik hier het Astrid-netwerk niet kan ontvangen.
Succes, ik hoor graag of het gelukt is!
Hallo!
Ik heb net nog een poging ondernomen, en moet helaas vaststellen dat dit niet blijkt te werken.
Output bij het commando “rtl_fm -f 169.625M -M fm -s 2400 -p 83 -g 30 | multimon-ng -a POCSAG -t raw /dev/stdin” is als volgt : https://pastebin.com/2dTJqtLM
Indien gewenst kan ik je natuurlijk altijd root toegang geven tot mijn RPI die pocsag doet?
De foutmelding zegt o.a.:
“available demodulators: POCSAG512 POCSAG1200 POCSAG2400 FLEX (…)”
dus moet de POCSAG optie blijkbaar POCSAG2400 zijn.
Wellicht dat dit dan beter werkt:
“rtl_fm -f 169.625M -M fm -s 2400 -p 83 -g 30 | multimon-ng -a POCSAG2400 -t raw /dev/stdin”
Hallo,
Bedankt voor de duidelijke tutorial.
Ik stoot echter op een probleem na het uitvoeren van de verschillende stappen.
Ik krijg de melding dat er geen tuner gevonden is die ondersteund wordt wanneer ik het commando rtl_test uitvoer
Found 1 device(s):
0: Realtek, RTL2838UHIDIR, SN: 00000001
Using device 0: Generic RTL2832U OEM
No supported tuner found
Enabled direct sampling mode, input 1
Supported gain values (1): 0.0
Sampling at 2048000 S/s.
No E4000 tuner found, aborting.
Kan u mij helpen die probleem op te lossen aub?
Bedank!
Hoi Dexter, welk merk/type DVB-T stick gebruik je?
Hallo,
Ik gebruik de DVB-T USB-stick met de R820T-chipset die in dit artikel wordt gebruikt. Ik heb hem besteld op dx.com
Werkt de stick wel als je hem met andere software gebruikt, bijv. SDR# onder Windows?
Ik heb de windows tutorial volledig gevolgd en daarmee werkt de stick. Ik slaag er bijvoorbeeld in van gewone radiostations te ontvangen.
Dan werkt de stick zelf gelukkig naar behoren. Het lijkt er op dat er een driverconflict is, heb je de drivers geblacklist zoals in de tutorial beschreven staat?
Ja, inderdaad ik heb de standaard drivers geblacklist in het bestand /etc/modprobe.d/raspi-blacklist.conf
Echt vreemd, ik ben ook al even op het net aan het zoeken geweest maar blijkbaar is dit nog geen gekend probleem bij andere gebruikers
Ik kan het probleem niet reproduceren, heb je het probleem inmiddels op kunnen lossen?
De in het artikel gelinkte stick heeft *geen* R820T chip, maar een FC0012 (Fitipower). Ik liep tegen hetzelfde probleem aan. Deze chip heeft wat driver-issues onder Debian. Met veel kunst- en vliegwerk aan de praat gekregen, maar na elke reboot weer niet werken. Ik heb uiteindelijk een andere stick besteld met de R820T chip omdat ik van het gedoe af wilde zijn.
Bedankt voor je oplettendheid, die schavuiten van DX.com hebben het de stick inderdaad vervangen door een geheel andere versie zonder R820T. Dat had ik nog niet gezien, ik zal het artikel aanpassen. In de URL zelf staat nog wel steeds “rtl2832u-r820t-mini-dvb-t-dab-fm-usb-digital-tv-dongle-black-170541?” maar dat klopt nu dus niet meer.
tnx.. ik had de stick al een poosje geleden besteld.. dus hetzelfde probleem. jij hebt de stick helemaal buiten gebruik? of is er toevallig nog een workaround?
Goede uitleg!
Mooi nu ook op de Pi3 met Jessie Pixel.
Alleen geeft die de verkeerde tijd weer: -2 uur verschil.
De dekstop clock geeft wel de juiste tijd weer, taal is Engels.
Thanks
Thanks! Staan de tijdzone e.d. in raspi-config goed ingesteld?
Ja, dat had ik gisteren al na gekeken: Europe / Amsterdam.
Ik denk dat het komt van Locale Country: GB (Great Britain) en heb nogmaals raspi-config bekeken en weer Europe / Amsterdam ingesteld.
Ook wifi land staat goed.
Die taal instelling overruled alles. Of geeft multimon-ng de tijd in utc weer?
Een blik in de sourcecode van multimon-ng leert dat de functie gmtime gebruikt wordt, waardoor het programma inderdaad de tijd in UTC weergeeft.
Ik heb als voorbeeld een Python-script aan het artikel toegevoegd waarin de tijd van UTC naar CET wordt omgezet. Wellicht helpt dat je een beetje op weg.
Heel de installatie verloopt goed en uiteindelijk krijg ik ook dezelfde boodschap als in de plaatjes die eindigt op: output at 22050Hz , maar dan gebeurt er niets meer. En ik zou verwachten dat er dan P2000 meldingen binnen moeten lopen. Moet ik nog iets doen of ben ik dan iets vergeten.
Dan zouden er inderdaad berichten binnen moeten komen. Je weet zeker dat het ontvangen signaal sterk genoeg is en dat je ook de afwijking goed hebt ingesteld voor jouw specifieke dongle? Beiden zou je kunnen checken met bijv. SDR# (Windows) of Gqrx (Linux).
goede uitleg, en werkt ook goed alleen krijg allen de persoonlijke meldingen niet de groeps meldingen, is daar een oplossing voor. zou mooi zijn ook zo meldingen van de brandweer te kunnen ontvangen
Ik ben nog eens gaan zoeken en kwam eindelijk een oplossing tegen. Een andere git-repository heeft verbeterde code waarmee die UNK-meldingen niet meer voorkomen. Dit gedeelte in het artikel is gewijzigd:
cd ~/src/
git clone https://github.com/Zanoroy/multimon-ng.git
cd multimon-ng
mkdir build
cd build
qmake ../multimon-ng.pro
make
sudo make install
Hopelijk lukt het hier mee!
perfect, en wat een snelle reactie op de vraag. Het werkt helemaal al de meldingen zijn hiermee leesbaar.
nog een tip voor de tijd weergave?
De tijd zou je in een python-script kunnen converteren, ik heb zojuist een voorbeeldscript aan het artikel toegevoegd.
durf niets meer te vragen, anders morgen weer klaar. Maar werkt perfect, al is het op mint ipv op een raspberry. Ga nu nog zien de output in een mysql te krijgen.
Haha, fijn dat het goed werkt! Een uitvoer naar MySQL zal ik ook nog eens proberen te maken, zodra de tijd het toelaat. Of als je zelf al iets gemaakt heb dan ben ik daar ook wel nieuwsgierig naar, uiteraard 🙂
Wat geweldig dat je dit met ons deelt. Voor het stukje decoderen gebruikte ik nog altijd PDW (onder Wine op een Linux VM), omdat er voor Linux nog geen goede software was. Nu begint het er echt op te lijken. Top!
Ik heb het nu ook op een Rpi3 draaien met eenzelfde DVB-T-stick als jij. De resultaten zijn volgens mij ook vergelijkbaar. Ook bij jou zie ik in het onderste plaatje (de gekleurde output) dat je nog wel wat delen van groepsoproepen mist. De capcodes 0020295?? zijn namelijk de codes die een groep aangeven; daar horen dus nog extra capcodes bij. Net als jij mis ik daar ook nog erg veel van, terwijl ik met diezelfde stick in mijn eerder genoemde opzet perfecte resultaten behaal.
Als je nog enig idee hebt hoe dat te verbeteren, hoor ik dat natuurlijk graag. Maar nogmaals dank dat je dit even hebt uitgewerkt in je blog.
Hoi Evert Jan, graag gedaan, en jij bedankt voor je bericht!
Ik weet niet of ik je goed begrijp, maar als ik het python-script laat draaien en de output op hetzelfde moment vergelijk met bijvoorbeeld http://www.livep2000.nl/monitor/ dan zie ik toch echt alle uitgezonden capcodes voorbij komen op de Raspberry Pi. Uiteraard niet de omschrijvingen die bij de capcodes horen, want die worden immers niet meegezonden maar moeten er vanuit een lokale database aan toegevoegd worden.
Op die screenshot van de gekleurde python-output zie je ook de capcodes bij elke melding. Sommige meldingen hebben er maar 1, andere meldingen hebben er een groter aamtal. Of bedoel je iets anders?
Wat ik bedoel is dat bij bepaalde berichten, bijvoorbeeld “TEST 189” en “TEST 183”, de groeps-capcode 002029568 wel is ontvangen maar de andere capcodes die met een groeps-capcode worden meegestuurd in deze gevallen niet zijn doorgekomen. Oftewel, een capcode in de reeks 0020295?? komt nooit alleen. (Ik hoop dat ik een beetje duidelijk over kom…)
Ah, op die manier. Ik zal er nog eens beter naar kijken, van de stick/antenne-combinatie die ik nu gebruik (een andere dan op de foto’s te zien is want die hangt nu aan een PiAware-ontvanger) heb k nog niet de optimale ppm-afwijking en gain vastgesteld. Misschien dat daar nog verbetering mogelijk is.
En natuurlijk moet ik een betrouwbare/volledige bron vinden om mee te kunnen vergelijken 🙂 Jouw site geeft wel alle door PDW ontvangen capcodes weer?
Mijn huidige setup met PDW benadert de 100% ontvangst. Voor controle kijk ik zelf naar https://www.live112.nl/ die dezelfde database gebruikt als 112alarm.net, maar het voor dit doel overzichtelijker op het scherm zet.
Thanks voor de info, ik denk dat de configuratie met multimon-ng ook wel dicht bij 100% ontvangst moet kunnen komen. Zodra ik tijd heb dan zal ik mijn ontvangst proberen te optimaliseren en vergelijken met live112.nl. Wat voor antenne gebruik jij trouwens voor je setup met PDW? Een standaard DVB-T-sprietje of iets beters?
Het standaard sprietje voldoet bij mij prima.
De juiste PPM kun je vinden met behulp van de -p flag van rtl_test.
Dus: rtl_test -p
Laat dit een paar minuten draaien en dan krijg je uiteindelijk een redelijk stabiel cumulatief PPM getal. Nadat ik mijn uitkomst ben gaan gebruiken waren de capcodes al iets completer.
Iets anders waar ik tegenaan loop is dat er soms complete berichten ontbreken die wel op andere p2000 sites zichtbaar zijn. Het betreft dan berichten die dezelfde timestamp hebben waarvan de een wel doorkomt en de andere niet. Herkennen jullie dit?
Bedankt voor de tip over het vaststellen van de PPM, ik zal het in het artikel opnemen.
Wat betreft het niet doorkomen van berichten: daar heb ik nog niet goed op gelet, ik zal het eens een tijdje in de gaten houden.
Ter illustratie van wat ik hierboven noem over ontbrekende berichten. Zie in het volgende screenshot aan de linkerkant de output van een p2000 site en aan de rechterkant de raw output van multimon-ng. Het gaat dan om de berichten van 22:54:52
https://snag.gy/eGSqVK.jpg
Wanneer ik het commando sudo make install run krijg ik de volgende output;
[email protected]:~/multimon-ng/build $ sudo make install
install -m 755 -p “multimon-ng” “/usr/local/bin/multimon-ng”
strip “/usr/local/bin/multimon-ng”
Iemand enig idee wat ik fout doe?
Ik heb een Realtek RTL2838 en ik blijf vastlopen op het stuk “Failed to open rtlsdr device #0.”. Ik heb de blacklist ook reeds aangepast met dit type maar blijf de foutmelding krijgen. Enige idee wat de oorzaak hiervan kan zijn?
Wat zie je bij rtl_test? zie je daar de device staan?
heeft deze daar device #0 ? of een ander cijfer #?
je kan het ander cijfer kiezen door -d (device code) aan je opdracht toe te voegen
dan kiest hij de juiste Device
als dit het niet is zou ik het even niet weten
Top!
Ik heb het geheel aan de gang gekregen na deze duidelijke uitleg.
Ben totaal niet Linux onderlegd maar is super om te doen!
Alleen 1 vraagje
de capcodes.txt heb ik gevuld en dat is ook terug te zien op de website, echter zou ik capcode 002029568 niet willen weergeven.
Deze code heb ik in het filter gezet echter blijft er bij het opstarten staan dat er 0 strings zijn gelezen in filter.txt
Hoe kan ik dit goed krijgen?
formaat wat ik nu gebruik is 002029568,
Hoor graag
Ha Jeroen,
Ik heb het nog een keer extra gecontroleerd, maar ik kom in bovenstaande uitleg geen enkele keer iets tegen over capcodes.txt of filter.txt. Waar heb je dat gezien?
Hoi Evert-jan
Sorry ik had nog elders een scrips gevonden welke ook p2000.py gebruikt en deze werkt met capcode.txt en filter.txt
Script gebruikt deze bestanden om een naam aan de capcode te geven en een deel te filteren.
Inmiddels ben ik wel achter de werking van filter.txt alle capcode hierin worden weergegeven op de website en een capcode die er niet instaat wordt niet weergegeven.
Je kan dus heel snel een persoonlijke site maken met wat jij wil zien.
hoi,
is het mogelijk om met 2 rtl dongels 2 instances te draaien op 1 pi?
wil graag p2000 en astrid tegelijk draaien
gr erwin
Hallo,
ik vind Rpi erg leuk, ik heb er inmiddels zojuist een derde bij gekocht. 1 gebruik ik voor Domoticz, een andere voor Flightradar24 en de derde wilde ik als MagicMirror gaan gebruiken, maar dit project P2000 klinkt ook erg leuk.
Wat me wel opvalt bij dit project, is dat het lijkt dat je niet 1 install doet en dan klaar bent. Is er niet iemand die dat in elkaar kan zetten? Of is dan de lol er vanaf? Ik zou ook graag willen weten of ik op mijn Rpi waarop Flightradar24 nu draait, ook tegelijktijdig P2000 zou kunnen draaien. Die vraag heeft Erwin 2 Februari 2018 gesteld, maar daar zie ik nog geen antwoord op. iemand?
Gr, Eric
hoi eric, zou jij flightradar data willen ruilen met mij?
mvg erwin
Hoi Erwin, heb je naast een grote merged feed misschien ook een aparte feed van alleen je eigen ontvanger die je kunt/wilt delen? Ik heb zelf een kleine feed (MLAT/ADSB) omgeving Randstad.
hou jazekers kan dat ik heb merrdere ontvangers in het land staan. zeg maar wat je wilt hebben.
neem even contact op via [email protected]
Dag Erwin,
ik weet niet wat het ruilen van FR24 data inhoudt en hoe je dat moet doen?
groet,
Eric
hoi eric,
vrij eenvoudig een klein zipje uitpakken en dat zorgt er voor dat de data naast fr24 ook naar mijn omgeving komt.
stuur even ern mail naar [email protected] dan stuur ik je de informatie toe.
mvg erwin
Is er al iemand die het p2000.py script ook naar een MySQL database kan laten schrijven en heel graag een voorbeeld hoe dit moet ?
Daar ben ik ook zeer in geïnteresseerd
Goede vraag!
Ik kan twee richtingen bedenken:
https://github.com/SonnyJim/multimon-ng is een fork van multimon-ng met MySQL-ondersteuning. Dan ben je wel alle features van p2000.py kwijt, en ik weet niet of het ook met FLEX werkt of alleen met POCSAG.
https://github.com/Smith-fms/raspoc is een python script dat multimon-ng output naar MySQL schrijft. Waarschijnlijk kan je die code het beste hergebruiken?
Succes en plezier!
Prachtig dat je dit met ons deel. Ik ga dit proberen te maken ( wat denk ik wel lukt door de goede uitleg).
Wat ik wil gaan doen is de capcodes van mijn pieper in lezen in de raspberry. En deze raspberry weer koppelen aan mijn Homey.
Eind doel is dat als mijn pieper gaat de hue verlichting thuis aan gaat zodat ik me aan kan kleden en naar de melding kan gaan.
Ik was dus benieuwd naar de refresh tijd van opstelling?
Dus hoe veel zou dit systeem van me pieper afwijken?
Grt Paul
Hi Paul,
Mocht het je niet lukken, voor 112PERS ben ik bezig geweest met een koppeling met Hue. Binnenkort zal dit af zijn dus mocht het je toch niet lukken kun je altijd nog even een account aanmaken bij 112PERS 🙂
Hee Tom
Ook een leuke case.
Ik hoor graag of het lukt en wat de reactie tijd is
Inmiddels de raspberry draaien. Met de perfecte uitleg werkte het binnen een paar uur. Ik heb “Raspbian Stretch with desktop and recommended software” geïnstalleerd en hierbij loop ik op het probleem dat de python Idle die daar standaard bij zit het script wat boven vernoemt staat niet begrijpt. Deze komt met allemaal fout codes… Welke versie van Python moet ik gebruiken ?
Bedankt alvast
Hoi Paul, ik heb het script destijds gemaakt met Python 2.7 dacht ik, waarschijnlijk heeft Raspbian standdard een 3.x versie.
Werkt super na het volgen van deze uitleg. Hartstikke bedankt!
Het is me wel opgevallen dat het ‘groupid’ niet het unieke nummer voor een groepsoproep is.
Ik stop de berichten in een mysql database. Kan ik van daaruit de berichten verwerken.
Hoi Ruud, fijn om te horen dat het werkt! Ik ben benieuwd wat je er uiteindelijk mee gaat maken 🙂
Hoi,
Ik had al wel wat draaien hier om P2000-berichten uit de lucht te plukken en te verwerken richting een webpagina. Dat draaide 24/7 op een PC.
Nu dus omgezet naar de RPi en met succes. De PC is inmiddels uit 😉
Berichten worden dus ontvangen, verrijkt met capcode info en in MySQL gezet en zo getoond op mijn website. Tevens worden berichten, waarin in de melding mijn woonplaats voorkomt, deze gepushed (Pushover) naar mijn mobiel. Er zit daar dan ook een link voor google maps in waar de locatie (straat + evt nummer) in staat.
Gemak dient de mens.
Ik had dit veel eerder moeten doen zo.
Erg leuk om te programmeren en steeds weer aan het verfijnen.
Hoi Ruud,
Is het mogelijk om een image van je rp te krijgen zodat we dit zelf ook kunnen doen?
Hoi Ruud,
zou je je stappen willen delen hoe je zover bent gekomen? met wat tips en trucks? etc? ik zou dat ook dolgraag willen draaien.
Hallo Maarten,
Het ontvangen van de berichten en het verwerken gebeurt nu op een Rpi2B.
Daar staat Apache, MySQL, PHP, PHPmyAdmin en Samba op.
De ontvangen p2000 berichten worden door een script p2000.py in een tabel (received) gezet (MySQL).
Daarnaast draait een script (readdb.py).
Deze checkt of er nieuwe berichten zijn binnengekomen.
Doet dus een query in de tabel ‘received’.
Als het een groepsoproep betreft kunnen dat dus meerdere regels zijn.
Op basis van de tijd, die in de melding staat, wordt bepaald welke bij elkaar horen (heeft ook dezelfde group-id).
Voor een enkele melding komt dit er dan uit:
===========================================================
ma 21-01-2019 16:43:25 > A1 Nieuwegein 7954
0726135 – AMBU > 09 Utrecht – Amersfoort (ambulance 09-135)
===========================================================
==================================================================
ma 21-01-2019 16:44:03 > //ingekort// meerstraat Den Helder 104432
0201488 – BRW > 10 Noord-//ingekort// Helder (Lichtkrant kazerne)
0202997 – BRW > 10 Noord-//ingekort// systeem Noord Holland Noord)
0202999 – BRW > 10 Noord-//ingekort// al (Monitorcode RAC Alkmaar)
0204501 – BRW > 10 Noord-//ingekort// r-Centrum (Beroeps ploeg TS)
==================================================================
Er kunnen meerdere melding per group-id zijn:
==================================================================
ma 21-01-2019 16:44:56 > A1 Laren NH
0723193 – AMBU > 14 Gooi //ingekort// Regionaal (Ambulance 14-193)
——————————————————————
ma 21-01-2019 16:44:56 > //ingekort// Barendrecht BARDRT bon 9604
1420037 – AMBU > 17 Rott //ingekort// AZRR Bemanning Ambulance 37)
1420999 – AMBU > 17 Rott //ingekort// – Regionaal (Lichtkrant MKA)
——————————————————————
==================================================================
Zoals je ziet is de capcode ook voorzien van een beschrijving.
De capcode-info download ik bij: https://www.tomzulu10capcodes.nl/
De excel-file die ik daar download zet ik om naar een .csv en die wordt middels een apart programma c#.net in een tabel (capcodes) geladen.
Ik heb daarnaast ook een tabel met straatnamen voor de gemeentes die ik interessant vind.
Deze gebruik ik om te checken of er een geldige straatnaam in een melding staat.
Als dat zo is dan wordt er naar een eventueel huisnummer gezocht.
Voor de gemeente waar ik woon krijg ik dan via Pushover (https://pushover.net/) het bericht op mijn mobiel.
En de berichten worden dan in de tabel ‘p2000_alles’ geschreven.
De website toont dit dan vervolgens.
Dat in het kort.
Er gebeurt dus veel voordat een melding door de molen is 😉
Gaat het je om het opslaan van de berichten in de database of het hele proces?
Hallo Maarten,
Het ontvangen van de berichten en het verwerken gebeurt nu op een Rpi2B.
Daar staat Apache, MySQL, PHP, PHPmyAdmin en Samba op.
De ontvangen p2000 berichten worden door een script p2000.py in een tabel (received) gezet (MySQL).
Daarnaast draait een script (readdb.py).
Deze checkt of er nieuwe berichten zijn binnengekomen.
Doet dus een query in de tabel ‘received’.
Als het een groepsoproep betreft kunnen dat dus meerdere regels zijn.
Op basis van de tijd, die in de melding staat, wordt bepaald welke bij elkaar horen (heeft ook dezelfde group-id).
Voor een enkele melding komt dit er dan uit:
===========================================================
ma 21-01-2019 16:43:25 > A1 Nieuwegein 7954
0726135 – AMBU > 09 Utrecht – Amersfoort (ambulance 09-135)
===========================================================
==================================================================
ma 21-01-2019 16:44:03 > //ingekort// meerstraat Den Helder 104432
0201488 – BRW > 10 Noord-//ingekort// Helder (Lichtkrant kazerne)
0202997 – BRW > 10 Noord-//ingekort// systeem Noord Holland Noord)
0202999 – BRW > 10 Noord-//ingekort// al (Monitorcode RAC Alkmaar)
0204501 – BRW > 10 Noord-//ingekort// r-Centrum (Beroeps ploeg TS)
==================================================================
Er kunnen meerdere melding per group-id zijn:
==================================================================
ma 21-01-2019 16:44:56 > A1 Laren NH
0723193 – AMBU > 14 Gooi //ingekort// Regionaal (Ambulance 14-193)
——————————————————————
ma 21-01-2019 16:44:56 > //ingekort// Barendrecht BARDRT bon 9604
1420037 – AMBU > 17 Rott //ingekort// AZRR Bemanning Ambulance 37)
1420999 – AMBU > 17 Rott //ingekort// – Regionaal (Lichtkrant MKA)
——————————————————————
==================================================================
Zoals je ziet is de capcode ook voorzien van een beschrijving.
De capcode-info download ik bij: https://www.tomzulu10capcodes.nl/
De excel-file die ik daar download zet ik om naar een .csv en die wordt middels een apart programma c#.net in een tabel (capcodes) geladen.
Ik heb daarnaast ook een tabel met straatnamen voor de gemeentes die ik interessant vind.
Deze gebruik ik om te checken of er een geldige straatnaam in een melding staat.
Als dat zo is dan wordt er naar een eventueel huisnummer gezocht.
Voor de gemeente waar ik woon krijg ik dan via Pushover (https://pushover.net/) het bericht op mijn mobiel.
En de berichten worden dan in de tabel ‘p2000_alles’ geschreven.
De website toont dit dan vervolgens.
Dat in het kort.
Er gebeurt dus veel voordat een melding door de molen is 😉
Gaat het je om het opslaan van de berichten in de database of het hele proces?
Allereerst dank voor de duidelijke uitleg.
Als ik bovenstaande installeer dan zie ik alle P2000 meldingen binnenkomen. Dus tot het pythonscript werkt het.
Als ik het pythonscript met de kleurtjes installeer dan komt alleen de eerste melding in beeld, bij de nieuwe meldingen wordt alleen de capcode toegevoegd, dit gebeurt ook als de nieuwe melding compleet afwijkt van de eerste.
Inmiddels geprobeerd op RPi2 en 3, en met verschillende jessies en debians. Elke keer hetzelfde probleem. Wie herkent dit, wat doe ik fout?
Voor mensen die problemen hebben, de substring waarden van de variabelen die de FLEX lines moeten decoden kloppen niet helemaal meer met de recente P2000 meldingen.
Dit zijn de goede waarden:
timestamp = line[6:25]
groupid = line[37:43]
capcode = line[45:54]
melding = line[60:]
Heb een remake van deze code gemaakt op mijn Github met een aantal optimalisaties en toevoegingen voor de liefhebber: https://github.com/jkctech/AtlaNET
Hoop dat mensen hiermee wat verder komen in hun projecten 🙂
Dank je, nu doet het script het wel. Ik zal binnenkort jouw script ook eens bekijken.
Ik probeer het Belgische POCSAG te ontvangen, maar merk dat ik toch redelijk moet “bijtunen” eer ik op de juiste frequentie terecht kom (169.625MHz). En dan nog … ontvang ik niks?
Ik gebruik deze opdracht :
rtl_fm -s 22050 -f 169.371425M | multimon-ng -t raw –timestamp -p -a POCSAG512 -a POCSAG1200 -a POCSAG2400 -a FMSFSK -a AFSK1200 -f alpha -e
Dan krijg ik deze output
Using device 0: Generic RTL2832U OEM
Found Rafael Micro R820T tuner
Tuner gain set to automatic.
Tuned to 169625000 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.
Enig idee wat ik moet veranderen?
Mooi project
Ben me erin aan het verdiepen en heb nog niet zo heel veel kennis.
Ik heb alles op de Pi geinstalleerd en wil nu het p200.py script uitvoeren.
Ik krijg hierbij de volgende foutmelding:
File “p2kkleur.py”, line 39
if line.startswith(‘FLEX’):
^
TabError: inconsistent use of tabs and spaces in indentation
Ik kan nergens iets vinden wat ik hier aan zou moeten wijzigen om het werkend te krijgen.
Hallo allemaal,
Ik ben geen python-kenner, maar zou graag de output van de multinon-ng omzetten in MQTT berichten die er ongeveer zo zou moeten gaan uitzien:
tele/P2000/SENSOR = {“timestamp”:”yyyy-mm-ddThh:mm:ss”,”groupid”:”xxxxxxx”,”capcode”:”xxxxx”,”melding”:”aaaaaaa….”}
Iemand op dit forum die me een beetje op de goede weg kan helpen?
Hallo,
Ik krijg ineens de volgende foutboodschap:
[email protected]:~# python p2000.py
Traceback (most recent call last):
File “p2000.py”, line 69, in
utc = datetime.strptime(timestamp, ‘%Y-%m-%d %H:%M:%S’)
File “/usr/lib/python2.7/_strptime.py”, line 332, in _strptime
(data_string, format))
ValueError: time data ‘020-03-23 16:34:24|’ does not match format ‘%Y-%m-%d %H:%M:%S’
Is er iets veranderd qua Python of binnenkomende berichten?
Met dank voor een reactie!
Gr. Loe
multimon-ng heeft begin dit jaar een update gekregen, waardoor de output flink is veranderd. Nu worden groepsberichten gegroepeerd op 1 regel, terwijl er voorheen per capcode een regel werd gegenereerd.
Voorbeeld van de nieuwe output:
FLEX|2020-03-25 19:01:55|1600/2/K/A|00.071|002029568 001420999 001420019|ALN|B1 AMBU 17119 Vlietlandplein 3118JH Schiedam SCHIDM bon 39047
Dit betekent dat je script om dit te verwerken ook aardig moet worden aangepast.
Zie hier de uitgebreide discussie wat de aanleiding is geweest voor deze aanpassing:
https://github.com/EliasOenal/multimon-ng/issues/123
Met ook een voorbeeld script om dit te verwerken (zo te zien gebaseerd op het script van deze blog):
https://github.com/EliasOenal/multimon-ng/issues/123#issuecomment-460845949
Ik ben bezig met een demo op te stellen. wanneer ik het pyton script wil runnen krijg ik de onderstaande melding:
Traceback (most recent call last):
File “p2000.py”, line 69, in
utc = datetime.strptime(timestamp, ‘%Y-%m-%d %H:%M:%S’)
File “/usr/lib/python2.7/_strptime.py”, line 332, in _strptime
(data_string, format))
ValueError: time data ‘020-06-10 21:59:16|’ does not match format ‘%Y-%m-%d %H:% M:%S’
bij jullie bekend?
Goedemrogen ik krijg ook deze melding, was er al een oplossing voor ?
Zie mijn reactie van 26 maart….
goedemorgen, wat een mooi uitgeschreven item over p2000 op een PI, ik heb alles kunnen uitvoeren, loop alleen vast met het script.
krijg de volgende melding, net als de vorige post…
Traceback (most recent call last):
File “p2000.py”, line 69, in
utc = datetime.strptime(timestamp, ‘%Y-%m-%d %H:%M:%S’)
File “/usr/lib/python2.7/_strptime.py”, line 332, in _strptime
(data_string, format))
ValueError: time data ‘020-06-29 09:01:50|’ does not match format ‘%Y-%m-%d %H:%M:%S’
Weet iemand of het ook mogelijk is om een geluid af te spelen via de RaspberryPi (aux uitgang) wanneer er een melding komt op één van de gefilterde capcodes? En zo ja, welk script moet ik hiervoor gebruiken?
Ik gebruik deze script ook, alleen hij slaat soms wel eens een melding over, weeet iemand hoe dit kan?