LightBus/LuaServer: Unterschied zwischen den Versionen
Hw (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „==Zugriff== Der Server ist (zur Zeit) auf brickme.nok.lab im Neotopia-Netzwerk auf TCP Port 1167 erreichbar. Man kann ihm Lua-Code schicken, der dann ausgef…“) |
(→Persistenz: Fix falls remount nicht geht) |
||
(6 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
==Zugriff== | ==Zugriff== | ||
Der Server ist (zur Zeit) auf | Der Server ist (zur Zeit) auf light.nok.lab im Neotopia-Netzwerk auf TCP Port 1167 erreichbar. | ||
Man kann ihm Lua-Code schicken, der dann ausgeführt wird (jajaja, unsicher, blablabla, aber lustig). | Man kann ihm Lua-Code schicken, der dann ausgeführt wird (jajaja, unsicher, blablabla, aber lustig). | ||
Der Effekt-Server ruft 100x pro Sekunde seinen "Effekt-Stack" auf, auf dem Effekt-Funktionen liegen, die ihm mit dem API-Aufruf api:effect_add(...) hinzugefügt worden sind. Diese Effekt-Funktionen werden in der Reihenfolge ihrer Priorität (aufsteigend) aufgerufen und setzen den Zustand der LEDs. | |||
==Dokumentation der Lua-API== | ==Dokumentation der Lua-API== | ||
Zeile 20: | Zeile 22: | ||
offers the following methods: | offers the following methods: | ||
api:set(x, y, r, g, b, | api:set(x, y, r, g, b, alpha_r, alpha_g, alpha_b) | ||
set Pixel at x, y to the values r, g, b using alpha | set Pixel at x, y to the values r, g, b using alpha values | ||
(these are optional and default to 1.0) | |||
api:get(x, y) | |||
get Pixel values r, g, b at x, y | |||
api:effect_list() | api:effect_list() | ||
return a list of currently loaded/active effects | return a list of currently loaded/active effects | ||
Zeile 42: | Zeile 48: | ||
Siehe zur Implementation https://github.com/hwhw/stm32-projects/blob/master/lbus_usb_master/host_tools/luajit/srv.lua | Siehe zur Implementation https://github.com/hwhw/stm32-projects/blob/master/lbus_usb_master/host_tools/luajit/srv.lua | ||
Beispiele für Lua-Code, den man an den Server schicken kann, finden sich hier: https://github.com/hwhw/stm32-projects/tree/master/lbus_usb_master/host_tools/luajit/srv_effects | Beispiele für Lua-Code, den man an den Server schicken kann, finden sich hier: https://github.com/hwhw/stm32-projects/tree/master/lbus_usb_master/host_tools/luajit/srv_effects | ||
==Beispiel für Script-Aufruf== | |||
Einzelner API-Call von der Kommandozeile: | |||
<pre> | |||
$ echo 'api:effect_list()' | netcat light 1167 | |||
</pre> | |||
Einen Effekt (oder eine größere andere Menge Lua-Code) aus einer Datei laden: | |||
<pre> | |||
$ cat red_alert.lua | netcat light 1167 | |||
</pre> | |||
Laufzeit-Parameter eines Effekts setzen: | |||
<pre> | |||
$ echo 'api:effect_set("kinomodus", "active", true)' | netcat light 1167 | |||
</pre> | |||
==Persistenz== | |||
Der Light Server führt nach dem Booten automatisch die Lua-Skripte im Verzeichnis ~pi/effects.d aus. Hat man z.B. einen Effekt programmiert, der nach dem Booten automatisch im Stack auftauchen soll, legt man ihn in dieses Verzeichnis einfach ab. Dazu ssh pi@light benutzen. | |||
Um Probleme mit dem Dateisystem zu vermeiden, wenn über den Lichtschalter der pi einfach ausgeschaltet wird, wird das Dateisystem per Default mit der read-only Option gemounted. Wenn man also den Inhalt von ~pi/effects.d verändern will, muss man folgende Befehle benutzen | |||
<pre> | |||
$ sudo mount -o remount,rw / | |||
$ sudo mount -o remount,ro / | |||
</pre> | |||
um das Dateisystem einmal read-write und dann hinterher wieder read-only zu remounten. | |||
===mount is busy=== | |||
Falls das remount,ro nicht funktioniert liegt es wahrscheinlich an rsyslog. | |||
<pre> | |||
$ sudo service rsyslog stop | |||
$ sudo mount -o remount,ro / | |||
</pre> |
Aktuelle Version vom 13. August 2019, 00:14 Uhr
Zugriff[Bearbeiten]
Der Server ist (zur Zeit) auf light.nok.lab im Neotopia-Netzwerk auf TCP Port 1167 erreichbar.
Man kann ihm Lua-Code schicken, der dann ausgeführt wird (jajaja, unsicher, blablabla, aber lustig).
Der Effekt-Server ruft 100x pro Sekunde seinen "Effekt-Stack" auf, auf dem Effekt-Funktionen liegen, die ihm mit dem API-Aufruf api:effect_add(...) hinzugefügt worden sind. Diese Effekt-Funktionen werden in der Reihenfolge ihrer Priorität (aufsteigend) aufgerufen und setzen den Zustand der LEDs.
Dokumentation der Lua-API[Bearbeiten]
LBUS: busmaster: host: example network effect server This implements an effect server (srv.lua) which listens on TCP port 1167 and waits for Lua code there. An API is presented that allows to send animation functions (effects) to the server which it will then run. Uses LJSyscall for implementing the server functionality. API is accessible for the functions in the "api" variable. It offers the following methods: api:set(x, y, r, g, b, alpha_r, alpha_g, alpha_b) set Pixel at x, y to the values r, g, b using alpha values (these are optional and default to 1.0) api:get(x, y) get Pixel values r, g, b at x, y api:effect_list() return a list of currently loaded/active effects api:effect_add(prio, name, effect) add an effect effect is a function: function(time, data) when called by the server in distinct intervals, time is the current time (in seconds), data is a table containing data that can be configured at runtime (see api:effect_set()) api:effect_del(name) remove an effect api:effect_set(name, data_name, value) set an effect's data_name value
Siehe zur Implementation https://github.com/hwhw/stm32-projects/blob/master/lbus_usb_master/host_tools/luajit/srv.lua
Beispiele für Lua-Code, den man an den Server schicken kann, finden sich hier: https://github.com/hwhw/stm32-projects/tree/master/lbus_usb_master/host_tools/luajit/srv_effects
Beispiel für Script-Aufruf[Bearbeiten]
Einzelner API-Call von der Kommandozeile:
$ echo 'api:effect_list()' | netcat light 1167
Einen Effekt (oder eine größere andere Menge Lua-Code) aus einer Datei laden:
$ cat red_alert.lua | netcat light 1167
Laufzeit-Parameter eines Effekts setzen:
$ echo 'api:effect_set("kinomodus", "active", true)' | netcat light 1167
Persistenz[Bearbeiten]
Der Light Server führt nach dem Booten automatisch die Lua-Skripte im Verzeichnis ~pi/effects.d aus. Hat man z.B. einen Effekt programmiert, der nach dem Booten automatisch im Stack auftauchen soll, legt man ihn in dieses Verzeichnis einfach ab. Dazu ssh pi@light benutzen.
Um Probleme mit dem Dateisystem zu vermeiden, wenn über den Lichtschalter der pi einfach ausgeschaltet wird, wird das Dateisystem per Default mit der read-only Option gemounted. Wenn man also den Inhalt von ~pi/effects.d verändern will, muss man folgende Befehle benutzen
$ sudo mount -o remount,rw / $ sudo mount -o remount,ro /
um das Dateisystem einmal read-write und dann hinterher wieder read-only zu remounten.
mount is busy[Bearbeiten]
Falls das remount,ro nicht funktioniert liegt es wahrscheinlich an rsyslog.
$ sudo service rsyslog stop $ sudo mount -o remount,ro /