all sensors should now send data to the webserver at the ip and port defined in sender.py.
78 lines
1.7 KiB
Python
78 lines
1.7 KiB
Python
import time
|
|
import json
|
|
import os
|
|
import board
|
|
import digitalio
|
|
from sender import send_data as s
|
|
|
|
json_file = "json/ky018_data.json"
|
|
MAX_ENTRIES = 3000
|
|
|
|
light_pin = digitalio.DigitalInOut(board.D17)
|
|
light_pin.direction = digitalio.Direction.INPUT
|
|
|
|
dataldr = {
|
|
"location": "Hausstrasse - 1",
|
|
"sensors": [
|
|
{
|
|
"id": "sensor_004",
|
|
"type": "light",
|
|
"unit": "bool",
|
|
"readings": []
|
|
}
|
|
]
|
|
}
|
|
datalive = {
|
|
"location": "Hausstrasse - 1",
|
|
"sensors": [
|
|
{
|
|
"id": "sensor_004",
|
|
"readings": [{}]
|
|
}
|
|
]
|
|
}
|
|
|
|
def load_data():
|
|
if os.path.exists(json_file):
|
|
with open(json_file, 'r', encoding='utf-8') as f:
|
|
return json.load(f)
|
|
else:
|
|
return dataldr.copy()
|
|
|
|
def save_data(data):
|
|
with open(json_file, 'w', encoding='utf-8') as f:
|
|
json.dump(data, f, indent=4, ensure_ascii=False)
|
|
|
|
def capture_and_store(state):
|
|
timestamp = int(time.time())
|
|
data = load_data()
|
|
livetemp = datalive.copy()
|
|
|
|
entry = { "ts": timestamp, "value": state}
|
|
|
|
data["sensors"][0]["readings"].append(entry)
|
|
livetemp["sensors"][0]["readings"][0] = {entry}
|
|
|
|
if len(data["sensors"][0]["readings"]) > MAX_ENTRIES:
|
|
data["sensors"][0]["readings"] = data["sensors"][0]["readings"][-MAX_ENTRIES:]
|
|
|
|
s(livetemp)
|
|
livetemp.clear()
|
|
save_data(data)
|
|
|
|
print(load_data())
|
|
s(load_data())
|
|
|
|
try:
|
|
while True:
|
|
if light_pin.value:
|
|
light_state = True
|
|
else:
|
|
light_state = False
|
|
|
|
print(f"Lichtzustand: {light_state}")
|
|
capture_and_store(light_state)
|
|
time.sleep(2)
|
|
|
|
except KeyboardInterrupt:
|
|
print("Programm beendet.")
|