diff --git a/default.nix b/default.nix index 9698d65..abef0a4 100644 --- a/default.nix +++ b/default.nix @@ -1,7 +1,7 @@ { python3 }: with python3.pkgs; buildPythonPackage rec { - name = "mqtt-config"; + name = "mqtt-tools"; src = ./.; propagatedBuildInputs = [ pyyaml paho-mqtt ]; buildInputs = []; diff --git a/mqtt-collect b/mqtt-collect index c47145d..0866ea2 100755 --- a/mqtt-collect +++ b/mqtt-collect @@ -7,6 +7,7 @@ import paho.mqtt.client import sqlite3 import datetime +MAX_VALUE_CACHE_SIZE = 1024 def init_db(path, topics): db = sqlite3.connect(path) @@ -31,6 +32,8 @@ def main(): def on_disconnect(client, userdata, rc): client.reconnect() + current_values = {} + def on_message(client, userdata, msg): try: c = db.cursor() @@ -48,11 +51,18 @@ def main(): else: value = float(msg.payload) print(f"{table}: {value} ") - c.execute(f'CREATE TABLE IF NOT EXISTS "{table}" ' - '(timestamp timestamp, value real)') - c.execute(f'INSERT INTO "{table}" VALUES (?, ?)', (ts, value)) - #c.execute(f'SELECT * from "{table}"') - db.commit() + + if current_values.get(table, None) != value: + current_values[table] = value + if len(current_values) > MAX_VALUE_CACHE_SIZE: + 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: print(f'Error writing to database: {e}')