Projekt:Sensors

Aus k4cg.org
Version vom 2. September 2016, 13:24 Uhr von Noqqe (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „{{Infobox | maintainer = noqqe | machine = scotty.intern.k4cg.org | jahr = 2016 | url = https://github.com/k4cg/…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
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