add stuff from current page

This commit is contained in:
Elouin 2023-06-05 22:23:49 +02:00
parent bd7cbf3c19
commit b0c1fb400f
65 changed files with 3758 additions and 0 deletions

73
iot/anforderungen.md Normal file
View file

@ -0,0 +1,73 @@
+++
title = "IoT: Anforderungen"
+++
Entwurf - möglichst kein Feature Creep!
## Sensoren / Aktoren = Knoten
- Knoten laufen mit Batterieversorgung
- Knoten laufen mit Netz, wenn Spannung verfügbar, oder Knoten immer
erreichbar sein muß (Für Aktoren wie Heizung)
- Hardware und Software für Batterie- und Netzbetrieb identisch,
Auswahl durch Jumper
- Batterielebensdauer ~ 1 a
- Experiment mit Nachladung der Batterien via PV?
- Knoten erfassen
- Ihren Batteriestatus
- Die Wlan Feldstärke
- Mechanische Zustände
- Temperaturen (optional)
- Wasser (optional)
- Stromverbrauch / Aktivität von 230 V Verbrauchern (optional)
- (Batterie-)Knoten schlafen immer, wachen auf durch
- mechanischen Vorgang (Tür wird geöffnet)
- Schwellwertüberschreitung (Helligkeit \< Schwellwert) (optional,
Anwendungsfall noch offen, Detektion offener Fenster?)
- Knoten übertragen entweder
- nur eine Transition (Lichtschranke durchschritten, Klingeltaste
gedrückt) => einfacher Aufbau, ESP im
DeepSleep, oder
- Transition und neuen Status (Tür wurde bewegt, ist jetzt offen)
=> Attiny nötig um *Wechsel* zu erkennen, *oder* Lösung mit zwei Schaltern
- Knoten sind billig
## Infrastruktur / Vernetzung
- Denkbar: Ein separates Wlan nur für IoT ohne Kontakt zum Internet
- lokale Zentrale im Space ist in diesem separaten Netz
## Zentrale / API
- Es gibt eine lokale Zentrale im Space, die die Knotendaten
einsammelt und verteilt (MQTT Broker)
- Die Sensorbenamung folgt einem Regelwerk: mögliche Messwerte,
Raumbezeichner..
## Verarbeitung
- Es kann (einen) Knoten geben, welcher Daten vom Broker erhält
(abonniert) und verarbeitet, und der
- Die Daten verknüpft (Heizung = an & Fenster = auf),
(Kühlschrank > 5 min geöffnet) und Aktionen an die Knoten sendet
- Die Daten (zyklisch) an die Space API "draussen" meldet
- Befehle entgegennimmt (IRC, HTTP, ...) und an die Knoten sendet
- Eine Hardware-Benutzerschnittstelle zur Verfügung stellt
- und leitet daraus ggf. Aktionen ab (Anzeige an zentralem
Terminal im Space, Mail an Paten) (Space wurde verlassen /
abgeschlossen => Heizungen runterfahren)
- Mobile Knoten (aka Fernsteuerungen) denkbar mit festgelegten
Funktionen
## Aktoren / Melder
- Die Daten der Space Knoten finden Aufnahme in den !Status im IRC
- Knotenpaten bekommen Mail wenn Batterie alle
- Anzeige an der Ausgangstür: Ein Blick - alle Knoten auf grün, Space
kann geschlossen werden, und / oder akustische Benachrichtigung wenn
noch ein Knoten auf rot steht
- Aktionen triggern (Anzeigen am Space-Ausgang: "Dachluken offen",
Klopapier alle", "Herd noch an")
- Triggern von Einträgen in Einkaufslisten (Klopapier) oder
Bestellungen (Bier? ;)
- Reaktionen auf besondere Zustände (Einbruch o.ä.) Mail, SMS ...

25
iot/beschaffung.md Normal file
View file

@ -0,0 +1,25 @@
+++
title = "IoT: Beschaffung"
+++
- Geeignete Mikro- / Reed-Schalter für die entspr. Aufgaben
- Fenster / Dachluke / Kühlschrank
- <https://www.reichelt.de/Schnappschalter-Endschalter/MAR-1006-1001/3/index.html?ACTION=3&GROUPID=7599&ARTICLE=166850&OFFSET=75&>
- Schnappschalter 1xUM 10A-400VAC Rollenhebel 2,99 €, Vorlaufweg
max. 3,9 mm, Nachlaufweg min. 1,6 mm (Große Wege - einfache
Justage)
- Beim Chinamann für
[1/10](https://www.aliexpress.com/item/10-Pcs-Roller-Lever-Arm-SPDT-NO-NC-Momentary-Micro-Switches-V-156-1C25/32643444249.html)
Preis oder für
[1/20](https://www.aliexpress.com/item/Wholesale-10pcs-lot-New-Micro-Roller-Lever-Arm-Normally-Open-Close-Limit-Switch-KW12-3/32613291715.html)
- Reed Switches NO, für Öffnerkette am Aussenfenstern (Erfordert Pullup weil kein Wechsler)
[1](https://www.aliexpress.com/item/5pcs-Adhesived-Security-Door-Window-Magnetic-Contact-Reed-Switch-NO/32795672550.html),
[2](https://www.aliexpress.com/item/Free-Shipping-10pc-Normally-open-reed-switch-proximity-switches-plastic-package-with-mounting-hole-and-wire/1342008298.html).
- Reed Wechsler, selber in Gehäuse bauen?
- Überlegung: Betätigungsstück für Mikroschalter am Fenster etc auf
- <https://www.reichelt.de/Kabelbinder-Montagesockel/KAB-SOCKEL-4-8HS/3/index.html?ACTION=3&GROUPID=5737&ARTICLE=45711&OFFSET=75&>
- Kabelsockel für Binder 4,8mm, sw 100er-Pack befestigt? Andere Lösung?
- Geschirmte Leitung Schalter -\> IoD Knoten
- <https://www.reichelt.de/Mikrofon-Videoleitung/ML-209-25/3/index.html?ACTION=3&GROUPID=5032&ARTICLE=13309&OFFSET=75&>
Mikrofonleitung, 2x0,08mm², rund, 25m-Ring 14,95 €. (µC Eingang
Hochohmig wegen Verzicht auf Pullup/down)

10
iot/etat.md Normal file
View file

@ -0,0 +1,10 @@
+++
title = "IoT: Etat"
+++
Gesamtetat 250 EUR
- Reichelt "2017-02-IoT" 49,17 EUR (Prototypenmaterial)
- Aliexpress 22.01.2017, 17,41 EUR (10 x ESP)
- Reichelt "IoD V0.4 x 20" 133,81 EUR (Material für 20 Knoten. n für
Space, n für Typ_o, n für And..., n für \[Yourname\])

190
iot/hardware.md Normal file
View file

@ -0,0 +1,190 @@
+++
title = "IoT: Hardware"
+++
Unter-Seiten:
* [Change Requests](change-requests/)
* [Messungen](messungen/)
* [Platine Löten](platine-löten/)
*Entwurf*
Knoten (= Sensoren oder Aktoren)
## Brainstroming
<!-- [{{attachment:IoD_V0.3.jpg|attachment:IoD_V0.3.jpg|width="600"}}](attachment:IoD_V0.3.jpg) -->
- ESP8266-01 (billigster Typ), ggf. [Whitty
Cloud](http://www.schatenseite.de/2016/04/22/esp8266-witty-cloud-modul/)
Modul (schick)
- Batterieversorgung Alkaline / Eneloop (ggf. ergänzt durch PV)
- Jumper für Dauerstrom (Platz für Low Drop Regler vorsehen?)
- Stromsparen durch
- Deepsleep (~ 200 µA)
- *oder* separater Attiny zum Aufwecken (Interrupt on Port change) (~ 0,2 µA)
- *oder* Taster in der Vcc Leitung, der von MOSFET durch ESP
überbrückt wird (vermutlich \<\< 0,1 µA)
- ESP Module möglichst ohne Modifikation verwenden (Ausser LED für
Betriebsspannungsanzeige auslöten)
- Einfache Gehäusemontage (Tropfenlöcher zum Einhängen o.Ä.)
- Vorhandene Gehäuse? Diese zweiteiligen Schraubdosen von DMB?
- Einfacher Batterietausch
## Schaltung
<!-- {{attachment:knoten-sch0.4.png}} -->
## Funktion
<!-- [{{attachment:20170125_164320.jpg|attachment:20170125_164320.jpg|width="400"}}In](attachment:20170125_164320.jpg) -->
In einem ersten Muster haben wir den ESP in Ruhe im Sleep Mode betrieben,
und über seine Reset Leitung geweckt (In [Messungen](messungen/)
Details zur Akkulaufzeit). An einer Tür ist dazu ein Schleifkontakt
nötig, der sowohl bei geschlossener als auch bei offener Tür nicht
aktiviert ist, und nur z.B. während der Öffnungsbewegung ein mal
aktiviert wird, und den ESP damit weckt.
Nachteil: Der ESP weiss nicht, ober die Tür nach dem schließen des
Kontaktes offen oder geschlossen ist. Gut geeignet ist diese Methode
jedoch zb. als Einbruchsalarm. Leider kann man den ESP nicht über Port
Change Interrupts wecken. Deswegen haben wir den Attiny vorgesehen, der
sowohl bei steigender als auch bei fallender Flanke geweckt wird, und
dem ESP die aktuelle Schalterstellung melden kann. Als weiteren Vorteil
bekommen wir so einen deutlich geringeren Ruhestromverbrauch, da der ESP
komplett abgeschaltet werden kann - nur der Attiny bleibt im Deep Sleep
an der Batterie.
## Betriebszustände
Ruhezustand:
- Der Attiny befindet sich im Sleep-Mode
- ESP ist abgeschaltet
Aufwachen:
- Attiny wird durch Interrupt on Port Change aufgeweckt
- und schaltet über den Mosfet den ESP ein
Daten übertragen:
- Der ESP stellt mit einer festen IP-Adresse (Schneller als DNS) eine
Verbindung zum Access Point her
- und überträgt die aktuelle Schalterstellung des Sensors, die er über
SWITCH_STATE vom Attiny gemeldet bekommt, zum Server
- Am Ende der Übertragung prüft der Attiny, ob die Schalterstellung
noch mit jener zu Beginn des Aufwachzyklus identisch ist
- Wenn ja: Schlafen. Wenn nein (d.h., die Tür wurde nur ganz kurz
geöffnet und sofort wieder geschlossen) wird 5 sec gewartet und die
dann herrschende Schalterstellung erneut übertragen. So wird
inkonsistente Information über Türzustand vermieden
Abschalten / schlafen gehen
- Nach erfolgreicher Übertragung bittet der ESP den Attiny über die
Leitung SHUTDOWN, ihn abzuschalten
- Attiny schaltet den Mosfet und damit den ESP ab
- und legt sich selber wieder schlafen
## Bestückungs- und Funktionsvarianten
- ESP in Ruhe abgeschaltet:
- Jumper 1 Pwr_Ctrl: 2-3 gesteckt
- Jumper 2: offen
- Jumper 5: RST via Attiny offen
- ESP in Ruhe im Sleep Mode
- Jumper 1 Pwr_Ctrl: 1-2 gesteckt
- Jumper 2: gesteckt
- Jumper 5: RST via Attiny gesteckt
ESP in Ruhe abgeschaltet: Geringer Ruhestromverbrauch (ca. 0,2 µA),
jedoch längere Zeit beim Verbindungsaufbau. Geeignet bei selten
betätigten Knoten.
ESP in Ruhe im Sleep Mode: Höherer Ruhestromverbrauch (ca. 200 µA),
deutlich kürzere Zeit beim Verbindungsaufbau. Geeignet bei häufig
betätigten Knoten.
## Stromverbrauch
Der Verwendete Attiy 45V-10SU (Final 25V-10SU) ist
[spezifiziert](http://www.atmel.com/Images/Atmel-2586-AVR-8-bit-Microcontroller-ATtiny25-ATtiny45-ATtiny85_Datasheet-Summary.pdf)
mit Power-down Mode: 0,1 μA at 1.8V, Operating Voltage -- 1.8 - 5.5V und
Speed Grade 0 -- 4 MHz @ 1.8 - 5.5V, 0 - 10 MHz @ 2.7 - 5.5V.
## Stromversorgungsvarianten
Die Schaltung ist für Betrieb mit drei AA Eneloop Zellen konzipiert.
Eneloops haben eine sehr geringe Selbstentladung und versprechen nach
einem Versuch über knapp 200 Tage einen Betrieb in Jahresfrist ohne
Akkuwechsel. Dazu wird die Spannung der Eneloops am Pin BATT_HIGH
eingespeist. Eine Schottkydiode in Serie verhindert, dass bei frisch
geladenen Zellen Vcc max des ESP überschritten wird.
Alternativ kann die Schaltung mit zwei AA Alkaline-Zellen betrieben
werden. Da diese im neuen Zustand nur wenig mehr als 1,5 V je Zelle
liefern, ist die Diode unnötig, und die Batteriespannung wird an
BATT_LOW eingespeist
## Bestückungsplan Hardwareversion 0.41
<!-- {{attachment:Bestueckung-v0.41.png}} -->
## Material
\|\|\<tablewidth="100%"\>**Anzahl** \|\|**Bezeichnung** \|\|**Preis**
\|\|**Bestell-Link** \|\| \|\|1 \|\|ESP8266-01 \|\|1,41
\|\|[ESP-01](https://www.aliexpress.com/item/Free-shipping-ESP8266-serial-WIFI-wireless-module-wireless-transceiver/32267651506.html)
\|\| \|\|1 \|\|AO 3413, MOSFET P-CH, 20V, 3A, SOT-23 (Schaltet ESP ein)
\|\|0,21 \|\|[AO
3413](https://www.reichelt.de/AO-BTS-Transistoren/AO-3413/3/index.html?ACTION=3&LA=5&ARTICLE=166493&GROUPID=7161&artnr=AO+3413)
\|\| \|\|1 \|\|ATTINY 25V-10 SU :: Atmel AVR-RISC-Controller, SOIC-8
\|\|1,30 \|\|[ATTINY
25V-10SU](https://www.reichelt.de/Atmel-Attiny-AVRs/ATTINY-25V-10-SU/3/index.html?ACTION=3&GROUPID=2958&ARTICLE=69298&OFFSET=75&)
\|\| \|\|1 \|\|B 140 F, SMD-Schottky-Diode, DO214AC/SMA, 40V, 1A
\|\|0,08 \|\|[B 140
F](https://www.reichelt.de/BA-BAY-BB-Dioden/B-140-F/3/index.html?ACTION=3&LA=5&ARTICLE=95199&GROUPID=2988&artnr=B+140+F)
\|\| \|\|4 \|\|12 kOhm, SMD Widerstand 0805, 100 mW, 1% \|\|0,01
\|\|[RND 0805 1
12K](https://www.reichelt.de/SMD-0805-von-1-bis-910-kOhm/RND-0805-1-12K/3/index.html?ACTION=3&LA=5&ARTICLE=183253&GROUPID=7971&artnr=RND+0805+1+12K)
\|\| \|\|1 \|\|SMD-Kerko, 1210, 100µF, 6,3V, 20%, MLCC \|\|0,25 \|\|[X5R
1210 DB
100U](https://www.reichelt.de/Vielschicht-SMD-G1210/X5R-1210-DB-100U/3/index.html?ACTION=3&GROUPID=3167&ARTICLE=194475&OFFSET=75&)
\|\| \|\|3 \|\|Vielschicht-Kerko, 100nF, 50V (Alternativ in
[0603](https://www.reichelt.de/Vielschicht-SMD-G0603/KEM-Y5V0603-100N/3/index.html?ACTION=3&GROUPID=3166&ARTICLE=207005&OFFSET=75&))
\|\|0,02 \|\|[KEM X7R0805
100N](https://www.reichelt.de/Vielschicht-SMD-G0805/KEM-X7R0805-100N/3/index.html?ACTION=3&GROUPID=8048&ARTICLE=207073&OFFSET=75&)
\|\| \|\|0,5 \|\|2x10pol. Buchsenleiste, gerade, RM 2,54 (Halbiert für
ESP Anschluß) \|\|0,56 \|\|[BL 2X10G
2,54](https://www.reichelt.de/Buchsenleisten/BL-2X10G-2-54/3/index.html?ACTION=3&GROUPID=7435&ARTICLE=6074&OFFSET=75&)
\|\| \|\|3 \|\|Batteriehalter, 1x Mignon "AA" \|\|0,24 \|\|[HALTER
1XAAK](https://www.reichelt.de/Batteriehalter-fuer-Mignon/HALTER-1XAAK/3/index.html?ACTION=3&LA=5&ARTICLE=113154&GROUPID=4255&artnr=HALTER+1XAAK)
\|\| \|\|0,1 \|\|Jumper 40pol. Stiftleiste, gewinkelt, RM 2,54 (Jumper
für Aktivierung des Wifi Manager im Betrieb) \|\|0,22 \|\|[SL 1X40W
2,54](https://www.reichelt.de/Stiftleisten/SL-1X40W-2-54/3/index.html?ACTION=3&GROUPID=7434&ARTICLE=19507&OFFSET=75&)
\|\| \|\|1 \|\|Kurzschlussbrücke, rot, mit Grifflasche (Jumper für
Aktivierung des Wifi Manager im Betrieb) \|\|0,04 \|\|[JUMPER 2,54GL
RT](https://www.reichelt.de/Stiftleisten/JUMPER-2-54GL-RT/3/index.html?ACTION=3&GROUPID=7434&ARTICLE=9018&OFFSET=75&)
\|\| \|\|1 \|\|Stiftleiste 2,54 mm, 2X03, gerade (Für ISP Anschluß)
\|\|0,14 \|\|[MPE
087-2-006](https://www.reichelt.de/Stiftleisten/MPE-087-2-006/3/index.html?ACTION=3&GROUPID=7434&ARTICLE=119893&OFFSET=75&)
\|\| \|\|1 \|\|Stiftleiste 2,54 mm, 1X06, gerade (für Batterie und
Schalter Anschluß, die drei Pins für Schalter werden nachträgl. um 90°
gebogen) \|\|0,14 \|\|[MPE
087-1-006](https://www.reichelt.de/Stiftleisten/MPE-087-1-006/3/index.html?ACTION=3&GROUPID=7434&ARTICLE=119883&OFFSET=75&)
\|\| \|\|1 \|\|MPE 094-1-003 :: Buchsenleisten 2,54 mm, 1X03, gerade
(Schalter Anschluß, kommt am die Leitung zum Schalter) \|\|0,13 \|\|[MPE
094-1-003](https://www.reichelt.de/Buchsenleisten/MPE-094-1-003/3/index.html?ACTION=3&GROUPID=7435&ARTICLE=119912&OFFSET=75&)
\|\| \|\| \|\|1 \|\|Platine (0,20 Basismaterial, 0,10 Chemie geschätzt)
\|\|0,30 \|\| \|\| \|\| \|\| \|\|**Summe ca.** \|\|**5,00** \|\| \|\|
\|\|
## Änderungen für kommende Hardware Revision 0.5
- Elko 330 µF ersetzt durch Kerko 100 µF
- Zusätzlicher Kerko 100 nF am Reset Pin Attiny (Fix für
Startprobleme)
- Kerko 100 nF an Vcc Attiny ersetzt durch Kerko 10 µF (Fix für
Startprobleme)

View file

@ -0,0 +1,15 @@
+++
title = "IoT-Hardware: Change Requests"
+++
Aktuell PCB V0.4
- Footprint von C1 von Elko auf Kerko ändern
- Footprint von C2 - C4 von Kunnstofffolie auf Kerko ändern
- Iso-Spalt bei den Lötjumpern wesentlich kleiner
- Dünne Tracks bei den Lötjumpern für default Brücken legen
- J3 durch Taster ersetzen?
- Funktionsvariante "Attiny nicht bestückt, Sensortaster über Mosfet, ESP steuert Mosfet zur
Selbsthaltung" vorsehen. Das geht aktuell mit J1 und J5 schon wenn der Attiny nicht bestückt ist,
es fehlt nur Taster-Anschluss über dem Mosfet.
- Eine WS2812 LED aufs Board für chique Signalisierung?

63
iot/hardware/messungen.md Normal file
View file

@ -0,0 +1,63 @@
+++
title = "IoT-Hardware: Messungen"
+++
## Messungen, Hardwarestand 0.4
330 µF Elko an der Batterie und 100 nF Kunsstoffolienkondensator direkt
am ESP.
### Betriebsspannung nach der Schottky-Diode (Leitung BATT_LOW) DC Coupling
<!-- [{{attachment:Supply_DC_coupling.bmp|attachment:Supply_DC_coupling.bmp|width="600"}}](attachment:Supply_DC_coupling.bmp) -->
Bei abgeschaltetem ESP und Attiny im Sleep Mode ist die Stromaufnahme so
gering, dass an der Diode keine nennenswerte Spannung abfällt. Mit
aktiviertem Attiny und ESP sinkt die Spannung nach der Diode um ~ 0,3V,
die Schwellspannung der Diode.
### Betriebsspannung nach der Schottky-Diode (Leitung BATT_LOW) AC Coupling
<!-- [{{attachment:Supply_AC_coupling.bmp|attachment:Supply_AC_coupling.bmp|width="600"}}](attachment:Supply_AC_coupling.bmp) -->
Die Betriebsspannung bricht beim Verbindungsaufbau zyklisch um ca 50 mV
ein, in der Übertragungsphase um ca 100 mV.
Mit 10 µF Kerko an der Batterie und 100 nF Kunsstoffolienkondensator
direkt am ESP: Die Betriebsspannung bricht max. um ca 200 mV ein.
## Messungen zur Akkulaufzeit
### Nur ESP im Deep Sleep
<!-- [{{attachment:20170125_164320.jpg|attachment:20170125_164320.jpg|width="400"}}](attachment:20170125_164320.jpg) -->
Im Vorlauf haben wir eine einfache Schaltung verwendet, bei der der ESP
im Deep Sleep Modus ca. 300 µA Strom aufnimmt. An einer Haustür
angebracht wurde die Schaltung im Mittel ca. sechs mal am Tag aktiviert.
Der Verlauf der Akkuspannung läßt einen Betrieb für ein Jahr ohne
Akkuwechsel möglich erscheinen. Das Auf und Ab der Akkuspannung
korreliert mit dem Temperaturverlauf am Montageort - wärmer => höhere
Zellenspannung.
### Eneloop Akkutest
<!-- [{{attachment:Eneloop-Test.jpg|attachment:Eneloop-Test.jpg}}](attachment:Eneloop-Test.jpg) -->
## Messungen zum Stromverbrauch
- Attiny 45V-10SU
- Versorgung 3 x Eneloop AA via Schottky Diode
- Messung mit Hameg HM 8011-3
Laut Datenblatt zieht der Attiny im Power-down Mode: 0,1 μA at 1.8V.
Gemessen habe ich 0,12 µA bei 3,92 V Akkuspannung, 3,91 V am Tiny (keine
nennenswerte Schwellspannung an der Schottky Diode bei dem kleinen
Strom). Sobald der ESP arbeitet, sinkt die Spannung an Tiny und ESP auf
ca. 3,2 V.
<!-- [{{attachment:current.bmp|attachment:current.bmp|width="600"}}](attachment:current.bmp) -->
Messung über einen 1 Ohm Shunt, 50 mV entspricht 50 mA. Ähnlich wie
andernorts im Netz beschrieben ist der Verbrauch des Digitalteils ca. 70
mA, Stromspitzen durch den Transceiver ~ 270 mA.

View file

@ -0,0 +1,66 @@
+++
title = "IoT-Hardware: Platine Löten"
+++
Schritte der Bestückung
## Leere Platine:
<!-- {{attachment:IoD-00.jpg}} -->
## Brücken aus 0,6 mm versilbertem Schaltdraht:
<!-- {{attachment:IoD-01.jpg}} -->
## Brücken gelötet:
<!-- {{attachment:IoD-02.jpg}} -->
## Widerstände:
<!-- {{attachment:IoD-03.jpg}} -->
## Kondensatoren 100 nF
Wenn die Controller noch nicht programmiert sind ( = auf der Platine
programmiert werden sollen), dann den Kondensator C3 links an der
sechspoligen Steckerleiste erstmal nicht bestücken - der liegt an der
ISP - Leitung MOSI, und stört manche Programmer.
<!-- {{attachment:IoD-05.jpg}} -->
## Schottky - Diode. Kathodenstrich rechts
<!-- {{attachment:IoD-06.jpg}} -->
## Kondensator 100 µF und Lötbrücke für Jumper 1
<!-- {{attachment:IoD-07.jpg}} -->
## Mikrocontroller, Pin 1 unten rechts
<!-- {{attachment:IoD-08.jpg}} -->
## Jumper 3 (WiFi Setup)
<!-- {{attachment:IoD-09.jpg}} -->
## Buchsenleiste, 2x4 Pole abschneiden und anwinkeln
<!-- {{attachment:IoD-10.jpg}} -->
## Buchsenleiste eingelötet
<!-- {{attachment:IoD-11.jpg}} -->
## ISP - Stecker
<!-- {{attachment:IoD-12.jpg}} -->
## Stecker für Sensor und Batterie
Je nach Gehäuse kann es sinnvoll sein, die drei Pins für den Anschluß
des Sensors (Umschalter) abzuwinkeln.
<!-- {{attachment:IoD-13.jpg}} -->

144
iot/mqtt-topics.md Normal file
View file

@ -0,0 +1,144 @@
+++
title = "IoT: MQTT-Topics"
+++
Grundlegende Aufteilung der MQTT-Topics in Quellen und Senken (Sensoren
= Quellen, Aktoren = Senken). Ein Topic-Namensraum gehört den Sensoren,
ein Topic-Namensraum den Aktoren. Ein Verknüpfungs-Layer abonniert die
Sensor-Namensräume, und postet in den Aktor-Namensräumen. Klartext
Topics erlauben z.B. auf einem Bedienpanel lesbare Logs anzuzeigen.
(vgl.:
[Bamberg](https://www.hackerspace-bamberg.de/Space_Automation))
~~(Ein besonderer Topic-namensraum ist *Device Presence Control*. Hier
können kritische Nodes wie z.B. Einbruchssensoren etc. zyklisch ihre
Funktionsfähikeit melden)~~ Ist in MQTT schon eingebaut
## Raumnamen
- `lounge` (Sofaecke, ...)
- `work_el` (Elektronikwerkstatt, Netzwerkschrank, ...)
- `work_mech` (Mechanikwerkstatt, Fräsraum, ...)
- `raum4` (Beamer, Regalreihe, Workshops, ...)
- `kitchen` (Küche, Besteck, Dusche, ...)
- `hall` (Flur, Ofen, Geschirr, ...)
- `restroom` (Toiletten, Reinigungsmittel, ...)
- `cellar` (Ebenerdiger "Keller", Getränkelager, ...)
- `entrance_front` (Gelbe Eingangstür, Südwestseite, Klingel, Abstellgleis, ...)
- `entrance_back` (Orange Eingangstür, Nordortseite, Hof, Pennertonne, ...)
- `all` (Spezialfall für Sensoren/Aktoren die in allen Räumen gleich
sind, z.B. `sensor/audio/all/mpd`)
## Beispiel Topics
- `sensors/`
- `lounge/`
- `light_state`
- `window_state`
- `work_el/`
- `door_state`
- `light_state`
- `soldering_iron_state`
- `work_mech/`
- `light_state`
- `window_state`
- `kitchen/`
- `light_state`
- `hall/`
- `light_state`
- `restroom/`
- `light_state`
- `smell_state`
- `toilet_flush`
- `urinal_flush`
- `cellar/`
- `drinks_crate_counts`
- `drinks_scale_measurements_metric`
- `drinks_scale_measurements_raw`
- `light_state`
- `entrance_front/`
- `door_state`
- `entrance_back/`
- `door_state`
- `all/`
- `music_info`
- `actors/`
- `lounge/`
- `light_state`
- `window_state`
- `work_el/`
- `light_state`
- `work_mech/`
- `light_state`
- `window_state`
- `raum4/`
- `light_state`
- `window_state`
- `kitchen/`
- `light_state`
- `window_state`
- `hall/`
- `light_state`
- `window_state`
- `restroom/`
- `light_state`
- `toilet_flush`
- `urinal_flush`
- `cellar/`
- `light_state`
- `entrance_front/`
- `entrance_back/`
- `all/`
- `music_next_track`
- `music_previous_track`
- `music_play_pause`
- `music_volume_up`
- `music_volume_down`
## Sammlung möglicher Sensoren
### Mit Schaltern zu realisieren
- Dachluke Lounge und Küche
- Fenster in den einzelnen Räumen (Einfachversion: Schalter in Reihe für Fenster auf / zu).
Erfordert dann statt Umschalter eine Kette aus Öffnern + Pullup-Widerstand
- Mechanik-Werkstatt
- Lounge
- Raum 4
- Tür Raum 2 (E-Werkstatt / Haupteingang), Erfassung Verriegelungsstatus. Speziell: Sowohl
Motorschloß-Riegel als auch Abus-Knebelschloß-Riegel müssen überwacht werden
- Tür Raum 4, Erfassung Schließriegel (Öffner gegen Wechsler tauschen)
- Kühlschranktür
- Klopapierlager (Spender mit senkrechtem Rollenstapel, vorletzte Rolle => Sensorsignal)
- Klo besetzt / frei
- Außentüren zugezogen (schwierig wegen abgeranzter Mechanik)
- Klingelschalter (Ersatz für ISM - Funkklingeln) - ermöglicht
automatisches Türöffnen wenn Space auf
### Besondere Sensoren
- Bewegungsmelder (Versorgung aus Akku sollte gehen)
- Der über dem Kücheneingang
- Innenräume im Space?
- Wasseralarm (Am Fenster oder auf dem Boden?)
- Temperatur in den einzelnen Räumen
- In Raummitte
- Auf dem Fensterbrett (Detektion offener Fenster zusätzlich zum Fenstersensor?)
- Herd / Pizzaofen
- Anschluss an Kontrollampe, also Erfassung ob an / aus
- Stromerfassung über Wandler / Shunt?
- Lötstationen
## Sammlung möglicher Aktoren
- 230V - Lasten (China Relaisplatinen, günstiger 433MHz Gateway auf
Funksteckdosen, spart ausserdem Aufwand für Berührschutz)
- Türöffner unten (Relais wie GSM Schloss)
- Audio (MPD Ansteuerung)
- flipdots
- Lüftung
- Vorhandener Lüfter im Klo
- Motoren an den Dachluken
- flipdot - Leuchtkasten vor der M-Werkstatt
- Posting im IRC
- Mail (Vor allem bei niedrigem Batteriestand wichtig)

32
iot/netzwerk.md Normal file
View file

@ -0,0 +1,32 @@
+++
title = "IoT: Netzwerk"
+++
- Subnetz: 192.168.42.0/24
- Gateway: 192.168.42.254
- DHCP-Range: .100 - 250
- SSID: security-by-iod
- Key: \<siehe Forum\>
<!--
## Statische IP-Adressen
muss \< .100 \|\|IP \|\|ESP-ID = MAC\|\|Geraet \|\|Ort \|\|Bemerkung
\|\|Verantwortlicher \|\| \|\|192.168.42.1 \|\| \|\|iod-cellar-lede
\|\|Raum hinter oranger Tür \|\| \|\|feliks \|\| \|\|192.168.42.10 \|\|
\|\|sensor/door/test \|\|Lounge neben Tür \|\| \|\|typ_o \|\|
\|\|192.168.42.11 \|\| \|\|sensor/button/test \|\|Lounge neben Tür \|\|
\|\|typ_o \|\| \|\|192.168.42.12\|\|2c:3a:e8:27:3b:a8\|\| \|\| \|\|
\|\|typ_o\|\| \|\|192.168.42.13\|\|60:01:94:49:de:4e\|\| \|\| \|\|
\|\|typ_o\|\| \|\|192.168.42.14\|\|60:01:94:49:e4:98\|\| \|\| \|\|
\|\|typ_o\|\| \|\|192.168.42.15\|\|2c:3a:e8:27:3c:1f\|\| \|\| \|\|
\|\|typ_o\|\| \|\|192.168.42.16\|\|2c:3a:e8:27:44:01\|\| \|\| \|\|
\|\|typ_o\|\| \|\|192.168.42.17\|\|a0:20:a6:10:6e:17\|\| \|\| \|\|
\|\|typ_o\|\| \|\|192.168.42.18\|\|60:01:94:49:e1:4b\|\| \|\| \|\|
\|\|typ_o\|\| \|\|192.168.42.19\|\|a0:20:a6:10:6e:18\|\| \|\| \|\|
\|\|typ_o\|\| \|\|192.168.42.20\|\|60:01:94:49:d9:40\|\| \|\| \|\|
\|\|typ_o\|\| \|\|192.168.42.21\|\|a0:20:a6:10:6e:03\|\| \|\| \|\|
\|\|typ_o\|\| \|\|192.168.42.22\|\| \|\| Sonoff \|\| M-Werkstatt \|\|
\|\|malled \|\| \|\| \|\| \|\| \|\| \|\| \|\| \|\| \|\| \|\| \|\| \|\|
\|\| \|\| \|\|
-->

51
iot/nodes.md Normal file
View file

@ -0,0 +1,51 @@
+++
title = "IoT: Nodes"
+++
Nodes sind alle Teilnehmer am IoT Netz.
## Sechseck-Lampe
Basiert auf der [WS2812FX
Lib](https://github.com/kitesurfer1404/WS2812FX).
- Node subscribed Topic: actors/misc/honeycomb0
- Funktionen
- mode \[0..46\]
- speed \[0..255\]
- brightness \[0..255\]
- color \[#rrggbb\] Hex Werte
Nette modes:
- FX_MODE_FIREWORKS, **mode 42, speed 255**
- FX_MODE_STROBE_RAINBOW, **mode 24, speed 190**
- FX_MODE_HYPER_SPARKLE,**mode 22, speed 0**
- FX_MODE_FADE, **mode 12, speed 20**
- X_MODE_RAINBOW_CYCLE, **mode 9, speed 0**
- FX_MODE_STATIC **mode 0**
## Panel
(Neben der Lounge - Tür, 5 LEDs als Demo für ein
späteres Status - Panel
- Node subscribed Topic: actors/lounge/panel
- Funktionen: \[n m\]
- n = LED \[0..4\]
- m = Zustand \[0..1\]
## Strassenlicht
- Topic: actors/work_mech/stolperlicht/cmnd/POWER
- Nachricht
- 0 -\> Aus
- 1 -\> Ein
## Sensor
(Neben der Lounge - Tür, Rollen-Mikroschalter als Demo für späteren
Fenstersensor o.ä.)
- Topic:
- Funktionen:

87
iot/software.md Normal file
View file

@ -0,0 +1,87 @@
+++
title = "IoT: Software"
+++
Das "Internet of Dings" Setup im flipdot gruppiert sich um einen
zentralen MQTT Server, den Broker. Es gibt ein benutzerfreundliches
Web-Fontend und Schnittstellen in den IRC und zur Space API.
## Fertige Software
### Mosquitto
Zentraler MQTT Broker
- Läuft auf power-pi.fd
### NodeRed
Stell das GUI für die wesentlichen Funktionen des Space bereit.
Einfaches Web-Frontend, einfache "Programmierung" der Funktionen in
Form einer Flow basierten Verdrahtung.
- Läuft auf power-pi.fd
## Unser selbst geschriebener Kram
### iod-esp8266-sensor
Software für selbst gebaustelte Sensoren. Sendet Status ins Netz,
nachdem der ESP von einem Attiny aufgeweckt wurde (siehe auch
iod-nodes).
- Repo: <https://github.com/flipdot/iot-esp8266-sensor>
- Verwendete Technik: C++, Arduino
- Läuft auf den einzelnen Sensor-Platinen
### iod-nodes
Software für selbst gebaustelte Sensoren. Wartet im Standby, bis
Schalter An oder Aus geht. Schaltet dann den größeren, stromhungrigeren,
WLAN-fähigen ESP8266 ein um die Statusänderung zu
übermitteln. Nimmt schließlich nach der Übertragung den Strom wieder weg
und legt sich schlafen.
- Repo: <https://github.com/flipdot/iod-nodes>
- Verwendete Technik: C++, Arduino
- Läuft auf den einzelnen Sensor-Platinen
### drinks-storage-mqtt
Wertet Messungen von Getränkewaagen aus.
- Repo: <https://github.com/flipdot/drinks-storage-mqtt>
- Verwendete Technik: Python 3
### drinks-storage-state
Führt Waagen-Messungen durch und schickt die Ergebnisse ins Netz.
- Repo: <https://github.com/flipdot/drinks-storage-state>
- Verwendete Technik: C++, platform.io
### flipbot
Unser IRC-Bot. Seit einer Weile auch ans IoD-Netz angeschlossen. Lauscht
auf `actors/all/flipbot` und leitet alle Nachrichten von dort in
unseren IRC-Channel weiter.
- Repo: <https://github.com/flipdot/sopel-modules>
- Verwendete Technik: Python (FIXME: Version?)
### iod-api-bridge
Sammelt Daten im MQTT-Netz und schickt sie zu
<https://api.flipdot.org/>.
- Repo: <https://github.com/flipdot/iod-api-bridge>
- Verwendete Technik: Python 3
### iod-error-spam
Empfängt Fehlermeldungen anderer MQTT-Teilnehmer und spammt damit den
IRC zu (via sopel). Jetzt auch mit Rate Limiting! Zusätzlich bald auch
persistente, einfacher zu durchsuchende Logs.
- Repo: <https://github.com/flipdot/iod-error-spam>
- Verwendete Technik: Rust

84
iot/todo.md Normal file
View file

@ -0,0 +1,84 @@
+++
title = "IoT: ToDo"
+++
## Mech
- ~~(Leitungs-Einlaß für Sensor auf Gehäuseunterseite verlegen)~~
- ~~(Zugang zum Wifi-Manager-Jumper auf Gehäuse Unterseite
schaffen)~~
- ~~(Alternative Deckelmontage ohne Magnete? (Ggf 2 x M3 ins
Holz))~~
- Schild (Sensorname, Topic, IP, Batteriewechseldatum)
## Elektro
- Stromverbrauch Messen bei 0.4
- Platinenvariante (bzw. Rework-Anleitung) für Betrieb ohne Attiny
machen - ESP hält sich Vcc über MOSFET selber
- Platinenvariante für Wemos ESP Platine machen - Schottky raus, mehr
Vcc -\> LDO auf dem Wemos
- [Variante mit 6 fach Schmitt
Trigger](https://github.com/tstoegi/microWakeupper).
Ruhestrom für den CMOS Chip 20nA.
([Datasheet](http://www.ti.com/lit/ds/symlink/cd40106b.pdf))
## Software
- Modul, das Fehlermeldungen der anderen MQTT-Teilnehmer abfängt und
in IRC postet / irgendwem als Email schickt
- Niedriger Batteriestand **(must)**
- Schlechte Feldstärke / häufige Abrüche (nice to have)
- Ausbleiben zyklischer I\'m alive Meldungen kritischer
MQTT-Teilnehmer (für Knoten, die dauernd online sind / sein
müssen, dazu sinnvoll: Topic nur für diese Meldungen)
- Modul, das die Meldungen kritischer MQTT-Teilnehmer auswertet und
auf dem Leuchtmelder-Tableau an der Ausgangstür anzeigt (Also
Dachluken, Fenster, Raum4, etc.) **(must)**
- Lesen kritischer MQTT-Teilnehmer-Topics
- Lesen des Space Status
- Wenn Space Status von offen -\> geschlossen wechselt, und
kritische Nodes noch offene Türen etc. melden, lauter Alarm über
\$Gerät (Leuchtmelder-Tableau) **(must)**
- Modul, das Verknüpfungen realisieren kann
- Klingelknopf außen bewirkt Türöffnung wenn Spacestatus = offen
(nice to have)
- Sensor Klopapier alle bewirkt Bestellung bei Amazon (cherz) ...
Aber Eintrag in eine Einkaufsliste?! (nice to have)
- Modul, das Steuerung von Aktoren im IoD Netz von außen sicher
realisiert. Aktoren:
- Heizung
- Modul, das Daten aus dem MQTT Netz nach Grafana liefert. Was soll
aufgezeichnet werden?
([Liste](http://github.com/freifunkks/salt-conf/blob/master/state/graphite/fd-spacestats.py#L44-L92))
### Attiny
- ~~(Interrupt Glitch abstellen)~~ Waren tatsächlich mal wieder zu
wenig Angstkondensatoren.
- ~~(Alle unnötinen Peripherials auf dem Chip abschalten)~~
[1](https://playground.arduino.cc/Learning/ArduinoSleepCode)
[2](http://www.arduino-hausautomation.de/2014/emils-ampel-attiny45-im-tiefschlaf/)
[3Strombedarf](https://learn.sparkfun.com/tutorials/reducing-arduino-power-consumption)
entspricht jetzt den Specs aus dem Datasheet.
### ESP
- Codevariante für Betrieb ohne Attiny machen - ESP hält sich Vcc über
MOSFET selber
- Prüfen, welchen Unterschied die interne Vcc Messung im ESP mit und
ohne Radio macht
- ~~(MQTT Client bauen, der Topics abonnieren kann, und die Inhalte
auf WS2811 LED String anzeigt (für Display an der Tür) )~~
### GetränkeKistenStatistik - Mikrocontroller-Mess-Software (drinks-storage-state)
- WebGUI
- ESP ID \[r\]
- Netzwerk-SSID, Passwort \[rw\]
- MQTT host \[rw\]
### GetränkeKistenStatistik - Messwert-KistenAnzahl-Konvertierung (drinks-storage-mqtt)
- crate_count per Getränke-Art zählen, nicht per Stapel
- Aktuell gibt es keine Getränkesorten, für die mehrere Stapel benötigt werden