Lichtsteuerung Teil 3: Bus / Firmware

Ein Thema hätten wir noch: Es gibt Hardware und ein tolles Webinterface, aber wie kommen die Signale dann vom Webinterface zum Schieberegister? Und was macht man, wenn man feststellt, dass man neben Lampen auch noch RGB-Streifen, 7-Segment-Anzeigen und Weiteres ansteuern möchte?

Ohne besondere Vorkehrungen passen nämlich nicht sehr viele Geräte an einen RasPi: Es gibt 10-12 nutzbare GPIO Pins, d.h. bei 2 Pins (Clock + Data) pro Endgerät ist Platz für 5-6 Geräte. Wenn man das Taktsignal gemeinsam benutzt, werden daraus sogar 9-11.
Das mag ausreichen, hat aber immer noch das Problem, dass es nicht skaliert und man für jedes neue AVR-Board ein zusätzliches Kabel vom RasPi bis zum Board ziehen muss.

Also: Warum nicht ein Datenbus?
„Lichtsteuerung Teil 3: Bus / Firmware“ weiterlesen

Lichtsteuerung Teil 2: Software

Nachdem der letzte Eintrag nur ein paar Hardwaredinge beleuchtet hat, geht es jetzt um die Software, genaugenommen das Webinterface und ein paar Zusatzskripte.
Die Dateien liegen wie alles andere im dorfmap repository und einige Helfer in dorfmap-deb.

Weboberfläche

dorfmap ist Perlcode mit Mojolicious. Zeigt im Browser einen Grundriss des Chaosdorf an und verteilt darauf Symbole für Lampen, Drucker, Türstatus und weitere potentiell interessante Dinge. Die Koordinaten der Geräte sind als Pixel-Offsets (ja, eigentlich möchte man relative Angaben benutzen ;-) ) zusammen mit Steuerungsfoo in einer coordinates-Datei angegeben.

Status anzeigen

Ausgelesen wird entweder direkt aus dem GPIO-Pin (per /sys/class/gpio) oder Caches für die Schieberegister in /tmp. Einige Sonderfälle (z.B. Hosts, die nicht steuerbar sind) werden von einem separaten Skript alle zwei Minuten überprüft und zwischengespeichert.

Status ändern

Per Default wird getoggelt, d.h. ein Klick auf eine eingeschaltete Lampe schaltet sie aus und ein Klick auf eine ausgeschaltete Lampe schaltet sie ein. Einzige Ausnahme ist bei uns die Außenbeleuchtung, die anhand der Tageszeit automatisch gesteuert wird, so dass die dorfmap nur die Automatik ein- bzw. ausschaltet.

API

Ist auch vorhanden, in JSON und plaintext. Dazu bietet sich die
Dokumentation im Wiki an.

Das Webinterface ist inzwischen recht umfangreich, aber einigermaßen portabel. Angepasst werden müssen in erster Linie der Grundriss und die coordinates-Datei, und im Falle von Schieberegistern / anderen Konstruktionen, die nicht direkt auf GPIO-Pins zugreifen, noch die system-Aufrufe in index.pl (avrshift-donationprint etc.)

Pythonfoo Crashkurs

Heute gab es in der wöchentlichen Veranstaltung Pythonfoo von Bison einen spontanen Crashkurs in der Programmiersprache Python. Den anwesenden Pythoninteressierten, wurden Grundlagen wie der Befehl Print, Variablen, Funktionen, IF-Bedingungen und Diverses mehr bis zur Schleifenprogrammierung näher gebracht. Da die Veranstaltung nicht angekündigt war, aber sehr gut angekommen ist, wird der Vortrag zum Pythonfoo am nächsten Donnerstag den 04.04.2013 wiederholt. Weitere Vorträge für den Einstieg in Python sind bereits in Vorbereitung. Alle die speziell in Python einsteigen möchten oder das erste mal eine Programmiersprache erlernen wollen sind herzlich eingeladen an dem Crashkurs Teil zu nehmen. Die offenen Gespräche vor und nach den Vorträgen und das gegenseitige Coachen führen zu schnelleren Erfolgserlebnissen als das einsame Studium @ HOME. Wie immer kann man währenddessen seine Nerven mit einer Clubmate stimmulieren, eigene Pythonprojekte mitbringen oder Vorstellen und die Netzwerkinfrastruktur unserer Clubräume kennenlernen.

 

Der Vortragscode steht in Github  zum Download zur Verfügung.

image/svg+xml Codeberg logo Robert Martinez Codeberg and the Codeberg Logo are trademarks of Codeberg e.V. 2020-04-09 Codeberg e.V. codeberg.org