Getagged: Software

AllIP (Sip/VoIP) Internet Radio und Wählscheibentelefon mit Impulswahl (Raspberry Pi, FritzBox, python, linphone, …)

The old Raspberry pi Rotorary Phone Player Picture

The old Raspberry pi Rotary Phone Player (RaRoPhoPl)
W 38/48 Fa. Siemens + Halske

Die Deutsche Telekom stellt immer mehr Anschlüsse auf AllIP um, während andere Anbieter schon länger nur über einen Router zu nutzen sind.
Was in den Medien untergeht und dabei oft nicht mitgeteilt wird ist, dass alte Telefone mit Wählscheibe an diesen Anschlüssen (bzw. Routern) oft nicht (mehr) funktionieren. Auch die „FritzBox“ von AVM ist zwar ein Meister als Telefonanlage mit verschiedenen Endgeräten und Internet-Telefonie, kann aber (offiziell) mit ihren aktuellen Modellen nichts mit Wählscheibentelefonen anfangen (trotzdem versuchen?). Eine Lösung wäre z.B. ein spezieller Wandler (IWF/MFV- Konverter) für ca. 50,- Euro oder der „Telekom TA 2 a/b“… Doch – in unserem Fall – ist das alte Telefon mit seiner Wählscheibe ein ideales Bastelprojekt auf Basis eines Raspberry Pi 2 das nicht nur wesentlich flexibler und vielseitiger verwendbar ist, sondern auch mit unzähligen zusätzlichen Funktionen ausgestattet werden kann.

Internet-Radio und SIP-VoIP-Telefon in einem alten Wählscheiben-Telefon

Bei dieser Gelegenheit nutzen wir gleich zwei Funktionen in einem Gerät:

  1. Als echtes SIP-VoIP-Telefon als Nebenstelle der Fritz!Box um u.a. Kurzwahlen und Billig-Vorwahlen nutzen zu können, aber auch einstellen zu können, bei welchen SIP-Anbietern das Wählscheibentelefon klingeln soll (z.B. um über iptel.org oder ekiga.net erreichbar zu sein).
  2. Wenn der Hörer aufgelegt ist: als einfaches Internet-Radio. So lässt sich direkt einer von neun (weltweiten) Sendern wählen. In unserem Fall z.B. BBC4 mit der „4“, ein indischer Sender mit der „5“ oder Ö3 mit der „3“. Die „0“ schaltet die Lautstärke zwischen zwei Stufen hin und her, bzw. fährt (nach dem 5ten mal) den Rasperry Pi geordnet runter. Also eine Art streaming-Weltempfänger für Webradio im nostalgischen Gewand. ;-)

Als Erweiterung ist bereits das „videophonieren“ bzw. eine Nutzung in Videokonferenzen angelegt, der Einsatz als Überwachungskamera/Alarmanlage getestet und eine Ansage der aktuellen Temperatur als einer der „Sender“ integriert. :-)

 

Grundlagen: Raspberry Pi 2 und andere Projekte

Anregungen und die für meine finale Lösung wichtigsten Tipps fand ich u.a. auf folgenden Seiten:

Rückblickend die passenden Hardware Anschaffungen:

  • Ein Wählscheibentelefon ;-) (Hier ein Wandtelefon W38/48 der Firma Siemens + Halske)
  • Raspberry Pi 2
  • passendes USB Netzgerät (stabilisiert und mind. 2 Ampere)
  • passende USB Soundkarte (hier: HEXIN Sound Audiocontroller)
  • passende Anschlusskabel für Mikrofon, externe Lautsprecher und Hörerlautsprecher
  • passende Steckkabel für die Steuerungspins und passende Quetschverbinder für die Kabel im Telefon
  • bzw. Lötkolben und Lötzinn ;-)
  • (Für Hardware Variante 2: 4x Widerstand 10KOhm)
  • … und (bei einem externen raspberry pi) evtl. längere abgeschirmte(!) Kabel wie z.B. zwei mal ein-adriges Kabel (einzeln abgeschirmt) für den Hörer und ein mindestens fünf-adriges für die Schalter + Ground

Alle Sicherheitserwägungen spielten erstmal keine Rolle, da es möglichst schnell gehen musste (Geburtstagsgeschenk), hinter einer Routerkaskade mit Firewalls sitzt und nun Schritt für Schritt angepasst werden kann. Jeder muss also wie immer selbst entscheiden wie viel Bequemlichkeit bzw. Sicherheit ihm wichtig ist und ob er das Risiko eingehen will. Ich selber klassifiziere das Projekt als unsicher! Wie immer: alles auf eigene Gefahr!

Auch alle weiteren Schritte / Hinweise sind nur für Leute, die Erfahrung haben und wissen was ihr Handeln für Konsequenzen haben kann…

 

Die Hardware: erhalten? stecken oder löten?

Da das Wählscheiben-Telefon an sich einwandfrei funktioniert, wollte ich es in seiner alten Technik erhalten und jederzeit rückbauen können. Zudem wollte ich ausprobieren ob ich das ganze auch als eine Art Mobiltelefon („Handy“) nutzen könnte (ja, auch hier waren erste Tests erfolgreich ;-) ). Ich habe so den Raspberry Pi zusätzlich in das Gehäuse gepackt. Grundsätzlich würde ich allerdings empfehlen ihn etwas luftiger und leichter erreichbar außerhalb des Gehäuses zu lagern und das Telefon über abgeschirmte Kabel eher als eine Art Fernsteuerung zu verwenden.

Ich habe mich grundsätzlich für Hardware-Variante 1 entschieden (siehe oben unter Fairytale Phone) und die Kabel entsprechend zusammengesteckt. Einzig den Erdungsknopf (unten rechts) wollte ich zusätzlich als Shutdown-button nutzen, was ich allerdings selbst bei Hardware-Variante 2 (mit Widerständen) wegen zu viel Störungen im Stromnetz und in der Luft (allein wenn sich der Kühlschrank einschaltet oder der Gasherd zündet) aufgeben musste. In der jetzigen Version kommt so bei der Betätigung des Knopfes nur ein kurzes Geräusch, es kann jedoch schnell wieder auf „system halt“ umgestellt werden (siehe Quellcode).

Inside picture of the old wall mounted rotary phone (W38/W48) with raspberry pi 2

Inside of the old wall mounted rotary phone (W38/W48)
Raspberry Pi 2

Auf Grund des engen Platzes musste ich die Mechanik der Wählscheibe schützen (hier mit Teilen einer alten CD) und sicherstellen, dass die SD-Karte beim schließen nicht abgebrochen wird. Auch mussten offene Kontakte isoliert werden, da diese evtl. zusammengedrückt oder sich zumindest zu nahe kommen oder anderweitig Kontakt herstellen könnten.

Zum Vergleich kann auch das nebenstehende Foto für eine große Version angeklickt werden.

Die im Raum verteilten externen Stereo-Lautsprecher sind über ein (Mini-)Stereoklinken-Kabel direkt an die USB-Soundkarte angeschlossen.

Auch das Mikrofon des Hörers steckt an der USB-Soundkarte. Dazu wurde die Abschirmung einer Stereoklinke an das Mikrofonkabel geführt, das außen an der Mikrofonkapsel anliegt und das innen an der Mikrofonkapsel anliegende Kabel an die beiden(!) Kontakte der Stereoklinke.

Der Lautsprecher des Hörers wurde auf gleiche Weise mit dem Audioausgang des Raspberrys verbunden.

Die Kabel der Wählscheibe („Nummernschalter“) hatten bei diesem Modell leider alle die gleiche Farbe. Zur besseren Orientierung habe ich sie mit farbigen Bändern entsprechend einem W48-Standtelefon gekennzeichnet.

Hier die ursprüngliche Belegung des Wandtelefons (W38/W48) und die daraus folgende Verkabelung:

Anschluss-Schema

Verkabelung

Oder als Schaltplan in der Hardware-Variante 2:

Wiring for RaRoPhoPl (GPI)

Wiring for RaRoPhoPl (GPI)

(Auch diese Bilder können vergrößert werden.)

Vor dem Einsetzen des Raspberry Pi habe ich offene Kontakte mit Isolierband abgeklebt und zusätzlich metallene Gegenstände mit Backpapier abgedeckt…

Die Status-LEDs wurden mit Glasfaserkabeln (aus einer Kindertaschenlampe) nach außen geführt, leider verdiente der „Sekundenkleber“ seinen Namen nicht – anhauchen half etwas…

Die original Klingeln sind (zur Zeit noch?) nicht in Betrieb (z.B. so? oder so?) – das Klingeln über die externen Lautsprecherboxen ist einfach zu bequem und praktisch…

 

Die Software: raspberry pi, python, linphone u.a.

An etlichen Stellen und bei etlichen Projekten wurde von linphone abgeraten und auch mich kostete die Umsetzung schließlich extrem viel Zeit (>80h) und Nerven. Ich wollte es allerdings gerne mit einem integrierten python-Programm versuchen und so kam linphone doch wieder ins Spiel. Weitere Schwierigkeiten entstanden nicht nur durch die Störungen im Stromnetz (oder wenn z.B. ein Feuerzeug in der Nähe zündet) sondern auch dadurch, dass sich störungsfrei nicht so viel in Funktionen auslagern lies, wie ich das gerne gehabt hätte. An etlichen Stellen musste ich so nicht nur Varianten einbauen um Hardwarefehler abzufangen, sondern auch Eigenheiten in der Nutzung von Raspberry-Pi-Python kompensieren. Der Versuch Python3 zu verwenden machte einiges noch komplizierter, so dass ich schließlich wieder bei Python2 landete und lieber teilweise auf „Spaghetti-Code“ umbaute…

Der Quellcode ist entsprechend unübersichtlich geworden und mit merkwürdigen Sonderaktion aus diversen Versuchen geziert. Zum Schluss lief aber alles weitgehend so wie es sollte und da blieb ich beim alten Grundsatz: never change a running system… ;-)

Hier die groben Schritte, für alle die bereits entsprechende Grundkenntnisse haben:

  1. Alles beginnt hier:
    https://www.raspberrypi.org/downloads/
  2. und mit der Installation:
    https://www.raspberrypi.org/documentation/installation/installing-images/linux.md
  3. Unter Linux nun in einem Terminal-Fenster (Console) eingeben:
    ssh raspberrypi

    (Benutzername: pi, Passwort: raspberry)
    [Update: In neueren Version muss der ssh-Zugang erst aktiviert werden…]

  4. dort:
    sudo raspi-config

    (evtl. noch „sudo passwd“ u.a.)

    sudo apt-get update
    sudo apt-get upgrade
  5. sudo apt-get install mpg123
  6. sudo apt-get install python-alsaaudio
  7. sudo nano /etc/modprobe.d/alsa-base.conf

    dort auskommentieren:

    # options snd-usb-audio index=-2

    und einfügen:

    options snd-usb-audio index=0
  8. sudo reboot
  9. alsamixer

    Headphones auf 98, Microphone auf 6 setzen, anschließend:

    sudo alsactl store
  10. https://wiki.linphone.org/wiki/index.php/Raspberrypi:start
  11. Autologin: in /etc/inittab folgende Zeilen geändert:
    sudo nano /etc/inittab

    Auskommentieren:

    # 1:2345:respawn:/sbin/getty 38400 tty1

    und hinzufügen:

    1:2345:respawn:/bin/login -f pi tty1 </dev/tty1 >/dev/tty1 2>&1
  12. Dateien aus (dem hoffentlich eines Tages erscheinenden – siehe unten! ;-) ) rarophopl.zip an die passenden Stellen kopieren, evtl.
    mkdir music

    u.a.

  13. nano .bashrc

    (zum Schluss „/PFAD/rarophopl.py &“ und evtl. Startmusik eintragen)

    /usr/bin/mpg123 -q /home/pi/music/0start.mp3 &
    /home/pi/rarophopl.py &
  14. chmod +x rarophopl.py

Zusätzlich muss noch die Fritz!Box um die IP-Telefon-Nebenstelle erweitert werden und die dort angegebenen Zugangsdaten in rarophopl.py (ziemlich am Schluss) eingetragen werden. Dabei können im Quellcode auch gleich Logfiles uvm. geändert werden.

Grundlagen von rarophopl.py finden sich bei den Links oben, der erste Quellcode bzw. ein 2015er-RaRoPhoPl-Software-Paket steht in der Version für Raspian vom Juni 2015 hier zur Verfügung…

 

Status, Temperatur und weitere Informationen als Webseite anzeigen

Zum Abschluss wollte ich noch kontrollieren können, wie es mit der Temperatur in diesem fast vollständig geschlossenen (und ja sehr vollen) Gerät aussieht und habe einen kleinen webserver installiert und eine kleine webpage mit den wichtigsten Daten gestaltet:

  1. Lighttpd installieren und konfigurieren
  2. Die dem RaRoPhoPl-Software-Paket (s.o.) beiliegende html-Seite im www-Verzeichnis als index.php ins passende Verzeichnis kopieren…

(Hier sind wohl die größten Sicherheitsprobleme… ;-) )

 

War etwas nützliches dabei? Ich freue mich über Spenden… ;-)

 

P.S. Einen kleinen Sicherheitsgewinn bringt:

  • Das PI-Benutzerpasswort in ein sehr komplexes zu ändern,
  • das Telefon nur hinter der FritzBox / Firewall zu betreiben (keine Ports weiterleiten) und
  • das VoIP-Telefon nicht bei einem VoIP-Anbieter direkt anzumelden, sondern eben als Fritz!Box-Nebenstelle (was auch für die Kurzwahl-Nummern bzw. Nutzung des Telefonbuchs wirklich sehr praktisch ist). :-)

P.S.2: Früher hieß die Wähleinheit wohl „Nummernschalter“ und das dazugehörige Bedienteil „Fingerlochscheibe“… ;-)

Kostenlose Android Apps und ein paar Sicherheits-Erwägungen

Schon bei der Einrichtung des Smartphones kann eine App einen Datenschutzgewinn darstellen, wenn z.B. nicht gewünscht ist, dass alle Kontakte automatisch bei Google landen. In dem Fall kann es sinnvoll sein eine App zu installieren mit der ein lokales Konto eingerichtet werden kann, bevor(!) die Kontakte angelegt werden, um gezielt diese im lokalen statt dem Google-Konto zu speichern. Ich nutzte (siehe P.S.) 9/2017 für mein Motorola Moto Z Play z.B. diese App indem ich nach der Installation unter Einstellungen Konten > Konto hinzufügen > MyLocalAccount hinzufügte und anschließend in der Kontakte-App dieses Konto als „Standardkonto für neue Kontakte“ gewählt habe. Zusätzlich habe ich in den Konteneinstellungen gleich die automatische Synchronisierung abgestellt.

In vielen Fällen sind Apps nicht kostenlos – auch wenn diese so angepriesen werden, sondern mit Werbenetzwerken und persönlichen Daten zu bezahlen. Gerade die Werbenetzwerke bieten ein potentielles Sicherheitsrisiko bezüglich Viren/Trojaner. Dabei braucht eine einfache Taschenlampen App keinen Internetzugriff und bei einer alternativen Tastatur wäre es für mich sogar ein KO-Kriterium.

Google bietet im PlayStore leider keine Möglichkeit vorher zu erkennen, ob (und welche) Werbenetzwerke integriert sind (s.u.), ob die Software OpenSource ist oder welche „Spionage“ durch die App tatsächlich zur Anwendung kommt. Gerade der „Netzwerkzugriff“ wird mittlerweile nahezu versteckt und zwar meist im PlayStore unter „Berechtigungen > Sonstige“ aber nicht unbedingt bei der Installation angezeigt. Auch wenn damit zumindest die Liste der „Berechtigungen“ (über den Link fast am Ende der Seite, nicht die Liste die bei der Installation erscheint) im PlayStore einen Hinweis gibt, betont Google leider, dass mit jedem Update ohne Vorwarnung zusätzlich neue hinzu kommen können – also z.B. die Tastatur-App plötzlich alle Eingaben im Internet ausplaudern darf. Außerdem bleibt erst mal völlig im Dunkeln wie diese Rechte tatsächlich eingesetzt werden. Darüber hinaus gibt es Apps bei denen auf den ersten Blick keine Werbung angekündigt oder erkennbar ist, die aber trotzdem nicht ohne Werbe- bzw. Analysenetzwerk sind (wie z.B. Firefox, der dafür in den Einstellungen Optionen bietet) …

Auf der anderen Seite gibt es auch Apps, die in der Beschreibung Werbung ankündigen, bei denen aber trotzdem kein Werbenetzwerk aufzuspüren ist (wie z.B. eine App für Erinnerungen an verpasste Anrufe und Nachrichten – z.B. für Google Hangouts, Skype, WhatsApp, … – in der folgenden Liste der ausgewählten AndroidApps).

Eine praktische Auswahl an Android Apps/Software die (weitgehend) werbefrei und bei der ersten Installation (meist) nicht all zu viele unnötige Rechte verlangt(en) findet sich hier.

Leider zeigt die Situation mit den Apps den Spagat zwischen verschiedenen Sicherheitsbegriffen. Grundsätzlich sind Updates wichtig um Fehler bzw. Sicherheitslücken zu beseitigen und damit diese Art der Sicherheit zu erhöhen. Auf der anderen Seite besteht die Gefahr, dass ein Update z.B. zu neuen Werbenetzwerken oder Zugriffen und damit zu erweiterten Funktionen zum Angriff auf die eigene Privatsphäre oder sogar zu mehr potentiellen Sicherheitsproblemen führt… Es kann daher nicht schaden, vor einem Update noch einmal im PlayStore die Berechtigungen zu prüfen. Wem das zu mühsam ist, kann z.B. die Updates auf die Anwendungen beschränken die bereits das Recht auf „Netzwerkzugriff“ haben bzw. mit Daten aus dem Internet arbeiten, also z.B. Webbrowser, Office oder Medienspieler wie VLC und dann diese Updates selbst unverzüglich (an einem sicheren Netz = nicht im Hotel o.ä.) einspielen. Updates für die berühmte Taschenlampen-App oder eine Klavier-App sind hingegen wahrscheinlich eher unnötig.

ZDF App mit zwei Werbenetzwerken, ebenso die HP Printer App

ZDF App und HP Printer App jeweils mit zwei Werbenetzwerken

P.S. Die (selbst etwas umstrittene und mittlerweile mit einem Werbenetzwerk versehene) App SRT Privacy Inspector kann manch interessanten Hinweis auf die Rechte und Werbenetzwerke bereits installierter Apps geben. Ihre Tipps und plakativen Aussagen sind allerdings mit Vorsicht zu genießen. So ist die Installation von Apps aus anderen Quellen als dem Google PlayStore erstmal nicht empfehlenswert und sollte grundsätzlich auch nicht freigegeben werden. (Wenn es sich nicht vermeiden lässt, nicht vergessen nach der Installation die „Installation von Apps aus Fremdquellen“ wieder zu verbieten.)
Auch die App AppBrain Ad Detector liefert leider nur unzuverlässige Ergebnisse, so dass ich schließlich dem Addons Detector von denper den Vorzug gegeben habe. Trotzdem nutze ich folgendes Vorgehen:

(0. Gibt es ein ähnliches Angebot, das über Firefox mit NoScript-Plugin genutzt werden kann und eine Extra-App verzichtbar macht? – Auch Lesezeichen lassen sich als Icon auf dem Startbildschirm ablegen. – Ja? Dann verzichte ich lieber ganz auf eine extra App.)

  1. Im Google PlayStore Kommentare und die umfassendere Liste der Berechtigungsdetails (je nach PlayStore-Version evtl. ziemlich am Ende der Seite) überprüfen und dann direkt unter Android – nur an einem vertrauenswürdigen Netz – die App direkt über die (vertrauenswürdige) PlayStore-App installieren (aber nicht öffnen).
  2. Sofort jegliche Netzwerkverbindung ausschalten (WLAN aus, Flugmodus an).
  3. Vor dem ersten Start mit dem Addons Detector von denper (oder AppBrain Ad Detector oder evtl. der damals noch werbefreien Version 1.0.1 von SRT Privacy Inspector) besonders auf Werbenetzwerke, Analytik und die nötigen Rechte überprüfen.
  4. Evtl. zuerst (ab 6/Marshmallow) über die Android-Einstellungen > Apps & Benachrichtigungen > App-Info die Rechte einschränken.
  5. Evtl. über die Telefoneinstellungen > Apps die neue App wieder deinstallieren.
  6. Evtl. Netzwerkverbindung herstellen und im Play Store die App aus „meinen Apps“ wieder entfernen.

(… oder ein paar Betrachtungen zu WhatsApp)