Projekt:door-status: Unterschied zwischen den Versionen

Aus k4cg.org
(5 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 9: Zeile 9:


=Hardware=
=Hardware=
[[Datei:door-status-hw.jpg|300px|thumb|right|Hardware vom Türsensor]]
[[Datei:door-status-hw.jpg|300px|thumb|right|Hardware-Prototyp vom Türsensor]]
[[Datei:door-status-schalter.jpg|200px|thumb|right|Hardware vom Türschalter]]
[[Datei:door-status-schalter.jpg|200px|thumb|right|Hardware vom Türschalter]]
Der Hardwareaufbau ist im Bild rechts dargestellt. Das ESP8266-Board in der Mitte wird über ein Kabel von unten mit 5V versorgt, ein kreativ verlöteter Regler auf der Rückseite der Platine (LM1117) wandelt die Spannung auf die benötigten 3.3 Volt. Der Türsensor (Schalter) ist über die drei Kabel von rechts angeschlossen. Der Schalter ist ein Umschalter, von dem nur zwei Kontakte als Schließer verwendet werden. Wird der Schalter durch den eingeführten Türriegel geschlossen, verbindet dieser den IO Pin mit Masse und zieht hierdurch den internen Pullup auf Masse, sodass ein Low-Pegel im "zu"-Zustand zu messen ist und High-Pegel im "offen"-Zustand.
Der Hardwareaufbau ist im Bild rechts dargestellt. Das ESP8266-Board in der Mitte wird über ein Kabel von unten mit 5V versorgt, ein kreativ verlöteter Regler auf der Rückseite der Platine (LM1117) wandelt die Spannung auf die benötigten 3.3 Volt. Der Türsensor (Schalter) ist über die drei Kabel von rechts angeschlossen. Der Schalter ist ein Umschalter, von dem nur zwei Kontakte als Schließer verwendet werden. Wird der Schalter durch den eingeführten Türriegel geschlossen, verbindet dieser den IO Pin mit Masse und zieht hierdurch den internen Pullup auf Masse, sodass ein Low-Pegel im "zu"-Zustand zu messen ist und High-Pegel im "offen"-Zustand.


Die im Bild rechts gekennzeichneten Pins (Pin-Header, RM2.54mm) können mit einem USB-UART-Kabel verwendet werden, um eine Verbindung zur lokalen Shell (115200 Baud, 8N1) herzustellen, beispielsweise wenn das ESP keine automatische Verbindung mehr zum WLAN aufbauen sollte.
Die im Bild rechts gekennzeichneten Pins (Pin-Header, RM2.54mm) können mit einem USB-UART-Kabel verwendet werden, um eine Verbindung zur lokalen Shell (115200 Baud, 8N1) herzustellen, beispielsweise wenn das ESP keine automatische Verbindung mehr zum WLAN aufbauen sollte.
Update 07.12.17: Neue Hardware mit BME280 installiert, Photo muss noch aktualisiert werden. Beide Spannungen (s.u.) werden beim Booten eingeschaltet.


Pinbelegung:
Pinbelegung:
Zeile 20: Zeile 22:
! Pin !! Verwendung
! Pin !! Verwendung
|-
|-
| <s>GPIO4</s> || <s>DHT11 Datenleitung</s>
| GPIO0 || Spannungsversorgung 3.3V (an: low, aus: high)
|-
| GPIO2 || Spannungsversorgung 5V (an: high, aus: low)
|-
|-
| GPIO12 || Schalterkontakt
| GPIO4 || I2C SDA für BME280
|-
|-
| <s>GPIO14</s> || <s>Pullup-Spannung für Schalter</s>
| GPIO5 || I2C SCL für BME280
|-
|-
| <s>GPIO15</s> || <s>DHT11 Versorgungsspannung (3.3V)</s>
| GPIO12 || Schalterkontakt
|-
|-
| GPIO16 || Verbindung zum Reset-Pin für deepsleep
| GPIO16 || Verbindung zum Reset-Pin für deepsleep
Zeile 33: Zeile 37:
=Software=
=Software=


Beim Booten stellt der ESP eine Verbindung zum WLAN "k4cg-intern" her, synchronisiert die Zeit per NTP, fragt den Türsensor sowie den DHT11 ab und überträgt die Resultate im JSON-Format als POST-Request an "http://heimat:8000/" geschickt, danach geht das System für 5 Minuten in den Schlafmodus. Format:
Beim Booten stellt der ESP eine Verbindung zum WLAN "k4cg-intern" her, synchronisiert die Zeit per NTP, fragt den Türsensor sowie den BME280 ab und überträgt die Resultate im JSON-Format als POST-Request an "http://heimat:8000/" geschickt sowie an mehrere MQTT Server, danach geht das System für 5 Minuten in den Schlafmodus. Format:


{| class="wikitable"
{| class="wikitable"
Zeile 41: Zeile 45:
| door || "open" oder "closed"
| door || "open" oder "closed"
|-
|-
| humidity || Luftfeuchtigkeit als Integer (0..100)
| humidity || Luftfeuchtigkeit als Float (0..100)
|-
|-
| tempDoor || Temperatur als Integer
| tempDoor || Temperatur als Float
|-
|-
| date_GMT || Datum/Zeit (Zeitzone GMT) im Format "YYYY-MM-DDTHH:MM:SS.000000"
| date_GMT || Datum/Zeit (Zeitzone GMT) im Format "YYYY-MM-DDTHH:MM:SS.000000"
|}
|}
MQTT Hosts (übermittelt als "Retained Message", d.h. bei einer Verbindung mit dem Topic durch einen Client wird die letzte Meldung übertragen):
{| class="wikitable"
|-
! Host !! Topic !! Format
|-
| iot.eclipse.org || k4cg/door/status || JSON (s.o.)
|-
| heimat || sensors/door/default/status || YYYY-MM-DDTHH:MM:SS.000000 (open&#124;closed)
|-
|        || sensors/door/default/bme280/temperature || YYYY-MM-DDTHH:MM:SS.000000 FLOAT
|-
|        || sensors/door/default/bme280/humidity || YYYY-MM-DDTHH:MM:SS.000000 FLOAT
|-
|        || sensors/door/default/bme280/pressure || YYYY-MM-DDTHH:MM:SS.000000 FLOAT
|}
Hinweis: Der führende "/" wird gemäß gängiger Empfehlungen weggelassen. Dies macht bei MQTT einen Unterschied, da "/" eine zusätzliche Top-Level-Ebene mit der ID "" (leerer String) einführt. Da dies unsinnig ist, wird der führende "/" weggelassen.


=Software-Aktualisierung=
=Software-Aktualisierung=
Zeile 59: Zeile 82:
  ...
  ...
  mpfs [/]> repl
  mpfs [/]> repl
  >>> reboot()
  >>> util.reboot()

Version vom 9. Dezember 2017, 13:06 Uhr

Projekt:door-status
Betreuer*In ChrisC
Jahr 2017
Läuft auf tuerstatus.intern.k4cg.org
URL https://github.com/k4cg/door-status

Mit diesem Sensor wird überwacht, ob die innere Tür im k4cg abgeschlossen ist oder nicht - ein sicheres Indiz, ob das k4cg offen oder zu ist. Zudem gibt es noch einen Temperatur-/Feuchtesensor, damit das Device sich nicht ganz so sehr beim Abfragen eines Tasters langweilt.

Hardware

Hardware-Prototyp vom Türsensor
Hardware vom Türschalter

Der Hardwareaufbau ist im Bild rechts dargestellt. Das ESP8266-Board in der Mitte wird über ein Kabel von unten mit 5V versorgt, ein kreativ verlöteter Regler auf der Rückseite der Platine (LM1117) wandelt die Spannung auf die benötigten 3.3 Volt. Der Türsensor (Schalter) ist über die drei Kabel von rechts angeschlossen. Der Schalter ist ein Umschalter, von dem nur zwei Kontakte als Schließer verwendet werden. Wird der Schalter durch den eingeführten Türriegel geschlossen, verbindet dieser den IO Pin mit Masse und zieht hierdurch den internen Pullup auf Masse, sodass ein Low-Pegel im "zu"-Zustand zu messen ist und High-Pegel im "offen"-Zustand.

Die im Bild rechts gekennzeichneten Pins (Pin-Header, RM2.54mm) können mit einem USB-UART-Kabel verwendet werden, um eine Verbindung zur lokalen Shell (115200 Baud, 8N1) herzustellen, beispielsweise wenn das ESP keine automatische Verbindung mehr zum WLAN aufbauen sollte.

Update 07.12.17: Neue Hardware mit BME280 installiert, Photo muss noch aktualisiert werden. Beide Spannungen (s.u.) werden beim Booten eingeschaltet.

Pinbelegung:

Pin Verwendung
GPIO0 Spannungsversorgung 3.3V (an: low, aus: high)
GPIO2 Spannungsversorgung 5V (an: high, aus: low)
GPIO4 I2C SDA für BME280
GPIO5 I2C SCL für BME280
GPIO12 Schalterkontakt
GPIO16 Verbindung zum Reset-Pin für deepsleep

Software

Beim Booten stellt der ESP eine Verbindung zum WLAN "k4cg-intern" her, synchronisiert die Zeit per NTP, fragt den Türsensor sowie den BME280 ab und überträgt die Resultate im JSON-Format als POST-Request an "http://heimat:8000/" geschickt sowie an mehrere MQTT Server, danach geht das System für 5 Minuten in den Schlafmodus. Format:

Key Value
door "open" oder "closed"
humidity Luftfeuchtigkeit als Float (0..100)
tempDoor Temperatur als Float
date_GMT Datum/Zeit (Zeitzone GMT) im Format "YYYY-MM-DDTHH:MM:SS.000000"

MQTT Hosts (übermittelt als "Retained Message", d.h. bei einer Verbindung mit dem Topic durch einen Client wird die letzte Meldung übertragen):

Host Topic Format
iot.eclipse.org k4cg/door/status JSON (s.o.)
heimat sensors/door/default/status YYYY-MM-DDTHH:MM:SS.000000 (open|closed)
sensors/door/default/bme280/temperature YYYY-MM-DDTHH:MM:SS.000000 FLOAT
sensors/door/default/bme280/humidity YYYY-MM-DDTHH:MM:SS.000000 FLOAT
sensors/door/default/bme280/pressure YYYY-MM-DDTHH:MM:SS.000000 FLOAT

Hinweis: Der führende "/" wird gemäß gängiger Empfehlungen weggelassen. Dies macht bei MQTT einen Unterschied, da "/" eine zusätzliche Top-Level-Ebene mit der ID "" (leerer String) einführt. Da dies unsinnig ist, wird der führende "/" weggelassen.

Software-Aktualisierung

Es kann per WLAN eine Verbindung hergestellt werden, sobald der ESP aufgewacht ist. Um die Verbindung zu erleichtern, wartet das Programm 60 Sekunden nach einer Statusübermittlung.

Vorgehen beim Verbinden (mit mpfshell, installieren über pip/pip3):

# mpfshell -c "open ws:192.168.178.9,PASSWORD"
mpfs [/]> put boot.py
mpfs [/]> put service.py
...
mpfs [/]> repl
>>> util.reboot()