Gafferschreck [rein theor.]

Problemstellung

Mit zunehmender Digitalisierung muessen Rettungskraefte immer und immer wieder mit Personen umgehen, die schamlos an Unfallstellen ihr Smartphone rausziehen und das Geschehen in Bild und Ton zum Zwecke der Weiterverbreitung aufnehmen.

Der vielfache Wunsch…

…ist ein Stoersender (Jammer), der die Geraete an Unfallstellen stillegt. Auch wenn einige bereits so frustriert sind, dass sie eine Beschaedigung in Kauf nehmen, geht es natuerlich [rein theor.] auch ohne.

Mikrocontrollertechnik

Die Bauteile auf einer Platine, sprechen ueber standardisierte Schnittstellen intern miteinander. Beispiele hierfuer:

I²C: Inter-Integrated Circuit

TTL: Transistor-Transistor-Logik

SPI: Serial Peripheral Interface

SMBus: System Management Bus

Der grosse Vorteil bei diesen “System on Chip” (SoC) Loesungen ist, dass sie elektrisch eher Einheitsbrei sind. Ich beschaeftige mich am meisten mit TTL und dort mit einer Spannung von 3,3V.

Hochfrequenztechnik

Der Empfang von Aussendungen ist nichts weiter, als das Erregen mehr oder minder intelligenter Bauteile durch elektromagnetische Wellen. Das kann wie z.B. bei Funkgeraet oder Radio ein gewollter Zustand sein oder im Falle der Stoerung eines Geraetes durch nicht zuletzt Einstroemung oder ungewollte Resonanz von Bauteilen auf Aussendungen anderer.

Antennen

Will man eine auf eine bestimmte Frequenz oder einen bestimmten Frequenzbereich resonante Antenne haben, muss diese entsprechend der Frequenz dimensioniert sein, damit sie wie z.B. eine Gitarrensaite resonant ist. Man kann eine Gitarrensaite ja auch in Schwingung versetzen, ohne sie anzufassen.

Der Dipol

Egal wie wild eine Antenne aussieht, das Beispiel ist immer noch der Dipol. In meinem Garten haengt ein sogenannter gekippter terminierter und gefalteter Dipol: T2FD genannt.

Platinenantenne

Eine Antenne muss jedoch nicht aus Rohren, Drahtseilen, Staeben oder dergleichen gefertigt werden. Man kann auch Platinen aetzen, dass sich auf der Platine lediglich eine Antenne befindet 🙂 Hier ist bei einer sehr kurzen Recherche eine Platinenantenne zu finden: Bastelkammer

Das S-Meter

Bei allen “neueren Funkgeraeten” ist ein sogenanntes S-Meter eingebaut. Auch wenn das mehr so als “Schaetzeisen” gesehen wird, reicht es fuer meine Erklaerung. Eine Signalstaerke von S9 entspricht je nach Frequenz etc. -73dBm oder in Volt ganze 50μV. Erinnern wir uns an 3,3V TTL: 3,3V ist groesser als 50μV

3,3V = 3300mV = 3300000μV

Der mathematischen Einfachheit halber wollen wir theoretische 5,0V auf eine Distanz von 10-25m in die Leiterbahn der Platine eines Handies bringen. Die Laenge der Leiterbahn entscheidet natuerlich auch deren Resonanzfrequenz. Fuer die Theorie hier, brauchen wir sie jedoch nicht. Wichtig ist:

S9 = 50μV = -73dBm

S9 + 50dB = 5.000.000μV = 5.000mV = 5V

Signalstaerken von S9+50 oder mehr, sind auch auf groessere Distanz, so garkein Problem. In dem Fall wurde meine Antenne durch eine Aussendung auf einer Frequenz, auf der sie in Resonanz ist, erregt. Dasselbe geht natuerlich auch mit Leiterbahnen auf einer Handyplatine O:-)

Signalpegel vs. Signalstaerke

Wenn man auf einer Leiterbahn das “legitime Signal” eines benachbarten Bausteils mittels einer Funkaussendung abfaelscht, ist die Datensicherheit (Schutz vor Verlust oder Veraenderung) nicht mehr gewaehrleistet. Eventuelle “erneute Sendungen der Daten”, die je nach Protokoll dem entgegenwirken sollen, kommen bei dauerhafter Aussendung auch nicht mehr durch. Das ganze Konstrukt bricht temporaer zusammen.

Rechtlicher f00

Das ist reine Theorie und weder die VO Funk noch sonst etwas, erlaubt den Einsatz solcher Geraete.

Fernbedienung fuers Funkgeraet

Problem

Ab 2020 ist die Uebergangszeit um, in der wir noch ohne Freisprechanlage funken duerfen. Obwohl Sippenhaft mit dem 08.05.1945 in Deutschland abgeschafft wurde, werden wir mit allen verantwortungslosen Handytippern im Strassenverkehr ueber einen Kamm geschoren und man unterstellt jedem von uns, wir seien zu doof, um die PTT-Taste zu druecken, ohne die Augen von der Strasse zu nehmen.

Loesung

Beim freundlichen Chinesen, gibt es universelle IR-Fernbedienungen fuers Lenkrad und -Empfaenger fuer wenige Euro.

IMG_20191211_132105.jpg

Version 1.0 wird alles steuern, was ich direkt ueber die RJ45-Stecker des Mikros regeln kann. Version 2.0 soll die Arduino CAT-Libraries benutzen, um alles weitere zu steuern, was auf der Fernbedienung nutzbar ist:

– +/-: Frequenz hoch/runter

– MOD: Betriebsart hoch

– RPT: Repeatermodus an/aus

– BND: Band hoch

– und was mir noch so einfaellt

Das Mikro wird per Schwanenhals in Mundnaehe positioniert. Moegen die Spiele beginnen!

Der erste Abend 😉

das benutzte KY-022 IR-Modul, will von der Arduino IRremote Library mit Arduino programmiert werden. OBACHT: Nach dem Programmieren, will die serielle Schnittstelle mit 4800 Baud angesprochen werden, nicht 9600.

Dann wird ein ordentliches Mapping gemacht:

Anruf annehmen EE886D7F
Anruf beenden E318261B
Minus 52A3D41F
Plus D7E84B1B
Start/Pause E5CFBD7F
MOD F076C13B
RPT A3C8EDDB
BND 511DBB
Note/Film 97483BFB
Hoerer mit Kreis F0C41643
Stumm 20FE4DBB

Todo:

Jetzt gilt es herauszufinden, was ich bei meinem FT-857D alles per Pin meines Mikrofonsteckers geregelt bekomme, dass Version 1.0 fertig wird. Das wird dann per Transistorschaltung realisiert.

Fuer Version 2.0 dann die CAT-library 🙂

USB GPS-Empfaenger aus Bauteilen fuer unter 5 EUR

Die Idee – aus einer Bierlaune heraus

Von einer Rueckzahlung wegen nicht angekommener Bauteile, habe ich ein ublox neo6m Modul bestellt. Das Modul haut NMEA-konforme Daten via UART raus:

$GPRMC,190554.00,A,5214.43917,N,00910.40169,E,2.053,319.88,270719,,,A*63

Wenn man die entsprechenden USB/TTL Adapter mit pl2303 oder ch340/341 Chipsatz hat, kann man die direkt an den neo6m anflanschen:

NEO6M USB2TTL
rx tx
tx rx
VCC 5V
GND GND

Ihr seht: Das kann man auch nach dem 2./3. Bier nicht unbedingt falsch machen 😉 Das neo6m Modul macht defaultmaessig 9k6, also 9600 baud und mag 8n1 Daten-/Stoppbits. Es mag fuer andere “merkwuerdig” klingen, aber erst neulich kam mir die Idee, dass ich mir einen selbst programmierten Mikrocontroller schenken kann, wenn alle (naja, zwei) Bauteile, die miteinander reden sollen, beide UART (TTL) beherrschen. Sie brauchen also nur eine Stromversorgung, wenn die nicht grad vom USB-Port abgegriffen wird. Mir fehlt da der Austausch oder die fundierte Ausbildung. Daher muss ich selbst drauf kommen.

Daten abgreifen

Da das neo6m Modul 9k6 spricht, starten wir den USB/TTL Adapter auch mit 9k6:

screen /dev/ttyUSB0 9600

Die Ausgabe sieht in etwa so aus:

$GPGLL,5214.44035,N,00910.42201,E,195918.00,A,A*6D
$GPRMC,195919.00,A,5214.44075,N,00910.42261,E,0.758,35.18,270719,,,A*56
$GPVTG,35.18,T,,M,0.758,N,1.405,K,A*08
$GPGGA,195919.00,5214.44075,N,00910.42261,E,1,04,2.83,118.2,M,46.2,M,,*5C
$GPGSA,A,3,06,02,07,09,,,,,,,,,5.12,2.83,4.26*07
$GPGSV,3,1,11,02,38,298,28,03,16,118,,05,08,297,,06,51,231,25*73
$GPGSV,3,2,11,07,40,170,26,09,88,079,21,16,14,067,,23,46,071,*7B
$GPGSV,3,3,11,26,13,039,,29,06,347,,30,13,190,18*48

Das sind reine unverschnittene NMEA-Daten 🙂 Wichtig fuer mich ist eigentlich nur die Zeile, die mit “$GPRMC” beginnt:

$GPRMC,195919.00,A,5214.44075,N,00910.42261,E,0.758,35.18,270719,,,A*56

Dort enthalten die Uhrzeit in UTC: 195919, also 19:59.19 UTC/GMT oder 21:59.19 CEST

Der Buchstabe “A” bedeutet, dass die Daten “aktiv” sind, also “einen Sinn ergeben”. Wenn das Modul noch nicht weiss, wo es ist, kommt ein “V” (void (ungueltig))

Die Fliesskommazahl 5214.44075 ist bereits die Koordinate, gefolgt von “N”, weil es 52.11444075 NORD ist

Die Fliesskommazahl 00910.42261 ist der zweite Teil der Koordinate, gefolgt von “E”, weil es 9.1042261 OST (East) ist.

[…]

Dann kommt noch 270719, was fuer 27.07.2019 steht 😉

Ich behandle mal nur die interessanten Daten 🙂

 

Nutzen der Daten

Zum proof-of-concept, dass das Zwei-Stueck-Puzzle auch funktioniert, habe ich Xastir installiert und grob konfiguriert, als DO4AMF-3 Daten zum APRSIS zu schicken. Bedeutet, dass man, bis ich es mit einem anderen Versuch ueberschreibe, hier gucken kann, was das GPS-Modul empfangen und per Xastir an das APRSIS rausgejagt hat 🙂

 

Resümee

Wenn man bedenkt, dass ein USB GPS-Empfaenger oftmals bedeutend mehr als 10-20 EUR kosten und man sich das mit billigsten Bauteilen von vielleicht 6 EUR selbst bauen kann, ein entspannendes Abendprojekt, um einfach mal nicht nur Netflix zu gucken 😉

Wetterstation, der Tragoedie zweiter Teil

Update: Bis auf die Windrichtungsanzeige, scheint das System nunmehr komplett tot zu sein 😦

Neue Nachbarschaft, neues Glueck

Mittlerweile hat sich der Staub meines Umzugs und eines Beziehungsversuchs etwas gelegt. Zeit zum Rumnerden. Die Wetterstationen meiner Nachbarn, werden wie bereits in der Wohnung, mit der Software rtl_433 ausfindig gemacht. In der Tat nur zwei Geraete, die fuer den rtl-sdr hoerbar senden, in der gesamten Nachbarschaft 🙂

Das eine ist der Funksensor der Wetterstation einer Freundin, die ich so 2008/2009 kennenlernen durfte und die sich diebisch freut, dass ich jetzt direkt vis a vis ein Haus gekauft habe. Dessen Sensorphalanx ist eher bescheiden. Die zweite Wetterstation hatte es in sich: Temperatur, Luftfeuchtigkeit, Windrichtung/-geschwindigkeit und Regen.

Die Sensorbank muss vom Funktionsumfang her, meinem direkten Nachbarn gehoeren. Die zwei sind auch ein Grund, warum ich mich in der neuen Nachbarschaft so wohl fuehle. Ich muss denen nur mal den Hallgeber oder was immer deren Windrad benutzt, mal wieder gangbar machen, dass Windgeschwindigkeit wieder gemessen werden kann.

 

Fangen wir mit der Auswertung an

rtl_433 fand folgende Sensoren:

2019-07-10 07:47:28,,,AlectoV1 Temperature Sensor,169,1,OK,16.100,24,,,,,,,,,CHECKSUM
2019-07-10 07:47:59,,,AlectoV1 Wind Sensor,169,1,OK,,,,,0.000,0.000,315,,,,CHECKSUM

Dies ist bereits die nach Hersteller spezialisierte Ausgabe im CSV-Format:

/usr/local/bin/rtl_433 -g0 -p55 -q -R16 -Fcsv

Die Option -p 55 bezieht sich auf den rtl-sdr Stick, der eine Missweisung von 55ppm hat. -R 16 ist der Filter nach Hersteller. Bei diesem Hersteller sind folgende Spaltennamen moeglich:

time, msg, codes, model, id, channel, battery, temperature_C, humidity, rain_total, rain_mm, wind_speed, wind_gust, wind_direction, wind_avg_km_h, wind_max_km_h, wind_dir_deg, mic

 

Daten in die -bank

Die Spaltennamen und CSV-Felder, sind ja quasi eine Einladung, sich das Ganze von CSV in SQL umzubauen und eine Datenbank damit zu befuellen. Meine Waffe der Wahl ist in dem Fall MariaDB. Datenbank home_weathermonitor, Tabelle rawdata:

CREATE TABLE `rawdata` (
`dataset` bigint(20) NOT NULL AUTO_INCREMENT,
`time` datetime NOT NULL,
`msg` text NOT NULL,
`codes` text NOT NULL,
`model` text NOT NULL,
`id` int(11) NOT NULL,
`channel` int(3) NOT NULL,
`battery` text NOT NULL,
`temperature_C` float DEFAULT NULL,
`humidity` int(3) DEFAULT NULL,
`rain_total` float DEFAULT NULL,
`rain_mm` float DEFAULT NULL,
`wind_speed` float DEFAULT NULL,
`wind_gust` float DEFAULT NULL,
`wind_direction` int(3) DEFAULT NULL,
`wind_avg_km_h` float DEFAULT NULL,
`wind_max_km_h` float DEFAULT NULL,
`wind_dir_deg` int(3) DEFAULT NULL,
`mic` text NOT NULL,
PRIMARY KEY (`dataset`)
) ENGINE=InnoDB AUTO_INCREMENT=24812 DEFAULT CHARSET=utf8mb4 |

So weit, so gut 🙂 Fehlt die Schnittstelle, um die CSV-Daten von rtl_433 in funktionierendes SQL zu verwandeln. Es folgt der uebliche bash-hack:

#!/bin/bash

# warten auf den MySQL Server
while [ ! -S /var/run/mysqld/mysqld.sock ]
do sleep 2
done

# Daten werden hier aus der Luft gegriffen
/usr/local/bin/rtl_433 -g0 -p55 -q -R16 -Fcsv | \
while read i
do echo ${i} >> /tmp/weather_rawdata
echo ${i} | grep “^`date +%Y`” | sed ‘s/,/”,”/g’ | \
sed ‘s/^/INSERT INTO rawdata ( time, msg, codes, model, id, channel, battery, temperature_C, humidity, rain_total, rain_mm, wind_speed, wind_gust, wind_direction, wind_avg_km_h, wind_max_km_h, wind_dir_deg, mic ) VALUES ( \”/g’ | \
sed ‘s/$/”);/g’ | mysql -hlocalhost -uweather -pSommer2019 home_weathermonitor
done

Was passiert hier? rtl_433 faengt die Daten auf, gibt sie zeilenweise in CSV aus und es wird nach dem aktuellen Kalenderjahr am Zeilenanfang gesucht, um die Spaltennamen  bei Programmstart auszublenden, die wegen der Datentypen zweifelsohne nicht in die Tabelle geschrieben werden koennen

echo ${i} | grep “^`date +%Y`”  //  Der accent ^ ist in dem Fall Zeilenanfang

Was da uebrig bleibt, kriegt erstmal Gaensefuesschen verpasst:

sed ‘s/,/”,”/g’

und die Daten sehen schonmal so aus:

lukas@master-control:~/bin$ i=”2019-07-10 07:48:30,,,AlectoV1 Wind Sensor,169,1,OK,,,,,0.000,0.000,0,,,,CHECKSUM”
lukas@master-control:~/bin$ echo ${i} | grep “^`date +%Y`” | sed ‘s/,/”,”/g’
2019-07-10 07:48:30″,””,””,”AlectoV1 Wind Sensor”,”169″,”1″,”OK”,””,””,””,””,”0.000″,”0.000″,”0″,””,””,””,”CHECKSUM
lukas@master-control:~/bin$

Das ist aber noch weit weg von SQL 😉

[…] | sed ‘s/^/INSERT INTO rawdata ( time, msg, codes, model, id, channel, battery, temperature_C, humidity, rain_total, rain_mm, wind_speed, wind_gust, wind_direction, wind_avg_km_h, wind_max_km_h, wind_dir_deg, mic ) VALUES ( \”/g’

Heraus kommt ein halbfertiges SQL-Statement:

INSERT INTO rawdata ( time, msg, codes, model, id, channel, battery, temperature_C, humidity, rain_total, rain_mm, wind_speed, wind_gust, wind_direction, wind_avg_km_h, wind_max_km_h, wind_dir_deg, mic ) VALUES ( “2019-07-10 07:48:30″,””,””,”AlectoV1 Wind Sensor”,”169″,”1″,”OK”,””,””,””,””,”0.000″,”0.000″,”0″,””,””,””,”CHECKSUM

Das fehlende Stueck, damit ein MySQL/MariaDB Server es ueberhaupt frisst, kommt mit dem letzten sed:

sed ‘s/$/”);/g’  // Das $ Zeichen ist hier der regulaere Ausdrueck fuer Zeilenende

Wir haben also hinter CHECKSUM jetzt das fuer SQL benoetigte Ende des Statements:

INSERT INTO rawdata ( time, msg, codes, model, id, channel, battery, temperature_C, humidity, rain_total, rain_mm, wind_speed, wind_gust, wind_direction, wind_avg_km_h, wind_max_km_h, wind_dir_deg, mic ) VALUES ( “2019-07-10 07:48:30″,””,””,”AlectoV1 Wind Sensor”,”169″,”1″,”OK”,””,””,””,””,”0.000″,”0.000″,”0″,””,””,””,”CHECKSUM”);

Mit einer letzten Pipe und etwas mysql geht es dann ab in die Datenbank:

| mysql -hlocalhost -uweather -pSommer2019 home_weathermonitor

Ja, ich kann die Daten hier reinschreiben wie ich will, der MariaDB Dienst ist von aussen nicht erreichbar und die phpMyAdmin-Oberflaeche (ja, ich bin doppelt pervers), sitzt hinter htaccess und Formularanmeldung 😉

 

Aufarbeitung und Praesentation

Einer meiner Kollegen meinte auf die Frage, womit man Daten optisch nett aufbereiten kann, ich solle mir Grafana einmal ansehen. Gesagt, getan!

Das Ergebnis findet sich hier

Benutzername: guest

Passwort: guest

Oben links auf die vier Quadrate klicken

Upgrade Wohnung -> Haus

Moin, moin, liebe Sportsfreunde! 🙂

Es ist in letzter Zeit recht still gewesen, denn zu allem Überfluss, habe ich in den vergangenen Monaten ein Haus gekauft, das etwas näher an meinem Sohn dran ist, als die ursprünglich gemeinsame Wohnung mit Kind und Kegel. Das eröffnet einem ein vollkommen neues Universum, was Bauten mit, für oder wegen Amateurfunk angeht.

Als Antennen kommen dann irgendwann bald zum Einsatz:

  • Diamond X-6000N fuer UKW (Shack) auf 4,5m GFK-Mast
  • Eigenbau Multiband Dipol fuer KW (Shack) zwischen Haus und Garage gespannt
  • ggf. Magnetic Loop fuer 160m/80m
  • Diamond X-30N fuer UKW (Kueche) unter Dach
  • Albrecht 6164 EuroStick DX (Shack) unter Dach

Diamond X-6000N

Fuer Relaisbetrieb auf 2m/70cm auf einem nicht-leitenden GFK-Masten. Die Antenne soll, wie am anderen Standort auch, schnell und einfach herabzulassen sein, ggf. sogar automatisch mit Elektrowinde, die durch einen Blitzsensor ausgeloest wird und nach 30-60min ohne Blitze, die Antenne evtl. sogar selbststaendig wieder hochzieht. Kommt regulaer an das Yaesu FT-847.

Eigenbau Multiband Dipol

Da meine T2FD etwas sehr viel noise mitbringt, was nicht zuletzt auch am Speisepunkt liegt, wollte ich die Konstruktion eines benachbarten Funkamateurs mit Speisepunkt weit weg vom Haus nachbauen. An der Garage ein weiterer GFK-Mast, am Shack ein stabiler Haken, an beidem eine Rolle und man kann ohne Leiter etc., die Antenne wie an einer Waescheleine “raus zum Spielen schicken”. Kommt regulaer an das Yaesu FT-847.

Magnetic Loop fuer 160m/80m

Zum Thema noise…bei MagLoops noch weniger ein Problem, aus Gruenden der BEMFV/DIN0848 jedoch wegen der Spannung nur auf einem “Tuermchen” zu montieren. Mit etwas Bauholz und handwerklichem Geschick, ja auch garkein Problem – sowohl Turmbau, als auch Antennenbau. Irgendwie ist es ja immer Experimentalfunk. Kommt zu besonderen Anlaessen (Fieldday zu Hause?) an das Yaesu FT-847.

Diamond X-30N

Ob man es nun rege nutzt oder manchmal einfach nur wissen muss, dass man koennte. Eine UKW-Antenne unter Dach, frisst neben den Anschaffungskosten kein Brot und wenn man ohnehin Cat7 im Haus verlegt, koennen ein paar Meter Aircell 5 von Dachboden in die Kueche nicht schaden, damit man dort ggf. eine Handfunke hinstellen kann.

Albrecht 6164 EuroStick DX

Fuer diverseste Funkanwendungen, wie z.B. meinem derzeit seit ca. 6 Monaten toten APRS iGate DO4AMF-10, eventuell HomeLink RX, zur besonderen Verfuegung oder als Empfangsantenne fuer meinen Digital Meldeempfaenger (DME) in seiner Ladeschale. Geplant ist ein 20dB Mastvorverstaerker Marke BY, ein handgewickelter 1:4 Splitter und dann in die unterschiedlichen RTL-SDR, 2m Handfunke fuer APRS etc.

Von der Wetterstation ins APRS Netzwerk

Da ich es mir fuer meinen Urlaub…naja, meine zwei Wochen nicht auf Arbeit…vorgenommen hatte, die Wetterdaten von der -station meiner Nachbarn fuer mich nutzbar zu machen, habe ich das fuer mich natuerlich weiter entwickelt. Sicherlich quick&dirty aber funktioniert! An einem meiner OrangePis, der per 2m Handfunke und Arduino TNC APRS Positionsmeldungen auf 144,800MHz empfaengt, haengt nun auch ein SDR-Stick mit R820T2 Chip ❤

Daten reinschaufeln

rtl_433 -g 0 -p 55 -R 19 -q -F csv | rtl_433_wrapper

Daten verarbeiten

Zugegebenermassen wirklich quick und dirty. Leider wird die Temperatur 12.345 ausgesendet, ich brauche 12. Daher das Gehure mit den Variablen TEMP/FTMP/TMPE. Dann noch schneller und haesslicher, weil BASH keine Kommazahlen mag in bc, eine Umrechnung von Celsius in Fahrenheit…die aprs.fi dann wieder in Celsius umrechnet, wottsefakk?

root@igate:/usr/local/bin# cat rtl_433_wrapper
#!/bin/bash
#
# Zeilenweises einlesen einer Zeile
#
# Variableeeeeeen
INPUT="/tmp/wxstation-input.txt"
OUTPUT="/tmp/wxstation-output.txt"

while true
	do LINE=`line`
	echo ${LINE} > ${INPUT}
#	date "+%a %b %d %H:%M:%S" > ${OUTPUT}
	TEMP=`echo ${LINE} | awk -F',' '{print $6}'`
	# Celsius nach Fahrenheit
	FTMP=`echo "( ${TEMP} * 1.8 ) + 32" | bc -l`
	TMPE=`echo ${FTMP} | awk -F'.' '{print $1}'`

		if [ ${TMPE} -lt 100 ]
			then TMPE="0${TMPE}"
		fi

	HUMD=`echo ${LINE} | awk -F',' '{print $7}'`
	echo "@`date "+%d%H%M"`z5214.14N/00906.51E_.../...g...t${TMPE}r...p...P...h${HUMD}b....." > ${OUTPUT}
	LINE=""
done

Die aktuellste Version des mittlerweile doch recht fortgeschrittenen Scripts, kann man auf dem Webserver des Orange Pis angucken: rtl_433_wrapper.txt

Daten benutzen

Wie ihr seht, hab ich einmal /tmp/wxstation-input.txt mit diesem Inhalt, der so von rtl_433 aufgefangen wurde:

2018-08-21 01:13:23,Nexus Temperature/Humidity,9,OK,1,18.300,80

und einmal /tmp/wxstation-output.txt:

@210113z5214.14N/00906.51E_…/…g…t064r…p…P…h80b…..

Ersteres kann man wegen der Verpackung als CSV (Wehe jetzt sagt wer JSON!!!!) prima in anderen Anwendungen verbasteln, Zweiteres ist bereits mundgerecht umgebastelt, um es in das APRS Netzwerk einzuspielen.

Zum String: @ ist generell Zeilenanfang, die 21 dahinter der Wochentag generiert mit  date +%d gefolgt von Stunde/Minute (%H%M), das z heisst “zulu time”, auch als UTC oder halbrichtig GMT bekannt. Danach kommen die Koordinaten des Standorts, beendet durch _. Danach kommt Windrichtung/Windgeschwindigkeit. Da die Wetterdaten nicht vorliegen, …/…, “gust” liegt nicht vor, also g…, t0${TEMP} habe ich aus jugendlichem Leichtsinn erstmal ein 0 hartverdrahtet. Ich mache das sicher noch schoen 🙂 r… ist Regenfall in hundertstel Zoll der letzten Stunde. p… ist Regenfall in hundertstel Zoll der letzten 24 Stunden, P… ist Regenfall in hundertstel Zoll seit Mitternacht. h${HUMD} ist die Lufteuchtigkeit und b….. ist der barometrische Druck in 1/10 Millibar 🙂

NICHT WUNDERN, das APRS-IS errechnet anhand von Temperatur/Luftfeuchtigkeit selber den Taupunkt 🙂

Wie es weitergeht…

Man kann das sicherlich noch etwas huepscher verpacken. Wie ihr an den UTC-Zeiten seht, ist schon spaet, aber ich hab ja Urlaub 🙂 wxstation-input.txt wollt ich verwursten fuer menschenlesbare Informationen auf einem Webserver hier an meinem QTH. wxstation-output.txt verwurste ich dann mit APRS.

Jedenfalls sieht man die APRS-IS Daten wunderbar hier!

73 DE DO4AMF

Das Sensoren-Grid meiner Nachbarn ;-)

So eine Wetterstation wollte ich fuer mein APRS-iGate eigentlich auch haben. Lediglich die Kosten haben mich da etwas in meinem Enthusiasmus gebremst. Aber IoT sei Dank, muss ich das ja auch garnicht 🙂 Ich muss auch keinen Arduino mit Bluetooth-Schnittstelle und aus Wettersonden gemoppsten Sensoren zusammenstecken.

Kompilen von rtl_433

Ungefaehr hier gibt es die Sourcen von dem Programm rtl_433 heunterzuladen. Wer sich mit git und co auskennt, kriegt das in Windeseile kompiliert und gestartet.

Start von rtl_433

Meine Kommandozeile sieht so aus:

rtl_433 -g 0 -p 55 -F csv | awk -F’,’ ‘{print “Datum: ” $1 “, Geraet: ” $2 “, Temperatur: ” $6 “, Luftfeuchtigkeit: ” $10}’

-g 0 = Autogain

-p 55 = PPM Korrektur meines SDR-Sticks

-F csv = Ausgabe der empfangenen Daten in CSV Format

Verwurstet wird das von meinem Liebling: awk

-F ‘,’ = Nimm Komma als Delimiter der Felder

Feld 1 ist das Datum, also print “Datum: ” $1

Feld 2 ist die Bezeichnung Hersteller/Geraet: “, Geraet: ” $2

Feld 6 die Temperatur: “, Temperatur: ” $6

Feld 10 dann die Luftfeuchtigkeit: “, Luftfeuchtigkeit: ” $10

Beispieldaten

Datum: 2018-08-14 13:10:53, Geraet: Nexus Temperature/Humidity, Temperatur: 21.200, Luftfeuchtigkeit: 94
Datum: 2018-08-14 13:11:03, Geraet: HIDEKI TS04 sensor, Temperatur: 22.800, Luftfeuchtigkeit: 59
Datum: 2018-08-14 13:11:03, Geraet: HIDEKI TS04 sensor, Temperatur: 22.800, Luftfeuchtigkeit: 59
Datum: 2018-08-14 13:11:03, Geraet: HIDEKI TS04 sensor, Temperatur: 22.800, Luftfeuchtigkeit: 59

 

Weiteres Filtern

Die HIDEKI-Sensoren scheinen – verglichen mit dem Nexus-Sensor – Daten aus Raeumlichkeiten in die Luft zu blasen. Bei rtl_433 kann man zum Glueck nach Geraetetypen filtern. Option -R ist was wir wollen. Wenn mich interessierte, wie warm es meine Nachbarn im Haus haben, wuerde ich -R 42 als Filter benutzen. In dem Fall ist 42 aber nicht die Antwort auf alles. Den Nexus Sensor kriegen wir mit -R 19. Wir starten rtl_433 also mit folgender Kommandozeile:

rtl_433 -g 0 -p 55 -R 19 -F csv | awk -F’,’ ‘{print “Datum: ” $1 “, Geraet: ” $2 “, Temperatur: ” $6 “, Luftfeuchtigkeit: ” $10}’

Kurioserweise wird dann die Luftfeuchtigkeit nicht mehr angezeigt. Also das AWK-Geraffel hinter der Kommandozeile wegnehmen und Felder zaehlen:

2018-08-14 13:18:29,Nexus Temperature/Humidity,9,OK,1,20.800,93

Ich komme also zu dem Schluss, dass geraetabhaengig die entsprechenden Spalten angezeigt werden. Wenn die Nexus-Geraete allesamt nur 7 Werte uebermitteln, muss man auch keine 10 Felder per Funk uebertragen.

rtl_433 -g 0 -p 55 -R 19 -F csv | awk -F’,’ ‘{print “Datum: ” $1 “, Geraet: ” $2 “, Temperatur: ” $6 “, Luftfeuchtigkeit: ” $7}’

Ergebnis:

Datum: 2018-08-14 13:20:23, Geraet: Nexus Temperature/Humidity, Temperatur: 20.500, Luftfeuchtigkeit: 92

Laeuft soweit!

 

Weiteres Verarbeiten

Es steht euch jetzt vollkommen frei, ob ihr die Daten in eine Round-Robin-Database pumpt, um tolle Graphen zu haben, das Ganze per seriellem Display an eurem Pi auf diesem anzeigen lasst. Ich versuche bloss moeglichst vielen Anwendungsbeispielen in die Hand zu arbeiten. Wer sich mit -F auseinandersetzt sieht auch, dass man nicht nur in CSV, sondern auch json und als syslog-Eintrag speichern kann 🙂

 

Andere Sensoren in meiner Ecke

Neben zahlreichen Wetterstationen war es mir moeglich, eine Alarmanlage, die das 433MHz ISM Band nutzt (WOTTSEFAKK???), mit meinem DVB-T Stick an der Diamond X-6000N zu empfangen. Im Regelbetrieb kommt der Stick an meine Breitband-Scannerantenne.

Habt viel Spass 🙂