diff --git a/Dockerfile b/Dockerfile index 9f57564ff85dbcb5e50d88e757ed6e0089caadfa..63168a594c0a26f21b57f0fe63bc4cd61c5f4420 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,6 +12,7 @@ RUN pip3 install --upgrade pip # pip Packages RUN pip3 install \ flask==1.0.2 \ + flask_mqtt \ pytz \ uwsgi \ --upgrade diff --git a/mqtt/publish_zoneclosed.bat b/mqtt/publish_zoneclosed.bat new file mode 100644 index 0000000000000000000000000000000000000000..47ad7d3c70f084fed6c4916a6339bc2f22ce2697 --- /dev/null +++ b/mqtt/publish_zoneclosed.bat @@ -0,0 +1 @@ + docker run --rm -it ruimarinho/mosquitto mosquitto_pub -h 192.168.0.201 -t warpzone/door/status -m "CLOSED" --retain diff --git a/mqtt/publish_zoneopen.bat b/mqtt/publish_zoneopen.bat new file mode 100644 index 0000000000000000000000000000000000000000..b2be5943f4fda7a5216c0b1e390af5f366b48b34 --- /dev/null +++ b/mqtt/publish_zoneopen.bat @@ -0,0 +1 @@ + docker run --rm -it ruimarinho/mosquitto mosquitto_pub -h 192.168.0.201 -t warpzone/door/status -m "OPEN" --retain diff --git a/mqtt/subscribe.bat b/mqtt/subscribe.bat new file mode 100644 index 0000000000000000000000000000000000000000..a07b68edb2e51d1193518859ee2da236a9cc55db --- /dev/null +++ b/mqtt/subscribe.bat @@ -0,0 +1,2 @@ + docker run --rm -it ruimarinho/mosquitto mosquitto_sub -h 192.168.0.201 -t warpzone/door/status + \ No newline at end of file diff --git a/warpapi/warpapi.py b/warpapi/warpapi.py index 668052e61c0f55428e809e1fe08ee05934216917..bc7ceb5cba66d23c46c2a2eae392a19da535e4de 100644 --- a/warpapi/warpapi.py +++ b/warpapi/warpapi.py @@ -6,16 +6,61 @@ from flask import redirect from flask import render_template from flask import send_from_directory from flask import json +from flask_mqtt import Mqtt +from logging.config import dictConfig + +dictConfig({ + 'version': 1, + 'formatters': {'default': { + 'format': '[%(asctime)s] %(levelname)s in %(module)s: %(message)s', + }}, + 'handlers': {'wsgi': { + 'class': 'logging.StreamHandler', + 'stream': 'ext://flask.logging.wsgi_errors_stream', + 'formatter': 'default' + }}, + 'root': { + 'level': 'INFO', + 'handlers': ['wsgi'] + } +}) app = Flask(__name__, static_url_path='') +app.config['MQTT_BROKER_URL'] = '192.168.0.201' +app.config['MQTT_BROKER_PORT'] = 1883 +app.config['MQTT_USERNAME'] = '' +app.config['MQTT_PASSWORD'] = '' +app.config['MQTT_KEEPALIVE'] = 5 +app.config['MQTT_TLS_ENABLED'] = False +zone_door_status = "UNKNOWN" +mqtt = Mqtt(app) if __name__ == "__main__": app.run() +@mqtt.on_connect() +def handle_connect(client, userdata, flags, rc): + app.logger.info("mqtt connected") + mqtt.subscribe("warpzone/door/status") + app.logger.info("mqtt subscribed: warpzone/door/status") + +@mqtt.on_message() +def handle_mqtt_message(client, userdata, message): + global zone_door_status + data = dict( + topic=message.topic, + payload=message.payload.decode() + ) + app.logger.info("mqtt message") + app.logger.info(data) + zone_door_status = message.payload.decode() + app.logger.info("zone_door_status = " + zone_door_status) + # Startseite @app.route('/') def view_index(): - return 'Warpzone API, see: https://gitlab.warpzone.ms/infrastruktur/warpapi/blob/master/README.md' + global zone_door_status + return 'Warpzone API, current status = ' + zone_door_status + ', see: https://gitlab.warpzone.ms/infrastruktur/warpapi/blob/master/README.md' # Statische Dateien @app.route('/files/<path:path>') @@ -25,41 +70,26 @@ def send_file(path): # Statusanzeige auf der Webseite @app.route('/static') def view_static(): + global zone_door_status spaceopen = False - now = datetime.datetime.now(pytz.timezone('Europe/Berlin')) - dayofweek = now.strftime("%w") - # Hardcode Mittwoch Abend offen - if dayofweek == "3": - if now.hour >= 18: - spaceopen = True - # Hardcode Samstag Abend offen - if dayofweek == "6": - if now.hour >= 18: - spaceopen = True + if zone_door_status == "OPEN": + spaceopen = True return render_template('static.html', open = spaceopen) # Statusanzeige auf der Webseite @app.route('/status') def data_status(): + global zone_door_status spaceopen = 0 - now = datetime.datetime.now(pytz.timezone('Europe/Berlin')) - dayofweek = now.strftime("%w") - # Hardcode Mittwoch Abend offen - if dayofweek == "3": - if now.hour >= 18: - spaceopen = 1 - # Hardcode Samstag Abend offen - if dayofweek == "6": - if now.hour >= 18: - spaceopen = 1 + if zone_door_status == "OPEN": + spaceopen = 1 data = { "tuerOffen": spaceopen, "tempLounge": 250, "tempWerkstatt": 250, "timestamp": 0, "age": 500 - } - + } response = app.response_class( response=json.dumps(data), status=200, @@ -76,17 +106,10 @@ def data_cccapi(): # Implementierung der SpaceAPI @app.route('/spaceapi') def data_spaceapi(): + global zone_door_status spaceopen = False - now = datetime.datetime.now(pytz.timezone('Europe/Berlin')) - dayofweek = now.strftime("%w") - # Hardcode Mittwoch Abend offen - if dayofweek == "3": - if now.hour >= 18: - spaceopen = True - # Hardcode Samstag Abend offen - if dayofweek == "6": - if now.hour >= 18: - spaceopen = True + if zone_door_status == "OPEN": + spaceopen = True data = { "api": "0.13", "space": "warpzone ",