Il 19/03/2025 14:22, Leonardo Boselli ha scritto:
Premessa: i dati vengono o inviati da processi esterni creando dei file
che contengono all'interno il dato (o da solo o in un record CSV) oppure
aggiornati periodicamante da un processo cron
Hint: *standardizza* in un unico formato i dati da leggere. Cioè fai in
modo che da ogni sorgente arrivino nello stesso formato. Crei dei filtri
per ogni sorgente che convertono da quel che genera quella sorgente al
formato che intendi usare dopo. E già hai ridotto notevolmente la
complessità.
1. se ho uno script bash posso fare i test su variabili locali o
varibili di ambiente. Come faccio a fare il test sul contenuto di un
file, senza dovere fare prima un varlocale=`cat file` ?
Che test devi fare sul contenuto? Per capire se è stato aggiornato può
essere sufficiente analizzare i metadati, ma se devi proprio guardare il
contenuto lo devi leggere e parsare.
1bis. nel test di bash come metto una formula ?
Dipende dalla formula.
2. la presentazione viene fatta da uno script php, in certi casi però
è necessario che questo script "solleciti" i dati aggiornati.
il modo più semplice è fare una chiamata http al server remoto, che però
fornsce un record json .
E già nobbuono. Se servono i dati aggiornati, non deve (generalmente)
essere la presentazione a richiederli ma il filtro di ingresso.
Questo recold viene decodificato senza problemi con jq ma mi sono
trovato di fronte a un grosso problema con php, o chiesto a esperti di
quel sistema, ma non hannop saputo dare rispposte valide, e tutti gli
esmpi fanno riferimento a record jso "piatti".
Il record che mi arriva è del tipo
{"nome":"as001","gate:1":{"last_time":1742374708,"action"=1,"res":
[0.04,19]},"gate:2":{"last_time":1742374718,"action"=3,"res":[1.00,0.99]}}
Che sia piatto o meno, è indifferente: accedi allo stesso modo, solo
specificando più livelli.
e a me servono gate:1.action e i due valori di res . ma in php non sono
riuscito a trovare un modo di tirarli fuori, dovo aver dato
$ob=jsondecode($record); (ma var_dump($record) me li fa vedere tutti,
quindi la decodifica è giusta ...)
La struttura scritta in modo più leggibile è:
{
"nome":"as001",
"gate:1": {
"last_time":1742374708,
"action"=1,
"res": [0.04,19]
},
"gate:2": {
"last_time":1742374718,
"action"=3,
"res":[1.00,0.99]
}
}
Quindi devi usare
$ob['gate:1']['action']
$ob['gate:1']['res'][0]
$ob['gate:1']['res'][1]
--
Diego Zuccato
DIFA - Dip. di Fisica e Astronomia
Servizi Informatici
Alma Mater Studiorum - Università di Bologna
V.le Berti-Pichat 6/2 - 40127 Bologna - Italy
tel.: +39 051 20 95786