big changes

This commit is contained in:
Remy Moll
2021-06-29 14:59:37 +02:00
parent ffc903b8f2
commit 21599019fd
25 changed files with 283 additions and 151 deletions

View File

@@ -1,16 +1,40 @@
from peewee import *
import datetime
import logging
logger = logging.getLogger(__name__)
from threading import Thread
#db = SqliteDatabase('data.db')
db = MySQLDatabase("AIO_sensors", host="192.168.1.101", port=3306, user="pi", passwd="supersecret")
# whyyy?
class Metric(Model):
time = DateTimeField()
from . import keys
dbk = keys.db_keys
db = PostgresqlDatabase(dbk["name"], user=dbk["username"], password=dbk["password"], host=dbk["url"], port=dbk["port"], autorollback=True)
class DBModel(Model):
# specific to the above DB
class Meta:
database = db
def save(self):
# fail-safe writing of the db-object. Usually threaded because the caller is threaded
try:
# db.connect()
super().save()
# db.close()
except Exception as e:
logger.error("Could not write to db. Dropping content of {}".format(self.__class__.__name__))
print(e)
# db.atomic().rollback()
class Metric(DBModel):
time = DateTimeField()
class SensorMetric(Metric):
# this is a continuous metric
temperature = IntegerField()
@@ -19,11 +43,16 @@ class SensorMetric(Metric):
class ChatMetric(Metric):
# this gets cumulated over one hour (or one day, or...)
activity = CharField()
read = BooleanField()
send = BooleanField()
execute = BooleanField()
class ErrorMetric(Metric):
# same as above
error = CharField()
error = TextField()
class List(DBModel):
name = CharField(unique=True)
content = TextField() # unlimited length, use to serialise list into

View File

@@ -1,32 +1,58 @@
from models import db
from models import *
import datetime as dt
from random import randint
from . import models
def create_tables():
with db:
db.create_tables([SensorMetric, ChatMetric, ErrorMetric])
class DBLogging:
"""Create a connection to a remote database and log some quantities that will be visualized otherwhere"""
def __init__(self):
self.db = models.db
self.sensors = models.SensorMetric
self.chats = models.ChatMetric
self.errors = models.ErrorMetric
self.lists = models.List
# self.create_tables()
# def create_tables(self):
# with self.db as db:
# db.create_tables([self.sensors, self.chats, self.errors, self.lists])
create_tables()
# read from json, excel, txt ... whatever
now = dt.datetime.timestamp(dt.datetime.now())
for i in range(1000):
with db:
sensor_data = SensorMetric.create(
time = now + i,
temperature = 23,
humidity = 30 + randint(0,20),
luminosity = 1
)
chat = ChatMetric(
time = now + i,
activity = "Hello world"
)
errors = ErrorMetric(
time = now + i,
error = "Could not load module"
)
# writin to the db gets handled through the model directly
# create_tables()
# # read from json, excel, txt ... whatever
# now = dt.datetime.timestamp(dt.datetime.now())
# for i in range(1000):
# with db:
# sensor_data = SensorMetric.create(
# time = now + i,
# temperature = 23,
# humidity = 30 + randint(0,20),
# luminosity = 1
# )
# chat = ChatMetric(
# time = now + i,
# activity = "Hello world"
# )
# errors = ErrorMetric(
# time = now + i,
# error = "Could not load module"
# )