Über die Schnittstellen bei TTN (The Things Network) kann man eine Menge Daten auslesen – natürlich die Inhalte (Payload) der Applikationen und einige technische Werte.
Konkret interessiert mich zB. der RSSI (Eingangssignalstärke) der vom LoRa Gateway empfangenen Pakete. Im Webinterface kann man in der TTN Console im Bereich Gateway mitschauen und erhält hübsche JSON-Objekte, in denen alles enthalten ist. Ich habe aber keine Schnittstelle gefunden, mit der ich es auslesen kann – weder live noch nachträglich (als gespeicherte Werte).
Nachtrag Juli 2017: wir haben mit dem Aufbau einer Community bei The Things Network in Wien begonnen. Das Ziel ist die Schaffung eines freien und offenen Netzes für IoT. Nachdem ich mehrfach auf meinen Blog hin angeschrieben wurde, es den Personen aber nicht bewusst war, dass sich hier was tut, möchte ich auf folgende Links verweisen: folgt uns auf Twitter (@TTN_Vienna), für Updates und Infos zu den nächsten Treffen oder besucht die Wiener Community Seite!
Nachdem ich mir das Protokoll schon angeschaut habe, war mir klar, dass es die Daten unverschlüsselt überträgt. Es nutzt übrigens UDP für die Kommunikation zu den TTN Network Servern auf Port 1700.
Also habe ich meiner /etc/rc.local (vor dem “exit 0”!) folgenden Eintrag hinzugefügt:
/usr/sbin/tcpdump -Aq port 1700 >> /var/log/ttn-tcpdump-gateway.asc &
Damit wird nach jedem Reboot in die Datei /var/log/ttn-tcpdump-gateway.asc per tcpdump in ASCII die Inhalte aller Verbindungen zu Port 1700 gespeichert:
Mich interessieren eigentlich nur Übertragungen und Statusmeldungen. In beiden kommt “rx” vor:
cat /var/log/ttn-tcpdump-gateway.asc | grep rx
Die Meldungen beginnen immer mit 41 Zeichen (Byte) Header, die kann man wegschneiden:
Über einen Freund bin ich vor ein paar Wochen auf das Thema LoRa bzw. LoRaWAN aufmerksam geworden.
Vor allem seit ich The Things Network (https://www.thethingsnetwork.org) kenne und somit über die Community eine Möglichkeit besteht, die Technologie sinnvoll zu nutzen, bin ich interessiert mich damit mehr zu beschäftigen.
Nachtrag Juli 2017: wir haben mit dem Aufbau einer Community bei The Things Network in Wien begonnen. Das Ziel ist die Schaffung eines freien und offenen Netzes für IoT. Nachdem ich mehrfach auf meinen Blog hin angeschrieben wurde, es den Personen aber nicht bewusst war, dass sich hier was tut, möchte ich auf folgende Links verweisen: folgt uns auf Twitter (@TTN_Vienna), für Updates und Infos zu den nächsten Treffen oder besucht die Wiener Community Seite!
Ein LoRa Sensor ist ein Endgerät, das über das LoRa-Protokoll in ein Netzwerk Informationen funkt. Empfangen werden die Pakete üblicherweise von einem Gateway. Bis zur Auswertung der Pakete sind noch Network Server und Application Server nötig, die in meinem Fall über TTN (The Things Network) bereitgestellt werden.
Da ich auch mit Freunden einen Gateway bauen möchte, brauchen wir natürlich einen LoRa Sensor, um unseren Gateway zu testen. Als günstige Variante habe ich Arduino + LoRa Shield für Arduino gefunden.
Nachtrag Juli 2017: wir haben mit dem Aufbau einer Community bei The Things Network in Wien begonnen. Das Ziel ist die Schaffung eines freien und offenen Netzes für IoT. Nachdem ich mehrfach auf meinen Blog hin angeschrieben wurde, es den Personen aber nicht bewusst war, dass sich hier was tut, möchte ich auf folgende Links verweisen: folgt und auf Twitter (@TTN_Vienna) für Updates und Infos zu den nächsten Treffen oder besucht die Wiener Community Seite!
Falls jemand entspannt an das Projekt herangeht und mit 5-6 Wochen Lieferzeit aus Shenzhen (China) kein Problem hat, gibt es das LoRa Shield auch kostengünstiger (€ 18,70 am 1.4.2017) über Tindie zu kaufen. Hier beachtet bitte, dass Shipping (+ € 6,12 nach Österreich) und ggf. Zoll dazukommen.
Bitte beachtet bei Bestellungen immer, dass ihr die 868 MHz-Variante auswählt! Nur diese darf in der EU betrieben werden bzw. wird hier funktionieren!
Von der Vorgehensweise halte ich mich an diese Anleitungen:
Vielen Dank an die Kollegen von TTN Zürich, die diese Anleitungen und Programme zur Verfügung stellen!
Zusammenbau
Das LoRa Shield muss nun nur mehr auf den Arduino gesteckt werden. Die Antenne wird an den SMA-Anschluss geschraubt.
Konfiguration
Nun lädt man den Arduino Sketch (“Hello World”, siehe Link oben) ins Arduino IDE und muss ein paar Werte anpassen. Dazu erstellt man eine “Application” in der Console von TTN und legt ein Gerät (“Device”) an. Eine Over-The-Air-Activation (OTAA) ist nicht möglich, daher muss man manuell ABP wählen und die Werte vom Webinterface abschreiben. Diese werden von TTN automatisch generiert.
NWKSKEY: der Network Session Key muss im korrekten Format in die geschwungenden Klammern { } eingefügt werden.
APPSKEY: ebenso der Application Session Key und zum Schluss die
DEVADDR, also die Geräteadresse im korrekten Format.
TTN bietet im Webinterface übrigens die Werte bereits im richtigen Format an. Im Zweifelsfall muss man auf “< >” klicken, dann werden die Werte in anderen Formaten dargestellt und können mit copy & paste übernommen werden. Das gewünschte Format ist “msb”.
Ansonsten musste ich keine weiteren Änderungen am Code durchführen.
Trotzdem habe ich den zu übertragenden Text von “HI” auf “stefan test” geändert: dazu habe ich die Payload in der Variable “message[]” in Zeile 57 angepasst:
Nun habe ich den Sketch kompiliert und auf den Arduino übertragen. Unmittelbar darauf hat er begonnen, alle 20 Sekunden kurz zu blinken, wodurch ich mich bestätigt gefühlt habe, dass es funktioniert und nun alle 20 Sekunden die Meldung “stefan test” mittels LoRa übertragen wird.
Überprüfen am Gateway
Einen Gateway hatten wir parat und er hat sofort die Pakete empfangen. Über die “Traffic” Funktion in der TTN Console kann man die ankommenden Pakete gleich sehen.
Man sieht hier mehrere Pakete, die im Abstand von ca. 25 Sekunden ankommen. Die Frequenz wechselt bei jedem Paket, weil mehrere Kanäle genutzt werden: 868,1 – 868,5 – 868,3 usw.
Folgendes JSON Objekt mit allen Details erhält man aus der TTN Console beim Gateway Traffic:
Es enthält sämtliche Details zur Übertragung. Ein paar Werte möchte ich kurz hervorheben:
gw_id: zeigt die ID des Gateways, der das Paket empfangen hat
payload: sind die übertragenen Daten in verschlüsselter Form
f_cnt: ist der Counter und gibt die Anzahl der Pakete wider
lora.spreading_factor: zeigt hier den Spreading Factor 9, der im Sketch eingestellt ist
rssi: zeigt die Signalstärke des empfangenen Pakets am Gateway an (hier: -25 dbm)
snr: das Signal/Rausch-Verhältnis
dev_addr: die Geräteadresse, die von TTN vergeben wurde und ich als DEVADDR im Sketch hinterlegt habe.
frequency gibt die Frequenz in Hertz an
Wir sehen, dass das Paket einwandfrei übertragen wurde und sogar sehr gut (-25 dbm) empfangen wurde. Bei diesem Test war der Abstand vom Sensor zum Gateway aber auch im Bereich von 5 Metern.
Optimierungen
Als Spreading Factor ist 9 eingestellt. Um die Reichweite zu erhöhen, kann man auch zB. SF12 einstellen. Das geht im Arduino Sketch auf Zeile 90:
// Set data rate and transmit power for uplink (note: txpow seems to be ignored by the library)
LMIC_setDrTxpow(DR_SF9, 14);
Falls man die Pakete weniger oft übertragen möchte (alle 20 Sekunden ist zum Testen super, aber dauerhaft verbraucht es zu viel Airtime), kann das in Zeile 39 anpassen:
// Schedule TX every this many seconds (might become longer due to duty
// cycle limitations).
const unsigned TX_INTERVAL = 20;
An den vielen anderen Beiträgen zum Thema Ubiquiti Unifi könnt ihr erkennen, dass ich diesem System bereits an mehreren Standorten vertraue. Bisher hat sich die Wahl für Unifi für mich bewährt: das System ist einfach zu bedienen, stabil im Betrieb und bietet alle Features, die ich benötige. Vor kurzem (Dezember 2016) sind neue Produkte von Ubiquiti erschienen, die auch im Freien die aktuellen WLAN-Standards kostengünstig bieten.
Das bisherige Dilemma im Outdoor-Bereich
Für den Innenbereich habe ich bereits in anderen Beiträgen entsprechende Produkt vorgestellt. Allerdings gab es bisher keine sinnvoll erschwinglichen Outdoor Access Points, die auch 5 GHz mit 802.11ac abdecken. Das war bislang ein großes Manko. Entweder man nimmt den
oder man leistet sich den Unifi AP AC um mehr als € 300,-. Diese bietet zwar 802.11ac, unterstützt allerdings kein DFS, wodurch die Auswahl an Kanälen in Europa auf 4 reduziert ist.
Unifi Mesh
Zum Glück gibt es nun zwei neue Produkte, die diese Lücke schließen:
Beide sind für den Außeneinsatz gerüstet, unterstützen 2,4 GHz und 5 GHz inklusive 802.11ac und DFS. Und das zum erschwinglichen Preis (Stand Jänner 2017: knapp über € 120,- für den Unifi UAP AC Mesh und etwa € 200, für den Unifi UAP AC Mesh Pro).
UAP AC Mesh
Der Unifi UAP AC Mesh hat das Potenzial, mein neues Standardgerät zu werden. Es ist auch für den Innenbereich fesch, bietet alle gängig benötigten Technologien und unterstützt die PoE Varianten “24V Passive PoE” und “802.3af Alternative A”, wodurch es im Privatbereich günstig eingesetzt, aber auch an bestehende Switches im Firmenbereich angeschlossen werden kann:
ein Gerät für indoor & outdoor
lässt sich mit vielen bestehenden PoE-Switches nutzen, da es zwei Standards für die PoE-Versorgung unterstützt:
802.3af (Alternative A; vmtl. auch an 802.3at nutzbar)
unterstützt beide WLAN Frequenzen: 2,4 GHz und 5 GHz
erfüllt mit 802.11ac und 2×2 MIMO die modernsten WLAN-Standards mit Geschwindigkeiten bis 867 MBit/s. Und ist kompatibel zu 802.11a/b/g/n/ac.
bindet sich in bestehende Unifi-Management-Umgebungen ein und bietet somit zentrale Konfiguration & Monitoring. Optional kann der AP selbstständig mit unabhängiger lokaler Konfiguration betrieben werden.
abnehmbare Antennen. Der APs enthält Montagevorrichtungen, um mit externen Antennen zB. für bestehende Sektor- oder Panelantennen betrieben zu werden.
VLANs und 802.1q. Für mich immer wichtig, mehrere Netze über VLANs zuführen zu können und als separate SSIDs auszusenden (4 SSIDs sind gleichzeitig je Frequenz je AP möglich, die beiden Frequenzen können für unterschiedliche SSID-Konfigurationen genutzt werden)
Außerdem kann der UAP AC Mesh an vorhandene Wandhalterungen oder Antenna mounts (zB. AirMax Antennen oder Unifi Sektor-Antennen) montiert werden (zB. für die Rocket-Serie).
UAP AC Mesh Pro
Was mir zum Unifi UAP AC Mesh Pro als erstes auffällt: er ist erheblich größer! 34,32×18,12 cm ergeben eine ziemlich eindrucksvolle Fläche, für eine Außenmontage auf einem Mast werde ich hier die Windlast speziell berücksichtigen.
Obwohl das Gerät wie eine Panelantenne aussieht, handelt es ich um einen Rundstrahler. Drei Antennen mit 8 dbi Gewinn sind verbaut, wodurch 3×3 MIMO möglich ist und nominal 5 GHz 802.11ac 1.300 MBit/s (1,3 GBit/s!), sowie für 2,4 GHz 450 Mbit/s möglich werden. Natürlich werden die Bandbreiten nur erreicht, wenn auch das Endgerät das Senden und Empfangen über 3 Antennen ermöglicht.
Hinsichtlich PoE wird beim Pro nur 802.3af unterstützt.
Erwähnenswert ist noch, dass der Pro über zwei Gigabit-Ethernet-Ports verfügt, wodurch es möglich ist, weitere Access Points “hinter” dem Unifi UAP Mesh Pro zu betreiben (Daisy Chain).
Mesh?
Ich finde den Namen “Mesh” etwas verfänglich: bei Mesh Network denke ich immer an Netztopologien ähnlich zu Funkfeuer. Also zu weit verteilten Netzen, wo WLAN-Systeme oder -Knoten mit mehreren anderen Systemen oder Knoten verbunden sind.
Für die hier beschriebenen Produkte finde ich das nicht ganz passend: Unifi Systeme können zwar über “Wireless Uplink” einen Access Point über einen anderen AP anbinden. Allerdings kann ein AP, der nur ohne Kabel verbunden ist, das Signal nicht an noch einen weiteren AP weiterreichen. (Update Februar 2017: siehe Kommentar von Harry unten, es ist bei den Mesh-Produkten möglich, auch mehrere Access Points untereinander über Wireless Uplink zu verbinden: https://help.ubnt.com/hc/en-us/articles/115002262328-UniFi-Feature-Guide-Wireless-Uplink).
Unpacking
Ich habe mich bemüht, recht zeitig nach Erscheinen der Produkte zwei Unifi UAP AC Mesh zu bestellen, da ich schon dringend ein paar Außenbereiche mit WLAN versorgen müsste, das aber bisher nur halbherzig gemacht habe, da ja die bisher verfügbaren Produkte nicht zufriedenstellend waren.
Ubiquiti hat scheinbar das Design des Zubehörs angepasst. Neu ist nämlich, dass das Netzteil und das Kabel weiß – wie der AP selbst – sind. Das Netzteil entspricht den Spezifikationen der bisherigen Produkte für 24V Gigabit passive PoE (0,5 A), ich finde abgesehen von Farbe (und der abgerundeten Form) keine technischen Unterschiede. Jedenfalls möchte ich darauf hinweisen, dass – obwohl ältere Netzteile funktionieren – darauf geachtet werden soll, dass Gigabit unterstützt wird. Schließlich ermöglicht der Access Point ja Bandbreiten, bei denen man nicht möchte, dass dann das Netzteil zum Flaschenhals wird.
Ansonst wirkt der Access Point robust, die beiden Antennen sind abschraubbar (RP-SMA-Anschlüsse). Es können also jederzeit externe Antennen angeschlossen werden. UAP AC Mesh können gemeinsam mit AirMax-Antennen oder -Sektor-Antennen genutzt werden, die bisher zB. für die Rocket-Produkte oder Outdoor+/Outdoor5 gedacht waren.
Eine Signal-LED auf der Seite des Access Points zeigt – wie auch bei anderen Unifi-Produkten üblich – den Status des Access Points:
Das Einbinden in den Unifi Controller funktioniert problemlos. Das Gerät wird sofort erkannt, ein Software-Upgrade wird angeboten und man kann es problemlos adoptieren. ich habe das richtige Profil zugewiesen und kurz darauf haben sich schon die ersten Clients verbunden. Fertig.
Das ging wirklich so schnell, dass ich dann noch versucht habe, den Unifi UAP AC Mesh über einen Wireless Uplink einzubinden. Auch hier hat alles klaglos funktioniert.
Die Signalstärken sind einwandfrei: auch mit zwei Wänden und einem Abstand von 25 Metern zum Access Point bekomme ich -65 dB angezeigt.
Fazit
Ich werde wohl vermehrt auf den Unifi UAP AC Mesh setzen, nachdem er universell in Gebäuden wie im Freien eingesetzt werden kann. Der Unifi UAP AC Mesh Pro bietet in Umgebungen mit vielen Clients aufgrund der zusätzlichen Antenne Vorteile, ich habe jedoch kaum Umgebungen, bei denen ich > 30 Geräte je AP versorgen muss.
Ich habe mit den mitgelieferten Antennen bei Access Points mit verschiedenen Herstellern sehr unterschiedliche (und oft schlechte) Erfahrungen gemacht.
Da zum Glück die meisten Hersteller RP-SMA-Anschlüsse verbauen, habe ich mir folgende Antennen in größerer Stückzahl zugelegt und tausche sie nun regelmäßig gegen die ursprünglich mitgelieferten. Auch im Outdoor-Bereich habe ich damit seit zwei Wintern keine Probleme gehabt, obwohl die Antennen nur für indoor designed sind:
2,4 GHz und 5 GHz 8 dbi RP SMA Antenne
Die Modellbezeichnung ist bei Amazon Huacom HCM82. Eigentlich habe ich die Antenne ursprünglich auf Aliexpress gefunden und getestet. Sie ist quasi baugleich mit dem Modell, das auf Amazon angeboten wird, mittlerweile ist sie auf Aliexpress sogar teurer.
Die Antenne ist für 2,4 GHz und 5 GHz WLAN geeignet und verfügt über ein Gelenk, über das sie 45° oder 90° “geknickt” werden kann.
Der Antennengewinn ist mit 8 dbi angegeben. Damit ist auch guter Empfang von weiter entfernten Stationen möglich.
Übrigens: in Österreich (ich glaube überall in der EU) ist die maximal zulässige Leistung als e.i.r.p. definiert. EIRP bedeutet, dass die Leistung des Geräts zum Antennengewinn addiert werden muss und dann einen gewissen Wert nicht überschreiten darf. Wenn man jetzt eine stärkere Antenne montiert, sollte man darüber nachdenken, die Leistungsstufe des Geräts zu reduzieren um im gesetzlichen Rahmen zu bleiben.
Auch ein Projekt, das ich schon lange umsetzen wollte: ich möchte eine USV installieren, um bei einem Stromausfall die Netzwerkverbindungen (Internet!) über Funkfeuer aufrecht zu halten. Es sollen
das Funkfeuer-Equipment am Dach,
mein Switch,
der Router
und ein Access Point
abgesichert werden.
Die Anforderungen an die Leistung sind also recht gering (jedenfalls weit unter 100W), daher dachte ich mir, dass eine günstigere USV ausreichen müsste.
Gleichzeitig habe ich nicht die Anforderung, dass ein Server oder NAS bei einem Stromausfall heruntergefahren werden muss. Es handelt sich rein um Netzwerkgeräte, die einfach abgeschaltet werden können sobald die Akkus leer sind und auch wieder zuverlässig starten sobald sie wieder Strom erhalten.
last but not least: sie kann über ein USB-Kabel überwacht werden und ist kompatibel zu gängigen Standards.
Inbetriebnahme
Die USV war rasch in Betrieb genommen. Es muss nur ein Kabel an die Batterie im Batteriefach angeschlossen werden und dann steckt man die USV an die Steckdose. Fertig!
Über zwei LEDs (grün und rot) signalisiert die USV den Zustand und mögliche Defekte.
Überwachung
Es wäre nicht meine Art, die USV einfach vor sich hinlaufen zu lassen und darauf zu hoffen, dass alles in Ordnung ist. Es müssen also eine Überwachung der Funktion sowie ein paar Statistiken her.
Die Daten kann man von der USV über USB abrufen. Server habe ich keinen in der Nähe, also habe ich mich entschieden einen Raspberry Pi der ersten Generation (der schon einige Monate ohne Auftrag herumkugelt) für diese Funktion einzusetzen.
apcupsd auf Raspberry Pi
Als Basissystem habe ich Debian Jessie in der Minimalinstallation (ohne grafischer Oberfläche) gewählt. Mittels
apt-get install apcupsd
ist der Daemon schnell installiert.
Zwei Konfigurationsdateien müssen dann noch angepasst werden:
Die hauptsächliche Konfiguration wird in der Datei /etc/apcupsd/apcupsd.conf vorgenommen. Ich habe nur folgende Zeilen angepasst:
UPSCABLE usb
UPSTYPE usb
DEVICE
Die Zeile “DEVICE” bleibt bewusst ohne weitere Angabe. Das ist beim USBTYPE “usb” so vorgesehen. Damit wird die USV automatisch erkannt.
In der Datei /etc/default/apcupsd muss ISCONFIGURED auf “yes” gesetzt werden, damit der Dienst (beim Booten) startet.
ISCONFIGURED=yes
Nach dem Aufruf von”service apcupsd start” startet der Daemon.
Mittels “apcaccess status” kann auch sofort der Status der USV abgerufen werden:
pi@upsberry:~ $ apcaccess status
APC : 001,035,0906
DATE : 2016-12-30 14:58:11 +0100
HOSTNAME : upsberry
VERSION : 3.14.12 (29 March 2014) debian
UPSNAME : upsberry
CABLE : USB Cable
DRIVER : USB UPS Driver
UPSMODE : Stand Alone
STARTTIME: 2016-12-30 10:53:17 +0100
MODEL : Back-UPS ES 700G
STATUS : ONLINE
LINEV : 228.0 Volts
LOADPCT : 0.0 Percent
BCHARGE : 100.0 Percent
TIMELEFT : 38.4 Minutes
MBATTCHG : 5 Percent
MINTIMEL : 3 Minutes
MAXTIME : 0 Seconds
SENSE : Medium
LOTRANS : 180.0 Volts
HITRANS : 266.0 Volts
ALARMDEL : 30 Seconds
BATTV : 13.5 Volts
LASTXFER : Unacceptable line voltage changes
NUMXFERS : 1
XONBATT : 2016-12-30 10:56:54 +0100
TONBATT : 0 Seconds
CUMONBATT: 53 Seconds
XOFFBATT : 2016-12-30 10:57:47 +0100
STATFLAG : 0x05000008
SERIALNO : 5B16xxx
BATTDATE : 2016-08-05
NOMINV : 230 Volts
NOMBATTV : 12.0 Volts
FIRMWARE : 871.O4 .I USB FW:O4
END APC : 2016-12-30 14:58:53 +0100
Alarmierung per Email
Wie beschrieben benötige ich keine weiteren Maßnahmen bei einem Stromausfall. Es muss also kein Server oder NAS runtergefahren werden. Ich möchte aber schon ein Email erhalten, das mir eine Statusänderung mitteilt.
In meinem Fall habe ich einen lokalen Mailserver installiert, der die Emails direkt zustellt (ohne Smarthost bzw. nicht über einen anderen SMTP-Server).
apt-get install sendmail
Um den Emailversand zu aktivieren, gehören zwei Zeilen in der /etc/apcupsd/apccontrol angepasst:
Nach dem Neustart des apcupsd habe ich die USV von der Stromversorgung getrennt und kurz darauf ein Email mit der Warnmeldung “UPS Power Failure!!!” erhalten.
Webinterface
Für die Anzeige von Statistiken am Webinterface gibt es vier CGIs:
multimon.cgi: hier wird übersichtlich der Status angezeigt. Das ist vor allem sinnvoll, wenn mehrere USVs von einem Daemon überwacht werden sollen:
upsstats.cgi: detaillierte Statistik zu einer USV (siehe Screenshot oben)
upsfstats.cgi: textbasierter Output, wie beim CLI Tool “apcaccess status” (siehe oben)
upsimage.cgi: hat bei mir nicht funktioniert
Installiert ist das Ganze recht einfach:
apt-get install apcupsd-cgi apache2
a2enmod cgi
Hiermit wird ein Apache Webserver installiert (falls nicht schon vorhanden) und die CGIs im Verzeichnis /usr/lib/cgi-bin/ hinterlegt. Über das a2enmod-Kommando wird CGI am Webserver aktiviert.
Ab sofort kann man mit dem Webbrowser die Statistiken zur USV abrufen. Da der Webserver nur vom internen LAN (nicht im Internet) erreichbar ist und auch auf dem Server keine weiteren Dienste laufen, habe ich mir die index.html im /var/www/html-Verzeichnis mit folgenden Einträgen überschrieben, um die CGIs gemütlich aufrufen zu können:
In einem früheren Beitrag habe ich bereits beschrieben, warum ich baulich für eine ordentliche WLAN-Versorgung in meiner Wohnung ein ordentliches WLAN-System möchte.
Ich habe mich ja damals für ein Unifi System von Ubiquiti entschieden und das nie bereut. Auch die Migration zur “neuen Generation” (Wave 2?) von Unifi AC Geräten (AC = sie unterstützen den aktuellen WLAN-Standard 802.11ac) hat problemlos funktioniert.
Nachtrag Jänner 2017: mittlerweile sind auch 802.11ac-fähgie Geräte im leistbaren Segment für Außeninstallationen erschienen, die ich in einem separaten Artikel vorstelle. Diese Geräte eigenen sich auch gut für den Innenbereich.
Hier möchte ich einen die Vor- & Nachteile der einzelnen Produkte diskutieren und meine Erfahrung im Einsatz beitragen.
Der AC Lite unterstützt beide Frequenzbänder (2,4 GHz und 5 GHz), natürlich den neuen 802.11ac-Standard (ist aber auch kompatibel zu älteren WLAN-Standards 802.11a/b/g/n/ac), liefert mit 2×2 MIMO im 5 GHz-Band bis zu 867 MBit/s zu den Clients und ist dank 24 V passive PoE mit meinem bestehenden System kompatibel. Im 2,4 GHz Band schafft er 300 MBit/s (802.11n).
Das Gerät ist preisgünstig und kann einerseits als eigenständiges Gerät betrieben werden (Konfiguration über Android App) oder wird in das Unifi-System integriert: damit wird der AP von einem Unifi Controller (zB. Ubiquiti Cloud Key, läuft aber auch zB. auf einem Raspberry oder über eine App im Synology NAS) zentral konfiguriert und gemonitored. Das Anlegen oder Ändern einer SSID in einer Umgebung mit vielen Access Points ist somit sehr bequem zu bewerkstelligen. Je AP und Frequenz werden übrigens 4 SSIDs unterstützt.
Dieser Access Point hat für mich das beste Preis-/Leistungsverhältnis. Er erfüllt alle meine Anforderungen. Ich habe damit auch bereits mehr als 30 WLAN-Geräte gleichzeitig erfolgreich bedient und bisher keine Kapazitätsgrenzen kennengelernt.
Auch beim Roaming mit anderen Unifi AC APs gibt es keine Probleme. Ich verwende dazu kein ZH (Zero Handoff, dabei unterstützen die Access Points den Roaming-Vorgang) und es geht trotzdem wunderbar. Ohne ZH kann jeder AP eine anderen Funkkanal nutzen und stört bzw. überlappt nicht mit den anderen APs.
Unifi UAP AC Pro
Der AC Pro Access Point ist dem LITE sehr ähnlich, unterstützt jedoch 3×3 MIMO, wodurch er 1.300 MBit/s (1,3 GBit/s!) zu den Endgeräten verspricht und wird durch PoE (802.3af oder 802.3at) versorgt. Eine Versorgung durch 24 V PoE ist nicht möglich.
Hinsichtlich Management unterstützt der AP Pro alle oben genannten Methoden.
Unifi UAP AC LR
Die Long Range-Version beinhaltet eine Antenne mit höherem Gewinn. Das ist ermöglicht in vielen Ländern eine höhere Reichweite beim Senden. Da in Österreich (und wie ich glaube in der ganzen EU) die Sendeleistung nach EIRP beschränkt ist, darf der AC LR bei korrekter Ländereinstellung bei uns nicht mit voller Leistung senden.
Die “bessere” Antenne wirkt aber auch empfangsseitig. Und das ist aus meiner Sicht die große Stärke dieses Modells. In schwierigen Umgebungen (zB. Gebäuden mit dicken Mauern) habe ich damit erheblich bessere Ergebnisse erzielt (Bandbreite und Stabilität). Ich bin teilweise ganz erstaunt gewesen, wie zuverlässig der AP LR über große Entfernungen in Gebäuden noch problemlos funktioniert hat.
Meine Erfahrungen mit diesen Geräten sind jeweils top. Sie funktionieren zuverlässig, haben höchste Kompatibilität (es hat nie Probleme gegeben, dass sich jemand nicht verbinden konnte) und das Management über den Unifi Controller, den ich unter Ubuntu Linux laufen habe, funktioniert super!
Näheres zu meiner Konfiguration mit dem Unifi Controller habe ich in einem älteren Beitrag beschrieben. Die Produkte dort sind mittlerweile veraltert, aber die Funktionen des Controllers sind weiterhin gültig.
Ich betreibe mit den Access Points einen Funkfeuer-Hotspot und sehe eigentlich jeden Tag einzelne User, die den Dienst nutzen. Für den Hotspot wird auch eine Landing Page vorgeschaltet und dann ein Redirect auf www.funkfeuer.at erzwungen. Alles funktioniert seit Monaten einwandfrei. (Das System schon über einem Jahr, aber die UAP ACs habe ich erst ein halbes Jahr damit im Einsatz).
Ich betreibe mehrere Standorte, die im Wiener Funkfeuer-Netz verteilt sind. Mich interessiert die Performance (vor allem die Bandbreite vom bzw. zum Internet), die ja abhängig von Tages- oder Jahreszeit schwanken kann.
Update Dezember 2016: das Tool speedtest-cli ist durch speedtest.py, das vom gleichen Entwickler geschrieben wurde und die gleichen Möglichkeiten bietet, abgelöst worden. Die Installation ist daher abweichend. Ich habe die neue Vorgehensweise in einem neuen Beitrag erklärt. Die hier beschriebenen Optionen und Möglichkeit haben jedoch weiterhin Gültigkeit.
Bisherwar ich recht erfolgreich mit Bandbreite iPerf. Dazu benötige ich aber zwei Geräte, zwischen denen dann die Bandbreite gemessen wird – das ist die richtige Methode, wenn man zB. eine Funk-Verbindung zwischen zwei Geräten messen möchte. Aber wenn ich die Internet-Performance messen möchte, muss ich zwei Geräte bedienen. Die Ergebnisse sind dafür belastbar, sind nachvollziehbar/plausibel und spiegeln die erlebte Performance wider.
Heute haben mir Freunde ein Messergebnis geschickt, das eindeutig über die CLI gemessen wurde. Dabei ist mir die Idee gekommen, auch meine EdgeRouter (und EdgePoints, also die Outdoor-Variante) damit auszurüsten und in Zukunft selbst gemütlich über die CLI testen zu können. Also hab’ ich mir das gleich angesehen:
Man benötigt nur das .py-Script, das recht einfach am EdgeRouter heruntergeladen werden kann. Damit es auch nach einem Update des Routers verfügbar bleibt, speichere ich es in /config/user-data:
(Weil wget im Standard-Image nicht installiert ist, verwende ich curl -o. Weil unzip nicht verfügbar ist, lade ich das .py-Script vom letzten master-Branch raw von github).
Danach markiere ich das Script als ausführbar:
chmod u+x /config/user-data/speedtest_cli.py
Und schon kann’s losgehen, ich starte einen Speedtest mittels:
/config/user-data/speedtest_cli.py
Das Ergebnis überzeugt mich:
Optionen
Es gibt noch ein paar erwähnenswerte Optionen zu dem Tool. Vor allem –simple könnte zB. für Scripts interessant sein:
–simple zeigt nur den Output an: Ping/RTT, Download- & Uploadraten.
/config/user-data/speedtest_cli.py --simple
ergibt:
Ping: 26.968 ms
Download: 38.36 Mbit/s
Upload: 27.19 Mbit/s
–share liefert eine URL zurück, bei der das Ergebnis grafisch dargestellt wird:
–server SERVER-ID nutzt den Zielserver mit der entsprechenden ID. Diese kann man in der Liste aller verfügbaren Server finden, welche mittels –list abgerufen wird
Nun möchte ich in der Status-Zeile ein paar Telemetriedaten übermitteln, die vom Raspberry ausgelesen werden. Konkret sind das:
Core Temperatur
Core Spannung
Core Spannung der SDRAM_p
Clock Speeds von Core und ARM
Dazu habe ich ein Script erstellt, das alle 5 Minuten über cron gestartet wird und die vollständige Status-Zeile in der Datei /tmp/aprs-telemetrie.txt hinterlegt. pymultimonaprs versendet dann den Inhalt dieser Datei als Statusmeldung.
Dieses Script (abgelegt als /home/pi/aprs-telemetrie.sh) liest die Werte aus und erstellt die Datei:
Der Raspberry und DVB-T-Stick sind in einem Outdoor-Gehäuse verbaut.
Mit diesem Setup möchte ich einen APRS iGate realisieren, also eine Konfiguration, mit der APRS-Pakete auf der europäischen APRS-Frequenz 144.800 MHz empfangen und dann weitergeleitet werden. Die Weiterleitung soll primär über HAMnet erfolgen und nur im Fehlerfall oder bei nicht-Verfügbarkeit meiner HAMnet-Anbindung direkt ans einen APRS-IS-Tier2-Server (vgl. http://www.aprs2.net/) ins Internet übertragen werden.
Da pymultimonaprs die Messages nicht selbst dekodiert, müssen wir noch multimon-ng installieren:
cd ~
sudo apt-get install cmake
git clone https://github.com/EliasOenal/multimon-ng.git cd multimon-ng mkdir build cd build cmake .. make sudo make install
Installation
Die iGate-Software pymultimonaprs installiere und hole ich von GIT:
cd ~
sudo apt-get install python2.7 python-pkg-resources
git clone https://github.com/asdil12/pymultimonaprs.git
cd pymultimonaprs
sudo python2 setup.py install
Ich habe für meinen Call OE1SCS den Suffix -10, auch SSID genannt, gewählt, der lt. APRS SSID-Erklärung für “internet, Igates, echolink, winlink, AVRS, APRN, etc” gedacht ist.
Im Eintrag “gateway” habe ich eine Liste an APRS-IS Gateways eingetragen. Die Liste wird bei jedem Neustart von pymultimonaprs vom ersten Eintrag neu abgearbeitet. Ich habe also die Gateways, die ich bevorzuge, an den Anfang geschrieben. Die meisten iGates besitzen sprechende DNS-Namen. Ich will jedoch nicht von einem funktionierenden DNS-Dienst abhängig sein, daher trage ich die IP-Adressen ein. Damit dort nicht nur kryptische HAMnet-IP-Adressen (beginnen mit 44.) stehen habe, habe ich in der gleichen Zeile den DNS-Namen zusätzlich hinterlegt, zB.: “aprs.oe2xzr.ampr.at:14580”, “44.143.40.90:14580”
Der Dienst versucht 120 Sekunden die APRS-iGates zu erreichen. Nach 120 Sekunden meldet er ein Timeout und probiert den nächsten iGate. Sollte das Netzwerk nicht verfügbar sein oder der iGate-Server am eingestellten Port nicht antworten, wartet pymultimonaprs das Timeout nicht ab, sondern probiert unmittelbar den nächsten iGate in der Liste.
Hier ein Beispiel aus meinem Logfile:
Jan 2 10:53:42 roofpi pymultimonaprs: connecting... 44.225.42.181:14580
Jan 2 10:53:42 roofpi pymultimonaprs: Error when connecting to 44.225.42.181:14580: '[Errno 101] Network is unreachable'
Jan 2 10:53:51 roofpi pymultimonaprs: connecting... 78.47.75.201:14580
Jan 2 10:53:51 roofpi pymultimonaprs: connected
Jan 2 10:53:51 roofpi pymultimonaprs: # aprsc 2.0.18-ge7666c5
Jan 2 10:53:51 roofpi pymultimonaprs: login OE1SCS-10 (PyMultimonAPRS 1.2.0)
Jan 2 10:53:51 roofpi pymultimonaprs: # logresp OE1SCS-10 verified, server T2EISBERG
Jan 2 10:53:51 roofpi pymultimonaprs: sending: OE1SCS-10>APRS,TCPIP*:=4811.4 N/01623.2 E-RXonly APRS iGate
Jan 2 10:53:51 roofpi pymultimonaprs: sending: OE1SCS-10>APRS,TCPIP*:>Raspberry Pi mit RTL Stick
Mittels “append_callsign”: true, gebe ich an, dass mein Call in den APRS-Pfad bei der Weiterleitung ans iGates dazugefügt werden soll.
im Abschnitt “rtl” wähle ich die Frequenz 144.800 MHz als europäische APRS-QRG, gebe meine Ungenauigkeit des Sticks (26 ppm) an, die ich vorher gemessen habe und wähle einen Gain von 46. Offset-Tuning lasse ich unbenutzt und da ich nur einen DVB-T-Stick am Raspberry habe, lasse ich den device-index bei 0.
im Abschnitt “beacon” konfiguriere ich die eigene, regelmäßige, Aussendung meiner “Station”:
Ich wähle einen statischen Text für “comment” und “status“, außerdem übertrage ich im Moment keine Wetter-Informationen. Ich möchte, dass meine Aussendung alle 30 Minuten übertragen wird (30 Minuten * 60 Sekunden = 1800 Sekunden).
Um meine Positionen nicht 100%ig genau im APRS darzustellen, habe ich die “ambiguity” auf “1” gesetzt. Das verringert die Genauigkeit meiner GPS-Position um 1/10 Grad-Minute. Dadurch wird meine APRS-Position auf aprs.fi mit dem Hinweis “Position ambiguous: Precision reduced at transmitter by 1 digits, position resolution approximately 185.2 m.” zB. so dargestellt:
Damit wäre alles konfiguriert und über das Kommando
/etc/init.d/pymultimonaprs start
habe ich den Dienst gestartet.
Die Funktion kann man über das Logfile /var/log/syslog rasch prüfen. Unmittelbar nach dem ersten Start war meine Station auf aprs.fi sichtbar: http://aprs.fi/info/a/OE1SCS-10
Erfahrungen, Tipps & Tricks
Zuverlässigkeit des USB-Sticks
Ich habe den Dienst einige Tage laufen gelassen. Nach zirka zwei Tagen habe ich folgende Fehlermeldung im Logfile gehabt. Auch über “dmesg” war das Problem sichtbar:
Dec 30 21:23:34 roofpi kernel: [ 2139.021653] usb 1-1.3: usbfs: usb_submit_urb returned -121
Dec 30 21:23:34 roofpi kernel: [ 2139.022123] usb 1-1.3: usbfs: usb_submit_urb returned -121
Dec 30 21:23:34 roofpi kernel: [ 2139.022580] usb 1-1.3: usbfs: usb_submit_urb returned -121
Dec 30 21:23:34 roofpi kernel: [ 2139.023041] usb 1-1.3: usbfs: usb_submit_urb returned -121
Dec 30 21:23:34 roofpi kernel: [ 2139.023968] usb 1-1.3: USB disconnect, device number 4
Dec 30 21:23:34 roofpi kernel: [ 2139.260292] usb 1-1.3: new high-speed USB device number 6 using dwc_otg
Dec 30 21:23:34 roofpi kernel: [ 2139.372309] usb 1-1.3: New USB device found, idVendor=0bda, idProduct=2832
Dec 30 21:23:34 roofpi kernel: [ 2139.372335] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Dec 30 21:23:34 roofpi kernel: [ 2139.372353] usb 1-1.3: Product: RTL2832U
Dec 30 21:23:34 roofpi kernel: [ 2139.372369] usb 1-1.3: Manufacturer: Generic
Dec 30 21:23:34 roofpi kernel: [ 2139.372386] usb 1-1.3: SerialNumber: 77771111153705700
Es hat sich also der USB-Stick verabschiedet “usb 1-1.3: USB disconnect, device number 4” und sofort wieder neu verbunden. Damit war natürlich ein Neustart des pymultimonaprs nötig, damit dieses wieder korrekt lauscht. Leider war es damit nicht getan und der Fehler ist wenige Minuten später wieder gekommen. Ich habe das ein paar Mal wiederholt und schon befürchtet, dass der Stick vielleicht kaputt ist. Ein Reboot hat die Situation aber entschärft und nun läuft der Stick wieder seit 2 Tagen stabil.
APRS-Meldungen der ISS
Mit einem einfachen Hack, der unter anderem hier beschrieben wird, soll es möglich sein, neben der primären APRS-Frequenz 144.800 MHz auch die APRS-Frequenz der Raumstation ISS zu empfangen. Diese sendet auf 145.825 MHz. Natürlich können diese Meldungen nur gehört werden, wenn sich die ISS in Reichweite befindet. Es gibt zahlreiche Webseiten im Internet, mit denen der Zeitpunkt der nächsten Überflüge der ISS am eigenen Standorts berechnet werden kann.
Leider hat sich dieser Hack bei mir nicht bewährt: mein Stick schafft es kaum noch APRS-Meldungen zu decoden, wenn er auf beide Frequenzen hört. Die Qualität nimmt rapide ab. Woran es genau liegt, kann ich schwer sagen. Ich habe aber die Vermutung, dass es am Squelch liegt, der bei dieser Konfiguration genutzt werden muss: das Programm rtl_fm, das dem Empfang der Pakete übernimmt, funktioniert ohne Squelch, sofern man nur auf einer QRG hört. Wenn man mehrere QRGs angibt (144.8, 145.825, …) muss ein Squelch-Wert angegeben werden. Ich habe zwar 1 als kleinsten möglichen Wert konfiguriert, vermute aber, dass der Squelch bei APRS-Paketen zu spät reagiert und daher viele Pakete nicht vollständig gehört werden. Sobald ich nur auf 144.8 ohne Squelch höre, empfange ich wieder viel mehr Pakete und alles scheint zu funktionieren.
pymultimonaprs kann auch Wetterdaten mitsenden. Ich habe leider keine Wetterstation, möchte aber Telemetriedaten meines Raspberry Pi 2 übermitteln. Dazu kann man ein JSON-File erstellen, das diesem Format entspricht (Quelle: https://github.com/asdil12/pymultimonaprs/blob/master/README.md):
You can set weather to a json-file. eg: "weather": "/path/to/weather.json",
If you don’t want do send weather date, just leave it on false. This will be read in like the status-file and can look like that:
timestamp is seconds since epoch – must be included
wind
speed is in km/h
direction is in deg
gust is in km/h
temperature is in °C
rain
rainlast1h is in mm
rainlast24h is in mm
rainmidnight is in mm
humidity is in %
pressure is in hPa
The timestamp must be included – everything else is optional.
Meine Idee wäre, die Temperatur & Spannung des Raspberry Core zu übermitteln, die mittels des Kommandos “vcgencmd” ermittelt werden können. Details siehe hier: http://elinux.org/RPI_vcgencmd_usage
Ich müsste also ein JSON-File erstellen, in das ich
Für die Spannungen ist kein Feld in den Wetterdaten vorgesehen. Man könnte diese Daten also über die “status“-Aussendung übermitteln. Dazu ändert man im Konfig file (/etc/pymultimonaprs.json) im Bereich “status” folgendes:
SmartBeaconing ist eine gute Idee: statt per APRS seine Position alle x Sekunden auszusenden und damit das APRS-Netz unnötig zu belasten, wird die Position nur gesendet, sobald es das System “smart” findet: bei Richtungsänderungen, wesentlichen Geschwindigkeitsänderungen, etc.
Das entlastet das Netz hinsichtlich der Anzahl an Meldungen, die direkt oder über Digipeating übertragen werden und erhöht die Wahrscheinlichkeit für andere Benutzer, dass Airtime für deren Aussendung frei ist.
Ich habe überall SmartBeaconing verwendet. Schließlich bin ich großteils im Stadtgebiet von Wien und in der näheren Umgebung unterwegs und dort ist die Dichte an APRS-Empfängern & -Digipeatern sehr hoch.
Leider hat sich SmartBeaconing für mich nicht bewährt: obwohl ich mit 5 Watt über eine externe Magnetfußantenne (Nagoya UT-106UV) vom Autodach aus sende, werden nur 30-40% meiner Meldungen aufgenommen. Und das reicht nicht, um die Strecke annähernd korrekt abzubilden. Vor allem, wenn eine Richtungsänderung nur alle 1-2 Minuten passiert, hinterlasse ich nur alle 5 Minuten einen Punkt auf der Map bei dieser schlechten Erfolgsquote der Übertragung.
Ich habe daher SmartBeaconing deaktiviert und sende im Moment stur alle 30 Sekunden. Damit bekomme ich ausreichend Übertragungen zusammen, um die Route gut abzubilden. Gleichzeitig ist mir bewusst, dass dadurch das Netz stärker belastet wird. Da ich aber nicht viel mit dem Auto unterwegs bin, denke ich, dass es zumutbar ist
Diese Website verwendet Cookies, damit wir dir die bestmögliche Benutzererfahrung bieten können. Cookie-Informationen werden in deinem Browser gespeichert und führen Funktionen aus, wie das Wiedererkennen von dir, wenn du auf unsere Website zurückkehrst, und hilft unserem Team zu verstehen, welche Abschnitte der Website für dich am interessantesten und nützlichsten sind.