MDM-080 · Import delle configurazioni 3.2.x nella nuova versione¶
| Campo | Valore |
|---|---|
| Gruppo | 6 · Migrazione del parco |
| Assegnato a (proposta) | Lorenzo |
| Priorità | P1 |
| Stima indicativa | M |
| Stato | 🔄 in corso |
| Attività del piano | T9.2 |
| Dipende da | MDM-030 |
Contesto¶
La nuova versione (oggi linea stage, da unire in main) salva la configurazione in SQLite e, se il database non ha ancora schema_versions, scrive i valori di default: un box 3.2.x aggiornato ripartirebbe con mac vuoto, non configurato e disinserito. L'import dei file JSON c'era ed è stato tolto il 27/02/2026. Analisi e corrispondenza dei campi: migrazione-box-alla-nuova-versione.md.
Cosa fare (sviluppo su stage, rilascio con l'unione in main)¶
- [x] Al primo avvio, prima dei default: se esistono
config.json/setting.json, importarli con la corrispondenza dei campi (envirment→environmentconproduction→prod,enable_webRtc→enable_webrtc,enable_screen_shot→enable_screenshot,gpio_usb→io_settings). Fatto il 30/10/2026 sustage, non committato:app/core/db/migrations/legacy_import.py, chiamato daInitialMigration_001. - [x] Stato inserito/disinserito: da
arm_state.disarmed(3.2.9) oppure, se la tabella manca (3.1.9–3.2.2), dal detector (wrapper 3.x/api/v1/detection/status, wrapper 2.x/frigate/disarm/status, GANZ/api/rule/es/disarm/); se non si legge,LegacyImportErrore nessuna scrittura.configured = true,environmentdaenvirment. Il detector va letto prima di fermare lo stack vecchio: è compito del ponte (MDM-081). - [ ] Wrapper: confrontare la configurazione del wrapper Flask (2.0.1, 3.0.6) con quella FastAPI e convertirla se serve.
- [x] Conservare i file originali in una copia di backup (
legacy_3x_backup/); non cancellarli. - [x] Comando
mdm db import-legacy(solo anteprima, password nascoste;--no-read-detectorper non interrogare il detector). - [x] Chiarire
pin.json. Il "PIN" è una scheda GPIO su USB collegata in seriale al box Frigate (gpio_usbinconfig.jsonè la porta, per esempio/dev/ttyUSB0; comandi testualigpio readall/gpio set N/gpio clear Na 19200 baud). Introdotta il 12/11/2024 (40bc6e7c,app/services/pin/inmain), attiva solo segpio_usbè valorizzato. Funzioni: ingresso 0 = inserimento/disinserimento da un contatto esterno (per esempio una centrale antifurto); ingresso 3 = allarme verso il server dei log (send_alarm_in); ingressi 6 e 7 riportati comealarm_innello stato; uscite 6 e 7 = relè impulsivi (5 s) comandati da MQTT (trigger_pin).pin.jsoncontiene la polarità (system_arm,alarm_trigger,relay_triggerper uscita) e l'ultimo stato letto. Nella lineastageil PIN è stato tolto il 27/02/2026 (137bf876, "Removed no longer used pin handler"): restano solo il campoio_settings.gpio_usb, mostrato dal pannello, e due gestori MQTT,trigger_pinsegnato come deprecato efrigate_update_pin_config, che chiama ancorapin_handlere quindi fallisce sempre. Sul parco non risulta in uso: nel censimento del 28/10/2026 tutti i 29 box che rispondono (3.1.9 Frigate e GANZ, 3.2.1, 3.2.2, 3.2.9) hannohas_pin = false, cioègpio_usbvuoto. L'import segnalagpio_usbvalorizzato come non supportato e non importapin.json. Da verificare sui box non raggiungibili. Decisione del 30/10/2026: il PIN non si supporta più. Tolti, non committati: inmdm_installation(stage) le tre azioni MQTT del PIN e il campogpio_usbdiIOModel(le configurazioni salvate con quel campo si caricano ancora); inmdm_web_panel(dev) il campogpioUsbdiIOConfigEntity.has_pinresta nello stato letto da midserver e pannello finché ci sono box 3.x.sound_url→io_settings.horns: importato come tromba DataLab all'IP dell'URL solo seenable_soundè vero; la 3.x chiamavahttps://<ip>, la nuova versionehttp://<ip>:80, quindi porta e protocollo da verificare su una tromba vera. - [ ] Test con file reali di alcuni box (anonimizzati): 3.1.9 GANZ, 3.1.9/3.2.2 Frigate, 3.2.9 Frigate. Fatto: test automatici con file anonimizzati (3.2.9 Frigate, 3.1.9 GANZ) e prova della catena reale di migrazioni (001→007) su una copia dei file e del database 3.2.9 del box di prova
MDMTESTFRIGATE1: codice, impostazioni e stato inserito importati. Mancano file reali di un box GANZ.
Criteri di accettazione¶
Verifica del 02/11/2026: il codice dell'import è committato in origin/stage (db444987), quindi i riferimenti a «non committato» sopra descrivono il 30/10. Superati 17 test di import/gestore migrazioni e Ruff. Import 001→007 provato su copia del backup reale GANZ con stato letto dal detector e fornito al processo isolato: configurazione, impostazioni, I/O, stato e JSON conservati; seconda esecuzione senza cambiamenti, SQLite integro. La tabella arm_state del backup è vuota: la lettura del detector serve anche in questo caso. Restano un campo segnalato come non importato da esaminare, la verifica con log esistenti (backup GANZ: 0 log), wrapper e prova di avvio reale; ticket non completato. Dettaglio e limiti della prova.
- Su un database vuoto con i file di un box 3.2.x, la nuova versione parte con lo stesso
mac, detector, stream, privacy, impostazioni e stato inserito/disinserito. - Un box installato da zero continua a ricevere i default.
Rischi e attenzioni¶
I file reali contengono credenziali di GANZ e telecamere: usarli solo in locale, mai nei test versionati senza anonimizzarli.