{"id":1602,"date":"2022-06-12T21:02:39","date_gmt":"2022-06-12T21:02:39","guid":{"rendered":"https:\/\/www.dev-metal.ch\/?p=1602"},"modified":"2023-07-04T21:01:03","modified_gmt":"2023-07-04T21:01:03","slug":"panel-fuer-hausautomation-2-versuch","status":"publish","type":"post","link":"https:\/\/www.dev-metal.ch\/?p=1602","title":{"rendered":"Panel f\u00fcr Hausautomation &#8211; 2. Versuch"},"content":{"rendered":"<p>Nachdem mein erster Versuch ein Panel f\u00fcr die Hausautomation zu erstellen, gescheitert ist (siehe <a href=\"https:\/\/www.dev-metal.ch\/?p=1586\" target=\"_blank\" rel=\"noopener\">https:\/\/www.dev-metal.ch\/?p=1586<\/a>) ist dies nun der zweite Versuch. Das Grundsetting ist das gleiche\u00a0 geblieben:<\/p>\n<h2>Hardware:<\/h2>\n<ul>\n<li>Panel: <a href=\"https:\/\/www.welectron.com\/Waveshare-156inch-HDMI-LCD_1\" target=\"_blank\" rel=\"noopener\">https:\/\/www.welectron.com\/Waveshare-156inch-HDMI-LCD_1<\/a><\/li>\n<li>Raspberry Pi 4<\/li>\n<li>Wlan USB Adapter (f\u00fcr bessere Verbindungsstabilit\u00e4t)<\/li>\n<li>K\u00fchler<\/li>\n<\/ul>\n<p><a href=\"https:\/\/www.dev-metal.ch\/wp-content\/uploads\/2022\/06\/IMG_20221013_134111986-scaled.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1890\" src=\"https:\/\/www.dev-metal.ch\/wp-content\/uploads\/2022\/06\/IMG_20221013_134111986-scaled.jpg\" alt=\"\" width=\"2560\" height=\"1147\" srcset=\"https:\/\/www.dev-metal.ch\/wp-content\/uploads\/2022\/06\/IMG_20221013_134111986-scaled.jpg 2560w, https:\/\/www.dev-metal.ch\/wp-content\/uploads\/2022\/06\/IMG_20221013_134111986-300x134.jpg 300w, https:\/\/www.dev-metal.ch\/wp-content\/uploads\/2022\/06\/IMG_20221013_134111986-1024x459.jpg 1024w, https:\/\/www.dev-metal.ch\/wp-content\/uploads\/2022\/06\/IMG_20221013_134111986-768x344.jpg 768w, https:\/\/www.dev-metal.ch\/wp-content\/uploads\/2022\/06\/IMG_20221013_134111986-1536x688.jpg 1536w, https:\/\/www.dev-metal.ch\/wp-content\/uploads\/2022\/06\/IMG_20221013_134111986-2048x917.jpg 2048w, https:\/\/www.dev-metal.ch\/wp-content\/uploads\/2022\/06\/IMG_20221013_134111986-2x1.jpg 2w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><\/a><\/p>\n<h2>Installation<\/h2>\n<p>Neu verwende ich nicht fullpageos sondern das raspberry pi OS. Die Full-Version in der 64bit Variante.<\/p>\n<p>Raspberry Pi Installation wie gewohnt durch schreiben eines SD-Images. Ich aktiviere dabei den SSH-Server gleich mit. Ich konfiguriere das OS auch so, dass ein autologin stattfindet. Am Ende eines Bootvorgangs gelangt man damit direkt auf den eingeloggten Desktop.<\/p>\n<p>Welectron gibt an, dass man f\u00fcr die Installation auf einem Raspberry Pi folgende Anpassungen an der \/boot\/config.txt vornehmen muss:<\/p>\n<pre># uncomment to force a specific HDMI mode (this will force VGA)\r\nhdmi_group=2\r\nhdmi_mode=82\r\nhdmi_cvt 1920 1080 60 6 0 0 0<\/pre>\n<p>Diese Anpassungen waren aber in meinem Falle gar<strong> nicht n\u00f6tig<\/strong>. Das Panel wurde sofort korrekt erkannt.<\/p>\n<h3>X11VNC Server<\/h3>\n<p>Da es sich hierbei um ein Panel handelt, sind Tastatur und Maus nicht fix montiert. Entsprechend macht es Sinn, das Ger\u00e4t per Remote steuern zu k\u00f6nnen. Das wird mit X11VNC-Server umgesetzt. X11VNC erm\u00f6glicht es existierende X11-Sessions per VNC weiterzuleiten:<\/p>\n<p>x11vnc installieren<\/p>\n<pre>sudo apt-get update\r\nsudo apt-get install x11vnc<\/pre>\n<p>Server testeshalber starten<\/p>\n<pre>x11vnc -usepw -forever -display :0<\/pre>\n<p>Beim ersten Start wird das Setzen eines Passwortes verlangt. Hier entsprechend eines setzen.<\/p>\n<p>Nun noch sicherstellen, dass der X11VNC-Server beim booten bzw. beim Login des Users<\/p>\n<pre>nano \/home\/pi\/.config\/autostart\/x11vnc.desktop<\/pre>\n<p>Folgende Zeilen eingeben<\/p>\n<pre>[Desktop Entry]\r\nType=Application\r\nName=X11VNC\r\nExec=x11vnc -usepw -forever -display :0\r\nStartupNotify=false<\/pre>\n<p>Raspberry Pi neu starten.<\/p>\n<pre>sudo reboot<\/pre>\n<p>Ab sofort ist der VNC-Server verf\u00fcgbar. Ein Client kann nun mit<\/p>\n<pre> vncviewer &lt;ip&gt;:0<\/pre>\n<p>auf den Raspberry Pi zugreifen.<\/p>\n<h2>Chromium installieren<\/h2>\n<p>Chromium bietet einen Kiosk-Mode. Dieser wurde bei fullpageos auch verwendet. Ich verwende der Einfachheit halber den gleichen Browser, mit den gleichen Start-Parametern:<\/p>\n<p>Installieren:<\/p>\n<pre> sudo apt-get install raspberrypi-ui-mods chromium-browser<\/pre>\n<p>Damit die Mouse-Curser entfernt werden k\u00f6nnen, muss noch unclutter installiert werden<\/p>\n<pre> sudo apt-get install unclutter<\/pre>\n<p>Ein Config-Verzeichnis im eigenen ~\/ erstellen:<\/p>\n<pre> mkdir -p \/home\/pi\/.config\/lxsession\/LXDE-pi\/<\/pre>\n<p>Script aufsetzen<\/p>\n<pre> nano \/home\/pi\/.config\/lxsession\/LXDE-pi\/autostart<\/pre>\n<p>und folgendermassen bef\u00fcllen<\/p>\n<pre># @xset s off ^[#(Screensaver ausschalten) Geht alternativ auch \u00fcber die Oberfl\u00e4che.\r\n@xset -dpms #(Energiesparmodus deaktivieren) Geht alternativ auch \u00fcber die Systemeinstellungen\r\n# @xset s noblank #(Screensaver ausschalten)\r\n@chromium-browser --v=0 --kiosk --touch-events=enabled --disable-pinch --noerrdialogs --simulate-outdated-no-au='Tue, 31 Dec 2099 23:59:59 GMT' --disable-session-crashed-bubble --disable-component-update --overscroll-history-navigation=0 --disable-features=Translate --app=http:\/\/primary-spacelynk.home.arpa\/scada-vis\r\n@unclutter -idle 0 # besagt, dass der Mouse-Curser 0s nach der letzten Aktivierung ausgeblendet werden soll<\/pre>\n<p>Ich lasse hier bewusst den Screensaver an (auskommentieren von @xset s off und #@xset s noblank). Das Panel soll schwarz werden, sobald es eine weile nicht gebraucht wird.<\/p>\n<h2>xscreensaver<\/h2>\n<p>Xscreensaver soll nach einigen Minuten inaktivit\u00e4t das Panel auf &#8222;Blank&#8220; setzen, also einen schwarzen Bildschirm an das Panel senden.<\/p>\n<p>Installation<\/p>\n<pre>sudo apt-get install xscreensaver<\/pre>\n<h2>Komplettes entfernen des Maus-Cursors<\/h2>\n<p>Unclutter entfernt den Maus-Cursor nicht komplett. Es blendet den Cursor lediglich nach x.xx sekunden inaktivit\u00e4t wieder aus. Wenn man aber auf das Touchpanel streicht, bleibt der Cursor auch dann sichtbar, wenn man -idle 0 konfiguriert hat.<\/p>\n<p>Man kann die Maus auch komplett ausblenden. Damit ist dann aber die Maus auch\u00a0 nicht verf\u00fcgbar, wenn man auf dem Raspi eine Maus anschliesst:<\/p>\n<pre>vi \/etc\/lightdm\/lightdm.conf<\/pre>\n<pre>#xserver-command=X\u00a0\r\nneu:\u00a0 xserver-command=X -nocursor<\/pre>\n<h2>xdotool<\/h2>\n<p>xdotool bietet die M\u00f6glichkeit per command-line (ssh) Maus und Tastatur-events an die x-session zu senden:<\/p>\n<pre>sudo apt-get install xdotool<\/pre>\n<p>Folgendes Script (geklaut bei fullpageos) setzt das Chromium-Fenster aktiv und senden ein refresh (ctrl+f5)<\/p>\n<pre>#!\/bin\/bash\r\nexport DISPLAY=:0\r\nsleep 1\r\nWID=$(xdotool search --onlyvisible --class chromium|head -1)\r\nxdotool windowactivate ${WID}\r\nxdotool key ctrl+F5\r\n\r\nxdotool key F11<\/pre>\n<h3>Mausklicks f\u00fcr Kamera-Auswahl<\/h3>\n<p>Wenn es an der T\u00fcre klingelt, soll das Panel automatisch auf der Visualisierung das Kamerabild einblenden. Dies kann man nun mit xdotool wunderbar umsetzen. Folgendes Script simuliert zwei Toches auf dem Panel und w\u00e4hlt damit das gew\u00fcnschte Kamerabild automatisch aus. Dieses Script wird von der Kamera getriggert, sobald jemand die Klingel get\u00e4tigt hat:<\/p>\n<pre>#!\/bin\/bash\r\nexport DISPLAY=:0\r\nsleep 1\r\nWID=$(xdotool search --onlyvisible --class chromium|head -1)\r\nxdotool windowactivate ${WID}\r\n\r\n### Select Kamera-Menu\r\nxdotool mousemove 1720 900 click 1\r\nsleep .5\r\n\r\n### Select Mobotix Camera\r\nxdotool mousemove 250 200 click 1<\/pre>\n<p>&nbsp;<\/p>\n<h2>Reboot to Chromium\/Desktop<\/h2>\n<p>Falls ich mal den Desktop per VNC ben\u00f6tige, habe ich mir zwei bash-scripte geschrieben, welche das autostart-File entfernt und duchbootet (bootToDesktop.sh) oder das autostart-File nach \/home\/pi\/.config\/lxsession\/LXDE-pi\/ schreibt und bootet (bootToChromium.sh).<\/p>\n<h2>Problembehebungen<\/h2>\n<h3>Wayland Display Server \/ ydotool<\/h3>\n<p>Wenn man xdotool unter Wayland (z.B. Ubuntu 22.04) verwendet kann das Problem auftauchen, dass xdotool den &#8222;Black-Screen&#8220; nicht wieder deaktiviert. Will hiessen, dass die Mausbewegungen und Clicks zwar ausgef\u00fchrt werden, der Bildschirm selber aber Schwarz bleibt, wenn er mal in den &#8222;Tiefschlaf&#8220; gefallen ist. Abhilfe bringt dann ydotool:<\/p>\n<ul>\n<li><a href=\"https:\/\/unix.stackexchange.com\/questions\/725862\/how-can-i-wake-up-the-debian-11-screen-wayland-from-the-command-line-deactiv\" target=\"_blank\" rel=\"noopener\">https:\/\/unix.stackexchange.com\/questions\/725862\/how-can-i-wake-up-the-debian-11-screen-wayland-from-the-command-line-deactiv<\/a><\/li>\n<\/ul>\n<p>ydotool kann nicht aus den Quellen installiert werden (veraltet). Stattdessen hier eine Anleitung, wie man ydotool aus Github selber bildet:<\/p>\n<ul>\n<li><a href=\"https:\/\/askubuntu.com\/questions\/1413829\/how-can-i-install-the-latest-ydotool-1-0-1-keyboard-automation-tool-working-on\" target=\"_blank\" rel=\"noopener\">https:\/\/askubuntu.com\/questions\/1413829\/how-can-i-install-the-latest-ydotool-1-0-1-keyboard-automation-tool-working-on<\/a><\/li>\n<\/ul>\n<p>Nach der Installation konnte ydotool immer noch nicht als normaler User ausgef\u00fchrt werden, weil das Socket-File nicht gefunden wird. Hier die L\u00f6sung daf\u00fcr:<\/p>\n<ul>\n<li><a href=\"https:\/\/bbs.archlinux.org\/viewtopic.php?id=284968\" target=\"_blank\" rel=\"noopener\">https:\/\/bbs.archlinux.org\/viewtopic.php?id=284968<\/a><\/li>\n<\/ul>\n<p>Schlussendlich habe ich einfach in meinen xdotool-Files erst einen ydotool command ausgef\u00fchrt. Dieser aktiviert den Screen. Anschliessend f\u00fchre ich mit xdotool fort:<\/p>\n<pre>#!\/bin\/bash\r\nexport DISPLAY=:0\r\n<strong>YDOTOOL_SOCKET=\"\/tmp\/.ydotool_socket\" ydotool mousemove --absolute -- 1720 800<\/strong>\r\n\r\nsleep .5\r\n\r\nWID=$(xdotool search --onlyvisible --class chromium|head -1)\r\nxdotool windowactivate ${WID}\r\n\r\n### Select Kamera-Menu\r\nxdotool mousemove 1720 800 click 1\r\n\r\nsleep .1\r\n\r\n### Select Axis Kinderzimmer Camera\r\nxdotool mousemove 900 600 click 1<\/pre>\n<p>&nbsp;<\/p>\n<h3>SWAP Speicher erh\u00f6hen<\/h3>\n<p>Es zeigt sich, dass Chromium sehr Speicherhungrig ist und das Anzeigen von sehr grossen Grafana-Panels das System zum erliegen bringen kann. Deswegen habe ich den SWAP Speicher auf 2048 erh\u00f6ht: https:\/\/pimylifeup.com\/raspberry-pi-swap-file\/<\/p>\n<h3>WLAN Verbindung (Stabilit\u00e4t) verbessern<\/h3>\n<p>Der Standard WLAN Adapter des Raspberry PIs 4 ist zwar schnell aber seine Reichweite ist nicht wirklich gut. Deswegen verwende ich einen WLAN USB-Stick, der auch vom System bereits automatisch erkannt und eingebunden wurde (als Wlan1). Um sicherzustellen, dass der Raspi nur \u00fcber diesen Wlan1 Adapter kommuniziert habe ich zu einem kleinen Trick gegriffen. Unter<\/p>\n<pre>\/etc\/wpa_supplicant\/wpa_supplicant.conf<\/pre>\n<p>kann bekanntlich das WLAN konfiguriert werden. Alle Wlan Adapter verwenden diese Konfig-File.<\/p>\n<p>Man kann aber auch mehrere solcher Konfig-Files anlegen und diese den Adaptern zuweisen. Dies nach dem Muster <em>wpa_supplicant-&#8222;$interface&#8220;.conf<\/em><\/p>\n<p>Um Wlan0 nicht mehr reden zu lassen, habe ich ein File wpa_supplicant-wlan0.conf ohne entsprechende Netzwerk-Konfig erstellt.<\/p>\n<pre>cp wpa_supplicant.conf wpa_supplicant-wlan0.conf<\/pre>\n<p>Das wlan0 File sieht dann so aus:<\/p>\n<pre>ctrl_interface=DIR=\/var\/run\/wpa_supplicant GROUP=netdev\r\nupdate_config=1\r\ncountry=CH\r\n\r\nnetwork={\r\n}<\/pre>\n<p>Damit wird f\u00fcr den Adapter Wlan0 dieses Konfig-File verwendet, welches sich entsprechend gar nicht verbindet. Alle anderen Wlan Adapter verwendet weiterhin <em>wpa_supplicant.conf. <\/em>Damit verbindet sich Wlan1 und Wlan0 bleibt stumm.<\/p>\n<h2>Optionale Info: HDMI Power off<\/h2>\n<p>Mein Panel besitzt eine Hintergrundbeleuchtung. Dieses blieb bei fullpageos\u00a0 an, wenn xscreensaver einen Blank-Screen sendete. Dies konnte ich folgendermassen ausschalten:<\/p>\n<pre>sudo vcgencmd display_power 0\u00a0 # HDMI Power off\r\nsudo vcgencmd display_power 1\u00a0 # HDMI Power on<\/pre>\n<h2>Kios-Mode verlassen<\/h2>\n<ul>\n<li>\u00dcber VNC verbinden und\u00a0 Alt+F4 dr\u00fccken oder<\/li>\n<li>\u00fcber SSH mit ps -ef | grep chromium die Prozess-ID herausfinden und den Prozess killen.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h2>Links<\/h2>\n<ul>\n<li><a href=\"https:\/\/www.elektronik-kompendium.de\/sites\/raspberry-pi\/2011121.htm\" target=\"_blank\" rel=\"noopener\">https:\/\/www.elektronik-kompendium.de\/sites\/raspberry-pi\/2011121.htm<\/a><\/li>\n<li><a href=\"https:\/\/codex.so\/kiosk-mode-on-raspberry-pi\" target=\"_blank\" rel=\"noopener\">https:\/\/codex.so\/kiosk-mode-on-raspberry-pi<\/a><\/li>\n<li><a href=\"https:\/\/itrig.de\/index.php?\/archives\/2267-Kiosk-Systeme-fuer-alle-kein-Problem-mit-FullPageOS.html\" target=\"_blank\" rel=\"noopener\">https:\/\/itrig.de\/index.php?\/archives\/2267-Kiosk-Systeme-fuer-alle-kein-Problem-mit-FullPageOS.html<\/a><\/li>\n<li><a href=\"https:\/\/forums.raspberrypi.com\/viewtopic.php?t=56944\" target=\"_blank\" rel=\"noopener\">https:\/\/forums.raspberrypi.com\/viewtopic.php?t=56944<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/guysoft\/FullPageOS\/blob\/devel\/src\/modules\/fullpageos\/filesystem\/home\/pi\/scripts\/start_chromium_browser\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/guysoft\/FullPageOS\/blob\/devel\/src\/modules\/fullpageos\/filesystem\/home\/pi\/scripts\/start_chromium_browser<\/a><\/li>\n<li><\/li>\n<li><\/li>\n<li><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nachdem mein erster Versuch ein Panel f\u00fcr die Hausautomation zu erstellen, gescheitert ist (siehe https:\/\/www.dev-metal.ch\/?p=1586) ist dies nun der zweite Versuch. Das Grundsetting ist das gleiche\u00a0 geblieben: Hardware: Panel: https:\/\/www.welectron.com\/Waveshare-156inch-HDMI-LCD_1 Raspberry Pi 4 Wlan USB Adapter (f\u00fcr bessere Verbindungsstabilit\u00e4t) K\u00fchler Installation Neu verwende ich nicht fullpageos sondern das raspberry pi OS. Die Full-Version in der [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_lmt_disableupdate":"no","_lmt_disable":"","footnotes":""},"categories":[10],"tags":[],"class_list":["post-1602","post","type-post","status-publish","format-standard","hentry","category-techdocs"],"modified_by":"ralph","_links":{"self":[{"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/posts\/1602","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1602"}],"version-history":[{"count":23,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/posts\/1602\/revisions"}],"predecessor-version":[{"id":1941,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/posts\/1602\/revisions\/1941"}],"wp:attachment":[{"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1602"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1602"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1602"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}