User Tools

Site Tools


infrastructure:services:light

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
infrastructure:services:light [2023-09-21 22:47 UTC] julianinfrastructure:services:light [2024-03-01 21:40 UTC] (current) – fix wiki syntax jtbx
Line 2: Line 2:
 ---- dataentry service ---- ---- dataentry service ----
 service-urls_urls:   https://light.ccchh.net/ service-urls_urls:   https://light.ccchh.net/
-other-service-fqdns: +other-service-fqdns:
 host-fqdn:           light.z9.ccchh.net host-fqdn:           light.z9.ccchh.net
 netbox-link_url:     https://netbox.hamburg.ccc.de/virtualization/virtual-machines/8/ netbox-link_url:     https://netbox.hamburg.ccc.de/virtualization/virtual-machines/8/
Line 10: Line 10:
 ---- ----
  
-Eine VM, welche ein Webinterface zur Steuerung der DMX-Lichter hostet. An dem ThinkCCCentre ist ein FTDI USB-to-Serial Converter angeschlossen und an die VM durchgereicht, der das DMX steuert. +Eine VM, welche ein Webinterface zur Steuerung der DMX-Lichter hostet. An dem ThinkCCCentre ist ein FTDI USB-to-Serial Converter angeschlossen und an die VM durchgereicht, der das DMX steuert. 
 + 
 +Welche Lampen in den Räumen verbaut sind: Siehe [[club:z9:dmx-leuchten]]
  
 ===== Konfiguration ===== ===== Konfiguration =====
-TODO+ 
 +==== Hypervisor-Configuration ==== 
 + 
 +Da das DMX-Device bei uns in einer VM (mit dem Namen ''licht'') hängt ist noch einiges nötig. 
 +Auf dem Hypervisor (Debian/systemd/GNU/Linux) das ''ftdi_sio''-Modul blacklisten: 
 +<code> 
 +root@red.bikeshed.hamburg.ccc.de:~# cat /etc/modprobe.d/blacklist.conf 
 +blacklist ftdi_sio 
 +</code> 
 + 
 +==== VM-Configuration ==== 
 + 
 +DMX-Device der VM mitgeben: 
 + 
 +<code> 
 +  <hostdev mode='subsystem' type='usb' managed='no'> 
 +    <source startupPolicy='optional'> 
 +      <vendor id='0x0403'/> 
 +      <product id='0x6001'/ 
 +    </source> 
 +  </hostdev> 
 +</code> 
 + 
 +Man beachte das ''startupPolicy''
 +Das ist ein USB-Device, dass könnten Leute entfernen und wir wollen trotzdem, dass die VM dann startet. 
 +Genau aus dem Grund müssen wir auch noch mehr tun. 
 +Obigen XML-Code in eine Datei tun, z.B. ''/root/dmxcontroller.xml''
 +Dann legen wir eine udev-Regeln an, dass beim anstöpseln das DMX-Device direkt an die VM durchgereicht wird: 
 + 
 +<code> 
 +# /etc/udev/rules.d/90-libvirt-usb.rules 
 +ACTION=="add",
 +   SUBSYSTEM=="usb",
 +   ENV{ID_VENDOR_ID}=="0403",
 +   ENV{ID_MODEL_ID}=="6001",
 +   RUN+="/usr/bin/virsh attach-device licht /root/dmxcontroller.xml" 
 +ACTION=="remove",
 +   SUBSYSTEM=="usb",
 +   ENV{ID_VENDOR_ID}=="0403",
 +   ENV{ID_MODEL_ID}=="6001",
 +   RUN+="/usr/bin/virsh detach-device licht /root/dmxcontroller.xml" 
 +</code> 
 + 
 +Lustig, nech? Bitte bitte Bescheid sagen, falls ich da 'ne Funktion in ''libvirt'' übersehen hab. 
 + 
 +==== Treiber-Configuration ==== 
 + 
 +So, endlich haben wir das DMX-Device in die VM durchgereicht. 
 +Wir erinnern uns, USB-Vendor 0x0403 und Device-ID 0x6001. 
 +Jetzt wollen wir es auch schön ansteuern. 
 +Dazu muss man dem FTDI beibringen, auch ordentliches DMX rauszupipen, das einfach aus einer Folge Bits besteht und keine doofen Start/Stopbits und so hat. 
 +Das DMX spricht jetzt der Demon der Open Lighting Architecture (olad). 
 +Der ist konfiguriert, auf dem einen Ende mit dem Gerät zu reden (mittel der libftdi) und auf der anderen per ArtNet, das ist quasi DMX over UDP, die DMX-Settings zu empfangen. 
 +Das geht also wieder übers Netz, yay! Außerdem muss man darauf achten, dass ''brltty'' nicht dazwischenfunkt, also deinstallieren. 
 + 
 +''root@licht.z9:~# apt-get remove brltty'' 
 + 
 +==== Business Logic ==== 
 + 
 +Jetzt wird's lustig. Unser Software-Aufbau: 
 + 
 +<code> 
 +          device            ArtNet(UDP)          fifo         websockets 
 + USB-Gerät <--- OpenLighting  <--- dmx_repeater <--- foobardmx <--- light (Farbwechsel-Skript) 
 +               fremdgefrickel          ruby              node         ruby 
 +</code> 
 + 
 +Der ''dmx_repeater'' spricht mit dem OLA. 
 +Zu finden ist er unter [[https://gitlab.hamburg.ccc.de/ccchh/dmx-repeater|]]. 
 + 
 +<code> 
 +licht@licht.z9 $ git clone https://gitlab.hamburg.ccc.de/ccchh/dmx-repeater.git 
 +</code> 
 + 
 +Hat als Abhängigkeit nur ruby. 
 + 
 +Der ''foobardmx'' ist zum einen das Web-Dashboard, zum anderen weiß es, auf welchen DMX-Kanälen was passiert. Zu finden ist es unter [[https://gitlab.hamburg.ccc.de/ccchh/foobardmx]] und in NodeJS geschrieben. Also das Clonen und irgendwie die Abhängigkeiten installieren. Hab vergessen, wie. Foobardmx connected sich über nen FIFO zum dmx_repeater. 
 + 
 +Das letzte ist ein Tool ohne großen Namen, heißt ''light''. Das macht lustige Animationen, in dem es sich zum foobardmx connected und Kommandos schickt. Der foobardmx started light, indem es den entsprechenden Service startet. [[https://gitlab.hamburg.ccc.de/ccchh/light]]. **ACHTUNG: Aus bisher ungeklärten Gründen ist der Farbwechsler kaputt, wir vermuten nen Bug im NodeJS-Websocket-Gedöns.** 
 + 
 +Die Dinge brauchen noch Systemd-Units, um auch richtig zu starten: 
 + 
 +<code> 
 +# /etc/systemd/system/foobardmx.service 
 +[Unit] 
 +Description=foobardmx lightig web control 
 +After=dmx-repeater.service 
 + 
 +[Service] 
 +Type=simple 
 +WorkingDirectory=/home/licht/foobardmx 
 +ExecStartPre=/bin/sleep 5 
 +ExecStart=/usr/bin/nodejs lighting.js >/dev/null 2>/dev/null 
 +User=licht 
 +Group=licht 
 + 
 +[Install] 
 +WantedBy=multi-user.target 
 +</code> 
 + 
 +<code> 
 +# /etc/systemd/system/dmx-repeater.service 
 +[Unit] 
 +Description=dmx-repeater 
 + 
 +[Service] 
 +Type=simple 
 +WorkingDirectory=/home/licht/dmx_repeater/bin 
 +ExecStart=/home/licht/dmx_repeater/bin/dmx_repeater 
 +User=licht 
 +Group=licht 
 +Restart=always 
 + 
 +[Install] 
 +WantedBy=multi-user.target 
 +</code> 
 + 
 +<code> 
 +# /etc/systemd/system/light.service 
 +[Unit] 
 +Description=slowly chaning colors 
 + 
 +[Service] 
 +Type=simple 
 +WorkingDirectory=/home/licht/light 
 +ExecStart=/home/licht/light/light 
 +User=licht 
 + 
 +[Install] 
 +WantedBy=multi-user.target 
 +</code> 
 + 
 +<code> 
 +# visudo 
 +licht   ALL=(ALL) NOPASSWD: /bin/systemctl stop light 
 +licht   ALL=(ALL) NOPASSWD: /bin/systemctl start light 
 +</code> 
 + 
 +Services anmachen 
 + 
 +<code> 
 +# systemctl enable dmx-repeater 
 +# systemctl enable foobardmx 
 +</code> 
 + 
 + 
 +===== Debugging ===== 
 + 
 +Das Licht schaltet beim aufschließen des Raumes standardmäßig alle Lampen auf weiß und beim zuschließen aus. 
 + 
 +  * Falls irgendwas nicht geht, folgendes tun: 
 + 
 +<code> 
 +$ ssh root@licht.z9 # Passwort muss geraten werden 
 + 
 +root@lifesupport# lsusb | grep "0403:6001" 
 + 
 +Bus 00X Device 003: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC 
 +</code> 
 + 
 +  * Ist das Device im Output? ''Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC'' 
 +    * Falls nicht: Den großen blauen Kasten im Schrank kurz vom USB trennen und wieder dran stecken. 
 +      * Wenn's dann immer noch nicht da ist: verzweifeln. 
 +  * Ist der ftdio_sio-Treiber geladen? \\ ''# lsmod | grep ftdio_sio'' 
 +  * Ist der ''olad'' gestarted? \\ ''# systemctl restart olad'' 
 +  * Dann: Services neustarten: 
 +<code> 
 +# systemctl restart dmx-repeater 
 +# systemctl restart foobardmx 
 +</code> 
 +  * Anschließend im Frontend nochmal auf "an" klicken. 
 +    * Wenn's dann immer noch nicht geht: verzweifeln und die VM neustarten. \\ ''# systemctl reboot''
infrastructure/services/light.1695336468.txt.gz · Last modified: 2023-09-21 22:47 UTC by julian

Except where otherwise noted, content on this wiki is licensed under the following license: CC0 1.0 Universal
CC0 1.0 Universal Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki