#!/usr/bin/env python3 import paho.mqtt.client as mqtt import time import tornado.ioloop import tornado.web PORT = 8888 BASE_URL = "https://bitlair.nl/state" MQTT_HOST = "bitlair.nl" current_state = False current_state_change = time.time() def state(): global current_state, current_state_change return { "api": "0.13", "space": "Bitlair", "logo": BASE_URL + "/logo.png", "url": "https://bitlair.nl/", "contact": { "irc": "irc://irc.smurfnet.ch/bitlair", "twitter": "@bitlair", "email": "bestuur@bitlair.nl", "ml": "general@list.bitlair.nl", }, "spacefed": { "spacenet": True, "spacesaml": True, "spacephone": False, }, "location": { "address": "Nijverheidsweg-Noord 77, 3812 PK Amersfoort, The Netherlands", "lat": 52.1697399, "lon": 5.3561364, }, "state": { "open": current_state, "lastchange": int(current_state_change), "icon": { "open": BASE_URL + "/open.png", "closed": BASE_URL + "/closed.png", }, "mqtt": { "host": "bitlair.nl", "port": 1883, "tls": False, "topic": "bitlair/state", "closed": "closed", "open": "open", }, }, "issue_report_channels": ["twitter"], } class StatejsonHandler(tornado.web.RequestHandler): def get(self): self.write(state()) def make_app(): return tornado.web.Application( [ (r"/statejson", StatejsonHandler), ] ) def on_message(client, userdata, message): global current_state, current_state_change if message.topic == "bitlair/state": current_state = message.payload == b"open" current_state_change = time.time() def on_connect(client, userdata, flags, rc): client.subscribe("bitlair/state", qos=2) if __name__ == "__main__": mqttc = mqtt.Client() mqttc.on_message = on_message mqttc.on_connect = on_connect mqttc.connect(MQTT_HOST) mqttc.loop_start() app = make_app() app.listen(8888) tornado.ioloop.IOLoop.current().start()