Cache last value for each topic and only insert into DB on change
Reduces database sizemaster
parent
adf4e564d9
commit
b88fcb2f04
|
@ -1,7 +1,7 @@
|
||||||
{ python3 }:
|
{ python3 }:
|
||||||
with python3.pkgs;
|
with python3.pkgs;
|
||||||
buildPythonPackage rec {
|
buildPythonPackage rec {
|
||||||
name = "mqtt-config";
|
name = "mqtt-tools";
|
||||||
src = ./.;
|
src = ./.;
|
||||||
propagatedBuildInputs = [ pyyaml paho-mqtt ];
|
propagatedBuildInputs = [ pyyaml paho-mqtt ];
|
||||||
buildInputs = [];
|
buildInputs = [];
|
||||||
|
|
20
mqtt-collect
20
mqtt-collect
|
@ -7,6 +7,7 @@ import paho.mqtt.client
|
||||||
import sqlite3
|
import sqlite3
|
||||||
import datetime
|
import datetime
|
||||||
|
|
||||||
|
MAX_VALUE_CACHE_SIZE = 1024
|
||||||
|
|
||||||
def init_db(path, topics):
|
def init_db(path, topics):
|
||||||
db = sqlite3.connect(path)
|
db = sqlite3.connect(path)
|
||||||
|
@ -31,6 +32,8 @@ def main():
|
||||||
def on_disconnect(client, userdata, rc):
|
def on_disconnect(client, userdata, rc):
|
||||||
client.reconnect()
|
client.reconnect()
|
||||||
|
|
||||||
|
current_values = {}
|
||||||
|
|
||||||
def on_message(client, userdata, msg):
|
def on_message(client, userdata, msg):
|
||||||
try:
|
try:
|
||||||
c = db.cursor()
|
c = db.cursor()
|
||||||
|
@ -48,11 +51,18 @@ def main():
|
||||||
else:
|
else:
|
||||||
value = float(msg.payload)
|
value = float(msg.payload)
|
||||||
print(f"{table}: {value} ")
|
print(f"{table}: {value} ")
|
||||||
c.execute(f'CREATE TABLE IF NOT EXISTS "{table}" '
|
|
||||||
'(timestamp timestamp, value real)')
|
if current_values.get(table, None) != value:
|
||||||
c.execute(f'INSERT INTO "{table}" VALUES (?, ?)', (ts, value))
|
current_values[table] = value
|
||||||
#c.execute(f'SELECT * from "{table}"')
|
if len(current_values) > MAX_VALUE_CACHE_SIZE:
|
||||||
db.commit()
|
first_entry = current_values.keys().next()
|
||||||
|
del current_values[first_entry]
|
||||||
|
|
||||||
|
c.execute(f'CREATE TABLE IF NOT EXISTS "{table}" '
|
||||||
|
'(timestamp timestamp, value real)')
|
||||||
|
c.execute(f'INSERT INTO "{table}" VALUES (?, ?)', (ts, value))
|
||||||
|
db.commit()
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f'Error writing to database: {e}')
|
print(f'Error writing to database: {e}')
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue