fusion_plating_sensors had broader scope (sensor_type taxonomy,
dashboards, location flexibility) but its core logic was ALL
scaffolding — alert rules stored thresholds with zero side effects,
measurement create just filled a name sequence, the HTTP endpoint
required user-auth session cookies. Meanwhile fusion_plating_iot had
the actual working alerting: in-spec checks, quality-hold auto-raise
with excursion dedupe, setpoint + deviation, token-auth ingest for
headless hardware. Plus 563 real readings from the pilot Pi.
Right unification: keep fusion_plating_iot (working) as the base,
port the valuable structural bits from fusion_plating_sensors, demolish
the latter entirely.
**Ported to fusion_plating_iot:**
- `fp.sensor.type` — taxonomy model with 8 seeded types (Temperature,
pH, Conductivity, Level, Pressure, Flow, Concentration, Switch).
Richer than the device_kind Selection; hardware-independent (one
"Temperature" type covers DS18B20 / PT100 / thermocouple).
- `fp.sensor.dashboard` — named grouping of sensors with
out-of-spec count. Simple but useful ("ENP Line 1 — all tanks")
without the broken alert-rule complexity.
- Extended `fp.tank.sensor`:
* `uuid` (stable logical ID, survives hardware swaps)
* `sensor_type_id` (link to the taxonomy above)
* `work_center_id`, `facility_id`, `location_name` — alternatives to
tank_id so probes can live on ovens, ambient air, effluent pipes
without faking a "tank"
* `effective_location` computed — picks the first non-empty of the
four location fields for display
**Post-install hook** backfills UUID + default sensor_type on existing
live sensors. Verified on the 2 pilot sensors: both got UUIDs, both
auto-assigned the Temperature type via device_kind=ds18b20 mapping.
**Deleted** (all of fusion_plating_sensors, 1205 LOC):
- fp.sensor (replaced by fp.tank.sensor with added fields)
- fp.sensor.measurement (replaced by fp.tank.reading)
- fp.sensor.alert.rule (replaced by inline alert_min/max + working hold)
- /fp/sensor/measure controller (replaced by /fp/iot/ingest)
- fp.sensor.measure.wizard (not needed — Odoo's normal create form works)
- The "Sensors" submenu hierarchy (Dashboards/All Sensors/Measurements/
Sensor Types) that created the dup menus the user reported
**Menu now**: Plating → Operations → Sensors
- Dashboards (fp.sensor.dashboard)
- Sensors (fp.tank.sensor — renamed from "Tank Sensors" since
it supports non-tank locations now)
- Readings (fp.tank.reading)
- Sensor Types (fp.sensor.type)
No data loss: all 591 Pi readings preserved (up from 563 earlier as
the live poller kept running throughout the refactor). Brief 503 on
the Pi during the Odoo module-update restart; poller auto-retried on
the next 30s tick.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
61 lines
2.0 KiB
Python
61 lines
2.0 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Copyright 2026 Nexa Systems Inc.
|
|
# License OPL-1 (Odoo Proprietary License v1.0)
|
|
# Part of the Fusion Plating product family.
|
|
|
|
{
|
|
'name': 'Fusion Plating — IoT Integration',
|
|
'version': '19.0.1.0.0',
|
|
'category': 'Manufacturing/Plating',
|
|
'summary': 'Wire physical tank sensors to Fusion Plating — live '
|
|
'temperature / chemistry readings with auto quality holds '
|
|
'on out-of-spec.',
|
|
'description': """
|
|
Fusion Plating — IoT Integration
|
|
================================
|
|
|
|
Bridges the generic `iot` module (IoT Box + device management) to
|
|
plating-specific models:
|
|
|
|
* ``fp.tank.sensor`` — maps an ``iot.device`` to a
|
|
``fusion.plating.tank`` (or a ``fusion.plating.bath``).
|
|
* ``fp.tank.reading`` — time-series log of every sensor reading.
|
|
* Auto-creates a ``fusion.plating.quality.hold`` when a reading
|
|
falls outside the tank/bath's target range (per
|
|
``fusion.plating.bath.parameter`` spec).
|
|
|
|
Supports both the Odoo-IoT proxy path (Pi running iot_drivers) AND
|
|
a direct HTTP ingest path (``/fp/iot/ingest``) for sensors that
|
|
skip the proxy and POST straight to Odoo with a shared secret.
|
|
|
|
Part of the Fusion Plating product family by Nexa Systems Inc.
|
|
""",
|
|
'author': 'Nexa Systems Inc.',
|
|
'website': 'https://www.nexasystems.ca',
|
|
'maintainer': 'Nexa Systems Inc.',
|
|
'support': 'support@nexasystems.ca',
|
|
'license': 'OPL-1',
|
|
'price': 0.00,
|
|
'currency': 'CAD',
|
|
'depends': [
|
|
'iot',
|
|
'fusion_plating',
|
|
'fusion_plating_quality',
|
|
],
|
|
'data': [
|
|
'security/ir.model.access.csv',
|
|
'data/ir_config_parameter_data.xml',
|
|
'data/fp_sensor_type_data.xml',
|
|
'views/fp_sensor_type_views.xml',
|
|
'views/fp_sensor_dashboard_views.xml',
|
|
'views/fp_tank_sensor_views.xml',
|
|
'views/fp_tank_reading_views.xml',
|
|
'views/fusion_plating_tank_views.xml',
|
|
'views/fp_iot_menu.xml',
|
|
],
|
|
'post_init_hook': 'post_init_hook',
|
|
'installable': True,
|
|
'application': False,
|
|
'auto_install': False,
|
|
}
|