Projekt:Sensors: Unterschied zwischen den Versionen

Aus k4cg.org
Keine Bearbeitungszusammenfassung
 
(4 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
 
<pre>
 
+-------------------------------------+
| Scotty, BRICKD (listen 0.0.0.0:4223)|
+---+---------------------------------+
    |
    | v4 to v6 Convert
    |
+---v-------------------------------------------------------+
| Scotty, SOCAT (bind to localhost:4223, listen ::/0:31338) |
+---+-------------------------------------------------------+
    |
    | Internet (v6 to v6)
    |
+---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)|
+--------------------------------------------------------------------+
 
</pre>
 
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

Aktuelle Version vom 20. Februar 2018, 11:00 Uhr

Projekt:Sensors
Betreuer*In noqqe
Jahr 2017
Läuft auf heimat.intern.k4cg.org
URL https://github.com/k4cg/openstatus

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.