|
|
(7 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) |
Zeile 1: |
Zeile 1: |
| {{Infobox | | {{Infobox |
| | maintainer = [[User:noqqe|noqqe]] | | | maintainer = [[User:noqqe|noqqe]] |
| | machine = [[Host:scotty.intern.k4cg.org|scotty.intern.k4cg.org]] | | | machine = [[Host:heimat.intern.k4cg.org|heimat.intern.k4cg.org]] |
| | jahr = 2016 | | | jahr = 2017 |
| | url = https://github.com/k4cg/rezeptionistin | | | url = https://github.com/k4cg/openstatus |
| }} | | }} |
|
| |
|
| == Sensors @ K4CG ==
| | Dieses Projekt war ein Vorläufer zum jetztigen [[Projekt:SpaceStatus]] |
| | | Um Verwirrung zu vermeiden werden alle Einzelheiten nun dort gepfelgt und wurden in dieser Projektseite entfernt. |
| Die ehemaligen Sensoren von [https://organic-entropy.org 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 [https://tinkerforge.com tinkerforge.com] herunterladen und das .deb Paket installieren.
| |
| | |
| Konfigurieren von brickd und start
| |
| | |
| <pre>
| |
| listen.address = 0.0.0.0
| |
| listen.plain_port = 4223
| |
| listen.websocket_port = 0
| |
| listen.dual_stack = off
| |
| </pre>
| |
| | |
| 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: <code>socat</code> rult! IPv6 auf IPv4 local NAT sozusagen.
| |
| | |
| <pre>
| |
| [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"
| |
| </pre>
| |
| | |
| 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
| |
| | |
| <pre>
| |
| # 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";
| |
| };
| |
| };
| |
| </pre>
| |
| | |
| | |
| === Rezeptionistin ===
| |
| | |
| Die Anbildung und Einsammeln der Daten ist innerhalb der Plugins relativ einfach:
| |
| | |
| <pre>
| |
| 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²")
| |
| </pre>
| |
| | |
| Siehe https://github.com/k4cg/Rezeptionistin/blob/master/plugins/light.py und https://github.com/k4cg/Rezeptionistin/blob/master/plugins/sound.py
| |