Ecco una descrizione della configurazione:
Dati di input: Ho diverse fonti per i dati di input del sensore (GPS e una serie di altri dati di sensori provenienti da fonti diverse).
- Tutti i singoli input sono costituiti da un timestamp, il nome dell'input e il valore.
- Non esiste un elenco definito di input, ma possono apparire nuovi input il cui nome non era noto prima. Anche gli input possono scomparire di nuovo.
- Il tasso di aggiornamento degli Input non è né predeterminato né fisso. Potrebbe essere periodico o sporadico, ma non conosciamo la sua recidiva prima e anche questo è soggetto a modifiche.
Il mio obiettivo:
Voglio riportare lo stato corrente degli Input (solo il valore più recente) in una ricorrenza fissa, ad es. ogni secondo, tramite MQTT a un server.
Non è necessario memorizzare i dati di input dopo aver inviato il messaggio MQTT.
Quando uno specifico ingresso del sensore non è disponibile per diversi secondi, non deve più far parte del messaggio MQTT.
Il mio problema:
Come immagazzino i dati di input prima di inviare l'attuale "istantanea" nella recidiva fissa al server MQTT?
La mia soluzione corrente (?! brutto hack?!):
- Ogni volta che viene visualizzato un nuovo valore di input del sensore, scrivo il timestamp e il valore in un file con il nome dell'ingresso del sensore in una singola cartella che viene utilizzata per tutti gli input.
- Se il file esiste già, lo sovrascrivo semplicemente, poiché è importante solo il valore più recente del sensore.
- Per non avere troppo vecchi dati di input del sensore in giro, rimuovo i file che sono stati creati più di un numero definito di secondi fa.
-
Esempio: Ingresso del sensore La latitudine GPS è memorizzata nel file
latitude.dat
, che ha una riga contenente il timestamp e il valore di latitudine:pi@raspberrypi ~ $ cat latitude.dat
1534448235 46.2439877495
La soluzione funziona ed è abbastanza flessibile da gestire questo compito, ma non ne sono affatto felice. Ho pensato di usare un database SQL, ma in qualche modo penso a causa della natura degli input, non è nemmeno adatto. Qualcuno ha una buona idea, quale altra struttura dati potrei usare per la memorizzazione dei dati di input?
Modifica I dati del sensore non devono sopravvivere a un'interruzione di corrente.