Archiv der Kategorie: WLAN

Sichere SMS?

Ich werde oft gefragt, ob ich WhatsApp verwende. Das tu ich nicht, vor allem aus der Überlegung, dass WhatsApp ursprünglich keine zuverlässige Verschlüsselung bzw. Sicherheit geboten hat.

Mittlerweile hat sich die Situation geändert: WhatsApp wurde von Facebook übernommen und WhatsApp bietet nun Verschlüsselung an. Ein Umstieg ist für mich trotzdem kein Thema.

Bitte beachtet, dass ich in diesem Artikel meine persönliche Wahl beschreibe, die ich gerne als Empfehlung weitergebe. Ich habe damit schließlich gute Erfahrungen gemacht. Es gibt in diesem Themenkreis  auch andere Produkte und Lösungen, die eine Berechtigung haben. Ich möchte mit diesem Artikel keine Übersicht über die verfügbaren Lösungen schaffen, sondern meine konkrete Auswahl erklären und begründen.

Was sind also die Alternativen, für die ich mich entschieden habe?

Ich sehe zwei Lösungen die ich hier im Dunstkreis von Instant Messaging, SMS & text messages, Austausch von Video-, Foto-, Dokument-, Standortinformationen oder Kontaktdaten erwähnen würde.

Threema

Als viele User begonnen haben WhatsApp zu nutzen, war mir – wie oben erwähnt – die Verschlüsselung zu unsicher oder hat überhaupt gefehlt, wodurch ich auf Threema als Alternative aufmerksam wurde.

Threema umfasst die für mich wichtigen Funktionen und Eigenschaften. Es wurde einem Schweizer Unternehmen geschaffen, das von Anfang an auf Ende-zu-Ende-Verschlüsselung nach Industriestandards Wert gelegt hat. Eine genaue Beschreibung der Vorteile findet man naturgemäß auf der Webseite von Threema: https://threema.ch/de/

Signal / SecureText

SecureText konkurriert nicht automatisch mit WhatsApp oder Threema. Es ist eigentlich ein Ersatz für die SMS App am lokalen Smartphone. Eingehende SMS-Nachrichten können – entsprechende Konfiguration vorausgesetzt – von SecureText empfangen werden. Sie werden auch über SecureText beantwortet.

Der Clou dabei: wenn der/die Empfänger/in einer SMS auch SecureText installiert hat (das erkennt SecureText automatisch an der Handynummer), wird die Nachricht stark verschlüsselt über das Internet versendet und nicht als SMS. SecureText zeigt das über ein Symbol an (ein verschlossenes Schloss beim Sendeknopf weist auf eine sichere Übertragung über das Internet hin).

Was mir an SecureText gut gefällt ist, dass es ein schöner Ersatz für die Standard-SMS-App ist, keinen Zusatzaufwand produziert und dennoch

  1. Kosten spart (keine SMS-Kosten, wenn nicht nötig, sondern Versand über’s Internet – auch im Ausland interessant)
  2. im Hintergrund automatisch verschlüsselt – wenn es der/die Empfänger/in unterstützt.

SecureText wurde mittlerweile zu „Signal“ umbenannt und ist unter diesem Namen in den App Stores kostenfrei zu finden.

Gibt es auch Nachteile?

Durchaus. Wobei das teilweise auch auf WhatsApp und andere zutrifft.

Kosten

Es wurde schon oft diskutiert: sichere Apps dürfen etwas kosten. Oder umgekehrt gedacht: woran verdienen die Unternehmen, die kostenlose Apps verteilen? Da liegt immer der Verdacht nahe, dass es die Inhalte der User sind, die den Wert darstellen und kommerziell genutzt werden.

Diejenigen, die wirklich so leiwand sind, dass sie gute Produkte kostenfrei zur Verfügung stellen, sind meistens auch so leiwand, dass sie den Source Code zur Verfügung stellen. Und das hat wirklich einen Mehrwert, weil man dann die Sicherheit nachvollziehen kann.

Threema kostet aktuell CHF 2,00 (oder 0,0048 BTC, BitCoins)  auf der Homepage oder € 2,49 im Google Play Store. Bei iOS löhnt man € 2,99 im Apple App Store.

SecureText (heißt jetzt: Signal) ist kostenlos erhältlich.

Proprietär

WhatsApp-Benutzer können nur mit WhatsApp-Benutzern Nachrichten austauschen. Threema-Benutzer können nur mit Threema-Benutzern Nachrichten austauschen. Das ist weitreichend durch die Technologie vorgegeben.

Es zahlt sich also aus, mal im Freundeskreis zu fragen, welche Apps genutzt werden und ob eine Änderung zu Threema denkbar wäre. Die Antwort muss man dann mit den eigenen Sicherheitsbedenken abzuwägen.

Im Zweifelsfall kann man ja mehrere Messaging Apps installieren. Das ist aber nicht mein Weg.

kein Internet = keine Nachrichten

Das ist mir im Fall von Threema unangenehm aufgefallen. Da kann aber Threema eigentlich nichts dafür. Aus Sicht der Nutzbarkeit möchte ich trotzdem darauf hinweisen:

  1. Mein Handy (eigentlich: Smartphone) ist oft tagelang über das Firmen-VPN verbunden. Aus dem Firmen-VPN kann aber leider weder Threema noch SecureText verschlüsselte Nachrichten ins Internet senden oder von dort empfangen. Die Sicherheitssysteme des Unternehmens unterbinden das.
    Die Nachrichten „hängen“ also lange in meinem Handy rum, bis ich irgendwann zB. bei einem öffentlichen Hotspot mit direktem (ungefilterten) Internetzugang befinde. Und dann geht’s rund: plötzlich kommen zahlreiche Nachrichten  aus den letzten Stunden an und meine Nachrichten gehen erst jetzt raus.
    Wenn jemand mit dem Smartphone eh immer oder zumindest regelmäßig direkt mit dem Internet verbunden ist, hat er/sie das Problem aber wahrscheinlich nicht.
  2. Ich bin ja recht engagiert bei Internetprojekten tätig. Oft geht es darum, einen Internetzugang herzustellen (= den gibt es also noch nicht). Und wenn da ein Kollege am Dach ein Problem per Threema beschreibt, kann es sein, dass ich die Nachricht erst erhalte, sobald das Problem behoben ist und die Internetverbindung für uns beide wieder klappt. Das ist zwar auch eine Erkenntnis, war aber nicht hilfreich.
    In solchen Fällen ist eine klassische SMS immer noch gut. Man kann im SecureText das auch einstellen, dass man nun lieber eine SMS versenden möchte, als eine verschlüsselte Nachricht – auch wenn der/die Empfänger/in damit umgehen könnte.
  3. mir fallen da noch mehrere Beispiele ein: im fernen Ausland nutzt man üblicherweise keine permanente mobile Datenverbindung. Entsprechend kommen also auch dort die Nachrichten nicht sofort durch. SMS würden sofort ankommen und der Empfang auch keine – oder geringe? – Kosten verursachen.

Fazit: kein internet = keine Nachrichten. Das sollte einem bewusst sein.

Nachtrag / Update

Ich wurde von mehreren Seiten auf diesen Blogbeitrag angesprochen. Der wesentliche Input war, dass WhatsApp mittlerweile die Verschlüsselung von Signal übernommen hat. Im Gegenzug hat Google eine Alternative („Allo“) gelauncht, die zweifelhafter Weise nur bei Nutzung des Inkognito-Modus verschlüsselt.

2. Nachtrag (August 2016)

Mittlerweile hat Whatsapp angekündigt, weitere Nutzungsdaten und auch die Telefonnummern der User an Facebook weiterzureichen, um damit genauere Profile zu ermöglichen. Widerstand scheint zwecklos, es gibt jedoch die Möglichkeit, die Reichweite der Nutzung dieser Daten einzuschränken – ganz lässt sich die Weitergabe nicht verhindern.

Ich freue mich, dass seit der Ankündigung von WhatsApp/Facebook viele meiner Kommunikationspartner und Freunde zu den in diesem Beitrage beschriebenen Systemen gewechselt sind, die ich auch nutze.

APRS iGate über HAMnet mit pymultimonaprs

Seit kurzem habe ich bei mir im 3. Wiener Gemeindebezirk am Dach meines Wohnhauses (ca. 8. Stock) – unter anderem – folgendes Equipment installiert:

IMG_4834Der 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.

Voraussetzung

Als Voraussetzung sollte die RTL-SDR-Software und Treiber am Raspberry bereits installiert sein. Der Vorgang ist unter anderem hier beschrieben: http://thardes.de/raspberry-pi-als-sdr-server/

Weiters habe ich mittels GSM-Netz den Raspberry kalibriert und so die Ungenauigkeit meines Sticks festgestellt: 26 ppm. (vgl. ua. http://www.rtl-sdr.com/how-to-calibrate-rtl-sdr-using-kalibrate-rtl-on-linux/)

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 erstelle ein Startscript:

sudo cp pymultimonaprs.init /etc/init.d/pymultimonaprs
sudo chmod +x /etc/init.d/pymultimonaprs
sudo update-rc.d pymultimonaprs defaults

Um in das APRS-IS-Netzwerk Pakete zu übertragen, ist ein Passwort erforderlich, das sich aus dem Call ableitet und errechnet werden muss:

cd ~/pymultimonaprs
./keygen.py CALLSIGN
Key for CALLSIGN: 31983

Konfiguration

Nun passe ich die Konfigurationsdatei /etc/pymultimonaprs.json an. Fertig konfiguriert sieht sie so aus:

{
        "callsign": "OE1SCS-10",
        "passcode": "20123",
        "gateway": [
                "aprs.oe2xzr.ampr.at:14580", "44.143.40.90:14580",
                "aprs.oe1.ampr.at:14580", "44.143.10.90:14580",
                "aprs.oe6xrr.at.ampr.org:14580", "44.143.153.50:14580",
                "aprs.oe7xgr.ampr.at:14580", "44.143.168.68:14580",
                "44.225.41.232:14580",
                "44.225.42.181:14580",
                "euro.aprs2.net:14580"],
        "append_callsign": true,
        "source": "rtl",
        "rtl": {
                "freq": 144.800,
                "ppm": 26,
                "gain": 46,
                "offset_tuning": false,
                "device_index": 0
        },
        "alsa": {
                "device": "default"
        },
        "beacon": {
                "lat": 48.19060,
                "lng": 16.38670,
                "table": "/",
                "symbol": "-",
                "comment": "RXonly APRS iGate",
                "status": {
                        "text": "Raspberry Pi mit RTL Stick",
                        "file": false
                },
                "weather": false,
                "send_every": 1800,
                "ambiguity": 1
        }
}

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 gebe die eigenen GPS-Koordinaten an, wähle als Darstellungssymbol ein Haus, gemäß dieser Tabelle:
http://www.aprs-dl.de/?APRS_Detailwissen:SSID%2BSymbole
Ganz unten bei diesem Link kann man die Symboltabelle als PDF runterladen!

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:

aprs-ambiguous
meine Station wird bewusst mit einer Ungenauigkeit von ca. 185 Metern in dem violetten Feld angezeigt. Das Feld weist darauf hin, dass die Position nicht exakt ist.

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.

Ein anderer Benutzer hat ähnliches erlebt: „I was unable to scan both 144.39 and 145.825 and decode the packets reliably.“ (http://www.algissalys.com/amateur-radio/raspberry-pi-sdr-dongle-aprs-igate)

Wetter- & Telemetriedaten übertragen

(Edit: ich habe in einem separaten Artikel hier mittlerweile die Übertragung von Telemetriedaten beschrieben…)

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": 1366148418,
    "wind": {
        "speed": 10,
        "direction": 240,
        "gust": 200
    },
    "temperature": 18.5,
    "rain": {
        "rainlast1h": 10,
        "rainlast24h": 20,
        "rainmidnight": 15
    },
    "humidity": 20,
    "pressure": 1013.25
}
  • 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

  • den aktuellen UNIX-Timestamp angebe,
  • bei temperature die Ausgabe von „vcgencmd measure_temp“
pi@roofpi ~ $ vcgencmd measure_temp
temp=27.2'C

Damit übertrage ich zwar nicht die Daten des Wetters, sondern die Temperatur der CPU, aber ich kann das zum Testen mal so machen.

Es würde sich auch anbieten, andere Telemetriedaten mitzusenden, wie zB. die Spannungen der Elemente des Raspberry:

pi@roofpi ~ $ vcgencmd measure_volts core
volt=1.2000V
pi@roofpi ~ $ vcgencmd measure_volts sdram_c
volt=1.2000V
pi@roofpi ~ $ vcgencmd measure_volts sdram_i
volt=1.2000V
pi@roofpi ~ $ vcgencmd measure_volts sdram_p
volt=1.2250V

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:

"status": {
 "text": false,
 "file": "/tmp/aprs-status.txt"
 },

In die Datei /tmp/aprs-status.txt schreibt man nun eine Zeile, die man als Status aussenden will, beispielsweise:

Raspberry Pi mit RTL Stick core_temp=27.2'C core_volt=1.2000V sdram_c_volt=1.2000V sdram_i_volt=1.2000V sdram_p_volt=1.2250V

Ideen für weitere Werte, die man aussenden könnte:

  • uptime
  • clock-speeds von core, arm und anderen Modulen im Raspberry
  • uvm…

Ich habe mittlerweile die Übertragung der Telemetriedaten in einem eigenen Artikel beschrieben.

Unifi AP-AC-Pro: erste Eindrücke

Heute habe ich meinen ersten Unifi AP AC Pro erhalten. Eigentlich hat der Händler die Geräte – nach eigenen Angaben – erst ab Jänner 2016 lieferbar, aber ein einzelnes Gerät konnte er mir reservieren und schicken.


Update Dezember 2016: mittlerweile gibt es modernere Access Points, als ich in diesem Beitrag beschreibe. Ich habe dazu einen anderen Blogbeitrag verfasst und würde empfehlen, eher ein Produkt der moderneren UAP AC-Serie zu wählen, falls dieser Artikel zu einer Kaufentscheidung herangezogen wird.


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.


Optik und Montage

Optisch sieht das Gerät den anderen (runden) Unifi APs sehr ähnlich, als Unterschied fällt mir eigentlich nur das neue Ubiquti-Logo auf. Ich möchte einen Unifi AP LR ersetzen, die Montagehalterung ist die gleiche bzw. passt und so musste ich nur den alten von der Halterung herunterdrehen und den neuen AP reindrehen. Das klingt ein bißerl einfacher, als es tatsächlich ist: die Öffnung für den Schraubenzieher, mit dem der AP gehalten wird, hat mich ganz schön ins Schwitzen gebracht, aber es war zu schaffen.

Inbetriebnahme

Das Gerät hat sich sofort an meinem lokalen Unifi Controller angemeldet und problemlos adoptieren lassen und ich habe das WLAN-Profil für zu Hause ausgewählt.

Ich verwende die aktuelle Version 4.7.5 des Controllers. Der AP wurde mit SW Version 3.4.7.3231, die mit einem Klick auf „Upgrade“ rasch auf 3.4.7.3284 gehoben war.

Und schon haben sich die ersten Geräte über den neuen AP verbunden.

Neu: Konfiguration per Handy App

Ich habe es nicht selbst probiert, aber die neue Generation von Unifi APs können per Smartphone-App (derzeit nur Android App) konfiguriert werden und benötigen somit keinen Unifi-Controller bei der Inbetriebnahme!

erste Tests

windowsacViele Geräte verbinden sich lieber über 2,4 GHz und 802.11n-Standard. Nur einzelne Laptops und Smartphones nutzen den 802.11ac-Standard auf 5 GHz. Sie zeigen aber Übertragungsraten von mehr als 300 MBit/s an (im Bild sind es 780 MBit/s, also 2×2 MIMO mit 802.11ac bei 80 MHz Kanalbreite – das Maximum wäre 867 MBit/s). Meine Tests haben derzeit keine gesteigerte Bandbreite ergeben, aber ich möchte das in den nächsten Tagen noch genauer testen.

Was mir auffällt

Ein paar neue Features sieht man sofort im Unifi Controller:

  • unifi-rf-environmentRF environment

Damit scannt der Access Point die Umgebung (alle Clients verlieren derweil die Verbindung, es wird jedoch mit einer kurzen Warnung darauf hingewiesen) und zeigt die Belegung der Kanäle und deren Rauschen (Interference) an. Das finde ich sehr interessant, weil man so auch aus der Ferne einen möglichst idealen Kanal finden und konfigurieren kann.

  • unifi-5ghz-kanäle-acKanalauswahl

Bei 2,4 GHz bietet der AP die üblichen 13 WLAN Kanäle an.
Bei 5 GHz kann man jedoch nur aus Kanal 36, 40, 44 und 48 wählen. Der Grund liegt wohl darin, dass bei diesen Indoor-Kanälen kein DFS gefordert ist bzw. offenbar die APs derzeit DFS nicht unterstützen. Aufgrund meiner Ländereinstellung „Austria“ werden somit die anderen Kanäle ausgeblendet.

  • unifi-rf-env5ghzKanalbandbreite

Standardmäßig werden 40 MHz Kanalbandbreite genutzt. Man kann diese Einstellung auf 20 MHz reduzieren oder auf 80 MHz erweitern. Die Top-Geschwindigkeiten sind natürlich nur mit 80 MHz zu erzielen. Nachdem nur 4 Kanäle zur Verfügung stehen, kommt es hier leider zu Überschneidungen, sobald man 40 oder 80 MHz Kanalbandbreite einstellt.

Fazit

Das Gerät war superschnell installiert und in Betrieb genommen – vor allem, da ich es ja in meine bestehende Unifi-Umgebung integriert habe. Ich würde mir noch DFS-Unterstützung wünschen, damit auch alle, oder zumindest mehr als 4 Kanäle, zur Verfügung stehen.

Unifi Controller in fhem einbinden

Ich habe bereits über meine Unifi-Installation geschrieben, die sich weiterhin bewährt.

Mit großer Freude habe ich gelesen, dass seit 23. August 2015 auch ein Unifi-Modul für fhem verfügbar ist! (Das Changelog sagt: „added: 74_Unifi.pm for the Ubiquiti Networks (UBNT) – Unifi Controller“)

Das muss ich gleich probieren! Einen Unifi-Controller habe ich laufen, jetzt möchte ich diesen mit fhem verbinden und anhand der Clients im WLAN die Anwesenheitserkennung von fhem nutzen.

Mittlerweile habe ich den Unifi Controller in Version 4.6.6 bei mir laufen. Von Version 3 zu Version 4 hat sich einiges geändert, auch in der Unifi API. Es ist daher verständlich, dass man die Versionnummer angeben muss. Gleichzeitig ist es toll, dass das fhem-Modul sowohl Version 3 als auch Version 4 unterstützt.

Ich habe für den Unifi-Zugriff aus fhem einen eigenen User „fhem“ mit „Read Only“-Berechtigung im Unifi Controller angelegt.

Der Zugriff von fhem war mit einer Zeile erledigt:

define myunifi Unifi 192.168.1.9 443 fhem geheim 30 default 4

Der Syntax lautet gemäß Perl Modul:

define <name> Unifi <ip> <port> <username> <password> [<interval> [<siteID> [<version>]]]

In der Commandref stehen auch die Details zur Nutzung des Moduls.

Die Standardwerte dafür sind:

  • interval = 30 Sekunden
  • siteID = default
  • version = 4

Ich habe dennoch alles explizit angegeben. Damit hoffe ich, dass in zukünftigen Versionen keine Problem auftauchen (zB. sobald es Version 5 gibt, etc.).

fhemunifi-siteidZuerst habe ich den angezeigten Namen vom Unifi-Controller meiner Site als siteID anzugeben. Damit habe ich  keine Werte bekommen. Nach kurzer Suche habe ich die Fehlermeldung im Log gefunden:

myunifi (Unifi_GetClients_Receive) - Failed! - state:'error' - msg:'api.err.NoSiteContext' - This error indicates that the <siteID> in your definition is wrong. Try to modify your definition with <sideID> = default.

Folgender Hinweis hilft: in der URL des Controller sieht man, mit welcher siteID man verbunden ist, auch wenn diese einen anderen Namen trägt, der im Controller angezeigt wird:

Es hat dann sofort funktioniert: im „Unsorted“-Bereich habe ich nun das Objekt myunifi und alle verbundenen Endgeräte:fhemunifi1Die Daten, die fhem vom Unifi Controller bezieht sind umfangreich und ermöglichen viele Anwendungen, auch außerhalb der Presence-Funktion. Hier die Details zu einem Client:unifi2

====================================== 
_id = 558XXXXXXXXXXXXXb85ae047 
_is_guest_by_uap = false 
_last_seen_by_uap = 1441082804 
_uptime_by_uap = 33149 
ap_mac = 24:a4:XX:XX:XX:c3 
assoc_time = 1441043174 
authorized = true 
bssid = 2e:a4:XX:XX:XX:c3 
bytes-r = 3 
ccq = 991 
channel = 7 
essid = MeineSSID 
first_seen = 1435052270 
hostname = android-bfeXXXXXXXXX9f0f 
idletime = 24 
ip = 192.168.XXX.103 
is_guest = false 
is_wired = false 
last_seen = 1441082804 
latest_assoc_time = 1441049655 
mac = 60:af:XX:XX:XX:e5 
name = Stefan Samsung XXXX
noise = -94 
note = 
noted = false 
oui = SamsungE 
powersave_enabled = true 
qos_policy_applied = true 
radio = ng 
radio_proto = ng 
roam_count = 2 
rssi = 40 
rx_bytes = 1339759 
rx_bytes-r = 3 
rx_packets = 6309 
rx_rate = 6000 
signal = -54 
site_id = 53ecXXXXXXXXXXXXXXX91e2a 
tx_bytes = 1905377 
tx_bytes-r = 0 
tx_packets = 5576 
tx_power = 30 
tx_rate = 72222 
uptime = 39630 
user_id = 55892XXXXXXXXXXXXX5ae047 
usergroup_id = 
======================================

neue & weitere Funktionen

Das Modul für Unifi ist neu im fhem. Es wird laufend weiterentwickelt, so wurde letzte Nacht wieder um Funktionen erweitert, zB:

  • einen Client disconnecten,
  • einen Access Point restarten
  • die „Locate“-Funktion eines APs ein- & ausschalten (blinken)
  • Alarme am Controller archivieren

Am besten behält man das fhem Changelog im Auge. Dort werden Änderungen & Erweiterungen protokolliert.

Strom messen mit FHEM und Edimax 2101W

Ich wollte immer schon wissen, wieviel Energie die Geräte im Haushalt verbrauchen. Waschmaschine, Kaffeemaschine beim Aufheizen, Computer, SAT Receiver, meine Funkfeuer-Installation am Dach, etc… Anwendungsbereiche hätte ich viele.

Ein Energiemessgerät mit Anzeige oder Logger auf SD-Karte hat meine Ansprüche nicht ganz zufriedengestellt. Natürlich möchte ich die Daten automatisch und zeitnah auslesen und darstellen.

Toll, dass das nun möglich ist und dass es sich in FHEM, meiner zentralen Software für die Hausautomatisierung, einbinden lässt.

Einrichtung

edimax2101wHeute Früh hat die Post meinen Edimax 2101W, gekauft um knapp weniger als € 50,-, zugestellt. Es handelt sich dabei um einen Zwischenstecker für Steckdosen, der per WLAN verbunden ist und über eine Android-App geschaltet (ein/aus), konfiguriert (Zeitschaltfunktionen, WLAN-Zugangsdaten) und ausgelesen (Energieverbrauch) werden kann.

Das Gerät sendet nach dem Anstecken an einer Steckdose eine SSID als Master (Access Point) aus. Ich verbinde mich mit meinem Android Tablet zu dieser offenen SSID, starte die EdiMax-App und konfiguriere die SSID und das Kennwort für mein WLAN, damit der Edimax 2101W sich nach einem Reboot in mein Hausnetz integriert. Meinem DHCP-Server am Router habe ich eine feste IP-Adresse für die MAC-Adresse des Edimax Gerätes eingestellt, damit sich diese nicht ändert und ich per Hausautomatisierung das Gerät abfragen kann.

Einbindung FHEM

In FHEM gibt es seit ein paar Wochen ein fertiges Modul für die Einbindung des Edimax 2101W. Es ist nicht mehr zu tun, als das Gerät mit einem einzeiligen Kommando einzubinden:

define SmartPlugCpower EDIPLUG 192.168.1.23

FHEM nimmt nun für die Authentifizierung die  Standardwerte admin/1234 an und liest sofort alle Daten aus:

fhem-edi-examplelines

Für die Verbesserung der Darstellung (va. am Floorplan) habe ich noch folgende Zeilen konfiguriert:

define SmartPlugCpower EDIPLUG 192.168.1.23
attr SmartPlugCpower eventMap on:an off:aus
attr SmartPlugCpower interval 60
attr SmartPlugCpower model SP2101W
attr SmartPlugCpower password 1234
attr SmartPlugCpower room Wohnzimmer
attr SmartPlugCpower user admin

Natürlich möchte ich die Werte in einer Datei loggen und auch als SVG zeichnen. Danke an’s FHEM Forum für die wichtigen Hinweise zu diesem Thema:

define FileLog_SmartPlugCpower FileLog ./log/SmartPlugCpower_01-%Y-%m.log SmartPlugCpower

define SVG_SmartPlugCpower SVG FileLog_SmartPlugCpower:SVG_FileLog_SmartPlugCpower:CURRENT
attr SVG_SmartPlugCpower room Wohnzimmer

define SVG_FileLog_SmartPlugCpower_Monat SVG FileLog_SmartPlugCpower:SVG_FileLog_SmartPlugCpower_Monat:CURRENT
attr SVG_FileLog_SmartPlugCpower_Monat room Wohnzimmer

fhem-edi-gplot

Die Liste der Anpassungen:

  • Y-Axis label left entfernt
  • Y-Axis label right auf „Watt“ geändert
  • im Diagramm die Sources der ersten Zeile auf „Verbrauch Watt“ geändert
  • statt der standardmäßigen Regex auf SmartPlugCpower.power_now geändert, weil das der Wert ist, den ich sehen will.

Durch Klicken auf „Write .gplot file“ wird die Einstellung aktiviert und eine Grafik erstellt.

Für die Monatsgrafik habe ich die gleichen Zeilen angepasst, die Einheit ist allerdings „kWh“:

fhem-edi-gplot-kwh

Ich mach‘ mir mal einen Kaffee

Ich hab‘ also einmal die Nespresso Kaffeemaschine angeschlossen und mir zwei Espressi gemacht:

fhem-ediplug-kaffeemaschine

Nach dem Einschalten beim Aufzeihen der Maschine werden kurz immerhin 1.200 Watt benötigt:

2015-07-16_06:49:43 SmartPlugCpower ON / 1201.70 W / 5.3106 A

Auch zwischendurch heizt die Maschine immer wieder kurz nach und hat in 1,5 Stunden (aufzeihen, zwei Espressi + 1,5h Leerlauf, danach abgeschaltet) immerhin 0,031 kWh verbraucht.

Erfahrungsbericht Ubiquiti Unifi

Unsere Wohnung ist ja gar nicht so groß. Aber da wir zwei Wohnungen verbunden haben, ist der Wohnbereich so großzügig verteilt, dass ein Access Point nicht zuverlässig alle Zimmer versorgen kann.

Ich habe also am Anfang einen zweiten Access Point aufgestellt und gehofft, dass ich es in der ganzen Wohnung ins Internet schaffe. Das hat auch soweit funktioniert. Leider fangen die Probleme an, wenn man sich in der Wohnung bewegt und den Bereich des derzeit aktiven APs verlässt. WLAN hat nämlich die Eigenschaft, dass es so lange eine Verbindung zum bestehenden AP hält, bis diese wirklich unbrauchbar wird. Erst dann ermitteln die Endgeräte den stärksten AP neu und verbinden sich dorthin. Auch bei gleicher SSID hat der Übergang nicht besser funktioniert.

Damit klappt zwar üblicherweise das Surfen im Internet, aber ein VoIP-Call bricht beim Herumwandern in der Wohnung ab.

Controller

Aus dem Firmenumfeld kenne ich WLAN-Lösungen, die zentrale Server (= Controller) einsetzen, um alle Access Points inkl. der verbundenen Clients zu verwalten und die Verbindung von Netzwerkseite her optimieren, wenn ein Client einen besseren Access Point nutzen sollte.


Update Dezember 2016: mittlerweile gibt es modernere Access Points, als ich in diesem Beitrag beschreibe. Ich habe dazu einen anderen Blogbeitrag verfasst und würde empfehlen, eher ein Produkt der moderneren UAP AC-Serie zu wählen, falls dieser Artikel zu einer Kaufentscheidung herangezogen wird.


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.


Bei der Suche nach einer Lösung für meine Wohnung bin ich auf die Unifi-Produktreihe von Ubiquiti gestoßen. Ubiquiti ist mir als günstiger aber zuverlässiger Hersteller bereits aus meinen HAMnet– und Funkfeuer-Erlebnissen bekannt und meine bewährten Händler haben die Geräte zu guten Konditionen lieferbar.

Im Folgenden beschreibe ich das endgültige Setup, das sich eigentlich erst Schritt für Schritt (Gerät für Gerät) entwickelt hat.

Zero Handoff & Unifi Controller

Bei Unifi hat mich besonders die Zero-Handoff Funktion interessiert. Damit verspricht Unifi die oben beschriebene Funktionalität, die ich von Controllern kenne, auch ohne zentralen Controller! Klingt nach Zauberei, ist aber dadurch zu erklären, dass die Access Points permanent miteinander in Kontakt stehen und so jeweils eine aktuelle Sicht auf die gesamte WLAN-Umgebung und die verbundenen Geräte haben. Ein zentraler Controller ist somit nicht notwendig. Natürlich ist die Voraussetzung, dass die Access Points im selben Netzwerksegment platziert werden.

Das heißt: zum Einrichten der Lösung, muss man die Software vom zentralen Controller schon einmalig installieren (zB. am Laptop). Die SW ist für Linux (zB. auch als .deb-Paket), Windows und Apple-Produkte frei zum Download verfügbar: https://www.ubnt.com/download/.

Für den Betrieb der Lösung ist der Controller nicht erforderlich, außer man möchte etwas Ändern/Umkonfigurieren oder Statistiken sammeln (zum dauerhaften Sammeln muss der Controller auch permanent laufen).

Ich habe den Controller auf einer dedizierten Virtuellen Maschine auf meinem VMWare ESXi unter Ubuntu Linux LTS dauerhaft in Betrieb. Beim Einbinden der Paketquellen in Ubuntu gibt es drei Möglichkeiten:

  • stable: am weitesten verbreitet, nur stabile und bewährte Software- & Firmwarestände. Sicher die richtige Wahl für den produktiven Einsatz.
  • rapid: Software, die sich bereits länger als Beta bewährt hat, sich aber noch nicht für „stable“ eignet. Hier hat man einen guten Kompromiss zwischen neuen Funktionen und stabiler Software.
  • beta: Testversionen

Ich habe mich für „apt-get install unifi-rapid“-Variante entschieden und damit gute Erfahrungen gemacht.

Access Points

UAP LR an der Decke montiert
UAP LR an der Decke montiert

Nachdem ich eine preiswerte Lösung für die Wohnung gesucht habe, habe ich mich für die UAPs entschieden, die nur im 2,4 GHz-Bereich arbeiten. Das ist aus Performancesicht natürlich nicht ideal, weil der ganze 5 GHz-Bereich nicht abgedeckt ist, aber für uns vollkommen ausreichend, auch weil die nächstgrößere Variante mindestens das dreifache gekostet hätte.

Ich habe also folgende Geräte gekauft:

UAP einfach oben auf's Kastl gelegt
UAP einfach oben auf’s Kastl gelegt

Der UAP Access Point hat etwas mehr als € 50,- gekostet. Der LR schon 30% mehr. Das war übrigens keine gute Investition: gemäß regulatorischer Auflagen darf das WLAN-Equipment maximal 100 Milliwatt (mW) EIRP aussenden, das sind bekanntlich 20 dbm. Der UAP schafft max. 20 dbm und der UAP LR schafft 28 dbm. Das dürfte auch der wesentliche Unterschied für die „Long Range“-Angabe sein. Wenn man nun dem Controller mitteilt, dass sich diese Installation in Österreich befindet, lassen sich alle Geräte mit maximal 20 dbm konfigurieren. Das LR-Feature fällt somit flach. Daher: lieber einen UAP mehr kaufen als UAP LRs, bei denen man die Leistung sowieso nicht nutzen sollte.

Ubiquiti PicoStation zur Versorgung des Gartens
Ubiquiti PicoStation zur Versorgung des Gartens

Die PicoStation habe ich im Fenstersims außen montiert und funktioniert im ganzen Garten wunderbar. Leider haben meine Fenster eine Dämpfung von 15-20 db, wodurch das Gerät nur schlecht in der Wohnung erreichbar ist. Aber für indoor habe ich ja die UAPs.

Die Access Points kann man übrigens gar nicht direkt konfigurieren. Sobald man den Controller installiert hat, loggt man im Portal das erste Mal ein und findet im Menüpunkt „Access Points“ die Geräte, die der Controller über Broadcast/Multicast im lokalen Netzwerksegment gefunden hat. Diese kann man nun „adoptieren“, wie es bei Ubiquiti heißt.  Bei Bedarf werden die Access Points im Hintergrund automatisch auf die aktuelle Firmware aktualisiert. Die Firmware kommt übrigens mit der Controller-Software mit. Wenn man ein Update installiert, wird bei Bedarf auch automatisch angeboten, die Access Points zu aktualisieren.

Die PicoStation ist hier eine Ausnahme, weil sie eigentlich kein Unifi-Produkt ist, sondern aus der Ubiquiti-AirMax-Reihe stammt. Mit einem einfachen Update wird aus dem Gerät allerdings ein Unifi-Device, das dann vom Controller erkannt, eingebunden und künftig mit Updates versorgt wird.

Konfiguration

Im nächsten Schritt konfiguriert man ein Profil mit den gewünschten WLAN-Netzen (SSIDs) und weist das Profil dann einem oder mehreren Access Points zu. Bis zu 4 SSIDs kann ein Access Point bedienen.

Map in Unifi Controller mit den Access Points
Map in Unifi Controller mit den Access Points

Ich verwende zu Hause drei Netze, die über VLANs getrennt sind. Alle Access Points hängen an einem TPLink TL-SG3424. Mein internes Netz wird nativ an die Access Points übergeben. Das würde ich auch so empfehlen, damit das automatische Erkennen über den Controller funktioniert. Meine zwei anderen Netze werden als VLAN getaggt übergeben. Die Konfiguration ist somit:

  1. VLAN native mit meiner internen SSID und WPA2 zur Kommunikation mit meinem LAN und dem Internet,
  2. VLAN 44 als SSID „hamnet“ mit WPA2, per VLAN vom Internet getrennt, und
  3. VLAN 2 als SSID „guest“ als Gästenetz für direkten Internetzugang.

Ein Gästenetz zu haben ist mir sehr angenehm, weil in meinem internen Netzwerk mittlerweile so viele Dienste über DLNA (zum Sharen von Urlaubsfotos zu den Fernsehern, etc.) laufen und ich nicht will, dass jeder Besucher unkontrolliert in unseren Urlaubserinnerungen blättern kann. Über das Gästenetz wird einfach nur ein guter Internetzugang zur Verfügung gestellt. Außerdem verwende ich es als Testnetz, zB. wenn’s darum geht IPv6 im LAN zu aktivieren. Solche Funktionen bekommt als erstes das Gästenetz…

Für HAMnet ist es auch fein, eine eigene SSID zu nutzen. Ich bin da schon auf einige Probleme draufgekommen, die andere vielleicht nicht bemerken: die meisten Benutzer verbinden das HAMnet mit ihrem internen Router. Dadurch kann man sowohl ins HAMnet als auch ins Internet, ohne neu verbinden zu müssen. Dadurch funktioniert aber auch zB. die DNS-Auflösung über’s Internet, während man im HAMnet ist. In diesem Zusammenhang ist mir schon öfters aufgefallen, dass einzelne Seiten im HAMnet nicht ordentlich funktionieren oder Darstellungsprobleme haben, weil sie Teile des Contents aus dem Internet laden. Wenn man sich also nur im HAMnet, ohne Internetzugang bewegt, ist man meiner Ansicht nach erst wirklich sauber im HAMnet unterwegs.

Liste der aktuell verbundenen Benutzer im Unifi Controller
Liste der aktuell verbundenen Benutzer im Unifi Controller

Ich habe also das Profil mit den drei SSIDs, die jeweils auf VLANs abgebildet werden, per Software mit den Access Points verknüpft und 2 Minuten später waren die SSIDs verfügbar und die ersten Geräte haben sich verbunden! Voila! Fertig!

Kurz zwei Nachteile zu Zero-Handoff

Die Lösung funktioniert wunderbar und ich bin sehr glücklich, viele Vorteile einer controllerbasierten Lösung, vor allem Zero-Handoff, um wenig Geld auch zu Hause nutzen zu können. Zwei Nachteile möchte ich anmerken. Das sind keine groben Probleme, aber ich möchte es erwähnen:

  1. bei jeder Konfigurationsänderung ist immer der gesamte WLAN-Verbund (alle Access Points mit allen SSIDs) für 2-3 Minuten offline und die Endgeräte werden getrennt. Das ist notwendig, da ja ohne Controller alle Access Points ihre Konfigurationen und Stati gegenseitig austauschen müssen, bevor sie einen Zero-Handoff-Dienst anbieten können.
  2. nachdem das Zero-Handoff-Feature auf der Netzwerkseite passiert und das Endgerät gar nicht mitbekommt, dass es von einem Access Point zu einem anderen roamt, müssen alle APs den gleichen WLAN-Kanal nutzen. Damit ist natürlich ein Aufteilen auf mehrere Kanäle, wie es üblicherweise gemacht wird, nicht möglich. Das kann sich negativ auf den Datendurchsatz bzw. die Airtime auf diesem Kanal auswirken.