Projekt:SpaceAPI Script: Unterschied zwischen den Versionen
Noqqe (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „Am 32c3 habe ich mir gedacht, es wäre cool das K4CG im dezentralen Hackerspace Listing Directory [http://spaceapi.net spaceapi.net] aufzuführen === Anforder…“) |
Noqqe (Diskussion | Beiträge) (SpaceAPI Realisierung) |
||
Zeile 11: | Zeile 11: | ||
* Projekte | * Projekte | ||
* Kontakt | * Kontakt | ||
=== Realisierung === | |||
Auf [[Host:nixe.k4cg.org]] läuft ein Script unter <code>/usr/local/spaceapi.py</code> dass über den Cronjob unter | |||
<code>/etc/nixos/services/cron.nix</code> alle 15 minuten den Status nach <code>/var/www/spaceapi.k4cg.org/spaceapi.json</code> schreibt. | |||
=== Scripting === | === Scripting === |
Version vom 29. Dezember 2015, 14:02 Uhr
Am 32c3 habe ich mir gedacht, es wäre cool das K4CG im dezentralen Hackerspace Listing Directory spaceapi.net aufzuführen
Anforderungen
- JSON File auf Webserver bereitstellen
Das JSON File enthält mehrere Informationen über den Hackerspace.
- Anschrift
- Koordinaten
- Projekte
- Kontakt
Realisierung
Auf Host:nixe.k4cg.org läuft ein Script unter /usr/local/spaceapi.py
dass über den Cronjob unter
/etc/nixos/services/cron.nix
alle 15 minuten den Status nach /var/www/spaceapi.k4cg.org/spaceapi.json
schreibt.
Scripting
Wir brauchen für uns zwei dynamische Inhalte
- Temperatur übergeben
- Offen/Geschlossen Status
#!/usr/bin/env python2 # -*- coding: utf-8 -*- import socket from datetime import datetime, time def netcat(hostname, port, content): try: s = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) s.connect((hostname, port)) s.shutdown(socket.SHUT_WR) while 1: data = s.recv(1024) if data == "": break f = data s.close() except socket.error: f = "0.00" return f temp = netcat("2001:a60:f073:0:76da:38ff:fe00:5e92", 31337, "9001").strip() def opentime(): status = "false" now = datetime.now() now_time = now.time() now_day = now.isoweekday() if now_day == 4: if now_time >= time(19,30) and now_time <= time(23,30): status = "true" return status status = opentime() JSON = """ { "api": "0.13", "space": "K4CG", [...] } """ % (temp, status, status) print JSON
Temperatur
Dafür wird eigentlich nur der Raspbi mit dem Thermometer im Space angesprochen, den wir auch schon für Stats verwenden.
temp = netcat("2001:a60:f073:0:76da:38ff:fe00:5e92", 31337, "9001").strip()
Öffnungszeiten
Um zu signalisieren, dass die K4CG offen hat, ist relativ statisch. Wir haben ja keinerlei Mechanismus wie Schliesstürsysteme oder sonstiges. Daher wird das jetzt statisch gemacht. Immer Donnerstags von 19:30 bis 23:30 wird die K4CG als "geöffnet" angezeigt.
def opentime(): status = "false" now = datetime.now() now_time = now.time() now_day = now.isoweekday() if now_day == 4: if now_time >= time(19,30) and now_time <= time(23,30): status = "true" return status status = opentime()