Projekt:SpaceAPI Script

Aus k4cg.org
Version vom 29. Dezember 2015, 14:02 Uhr von Noqqe (Diskussion | Beiträge) (SpaceAPI Realisierung)

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()