Projekt:Sensors: Unterschied zwischen den Versionen
Noqqe (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „{{Infobox | maintainer = noqqe | machine = scotty.intern.k4cg.org | jahr = 2016 | url = https://github.com/k4cg/…“) |
Noqqe (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
Zeile 12: | Zeile 12: | ||
Die Sensoren liefern Daten über folgendes: | Die Sensoren liefern Daten über folgendes: | ||
Temperatur (schon wieder...) | * Temperatur (schon wieder...) | ||
Licht Intensität (i.e. Helligkeit) | * Licht Intensität (i.e. Helligkeit) | ||
Geräusch Pegel (KEIN Aufnahmegerät) | * Geräusch Pegel (KEIN Aufnahmegerät) | ||
Accelerometer (pretty much useless, weil an die Wand gehängt) | * Accelerometer (pretty much useless, weil an die Wand gehängt) | ||
=== Setup des Daemons auf Scotty === | === Setup des Daemons auf Scotty === |
Version vom 2. September 2016, 12:25 Uhr
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) -> Scotty, SOCAT (bind to localhost:4223, listen ::/0:31338) -> Nixe, SOCAT (Bind to Scotty v6 IP:31338, listen 127.0.0.1:31338) -> 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