diff --git a/Dockerfile b/Dockerfile index 2d972d4..2803780 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,9 +1,9 @@ FROM python:3.12-alpine3.20 AS build_bluepy RUN apk add \ - bluez \ make \ - git \glib-dev \ + git \ + glib-dev \ gcc \ build-base \ freetype-dev \ @@ -16,20 +16,22 @@ RUN git clone https://github.com/IanHarvey/bluepy.git && \ python3.12 setup.py install FROM python:3.12-alpine3.20 - -WORKDIR = /src -COPY python/src/ . -COPY python/requierements.txt . -COPY python/docker_entrypoint.sh / +WORKDIR /src +COPY ./python/src/ . +COPY ./python/requierements.txt . +COPY ./python/docker_entrypoint.sh / RUN mkdir data -VOLUME data +RUN touch DOCKER +VOLUME /src/data -RUN apk add sudo bluez +RUN apk add --no-cache sudo bluez tzdata +ENV TZ=Europe/Berlin # Copy bluepy from the bluepy build stage COPY --from=build_bluepy /usr/local/lib/python3.12/site-packages /usr/local/lib/python3.12/site-packages COPY --from=build_bluepy /usr/local/bin /usr/local/bin RUN pip3.12 install -r requierements.txt && rm requierements.txt +# RUN echo '@reboot root python3.12 /src/serve_json.py' >> /etc/crontab ENTRYPOINT sh /docker_entrypoint.sh \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 71086ff..0a3b958 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,5 +3,5 @@ version: '3' services: atc_mithermometer_gateway: image: dasmoorhuhn/atc-mithermometer-gateway:develop-alpine - container_name: ATC_MiThermometer_Gateway + container_name: ATC_MiThermometer_Gateway_Build build: . \ No newline at end of file diff --git a/python/docker_entrypoint.sh b/python/docker_entrypoint.sh index f672995..c9ddadd 100644 --- a/python/docker_entrypoint.sh +++ b/python/docker_entrypoint.sh @@ -1,8 +1,4 @@ -#!/bin/bash +#!/bin/sh -# service dbus start -# bluetoothd & - -/bin/sh - -sudo python3 main.py +python3.12 api_endpoints.py & +sudo python3.12 main.py \ No newline at end of file diff --git a/python/requierements.txt b/python/requierements.txt index 3d4fa3d..0965033 100644 --- a/python/requierements.txt +++ b/python/requierements.txt @@ -1,4 +1,6 @@ pyyaml bs4 lxml -requests \ No newline at end of file +requests +flask +flask_cors \ No newline at end of file diff --git a/python/src/api_endpoints.py b/python/src/api_endpoints.py new file mode 100644 index 0000000..6448f3b --- /dev/null +++ b/python/src/api_endpoints.py @@ -0,0 +1,39 @@ +import os +from flask import Flask +from flask import jsonify +from flask import send_from_directory +from flask_cors import CORS +from flask_cors import cross_origin + + +class API: + """ + API endpoints + """ + + def __init__(self): + self.app = Flask(import_name='backend', static_folder='/data', static_url_path='') + CORS(self.app) + self.app.config['CORS_HEADERS'] = 'Content-Type' + + # --------Static Routes------- + @self.app.route('/charts') + @cross_origin() + def serve_index(): + return send_from_directory('/src', 'chart.html') + + @self.app.route('/json') + @cross_origin() + def serve_get_list_of_json(): + workdir, filename = os.path.split(os.path.abspath(__file__)) + return jsonify(os.listdir(f'{workdir}/data')) + + @self.app.route('/json/') + @cross_origin() + def serve_json(path): + workdir, filename = os.path.split(os.path.abspath(__file__)) + return send_from_directory(f'{workdir}/data', path) + + +api = API() +api.app.run(host='0.0.0.0', port=8000) diff --git a/python/src/chart.html b/python/src/chart.html new file mode 100644 index 0000000..1f6bc71 --- /dev/null +++ b/python/src/chart.html @@ -0,0 +1,128 @@ + + + + + + Messdaten Charts + + + + + +

Messdaten Charts

+
+ + + + diff --git a/python/src/log_data.py b/python/src/log_data.py index b2a5589..54d541a 100644 --- a/python/src/log_data.py +++ b/python/src/log_data.py @@ -1,17 +1,19 @@ import os +import sys import json from data_class import Data from devices import Device -workdir, filename = os.path.split(os.path.abspath(__file__)) - def log_to_json(devices): + workdir, filename = os.path.split(os.path.abspath(__file__)) + for device in devices: dev, data_obj, from_config = device data_obj: Data from_config: Device - file_name = f'{workdir}{os.sep}data{os.sep}{str(data_obj.mac).replace(":", "-")}.json' + file_name = f'{workdir}/data/{str(data_obj.mac).replace(":", "-")}.json' + print(file_name) try: with open(file_name, 'r') as file: data = json.load(file) diff --git a/python/src/loop.py b/python/src/loop.py index e50ca33..df71b86 100644 --- a/python/src/loop.py +++ b/python/src/loop.py @@ -1,9 +1,10 @@ from time import sleep - +from log_data import log_to_json from discovery import start_discovery def start_loop(interval=60): while True: - start_discovery() + devices = start_discovery() + log_to_json(devices) sleep(interval) diff --git a/python/src/main.py b/python/src/main.py index c993e3d..79b9328 100644 --- a/python/src/main.py +++ b/python/src/main.py @@ -1,7 +1,9 @@ from discovery import start_discovery -from loop import start_loop from log_data import log_to_json +from loop import start_loop -devices = start_discovery() -log_to_json(devices) +# devices = start_discovery() +# log_to_json(devices) + +start_loop() diff --git a/run_docker.sh b/run_docker.sh index eae75ca..54837dd 100644 --- a/run_docker.sh +++ b/run_docker.sh @@ -1,12 +1,21 @@ TAG=develop-alpine CONTAINER=dasmoorhuhn/atc-mithermometer-gateway:$TAG -sudo killall -9 bluetoothd -docker stop $CONTAINER > /dev/null 2>&1 +sudo killall -9 bluetoothd > /dev/null 2>&1 +# docker stop $CONTAINER > /dev/null 2>&1 +sh stop_docker.sh +docker container rm ATC_MiThermometer_Gateway > /dev/null 2>&1 +echo Start container... docker run \ --cap-add=SYS_ADMIN \ --cap-add=NET_ADMIN \ --net=host \ + --name=ATC_MiThermometer_Gateway \ + --restart unless-stopped \ + --tty \ + -ti \ -v /var/run/dbus/:/var/run/dbus/ \ -v ./data:/src/data \ - $CONTAINER \ No newline at end of file + $CONTAINER \ + +docker container rm ATC_MiThermometer_Gateway > /dev/null 2>&1 \ No newline at end of file diff --git a/stop_docker.sh b/stop_docker.sh new file mode 100644 index 0000000..120d2ca --- /dev/null +++ b/stop_docker.sh @@ -0,0 +1,3 @@ +echo Stopping container gracefully... +docker stop ATC_MiThermometer_Gateway +echo Done \ No newline at end of file