From 5095b2faf0606ddc56f49969bfe2f24da90c56e1 Mon Sep 17 00:00:00 2001 From: DasMoorhuhn Date: Thu, 30 May 2024 18:17:09 +0200 Subject: [PATCH] updated readme --- .media/41N1IH9jwoL._AC_SL1024_.jpg | Bin 18751 -> 40445 bytes README.md | 9 ++++++++- bluetooth tools/search_for_blc.py | 0 bluetooth tools/search_for_ble.py | 0 python/requierements.txt | 3 ++- python/src/devices.py | 2 ++ python/src/devices.yml | 8 ++++++++ python/src/discovery.py | 12 +++++++----- python/src/main.py | 2 +- 9 files changed, 28 insertions(+), 8 deletions(-) create mode 100644 bluetooth tools/search_for_blc.py create mode 100644 bluetooth tools/search_for_ble.py create mode 100644 python/src/devices.py create mode 100644 python/src/devices.yml diff --git a/.media/41N1IH9jwoL._AC_SL1024_.jpg b/.media/41N1IH9jwoL._AC_SL1024_.jpg index 7da6d4fddecb4e089ff24bc1a324f6fb3efc93f0..6a9cafba61e1cd7054f92c5ab5969b9662c3145f 100644 GIT binary patch literal 40445 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 literal 18751 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 F|Jj}s3-15` diff --git a/README.md b/README.md index b31c84a..75b446d 100644 --- a/README.md +++ b/README.md @@ -4,11 +4,14 @@ Python gateway for the [custom firmware](https://github.com/atc1441/ATC_MiThermo ![](.media/41N1IH9jwoL._AC_SL1024_.jpg) +**Features:** +- [DONE] Make in runnable in a docker container (because only cool people are using docker) + **TODOs:** - [WIP] Can run on Raspberry Pi (3, 4, zero w) or any other Linux driven hardware which has BLE and WiFi support - [WIP] Storing temperature, humidity and battery state as json in a text file - [WIP] Implement a loop for fetching the data every x minute -- [DONE] Make in runnable in a docker container (because only cool people are using docker) +- [WIP] Make discoveries async - [TODO] Make docker image smaller. I mean shiiit 1GB D: should be possible to be under 500MB - [TODO] Make a microPython version for using the raspberry pico w or any other microcontroller with BLE and WiFi support - [TODO] Collect data from multiple devices/gateways @@ -55,3 +58,7 @@ Run docker container. Killing the hosts bluetooth service is needed to access it ```bash sudo sh run_docker.sh ``` + +### MicroPython for MicroController + +Coming when I develop it... diff --git a/bluetooth tools/search_for_blc.py b/bluetooth tools/search_for_blc.py new file mode 100644 index 0000000..e69de29 diff --git a/bluetooth tools/search_for_ble.py b/bluetooth tools/search_for_ble.py new file mode 100644 index 0000000..e69de29 diff --git a/python/requierements.txt b/python/requierements.txt index 1a6a99d..d99d203 100644 --- a/python/requierements.txt +++ b/python/requierements.txt @@ -1 +1,2 @@ -bluepy \ No newline at end of file +bluepy +pyyaml \ No newline at end of file diff --git a/python/src/devices.py b/python/src/devices.py new file mode 100644 index 0000000..31e56f0 --- /dev/null +++ b/python/src/devices.py @@ -0,0 +1,2 @@ +import yaml + diff --git a/python/src/devices.yml b/python/src/devices.yml new file mode 100644 index 0000000..ce23077 --- /dev/null +++ b/python/src/devices.yml @@ -0,0 +1,8 @@ +devices: + - "A4:C1:38:83:05:E8": + name: "My Sensor" + room: "My Room" + + - "...": + name: "..." + room: "..." diff --git a/python/src/discovery.py b/python/src/discovery.py index c391264..d01ff82 100644 --- a/python/src/discovery.py +++ b/python/src/discovery.py @@ -1,3 +1,5 @@ +import asyncio +from threading import Thread from bluepy.btle import DefaultDelegate from bluepy.btle import Scanner from datetime import datetime @@ -16,9 +18,10 @@ class ScanDelegate(DefaultDelegate): global devices for (sdid, desc, val) in dev.getScanData(): - if self.is_temperature(sdid, val) and self.is_atc_device(dev): + if self.is_temperature(sdid, val): data_obj = Data(self.parse_data(val)) - devices.append([dev, data_obj]) + if self.is_atc_device(dev, data_obj): + devices.append([dev, data_obj]) @staticmethod def is_temperature(sdid, val): @@ -27,14 +30,13 @@ class ScanDelegate(DefaultDelegate): return True @staticmethod - def is_atc_device(dev): + def is_atc_device(dev, data_obj): global devices if 'A4:C1:38' not in dev.addr.upper(): return False - device_found = False - # print(devices.count(dev.addr.upper())) for device in devices: if str(device[0].addr) == str(dev.addr): return False print("Device %s (%s), RSSI=%d dB" % (dev.addr.upper(), dev.addrType, dev.rssi)) + print(f'\tTemp: {data_obj.temperature}°C, Humid: {data_obj.humidity}%, Batt: {data_obj.battery_percent}%\n') return True @staticmethod diff --git a/python/src/main.py b/python/src/main.py index ea8c109..8f018a1 100644 --- a/python/src/main.py +++ b/python/src/main.py @@ -10,7 +10,7 @@ if len(devices) > 0: device = device_list[0] data:Data - print(f'Temp: {data.temperature}°C, Humid: {data.humidity}%, Batt: {data.battery_percent}%') + # print(f'Temp: {data.temperature}°C, Humid: {data.humidity}%, Batt: {data.battery_percent}%') else: