Benutzer-Werkzeuge

Webseiten-Werkzeuge


nanopi_m4:kiosk:software

Dies ist eine alte Version des Dokuments!


Software

Das Nanopi-Terminal verwendet als Betriebssystem Armbian.

Probleme mit Wifi: Manchmal erscheint die Konfiguration für Wifi nicht in armbian-config

  • brcmfmac4356-sdio.bin
  • brcmfmac4356-sdio.txt
  • BCM4356A2.hcd

passend ersetzen.

Kopierte Dateien:

  • Netzwerkverbindungen in /etc/NetworkManager/system-connections
  • Dateien in /opt/ (start_blescan.sh, start_kiosk.sh, switch.sh, .twinkle)
  • Dateien /home/kiosk/ (anruf_annehmen.sh, ble_scan, gpio_buttontest)
  • Content /var/www/html
  • Udev-Rule in /etc/udev/rules.d/80-jitsi.rules

Test der Temperatur: armbianmonitor -m

  • sudo apt update
  • sudo apt upgrade
  • sudo apt dist-upgrade
  • sudo apt install xorg xserver-xorg-legacy openbox chromium xdotool unclutter lighttpd twinkle swaks bluez php-cgi
  • sudo lighty-enable-mod fastcgi-php
  • sudo nano -w /etc/X11/Xwrapper.config
allowed_users=anybody 
needs_root_rights=yes
  • sudo nano /opt/kiosk.sh
#!/bin/sh
    sleep 10
    xset s noblank
    xset s 300
    openbox-session &
    unclutter -grab -visible &
#pavucontrol
#exit
    if ! lsusb | grep "1bcf:2284" > /dev/null
    then 
        startadresse="https://www.kinasen.de/wetteruebersicht.php"
    else
        startadresse="https://jitsi........."
    fi
    chromium --no-first-run --kiosk --agc-startup-min-volume=255 --compensate-for-unstable-pinch-zoom --disable-pinch --disable-translate --disable-suggestions-service --disable-save-password-bubble --start-maximized --disable-session-crashed-bubble --disk-cache-dir=/tmp/kioskcache --disk-cache-size=1 $startadresse
  • sudo chmod 755 /opt/kiosk.sh
  • sudo nano /etc/systemd/system/kiosk.service
[Unit]
Description=Kiosk

[Service]
Type=oneshot
User=kiosk
ExecStart=/usr/bin/startx /etc/X11/Xsession /opt/kiosk.sh

[Install]
WantedBy=multi-user.target
  • sudo systemctl daemon-reload
  • sudo systemctl enable kiosk
  • sudo reboot

dbus-x11

Steuerung der Kiosk-Anzeige

Um die von Chromium im Kiosk-Mode (keine Adresszeile) dargestellte URL wechseln zu können musste etwas improvisiert werden. Alle genutzten Webseiten binden Javascript ein, welches die neu URL nach Eingabe einer Tastenkombination aufruft. Diese Javascriptdatei und einige der anzeigbaren Seiten werden vom lokalen Webserver (lighttpd, localhost) geliefert.

var intervalPing = setInterval(function(){
        var xhr = new XMLHttpRequest();
        xhr.onreadystatechange = function() {};
        xhr.open('GET', 'http://localhost/ping.php');
        xhr.send();
}, 5000);

var tasten=[0,0,0];
function keys(key) {
   if (!key){
      key = event;
      key.which = key.keyCode;
}
      tasten[0]=tasten[1];
      tasten[1]=tasten[2];
      tasten[2]=String.fromCharCode(key.which);

   switch(tasten.join('')){
      // Taste y:
      case "Y1X":       location.href = "https://jitsi.kinasen.de/P0l8a5u2e5n"; break;
      case "Y2X":       location.href = "https://www.kinasen.de/wetteruebersicht.php"; break;
      case "Y3X":       location.href = "https://www.kinasen.de/gartenbilder.php"; break;
      case "Y4X":       location.href = "http://localhost/lexikon.php"; break;
      case "Y5X": 
        var path=window.location.pathname;
        if (path=="/anrufen.php")
        {
                telefonstatus();
                break;
        }
        else
        {
                location.href = "http://localhost/anrufen.php?incoming=1";
                break;
        }
   }
}
document.onkeyup = keys;

Soll ein Jitsi-Server eingebunden werden so muss nach fast jedem Update auf diesem das Javascript neu eingebunden werden.

/usr/share/jitsi-meet/index.html

Da an der Anzeige keine Tastatur verbaut wurde erfolgt die Umschaltung der Seiten durch Taster. Diese rufen jeweils ein Script auf, welches die Tastatureingabe im Chromium mittels xdotool simuliert. Um direkt in die festgelegte Jitsi-Konferenz zu schalten wird das entsprechende Script durch eine UDEV-Regel beim Anstecken oder Entfernen der Kamera ausgelöst.

/opt/switch.sh

#!/bin/bash
zahl_telefon=5
zahl_max=5
if [ $# -ne 1 ] 
then
        echo "kein parameter"
        exit
fi
if [ $1 -eq 99 ]
then
        export DISPLAY=":0"
        export XAUTHORITY=/home/kiosk/.Xauthority
        xdotool getactivewindow
        xdotool key "ctrl+F5" 
        exit
fi
if [ $1 -gt -1 ] && [ $1 -lt 10 ]
then
        if ps ax | grep [c]hromium > /dev/null
        then
                if ! ps ax | grep [/]bin/sh /opt/switch.sh > /dev/null
                then
                        if [ $1 -eq 0 ]  # Taster gedrückt, durchschalten
                        then 
                                taste=$(cat /tmp/switch.status)
                                taste=$(($taste+1))
                                if [ $taste -eq $zahl_telefon ]
                                then
                                        if cat /tmp/twinkle.log | grep "registration succeeded" > /dev/null
                                        then
                                                echo "registration succeeded" > /tmp/twinkle.log
                                        else
                                                taste=$(($taste+1))
                                        fi
                                fi
                                if [ $taste -gt $zahl_max ]
                                then
                                        taste=2
                                fi
                        else
                                taste=$1
                        fi
                        echo "$taste" > /tmp/switch.status
                        export DISPLAY=":0"
                        export XAUTHORITY=/home/kiosk/.Xauthority
                        xdotool getactivewindow; xdotool mousemove 100 200; xdotool key y; xdotool key "$taste"; xdotool key x
                        sleep 1
                fi
        fi
fi

UDEV Rule für Kamera

/etc/udev/rules.d/80-jitsi.rules

ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="1bcf", ATTRS{idProduct}=="2284", RUN+="/bin/su USER -c '/bin/sh /opt/switch_2.sh'"
ACTION=="remove", SUBSYSTEM=="usb", ATTRS{idVendor}=="1bcf", ATTRS{idProduct}=="2284", RUN+="/bin/su USER -c '/bin/sh /opt/switch_1.sh'"

GPIO für Tasten

GPIO 150, entspricht Pin 23 der Pinleiste GPIO2(GPIO4_C6/PWM1(3V))

Pullup 10k nach 3,3V Pin 1 Pinleiste GPIO1

Zur Abfrage des Tasters läuft ein Programm (C) und ruft bei Flankenerkennung ein Bash-Script (/opt/switch_3.sh) auf. Dieses simuliert wiederum eine Tastatureingabe (y 3 6) im Browser.

Telefonfunktion

Twinkle als automatisch gestarteter CLI Prozess beim Booten ist etwas tricky. Unter Nutzung des Fenstermanagers screen wird er SIP-Client als systemd Service phone gestartet.

[Unit]
Description=Start SIP Client
[Service]
Type=forking
User=kiosk
ExecStartPre=sleep 10
ExecStart=screen -d -U -L -Logfile /tmp/twinkle.log -m twinkle -c
[Install]
WantedBy=multi-user.target

Bluetooth LE Scan

Hier wird Bluetooth LE zur Anwesenheitserkennung z.B. zum Einschalten von Lampen genutzt. Start als systemd service btlescan.

Email

swaks –to ZIELMAILADRESSE -s MAILSERVER:PORT -au BENUTZERNAME -ap „PASSWORT“

GPIO Tasteneingabe

Das Programm zum Überwachen der Tasten-GPIOs und das Ausschalten der blinkenden grünen LED geschieht über /etc/rc.local

echo 0 > /sys/class/leds/status_led/brightness 
echo none > /sys/class/leds/status_led/trigger
/home/USER/gpio_buttontest 150 > /dev/null 2>&1 &

Display Standby

sudo nano /etc/X11/xorg.conf.d/01-armbian-defaults.conf

Option                  "StandbyTime" "5"

Kiosk Ping

Es kommt vor, dass für den Kiosk keine Internetverbindung besteht und Chromium dann eine Fehlermeldung zeigt. Um diesen Zustand zu beheben ruft auf allen Seiten ein Javascript alle 5 Sekunden ein Script auf. Bleibt dieser „Ping“ 5 Sekunden aus so wird das neu laden der Internetseite im Chromium veranlasst.

nanopi_m4/kiosk/software.1604964907.txt.gz · Zuletzt geändert: 2020/11/10 00:35 von andmin