Kategorie: Linux

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“… ;-)

Advertisements

HP WLAN Drucker/Scanner und Touchscreen (P1510) unter (X)ubuntu/Linux

Fujitsu-Siemens Laptop Lifebook P1510 mit Touchscreen unter (X)ubuntu linux (=>LXQT)

Für meinen alten feinen Fujitsu-Siemens Laptop P1510 suche ich schon seit Jahren eine Lösung um ihn auf Linux umzustellen. Es scheiterte oft schon daran, die Installationsroutinen zu starten, bis ich schließlich mit einer alten Xubuntu 12.04 LTS CD (! – DVDs funktionierten nicht) eine Grundinstallation vor nehmen konnte und dann direkt per LAN-Kabel auf 14.04 LTS aktualisierte. Damit lief bereits das Wichtigste ohne zusätzlichen Aufwand.

Nur der (mir doch recht wichtige) Touchscreen lief nicht auf Anhieb und die diversen Suchtreffer (in Kombination mit P1510, z.B. hier) haben mich schon vor Jahren erschreckt und sind heute teilweise nicht mal mehr existent. Tatsächlich schlugen alle Versuche es mit den diversen alten Anleitungen zu probieren fehl. Aber schließlich fand ich nach vielen weiteren Suchen doch eine [damals] aktuelle, schnelle und damit erstaunlich einfache Lösung. Eingerichtet, kalibriert und noch schnell ein Skript für den Autostart geschrieben und schon gefällt mir der Laptop besser als jemals zuvor…

Update für Ubuntu 18.04 LTS

Mit dem Update auf Xubuntu 18.04.01 LTS startete leider lightdm nicht mehr nutzbar und auch mit anderen Varianten (z.B. des login-screens) war keine grafische Benutzeroberfläche mehr erreichbar. Da das Lifebook P1510 nicht vom USB-Stick booten kann und es mir auch nach vielen anderen Versuchen nicht gelang das Xubuntu (oder auch Lubuntu oder …) nach dem Update wieder zum laufen zu bringen nutzte ich die Möglichkeit einer kompletten Neu-Installation über den vorhandenen GRUB Bootmanager:

  • Dazu kopierte ich das aktuelle xubuntu.iso mit diesem Namen auf einen sonst leeren (fat32)-USB-Stick
  • startete bis zu GRUB und ging dort über die Eingabe von „c“ zur Grub Kommandozeile
  • ls“ gibt dort die zugreifbaren Partitionen aus (veraltetes Beispiel hier)
  • mit „ls (hdX,Y)/“ (mit X und Y passend ersetzt lässt sich das oberste Verzeichnis kontrollieren und damit der richtige Ort des xubuntu.iso finden)
  • sobald die passenden Werte gefunden waren (bei mir „(hd1,1)„) folgende Eingaben:
  • set isofile=“/xubuntu.iso“
  • loopback loop (hd1,1)$isofile
  • linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile noprompt noeject
  • initrd (loop)/casper/initrd.lz
  • boot

Damit startete vom USB-Stick die Installations-Ausprobier-Oberfläche (noch ohne Touch) und die Installation – über die alte Version – alle Daten gehen verloren – lief unproblematisch durch. Danach ging es also wieder an den Touchscreen (siehe oben), wobei das ehemalige „screen“ nicht funktionierte, allerdings auch nicht nötig war. Ich probierte einfach mit „sudo inputattach -fjt /dev/ttyS0“ die Zahlen hinten durch und hatte bei „sudo inputattach -fjt /dev/ttyS4“ Erfolg. Für die Kalibrierung half früher: „sudo apt-get install xinput-calibrator“ und „xinput_calibrator –output-type xinput“ – war unter Xubuntu 18.04 allerdings erstmal nicht erfolgreich. Anscheinend gab es wiedermal eine Umstellung (diesmal Evdev / libinput), so dass xinput_calibrator keine Auswirkungen mehr hat.
Diese Anleitung half – so mühsam sie auch ist – weiter (einfacher könnte das xcal python-tool sein).
Das Ergebnis der Rechnung bei mir:
xinput set-prop „Fujitsu Serial Touchscreen“ –type=float „libinput Calibration Matrix“ 1.040650407 0.0 -0.023373984 0.0 1.048951049 -0.027097902 0.0 0.0 1.0
…setzte ich in den xorg-Autostart – siehe unten.
Die Erkennung des Touchscreen verankerte ich analog zu diesem Tipp in systemd mittels:
sudo nano /etc/systemd/system/touchscreen.service“ mit dem Inhalt:

[Unit]
Description=Fujitsu Touchscreen

[Service]
ExecStart=/usr/bin/inputattach -fjt /dev/ttyS4

[Install]
WantedBy=multi-user.target

und anschließend: „systemctl enable touchscreen“ und „systemctl start touchscreen“ .
Dazu verankerte ich die Kalibrierung und Klick-Einstellungen in
usr/share/X11/xorg.conf.d/40-libinput.conf“ als:

Section "InputClass"
      Identifier "libinput touchscreen catchall"
      MatchIsTouchscreen "on"
      MatchDevicePath "/dev/input/event*"
      Driver "libinput"
      Option "CalibrationMatrix" "1.040650407 0.0 -0.023373984 0.0 1.048951049 -0.027097902 0.0 0.0 1.0"
      Option "Tapping" "true"
      Option "TappingDrag" "true"
EndSection

Leider musste ich unter xfce/Xubuntu feststellen, (dass die teilweise libinput? / GTK+2/3? Umstellung dazu führte,) dass bei der Benutzung des Touchscreen zwar die Menu-Einträge/Buttons mancher Anwendungen erstmal genau so nutzbar waren wie es sein sollte (z.B. der Leiste/Panel, in Thunar oder dem Software Center) aber in anderen Anwendungen quasi nicht „klickbar“ waren (z.B. in den xfce-Einstellungen, zum Datei öffnen in Mousepad). Nach vielen Versuchen landete ich schließlich bei LXQT bzw. Lubuntu-QT, denn dort verhielten sich bei der Touchscreen-Benutzung alle dazugehörigen Anwendungen (z.B. Featherpad statt Mousepad) wie sie sollten. Leider zeigten sich gleich ein paar andere bugs… So führte z.B. der Aufruf eines Ordners in der detailierten Listenansicht von pcmanfm-qt reproduzierbar zu Abstürzen. Dieser ließ sich aber leicht durch Thunar bzw. pcmanfm ersetzen…

Nun fehlt nur noch eine Rechtsklick-Simulation wie sie früher mit Evdev möglich war… ;-)

 

HP WLAN Drucker/Scanner/Kombigerät (Deskjet 2544 Multifunktionsgerät – wifi) unter (X)ubuntu/Linux konfigurieren

Vor dem Kauf habe ich extra nach Geräten gesucht, die mit höchster Wahrscheinlichkeit unter Xubuntu/Linux unterstützt werden. Dabei zeigte sich, dass generell bei HP die Linux-Chancen recht groß sind und für das von mir geplante WLAN-Kombigerät Deskjet 2544 auch ein Treiber existiert.

Über USB ging alles sofort, nur für den WPA/WPA2 geschützten WLAN-Betrieb musste ich dann doch etwas mehr suchen bis ich das eine, kleine Zauberwort fand. Das hätte sich als kurzer Hinweis auch gut auf dem beiliegenden Zettel gemacht, aber dafür war es wohl zu einfach und hätte die anderen Systeme/Anleitungen düpiert… ;-)

Eine Verbindung per USB und die Eingabe von „hp-wificonfig“ in einem Terminal brachte den Stein bereits ins rollen. So wurde direkt nach der Eingabe „sudo apt-get install hplip-gui“ empfohlen. Nach dieser Installation direkt nochmal hp-wificonfig aufgerufen und danach hp-setup <Drucker-IP-Adresse> und alles war unkompliziert und doch recht schnell erledigt. Selbst Simple Scan funktionierte danach auf Anhieb über das WLAN.

(Eine Liste weiterer sinnvoller hp-tools für das Linux-Terminal findet sich hier.)