From 0d01b69dcd5791d62897afd38e1403faa29a67d5 Mon Sep 17 00:00:00 2001 From: "matthias.lotz" Date: Sat, 21 Mar 2026 10:57:10 +0100 Subject: [PATCH] fix: session-login auth + remove session_id unique constraint (1.5.0) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - odoo_client: session-based auth via /web/session/authenticate for multi-database Odoo (no db_name/dbfilter required) - mqtt_session: remove UNIQUE(device_id, session_id) constraint – device session_id is a local counter that resets on restart - iot_api: revert upsert workaround (no longer needed) - bump versions: iot_bridge 1.4.0 → 1.5.0, open_workshop_mqtt 18.0.1.4.0 → 18.0.1.5.0 --- .../open_workshop/open_workshop_mqtt/__manifest__.py | 2 +- .../open_workshop_mqtt/models/mqtt_session.py | 7 +++---- iot_bridge/api/server.py | 4 ++-- iot_bridge/pyproject.toml | 2 +- 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/extra-addons/open_workshop/open_workshop_mqtt/__manifest__.py b/extra-addons/open_workshop/open_workshop_mqtt/__manifest__.py index f79a2ac..15092b4 100644 --- a/extra-addons/open_workshop/open_workshop_mqtt/__manifest__.py +++ b/extra-addons/open_workshop/open_workshop_mqtt/__manifest__.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- { 'name': 'Open Workshop MQTT', - 'version': '18.0.1.4.0', + 'version': '18.0.1.5.0', 'category': 'IoT', 'summary': 'MQTT IoT Device Integration for Workshop Equipment Tracking', 'description': """ diff --git a/extra-addons/open_workshop/open_workshop_mqtt/models/mqtt_session.py b/extra-addons/open_workshop/open_workshop_mqtt/models/mqtt_session.py index d0493e0..c13d93e 100644 --- a/extra-addons/open_workshop/open_workshop_mqtt/models/mqtt_session.py +++ b/extra-addons/open_workshop/open_workshop_mqtt/models/mqtt_session.py @@ -267,10 +267,9 @@ class MqttSession(models.Model): session.duration_formatted = f"{seconds}s" # ========== Constraints ========== - _sql_constraints = [ - ('session_id_unique', 'UNIQUE(session_id)', - 'Session ID must be unique!'), - ] + # Note: session_id is a device-local counter that resets on device restart. + # Therefore neither session_id alone nor (device_id, session_id) is globally + # unique. Idempotency is guaranteed at the event level via event_uid. @api.constrains('start_time', 'end_time') def _check_times(self): diff --git a/iot_bridge/api/server.py b/iot_bridge/api/server.py index e8bcd34..a6cf3d4 100644 --- a/iot_bridge/api/server.py +++ b/iot_bridge/api/server.py @@ -34,7 +34,7 @@ class ConfigServer: self.app = FastAPI( title="IoT Bridge Config API", description="Receives device configuration from Odoo", - version="1.4.0", + version="1.5.0", ) self.config_callback = config_callback self.mqtt_reconnect_callback = mqtt_reconnect_callback @@ -103,7 +103,7 @@ class ConfigServer: """Health check endpoint.""" return { "status": "ok", - "version": "1.4.0", + "version": "1.5.0", "devices": self.device_count, "subscriptions": self.subscription_count, "last_config_update": ( diff --git a/iot_bridge/pyproject.toml b/iot_bridge/pyproject.toml index 1b4e96a..f6ee6e4 100644 --- a/iot_bridge/pyproject.toml +++ b/iot_bridge/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "iot-bridge" -version = "1.4.0" +version = "1.5.0" description = "IoT MQTT Bridge for Odoo - Autonomous MQTT-to-Odoo Integration Service" requires-python = ">=3.10" readme = "README.md"