Python Crashkurs-2

Und wie versprochen setzen wir unsere Reihe fort. An den nachfolgend genannten Terminen wird Oerb die Python Crashkursreihe in drei Terminen von ca. einer Stunde fortsetzen. Beginn ist jeweils 19:00 Uhr. Die drei Vortäge führen grundlegend in die objektorientierte Programmierung (OOP) ein.  Die Vorträge finden im Rahmen des Pythonfoo statt, welches jeden Donnerstag im Chaosdorf stattfindet.

02.05. – Do. – Klassen, Vererbung und Import

16.05. – Do. – Typenprüfung, Properties, Decoratoren, Generatoren, Methoden um Moduleigenschaften heraus zu finden

23.05. – Do. – Vorführung der Entwicklung einer Objektsturktur on the Fly mit anschließender Diskussion über den Sinn und Einsatzbereich von OOP

Die Veranstaltungen sind wie immer kostenfrei, auch wenn Spenden gerne gesehen sind. Es gibt ausreichend Getränke und häufig haben wir Glück und werden aus der Küche mit warmen, veganen Speisen versorgt.

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.)

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