Archiv:Lichtsteuerung: Difference between revisions

From Chaosdorf Wiki
(ini)
 
m (Hanemile moved page Lichtsteuerung to Archiv:Lichtsteuerung)
 
(54 intermediate revisions by 6 users not shown)
Line 1: Line 1:
{{Project
{{Project
|name=Lichtsteuerung
|name=Lichtsteuerung
|description=blinkenlichten
|description=Verbraucher per Webinterface steuern
|project category=Hardware
|project category=Hardware
|image=dorfmap.png
|image=dorfmap.png
|status=beta
|status=stable
|people=derf
|people={{U|derf}}, {{U|marudor}}
|source=https://github.com/derf/dorfmap{{!}}github
|source=https://github.com/chaosdorf/dorfmap{{!}}github
}}
}}
Benutze <tt>Beleuchtung</tt> mit <tt>Hackspace</tt>.
Lampen, Blinkenlights und weitere Geräte, fernsteuerbar per Automatik, Website und Android-App.
 
== Web ==
 
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].


== Hardware ==
== Hardware ==


Siehe auch: [https://github.com/chaosdorf/]
[[File:Avrshift.png|Generischer SI2C Client|200x200px|thumb|right]]
 
Kernstück des Ganzen ist aktuell {{H|feedback}}, ein Raspberry Pi. An den GPIO-Pins hängt ein Optokopplerboard, um mit den 3V3 des Raspberry 12V-Signale zu schalten. Diese verteilen sich über eine Reihe von Kabeln im Clubraum und enden in 230V-Relais direkt an den zu schaltenden Verbrauchern.


Vorteil von GPIO-Pins ist, dass der Status nicht nur geschrieben, sondern auch jederzeit ausgelesen werden kann. Da es aber nur eine sehr begrenzte Anzahl gibt, werden wir bald auf ein
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.
Schieberegister zurückgreifen und den aktuellen Lichtstatus in Software speichern müssen.


(TODO: Bilder und mehr Details)
Die Schaltspannung der Schieberegister ist 12V und geht wahlweise direkt zum Kleinverbraucher oder zu einem 230V-Relais.


== Software ==
== Software ==


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


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


Die Außenbeleuchtung wird automatisch nach der aktuellen Tageszeit geschaltet. Benutzt wird dazu
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 Perl-Library Astro::Sunrise, die anhand unserer Koordinaten und dem aktuellen Datum recht akkurate Zeiten für Sonnenauf- und -untergang [https://github.com/chaosdorf/outdoor-light-control/blob/master/bin/is_sundown berechnet]. Per [https://github.com/chaosdorf/outdoor-light-control/blob/master/etc/cron 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/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 readonly, alle anderen können durch einen Klick aufs Symbol getoggelt werden.
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.
 
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.
 
Es gibt eine Reihe von Shortcuts, die mehrere Aktionen zusammenfassen. "Shutdown" schaltet z.B. alle Lampen aus und den Raumstatus auf nicht-öffentlich, "Putzen" sorgt für viel Licht, etc.
 
=== 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>.
 
<tt>/get</tt> liefert derzeit auch PNGs. Sie entsprechen den in der Übersicht verwendeten.
 
{| class="wikitable"
! Request
! 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>
| '''action'''=preset, '''preset'''=''preset''
| Schaltet die Lampen wie in ''preset'' angegeben
|-
| GET <tt>/ajax/blinkencontrol</tt>
| '''device'''=''lampe''
| Gibt alle gespeicherten [[Blinkencontrol]]-Animationen (und falls bekannt die aktuell laufende) als JSON zurück
|-
| POST <tt>/ajax/blinkencontrol</tt>
| '''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>
| '''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>
| '''device'''=''lampe'', '''name'''=''name'', '''delete'''=1
| Löscht die Animation ''name'' von ''lampe''
|-
| GET <tt>/ajax/charwrite</tt>
|
| Gibt die möglichen Modi zurück
|-
| POST <tt>/ajax/charwrite</tt>
| '''device'''=''anzeige'', '''text'''=''modus''<nowiki>|</nowiki>''text''
| Setzt modus oder freitext für ''anzeige''
|-
| GET <tt>/ajax/menu</tt>
|
| Gibt die vorhandenen Shortcuts und Presets (siehe <tt>/action</tt>) zurück
|-
| GET <tt>/get/''device''</tt>
|
| 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]
|-
|}
 
== 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.
 
{| class="wikitable"
! Gerät !! Steuerung
|-
| Außenbeleuchtung (Röhre über Tür) || Automatik: Nicht Shutdown && Nacht (+10 Minuten Dämmerung)
|-
| LEDS im Schaufenster || Automatik: Nacht (+30 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
|-
| [[Printer/HP2100]] || Manuell an, automatisch nach 45 Minuten aus
|-
| [[Ladegerät]] || Automatik: An bei Unshutdown, aus bei Shutdown, bleibt an bei Soft Shutdown
|-
| Strom im Hackcenter || Automatik: An bei Unshutdown, aus bei Shutdown, bleibt an bei Soft Shutdown
|}
 
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.
 
Was weiterhin angezeigt wird:
 
* WLAN-APs (readonly, per ping, alle 5 Minuten aktualisiert)
* Server/Embeddedkisten (readonly, per ping, alle 5 Minuten aktualisiert)
 
== Shutdown-Konzept ==
 
Aus Sicht der dorfmap hat der Clubraum drei Modi:
 
* 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 ===
 
* Klick auf <tt>Actions &gt; Shutdown</tt> in [http://dorfmap/ dorfmap] oder dreisekündiges Drücken des schwarzen Tasters am [[Spendenterminal]]
* 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
* Alle anderen angeschlossenen Geräte und Steckdosenleisten werden sofort ausgeschaltet
 
=== Shutdown ausschalten („Unshutdown“) ===
 
* Klick auf <tt>Actions > Unshutdown</tt> oder irgendeine steuerbare Lampe in [http://dorfmap/ dorfmap] oder dreisekündiges Drücken des schwarzen Tasters am [[Spendenterminal]]
* 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
 
=== 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


Es gibt eine Reihe von Shortcuts, die mehrere Aktionen zusammenfassen. "Shutdown" schaltet z.B.
=== Strom einschalten im Shutdown ===
alle Lampen aus und den Raumstatus auf nicht-öffentlich, "Putzen" sorgt für viel Licht, etc.


Todo: Rate-Limiting für Leuchtstoffröhren (damit Spielerei an der dorfmap nicht zu sehr auf die Lebensdauer geht)
* 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

Latest revision as of 20:05, 25 March 2022

Lichtsteuerung stable
Dorfmap.png
Verbraucher per Webinterface steuern
Beteiligt derf, marudor
Quelltext github

Lampen, Blinkenlights und weitere Geräte, fernsteuerbar per Automatik, Website und Android-App.

Web[edit source]

Die Lichtsteuerung findet sich unter dorfmap im Chaosdorfnetz. Das Interface basiert auf React (Oder worauf marudor grade lust hat) und wird von marudor entwickelt. Für sehr alte Geräte (und ggf. Smartphonebrowser) gibt es ein weniger hübsches Legacy-Interface unter dorfmap/m.

Hardware[edit source]

Generischer SI2C Client

Kernstück des Ganzen ist der SI2C-Bus an feedback. Daran hängen die Steuer-AVRs der jeweiligen Geräte und tun (wenn sie mit der richtigen Adresse angesprochen werden) Dinge.

Die Schaltspannung der Schieberegister ist 12V und geht wahlweise direkt zum Kleinverbraucher oder zu einem 230V-Relais.

Software[edit source]

Automatik[edit source]

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 berechnet. Per 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[edit source]

Grundlage ist ein Grundriss des Clubraums. Aus einer 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.

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.

Es gibt eine Reihe von Shortcuts, die mehrere Aktionen zusammenfassen. "Shutdown" schaltet z.B. alle Lampen aus und den Raumstatus auf nicht-öffentlich, "Putzen" sorgt für viel Licht, etc.

API[edit source]

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

/get liefert derzeit auch PNGs. Sie entsprechen den in der Übersicht verwendeten.

Request Parameter Aktion
POST /action action=on|off|toggle, device=lampe Schaltet lampe an / aus, gibt den neuen Status als JSON zurück
POST /action action=shortcut, shortcut=aktion Führt aktion aus (z.B. shutdown oder amps on)
POST /action action=preset, preset=preset Schaltet die Lampen wie in preset angegeben
GET /ajax/blinkencontrol device=lampe Gibt alle gespeicherten Blinkencontrol-Animationen (und falls bekannt die aktuell laufende) als JSON zurück
POST /ajax/blinkencontrol device=lampe, raw_string=animation Setzt animation auf lampe. Format ist delay1,red1,green1,blue1 delay2,red2,green2,blue2 [...], siehe Blinkencontrol
POST /ajax/blinkencontrol 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 /ajax/blinkencontrol device=lampe, name=name, delete=1 Löscht die Animation name von lampe
GET /ajax/charwrite Gibt die möglichen Modi zurück
POST /ajax/charwrite device=anzeige, text=modus|text Setzt modus oder freitext für anzeige
GET /ajax/menu Gibt die vorhandenen Shortcuts und Presets (siehe /action) zurück
GET /get/device Gibt den aktuellen Status von device zurück
GET /list/all Gibt alle Geräte mit Koordinaten, Status, Beschreibung etc. zurück
GET /space_api Hackerspacestatus für die spaceAPI

Angeschlossene Geräte[edit source]

Ziemlich viele, eine detaillierte Liste findet sich unter feedback (und zwei/drei weitere unter donationprint). Alle hier nicht aufgeführten haben keine besonderen Eigenschaften, d.h. sie werden von Hand an-/ausgeschaltet und gehen beim Shutdown aus.

Gerät Steuerung
Außenbeleuchtung (Röhre über Tür) Automatik: Nicht Shutdown && Nacht (+10 Minuten Dämmerung)
LEDS im Schaufenster Automatik: Nacht (+30 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
Printer/HP2100 Manuell an, automatisch nach 45 Minuten aus
Ladegerät Automatik: An bei Unshutdown, aus bei Shutdown, bleibt an bei Soft Shutdown
Strom im Hackcenter Automatik: An bei Unshutdown, aus bei Shutdown, bleibt an bei Soft Shutdown

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.

Was weiterhin angezeigt wird:

  • WLAN-APs (readonly, per ping, alle 5 Minuten aktualisiert)
  • Server/Embeddedkisten (readonly, per ping, alle 5 Minuten aktualisiert)

Shutdown-Konzept[edit source]

Aus Sicht der dorfmap hat der Clubraum drei Modi:

  • 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[edit source]

  • Klick auf Actions > Shutdown in dorfmap oder dreisekündiges Drücken des schwarzen Tasters am Spendenterminal
  • 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
  • Alle anderen angeschlossenen Geräte und Steckdosenleisten werden sofort ausgeschaltet

Shutdown ausschalten („Unshutdown“)[edit source]

  • Klick auf Actions > Unshutdown oder irgendeine steuerbare Lampe in dorfmap oder dreisekündiges Drücken des schwarzen Tasters am Spendenterminal
  • 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

Shutdown ohne Stromabschaltung („soft shutdown“)[edit source]

  • Klick auf Actions > soft shutdown in 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[edit source]

  • Klick auf Actions > power off in 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[edit source]

  • Klick auf Layers > power in dorfmap und Auswahl einer / mehrerer Steckdosenleisten
  • Strom an den ausgewählten Leisten geht an
  • Licht bleibt aus, Raumstates wechselt von shutdown zu soft shutdown