Editing Archiv:Lichtsteuerung

From Chaosdorf Wiki
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.

Latest revision Your text
Line 1: Line 1:
{{Project
{{Project
|name=Lichtsteuerung
|name=Lichtsteuerung
|description=Verbraucher per Webinterface steuern
|description=blinkenlichten
|project category=Hardware
|project category=Hardware
|image=dorfmap.png
|image=dorfmap.png
|status=stable
|status=stable
|people={{U|derf}}, {{U|marudor}}
|people=derf
|source=https://github.com/chaosdorf/dorfmap{{!}}github
|source=https://github.com/derf/dorfmap{{!}}github
}}
}}
Lampen, Blinkenlights und weitere Geräte, fernsteuerbar per Automatik, Website und Android-App.
Benutze <tt>Beleuchtung</tt> mit <tt>Hackspace</tt>.


== Web ==
== Hardware ==


Die Lichtsteuerung findet sich unter [http://dorfmap/ dorfmap] im Chaosdorfnetz. Das Interface basiert auf React (Oder worauf {{U|marudor}} grade lust hat) und wird von {{U|marudor}} entwickelt. Für sehr alte Geräte (und ggf. Smartphonebrowser) gibt es ein weniger hübsches Legacy-Interface unter [http://dorfmap/m dorfmap/m].
[[File:Optokopplerboard1.png|Optokoppler|200x200px|framed|right]]
[[File:Chaosdoorlicht.png|Außenbeleuchtung|200x200px|framed|right]]


== Hardware ==
Kernstück des Ganzen ist aktuell {{H|feedback}}, ein Raspberry Pi. Jeder GPIO-Pin schaltet einen Verbraucher. Schaltsignale kommen mit 3V3 (maximale Last 3mA ja Pin) aus {{H|feedback}} und schalten über Optokoppler + Transistor 12V (werden vom Türnetzteil abgegriffen). Die 12V gehen über diverse Kabel zu den jeweiligen Verbrauchen und schalten sie entweder direkt (bei Kleinverbrauchern in der Schleuse) oder über 230V-Relais.


[[File:Avrshift.png|Generischer SI2C Client|200x200px|thumb|right]]
=== avrshift ===


Kernstück des Ganzen ist der [[SI2C]]-Bus an {{H|feedback}}. Daran hängen die Steuer-AVRs der jeweiligen Geräte und tun (wenn sie mit der richtigen Adresse angesprochen werden) Dinge.
Es gibt nur eine begrenzte Zahl an GPIO-Pins, die teilweise auch für andere Dinge gebraucht werden. Da auch normale Schieberegister schon vier Inputpins brauchen, wird an {{H|donationprint}} ein AVR mit zwei Eingabepins als Software-Schieberegister verwendet. Die [https://github.com/derf/dorfmap/tree/master/avrshift Firmware] und [https://github.com/derf/dorfmap/tree/master/avrshiftd Software] zum ansteuern liegen jeweils auf Github. Das Protokoll ist an I²C angelehnt und sieht folgendermaßen aus:


Die Schaltspannung der Schieberegister ist 12V und geht wahlweise direkt zum Kleinverbraucher oder zu einem 230V-Relais.
{| class="wikitable"
! CLOCK !! DATA !! Aktion
|-
| ↑ || <tt>X</tt> || Bit <tt>X</tt> von rechts (als Least Significant Bit) ins Register schieben
|-
| ↓ || 1 || Aktuelle Registerwerte auf Ausgänge übernehmen
|-
| ↓ || 0 || ''Keine''
|}


== Software ==
== Software ==


* [https://github.com/chaosdorf/dorfmap dorfmap]
* [https://github.com/derf/dorfmap dorfmap]
* [https://github.com/chaosdorf/dorfmap-deb dorfmap-deb] (Helfer)
* [https://github.com/derf/dorfmap-deb dorfmap-deb] (Helfer)


=== Automatik ===
=== Automatik ===


Die Außenbeleuchtung wird automatisch nach der aktuellen Tageszeit geschaltet. Benutzt wird dazu die Perl-Library Astro::Sunrise, die anhand unserer Koordinaten und dem aktuellen Datum recht akkurate Zeiten für Sonnenauf- und -untergang [https://github.com/chaosdorf/dorfmap-deb/blob/master/bin/is_sundown berechnet]. Per [https://github.com/chaosdorf/dorfmap-deb/blob/master/debian/dorfmap-deb.cron.d cronjob] wird alle 6 Minuten überprüft, ob Nacht ist oder nicht, und entsprechend die Beleuchtung geschaltet.
Die Außenbeleuchtung wird automatisch nach der aktuellen Tageszeit geschaltet. Benutzt wird dazu die Perl-Library Astro::Sunrise, die anhand unserer Koordinaten und dem aktuellen Datum recht akkurate Zeiten für Sonnenauf- und -untergang [https://github.com/derf/dorfmap-deb/blob/master/bin/is_sundown berechnet]. Per [https://github.com/derf/dorfmap-deb/blob/master/debian/dorfmap-deb.cron.d cronjob] wird alle 6 Minuten überprüft, ob Nacht ist oder nicht, und entsprechend die Beleuchtung geschaltet.
 
Der [[Printer/HP2100]] und die [[Windowgarden]]-Pumpe werden nach einiger Zeit automatisch abgeschaltet.


=== Manuell ===
=== Manuell ===


Grundlage ist ein [https://github.com/chaosdorf/dorfmap/blob/master/public/images/map.png Grundriss] des Clubraums. Aus einer [https://github.com/chaosdorf/dorfmap-deb/blob/master/etc/dorfmap/coordinates Koordinatendatei] wird ausgelesen, wo welche Lampe ist, und abhängig von ihrem Status ein entsprechendes Symbol angezeigt. Bei automatisch gesteuerten Lampen wird die Automatik gesteuert, alle anderen können durch einen Klick aufs Symbol getoggelt werden.
Grundlage ist ein [https://github.com/derf/dorfmap/blob/master/public/map.png Grundriss] des Clubraums. Aus einer [https://github.com/derf/dorfmap/blob/master/coordinates Koordinatendatei] wird ausgelesen, wo welche Lampe ist, und abhängig von ihrem Status ein entsprechendes Symbol angezeigt. Automatisch gesteuerte Lampen sind read-only, alle anderen können durch einen Klick aufs Symbol getoggelt werden.


Weil die Karte eh schon da ist, wird außerdem der Status von einigen Servern / Embedded Hosts, unseren WLAN-APs und den Druckern angezeigt. Der ist sinnvollerweise auch read-only, die Hosts werden einfach angepingt. Eingeschaltete Hosts sind grün, ausgeschaltete grau oder rot.
Weil die Karte eh schon da ist, wird außerdem der Status von einigen Servern / Embedded Hosts, unseren WLAN-APs und den Druckern angezeigt. Der ist sinnvollerweise auch read-only, die Hosts werden einfach angepingt. Eingeschaltete Hosts sind grün, ausgeschaltete grau oder rot.
Line 43: Line 50:
=== API ===
=== API ===


Es existiert eine (noch nicht finale) JSON-API. In einigen Fällen wird auch Textausgabe unterstützt. Für Textformat <tt>.txt</tt> an Anfragen anhängen (oder <tt>curl -H 'Accept: text/plain'</tt> benutzen), für JSON entsprechend <tt>.json</tt> bzw. <tt>application/json</tt>.
Es existiert eine API, unterstützt wird sowohl ein einfaches Textformat (z.B. für Shellskripte) als auch JSON. Für Textformat <tt>.txt</tt> an Anfragen anhängen (oder <tt>curl -H 'Accept: text/plain'</tt> benutzen), für JSON entsprechend <tt>.json</tt> bzw. <tt>application/json</tt>.


<tt>/get</tt> liefert derzeit auch PNGs. Sie entsprechen den in der Übersicht verwendeten.
<tt>/get</tt> kann auch PNGs liefern, sie entsprechen den in der Übersicht sichtbaren.


{| class="wikitable"
{| class="wikitable"
! Request
! Request !! Aktion !! Rückgabe
! Parameter
! Aktion
|-
| POST <tt>/action</tt>
| '''action'''=<nowiki>on|off|toggle</nowiki>, '''device'''=''lampe''
| Schaltet ''lampe'' an / aus, gibt den neuen Status als JSON zurück
|-
| POST <tt>/action</tt>
| '''action'''=shortcut, '''shortcut'''=''aktion''
| Führt ''aktion'' aus (z.B. shutdown oder amps on)
|-
|-
| POST <tt>/action</tt>
| <tt>/get/'''id'''</tt> || Keine || Aktueller Status des Verbrauchers (1 == an, 0 == aus, -1 == unbekannt)
| '''action'''=preset, '''preset'''=''preset''
| Schaltet die Lampen wie in ''preset'' angegeben
|-
|-
| GET <tt>/ajax/blinkencontrol</tt>
| <tt>/off/'''id'''</tt> || Schaltet Verbraucher aus || Beliebig
| '''device'''=''lampe''
| Gibt alle gespeicherten [[Blinkencontrol]]-Animationen (und falls bekannt die aktuell laufende) als JSON zurück
|-
|-
| POST <tt>/ajax/blinkencontrol</tt>
| <tt>/on/'''id'''</tt> || Schaltet Verbraucher an || Beliebig
| '''device'''=''lampe'', '''raw_string'''=''animation''
| Setzt ''animation'' auf ''lampe''. Format ist <tt>delay1,red1,green1,blue1 delay2,red2,green2,blue2</tt> <nowiki>[...]</nowiki>, siehe [[Blinkencontrol]]
|-
|-
| POST <tt>/ajax/blinkencontrol</tt>
| <tt>/list/all</tt> || Keine || Liste aller Verbraucher mit Name, Typ, Status, Lesbar, Schreibbar
| '''device'''=''lampe'', '''raw_string'''=''animation'', '''name'''=''name''
| Setzt ''animation'' auf ''lampe'' und speichert sie unter ''name'' ab, so dass sie im Webinterface ausgewählt werden kann.
|-
|-
| POST <tt>/ajax/blinkencontrol</tt>
| <tt>/list/readables</tt> || Keine || Liste aller Verbraucher mit auslesbarem Status
| '''device'''=''lampe'', '''name'''=''name'', '''delete'''=1
| Löscht die Animation ''name'' von ''lampe''
|-
|-
| GET <tt>/ajax/charwrite</tt>
| <tt>/list/writables</tt> || Keine || Liste aller Verbraucher mit schreibbarem Status
|
| Gibt die möglichen Modi zurück
|-
|-
| POST <tt>/ajax/charwrite</tt>
| <tt>/shutdown</tt> || Setzt Raum in Shutdownmodus (s.u.) || Beliebig
| '''device'''=''anzeige'', '''text'''=''modus''<nowiki>|</nowiki>''text''
| Setzt modus oder freitext für ''anzeige''
|-
|-
| GET <tt>/ajax/menu</tt>
| <tt>/toggle/'''id'''</tt> || Schaltet Verbraucher von An → Aus bzw. Aus → An || Beliebig
|
| Gibt die vorhandenen Shortcuts und Presets (siehe <tt>/action</tt>) zurück
|-
|-
| GET <tt>/get/''device''</tt>
| <tt>/unshutdown</tt> || Setzt Raum in Nicht-Shutdownmodus (s.u.) || Beliebig
|
| Gibt den aktuellen Status von ''device'' zurück
|-
| GET <tt>/list/all</tt>
|
| Gibt alle Geräte mit Koordinaten, Status, Beschreibung etc. zurück
|-
| GET <tt>/space_api</tt>
|
| Hackerspacestatus für die [http://spaceapi.net/ spaceAPI]
|-
|-
|}
|}
Line 108: Line 79:
== Angeschlossene Geräte ==
== Angeschlossene Geräte ==


Ziemlich viele, eine detaillierte Liste findet sich unter {{H|feedback}} (und zwei/drei weitere unter {{H|donationprint}}). Alle hier nicht aufgeführten haben keine besonderen Eigenschaften, d.h. sie werden von Hand an-/ausgeschaltet und gehen beim Shutdown aus.
Die genaue Zuordnung zwischen Kabel / GPIO-Pin und Gerät ist auf {{H|donationprint}} und {{H|feedback}} dokumentiert.


{| class="wikitable"
{| class="wikitable"
! Gerät !! Steuerung
! Gerät !! Steuerung
|-
|-
| Außenbeleuchtung (Röhre über Tür) || Automatik: Nicht Shutdown && Nacht (+10 Minuten Dämmerung)
| Außenbeleuchtung (Röhre über Tür) || Automatik: Nicht Shutdown && Nacht
|-
|-
| LEDS im Schaufenster || Automatik: Nacht (+30 Minuten Dämmerung)
| LEDS im Schaufenster || Automatik: Nacht (+90 Minuten Dämmerung)
|-
|-
| LED-Leiste über Chaosdorflogo, Schleuse || Automatik: Nicht Shutdown && Nacht (+90 Minuten Dämmerung)
| LED-Leiste über Chaosdorflogo, Schleuse || Automatik: Nicht Shutdown && Nacht (+90 Minuten Dämmerung)
|-
|-
| Luft-/Wasserpumpe [[Windowgarden]], Lounge || Manuell an, automatisch nach 5 Minuten aus
| RGB-LED-Leiste, Lounge || Manuell: [[Blinkencontrol]]
|-
|-
| [[Printer/HP2100]] || Manuell an, automatisch nach 45 Minuten aus
| Blassblaue LED-Röhre, Hackcenter || Manuell
|-
|-
| [[Ladegerät]] || Automatik: An bei Unshutdown, aus bei Shutdown, bleibt an bei Soft Shutdown
| Lampe im eMac-Gehäuse, Hackcenter || Manuell
|-
|-
| Strom im Hackcenter || Automatik: An bei Unshutdown, aus bei Shutdown, bleibt an bei Soft Shutdown
| LED-Leuchten-Reihe, Hackcenter || Manuell
|-
| Blauer LED-Streifen, Hackcenter || Manuell
|-
| Warmweiße LED-Spots, Hackcenter || Manuell
|-
| Helle weiße Doppelröhre, Hackcenter || Manuell
|}
|}


Die Automatik der Außenbeleuchtung lässt sich durch Klick auf die Lampe an / aus schalten, nach maximal sechs Minuten wird die Änderung an der Lampe übernommen. Im Gegensatz zu anderen Aktionen ändert das auch nichts am Dorf-Shutdownstatus. Im Webinterface steht "A" für Automatik, "X" für keine Automatik.
Die Automatik der Außenbeleuchtung lässt sich durch klick auf die Lampe an / aus schalten. Ausschalten passiert sofort, Einschalten dauert 1 bis 6 Minuten. Im Gegensatz zu anderen Aktionen ändert das auch nichts am Dorf-Shutdownstatus. Im Webinterface steht "A" für Automatik, "X" für keine Automatik.


Was weiterhin angezeigt wird:
Was weiterhin angezeigt wird:


* Drucker (readonly, per ping, alle 5 Minuten aktualisiert)
* WLAN-APs (readonly, per ping, alle 5 Minuten aktualisiert)
* WLAN-APs (readonly, per ping, alle 5 Minuten aktualisiert)
* Server/Embeddedkisten (readonly, per ping, alle 5 Minuten aktualisiert)
* Server (readonly, per ping, alle 5 Minuten aktualisiert)
* Türstatus (readonly, alle 5 Minuten aktualisiert)


== Shutdown-Konzept ==
== Shutdown-Konzept ==


Aus Sicht der dorfmap hat der Clubraum drei Modi:
Per Default (z.B. nach einem Stromausfall) befindet sich das Dorf im Shutdown.
 
* shutdown (alles ist aus, öffentlicher Status "Clubraum zu")
* soft shutdown (Licht ist aus, einzelne Steckdosenleisten können an bleiben, öffentlicher Status "Clubraum zu")
* Normalbetrieb (Öffentlicher Status public/private abhängig von [[Chaosdoor]])
 
Per Default (z.B. nach einem Stromausfall) befindet sich das Dorf im Shutdown. Der Shutdown / Nicht-Shutdown Status ist jederzeit an den Lampen am [[Spendenterminal]] sichtbar.


=== Shutdown einschalten ===
=== Shutdown einschalten ===


* Klick auf <tt>Actions &gt; Shutdown</tt> in [http://dorfmap/ dorfmap] oder dreisekündiges Drücken des schwarzen Tasters am [[Spendenterminal]]
* Klick auf Shutdown in [http://dorfmap/ dorfmap] oder dreisekündiges Drücken des schwarzen Tasters am [[Spendenterminal]] (bis die grüne LED ausgeht)
* Beleuchtung im Hackcenter geht sofort aus
* Beleuchtung in der Schleuse (Logo und über der Tür) geht nach 1 bis 6 Minuten aus
* Beleuchtung in der Schleuse (Logo und über der Tür) geht nach 1 bis 6 Minuten aus
* Beleuchtung im Schaufenster leuchtet weiterhin, falls Nacht ist
* Beleuchtung im Schaufenster leuchtet weiterhin, falls Nacht ist
* Alle anderen angeschlossenen Geräte und Steckdosenleisten werden sofort ausgeschaltet


=== Shutdown ausschalten („Unshutdown“) ===
=== Shutdown ausschalten ===


* Klick auf <tt>Actions > Unshutdown</tt> oder irgendeine steuerbare Lampe in [http://dorfmap/ dorfmap] oder dreisekündiges Drücken des schwarzen Tasters am [[Spendenterminal]]
* Klick auf Unshutdown oder irgendeine steuerbare Lampe in [http://dorfmap/ dorfmap] oder dreisekündiges Drücken des schwarzen Tasters am [[Spendenterminal]] (bis die grüne LED angeht)
* Falls eine Lampe angeklickt wurde, wird diese eingeschaltet
* Falls eine Lampe angeklickt wurde, wird diese eingeschaltet
* Die Stromversorgung im Clubraum wird eingeschaltet
* Beleuchtung in der Schleuse (Logo und über der Tür) geht nach 1 bis 6 Minuten an, falls Nacht ist; alternativ sobald die Sonne untergegangen ist
* Beleuchtung in der Schleuse (Logo und über der Tür) geht nach 1 bis 6 Minuten an, falls Nacht ist; alternativ sobald die Sonne untergegangen ist
=== Shutdown ohne Stromabschaltung („soft shutdown“) ===
* Klick auf <tt>Actions &gt; soft shutdown</tt> in [http://dorfmap/ dorfmap] oder dreisekündiges Drücken des linken Tasters am [[Spendenterminal]]
* Logo-/Tür-/Schaufenster-Beleuchtung siehe Shutdown
* Licht geht aus
* Stromversorgung (Steckdosenleisten im Hackcenter) bleibt an
=== Strom ausschalten im Shutdown ===
* Klick auf <tt>Actions &gt; power off</tt> in [http://dorfmap/ dorfmap] oder dreisekündiges Drücken des linken Tasters am [[Spendenterminal]]
* Strom geht sofort aus
* Status wechselt von soft shutdown zu shutdown
=== Strom einschalten im Shutdown ===
* Klick auf <tt>Layers &gt; power</tt> in [http://dorfmap/ dorfmap] und Auswahl einer / mehrerer Steckdosenleisten
* Strom an den ausgewählten Leisten geht an
* Licht bleibt aus, Raumstates wechselt von shutdown zu soft shutdown
Please note that all contributions to Chaosdorf Wiki are considered to be released under the Attribution 3.0 Unported (see Chaosdorf Wiki:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!
Cancel Editing help (opens in new window)