83 Commits

Author SHA1 Message Date
Samuele Locatelli d1e9467395 Merge branch 'release/AgenticRefactorReadParallela_04' 2026-05-13 09:55:27 +02:00
Samuele Locatelli 5f952faad7 Update vers zip/md6 x nexus (install salt) 2026-05-13 09:51:27 +02:00
Samuele Locatelli c6f3f7a50a Fix output 2/3 hex + log 2026-05-13 09:39:50 +02:00
Samuele Locatelli d449d60e09 Merge tag 'AgenticRefactorReadParallela_03' into develop
Update spostamento vers 2.6 superate in old
2026-05-12 19:00:07 +02:00
Samuele Locatelli 3caeebcffa Merge branch 'release/AgenticRefactorReadParallela_03' 2026-05-12 18:59:55 +02:00
Samuele Locatelli 1288b3f119 archiviazione old vers 2.6 2026-05-12 18:59:37 +02:00
Samuele Locatelli 8323373e78 Merge tag 'AgenticRefactorReadParallela_02' into develop
Update script x installare vers 3.1 da salt
2026-05-12 18:58:14 +02:00
Samuele Locatelli b19c153466 Merge branch 'release/AgenticRefactorReadParallela_02' 2026-05-12 18:57:55 +02:00
Samuele Locatelli d97eb23b5e Spostamento udpate vers 2.5/2.6 + creazione nuovo script update 3.1 che opera modifiche in IOB.cfg 2026-05-12 18:56:02 +02:00
Samuele Locatelli fd1a74986e Update vers 3 con nuovo zip x nextcloud 2026-05-12 18:40:40 +02:00
Samuele Locatelli 6cfc850276 folder move in archive 2026-05-12 18:36:24 +02:00
Samuele Locatelli a7c3312574 Creazione folder x 2.6 e 3.0... 2026-05-12 18:30:46 +02:00
Samuele Locatelli 802c748e56 Merge tag 'AgenticRefactorReadParallela_01' into develop
Update readParallela versione 3.x.x:
- riscrittura agent-assisted del codice in genere
- update readme.md locale
- gestione unificata 8-12 bit con unico script
2026-05-12 18:26:16 +02:00
Samuele Locatelli 727c03ac7f Merge branch 'release/AgenticRefactorReadParallela_01' 2026-05-12 18:25:07 +02:00
Samuele Locatelli 0835f942ee Minor fix x logging restart 2026-05-12 18:24:18 +02:00
Samuele Locatelli aeab49bbc7 Update README x IOB-PI 2026-05-12 18:12:20 +02:00
Samuele Locatelli db5bb9f2e1 rimozione file backup 2026-05-12 18:09:04 +02:00
Samuele Locatelli 8b1d297068 Aggiunto demo IOB.cfg con 8/12 inputs + fix gestione hexoutput 2026-05-12 18:08:43 +02:00
Samuele Locatelli 7387c51631 Fix commento 2026-05-12 17:52:03 +02:00
Samuele Locatelli 2198f01425 Controllo:_ accetta solo 8 / 12 come numParams (Input) + fix hex a 2-3 digits (8-12 inputs) 2026-05-12 17:46:28 +02:00
Samuele Locatelli 1f31183e8d Update con parametrizzazione num pins/input 2026-05-12 17:45:49 +02:00
Samuele Locatelli 4752bf6fcf update vers num 2026-05-12 16:56:25 +02:00
Samuele Locatelli cb914a4f56 Ottimizzazione lettura GPIO 2026-05-12 16:34:15 +02:00
Samuele Locatelli 328a5fe540 aggiunta commenti 2026-05-12 16:30:43 +02:00
Samuele Locatelli 1c1344ea63 update condizione di LOG 2026-05-12 16:19:32 +02:00
Samuele Locatelli d09977f17a Continuo testing versione 2026-05-12 16:14:20 +02:00
Samuele Locatelli 7eaf82a248 Merge branch 'develop' of https://gitlab.steamware.net/egalware-web/mes/mapo/Mapo-IOB into develop 2026-05-12 15:50:15 +02:00
Samuele Locatelli 6bb6e8b4f9 Rimesso commenti iniziali 2026-05-12 15:50:13 +02:00
Samuele Locatelli 66fd0f417c Inizio modifiche readParallela (12bit) v3 da coding assistant 2026-05-12 15:48:45 +02:00
Samuele Locatelli 69540243d4 Aggiunta preliminare readme a corredo del ReadParallela 2026-05-12 15:48:15 +02:00
Samuele Locatelli 4b6d7b415c Update x fix errore file to_retry 2026-05-12 12:08:35 +02:00
Giancarlo Rottoli c859db736f Aggiunto Barcode Prototipi 2026-03-30 12:05:21 +02:00
Samuele Locatelli b8c24f8458 Modalità modifica servizio MapoIOB con ritardo avvio + restart 2026-03-27 09:06:36 +01:00
Samuele Locatelli 40f50c27c2 Update fam stati Jetco x compressori (aggiunto emergenza) 2025-11-25 11:16:41 +01:00
Samuele Locatelli eddc8af40b Merge tag 'UpdateMainBranch' into develop
Update gestione stati x compressori Jetco
2025-11-25 11:04:19 +01:00
Samuele Locatelli 63f5a41628 Merge branch 'release/UpdateMainBranch' 2025-11-25 11:04:00 +01:00
Samuele Locatelli 3d1f8eaf7b Aggiunta nota 2025-11-25 11:03:40 +01:00
Samuele Locatelli 29d6fb7917 Update state machine compressori 2025-11-25 10:47:10 +01:00
Samuele Locatelli 683370a8c0 update conf x ingressi compressori (aggiunto emergenza) 2025-11-25 10:02:24 +01:00
Samuele Locatelli a1db884838 Update sendReboot e unix x verioni python3 2025-07-31 14:02:30 +02:00
Samuele Locatelli b5a20dca80 Aggiunta scripts x update salt a 2.6.1 2025-04-23 16:39:00 +02:00
Samuele Locatelli 08eeacebde Pulizia readParallela da aree commentate vecchia coda... 2025-04-23 09:02:59 +02:00
Samuele Locatelli fb653f2f67 Update readParallela con redis + copia in 12/8 bit 2025-04-22 18:19:36 +02:00
Samuele Locatelli 7b99b448d5 test redis x readParallela 2025-04-22 18:00:02 +02:00
Samuele Locatelli 5d9d7a76e7 Aggiunta codice test coda python redis con Python-RQ 2025-04-22 17:59:48 +02:00
Samuele Locatelli d94cf7d08b Aggiunta coda redis da testare + script redis preliminare 2025-04-17 19:46:08 +02:00
Samuele Locatelli 4e9857a5eb Merge branch 'develop' of https://gitlab.steamware.net/egalware-web/mes/mapo/Mapo-IOB into develop 2025-04-17 19:08:23 +02:00
Samuele Locatelli 0bbcd78de3 IOB-PI v 2.5.3: update linguaggio x esecuzione su raspberry 8 bit con sintassi Raspbian 12 e python 3.11 2025-04-17 19:08:21 +02:00
Giancarlo Rottoli f0772e9111 RUL Nuove Famiglie 100 Donati e 22 JETCO 2025-04-17 12:08:12 +02:00
Giancarlo Rottoli dc3a155975 Rule Ingr. Jetco x Riscaldamento 2025-02-18 10:05:41 +01:00
Samuele Locatelli af9b889be5 Aggiunto file rul e csv x 8 bit macchina jetco 67 2025-02-17 08:30:26 +01:00
Samuele Locatelli 1ab052a489 Aggiunta state machine 67 a 6 bit x Jetco, da provare SE si riesce a cablare 2025-02-17 07:59:04 +01:00
Giancarlo Rottoli 372f93de45 Mod. Fam. 12 e 22 Jetco x Riscaldamento Autom. 2025-01-31 16:24:49 +01:00
Giancarlo Rottoli e98621e524 IMI 2024-10-28 09:59:37 +01:00
Giancarlo Rottoli bf2291c399 Mod. Fam. Stati 12 Jetco + csv 2024-10-08 17:08:56 +02:00
Samuele Locatelli e9acec7774 Merge branch 'develop' of https://gitlab.steamware.net/egalware-web/mes/mapo/Mapo-IOB into develop 2024-10-08 08:52:46 +02:00
Samuele Locatelli a663dabaca Fix famiglia 12 x SIM 2024-10-08 08:52:44 +02:00
Giancarlo Rottoli 5b1a6235a7 Ingressi Caber - Check non modificato csv 2024-09-23 08:41:46 +02:00
Samuele Locatelli 71557f9336 Merge tag 'FixIn2Ev03' into develop
Fix algoritmo sostituzione: riportato indietro
2024-09-20 15:01:06 +02:00
Samuele Locatelli 0015d54f60 Merge branch 'release/FixIn2Ev03' 2024-09-20 15:00:50 +02:00
Samuele Locatelli 01926cca84 Riporto indietro algoritmo sostituzione tags 2024-09-20 15:00:33 +02:00
Samuele Locatelli 08893d7954 Merge tag 'FixIn2Ev02' into develop
Fix gestione sostituzione eventi: considerando spazio pre/post
2024-09-20 10:08:28 +02:00
Samuele Locatelli 77a8602d40 Merge branch 'release/FixIn2Ev02' 2024-09-20 10:08:15 +02:00
Samuele Locatelli 31ecb827f2 Update algoritmo sostituzione eventi con spazio pre/post x evitare duplicati mal interpretati 2024-09-20 10:07:51 +02:00
Samuele Locatelli 6fedee77b2 Merge tag 'FixIn2Ev01' into develop
Fix gestione ingressi/eventi
- fix pagine pre-processing file rul
- fix pagina generazione ingressi 2 eventi
2024-09-18 07:40:33 +02:00
Samuele Locatelli 14f48e4d5c Merge branch 'release/FixIn2Ev01' 2024-09-18 07:40:03 +02:00
Samuele Locatelli 42fa3db8be Refresh pubblicazione 2024-09-18 07:39:37 +02:00
Samuele Locatelli 93eb3977a0 Trovato fix x ingressi 2 eventi, da verificare sia ok x stati poi... 2024-09-17 19:25:23 +02:00
Samuele Locatelli f53fc4c53f Fix gestione bonifica file *.rul
- non modifica micro stati x mappe ingressi
- fix grafici vari (minori)
2024-09-17 17:56:44 +02:00
Samuele Locatelli 0327246395 Merge tag 'AddForceResetPage02' into develop
Correzione gestione base url + fix vers numb
2024-08-19 18:32:57 +02:00
Samuele Locatelli 762b4f70ed Merge branch 'release/AddForceResetPage02' 2024-08-19 18:32:47 +02:00
Samuele Locatelli 55f40679b5 - Fix gestione calc olo versione
- Fix reload con baseUrl
2024-08-19 18:32:16 +02:00
Samuele Locatelli 3b55637cd7 Merge tag 'AddForceResetPage01' into develop
Aggiunta pagina ForceReset
2024-08-19 18:23:13 +02:00
Samuele Locatelli 6b4ca6bd6c Merge branch 'release/AddForceResetPage01' 2024-08-19 18:23:05 +02:00
Samuele Locatelli 1620ba43d5 Aggiunta pagina ForceReset 2024-08-19 18:20:50 +02:00
Giancarlo Rottoli 5fed4d1ef2 Aggiornamento x LVF 2024-07-22 17:09:07 +02:00
Samuele Locatelli f7cff6e969 Merge tag 'AddUpdater_2.5' into develop
Aggiunta gestione email anche al resp (se diverso da notifica
principale)
2024-06-14 18:47:23 +02:00
Samuele Locatelli e124ebfd97 Merge branch 'release/AddUpdater_2.5' 2024-06-14 18:47:08 +02:00
Samuele Locatelli e94c621b96 Fix messaggi sendReboot 2024-06-13 10:04:16 +02:00
Samuele Locatelli 872f66eee4 Fix num versione in log + fix script udpate 2.5.2 2024-06-13 09:39:56 +02:00
Samuele Locatelli 1924809d0f Update script IOB-PI a 8/12 IN 2024-06-12 17:55:41 +02:00
Samuele Locatelli deca006214 Merge tag 'AddIobPiZip_02' into develop
Update conf x install IOB-PI
2024-06-11 10:33:47 +02:00
Samuele Locatelli 9eb16e3e65 Merge branch 'release/AddIobPiZip_02' 2024-06-11 10:31:00 +02:00
263 changed files with 18849 additions and 2359 deletions
+72
View File
@@ -0,0 +1,72 @@
[id]
idxMacchina = 0001
#idxMacchina = SIMUL_01
#numParams=8
numParams=12
[web]
URLBASE = http://10.74.82.218/MP/RIOC/api/IOB/input/
URLALIVE = http://10.74.82.218/MP/RIOC/api/IOB
URLENABLED = http://10.74.82.218/MP/RIOC/api/IOB/enabled/
URLADV1 = ?valore=
URLREBO = http://10.74.82.218/MP/IOC/api/IOB/sendReboot/
URLINFO = http://10.74.82.218/MP/RIOC/api/IOB/setM2IOB/
[time]
SAMPLETIME = 0.10
TIMEOUTSHORT = 0.50
TIMEOUTLONG = 80
SENDURLTIME = 0.10
NMAXSEND = 5
[log]
LOGLEVEL = 10
LOGFILE = logfile.txt
LOGREBO = logReboot.txt
[comm]
port = /dev/ttyAMA0
[blink]
MAX_COUNTER_BLINK = 30
bit0 = 0
bit1 = 0
bit2 = 0
bit3 = 0
bit4 = 0
bit5 = 0
bit6 = 0
bit7 = 0
bit8 = 0
bit9 = 0
bit10 = 0
bit11 = 0
[invert]
bit0 = 0
bit1 = 0
bit2 = 0
bit3 = 0
bit4 = 0
bit5 = 0
bit6 = 0
bit7 = 0
bit8 = 0
bit9 = 0
bit10 = 0
bit11 = 0
[filter]
MAX_COUNTER_FILTER = 8
bit0 = 0
bit1 = 0
bit2 = 0
bit3 = 0
bit4 = 0
bit5 = 0
bit6 = 0
bit7 = 0
bit8 = 0
bit9 = 0
bit10 = 0
bit11 = 0
+77 -1
View File
@@ -8,6 +8,31 @@ Se il minion è taggato come iop-pi bast dare state apply, poiché dallo stato t
* iob-pi.sls
* iob-setup.sls
altrimenti meglio dare
* iob-pi-install
* iob-pi-upgrade
va poi controllato il numero di inputs e va specificato all'inizio del file IOB.cfg a seconda che abbia 8 o 12 inputs
<code>
#numParams=8
numParams=12
</code>
## Approfondimenti
Valutato python-rq x gestione code con redis tramite esecuzione workers python gestiti in autonomia:
<code>
https://python-rq.org/
https://python-rq.org/docs/workers/
</code>
Testato ma al momento non è rispondente ai requisiti del programma per cui si rischia un blocco inf ase di invio se server non OK, per ora implementata copia "manuale" della coda verso redis per salvaguardare dati accumulati (vers 2.6.x)
## MD5 zip##
@@ -15,4 +40,55 @@ creazione MD5: da powershell
<code>
Get-FileHash .\Mapo.zip -Algorithm MD5
</code>
</code>
## ReadParallela IOB-PI
### Panoramica
`readParallela.py` è uno script di acquisizione dati ad alta frequenza progettato per Raspberry Pi. Interfaccia una scheda GPIO personalizzata per leggere 12 ingressi digitali paralleli, applica vari filtri di elaborazione del segnale e mette in coda gli eventi per la trasmissione asincrona a un server remoto tramite Redis e HTTP.
### Funzionalità Principali
#### 1. Acquisizione e Elaborazione Segnali
Lo script interroga 12 pin GPIO a un intervallo configurabile (`SAMPLETIME`). Per ogni ingresso, applica una pipeline di elaborazione a tre stadi:
* **Inversione:** Inverte la logica del segnale se configurata per un bit specifico.
* **Filtraggio Segnali Brevi (Debounce):** Filtra i picchi elettrici o il rumore richiedendo che il segnale rimanga stabile per un numero specifico di cicli (`MAX_COUNTER_FILTER`).
* **Gestione Blinking:** Rileva e gestisce segnali "blinking", permettendo il rilevamento di eventi basati su timing specifici.
#### 2. Impacchettamento Dati
Una volta elaborati, i 12 bit vengono aggregati in un unico valore intero e convertiti in una stringa Esadecimale.
#### 3. Code e Trasmissione Eventi
Per garantire che la lettura ad alta velocità non sia interrotta dalla latenza di rete:
* **Coda Redis:** Le variazioni rilevate (e gli eventi di timeout) vengono datate e inserite in una lista Redis (`IOB`).
* **Invio Asincrono:** Un thread dedicato in background (`svuotaCoda`) estrae periodicamente gli elementi dalla coda Redis e esegue richieste HTTP a un server centrale.
* **Affidabilità:** Lo script implementa un meccanismo di "retry" e monitora la disponibilità del server (`URLALIVE`) per gestire i periodi offline.
#### 4. Gestione Timeout
Lo script monitora due tipi di timeout:
* **Timeout Breve:** Assicura che lo stato di un segnale venga registrato anche se cambia rapidamente.
* **Timeout Lungo:** Fornisce un sistema di fallback per garantire la coerenza dello stato su periodi più lunghi.
### Dettagli di Implementazione (Versione Refactored)
Lo script è stato modernizzato con i seguenti miglioramenti:
* **Design Orientato agli Oggetti:** La logica è incapsulata all'interno della classe `ReadParallelaIOB`, eliminando la dipendenza da variabili globali pericolose.
* **Operazioni Bitwise Efficienti:** Sostituzione dei controlli manuali `if` con operatori bitwise per una ricostruzione dei bit più veloce e ottimizzazione dell'accesso agli attributi nelle loop critiche.
* **Networking Moderno:** Sostituzione di `urllib` con la libreria `requests` per una comunicazione HTTP più robusta e leggibile.
* **Configurazione Ottimizzata:** Utilizzo di cicli per caricare le impostazioni per singolo bit dal file di configurazione.
### Configurazione
Le impostazioni sono gestite tramite `IOB.cfg`, tra cui:
* `[time]`: Frequenze di campionamento e timeout.
* `[id]`: Identificativo macchina.
* `[web]`: URL per la trasmissione dati e controlli di connettività.
* `[blink]`, `[invert]`, `[filter]`: Configurazione per singolo bit per l'elaborazione dei segnali.
* `[log]`: Livello di logging e percorsi dei file.
### Dipendenze
* `RPi.GPIO`: Per l'interfacciamento hardware.
* `redis`: Per la gestione della coda locale.
* `requests`: Per la comunicazione web.
* `configparser`: Per la gestione della configurazione.
BIN
View File
Binary file not shown.
+248
View File
@@ -0,0 +1,248 @@
#!/bin/bash
# script per update IOB-PI (filre readParallela) secondo la tipologia del raspberry tra 8 e 12 ingressi
revNum=`awk '/^Revision/ {sub("^1000", "", $3); print $3}' /proc/cpuinfo`
anno=2000
model='na'
ram=0
# decodifica da questa tabella: https://elinux.org/RPi_HardwareHistory e https://ozzmaker.com/check-raspberry-software-hardware-version-command-line
case $revNum in
0002 | 0003 | 0004 | 0005 | 0006)
anno='2012'
model='B'
ram=256
;;
0007 | 0008 | 0009)
anno='2013'
model='A'
ram=256
;;
000d | 000e | 000f)
anno='2012'
model='B'
ram=512
;;
0010)
anno='2014'
model='B+'
ram=512
;;
0011)
anno='2014'
model='CM1'
ram=512
;;
0012)
anno='2014'
model='A+'
ram=256
;;
0013)
anno='2015'
model='B+'
ram=512
;;
0014)
anno='2014'
model='CM1'
ram=512
;;
0015)
anno='2014'
model='A+'
ram=512
;;
a01040 | a01041 | a21042)
anno='2015'
model='2 Model B'
ram=1024
;;
a22042)
anno='2016'
model='2 Model B'
ram=1024
;;
900021)
anno='2016'
model='A+'
ram=512
;;
900032)
anno='2016'
model='B+'
ram=512
;;
900092)
anno='2015'
model='Zero'
ram=512
;;
900093 | 920093)
anno='2016'
model='Zero'
ram=512
;;
9000c1)
anno='2017'
model='Zero W'
ram=512
;;
a02082 | a22082 | a22082 | a32082)
anno='2016'
model='3 Model B'
ram=1024
;;
a020a0)
anno='2017'
model='CM3'
ram=1024
;;
a020d3)
anno='2018'
model='3 Model B+'
ram=1024
;;
9020e0)
anno='2018'
model='3 Model A+'
ram=512
;;
a02100)
anno='2019'
model='CM3'
ram=1024
;;
a03111)
anno='2019'
model='4 Model B'
ram=1024
;;
b03111 | b03112)
anno='2019'
model='4 Model B'
ram=2048
;;
b03114)
anno='2020'
model='4 Model B'
ram=2048
;;
b03115)
anno='2022'
model='4 Model B'
ram=2048
;;
c03111 | c03112)
anno='2019'
model='4 Model B'
ram=4096
;;
c03114)
anno='2020'
model='4 Model B'
ram=4096
;;
c03115)
anno='2022'
model='4 Model B'
ram=2048
;;
d03114)
anno='2020'
model='4 Model B'
ram=8192
;;
d03115)
anno='2022'
model='4 Model B'
ram=8192
;;
902120)
anno='2021'
model='Zero 2 W'
ram=512
;;
*)
anno='2000'
model='Unknown'
ram=128
;;
esac
echo "RPI $anno | model $model | RAM $ram"
echo "Revisione: $revNum"
# default a 8 IN...
selIn=8
# verifico anno/ram, se almeno 2014 e 1gb --> 12 bit...
if [ $anno -gt 2015 ] && [ $ram -gt 512 ]; then
selIn=12
fi
echo "Scelta versione $selIn ingressi"
# fermo esecuzione...
/etc/init.d/MapoIOB stop
echo "Arrestato servizio..."
# mv file readParallela.py corrente...
mv readParallela.py readParallela_$(date -d "today" +"%Y%m%d").py
# secondo tipo copio il file corretto
if [ $selIn -eq 8 ]; then
cp -f readParallela_8.py readParallela.py
else
cp -f readParallela_12.py readParallela.py
fi
# fix permessi
chown pi: *
chmod +x readP*
# riavvio esecuzione...
/etc/init.d/MapoIOB restart
echo "Modifiche effettuate..."
echo "Attenzione: verificare effettiva partenza servizio, per farlo digitare il comando"
echo "/etc/init.d/MapoIOB restart"
echo "--------------------------------"
echo "In particolare il file IOB.cfg deve contenere NMAXSEND = 5 nella sezione [time]"
echo "--------------------------------"
echo "Inoltre verificare presenza sezioni [blink] [invert] [filter]"
echo "--------------------------------"
+287
View File
@@ -0,0 +1,287 @@
#!/bin/bash
# script per update IOB-PI (file readParallela) secondo la tipologia del raspberry tra 8 e 12 ingressi
revNum=`awk '/^Revision/ {sub("^1000", "", $3); print $3}' /proc/cpuinfo`
anno=2000
model='na'
ram=0
# decodifica da questa tabella: https://elinux.org/RPi_HardwareHistory e https://ozzmaker.com/check-raspberry-software-hardware-version-command-line
case $revNum in
0002 | 0003 | 0004 | 0005 | 0006)
anno='2012'
model='B'
ram=256
;;
0007 | 0008 | 0009)
anno='2013'
model='A'
ram=256
;;
000d | 000e | 000f)
anno='2012'
model='B'
ram=512
;;
0010)
anno='2014'
model='B+'
ram=512
;;
0011)
anno='2014'
model='CM1'
ram=512
;;
0012)
anno='2014'
model='A+'
ram=256
;;
0013)
anno='2015'
model='B+'
ram=512
;;
0014)
anno='2014'
model='CM1'
ram=512
;;
0015)
anno='2014'
model='A+'
ram=512
;;
a01040 | a01041 | a21042)
anno='2015'
model='2 Model B'
ram=1024
;;
a22042)
anno='2016'
model='2 Model B'
ram=1024
;;
900021)
anno='2016'
model='A+'
ram=512
;;
900032)
anno='2016'
model='B+'
ram=512
;;
900092)
anno='2015'
model='Zero'
ram=512
;;
900093 | 920093)
anno='2016'
model='Zero'
ram=512
;;
9000c1)
anno='2017'
model='Zero W'
ram=512
;;
a02082 | a22082 | a22082 | a32082)
anno='2016'
model='3 Model B'
ram=1024
;;
a020a0)
anno='2017'
model='CM3'
ram=1024
;;
a020d3)
anno='2018'
model='3 Model B+'
ram=1024
;;
9020e0)
anno='2018'
model='3 Model A+'
ram=512
;;
a02100)
anno='2019'
model='CM3'
ram=1024
;;
a03111)
anno='2019'
model='4 Model B'
ram=1024
;;
b03111 | b03112)
anno='2019'
model='4 Model B'
ram=2048
;;
b03114)
anno='2020'
model='4 Model B'
ram=2048
;;
b03115)
anno='2022'
model='4 Model B'
ram=2048
;;
c03111 | c03112)
anno='2019'
model='4 Model B'
ram=4096
;;
c03114)
anno='2020'
model='4 Model B'
ram=4096
;;
c03115)
anno='2022'
model='4 Model B'
ram=2048
;;
d03114)
anno='2020'
model='4 Model B'
ram=8192
;;
d03115)
anno='2022'
model='4 Model B'
ram=8192
;;
902120)
anno='2021'
model='Zero 2 W'
ram=512
;;
*)
anno='2000'
model='Unknown'
ram=128
;;
esac
echo "RPI $anno | model $model | RAM $ram"
echo "Revisione: $revNum"
# default a 8 IN...
selIn=8
# verifico anno/ram, se almeno 2014 e 1gb --> 12 bit...
if [ $anno -gt 2015 ] && [ $ram -gt 512 ]; then
selIn=12
fi
echo "Scelta versione $selIn ingressi"
# fermo esecuzione...
#/etc/init.d/MapoIOB stop
systemctl stop MapoIOB
echo "Arrestato servizio..."
#fix permessi
chown pi:pi . -R
# mv file readParallela.py corrente...
mv readParallela.py readParallela_$(date -d "today" +"%Y%m%d").py
# secondo tipo copio il file corretto
if [ $selIn -eq 8 ]; then
cp -f readParallela_8.py readParallela.py
else
cp -f readParallela_12.py readParallela.py
fi
# fix permessi
chown pi:pi . -R
chmod +x readP*
# conf redis
# aggiunta passwd accesso se mancante
file="/etc/redis/redis.conf"
line="24068Seriate"
# Check if the line is missing
if grep -q "$line" "$file"; then
echo "requirepass ok!"
else
# execute the sed command
echo "rquirepass missing! adding"
sed -i '/#requirepass*/a\requirepass 24068Seriate' $file
fi
# aggiunta criterio save da num changes
line="save 3600 1 600 10"
if grep -q "$line" "$file"; then
echo "save rdb OK"
else
# execute the sed command
echo "save rdb not found: adding!"
sed -i '/# save 3600*/a\save 3600 1 600 10 300 100 60 10000' $file
fi
# riportare bind a solo localhost
sed -i '/#bind 127.0.0.1*/c\bind 127.0.0.1 -::1' $file
# rimozione bind a rete globale x test
sed -i '/bind 0.0.0.0/c\#bind 0.0.0.0' $file
#riavvio redis
systemctl restart redis
# riavvio esecuzione...
systemctl restart MapoIOB
echo "Modifiche effettuate..."
echo "Attenzione: verificare effettiva partenza servizio, per farlo digitare il comando"
echo "/etc/init.d/MapoIOB restart"
echo "--------------------------------"
echo "In particolare il file IOB.cfg deve contenere NMAXSEND = 5 nella sezione [time]"
echo "--------------------------------"
echo "Inoltre verificare presenza sezioni [blink] [invert] [filter]"
echo "------------------"
@@ -8,13 +8,15 @@ Conflicts=shutdown.target
[Service]
Type=forking
Restart=no
Restart=on-failure
RestartSec=5
TimeoutSec=5min
IgnoreSIGPIPE=no
KillMode=process
GuessMainPID=no
RemainAfterExit=yes
SysVStartPriority=1
ExecStartPre=/bin/sleep 5
ExecStart=/etc/init.d/MapoIOB start
ExecStop=/etc/init.d/MapoIOB stop
@@ -1,7 +1,7 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
# readParallela v. 2.5.1
# readParallela v. 2.5.2 12 Ingressi
# - single instance timer
# - invio multiplo x send eventi accodati
# - gestione segnali BLINKING
@@ -12,6 +12,7 @@
# - (2.4.8) versione adatta a raspberry PI vecchia generazione (GPIO corto, 8bit)
# - (2.5) Fix (hope) ciclo "wait send to complete", gestione timeout (rety infinito se IO riparte in modo anomalo)
# - (2.5.1) Fix numero versione 18.05.2023
# - (2.5.2) Fix gestione eccezioni con report dettagliato
#---------------------------------------------------------------
# levare locking
@@ -46,7 +47,7 @@ MAXRETRY = 10
# numero campioni filtraggio segnale ballerino
MAX_COUNTER_BLINK = 10
PROGRAM_NAME ="ReadPar IOB-pi v.2.5.1"
PROGRAM_NAME ="ReadPar IOB-pi v.2.5.2"
# DA FILE CONF
idxMacchina = "1001"
@@ -214,7 +215,7 @@ def readParallelaFiltrata():
#ciclo per ogni segnale
for i in xrange(12) :
# print (i)
#print (i)
# v2.1 gestione inversione bit ingresso
@@ -339,7 +340,9 @@ def readParallelaFiltrata():
current = hex( new_value ).replace ( "0x" , "" ).upper()
except:
except Exception as e:
print "Errore in readParallelaFiltrata \n\n"
print str(e)
pass
return current
@@ -355,10 +358,9 @@ def accoda():
except Queue.Full:
logPro.error( "Queue full" + `dtEve` + '#' + `value` + '#' + `cont` )
except:
except Exception as e:
logPro.error( "NETWORK:Errore http-no com rete-timeout" + url )
#print "Url aforte" , url
logPro.error(str(e))
#--------------------------------------------------------------
# svuotaCoda x invio dati al server
@@ -450,16 +452,17 @@ def svuota_coda():
sending = '0'
to_retry = MAXRETRY
logPro.info("END WAIT, reset to_retry var")
else:
pass
else:
pass
except:
except Exception as e:
if onLine == '1':
logPro.error("Server Non raggiungibile")
logPro.error(str(e))
#print "Non raggiungibile"
onLine = '0'
@@ -496,8 +499,9 @@ def contatore():
ctr +=1
ctr = ctr % 10000 # round robin 10000 eventi x track
cont = str(ctr)
except:
print("errore incremento contatore")
except Exception as e:
print("errore incremento contatore \n\n")
print(str(e))
#---------------------------------------------------------------
# avvia porta parallela
@@ -541,8 +545,9 @@ def avviaParallela():
GPIO.setup(in_10, GPIO.IN) # input 10
GPIO.setup(in_11, GPIO.IN) # input 11
except:
print( "\n\n" + PROGRAM_NAME + " - Error 3 on RPi.GPIO ! \n\n")
except Exception as e:
print( "\n\n" + PROGRAM_NAME + " - Error 3 on RPi.GPIO ! \n\n")
print str(e)
sys.exit(1)
@@ -598,7 +603,7 @@ try:
B_inverting[4] = config.getint ( 'invert' , 'bit4' )
B_inverting[5] = config.getint ( 'invert' , 'bit5' )
B_inverting[6] = config.getint ( 'invert' , 'bit6' )
B_inverting[7] = config.getint ( 'invert' , 'bit7' )
B_inverting[7] = config.getint ( 'invert' , 'bit7' )
B_inverting[8] = config.getint ( 'invert' , 'bit8' )
B_inverting[9] = config.getint ( 'invert' , 'bit9' )
B_inverting[10] = config.getint ( 'invert' , 'bit10' )
@@ -613,7 +618,7 @@ try:
B_filter[4] = config.getint ( 'filter' , 'bit4' )
B_filter[5] = config.getint ( 'filter' , 'bit5' )
B_filter[6] = config.getint ( 'filter' , 'bit6' )
B_filter[7] = config.getint ( 'filter' , 'bit7' )
B_filter[7] = config.getint ( 'filter' , 'bit7' )
B_filter[8] = config.getint ( 'filter' , 'bit8' )
B_filter[9] = config.getint ( 'filter' , 'bit9' )
B_filter[10] = config.getint ( 'filter' , 'bit10' )
@@ -622,8 +627,9 @@ try:
MAX_COUNTER_FILTER = config.getint ( 'filter' , 'MAX_COUNTER_FILTER' )
except:
except Exception as e:
print "\n\n" + PROGRAM_NAME + ' - Error 4 - in config file ' 'IOB.cfg'
print str(e)
sys.exit(1)
#--------------------------------------------
@@ -642,10 +648,12 @@ try:
logSnd = logging.getLogger('sendUrl')
logPro = logging.getLogger('program')
except:
except Exception as e:
# manda mail o simili - FARE!!!
print "LOG: Impossibile creare file log con nome "
print "LOG: Impossibile creare file log con nome"
print (LOGFILE)
print "\n\n"
print str(e)
#--------------------------------------------
@@ -699,8 +707,9 @@ try:
import RPi.GPIO as GPIO
except RuntimeError:
print( "\n\n" + PROGRAM_NAME + " - Error 1 - you need superuser privileges")
except:
except Exception as e:
print( "\n\n" + PROGRAM_NAME + " - Error 2 - you need superuser privileges. USE 'sudo' to run your script\n\n")
print str(e)
sys.exit(1)
@@ -726,8 +735,9 @@ while 1:
try:
time.sleep (SAMPLETIME)
except:
logPro.info("First_SLEEP: errore attesa sampletime")
except Exception as e:
logPro.info("First_SLEEP: errore attesa sampletime")
logPro.error(str(e))
# lettura dati da IOB
value = readParallelaFiltrata()
@@ -740,8 +750,9 @@ while 1:
errormsglen = 0
accoda()
contatore()
except:
except Exception as e:
logPro.error("URLBROWSER: errore registrazione valore e accoda")
logPro.error(str(e))
pass
#enable e reset timer
to_enable = True
@@ -761,8 +772,9 @@ while 1:
errormsglen = 0
accoda()
contatore()
except:
except Exception as e:
logPro.error("URLBROWSER: errore registrazione valore e accoda TO_short")
logPro.error(str(e))
pass
to_short = TIMEOUTSHORT
to_enable = False # dopo un colpo il timer breve viene disabilitato
@@ -777,7 +789,8 @@ while 1:
errormsglen = 0
accoda()
contatore()
except:
except Exception as e:
logPro.error("URLBROWSER: errore registrazione valore e accoda TO_long")
logPro.error(str(e))
pass
to_long = TIMEOUTLONG
@@ -2,7 +2,7 @@
# -*- coding: utf-8 -*-
# sendReboot v. 1.8
# - (2.5.2) Fix gestione eccezioni con report dettagliato
#---------------------------------------------------------------
@@ -23,7 +23,7 @@ import time
#---------------------------------------------------------------
# COSTANTI
PROGRAM_NAME = "SendReboot IOB-pi v.1.8"
SR_PROG_NAME = "SendReboot IOB-pi v.2.5.2"
# DA FILE CONF
idxMacchina = "99"
@@ -39,44 +39,48 @@ numTry = 1
def chiamaUrl(numTry):
try:
urllib.urlopen ( url )
numTry = numTry + 10
except Exception, e:
print e
logging.info ( e )
print "Url aforte" , url
return numTry
try:
urllib.urlopen ( url )
numTry = numTry + 10
except Exception as e:
print("Errore in chiamaUrl")
print(str(e))
logging.info ( str(e) )
print("Url chiamato: " , url)
return numTry
#---------------------------------------------------------------
# Funzione di recupero mac address per poterlo inviare a MPIO
#---------------------------------------------------------------
def getMAC(interface):
# Return the MAC address of interface
try:
str = open('/sys/class/net/' + interface + '/address').read()
except:
str = "00:00:00:00:00:00"
return str[0:17]
# Return the MAC address of interface
try:
str = open('/sys/class/net/' + interface + '/address').read()
except:
str = "00:00:00:00:00:00"
return str[0:17]
#---------------------------------------------------------------
# MAIN
#---------------------------------------------------------------
try:
config = ConfigParser.RawConfigParser()
config.read ( 'IOB.cfg' )
config = ConfigParser.RawConfigParser()
config.read ( 'IOB.cfg' )
idxMacchina = config.get ( 'id' , 'idxMacchina' )
idxMacchina = config.get ( 'id' , 'idxMacchina' )
URLREBO = config.get ( 'web' , 'URLREBO' )
URLREBO = config.get ( 'web' , 'URLREBO' )
LOGFILE = config.get ( 'log' , 'LOGREBO' )
except:
print "\n\n" + PROGRAM_NAME + ' - Error 4 - in config file ' 'IOB.cfg'
sys.exit(1)
LOGFILE = config.get ( 'log' , 'LOGREBO' )
except Exception as e:
print("\n\n" + SR_PROG_NAME + ' - Error 4 - in config file ' 'IOB.cfg')
print(str(e))
sys.exit(1)
#--------------------------------------------
@@ -84,26 +88,27 @@ except:
#--------------------------------------------
try:
# log = Logger(LOGFILE)
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(name)-8s %(levelname)-8s %(message)s',
datefmt='%Y-%m-%d %H:%M:%S',
filename=LOGFILE,
filemode='a')
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(name)-8s %(levelname)-8s %(message)s',
datefmt='%Y-%m-%d %H:%M:%S',
filename=LOGFILE,
filemode='a')
except:
# manda mail o simili - FARE!!!
print "LOG: Impossibile creare file log con nome "
print (LOGFILE)
except Exception as e:
# manda mail o simili - FARE!!!
print("LOG: Impossibile creare file log con nome ")
print(LOGFILE)
print(str(e))
#--------------------------------------------
print "\n\n" + PROGRAM_NAME + "\n\n"
print("\n\n" + SR_PROG_NAME + "\n\n")
global startstatus
startstatus = 1
if startstatus == 1:
logging.info("Avvio Programma " + PROGRAM_NAME)
logging.info("Avvio Programma " + SR_PROG_NAME)
# lettura file configurazione
@@ -120,7 +125,7 @@ url = URLREBO + idxMacchina + "&mac=" + myMac
# modifica: cerco se ho inviato segnale altrimenti ritento invio...
while (numTry < 11):
logging.info("Tentativo invio URL: " + `numTry` )
logging.info("Tentativo invio URL: $numTry" )
numTry = chiamaUrl(numTry)
time.sleep(3)
numTry = numTry + 1

Some files were not shown because too many files have changed in this diff Show More