Projekt:Sensors
Projekt:Sensors | |
Betreuer*In | noqqe |
Jahr | 2016 |
Läuft auf | scotty.intern.k4cg.org |
URL | https://github.com/k4cg/rezeptionistin |
Sensors @ K4CG
Die ehemaligen Sensoren von organic-entropy.org wurden unterhalb von Host:scotty.intern.k4cg.org angebracht und an diesen angeschlossen.
Die Sensoren liefern Daten über folgendes:
- Temperatur (schon wieder...)
- Licht Intensität (i.e. Helligkeit)
- Geräusch Pegel (KEIN Aufnahmegerät)
- Accelerometer (pretty much useless, weil an die Wand gehängt)
Setup des Daemons auf Scotty
Brickd von tinkerforge.com herunterladen und das .deb Paket installieren.
Konfigurieren von brickd und start
listen.address = 0.0.0.0 listen.plain_port = 4223 listen.websocket_port = 0 listen.dual_stack = off
Hurra.
Netzwerk
Um diese Daten ins IRC zu bekommen brauch wir Verbindung von Host:nixe.k4cg.org zu Host:scotty.intern.k4cg.org.
Die Kurzbeschreibung der gebauten Lösung sieht so aus
+-------------------------------------+ | Scotty, BRICKD (listen 0.0.0.0:4223)| +---+---------------------------------+ | | ^4 to ^6 Con^ert | +---v-------------------------------------------------------+ | Scotty, SOCAT (bind to localhost:4223, listen ::/0:31338) | +---+-------------------------------------------------------+ | | Internet (^6 to ^6) | +---v-------------------------------------------------------------+ | Nixe, SOCAT (Bind to Scotty |6 IP:31338, listen 127.0.0.1:31338)| +---+-------------------------------------------------------------+ | v6 to v4 Convert | +---v----------------------------------------------------------------+ | Rezeptionistin, Python Tinkerforge Lib (connect to localhost:31338)| +--------------------------------------------------------------------+
Warum ist das alles so behindert und komplierziert? Ja das frag ich mich auch. Für die Nachwelt:
Problem 1
Brickd hört nur auf IPv4 Adressen, zum abholen brauchen wir aber v6 wegen M-Net.
Lösung: socat
rult! IPv6 auf IPv4 local NAT sozusagen.
[program:sensors] directory=/root/ command=/usr/bin/socat TCP6-LISTEN:31338,fork TCP4:127.0.0.1:4223 autostart=true autorestart=true startsecs=10 user=root stdout_logfile=/root/sensors.log stdout_logfile_maxbytes=1MB stdout_logfile_backups=10 stdout_capture_maxbytes=1MB stderr_logfile=/root/sensors.log stderr_logfile_maxbytes=1MB stderr_logfile_backups=10 stderr_capture_maxbytes=1MB environment = HOME="/root/", USER="root"
Startet auf scotty automatisch
Problem 2
Die tinkerforge library, die in Rezeptionistin benutzt wird, kann kein IPv6. Also brauchen wir auch hier wieder einen socat, nur umgekehrt.
Config
# Service for v6 connection to heimat. Tinkerforge Connect only works with v4 systemd.services.sensorsipv6bridge= { enable = true; description = "IPv6 Tunnel to Scotty"; wants = [ "network.target" ]; environment = { OPENSSL_CONF = "/etc/ssl/"; SSL_CERT_FILE = "/etc/ssl/certs/ca-certificates.crt"; }; serviceConfig = { ExecStart = "/run/current-system/sw/bin/socat TCP4-LISTEN:31338,fork 'TCP6:[2001:a60:f073:0:21d:92ff:fe25:2a23]:31338'"; WorkingDirectory = "/usr/local/rezeptionistin/"; User = "ircbot"; }; };
Rezeptionistin
Die Anbildung und Einsammeln der Daten ist innerhalb der Plugins relativ einfach:
def get_light(self): ipcon = IPConnection() uvl = BrickletUVLight(self.licht_id, ipcon) ipcon.connect(self.licht_host, int(self.licht_port)) uv_light = uvl.get_uv_light() ipcon.disconnect() return(str(uv_light) + " µW/cm²")
Siehe https://github.com/k4cg/Rezeptionistin/blob/master/plugins/light.py und https://github.com/k4cg/Rezeptionistin/blob/master/plugins/sound.py