289 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
Samuele Locatelli 06e5d6ceb2 Fix conf servizio inviato + update zip 2024-06-11 10:30:30 +02:00
Samuele Locatelli 4ecc3070cc update zip 2024-06-08 12:55:29 +02:00
Samuele Locatelli 75e142f607 Spostamednto zip + md5 e rigenerazione 2024-06-05 11:46:55 +02:00
Samuele Locatelli f52348912a Merge tag 'AddIobPiZip_01' into develop
Update iob-pi + migrazione
2024-06-05 11:32:03 +02:00
Samuele Locatelli 632a17a62c Merge branch 'release/AddIobPiZip_01' 2024-06-05 11:31:55 +02:00
Samuele Locatelli 7ad9cf43ab Update readme + update zip x vers 2.5 12 bit su nexus 2024-06-05 11:31:20 +02:00
Samuele Locatelli 9b74406d23 Merge branch 'develop' of https://gitlab.steamware.net/egalware-web/mes/mapo/Mapo-IOB into develop 2024-05-15 14:17:16 +02:00
Samuele Locatelli 81ee1dacd6 aggiunta class 67 x Jetco 2024-05-15 14:17:13 +02:00
Giancarlo Rottoli 90e3efb5cc File RULE Valvital 2024-04-30 14:49:44 +02:00
Giancarlo Rottoli 79f217f250 Sistemato Formatt. File RUL e Intestaz. + Fam. 15 csv 2024-03-27 17:53:10 +01:00
Giancarlo Rottoli 6e27d14e7e Add Famiglie Fluitek + Barcode 60 2024-03-08 17:25:45 +01:00
Giancarlo Rottoli 2ab0093423 Creaz. Famiglia 22 Jetco + sistemazione file 2024-02-16 18:01:37 +01:00
Giancarlo Rottoli 48f8549401 Merge remote-tracking branch 'origin/HEAD' into develop 2024-02-16 17:58:32 +01:00
Samuele Locatelli 46133bc94e Merge branch 'develop' 2024-01-26 18:46:46 +01:00
Samuele Locatelli 79a8746aac Merge remote-tracking branch 'gitlab/develop' into develop 2024-01-26 18:46:29 +01:00
Samuele Locatelli e24fce9a2a fix csv 67 2024-01-26 18:45:03 +01:00
Samuele Locatelli ca580fb771 Rinominato 45/67 (era 43...) 2024-01-26 18:44:20 +01:00
Giancarlo Rottoli 8556dbb0cd Aggiunto Evento Barc. Rottura Utensile ColCom 2024-01-18 17:18:51 +01:00
zaccaria.majid 648ab698fb commit x gian 2023-11-08 13:02:59 +01:00
Giancarlo Rottoli 5845b21631 File RUL ColCom Completati + Agg. Barcode Manuale 2023-11-08 12:56:42 +01:00
zaccaria.majid b1d4c4a75e fix popolamento liste 2023-11-08 12:27:05 +01:00
Giancarlo Rottoli 32639151c7 Fam. Stati 13 ColCom 2023-10-13 16:51:09 +02:00
zaccaria.majid 3cbffb991a Merge branch 'develop' 2023-10-06 10:52:56 +02:00
zaccaria.majid 5df0e12766 fix parentesi mancante 2023-10-06 10:48:15 +02:00
zaccaria.majid 56a2ae5852 Merge branch 'develop' of https://gitlab.steamware.net/egalware-web/mes/mapo/Mapo-IOB into develop 2023-10-06 10:43:27 +02:00
zaccaria.majid 77460d1b81 aggiunto controllo durante processo 2023-10-06 10:42:49 +02:00
Giancarlo Rottoli 1bef600b67 Sistemazione Ingressi COSMAP + Fam.10 e Fam.11 2023-09-27 16:22:22 +02:00
Giancarlo Rottoli 6c742962d1 Merge remote-tracking branch 'origin/develop' into develop 2023-09-27 15:11:06 +02:00
Samuele Locatelli dea7856c7f Merge tag 'FixFolderPermit01' into develop
Fix folder permission x generazione files temp e rules
2023-09-22 16:37:15 +02:00
Samuele Locatelli 94a417b169 Merge branch 'release/FixFolderPermit01' 2023-09-22 16:36:58 +02:00
Samuele Locatelli 88f4dae076 Fix anche processed 2023-09-22 16:31:12 +02:00
Samuele Locatelli 77e9dedc46 Update conf .placeholder 2023-09-22 16:30:35 +02:00
Samuele Locatelli 09bca1a908 Riorganizzazione cleanup directory 2023-09-22 16:18:16 +02:00
Samuele Locatelli 46e111e891 Ancora pulizia 2023-09-22 16:13:24 +02:00
Samuele Locatelli 484208bd14 fix gitignore 2023-09-22 16:13:03 +02:00
Samuele Locatelli 44cdd84b99 pulizia stati RULES 2023-09-22 16:12:39 +02:00
zaccaria.majid 98bbb01903 update log 2023-09-22 16:06:47 +02:00
Samuele Locatelli 5d090083da Merge branch 'master' into develop 2023-09-22 16:00:47 +02:00
zaccaria.majid 7a1cc4789a push per marco 2023-09-22 13:11:21 +02:00
Giancarlo Rottoli 81e87dd089 Merge remote-tracking branch 'origin/HEAD' into develop 2023-09-22 11:31:24 +02:00
zaccaria.majid c6239fcbd1 fix nome cartella state machine 2023-09-22 10:54:57 +02:00
zaccaria.majid 639a82ad25 FIX GRAFICI 2023-09-20 12:58:42 +02:00
zaccaria.majid b5fa1ffa35 ok controllo stati/eventi mancanti su db 2023-09-20 11:55:48 +02:00
zaccaria.majid 16f68cdd5f ok anche scrittura file nuovo pronto per dload 2023-09-19 15:42:16 +02:00
zaccaria.majid e246e919d0 ok fix files 2023-09-19 14:59:15 +02:00
zaccaria.majid 6a17af857f Merge branch 'master' of https://gitlab.steamware.net/egalware-web/mes/mapo/Mapo-IOB 2023-09-15 11:17:05 +02:00
zaccaria.majid 1310ef6121 fix grafico per errori 2023-09-15 11:17:00 +02:00
Samuele Locatelli 7f56a210dd Merge tag 'AddCleanupDir01' into develop
Fix cleanupDir
2023-09-14 15:05:46 +02:00
Samuele Locatelli aea7afa4ef Merge branch 'release/AddCleanupDir01' 2023-09-14 15:05:39 +02:00
Samuele Locatelli 4ecaae4867 Update x cleanup dir 2023-09-14 15:05:05 +02:00
Giancarlo Rottoli 781c1bc1dc Pulizia Eventi Barcode Manuale 2023-08-11 17:08:52 +02:00
zaccaria.majid fea49968a0 try fix 2023-08-11 17:00:57 +02:00
Giancarlo Rottoli a129e15c06 Merge branch 'develop' of https://gitlab.steamware.net/egalware-web/mes/mapo/Mapo-IOB into develop 2023-08-11 16:55:59 +02:00
Giancarlo Rottoli 06093b509e Sistemaz. Descrizioni + File Master e Fam. 20 2023-08-11 16:55:39 +02:00
zaccaria.majid 79b5beed5c Merge branch 'develop' 2023-08-11 15:31:32 +02:00
zaccaria.majid c129b35e06 ok gestione controlli eventi 2023-08-11 15:31:19 +02:00
Giancarlo Rottoli 9996d6df76 Pulizia File RULE 2023-08-11 09:50:43 +02:00
zaccaria.majid ff8271d7d6 fix minore clear lista 2023-08-10 15:27:31 +02:00
zaccaria.majid 5958e300f4 Merge branch 'develop' 2023-08-10 14:40:55 +02:00
zaccaria.majid b2679d52e2 fix commenti 2023-08-10 14:40:21 +02:00
zaccaria.majid 492c21a109 ok famiglie stati 2023-08-10 12:46:53 +02:00
zaccaria.majid 7f75622f8c OK visualizzazione famiglie ingressi 2023-08-10 11:09:35 +02:00
zaccaria.majid dab1a83722 Merge branch 'master' into develop 2023-08-10 09:35:25 +02:00
zaccaria.majid 6b37e12732 fix controllo congruenza stati in ingresso e in uscita 2023-08-10 09:22:07 +02:00
zaccaria.majid 7007241ed7 spostato controllo eventi inutilizzati in fileList 2023-08-09 16:04:43 +02:00
zaccaria.majid 9bac4a473e Merge remote-tracking branch 'origin/develop' 2023-08-09 15:15:14 +02:00
zaccaria.majid 6d50259b7e Merge branch 'develop' of https://gitlab.steamware.net/egalware-web/mes/mapo/Mapo-IOB into develop 2023-08-09 15:13:25 +02:00
zaccaria.majid 7f1c430ea3 ordinamenti vari 2023-08-09 15:13:19 +02:00
Giancarlo Rottoli e955fc3791 Merge branch 'develop' of https://gitlab.steamware.net/egalware-web/mes/mapo/Mapo-IOB into develop 2023-08-09 14:41:51 +02:00
Giancarlo Rottoli ec9b300ef3 Caricamento File RULE Stati Jetco e csv 2023-08-09 14:41:29 +02:00
zaccaria.majid 542086ce93 Merge remote-tracking branch 'origin/master' into develop 2023-08-09 10:24:20 +02:00
zaccaria.majid dc8565640a fix ordinamento personalizzato 2023-08-09 09:45:01 +02:00
zaccaria.majid 351fce46e3 ok ordinamento eventi e stati 2023-08-09 08:57:17 +02:00
zaccaria.majid 7e65cf4cc9 Merge branch 'develop' 2023-08-08 17:22:56 +02:00
zaccaria.majid 29f625b2c2 fix grafici 2023-08-08 17:19:13 +02:00
zaccaria.majid 7bf9062e1b ok rilevamento eventi e stati non utilizzati per ogni file 2023-08-08 17:08:43 +02:00
zaccaria.majid 3eb4b86cd6 stesso meccanismo anche x macchina transizione stati 2023-08-08 12:57:57 +02:00
zaccaria.majid 9a0f388733 FIX filtro e controllo eventi 2023-08-08 12:23:16 +02:00
zaccaria.majid 129d63cd1a fix gestione files 2023-08-07 16:49:17 +02:00
zaccaria.majid 57e647efd3 fix aggiornamenti vari 2023-08-07 16:42:58 +02:00
zaccaria.majid ab6b2ea2a9 prova intersect 2023-08-07 15:09:14 +02:00
zaccaria.majid cf941dcede fix grafici 2023-08-07 13:08:46 +02:00
zaccaria.majid d7cb3d2dbc fix filtro eventi e stati 2023-08-07 11:30:37 +02:00
zaccaria.majid 061e3aaf68 fix grafici x unificare le due pagine 2023-08-04 17:07:55 +02:00
zaccaria.majid 3b7b81cc4a Merge commit '2939dfb09304c048e5441464713ab24544efb9cc' 2023-08-04 16:32:48 +02:00
zaccaria.majid 2939dfb093 fix grafici 2023-08-04 16:29:59 +02:00
zaccaria.majid 22909f3fdd corretto ordinamento eventi csv 2023-08-04 12:41:14 +02:00
zaccaria.majid c9e4c53114 update gitlab yaml 2023-08-04 10:03:58 +02:00
zaccaria.majid fb0acf97e5 Merge commit '26c39d1ddc31b1e61bda8dd36c4dcd85877f1d84' 2023-08-04 10:00:33 +02:00
zaccaria.majid 26c39d1ddc fix ordinamento 2023-08-03 15:47:37 +02:00
zaccaria.majid 4466ac88e6 fix cartella di destinazione s tates 2023-08-03 13:08:49 +02:00
zaccaria.majid 52209ce3ea continuo fix generale 2023-08-03 13:04:03 +02:00
Samuele Locatelli 5d2fab0ea0 Merge branch 'develop' of https://gitlab.steamware.net/steamware/Mapo-IOB into develop 2023-08-03 08:41:34 +02:00
Samuele Locatelli 8b9c4cac06 update pdf 2023-08-03 08:41:32 +02:00
Samuele Locatelli 5758f998bd Aggiunta nota processing 2023-08-03 08:41:24 +02:00
zaccaria.majid 7317b6fc80 inizio nuova gestione anagrafica eventi 2023-08-02 16:30:25 +02:00
zaccaria.majid bf81aaac63 pulizia generale 2023-08-02 12:44:23 +02:00
zaccaria.majid 424c4b1641 ok spostamento metodi di calcolo 2023-08-02 11:28:45 +02:00
Samuele Locatelli f867cba96a fix limite file upload 2023-08-01 17:01:45 +02:00
Samuele Locatelli 329fd4b099 - Spostamento metodo da pagina a controller/servizio
- check su SM In2Ev
2023-08-01 16:57:23 +02:00
zaccaria.majid 3f1c488685 fix cartella di destinazione 2023-08-01 15:45:43 +02:00
zaccaria.majid 7eeb21df0c fix placeholder 2023-08-01 15:41:29 +02:00
zaccaria.majid 5026e4bd02 ,fix placeholder 2023-08-01 15:41:21 +02:00
zaccaria.majid c668c67b5d aggiunti placeholder 2023-07-31 17:40:27 +02:00
zaccaria.majid 0c843bfe2b ok gestione aggiornamento file status 2023-07-31 17:22:37 +02:00
zaccaria.majid 618b76ab28 Merge branch 'develop' of https://gitlab.steamware.net/egalware-web/mes/mapo/Mapo-IOB into develop 2023-07-31 12:20:45 +02:00
zaccaria.majid 970f36060e ancora scrittura redis 2023-07-31 12:20:39 +02:00
zaccaria.majid ce7ae13863 ok scrittura su redi 2023-07-31 12:20:29 +02:00
Samuele Locatelli ac825efca6 fix using 2023-07-28 17:28:19 +02:00
Samuele Locatelli d1f7506087 Update x gestione lettura/scrittura + logs 2023-07-28 17:18:26 +02:00
zaccaria.majid 6cd06e6278 aggiunto log 2023-07-28 14:59:11 +02:00
zaccaria.majid 6bfc2670d7 fix files list 2023-07-28 11:47:32 +02:00
zaccaria.majid a5e0cb7bae fix scrittura su db e generazione file in sequenza 2023-07-28 10:23:06 +02:00
zaccaria.majid 3063d3bdef aggiunta autenticazione windows 2023-07-28 08:22:22 +02:00
zaccaria.majid fb2f83603a fix file 2023-07-27 17:36:46 +02:00
zaccaria.majid b4e56f960e fix gestione cartelle per file processati 2023-07-27 17:07:27 +02:00
zaccaria.majid 645cf9aea3 fix ripetizione item in dictionary 2023-07-27 16:46:15 +02:00
zaccaria.majid 2c7a7d8035 file generati 2023-07-27 15:29:16 +02:00
zaccaria.majid 2f13e828c3 gestione macchina a stati 2023-07-27 15:29:10 +02:00
zaccaria.majid a1926bc4f1 aggiunto calcolo di se stesso condizionale 2023-07-27 08:39:28 +02:00
zaccaria.majid a0afc0523e fix gitignore 2023-07-27 08:38:55 +02:00
zaccaria.majid 8bcbb88dc2 aggiunto gitignore 2023-07-27 08:37:57 +02:00
zaccaria.majid b7ef2f60e8 ok generazione csv stati 2023-07-26 17:00:31 +02:00
zaccaria.majid a555828c35 ok scrittura su db in tabelle Chk 2023-07-26 12:26:41 +02:00
zaccaria.majid a85fc3b496 fix state machine che danno risultato negativo 2023-07-26 09:15:29 +02:00
zaccaria.majid e33f18c02d Predisposti controller e data service 2023-07-26 08:22:36 +02:00
zaccaria.majid 74f31ce985 aggiunto setup per interazione con db 2023-07-25 17:00:32 +02:00
zaccaria.majid 2150a3c402 Merge branch 'develop' of https://gitlab.steamware.net/egalware-web/mes/mapo/Mapo-IOB into develop 2023-07-25 15:37:46 +02:00
zaccaria.majid 08b98c64e5 aggiunto datapager 2023-07-25 15:37:42 +02:00
Samuele Locatelli d4e4c83acd Aggiunta preliminare machina Eventi <--> Stati 2023-07-25 14:57:19 +02:00
zaccaria.majid 0ed470c610 ok download file richiesti 2023-07-25 11:54:11 +02:00
zaccaria.majid a049b84f16 Merge branch 'develop' of https://gitlab.steamware.net/egalware-web/mes/mapo/Mapo-IOB into develop 2023-07-25 10:07:46 +02:00
zaccaria.majid c1e7970eec ok check dir e cmpFooter con versione 2023-07-25 10:07:28 +02:00
Samuele Locatelli da26f57e75 Aggiunta preliminare CI/CD 2023-07-24 16:31:57 +02:00
Samuele Locatelli cd34987745 FIx generazione vers number 2023-07-24 16:31:43 +02:00
Samuele Locatelli 6464dc8941 Aggiunto pubxml x IIS04 2023-07-24 16:31:32 +02:00
Samuele Locatelli 62fdd76bb4 update x publish profiles 2023-07-24 16:15:55 +02:00
Samuele Locatelli 78e22cf5ad Aggiunti pubxml files 2023-07-24 16:15:47 +02:00
zaccaria.majid e58ee47832 fix per uppercase vari e gestione nomi file generati 2023-07-24 15:52:23 +02:00
zaccaria.majid 8def552ab9 ok upload file 2023-07-24 12:21:04 +02:00
zaccaria.majid 398fe142ca fix return sui for necessari e reset variabile controllo inversione bit 2023-07-24 09:59:31 +02:00
zaccaria.majid 8c998cd46e inizio scrittura script per manipolazione file rule 2023-07-20 18:12:37 +02:00
Samuele Locatelli 8f9122478f Release preliminare progetto SMGen 2023-07-20 09:40:32 +02:00
Samuele Locatelli a6788be49f Merge tag 'FixIobPi_12bit_2.5' into develop
Fix gestione 12 bit su versione std e ultima
2023-07-18 17:15:44 +02:00
Samuele Locatelli 45c0c8bc07 Merge branch 'release/FixIobPi_12bit_2.5' 2023-07-18 17:15:30 +02:00
Samuele Locatelli 476390cd78 fix doc xls donati 2023-07-18 17:15:06 +02:00
Samuele Locatelli 60b652f261 Fix vers 2.5 a 12 bit 2023-07-18 16:48:52 +02:00
Samuele Locatelli e06da6057b Fix conf x IIS01 (.218) al posto di IIS02 (.219) 2023-07-18 16:48:38 +02:00
Samuele Locatelli ac3534469e Aggiornamento ramo 2.5 con log corretto x PI 2023-05-18 10:30:57 +02:00
Samuele Locatelli fc5164fa1c Aggiunta state machine fluitek senza contapezzi 2023-05-08 16:58:45 +02:00
Samuele Locatelli 31bf7139b4 Merge tag 'FixStateMachine' into develop
Fix state machine LVF robot ABB1
2023-01-27 10:31:11 +01:00
Samuele Locatelli 6ac83202e3 Merge branch 'release/FixStateMachine' 2023-01-27 10:29:48 +01:00
Samuele Locatelli 8cc99c4805 Fix state machine x LVF ABB1 robot 2023-01-27 10:28:06 +01:00
Samuele Locatelli 757e8ba066 Update decodifica input machine x nikkei 2022-11-07 18:33:09 +01:00
Samuele Locatelli de33b976d3 Merge branch 'master' into develop 2022-09-26 18:27:21 +02:00
Samuele Locatelli 2f7f9f2c6c Merge remote-tracking branch 'origin/develop' 2022-09-26 18:27:07 +02:00
Samuele Locatelli 29255f89a0 Update vers 2.5.0 readParallela.py x errore WAIT invio 2022-09-26 18:26:53 +02:00
Samuele Locatelli f33f796500 Modifica readme e file di conf x rete cliente MON.ini 2021-12-17 12:56:13 +01:00
Samuele Locatelli f273e3b4ff Nuova area conf x IOB-MON 2021-12-17 12:44:53 +01:00
marco.salvi 18ff37d151 Test file upload 2021-12-07 18:28:04 +01:00
Samuele Locatelli e5540022eb Fix css x colori std EGW 2021-12-03 11:12:16 +01:00
Samuele Locatelli 9808844664 Merge branch 'develop' of http://gitlab.steamware.net/steamware/Mapo-IOB into develop 2021-12-03 10:41:34 +01:00
Samuele Locatelli 6e93cd0dd4 Aggiunta progetto empty RuleManagerWeb 2021-12-03 10:41:31 +01:00
Samuele E. Locatelli 85c6dbeeb7 Merge branch 'master' into develop 2021-10-12 11:20:26 +02:00
Samuele E. Locatelli 5a5b09c58a Merge remote-tracking branch 'gitlab.steamware/develop' 2021-10-12 11:20:13 +02:00
Samuele E. Locatelli 8b066b6e8b aggiunta 54 come standard base (6bit) 2021-07-19 15:06:08 +02:00
Samuele Locatelli f4a98addac Aggiunta vers legacy 1.8 2021-07-13 17:37:01 +02:00
Samuele Locatelli 8a093882f4 Aggiunta versione 2.4 salvata x 12bit e 8bit 2021-07-13 17:35:05 +02:00
Samuele Locatelli 79c368846b Merge remote-tracking branch 'gitlab.steamware/develop' into develop 2021-05-06 18:25:47 +02:00
Samuele Locatelli 4ff712c193 update sw allegato 2021-05-06 18:25:10 +02:00
Samuele E. Locatelli a8442048d0 update regole seghetto fluitek 2021-03-30 15:32:12 +02:00
Samuele E. Locatelli 278ce688f7 Fix EMCO55 fluitek 2021-03-03 14:05:42 +01:00
Samuele E. Locatelli a9e6afd047 update semaphore fluitek 2021-03-03 09:24:53 +01:00
Samuele E. Locatelli 39eb52d59b state machine x FEMCO 55 fluitek 2021-02-24 15:45:36 +01:00
Samuele E. Locatelli 140f6bd3a7 update macchina semaforo semplice fluitek 2021-02-24 10:28:42 +01:00
Samuele E. Locatelli 0ab3c9a004 update conf x fluitek 2021-02-24 10:00:00 +01:00
Samuele E. Locatelli 7c7363bdf8 fix conf seghetto DANOBAT x segnale manc mater 2021-02-06 10:28:12 +01:00
Samuele E. Locatelli d1af037e7f update seghetto danobat x segnali invertiti bit3 in poi 2021-01-26 12:50:08 +01:00
Samuele E. Locatelli 3cebf9f04d correzione stato manual 2020-11-30 14:40:37 +01:00
Samuele E. Locatelli e4d6d2a319 aggiunto gitSpread.bat 2020-11-30 14:31:18 +01:00
Samuele E. Locatelli 1b718a6d95 Merge branch 'master' into develop 2020-11-30 14:30:00 +01:00
Samuele E. Locatelli c897768950 aggiunbta robot ABB x LVF 2020-11-30 14:29:51 +01:00
Samuele E. Locatelli 3712099ee1 Merge branch 'master' into develop 2020-10-19 17:28:39 +02:00
Samuele E. Locatelli 44d4aeefad Modifica x simulare emergenza da no centralina / no magnete 2020-10-19 17:28:29 +02:00
Samuele E. Locatelli a7a0fc63bb update conf + csv mola 2020-10-19 16:23:32 +02:00
Samuele E. Locatelli 50d1bdfd49 Merge branch 'develop' 2020-10-17 17:53:28 +02:00
Samuele E. Locatelli 1a705c1a4b fix conf e csv x rett tang jetco 2020-10-17 17:53:10 +02:00
Samuele E. Locatelli 337e84863c Merge branch 'develop' 2020-10-14 18:34:47 +02:00
Samuele E. Locatelli d135b5f6d0 update rett tangenziale 2020-10-14 18:34:38 +02:00
Samuele E. Locatelli 068460366e update conf seghetto 2020-10-14 17:58:34 +02:00
Samuele E. Locatelli 3b486c786c pulizia old 2020-10-14 17:54:45 +02:00
Samuele E. Locatelli 5917f2e653 pulizia + vers2 x segnetto semplificato 2020-10-14 12:39:13 +02:00
Samuele E. Locatelli 74bb36276b Fix conf rettifica tang e seghetto Jetco 2020-10-14 12:34:08 +02:00
Samuele E. Locatelli c672da3009 Merge branch 'develop' 2020-10-14 12:10:17 +02:00
Samuele E. Locatelli f8e8240f11 Update state machine rett tangenziale 2020-10-14 12:06:30 +02:00
Samuele E. Locatelli 3c1c72b20d Aggiunta laser jetco 2020-10-14 11:42:27 +02:00
Samuele E. Locatelli 8cae35ba57 fix conf danobat 2020-10-14 11:29:09 +02:00
Samuele E. Locatelli 01421786af aggiunto conf danobat 2020-10-14 11:22:12 +02:00
Samuele E. Locatelli b5493cdac1 abbozzato seghetto Jetco 2020-10-13 19:16:47 +02:00
Samuele E. Locatelli 302708e999 update conf IOB 2020-10-13 11:17:58 +02:00
Samuele E. Locatelli afbc4e3a28 Update state machine x SIM 2020-10-01 09:02:18 +02:00
Samuele E. Locatelli 2ad3736d4d Merge branch 'master' into develop 2020-09-25 19:35:59 +02:00
Samuele E. Locatelli 7dd98135d4 Inversione emergenza x fam LVF 49 2020-09-24 16:37:38 +02:00
Samuele E. Locatelli e055dc61af Aggiunta amcchina STD x MTConnect 2020-09-24 16:36:57 +02:00
Samuele E. Locatelli 8469dd4643 inizio machine state rett tangenziale 2020-09-22 13:11:52 +02:00
Samuele E. Locatelli a039716dae Update state machine x SAET tempra induzione 2020-09-22 13:07:18 +02:00
943 changed files with 258927 additions and 2387 deletions
+6
View File
@@ -331,3 +331,9 @@ _Pvt_Extensions
.settings
# Area temp
/SMGen/*/unsafe_uploads/*
/SMGen/*/Rules/*/*
/SMGen/*/Rules/*
+87
View File
@@ -0,0 +1,87 @@
variables:
VERS_MAIN: '0.9'
NEW_REL: ''
APP_NAME: 'SMGen'
SOL_NAME: 'SMGen'
# helper x fix pacchetti nuget da repo locale nexus.steamware.net
.nuget-fix: &nuget-fix
- |
echo "esecuzione Nuget FIX steps"
dotnet nuget list source
$hasSource = dotnet nuget list source | Select-String -Pattern "Steamware Nexus Proxy"
if (! [String]::IsNullOrWhiteSpace($hasSource)) {
dotnet nuget remove source "`"Steamware Nexus Proxy`""
}
$hasSource = dotnet nuget list source | Select-String -Pattern "Steamware Nexus"
if (! [String]::IsNullOrWhiteSpace($hasSource)) {
dotnet nuget remove source "`"Steamware Nexus`""
}
$hasSource = dotnet nuget list source | Select-String -Pattern "nexus-proxy-v3"
if (! [String]::IsNullOrWhiteSpace($hasSource)) {
dotnet nuget remove source nexus-proxy-v3
}
dotnet nuget add source https://nexus.steamware.net/repository/nuget-group-3/index.json -n "Steamware Nexus" -u nugetUser -p $NEXUS_PASSWD --store-password-in-clear-text
echo "Steamware Nexus Source added"
stages:
- build
- staging
- deploy
# ---------- BUILD ----------
SMGen:build:
stage: build
tags:
- win
variables:
APP_NAME: SMGen
SOL_NAME: SMGen
before_script:
- *nuget-fix
- dotnet restore "$env:SOL_NAME.sln"
script:
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
# ---------- STAGING ----------
SMGen:staging:
stage: staging
tags:
- win
variables:
APP_NAME: SMGen
SOL_NAME: SMGen
only:
- develop
needs: ["SMGen:build"]
before_script:
- *nuget-fix
- dotnet restore "$env:SOL_NAME.sln"
script:
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
- dotnet publish -p:PublishProfile=IIS01.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release -p:username=jenkins -p:Password=$IIS_PWD -p:AllowUntrustedCertificate=true -p:verbosity=quiet $env:APP_NAME/$env:APP_NAME.csproj
# ---------- DEPLOY ----------
SMGen:deploy:
stage: deploy
tags:
- win
environment:
name: production
url: https://office.egalware.com/MP/SMGEN
variables:
APP_NAME: SMGen
SOL_NAME: SMGen
only:
- master
needs: ["SMGen:build"]
before_script:
- *nuget-fix
- dotnet restore "$env:SOL_NAME.sln"
script:
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
# IIS PROD
- dotnet publish -p:PublishProfile=IIS-PROD.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release -p:username=jenkins -p:Password=$IIS_PWD -p:AllowUntrustedCertificate=true -p:verbosity=quiet $env:APP_NAME/$env:APP_NAME.csproj
+4 -4
View File
@@ -2,11 +2,11 @@
idxMacchina = 1005
[web]
URLBASE = http://10.74.82.219/MPIO/inputIOB.aspx?idxMacchina=
URLALIVE = http://10.74.82.219/MPIO/Alive.aspx
URLENABLED = http://10.74.82.219/MPIO/Enabled.aspx?idxMacchina=
URLBASE = http://10.74.82.218/MPIO/inputIOB.aspx?idxMacchina=
URLALIVE = http://10.74.82.218/MPIO/Alive.aspx
URLENABLED = http://10.74.82.218/MPIO/Enabled.aspx?idxMacchina=
URLADV1 = &valore=
URLREBO = http://10.74.82.219/MPIO/sendReboot.aspx?idxMacchina=
URLREBO = http://10.74.82.218/MPIO/sendReboot.aspx?idxMacchina=
[time]
SAMPLETIME = 0.20
+4 -4
View File
@@ -2,11 +2,11 @@
idxMacchina = 1005
[web]
URLBASE = http://10.74.82.219/MPIO/inputIOB.aspx?idxMacchina=
URLALIVE = http://10.74.82.219/MPIO/Alive.aspx
URLENABLED = http://10.74.82.219/MPIO/Enabled.aspx?idxMacchina=
URLBASE = http://10.74.82.218/MPIO/inputIOB.aspx?idxMacchina=
URLALIVE = http://10.74.82.218/MPIO/Alive.aspx
URLENABLED = http://10.74.82.218/MPIO/Enabled.aspx?idxMacchina=
URLADV1 = &valore=
URLREBO = http://10.74.82.219/MPIO/sendReboot.aspx?idxMacchina=
URLREBO = http://10.74.82.218/MPIO/sendReboot.aspx?idxMacchina=
[time]
SAMPLETIME = 0.20
+4 -4
View File
@@ -2,11 +2,11 @@
idxMacchina = 1005
[web]
URLBASE = http://10.74.82.219/MP/IO/IOB/input/
URLALIVE = http://10.74.82.219/MP/IO/IOB
URLENABLED = http://10.74.82.219/MP/IO/IOB/enabled/
URLBASE = http://10.74.82.218/MP/IO/IOB/input/
URLALIVE = http://10.74.82.218/MP/IO/IOB
URLENABLED = http://10.74.82.218/MP/IO/IOB/enabled/
URLADV1 = ?valore=
URLREBO = http://10.74.82.219/MPIO/sendReboot.aspx?idxMacchina=
URLREBO = http://10.74.82.218/MPIO/sendReboot.aspx?idxMacchina=
[time]
SAMPLETIME = 0.05
+4 -4
View File
@@ -2,11 +2,11 @@
idxMacchina = 1005
[web]
URLBASE = http://10.74.82.219/MP/IO/IOB/input/
URLALIVE = http://10.74.82.219/MP/IO/IOB
URLENABLED = http://10.74.82.219/MP/IO/IOB/enabled/
URLBASE = http://10.74.82.218/MP/IO/IOB/input/
URLALIVE = http://10.74.82.218/MP/IO/IOB
URLENABLED = http://10.74.82.218/MP/IO/IOB/enabled/
URLADV1 = ?valore=
URLREBO = http://10.74.82.219/MPIO/sendReboot.aspx?idxMacchina=
URLREBO = http://10.74.82.218/MPIO/sendReboot.aspx?idxMacchina=
[time]
SAMPLETIME = 0.05
+4 -4
View File
@@ -2,11 +2,11 @@
idxMacchina = 1005
[web]
URLBASE = http://10.74.82.219/MPIO/inputIOB.aspx?idxMacchina=
URLALIVE = http://10.74.82.219/MPIO/Alive.aspx
URLENABLED = http://10.74.82.219/MPIO/Enabled.aspx?idxMacchina=
URLBASE = http://10.74.82.218/MPIO/inputIOB.aspx?idxMacchina=
URLALIVE = http://10.74.82.218/MPIO/Alive.aspx
URLENABLED = http://10.74.82.218/MPIO/Enabled.aspx?idxMacchina=
URLADV1 = &valore=
URLREBO = http://10.74.82.219/MPIO/sendReboot.aspx?idxMacchina=
URLREBO = http://10.74.82.218/MPIO/sendReboot.aspx?idxMacchina=
[time]
SAMPLETIME = 0.20
+4 -4
View File
@@ -2,11 +2,11 @@
idxMacchina = 1005
[web]
URLBASE = http://10.74.82.219/MPIO/inputIOB.aspx?idxMacchina=
URLALIVE = http://10.74.82.219/MPIO/Alive.aspx
URLENABLED = http://10.74.82.219/MPIO/Enabled.aspx?idxMacchina=
URLBASE = http://10.74.82.218/MPIO/inputIOB.aspx?idxMacchina=
URLALIVE = http://10.74.82.218/MPIO/Alive.aspx
URLENABLED = http://10.74.82.218/MPIO/Enabled.aspx?idxMacchina=
URLADV1 = &valore=
URLREBO = http://10.74.82.219/MPIO/sendReboot.aspx?idxMacchina=
URLREBO = http://10.74.82.218/MPIO/sendReboot.aspx?idxMacchina=
[time]
SAMPLETIME = 0.20
+4 -4
View File
@@ -2,11 +2,11 @@
idxMacchina = 1005
[web]
URLBASE = http://10.74.82.219/MPIO/inputIOB.aspx?idxMacchina=
URLALIVE = http://10.74.82.219/MPIO/Alive.aspx
URLENABLED = http://10.74.82.219/MPIO/Enabled.aspx?idxMacchina=
URLBASE = http://10.74.82.218/MPIO/inputIOB.aspx?idxMacchina=
URLALIVE = http://10.74.82.218/MPIO/Alive.aspx
URLENABLED = http://10.74.82.218/MPIO/Enabled.aspx?idxMacchina=
URLADV1 = &valore=
URLREBO = http://10.74.82.219/MPIO/sendReboot.aspx?idxMacchina=
URLREBO = http://10.74.82.218/MPIO/sendReboot.aspx?idxMacchina=
[time]
SAMPLETIME = 0.20
+4 -4
View File
@@ -2,11 +2,11 @@
idxMacchina = 1005
[web]
URLBASE = http://10.74.82.219/MPIO/inputIOB.aspx?idxMacchina=
URLALIVE = http://10.74.82.219/MPIO/Alive.aspx
URLENABLED = http://10.74.82.219/MPIO/Enabled.aspx?idxMacchina=
URLBASE = http://10.74.82.218/MPIO/inputIOB.aspx?idxMacchina=
URLALIVE = http://10.74.82.218/MPIO/Alive.aspx
URLENABLED = http://10.74.82.218/MPIO/Enabled.aspx?idxMacchina=
URLADV1 = &valore=
URLREBO = http://10.74.82.219/MPIO/sendReboot.aspx?idxMacchina=
URLREBO = http://10.74.82.218/MPIO/sendReboot.aspx?idxMacchina=
[time]
SAMPLETIME = 0.20
+2 -2
View File
@@ -47,7 +47,7 @@ url='file:///home/pi/steamware/MP-MON-DEMO.html'
if [[ $iaddr == "10.74.82"* ]]
then
url='http://10.74.82.219/MP-MON'
url='http://10.74.82.218/MP-MON'
echo "$(date) | Siamo in Steamware, imposto pagina a $url!" >> $logFile
elif [[ $iaddr == "192.168.51"* ]]
then
@@ -62,6 +62,6 @@ echo "$(date) | chiusura processi precedenti!" >> $logFile
killall -9 chromium-browser
# avvio chromium in KIOSK senza segnalazione errori...
#chromium-browser --noerrdialogs --kiosk http://10.74.82.219/MP-MON --incognito --disable-translate
#chromium-browser --noerrdialogs --kiosk http://10.74.82.218/MP-MON --incognito --disable-translate
echo "$(date) | apertura nuovo URL!" >> $logFile
DISPLAY=:0.0 chromium-browser --noerrdialogs --kiosk $url --incognito --disable-translate
+2 -2
View File
@@ -47,7 +47,7 @@ url='file:///home/pi/steamware/MP-MON-DEMO.html'
if [[ $iaddr == "10.74.82"* ]]
then
url='http://10.74.82.219/MP-MON'
url='http://10.74.82.218/MP-MON'
echo "$(date) | Siamo in Steamware, imposto pagina a $url!" >> $logFile
elif [[ $iaddr == "192.168.51"* ]]
then
@@ -61,6 +61,6 @@ fi
killall -9 chromium-browser
# avvio chromium in KIOSK senza segnalazione errori...
#chromium-browser --noerrdialogs --kiosk http://10.74.82.219/MP-MON --incognito --disable-translate
#chromium-browser --noerrdialogs --kiosk http://10.74.82.218/MP-MON --incognito --disable-translate
chromium-browser --noerrdialogs --kiosk $url --incognito --disable-translate
+2 -2
View File
@@ -47,7 +47,7 @@ url='file:///home/pi/steamware/MP-MON-DEMO.html'
if [[ $iaddr == "10.74.82"* ]]
then
url='http://10.74.82.219/MP-MON'
url='http://10.74.82.218/MP-MON'
echo "$(date) | Siamo in Steamware, imposto pagina a $url!" >> $logFile
elif [[ $iaddr == "192.168.51"* ]]
then
@@ -61,6 +61,6 @@ fi
killall -9 chromium-browser
# avvio chromium in KIOSK senza segnalazione errori...
#chromium-browser --noerrdialogs --kiosk http://10.74.82.219/MP-MON --incognito --disable-translate
#chromium-browser --noerrdialogs --kiosk http://10.74.82.218/MP-MON --incognito --disable-translate
chromium-browser --noerrdialogs --kiosk $url --incognito --disable-translate
+2 -2
View File
@@ -47,7 +47,7 @@ url='file:///home/pi/steamware/MP-MON-DEMO.html'
if [[ $iaddr == "10.74.82"* ]]
then
url='http://10.74.82.219/MP-MON'
url='http://10.74.82.218/MP-MON'
echo "$(date) | Siamo in Steamware, imposto pagina a $url!" >> $logFile
elif [[ $iaddr == "192.168.51"* ]]
then
@@ -61,6 +61,6 @@ fi
killall -9 chromium-browser
# avvio chromium in KIOSK senza segnalazione errori...
#chromium-browser --noerrdialogs --kiosk http://10.74.82.219/MP-MON --incognito --disable-translate
#chromium-browser --noerrdialogs --kiosk http://10.74.82.218/MP-MON --incognito --disable-translate
chromium-browser --noerrdialogs --kiosk $url --incognito --disable-translate
+2 -2
View File
@@ -47,7 +47,7 @@ url='file:///home/pi/steamware/MP-MON-DEMO.html'
if [[ $iaddr == "10.74.82"* ]]
then
url='http://10.74.82.219/MP-MON'
url='http://10.74.82.218/MP-MON'
echo "$(date) | Siamo in Steamware, imposto pagina a $url!" >> $logFile
elif [[ $iaddr == "192.168.51"* ]]
then
@@ -61,6 +61,6 @@ fi
killall -9 chromium-browser
# avvio chromium in KIOSK senza segnalazione errori...
#chromium-browser --noerrdialogs --kiosk http://10.74.82.219/MP-MON --incognito --disable-translate
#chromium-browser --noerrdialogs --kiosk http://10.74.82.218/MP-MON --incognito --disable-translate
chromium-browser --noerrdialogs --kiosk $url --incognito --disable-translate
+4 -4
View File
@@ -2,11 +2,11 @@
idxMacchina = 1005
[web]
URLBASE = http://10.74.82.219/MP/IO/IOB/input/
URLALIVE = http://10.74.82.219/MP/IO/IOB
URLENABLED = http://10.74.82.219/MP/IO/IOB/enabled/
URLBASE = http://10.74.82.218/MP/IO/IOB/input/
URLALIVE = http://10.74.82.218/MP/IO/IOB
URLENABLED = http://10.74.82.218/MP/IO/IOB/enabled/
URLADV1 = ?valore=
URLREBO = http://10.74.82.219/MPIO/sendReboot.aspx?idxMacchina=
URLREBO = http://10.74.82.218/MPIO/sendReboot.aspx?idxMacchina=
[time]
SAMPLETIME = 0.05
+4 -4
View File
@@ -2,11 +2,11 @@
idxMacchina = 1005
[web]
URLBASE = http://10.74.82.219/MP/IO/IOB/input/
URLALIVE = http://10.74.82.219/MP/IO/IOB
URLENABLED = http://10.74.82.219/MP/IO/IOB/enabled/
URLBASE = http://10.74.82.218/MP/IO/IOB/input/
URLALIVE = http://10.74.82.218/MP/IO/IOB
URLENABLED = http://10.74.82.218/MP/IO/IOB/enabled/
URLADV1 = ?valore=
URLREBO = http://10.74.82.219/MPIO/sendReboot.aspx?idxMacchina=
URLREBO = http://10.74.82.218/MPIO/sendReboot.aspx?idxMacchina=
[time]
SAMPLETIME = 0.05
+4 -4
View File
@@ -2,11 +2,11 @@
idxMacchina = 1005
[web]
URLBASE = http://10.74.82.219/MP/IO/IOB/input/
URLALIVE = http://10.74.82.219/MP/IO/IOB
URLENABLED = http://10.74.82.219/MP/IO/IOB/enabled/
URLBASE = http://10.74.82.218/MP/IO/IOB/input/
URLALIVE = http://10.74.82.218/MP/IO/IOB
URLENABLED = http://10.74.82.218/MP/IO/IOB/enabled/
URLADV1 = ?valore=
URLREBO = http://10.74.82.219/MPIO/sendReboot.aspx?idxMacchina=
URLREBO = http://10.74.82.218/MPIO/sendReboot.aspx?idxMacchina=
[time]
SAMPLETIME = 0.05
+4 -4
View File
@@ -2,11 +2,11 @@
idxMacchina = 1005
[web]
URLBASE = http://10.74.82.219/MP/IO/IOB/input/
URLALIVE = http://10.74.82.219/MP/IO/IOB
URLENABLED = http://10.74.82.219/MP/IO/IOB/enabled/
URLBASE = http://10.74.82.218/MP/IO/IOB/input/
URLALIVE = http://10.74.82.218/MP/IO/IOB
URLENABLED = http://10.74.82.218/MP/IO/IOB/enabled/
URLADV1 = ?valore=
URLREBO = http://10.74.82.219/MPIO/sendReboot.aspx?idxMacchina=
URLREBO = http://10.74.82.218/MPIO/sendReboot.aspx?idxMacchina=
[time]
SAMPLETIME = 0.05
+4 -4
View File
@@ -2,11 +2,11 @@
idxMacchina = 1005
[web]
URLBASE = http://10.74.82.219/MPIO/inputIOB.aspx?idxMacchina=
URLALIVE = http://10.74.82.219/MPIO/Alive.aspx
URLENABLED = http://10.74.82.219/MPIO/Enabled.aspx?idxMacchina=
URLBASE = http://10.74.82.218/MPIO/inputIOB.aspx?idxMacchina=
URLALIVE = http://10.74.82.218/MPIO/Alive.aspx
URLENABLED = http://10.74.82.218/MPIO/Enabled.aspx?idxMacchina=
URLADV1 = &valore=
URLREBO = http://10.74.82.219/MPIO/sendReboot.aspx?idxMacchina=
URLREBO = http://10.74.82.218/MPIO/sendReboot.aspx?idxMacchina=
[time]
SAMPLETIME = 0.20
+4 -4
View File
@@ -2,11 +2,11 @@
idxMacchina = 1005
[web]
URLBASE = http://10.74.82.219/MPIO/inputIOB.aspx?idxMacchina=
URLALIVE = http://10.74.82.219/MPIO/Alive.aspx
URLENABLED = http://10.74.82.219/MPIO/Enabled.aspx?idxMacchina=
URLBASE = http://10.74.82.218/MPIO/inputIOB.aspx?idxMacchina=
URLALIVE = http://10.74.82.218/MPIO/Alive.aspx
URLENABLED = http://10.74.82.218/MPIO/Enabled.aspx?idxMacchina=
URLADV1 = &valore=
URLREBO = http://10.74.82.219/MPIO/sendReboot.aspx?idxMacchina=
URLREBO = http://10.74.82.218/MPIO/sendReboot.aspx?idxMacchina=
[time]
SAMPLETIME = 0.20
+4 -4
View File
@@ -2,11 +2,11 @@
idxMacchina = 1005
[web]
URLBASE = http://10.74.82.219/MPIO/inputIOB.aspx?idxMacchina=
URLALIVE = http://10.74.82.219/MPIO/Alive.aspx
URLENABLED = http://10.74.82.219/MPIO/Enabled.aspx?idxMacchina=
URLBASE = http://10.74.82.218/MPIO/inputIOB.aspx?idxMacchina=
URLALIVE = http://10.74.82.218/MPIO/Alive.aspx
URLENABLED = http://10.74.82.218/MPIO/Enabled.aspx?idxMacchina=
URLADV1 = &valore=
URLREBO = http://10.74.82.219/MPIO/sendReboot.aspx?idxMacchina=
URLREBO = http://10.74.82.218/MPIO/sendReboot.aspx?idxMacchina=
[time]
SAMPLETIME = 0.20
+4 -4
View File
@@ -2,11 +2,11 @@
idxMacchina = 1005
[web]
URLBASE = http://10.74.82.219/MPIO/inputIOB.aspx?idxMacchina=
URLALIVE = http://10.74.82.219/MPIO/Alive.aspx
URLENABLED = http://10.74.82.219/MPIO/Enabled.aspx?idxMacchina=
URLBASE = http://10.74.82.218/MPIO/inputIOB.aspx?idxMacchina=
URLALIVE = http://10.74.82.218/MPIO/Alive.aspx
URLENABLED = http://10.74.82.218/MPIO/Enabled.aspx?idxMacchina=
URLADV1 = &valore=
URLREBO = http://10.74.82.219/MPIO/sendReboot.aspx?idxMacchina=
URLREBO = http://10.74.82.218/MPIO/sendReboot.aspx?idxMacchina=
[time]
SAMPLETIME = 0.20
+2 -2
View File
@@ -47,7 +47,7 @@ url='file:///home/pi/steamware/MP-MON-DEMO.html'
if [[ $iaddr == "10.74.82"* ]]
then
url='http://10.74.82.219/MP-MON'
url='http://10.74.82.218/MP-MON'
echo "$(date) | Siamo in Steamware, imposto pagina a $url!" >> $logFile
elif [[ $iaddr == "192.168.51"* ]]
then
@@ -62,6 +62,6 @@ echo "$(date) | chiusura processi precedenti!" >> $logFile
killall -9 chromium-browser
# avvio chromium in KIOSK senza segnalazione errori...
#chromium-browser --noerrdialogs --kiosk http://10.74.82.219/MP-MON --incognito --disable-translate
#chromium-browser --noerrdialogs --kiosk http://10.74.82.218/MP-MON --incognito --disable-translate
echo "$(date) | apertura nuovo URL!" >> $logFile
DISPLAY=:0.0 chromium-browser --noerrdialogs --kiosk $url --incognito --disable-translate
+2 -2
View File
@@ -47,7 +47,7 @@ url='file:///home/pi/steamware/MP-MON-DEMO.html'
if [[ $iaddr == "10.74.82"* ]]
then
url='http://10.74.82.219/MP-MON'
url='http://10.74.82.218/MP-MON'
echo "$(date) | Siamo in Steamware, imposto pagina a $url!" >> $logFile
elif [[ $iaddr == "192.168.51"* ]]
then
@@ -61,6 +61,6 @@ fi
killall -9 chromium-browser
# avvio chromium in KIOSK senza segnalazione errori...
#chromium-browser --noerrdialogs --kiosk http://10.74.82.219/MP-MON --incognito --disable-translate
#chromium-browser --noerrdialogs --kiosk http://10.74.82.218/MP-MON --incognito --disable-translate
chromium-browser --noerrdialogs --kiosk $url --incognito --disable-translate
+2 -2
View File
@@ -1,9 +1,9 @@
ven 14 ott 2016, 16.24.45, CEST | Cavo connesso, eth: up
ven 14 ott 2016, 16.24.45, CEST | IP: 10.74.82.23
ven 14 ott 2016, 16.24.45, CEST | Siamo in Steamware, imposto pagina a http://10.74.82.219/MP-MON!
ven 14 ott 2016, 16.24.45, CEST | Siamo in Steamware, imposto pagina a http://10.74.82.218/MP-MON!
ven 14 ott 2016, 16.29.23, CEST | Cavo connesso, eth: up
ven 14 ott 2016, 16.29.23, CEST | IP: 10.74.82.23
ven 14 ott 2016, 16.29.23, CEST | Siamo in Steamware, imposto pagina a http://10.74.82.219/MP-MON!
ven 14 ott 2016, 16.29.23, CEST | Siamo in Steamware, imposto pagina a http://10.74.82.218/MP-MON!
sab 19 nov 2016, 07.17.19, CET | Cavo connesso, eth: up
sab 19 nov 2016, 07.17.19, CET | IP: 192.168.51.173
sab 19 nov 2016, 07.17.19, CET | Siamo a Passirano, imposto pagina a http://192.168.51.71/MP-MON!
+2 -2
View File
@@ -47,7 +47,7 @@ url='file:///home/pi/steamware/MP-MON-DEMO.html'
if [[ $iaddr == "10.74.82"* ]]
then
url='http://10.74.82.219/MP-MON'
url='http://10.74.82.218/MP-MON'
echo "$(date) | Siamo in Steamware, imposto pagina a $url!" >> $logFile
elif [[ $iaddr == "192.168.51"* ]]
then
@@ -61,6 +61,6 @@ fi
killall -9 chromium-browser
# avvio chromium in KIOSK senza segnalazione errori...
#chromium-browser --noerrdialogs --kiosk http://10.74.82.219/MP-MON --incognito --disable-translate
#chromium-browser --noerrdialogs --kiosk http://10.74.82.218/MP-MON --incognito --disable-translate
chromium-browser --noerrdialogs --kiosk $url --incognito --disable-translate
+2 -2
View File
@@ -1,9 +1,9 @@
ven 14 ott 2016, 16.46.26, CEST | Cavo connesso, eth: up
ven 14 ott 2016, 16.46.26, CEST | IP: 10.74.82.23
ven 14 ott 2016, 16.46.26, CEST | Siamo in Steamware, imposto pagina a http://10.74.82.219/MP-MON!
ven 14 ott 2016, 16.46.26, CEST | Siamo in Steamware, imposto pagina a http://10.74.82.218/MP-MON!
ven 14 ott 2016, 16.47.44, CEST | Cavo connesso, eth: up
ven 14 ott 2016, 16.47.44, CEST | IP: 10.74.82.23
ven 14 ott 2016, 16.47.44, CEST | Siamo in Steamware, imposto pagina a http://10.74.82.219/MP-MON!
ven 14 ott 2016, 16.47.44, CEST | Siamo in Steamware, imposto pagina a http://10.74.82.218/MP-MON!
sab 17 dic 2016, 11.17.20, CET | Cavo connesso, eth: up
lun 19 dic 2016, 06.44.42, CET | IP: 192.168.51.174
lun 19 dic 2016, 06.44.42, CET | Siamo a Passirano, imposto pagina a http://192.168.51.71/MP-MON!
+2 -2
View File
@@ -47,7 +47,7 @@ url='file:///home/pi/steamware/MP-MON-DEMO.html'
if [[ $iaddr == "10.74.82"* ]]
then
url='http://10.74.82.219/MP-MON'
url='http://10.74.82.218/MP-MON'
echo "$(date) | Siamo in Steamware, imposto pagina a $url!" >> $logFile
elif [[ $iaddr == "192.168.51"* ]]
then
@@ -61,6 +61,6 @@ fi
killall -9 chromium-browser
# avvio chromium in KIOSK senza segnalazione errori...
#chromium-browser --noerrdialogs --kiosk http://10.74.82.219/MP-MON --incognito --disable-translate
#chromium-browser --noerrdialogs --kiosk http://10.74.82.218/MP-MON --incognito --disable-translate
chromium-browser --noerrdialogs --kiosk $url --incognito --disable-translate
+2 -2
View File
@@ -1,9 +1,9 @@
ven 14 ott 2016, 16.41.10, CEST | Cavo connesso, eth: up
ven 14 ott 2016, 16.41.10, CEST | IP: 10.74.82.23
ven 14 ott 2016, 16.41.10, CEST | Siamo in Steamware, imposto pagina a http://10.74.82.219/MP-MON!
ven 14 ott 2016, 16.41.10, CEST | Siamo in Steamware, imposto pagina a http://10.74.82.218/MP-MON!
ven 14 ott 2016, 16.43.19, CEST | Cavo connesso, eth: up
ven 14 ott 2016, 16.43.19, CEST | IP: 10.74.82.23
ven 14 ott 2016, 16.43.19, CEST | Siamo in Steamware, imposto pagina a http://10.74.82.219/MP-MON!
ven 14 ott 2016, 16.43.19, CEST | Siamo in Steamware, imposto pagina a http://10.74.82.218/MP-MON!
ven 16 dic 2016, 19.17.19, CET | Cavo connesso, eth: up
ven 16 dic 2016, 19.17.19, CET | IP: 192.168.51.175
ven 16 dic 2016, 19.17.19, CET | Siamo a Passirano, imposto pagina a http://192.168.51.71/MP-MON!
+2 -2
View File
@@ -47,7 +47,7 @@ url='file:///home/pi/steamware/MP-MON-DEMO.html'
if [[ $iaddr == "10.74.82"* ]]
then
url='http://10.74.82.219/MP-MON'
url='http://10.74.82.218/MP-MON'
echo "$(date) | Siamo in Steamware, imposto pagina a $url!" >> $logFile
elif [[ $iaddr == "192.168.51"* ]]
then
@@ -61,6 +61,6 @@ fi
killall -9 chromium-browser
# avvio chromium in KIOSK senza segnalazione errori...
#chromium-browser --noerrdialogs --kiosk http://10.74.82.219/MP-MON --incognito --disable-translate
#chromium-browser --noerrdialogs --kiosk http://10.74.82.218/MP-MON --incognito --disable-translate
chromium-browser --noerrdialogs --kiosk $url --incognito --disable-translate
+4 -4
View File
@@ -2,11 +2,11 @@
idxMacchina = 1005
[web]
URLBASE = http://10.74.82.219/MP/IO/IOB/input/
URLALIVE = http://10.74.82.219/MP/IO/IOB
URLENABLED = http://10.74.82.219/MP/IO/IOB/enabled/
URLBASE = http://10.74.82.218/MP/IO/IOB/input/
URLALIVE = http://10.74.82.218/MP/IO/IOB
URLENABLED = http://10.74.82.218/MP/IO/IOB/enabled/
URLADV1 = ?valore=
URLREBO = http://10.74.82.219/MPIO/sendReboot.aspx?idxMacchina=
URLREBO = http://10.74.82.218/MPIO/sendReboot.aspx?idxMacchina=
[time]
SAMPLETIME = 0.05
+4 -4
View File
@@ -2,11 +2,11 @@
idxMacchina = 1005
[web]
URLBASE = http://10.74.82.219/MP/IO/IOB/input/
URLALIVE = http://10.74.82.219/MP/IO/IOB
URLENABLED = http://10.74.82.219/MP/IO/IOB/enabled/
URLBASE = http://10.74.82.218/MP/IO/IOB/input/
URLALIVE = http://10.74.82.218/MP/IO/IOB
URLENABLED = http://10.74.82.218/MP/IO/IOB/enabled/
URLADV1 = ?valore=
URLREBO = http://10.74.82.219/MPIO/sendReboot.aspx?idxMacchina=
URLREBO = http://10.74.82.218/MPIO/sendReboot.aspx?idxMacchina=
[time]
SAMPLETIME = 0.05
+4 -4
View File
@@ -2,11 +2,11 @@
idxMacchina = 1005
[web]
URLBASE = http://10.74.82.219/MP/IO/IOB/input/
URLALIVE = http://10.74.82.219/MP/IO/IOB
URLENABLED = http://10.74.82.219/MP/IO/IOB/enabled/
URLBASE = http://10.74.82.218/MP/IO/IOB/input/
URLALIVE = http://10.74.82.218/MP/IO/IOB
URLENABLED = http://10.74.82.218/MP/IO/IOB/enabled/
URLADV1 = ?valore=
URLREBO = http://10.74.82.219/MPIO/sendReboot.aspx?idxMacchina=
URLREBO = http://10.74.82.218/MPIO/sendReboot.aspx?idxMacchina=
[time]
SAMPLETIME = 0.05
+4 -4
View File
@@ -2,11 +2,11 @@
idxMacchina = 1005
[web]
URLBASE = http://10.74.82.219/MP/IO/IOB/input/
URLALIVE = http://10.74.82.219/MP/IO/IOB
URLENABLED = http://10.74.82.219/MP/IO/IOB/enabled/
URLBASE = http://10.74.82.218/MP/IO/IOB/input/
URLALIVE = http://10.74.82.218/MP/IO/IOB
URLENABLED = http://10.74.82.218/MP/IO/IOB/enabled/
URLADV1 = ?valore=
URLREBO = http://10.74.82.219/MPIO/sendReboot.aspx?idxMacchina=
URLREBO = http://10.74.82.218/MPIO/sendReboot.aspx?idxMacchina=
[time]
SAMPLETIME = 0.05
+4 -4
View File
@@ -2,11 +2,11 @@
idxMacchina = 1005
[web]
URLBASE = http://10.74.82.219/MP/IO/IOB/input/
URLALIVE = http://10.74.82.219/MP/IO/IOB
URLENABLED = http://10.74.82.219/MP/IO/IOB/enabled/
URLBASE = http://10.74.82.218/MP/IO/IOB/input/
URLALIVE = http://10.74.82.218/MP/IO/IOB
URLENABLED = http://10.74.82.218/MP/IO/IOB/enabled/
URLADV1 = ?valore=
URLREBO = http://10.74.82.219/MP/IO/sendReboot.aspx?idxMacchina=
URLREBO = http://10.74.82.218/MP/IO/sendReboot.aspx?idxMacchina=
[time]
SAMPLETIME = 0.05
+4 -4
View File
@@ -2,11 +2,11 @@
idxMacchina = 1005
[web]
URLBASE = http://10.74.82.219/MP/IO/IOB/input/
URLALIVE = http://10.74.82.219/MP/IO/IOB
URLENABLED = http://10.74.82.219/MP/IO/IOB/enabled/
URLBASE = http://10.74.82.218/MP/IO/IOB/input/
URLALIVE = http://10.74.82.218/MP/IO/IOB
URLENABLED = http://10.74.82.218/MP/IO/IOB/enabled/
URLADV1 = ?valore=
URLREBO = http://10.74.82.219/MP/IO/sendReboot.aspx?idxMacchina=
URLREBO = http://10.74.82.218/MP/IO/sendReboot.aspx?idxMacchina=
[time]
SAMPLETIME = 0.05
+4 -4
View File
@@ -2,11 +2,11 @@
idxMacchina = 1005
[web]
URLBASE = http://10.74.82.219/MP/IO/IOB/input/
URLALIVE = http://10.74.82.219/MP/IO/IOB
URLENABLED = http://10.74.82.219/MP/IO/IOB/enabled/
URLBASE = http://10.74.82.218/MP/IO/IOB/input/
URLALIVE = http://10.74.82.218/MP/IO/IOB
URLENABLED = http://10.74.82.218/MP/IO/IOB/enabled/
URLADV1 = ?valore=
URLREBO = http://10.74.82.219/MPIO/sendReboot.aspx?idxMacchina=
URLREBO = http://10.74.82.218/MPIO/sendReboot.aspx?idxMacchina=
[time]
SAMPLETIME = 0.05
+4 -4
View File
@@ -2,11 +2,11 @@
idxMacchina = 1005
[web]
URLBASE = http://10.74.82.219/MP/IO/IOB/input/
URLALIVE = http://10.74.82.219/MP/IO/IOB
URLENABLED = http://10.74.82.219/MP/IO/IOB/enabled/
URLBASE = http://10.74.82.218/MP/IO/IOB/input/
URLALIVE = http://10.74.82.218/MP/IO/IOB
URLENABLED = http://10.74.82.218/MP/IO/IOB/enabled/
URLADV1 = ?valore=
URLREBO = http://10.74.82.219/MP/IO/sendReboot.aspx?idxMacchina=
URLREBO = http://10.74.82.218/MP/IO/sendReboot.aspx?idxMacchina=
[time]
SAMPLETIME = 0.05
+4 -4
View File
@@ -2,11 +2,11 @@
idxMacchina = 1005
[web]
URLBASE = http://10.74.82.219/MP/IO/IOB/input/
URLALIVE = http://10.74.82.219/MP/IO/IOB
URLENABLED = http://10.74.82.219/MP/IO/IOB/enabled/
URLBASE = http://10.74.82.218/MP/IO/IOB/input/
URLALIVE = http://10.74.82.218/MP/IO/IOB
URLENABLED = http://10.74.82.218/MP/IO/IOB/enabled/
URLADV1 = ?valore=
URLREBO = http://10.74.82.219/MP/IO/sendReboot.aspx?idxMacchina=
URLREBO = http://10.74.82.218/MP/IO/sendReboot.aspx?idxMacchina=
[time]
SAMPLETIME = 0.05
+4 -4
View File
@@ -2,11 +2,11 @@
idxMacchina = 1005
[web]
URLBASE = http://10.74.82.219/MP/IO/IOB/input/
URLALIVE = http://10.74.82.219/MP/IO/IOB
URLENABLED = http://10.74.82.219/MP/IO/IOB/enabled/
URLBASE = http://10.74.82.218/MP/IO/IOB/input/
URLALIVE = http://10.74.82.218/MP/IO/IOB
URLENABLED = http://10.74.82.218/MP/IO/IOB/enabled/
URLADV1 = ?valore=
URLREBO = http://10.74.82.219/MPIO/sendReboot.aspx?idxMacchina=
URLREBO = http://10.74.82.218/MPIO/sendReboot.aspx?idxMacchina=
[time]
SAMPLETIME = 0.05
Binary file not shown.
+4 -4
View File
@@ -6,11 +6,11 @@ port = COM1
idxMacchina = 0001
[web]
URLBASE = http://10.74.82.219/MP/IO/IOB/input/
URLALIVE = http://10.74.82.219/MP/IO/IOB
URLENABLED = http://10.74.82.219/MP/IO/IOB/enabled/
URLBASE = http://10.74.82.218/MP/IO/IOB/input/
URLALIVE = http://10.74.82.218/MP/IO/IOB
URLENABLED = http://10.74.82.218/MP/IO/IOB/enabled/
URLADV1 = ?valore=
URLREBO = http://10.74.82.219/MP/IO/sendReboot.aspx?idxMacchina=
URLREBO = http://10.74.82.218/MP/IO/sendReboot.aspx?idxMacchina=
[time]
SAMPLETIME = 0.05
Binary file not shown.
+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
@@ -2,11 +2,11 @@
idxMacchina = 0001
[web]
URLBASE = http://10.74.82.219/MP/IO/IOB/input/
URLALIVE = http://10.74.82.219/MP/IO/IOB
URLENABLED = http://10.74.82.219/MP/IO/IOB/enabled/
URLBASE = http://10.74.82.218/MP/IO/IOB/input/
URLALIVE = http://10.74.82.218/MP/IO/IOB
URLENABLED = http://10.74.82.218/MP/IO/IOB/enabled/
URLADV1 = ?valore=
URLREBO = http://10.74.82.219/MP/IO/sendReboot.aspx?idxMacchina=
URLREBO = http://10.74.82.218/MP/IO/sendReboot.aspx?idxMacchina=
[time]
SAMPLETIME = 0.05
@@ -2,11 +2,11 @@
idxMacchina = 0001
[web]
URLBASE = http://10.74.82.219/MP/IO/IOB/input/
URLALIVE = http://10.74.82.219/MP/IO/IOB
URLENABLED = http://10.74.82.219/MP/IO/IOB/enabled/
URLBASE = http://10.74.82.218/MP/IO/IOB/input/
URLALIVE = http://10.74.82.218/MP/IO/IOB
URLENABLED = http://10.74.82.218/MP/IO/IOB/enabled/
URLADV1 = ?valore=
URLREBO = http://10.74.82.219/MP/IO/sendReboot.aspx?idxMacchina=
URLREBO = http://10.74.82.218/MP/IO/sendReboot.aspx?idxMacchina=
[time]
SAMPLETIME = 0.05
+4 -4
View File
@@ -2,11 +2,11 @@
idxMacchina = 0001
[web]
URLBASE = http://10.74.82.219/MP/IO/IOB/input/
URLALIVE = http://10.74.82.219/MP/IO/IOB
URLENABLED = http://10.74.82.219/MP/IO/IOB/enabled/
URLBASE = http://10.74.82.218/MP/IO/IOB/input/
URLALIVE = http://10.74.82.218/MP/IO/IOB
URLENABLED = http://10.74.82.218/MP/IO/IOB/enabled/
URLADV1 = ?valore=
URLREBO = http://10.74.82.219/MP/IO/sendReboot.aspx?idxMacchina=
URLREBO = http://10.74.82.218/MP/IO/sendReboot.aspx?idxMacchina=
[time]
SAMPLETIME = 0.05
+92 -1
View File
@@ -1,3 +1,94 @@
# Upgrade sw IOB-PI clienti
ATTENZIONE: se si copia dalla versione standard, SUL PI VA DATO un dos2unix * x tutti i files..
ATTENZIONE: se si copia dalla versione standard, SUL PI VA DATO un dos2unix * x tutti i files..
## Salt install##
Se il minion è taggato come iop-pi bast dare state apply, poiché dallo stato top.sls è configurato di fare gli stati
* 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##
creazione MD5: da powershell
<code>
Get-FileHash .\Mapo.zip -Algorithm MD5
</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 "------------------"
+23
View File
@@ -0,0 +1,23 @@
[id]
idxMacchina = 1005
[web]
URLBASE = http://10.74.82.218/MPIO/inputIOB.aspx?idxMacchina=
URLALIVE = http://10.74.82.218/MPIO/Alive.aspx
URLENABLED = http://10.74.82.218/MPIO/Enabled.aspx?idxMacchina=
URLADV1 = &valore=
URLREBO = http://10.74.82.218/MPIO/sendReboot.aspx?idxMacchina=
[time]
SAMPLETIME = 0.20
TIMEOUTSHORT = 0.30
TIMEOUTLONG = 50
SENDURLTIME = 0.50
[log]
LOGLEVEL = 10
LOGFILE = logfile.txt
LOGREBO = logReboot.txt
[comm]
port = /dev/ttyAMA0
@@ -0,0 +1,23 @@
[id]
idxMacchina = 1002
[web]
URLBASE = http://192.168.51.71/MPIO/inputIOB.aspx?idxMacchina=
URLALIVE = http://192.168.51.71/MPIO/Alive.aspx
URLENABLED = http://192.168.51.71/MPIO/Enabled.aspx?idxMacchina=
URLADV1 = &valore=
URLREBO = http://192.168.51.71/MPIO/sendReboot.aspx?idxMacchina=
[time]
SAMPLETIME = 0.25
TIMEOUTSHORT = 2
TIMEOUTLONG = 50
SENDURLTIME = 0.2
[log]
LOGLEVEL = 10
LOGFILE = logfile.txt
LOGREBO = /var/log/logReboot.txt
[comm]
port = /dev/ttyAMA0
@@ -0,0 +1,23 @@
[id]
idxMacchina = 1005
[web]
URLBASE = http://10.74.82.218/MPIO/inputIOB.aspx?idxMacchina=
URLALIVE = http://10.74.82.218/MPIO/Alive.aspx
URLENABLED = http://10.74.82.218/MPIO/Enabled.aspx?idxMacchina=
URLADV1 = &valore=
URLREBO = http://10.74.82.218/MPIO/sendReboot.aspx?idxMacchina=
[time]
SAMPLETIME = 0.20
TIMEOUTSHORT = 0.30
TIMEOUTLONG = 50
SENDURLTIME = 0.50
[log]
LOGLEVEL = 10
LOGFILE = logfile.txt
LOGREBO = logReboot.txt
[comm]
port = /dev/ttyAMA0
+41
View File
@@ -0,0 +1,41 @@
### BEGIN INIT INFO
# Provides: MapoIOB: script Steamware per avvio driver IOB
# Required-Start: $remote_fs $syslog ramlog
# Required-Stop: $remote_fs $syslog ramlog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Steamware's MapoIOB driver
# Description: Steamware's MapoIOB driver, versione lettura porta parallela
### END INIT INFO
#! /bin/sh
# /etc/init.d/MapoIOB
export HOME
case "$1" in
start)
echo "Starting readParallela"
cd /home/pi/steamware
/usr/bin/python ./readParallela.py 2>&1 &
;;
stop)
echo "Stopping readParallela"
RS_PID=`ps auxwww | grep readParallela.py | head -1 | awk '{print $2}'`
kill -9 $RS_PID
cd /home/pi/steamware
rm .lockfile
;;
restart)
## Stop the service and regardless of whether it was
## running or not, start it again.
$0 stop
killall python
$0 start
;;
*)
echo "Usage: /etc/init.d/MapoIOB {start|stop|restart}"
exit 1
;;
esac
exit 0
@@ -0,0 +1,20 @@
#!/bin/bash
# controlla se il logfile è correntemente scritto (quindi MapoIOB è alive) altrimenti riavvia!
DATE=`date +%Y-%m-%d`
cd /var/log
if [ -f MapoIOB ]
then
# controllo SE sia stato acceduto da meno di 2 minuti (=alive da log...)
trovato=`find . -name 'MapoIOB*' -cmin -1`
if [[ $trovato != './MapoIOB' ]]
then
/etc/init.d/MapoIOB restart
echo $date + "riavvio!"
fi
else
# in questo caso AVVIO il processo MapoIOB
/etc/init.d/MapoIOB start
echo $date + "file non trovato, avvio!"
fi
@@ -0,0 +1,14 @@
#!/bin/bash
DATE=`date +%Y-%m-%d_%T`
# log inizio pulizia
echo $DATE " - INIZIO pulizia processi python" >> clean.log
# effettua pulizia processi: killa tutti i processi python
killall python
# avvia MapoIob
/etc/init.d/MapoIOB start
# log fatto!
DATE=`date +%Y-%m-%d_%T`
echo $DATE " - FINE pulizia processi python + riavvio MapoIOB" >> clean.log
+1
View File
@@ -0,0 +1 @@
* * * * * /bin/bash /home/pi/steamware/checkAlive.sh >> /home/pi/stdout 2>> /home/pi/stderr
@@ -0,0 +1,47 @@
#|/bin/bash
#installa il necessario per RPI-3-IOB partendo dal contenuto della folder /home/pi/steamware
#step 1: creo file di log nuovi
rm /var/log/log*.txt
rm /var/log/MapoIOB
rm /home/pi/steamware/log*.txt
touch /var/log/logReboot.txt
touch /var/log/logTemp.txt
touch /var/log/MapoIOB
ln -sf /var/log/logReboot.txt /home/pi/steamware/logReboot.txt
ln -sf /var/log/logTemp.txt /home/pi/steamware/logTemp.txt
ln -sf /var/log/MapoIOB /home/pi/steamware/logfile.txt
chown pi:pi /home/pi -R
chmod 666 /var/log/log*.txt
chmod 666 /var/log/MapoIOB
#step 2: copio files in /usr/local/bin
cd /home/pi/steamware
chmod +x *.sh
cp *.sh /usr/local/bin/
# step 3: copio target systemd in avvio...
cp -f sendRebootIOB /etc/init.d/sendRebootIOB
cp -f sendRebootIOB.service /etc/systemd/system/sendRebootIOB.service
echo ""
echo "-----------------------------------------------"
echo "Completare registrazione servizio avvio: digitare i seguenti comandi"
echo "systemctl enable sendRebootIOB"
echo "systemctl daemon-reload"
echo "systemctl status sendRebootIOB"
echo "-----------------------------------------------"
echo ""
echo ""
echo ""
echo "-----------------------------------------------"
echo "Infine creare voce crontab che salvi temperatura CPU/GPU ogni 20 minuti..."
echo "crontab -e"
echo "*/20 * * * * /usr/local/bin/saveTemp.sh"
echo "-----------------------------------------------"
+2
View File
@@ -0,0 +1,2 @@
#!/bin/bash
/usr/bin/python /home/pi/steamware/readParallela.py
+2
View File
@@ -0,0 +1,2 @@
#!/bin/bash
/usr/bin/python /home/steamware/readSeriale.py
@@ -0,0 +1,530 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
# readParallela v. 1.8
# versione estetica di Carlo + single instance timer
#---------------------------------------------------------------
# levare locking
# timer semplificata
# GPIO global
import time
import sys
from datetime import datetime
import urllib
import ConfigParser
import os, sys
import logging
import logging.handlers
import threading
import Queue
#--------------------------------------------------------------
# COSTANTI
MSGLEN = 9
TIMEOUTSERIALE = 10
MAXRETRY = 3
PROGRAM_NAME ="ReadPar IOB-pi v.1.8"
# DA FILE CONF
idxMacchina = "1001"
SAMPLETIME = 0.1
TIMEOUTSHORT = (SAMPLETIME*20)
TIMEOUTLONG = (SAMPLETIME*600)
SENDURLTIME = 0.08
# VAR
to_enable = False
to_short = TIMEOUTSHORT
to_long = TIMEOUTLONG
to_serial = TIMEOUTSERIALE
to_retry = MAXRETRY
errormsglen = 0
# VAR
out_0 = 24
out_1 = 26
in_0 = 11
in_1 = 12
in_2 = 13
in_3 = 15
in_4 = 16
in_5 = 18
in_6 = 22
in_7 = 7
# contatore: serve x match tra accoda ed invia x possibile controllo a posteriori... ogni volta che accodo incremento di 1, va da 0 a 999
cont = '0'
# variabile stato online/offline della macchina
onLine = '1'
# variabile stato seinding/waiting x la parte invio URL
sending = '0'
# variabile stato timer thread busy
timer_busy = False
#--------------------------------------------------------------
# Gestione coda (condivisa) x registrazione eventi ed invio URL
#print "Creazione coda 1000 elementi"
Coda = Queue.Queue(0)
#queueLock = threading.Lock()
#---------------------------------------------------------------
# lettura parallela
# ritorna il byte letto pulito ( due char hex )
def readParallela():
global in_0
global in_1
global in_2
global in_3
global in_4
global in_5
global in_6
global in_7
global GPIO
current = ''
# print "input : "
# ritorna '' se non ci sono abbastanza caratteri
try:
num_value = 255
# print "num_value : " , num_value , in_0
if GPIO.input(in_0):
num_value = num_value - 1
if GPIO.input(in_1):
num_value = num_value - 2
if GPIO.input(in_2):
num_value = num_value - 4
if GPIO.input(in_3):
num_value = num_value - 8
if GPIO.input(in_4):
num_value = num_value - 16
if GPIO.input(in_5):
num_value = num_value - 32
if GPIO.input(in_6):
num_value = num_value - 64
if GPIO.input(in_7):
num_value = num_value - 128
current = hex( num_value ).replace ( "0x" , "" ).upper()
# print "\n\n\n\n\n" , num_value , current
except:
pass
return current
#--------------------------------------------------------------
# MARCO: cambiare: chiama URL NON deve chiamare url MA METTERE IN CODA (riempiCoda!!!)
# la parte URL vera va messa in svuotaCoda, PARAMETRICA
#---------------------------------------------------------------
#Funzione di scrittura su coda con try-except
def accoda():
try:
# url = URLBASE + idxMacchina + URLADV1 + value
# urllib.urlopen ( url )
#dtEve = time.strftime("%y%m%d%H%M%S")+"000"
dtEve = datetime.utcnow().strftime('%Y%m%d%H%M%S%f')[:-3]
#logPro.debug( "Nuovo valore inserito in coda: " + dtEve + "#" + value + '#' + cont)
#print(dtEve)
#queueLock.acquire()
Coda.put(dtEve + '#' + value + '#' + cont)
#queueLock.release()
#print "Nuovo valore inserito in coda: " + dtEve + "#", value
except Queue.Full:
logPro.error( "Quque full" + dtEve + '#' + value + '#' + cont )
except:
logPro.error( "NETWORK:Errore http-no com rete-timeout" + url )
# print "Url aforte" , url
#--------------------------------------------------------------
# MARCO: scrivere svuotaCoda come thread etc...
def svuota_coda():
global onLine
global sending
global timer_busy
#print "start timer "
if ( timer_busy == False ):
timer_busy = True
#print "start timer ok "
try:
if not Coda.empty():
#print "coda da svuotare!"
response = urllib.urlopen(URLALIVE)
answ = response.read()
if answ == 'OK':
#print "OK alive"
response2 = urllib.urlopen(URLENABLED + idxMacchina)
answ2 = response2.read()
if answ2 == 'OK':
# aggiorno stato ad online
if onLine == '0':
logPro.info("IOB ONLINE!")
#print("IOB ONLINE")
onLine = '1' # imposto comunque online
else:
if onLine == '1':
logPro.error("IOB offline")
#print("IOB offline")
onLine = '0'
else:
if onLine == '1':
logPro.error("Server offline")
#print("Server offline")
onLine = '0'
# ora verifico SE si possa inviare (ovvero sia online server e NON ci siano altri send attivi...)
if onLine == '1':
if sending == '0':
#segnalo che sono in sending!
sending = '1'
# formatto dataOra corrente
#dtCurr = time.strftime("%y%m%d%H%M%S")+"000"
dtCurr = datetime.utcnow().strftime('%Y%m%d%H%M%S%f')[:-3]
# prendo 1 valore dalla coda...
#queueLock.acquire()
resp = Coda.get()
# RILASCIO SUBITO la coda x nuovi insert...
#queueLock.release()
# recupero valori da coda!
dtEve = resp.split("#")[0]
value = resp.split("#")[1]
cnt = resp.split("#")[2]
url = URLBASE + idxMacchina + URLADV1 + value
url = url + '&dtCurr=' + dtCurr + '&dtEve=' + dtEve + '&cnt=' + cnt
# CHIAMO URL
response3 = urllib.urlopen ( url )
answ3 = response3.read()
#print(url)
#logPro.debug(url)
# log valore inviato!
logSnd.info( value + ' ['+ cnt +']' + ' R:' + answ3 )
#print "Valore smaltito dalla coda"
# completato invio, riporto sending a zero!
sending = '0'
else:
logPro.info("WAIT active send to complete")
else:
pass
else:
pass
except:
if onLine == '1':
logPro.error("Server Non raggiungibile")
#print "Non raggiungibile"
onLine = '0'
# in ogni caso
timer_busy = False
#print "end timer ok"
#print "end timer "
#---------------------------------------------------------------
# funzione timer thread
#---------------------------------------------------------------
def do_every (interval, worker_func, iterations = 0):
if iterations != 1:
threading.Timer (
interval,
do_every, [interval, worker_func, 0 if iterations == 0 else iterations-1]
).start ();
worker_func ();
#---------------------------------------------------------------
# gestione contatore
#---------------------------------------------------------------
def contatore():
try:
global cont
ctr = int(cont)
ctr +=1
ctr = ctr % 1000 # round robin 1000 eventi x track
cont = str(ctr)
except:
print("errore incremento contatore")
#---------------------------------------------------------------
# avvia porta parallela
#---------------------------------------------------------------
def avviaParallela():
global in_0
global in_1
global in_2
global in_3
global in_4
global in_5
global in_6
global in_7
global GPIO
try:
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
#GPIO.setup(out_0, GPIO.OUT) # output 0
#GPIO.setup(out_1, GPIO.OUT) # output 1
GPIO.setup(in_0, GPIO.IN) # input 0
GPIO.setup(in_1, GPIO.IN) # input 1
GPIO.setup(in_2, GPIO.IN) # input 2
GPIO.setup(in_3, GPIO.IN) # input 3
GPIO.setup(in_4, GPIO.IN) # input 4
GPIO.setup(in_5, GPIO.IN) # input 5
GPIO.setup(in_6, GPIO.IN) # input 6
GPIO.setup(in_7, GPIO.IN) # input 7
except:
print( "\n\n" + PROGRAM_NAME + " - Error 3 on RPi.GPIO ! \n\n")
sys.exit(1)
print( "\n\n" + PROGRAM_NAME + " - init ok \n\n")
#---------------------------------------------------------------
#---------------------------------------------------------------
# MAIN
try:
config = ConfigParser.RawConfigParser()
config.read ( 'IOB.cfg' )
SAMPLETIME = config.getfloat ( 'time' , 'SAMPLETIME' )
TIMEOUTSHORT = config.getfloat ( 'time' , 'TIMEOUTSHORT' )
TIMEOUTLONG = config.getfloat ( 'time' , 'TIMEOUTLONG' )
SENDURLTIME = config.getfloat ( 'time' , 'SENDURLTIME' )
idxMacchina = config.get ( 'id' , 'idxMacchina' )
URLBASE = config.get ( 'web' , 'URLBASE' )
URLENABLED = config.get('web' , 'URLENABLED')
URLALIVE = config.get ('web' , 'URLALIVE')
URLADV1 = config.get ( 'web' , 'URLADV1' )
LOGFILE = config.get ( 'log' , 'LOGFILE' )
LOGLEVEL = config.get ( 'log' , 'LOGLEVEL' )
except:
print "\n\n" + PROGRAM_NAME + ' - Error 4 - in config file ' 'IOB.cfg'
sys.exit(1)
#--------------------------------------------
# oggetto Logger
#--------------------------------------------
try:
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'
)
# aggiungo 2 logger specifici x queue e send...
logQue = logging.getLogger('queue')
logSnd = logging.getLogger('sendUrl')
logPro = logging.getLogger('program')
except:
# manda mail o simili - FARE!!!
print "LOG: Impossibile creare file log con nome "
print (LOGFILE)
#--------------------------------------------
print "\n\n" + PROGRAM_NAME + "\n\n"
global startstatus
startstatus = 1
if startstatus == 1:
logPro.info("Avvio Programma" + PROGRAM_NAME)
## Verifica l'OS e di conseguenza carica il file relativo con metodo di lockfile appropriato + check singola istanza
if os.name == 'posix':
import unix
else:
import win
logPro.info( "Start " + PROGRAM_NAME )
# lettura file configurazione
# [id]
# idxMacchina = 2001
# [time]
# SAMPLETIME = 0.1
# TIMEOUTSHORT = 200
# TIMEOUTLONG = 6000
print ( ' idxMacchina = %s' % ( idxMacchina ) )
print ( ' SAMPLETIME = %4.2f' % ( SAMPLETIME ) )
print ( ' TIMEOUTSHORT = %4.2f' % ( TIMEOUTSHORT ) )
print ( ' TIMEOUTLONG = %4.2f' % ( TIMEOUTLONG ) )
print ( ' SENDURLTIME = %4.2f' % ( SENDURLTIME ) )
print ( ' URLBASE = %s' % ( URLBASE ) )
print ( ' URLADV1 = %s' % ( URLADV1 ) )
print ( ' LOGFILE = %s' % ( LOGFILE ) )
print ( ' LOGLEVEL = %s' % ( LOGLEVEL ) )
# -sys.stdout.write ( 'idxMacchina ?' + idxMacchina + '\n')
to_short = TIMEOUTSHORT
to_long = TIMEOUTLONG
#--------------------------------------------------------------
# apertura parallela
try:
import RPi.GPIO as GPIO
except RuntimeError:
print( "\n\n" + PROGRAM_NAME + " - Error 1 - you need superuser privileges")
except:
print( "\n\n" + PROGRAM_NAME + " - Error 2 - you need superuser privileges. USE 'sudo' to run your script\n\n")
sys.exit(1)
avviaParallela()
#--------------------------------------------------------------
# MARCO: qui inserire avvio thread di "svuotaCoda"
# avviaSvuotaCoda
#print "Avvia svuota coda"
do_every ( SENDURLTIME , svuota_coda );
#---------------------------------------------------------------
# ciclo forever and ever
old = ''
#print "Avvio ciclo"
logPro.info("Avvio loop principale")
while 1:
try:
time.sleep (SAMPLETIME)
except:
logPro.info("First_SLEEP: errore attesa sampletime")
# lettura dati da IOB
value = readParallela()
if ( value != '' ) :
if value != old :
#loggo e invio dati
try:
logQue.info( value + ' ['+ cont +']')
errormsglen = 0
accoda()
contatore()
except:
logPro.error("URLBROWSER: errore registrazione valore e accoda")
pass
#enable e reset timer
to_enable = True
to_short = TIMEOUTSHORT
to_long = TIMEOUTLONG
old = value
# gestione timeout breve
if ( to_enable ) :
to_short = to_short - SAMPLETIME
if to_short <= 0:
#loggo e invio dati
try:
logQue.info( '>' + value + ' ['+ cont +']')
errormsglen = 0
accoda()
contatore()
except:
logPro.error("URLBROWSER: errore registrazione valore e accoda TO_short")
pass
to_short = TIMEOUTSHORT
to_enable = False # dopo un colpo il timer breve viene disabilitato
to_long = TIMEOUTLONG
# gestione timeout lungo
to_long = to_long - SAMPLETIME
if to_long <= 0:
#loggo e invio dati
try:
logQue.info( '>>' + value + ' ['+ cont +']')
errormsglen = 0
accoda()
contatore()
except:
logPro.error("URLBROWSER: errore registrazione valore e accoda TO_long")
pass
to_long = TIMEOUTLONG
@@ -0,0 +1,363 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
#---------------------------------------------------------------
import serial
import time
import sys
import datetime
import urllib
import ConfigParser
import os, sys
#---------------------------------------------------------------
# COSTANTI
MSGLEN = 9
TIMEOUTSERIALE = 10
MAXRETRY = 3
# DA FILE CONF
idxMacchina = "2001"
SAMPLETIME = 0.1
TIMEOUTSHORT = (SAMPLETIME*20)
TIMEOUTLONG = (SAMPLETIME*600)
# VAR
to_enable = False
to_short = TIMEOUTSHORT
to_long = TIMEOUTLONG
to_serial = TIMEOUTSERIALE
to_retry = MAXRETRY
errormsglen = 0
#---------------------------------------------------------------
# classe logger
class Logger:
def __init__(self, filename):
try:
self.filename = filename
except:
logga("LOGGER: errore try su self.filename")
sys.exit(1)
def __call__(self, string):
try:
file = open(self.filename, 'a')
file.write('[' + time.strftime("%Y-%m-%d %H:%M:%S") + '] ')
file.write(string + '\n')
file.close()
except:
logga("LOGGER: errore try su scrittura")
sys.exit(1)
#---------------------------------------------------------------
# lettura buffer seriale e pulizia caratteri non stampabili
# ritorna '' se non c'è un messaggio buono o il messaggio pulito ( due bytes hex )
# il messaggio ha il formato xx<ACK>i00 00<CR><LF>xxx
def readSeriale():
global to_serial
global to_retry
global errormsglen
ret = ''
current = ''
i = 0
# ritorna '' se non ci sono abbastanza caratteri
try:
if ser.inWaiting() < MSGLEN :
#
# to_serial = to_serial - 1 # se non mi risponde, faccio un ' altra richiesta....
# if to_serial <= 0:
# try:
# requestData ()
# except:
# logga("SERIALE: errore su requestData")
# sys.exit(1)
# to_serial = TIMEOUTSERIALE # ripristino timer
# to_retry = to_retry - 1 # contatore retry
# if to_retry <= 0:
# logga ( 'IOB not responding' )
# return ret
logga("SERIALE: errore msglen < 9 char - Errore no. " + str(errormsglen))
errormsglen = errormsglen +1
avviaSeriale()
time.sleep(.2)
if errormsglen > 30:
sys.exit(1)
except:
if startstatus == 0:
logga ("Porta SERIALE non disponibile - ser.inWaiting error - exit... - Errore no. " + str(errormsglen))
errormsglen = errormsglen +1
avviaSeriale()
time.sleep(.2)
if errormsglen > 30:
sys.exit(1)
# finchè c'è robba .. leggi e tieni i buoni
to_serial = TIMEOUTSERIALE
to_retry = MAXRETRY
try:
while ser.inWaiting() > 0 :
try:
c = ser.read(1)
except:
logga("SERIALE: errore su try ser.read")
sys.exit(1)
# filtra caratteri non stampabili
if c > ' ' :
current += c
#sys.stdout.write(current + '<<<<\n')
# ora il messaggio ha il formato xxxxxi00 00xxx : cerco la 'i' iniziale
try:
while i < len(current) and current[i] != 'i':
i = i + 1
except:
logga("SERIALE: errore su ricerca i iniziale")
sys.exit(1)
# se non ho trovato la 'i' restituisco ''
if i == len(current)-1:
return ret
else:
current = current[i+1:i+3]
# richiesta dati ad IOB
requestData()
#sys.stdout.write ( current + '\n')
except:
if startstatus == 0:
logga ('Porta SERIALE non disponibile - ser.inWaiting e filtraggio error...exit')
sys.exit(1)
return current
#---------------------------------------------------------------
# richiesta dati ad IOB : scrittura su seriale
def requestData ():
try :
ser.write ("$i" + '\r\n')
ser.flush()
except :
if startstatus == 0:
logga ( "SERIAL: Errore di scrittura/flush")
#---------------------------------------------------------------
#Funzione di scrittura su url con try-except
def chiamaUrl():
try:
url = URLBASE + idxMacchina + URLADV1 + value
urllib.urlopen ( url )
except:
logga ( "NETWORK:Errore http-no com rete-timeout" + url )
#---------------------------------------------------------------
# Funzione che verifica possibilità di creare log e include testo corrente
def logga(message) :
try:
log(message)
except :
pass
#---------------------------------------------------------------
def avviaSeriale():
global ser
try:
ser = serial.Serial(
port = comm_port ,
baudrate = 9600 ,
parity = serial.PARITY_NONE ,
stopbits = serial.STOPBITS_ONE ,
bytesize = serial.EIGHTBITS
)
startstatus = 0
except serial.serialutil.SerialException , e :
try:
if startstatus == 0:
logga ( "SERIAL:Errore apertura seriale - " + comm_port)
except:
pass
sys.stdout.write ( '\nErrore apertura seriale\n\n%s\n\n' % e )
if errormsglen > 30:
sys.exit (1)
#---------------------------------------------------------------
#---------------------------------------------------------------
# MAIN
try:
config = ConfigParser.RawConfigParser()
config.read ( 'readSeriale.cfg' )
SAMPLETIME = config.getfloat ( 'time' , 'SAMPLETIME' )
TIMEOUTSHORT = config.getfloat ( 'time' , 'TIMEOUTSHORT' )
TIMEOUTLONG = config.getfloat ( 'time' , 'TIMEOUTLONG' )
idxMacchina = config.get ( 'id' , 'idxMacchina' )
comm_port = config.get ( 'comm' , 'port' )
URLBASE = config.get ( 'web' , 'URLBASE' )
URLADV1 = config.get ( 'web' , 'URLADV1' )
LOGFILE = config.get ( 'log' , 'LOGFILE' )
LOGLEVEL = config.get ( 'log' , 'LOGLEVEL' )
except:
sys.exit(1)
# oggetto Logger
try:
log = Logger(LOGFILE)
except:
# manda mail o simili - FARE!!!
print "LOG: Impossibile creare file log con nome "
print (LOGFILE)
print '\n\n Read seriale IOB v.0.2 !!!!\n'
global startstatus
startstatus = 1
if startstatus == 1:
logga("Avvio Programma")
# Verifica l'OS e di conseguenza carica il file relativo con metodo di lockfile appropriato + check singola istanza
if os.name == 'posix':
import unix
else:
import win
logga ( "Start Read seriale IOB v.0.2")
# lettura file configurazione
# [comm]
# port = /dev/ttyS0
# [id]
# idxMacchina = 2001
# [time]
# SAMPLETIME = 0.1
# TIMEOUTSHORT = 200
# TIMEOUTLONG = 6000
print ( ' comm_port = %s' % ( comm_port ) )
print ( ' idxMacchina = %s' % ( idxMacchina ) )
print ( ' SAMPLETIME = %4.2f' % ( SAMPLETIME ) )
print ( ' TIMEOUTSHORT = %4.2f' % ( TIMEOUTSHORT ) )
print ( ' TIMEOUTLONG = %4.2f' % ( TIMEOUTLONG ) )
print ( ' URLBASE = %s' % ( URLBASE ) )
print ( ' URLADV1 = %s' % ( URLADV1 ) )
print ( ' LOGFILE = %s' % ( LOGFILE ) )
print ( ' LOGLEVEL = %s' % ( LOGLEVEL ) )
# -sys.stdout.write ( 'idxMacchina ?' + idxMacchina + '\n')
to_short = TIMEOUTSHORT
to_long = TIMEOUTLONG
#--------------------------------------------------------------
#---------------------------------------------------------------
# apertura seriale
avviaSeriale()
#try:
# ser = serial.Serial(
# port = comm_port ,
# baudrate = 9600 ,
# parity = serial.PARITY_NONE ,
# stopbits = serial.STOPBITS_ONE ,
# bytesize = serial.EIGHTBITS
# )
# print "Initialized!"
#except serial.serialutil.SerialException , e :
# try:
# logga ( "SERIAL:Errore apertura seriale - " + comm_port)
# except:
# pass
# sys.stdout.write ( '\nErrore apertura seriale\n\n%s\n\n' % e )
# sys.exit (1)
#---------------------------------------------------------------
# ciclo forever and ever
old = ''
# richiesta dati ad IOB
try:
requestData()
except:
logga("SERIALE: errore sul try di requestData")
sys.exit(1)
while 1:
try:
time.sleep (SAMPLETIME)
except:
logga("SERIALE_SLEEP: errore attesa sampletime")
# lettura dati da IOB
try:
value = readSeriale()
except:
if startstatus == 0:
logga("errore PRIMA LETTURA SERIALE")
sys.exit(1)
if ( value != '' ) :
if value != old :
#loggo e invio dati
try:
logga ( value )
errormsglen = 0
chiamaUrl()
except:
logga("URLBROWSER: errore registrazione valore e chiamaUrl")
pass
#enable e reset timer
to_enable = True
to_short = TIMEOUTSHORT
to_long = TIMEOUTLONG
old = value
# gestione timeout breve
if ( to_enable ) :
to_short = to_short - SAMPLETIME
if to_short <= 0:
#loggo e invio dati
try:
logga ( '>' + value )
errormsglen = 0
chiamaUrl()
except:
pass
to_short = TIMEOUTSHORT
to_enable = False # dopo un colpo il timer breve viene disabilitato
to_long = TIMEOUTLONG
# gestione timeout lungo
to_long = to_long - SAMPLETIME
if to_long <= 0:
#loggo e invio dati
try:
logga ( '>>' + value )
errormsglen = 0
chiamaUrl()
except:
pass
to_long = TIMEOUTLONG
@@ -0,0 +1,17 @@
#!/bin/bash
#salva la temperatura CPU e GPU su chiamata...
# imposto logfile...
logFile="/var/log/logTemp.txt"
cpuTemp0=$(cat /sys/class/thermal/thermal_zone0/temp)
cpuTemp1=$(($cpuTemp0/1000))
cpuTemp2=$(($cpuTemp0/100))
cpuTempM=$(($cpuTemp2 % $cpuTemp1))
gpuTemp=`vcgencmd measure_temp`
loadAvg=`cat /proc/loadavg`
echo "$(date) | CPU: temp=$cpuTemp1.$cpuTempM ºC | GPU: $gpuTemp | LoadAvg: $loadAvg" >> $logFile
@@ -0,0 +1,130 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
# sendReboot v. 1.8
#---------------------------------------------------------------
import time
import sys
from datetime import datetime
import urllib
import ConfigParser
import os, sys
import logging
import time
#---------------------------------------------------------------
# COSTANTI
PROGRAM_NAME = "SendReboot IOB-pi v.1.8"
# DA FILE CONF
idxMacchina = "99"
# registro se ho fatto chiamata
global numTry
numTry = 1
#---------------------------------------------------------------
#Funzione di scrittura su url con try-except
#---------------------------------------------------------------
def chiamaUrl(numTry):
try:
urllib.urlopen ( url )
numTry = numTry + 10
except Exception, e:
print e
logging.info ( e )
print "Url aforte" , 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]
#---------------------------------------------------------------
# MAIN
#---------------------------------------------------------------
try:
config = ConfigParser.RawConfigParser()
config.read ( 'IOB.cfg' )
idxMacchina = config.get ( 'id' , 'idxMacchina' )
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)
#--------------------------------------------
# oggetto Logger
#--------------------------------------------
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')
except:
# manda mail o simili - FARE!!!
print "LOG: Impossibile creare file log con nome "
print (LOGFILE)
#--------------------------------------------
print "\n\n" + PROGRAM_NAME + "\n\n"
global startstatus
startstatus = 1
if startstatus == 1:
logging.info("Avvio Programma " + PROGRAM_NAME)
# lettura file configurazione
print ( ' idxMacchina = %s' % ( idxMacchina ) )
print ( ' URLREBO = %s' % ( URLREBO ) )
print ( ' LOGFILE = %s' % ( LOGFILE ) )
# lettura mac address
myMac = getMAC('eth0')
print ( ' MAC Address = %s' % ( myMac ) )
# configuro URL da inviare
url = URLREBO + idxMacchina + "&mac=" + myMac
# modifica: cerco se ho inviato segnale altrimenti ritento invio...
while (numTry < 11):
logging.info("Tentativo invio URL: " + `numTry` )
numTry = chiamaUrl(numTry)
time.sleep(3)
numTry = numTry + 1
# registro che ho inviato!
logging.info("Inviato segnale di reboot!: " + url )
@@ -0,0 +1,33 @@
#!/bin/sh -
#
### BEGIN INIT INFO
# Provides: sendReboot
# Required-Start: $network $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Steamware's IOB reboot signal
# Description: Steamware's sendReboot segnalazione reboot dispositivo
### END INIT INFO
#! /bin/sh
# /etc/init.d/sendReboot
export HOME
case "$1" in
start)
cd /home/pi/steamware
echo "Starting sendReboot"
/usr/bin/python ./sendReboot.py 2>&1 &
echo "Verifica Rete e file IOB"
/usr/local/bin/setIobConf.sh
;;
*)
echo "Usage: /etc/init.d/sendReboot {start}"
exit 1
;;
esac
exit 0
@@ -0,0 +1,22 @@
[Unit]
SourcePath=/etc/init.d/sendRebootIOB
Description=LSB: Steamware's IOB reboot signal
Before=runlevel2.target runlevel3.target runlevel4.target runlevel5.target shutdown.target
Wants=network-online.target
After=network.target network-online.target auditd.service
Conflicts=shutdown.target
[Service]
Type=forking
Restart=no
TimeoutSec=5min
IgnoreSIGPIPE=no
KillMode=process
GuessMainPID=no
RemainAfterExit=yes
SysVStartPriority=2
ExecStart=/etc/init.d/sendRebootIOB start
ExecStop=/etc/init.d/sendRebootIOB stop
[Install]
WantedBy=multi-user.target
@@ -0,0 +1,26 @@
#!/bin/bash
# verifico se sia rete donati o rete steamware o offline...
netStatus=`cat /sys/class/net/eth0/operstate`
iaddr=`ifconfig eth0 | grep "inet addr" | cut -d ':' -f 2 | cut -d ' ' -f 1`
cd /home/pi/steamware
if [[ $netStatus != "up" ]]
then
echo "Siamo Offline, pagina demo!"
elif [[ $iaddr == "10.74.82"* ]]
then
cp IOB.cfg.steamware IOB.cfg -f
echo "Siamo in Steamware!"
elif [[ $iaddr == "192.168.51"* ]]
then
cp IOB.cfg.donati IOB.cfg -f
echo "Siamo a Passirano!"
else
echo "Siamo altrove, pagina demo!"
fi
echo "$iaddr"
chown pi:pi *
+31
View File
@@ -0,0 +1,31 @@
import logging
# set up logging to file - see previous section for more details
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
datefmt='%m-%d %H:%M',
filename='test.log',
filemode='w')
# define a Handler which writes INFO messages or higher to the sys.stderr
console = logging.StreamHandler()
console.setLevel(logging.INFO)
# set a format which is simpler for console use
formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
# tell the handler to use this format
console.setFormatter(formatter)
# add the handler to the root logger
logging.getLogger('').addHandler(console)
# Now, we can log to the root logger, or any other logger. First the root...
logging.info('Jackdaws love my big sphinx of quartz.')
# Now, define a couple of other loggers which might represent areas in your
# application:
logger1 = logging.getLogger('myapp.area1')
logger2 = logging.getLogger('myapp.area2')
logger1.debug('Quick zephyrs blow, vexing daft Jim.')
logger1.info('How quickly daft jumping zebras vex.')
logger2.warning('Jail zesty vixen who grabbed pay from quack.')
logger2.error('The five boxing wizards jump quickly.')
+31
View File
@@ -0,0 +1,31 @@
import fcntl
import os
import logging
#---------------------------------------------------------------
# meccanismo di file lock per evitare multiple instances
# The function will try to lock the file specified , if it success, return True, else return False.
# The nice thing is that the lock will be dropped when the program terminates.
# >>>Use :
# if not lockFile(".lock.pod"):
# sys.exit(0)
def lockFile ( lockfile ) :
fd = os.open ( lockfile , os.O_CREAT | os.O_TRUNC | os.O_WRONLY )
try:
# Request exclusive (EX) non-blocking (NB) advisory lock.
fcntl.lockf ( fd , fcntl.LOCK_EX | fcntl.LOCK_NB )
except IOError:
return False
return True
if not lockFile ( ".lockfile" ) :
print '\n noi non siamo soli ...\n'
logging.error( "LOCK: Piu istanze aperte")
#sys.exit ( 0 )
#- print '\n running alone ...\n'
Binary file not shown.
+32
View File
@@ -0,0 +1,32 @@
import win32api
print " Running on WINDOWS\n"
import os
#---------------------------------------------------------------
# meccanismo di file lock per evitare multiple instances
# The function will try to lock the file specified , if it success, return True, else return False.
# The nice thing is that the lock will be dropped when the program terminates.
# >>>Use :
# if not lockFile(".lock.pod"):
# sys.exit(0)
def lockFile ( lockfile ) :
try:
fd = os.open ( lockfile , os.O_CREAT | os.O_TRUNC | os.O_WRONLY )
except:
logga("Errore nel file WIN.PY per FD")
try:
# Request exclusive (EX) non-blocking (NB) advisory lock.
#fcntl.lockf ( fd , fcntl.LOCK_EX | fcntl.LOCK_NB )
print " Dummy Method! Completa Lockfile\n"
except IOError:
return False
return True
try:
if not lockFile ( ".lockfile" ) :
print '\n noi non siamo soli ...\n'
logga ( "LOCK: Piu istanze aperte")
sys.exit ( 0 )
except:
logga("if not lockfile NON RIUSCITO in file WIN.PY")
sys.exit(1)
Binary file not shown.
+68
View File
@@ -0,0 +1,68 @@
[id]
idxMacchina = 0001
[web]
URLBASE = http://10.74.82.218/MP/IO/IOB/input/
URLALIVE = http://10.74.82.218/MP/IO/IOB
URLENABLED = http://10.74.82.218/MP/IO/IOB/enabled/
URLADV1 = ?valore=
URLREBO = http://10.74.82.218/MP/IO/sendReboot.aspx?idxMacchina=
[time]
SAMPLETIME = 0.05
TIMEOUTSHORT = 0.30
TIMEOUTLONG = 50
SENDURLTIME = 0.15
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
@@ -0,0 +1,35 @@
[id]
idxMacchina = 2007
[web]
URLBASE = http://192.168.51.77/MP/IO/IOB/input/
URLALIVE = http://192.168.51.77/MP/IO/IOB
URLENABLED = http://192.168.51.77/MP/IO/IOB/enabled/
URLADV1 = ?valore=
URLREBO = http://192.168.51.77/MP/IO/sendReboot.aspx?idxMacchina=
[time]
SAMPLETIME = 0.05
TIMEOUTSHORT = 0.30
TIMEOUTLONG = 50
SENDURLTIME = 0.15
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 = 1
bit4 = 0
bit5 = 0
bit6 = 0
bit7 = 0
@@ -0,0 +1,35 @@
[id]
idxMacchina = 1005
[web]
URLBASE = http://10.74.82.218/MP/IO/IOB/input/
URLALIVE = http://10.74.82.218/MP/IO/IOB
URLENABLED = http://10.74.82.218/MP/IO/IOB/enabled/
URLADV1 = ?valore=
URLREBO = http://10.74.82.218/MPIO/sendReboot.aspx?idxMacchina=
[time]
SAMPLETIME = 0.05
TIMEOUTSHORT = 0.30
TIMEOUTLONG = 50
SENDURLTIME = 0.15
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 = 1
bit4 = 0
bit5 = 0
bit6 = 0
bit7 = 0
+41
View File
@@ -0,0 +1,41 @@
#! /bin/bash
### BEGIN INIT INFO
# Provides: MapoIOB: script Steamware per avvio driver IOB
# Required-Start: $remote_fs $syslog ramlog
# Required-Stop: $remote_fs $syslog ramlog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Steamware's MapoIOB driver
# Description: Steamware's MapoIOB driver, versione lettura porta parallela
### END INIT INFO
# /etc/init.d/MapoIOB
export HOME
case "$1" in
start)
echo "Starting readParallela"
cd /home/pi/steamware
/usr/bin/python ./readParallela.py 2>&1 &
;;
stop)
echo "Stopping readParallela"
RS_PID=`ps auxwww | grep readParallela.py | head -1 | awk '{print $2}'`
kill -9 $RS_PID
cd /home/pi/steamware
rm .lockfile
;;
restart)
## Stop the service and regardless of whether it was
## running or not, start it again.
$0 stop
killall python
$0 start
;;
*)
echo "Usage: /etc/init.d/MapoIOB {start|stop|restart}"
exit 1
;;
esac
exit 0
@@ -0,0 +1,22 @@
[Unit]
SourcePath=/etc/init.d/MapoIOB
Description=LSB: Steamware's MapoIOB driver
Before=runlevel2.target runlevel3.target runlevel4.target runlevel5.target shutdown.target
Wants=network-online.target
After=network.target network-online.target auditd.service
Conflicts=shutdown.target
[Service]
Type=forking
Restart=no
TimeoutSec=5min
IgnoreSIGPIPE=no
KillMode=process
GuessMainPID=no
RemainAfterExit=yes
SysVStartPriority=1
ExecStart=/etc/init.d/MapoIOB start
ExecStop=/etc/init.d/MapoIOB stop
[Install]
WantedBy=multi-user.target
@@ -0,0 +1,28 @@
/var/log/MapoIOB.log {
size 8M
copytruncate
create 700 pi pi
dateext
rotate 100
compress
maxage 366
missingok
}
/var/log/logReboot.txt {
size 1M
copytruncate
create 700 pi pi
dateext
rotate 30
compress
missingok
}
/var/log/logTemp.txt {
size 1M
copytruncate
create 700 pi pi
dateext
rotate 30
compress
missingok
}
@@ -0,0 +1,20 @@
#!/bin/bash
# controlla se il logfile è correntemente scritto (quindi MapoIOB è alive) altrimenti riavvia!
DATE=`date +%Y-%m-%d`
cd /var/log
if [ -f MapoIOB.log ]
then
# controllo SE sia stato acceduto da meno di 2 minuti (=alive da log...)
trovato=`find . -name 'MapoIOB*' -cmin -1`
if [[ $trovato != './MapoIOB.log' ]]
then
/etc/init.d/MapoIOB restart
echo $date + "riavvio!"
fi
else
# in questo caso AVVIO il processo MapoIOB
/etc/init.d/MapoIOB start
echo $date + "file non trovato, avvio!"
fi
@@ -0,0 +1,14 @@
#!/bin/bash
DATE=`date +%Y-%m-%d_%T`
# log inizio pulizia
echo $DATE " - INIZIO pulizia processi python" >> clean.log
# effettua pulizia processi: killa tutti i processi python
killall python
# avvia MapoIob
/etc/init.d/MapoIOB start
# log fatto!
DATE=`date +%Y-%m-%d_%T`
echo $DATE " - FINE pulizia processi python + riavvio MapoIOB" >> clean.log
@@ -0,0 +1,46 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
# readFile v. 0.1
# - single instance timer
# - invio multiplo x send eventi accodati
#---------------------------------------------------------------
import os, sys
import argparse
#--------------------------------------------------------------
# gestione parser argomenti in input
parser = argparse.ArgumentParser()
parser.add_argument("inFile")
parser.add_argument("outFile")
args = parser.parse_args()
#with open('logfile.txt', 'r') as inf, open('persMem.dat',"w") as outf:
with open(args.inFile, 'r') as inf, open(args.outFile,"w") as outf:
data = inf.readlines()
lastDt = ""
lastMs = 0
stepMs = 200
for line in data:
words = line.split()
if words[2] == 'queue':
# recupero dataOra
newDt = words[0].replace("-","") + words[1].replace(":","")
# verifico se data/ora identica...
if (lastDt == newDt):
# --> aggiungo stepMs
lastMs += stepMs
else:
lastMs = 0
lastDt = newDt
newDt = newDt + '{:03d}'.format(lastMs) #str(lastMs)
#print words[0].replace("-","") + words[1].replace(":","") + " | " + newDt + "\n"
# print words
# outf.write(words[0].replace("-","") + words[1].replace(":","") + '#' + words[4].replace(">","") + '#' + words[5].replace("[","").replace("]","") +'\n')
outf.write(newDt + '#' + words[4].replace(">","") + '#' + words[5].replace("[","").replace("]","") +'\n')
@@ -0,0 +1 @@
* * * * * /bin/bash /home/pi/steamware/checkAlive.sh >> /home/pi/stdout 2>> /home/pi/stderr
@@ -0,0 +1,54 @@
#|/bin/bash
#installa il necessario per RPI-3-IOB partendo dal contenuto della folder /home/pi/steamware
#step 1: creo file di log nuovi
rm /var/log/log*.txt
rm /var/log/MapoIOB*
rm /home/pi/steamware/log*.txt
touch /var/log/logReboot.txt
touch /var/log/logTemp.txt
touch /var/log/MapoIOB.log
ln -sf /var/log/logReboot.txt /home/pi/steamware/logReboot.txt
ln -sf /var/log/logTemp.txt /home/pi/steamware/logTemp.txt
ln -sf /var/log/MapoIOB.log /home/pi/steamware/logfile.txt
chown pi:pi /home/pi -R
chmod 666 /var/log/log*.txt
chmod 666 /var/log/MapoIOB.log
#step 2: copio files in /usr/local/bin
cd /home/pi/steamware
chmod +x *.sh
cp *.sh /usr/local/bin/
#step 3: copio files x logrotate...
cd /home/pi/steamware
cp MapoIOB_logrot /etc/logrotate.d/
# step 4: copio target systemd in avvio...
cp -f sendRebootIOB /etc/init.d/sendRebootIOB
cp -f sendRebootIOB.service /etc/systemd/system/sendRebootIOB.service
#echo ""
#echo "-----------------------------------------------"
#echo "Completare registrazione servizio avvio: digitare i seguenti comandi"
#echo "systemctl enable sendRebootIOB"
#echo "systemctl daemon-reload"
#echo "systemctl status sendRebootIOB"
#echo "-----------------------------------------------"
#echo ""
# step 5: copio target MapoIOB in avvio...
cp -f MapoIOB /etc/init.d/MapoIOB
cp -f MapoIOB.service /etc/systemd/system/MapoIOB.service
#echo ""
#echo ""
#echo "-----------------------------------------------"
#echo "Infine creare voce crontab che salvi temperatura CPU/GPU ogni 20 minuti..."
#echo "crontab -e"
#echo "*/20 * * * * /usr/local/bin/saveTemp.sh"
#echo "-----------------------------------------------"
@@ -0,0 +1,152 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
# readFile v. 0.1
# - single instance timer
# - invio multiplo x send eventi accodati
#---------------------------------------------------------------
import time
from datetime import datetime
import urllib
import ConfigParser
import os, sys
import logging
import logging.handlers
import Queue
import argparse
#--------------------------------------------------------------
# gestione parser argomenti in input
parser = argparse.ArgumentParser()
parser.add_argument("memFile")
parser.add_argument("logFile")
args = parser.parse_args()
#definizione variabili BASE
stepQueuePut=25000
stepQueueGet=250
NMAXSEND=500000 # limite invio file x fare prove...
idxMacchina = "2003"
#--------------------------------------------------------------
# Gestione coda (condivisa) x registrazione eventi ed invio URL
#print "Creazione coda illimitata"
Coda = Queue.Queue(0)
#---------------------------------------------------------------
#Funzione di scrittura su coda con try-except
def accoda(valore):
try:
Coda.put(valore)
except Queue.Full:
logPro.error( "Queue full" + dtEve + '#' + value + '#' + cont )
except:
logPro.error( "NETWORK:Errore http-no com rete-timeout" + url )
#--------------------------------------------------------------
# svuotaCoda x invio dati al server
def svuota_coda():
global NMAXSEND
try:
if not Coda.empty():
# invio SOLO i primi NMAXSEND eventi... SE minore del num eventi...
if NMAXSEND > Coda.qsize():
NMAXSEND = Coda.qsize()
i = 0
with open(args.logFile,"w") as outf:
while i <= NMAXSEND:
if not Coda.empty():
# formatto dataOra corrente
dtCurr = datetime.utcnow().strftime('%Y%m%d%H%M%S%f')[:-3]
#prendo primo elemento dalla coda
resp = Coda.get()
# recupero valori da elemento coda!
dtEve = resp.split("#")[0]
value = resp.split("#")[1]
cnt = resp.split("#")[2]
url = URLBASE + idxMacchina + URLADV1 + value
url = url + '&dtCurr=' + dtCurr + '&dtEve=' + dtEve + '&cnt=' + cnt
# CHIAMO URL
response3 = urllib.urlopen ( url )
answ3 = response3.read()
# registro chiamata + risposta
# outf.write(url + " --> " + answ3 + "\n")
# incremento e controllo se mostrare output
i += 1
if (i % stepQueueGet) == 0:
print "Inviati %d valori..." % i
print "Inviati %d valori..." % i
except:
print "Errore in svuotamento coda!"
#---------------------------------------------------------------
# MAIN
try:
config = ConfigParser.RawConfigParser()
config.read ( 'IOB.cfg' )
# NMAXSEND = config.getint ( 'time' , 'NMAXSEND' )
# idxMacchina = config.get ( 'id' , 'idxMacchina' )
URLBASE = config.get ( 'web' , 'URLBASE' )
URLADV1 = config.get ( 'web' , 'URLADV1' )
LOGFILE = config.get ( 'log' , 'LOGFILE' )
LOGLEVEL = config.get ( 'log' , 'LOGLEVEL' )
except:
print "\n\n" + PROGRAM_NAME + ' - Error 4 - in config file ' 'IOB.cfg'
sys.exit(1)
#---------------------------------------------------------------
dtCurr = datetime.utcnow().strftime('%H:%M:%S.%f')[:-3]
print "Inizio elaborazione: %s" % dtCurr
# Leggo il file!
i = 0
with open(args.memFile, 'r') as inf, open(args.logFile,"w") as outf:
data = inf.readlines()
print "Trovate %d da processare..." % len(data)
# leggo e metto in QUEUE...
for line in data:
accoda(line)
i += 1
if (i % stepQueuePut) == 0:
print "Accodati %d valori..." % i
print "Completata lettura file! %d righe accodate da trasmettere" % Coda.qsize()
dtCurr = datetime.utcnow().strftime('%H:%M:%S.%f')[:-3]
print "Inizio invio: %s" % dtCurr
# chiamo procedura x svuotare coda...
svuota_coda()
dtCurr = datetime.utcnow().strftime('%H:%M:%S.%f')[:-3]
print "Completato invio: %s" % dtCurr
@@ -0,0 +1,719 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
# readParallela v. 2.4.8
# - single instance timer
# - invio multiplo x send eventi accodati
# - gestione segnali BLINKING
# - gestione INVERSIONE segnali cv 10-VII-2018
# - gestione FILTRAGGIO segnali brevi cv 23-VII-2018
# - (2.3) gestione 12 bit cv 14-I-2020
# - (2.4) fix ingressi e conf apertura parallela + gestione vari bit filtraggio x nuovi ingressi + update conf con 12 parametri bit SEL 15-I-2020
# - (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)
#---------------------------------------------------------------
# levare locking
# timer semplificata
# GPIO global
import time
import sys
from datetime import datetime
import urllib
import ConfigParser
import os, sys
import logging
import logging.handlers
import threading
import Queue
from array import *
#--------------------------------------------------------------
# COSTANTI
MSGLEN = 9
TIMEOUTSERIALE = 10
MAXRETRY = 10
# numero campioni filtraggio segnale ballerino
MAX_COUNTER_BLINK = 10
PROGRAM_NAME ="ReadPar IOB-pi v.2.5.0"
# DA FILE CONF
idxMacchina = "1001"
SAMPLETIME = 0.1
TIMEOUTSHORT = (SAMPLETIME*20)
TIMEOUTLONG = (SAMPLETIME*600)
SENDURLTIME = 0.08
NMAXSEND = 5 # numero massimo di invii per singolo ciclo di svuotamento
# VAR
to_enable = False
to_short = TIMEOUTSHORT
to_long = TIMEOUTLONG
to_serial = TIMEOUTSERIALE
to_retry = MAXRETRY
errormsglen = 0
# VAR
out_0 = 24
out_1 = 26
in_0 = 11
in_1 = 12
in_2 = 13
in_3 = 15
in_4 = 16
in_5 = 18
in_6 = 22
in_7 = 7
# contatore: serve x match tra accoda ed invia x possibile controllo a posteriori... ogni volta che accodo incremento di 1, va da 0 a 9999
cont = '0'
# variabile stato online/offline della macchina
onLine = '1'
# variabile stato seinding/waiting x la parte invio URL
sending = '0'
# variabile stato timer thread busy
timer_busy = False
#
# array per ingressi filtrati
i_counters = array ( 'i',[0,0,0,0,0,0,0,0])
B_blinking = array ( 'B',[0,0,0,0,0,0,0,0])
B_previous = array ( 'B',[0,0,0,0,0,0,0,0])
B_input = array ( 'B',[0,0,0,0,0,0,0,0])
B_output = array ( 'B',[0,0,0,0,0,0,0,0])
B_inverting = array ( 'B',[0,0,0,0,0,0,0,0])
B_filter = array ( 'B',[0,0,0,0,0,0,0,0])
B_filter_prev = array ( 'B',[0,0,0,0,0,0,0,0])
B_temp = array ( 'B',[0,0,0,0,0,0,0,0])
i_filter_counters = array ( 'i',[0,0,0,0,0,0,0,0])
#--------------------------------------------------------------
# Gestione coda (condivisa) x registrazione eventi ed invio URL
#print "Creazione coda illimitata"
Coda = Queue.Queue(0)
#queueLock = threading.Lock()
#---------------------------------------------------------------
# lettura parallela
# ritorna il byte letto pulito ( due char hex )
def readParallelaFiltrata():
global in_0
global in_1
global in_2
global in_3
global in_4
global in_5
global in_6
global in_7
global GPIO
current = ''
try:
if GPIO.input(in_0):
B_input[0] = 0
else:
B_input[0] = 1
if GPIO.input(in_1):
B_input[1] = 0
else:
B_input[1] = 1
if GPIO.input(in_2):
B_input[2] = 0
else:
B_input[2] = 1
if GPIO.input(in_3):
B_input[3] = 0
else:
B_input[3] = 1
if GPIO.input(in_4):
B_input[4] = 0
else:
B_input[4] = 1
if GPIO.input(in_5):
B_input[5] = 0
else:
B_input[5] = 1
if GPIO.input(in_6):
B_input[6] = 0
else:
B_input[6] = 1
if GPIO.input(in_7):
B_input[7] = 0
else:
B_input[7] = 1
#ciclo per ogni segnale
for i in xrange(8) :
# print (i)
# v2.1 gestione inversione bit ingresso
if ( B_inverting[i] == 1 ) :
if ( B_input[i] == 0 ) :
B_input[i] = 1
else :
B_input[i] = 0
# v2.2 gestione filtro segnali brevi
if ( B_filter[i] == 1 ) :
# fronte 0 -> 1
if ( B_input[i] == 1 ) and ( B_filter_prev [i] == 0 ) :
if ( i_filter_counters[i] == 0 ) :
# vero fronte 0 -> 1
i_filter_counters[i] = MAX_COUNTER_FILTER
B_temp[i] = 0 # tengo l' ingresso a 0
#logPro.info("START spike 0->1 on bit " + `i` )
else :
# fine disturbo breve di uno stato 1
i_filter_counters[i] = 0
B_temp[i] = 1 # tengo l' ingresso a 1
logPro.info("END spike 0->1 on bit " + `i` )
# stabile 1 -> 1
if ( B_input[i] == 1 ) and ( B_filter_prev [i] == 1 ) :
if ( i_filter_counters[i] == 0 ) :
# segnale stabile a 1
B_temp[i] = 1 # tengo l' ingresso a 1
else :
# poco dopo il fronte
i_filter_counters[i] = i_filter_counters[i] - 1
B_temp[i] = 0 # tengo l' ingresso a 0
# fronte 1 -> 0
if ( B_input[i] == 0 ) and ( B_filter_prev [i] == 1 ) :
if ( i_filter_counters[i] == 0 ) :
# vero fronte 1 -> 0
i_filter_counters[i] = MAX_COUNTER_FILTER
B_temp[i] = 1 # tengo l' ingresso a 1
#logPro.info("START spike 1->0 on bit " + `i` )
else :
# fine disturbo breve di uno stato 0
i_filter_counters[i] = 0
B_temp[i] = 0 # tengo l' ingresso a 0
logPro.info("END spike 1->0 on bit " + `i` )
# stabile 0 -> 0
if ( B_input[i] == 0 ) and ( B_filter_prev [i] == 0 ) :
if ( i_filter_counters[i] == 0 ) :
# segnale stabile a 0
B_temp[i] = 0 # tengo l' ingresso a 0
else :
# poco dopo il fronte
i_filter_counters[i] = i_filter_counters[i] - 1
B_temp[i] = 1 # tengo l' ingresso a 1
B_filter_prev [i] = B_input[i]
B_input[i] = B_temp[i]
# fine gestione filtro segnali brevi
# se non blinking, copia ingresso
if ( B_blinking[i] == 0 ) :
B_output[i] = B_input[i]
else:
# gestione segnale blinking
# se fronte del segnale
if ( B_previous[i] != B_input[i] ) :
B_previous[i] = B_input[i]
# se fronte di salita
if ( B_input[i] == 1 ) :
# subito uscita = 1
B_output[i] = 1
i_counters[i] = MAX_COUNTER_BLINK
#else :
# # loggo che ho rilevato un blink...
# logPro.info("Blink down on bit " + `i`)
else:
# no , segnale eguale a prima
# se input a 0
if ( B_input[i] == 0 ) :
# E CONTEGGIO IN CORSO
if ( i_counters[i] > 0 ) :
i_counters[i] = i_counters[i] -1
if ( i_counters[i] == 0 ) :
B_output[i] = 0
logPro.info("END Blink on bit " + `i` )
#Rimettiamo insieme i bit
new_value = 0
if ( B_output[0] == 1 ) :
new_value = new_value + 1
if ( B_output[1] == 1 ) :
new_value = new_value + 2
if ( B_output[2] == 1 ) :
new_value = new_value + 4
if ( B_output[3] == 1 ) :
new_value = new_value + 8
if ( B_output[4] == 1 ) :
new_value = new_value + 16
if ( B_output[5] == 1 ) :
new_value = new_value + 32
if ( B_output[6] == 1 ) :
new_value = new_value + 64
if ( B_output[7] == 1 ) :
new_value = new_value + 128
current = hex( new_value ).replace ( "0x" , "" ).upper()
except:
pass
return current
#---------------------------------------------------------------
#Funzione di scrittura su coda con try-except
def accoda():
try:
dtEve = datetime.utcnow().strftime('%Y%m%d%H%M%S%f')[:-3]
Coda.put(dtEve + '#' + value + '#' + cont)
except Queue.Full:
logPro.error( "Queue full" + `dtEve` + '#' + `value` + '#' + `cont` )
except:
logPro.error( "NETWORK:Errore http-no com rete-timeout" + url )
# print "Url aforte" , url
#--------------------------------------------------------------
# svuotaCoda x invio dati al server
def svuota_coda():
global onLine
global sending
global timer_busy
global NMAXSEND
#print "start timer "
if ( timer_busy == False ):
timer_busy = True
#print "start timer ok "
try:
if not Coda.empty():
#print "coda da svuotare!"
response = urllib.urlopen(URLALIVE)
answ = response.read()
if answ == 'OK':
#print "OK alive"
response2 = urllib.urlopen(URLENABLED + idxMacchina)
answ2 = response2.read()
if answ2 == 'OK':
# aggiorno stato ad online
if onLine == '0':
logPro.info("IOB ONLINE!")
#print("IOB ONLINE")
onLine = '1' # imposto comunque online
else:
if onLine == '1':
logPro.error("IOB offline")
#print("IOB offline")
onLine = '0'
else:
if onLine == '1':
logPro.error("Server offline")
#print("Server offline")
onLine = '0'
# ora verifico SE si possa inviare (ovvero sia online server e NON ci siano altri send attivi...)
if onLine == '1':
if sending == '0':
#segnalo che sono in sending!
sending = '1'
# SAM 2016.12.23: modifica x invio FINO A nMaxSend ELEMENTI ad ogni ciclo di svuotamento
i = NMAXSEND
while i >= 0:
if not Coda.empty():
# formatto dataOra corrente
dtCurr = datetime.utcnow().strftime('%Y%m%d%H%M%S%f')[:-3]
#prendo primo elemento dalla coda
resp = Coda.get()
# recupero valori da elemento coda!
dtEve = resp.split("#")[0]
value = resp.split("#")[1]
cnt = resp.split("#")[2]
url = URLBASE + idxMacchina + URLADV1 + value
url = url + '&dtCurr=' + dtCurr + '&dtEve=' + dtEve + '&cnt=' + cnt
# CHIAMO URL
response3 = urllib.urlopen ( url )
answ3 = response3.read()
#print(url)
# log valore inviato!
logSnd.info( value + ' ['+ cnt +']' + ' R:' + answ3 )
#print "Valore smaltito dalla coda"
# tolgo 1 al contatore
i -= 1
# completato invio, riporto sending a zero!
sending = '0'
else:
if to_retry > 0:
to_retry -= 1
logPro.info("WAIT active send to complete")
else:
sending = '0'
to_retry = MAXRETRY
logPro.info("END WAIT, reset to_retry var")
else:
pass
else:
pass
except:
if onLine == '1':
logPro.error("Server Non raggiungibile")
#print "Non raggiungibile"
onLine = '0'
# in ogni caso
timer_busy = False
#print "end timer ok"
#print "end timer "
#---------------------------------------------------------------
# funzione timer thread
#---------------------------------------------------------------
def do_every (interval, worker_func, iterations = 0):
if iterations != 1:
threading.Timer (
interval,
do_every, [interval, worker_func, 0 if iterations == 0 else iterations-1]
).start ();
worker_func ();
#---------------------------------------------------------------
# gestione contatore
#---------------------------------------------------------------
def contatore():
try:
global cont
ctr = int(cont)
ctr +=1
ctr = ctr % 10000 # round robin 10000 eventi x track
cont = str(ctr)
except:
print("errore incremento contatore")
#---------------------------------------------------------------
# avvia porta parallela
#---------------------------------------------------------------
def avviaParallela():
global in_0
global in_1
global in_2
global in_3
global in_4
global in_5
global in_6
global in_7
global GPIO
try:
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
#GPIO.setup(out_0, GPIO.OUT) # output 0
#GPIO.setup(out_1, GPIO.OUT) # output 1
GPIO.setup(in_0, GPIO.IN) # input 0
GPIO.setup(in_1, GPIO.IN) # input 1
GPIO.setup(in_2, GPIO.IN) # input 2
GPIO.setup(in_3, GPIO.IN) # input 3
GPIO.setup(in_4, GPIO.IN) # input 4
GPIO.setup(in_5, GPIO.IN) # input 5
GPIO.setup(in_6, GPIO.IN) # input 6
GPIO.setup(in_7, GPIO.IN) # input 7
except:
print( "\n\n" + PROGRAM_NAME + " - Error 3 on RPi.GPIO ! \n\n")
sys.exit(1)
print( "\n\n" + PROGRAM_NAME + " - init ok \n\n")
#---------------------------------------------------------------
#---------------------------------------------------------------
# MAIN
try:
config = ConfigParser.RawConfigParser()
config.read ( 'IOB.cfg' )
SAMPLETIME = config.getfloat ( 'time' , 'SAMPLETIME' )
TIMEOUTSHORT = config.getfloat ( 'time' , 'TIMEOUTSHORT' )
TIMEOUTLONG = config.getfloat ( 'time' , 'TIMEOUTLONG' )
SENDURLTIME = config.getfloat ( 'time' , 'SENDURLTIME' )
NMAXSEND = config.getint ( 'time' , 'NMAXSEND' )
idxMacchina = config.get ( 'id' , 'idxMacchina' )
URLBASE = config.get ( 'web' , 'URLBASE' )
URLENABLED = config.get('web' , 'URLENABLED')
URLALIVE = config.get ('web' , 'URLALIVE')
URLADV1 = config.get ( 'web' , 'URLADV1' )
LOGFILE = config.get ( 'log' , 'LOGFILE' )
LOGLEVEL = config.get ( 'log' , 'LOGLEVEL' )
B_blinking[0] = config.getint ( 'blink' , 'bit0' )
B_blinking[1] = config.getint ( 'blink' , 'bit1' )
B_blinking[2] = config.getint ( 'blink' , 'bit2' )
B_blinking[3] = config.getint ( 'blink' , 'bit3' )
B_blinking[4] = config.getint ( 'blink' , 'bit4' )
B_blinking[5] = config.getint ( 'blink' , 'bit5' )
B_blinking[6] = config.getint ( 'blink' , 'bit6' )
B_blinking[7] = config.getint ( 'blink' , 'bit7' )
MAX_COUNTER_BLINK = config.getint ( 'blink' , 'MAX_COUNTER_BLINK' )
# cv 2.1 se bit = 1 allora inverto segnale in ingresso...
B_inverting[0] = config.getint ( 'invert' , 'bit0' )
B_inverting[1] = config.getint ( 'invert' , 'bit1' )
B_inverting[2] = config.getint ( 'invert' , 'bit2' )
B_inverting[3] = config.getint ( 'invert' , 'bit3' )
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' )
# cv 2.2 se bit = 1 allora filtro segnali brevi ...
B_filter[0] = config.getint ( 'filter' , 'bit0' )
B_filter[1] = config.getint ( 'filter' , 'bit1' )
B_filter[2] = config.getint ( 'filter' , 'bit2' )
B_filter[3] = config.getint ( 'filter' , 'bit3' )
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' )
MAX_COUNTER_FILTER = config.getint ( 'filter' , 'MAX_COUNTER_FILTER' )
except:
print "\n\n" + PROGRAM_NAME + ' - Error 4 - in config file ' 'IOB.cfg'
sys.exit(1)
#--------------------------------------------
# oggetto Logger
#--------------------------------------------
try:
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'
)
# aggiungo 2 logger specifici x queue e send...
logQue = logging.getLogger('queue')
logSnd = logging.getLogger('sendUrl')
logPro = logging.getLogger('program')
except:
# manda mail o simili - FARE!!!
print "LOG: Impossibile creare file log con nome "
print (LOGFILE)
#--------------------------------------------
print "\n\n" + PROGRAM_NAME + "\n\n"
global startstatus
startstatus = 1
if startstatus == 1:
logPro.info("Avvio Programma" + PROGRAM_NAME)
## Verifica l'OS e di conseguenza carica il file relativo con metodo di lockfile appropriato + check singola istanza
if os.name == 'posix':
import unix
else:
import win
logPro.info( "Start " + PROGRAM_NAME )
# lettura file configurazione
# [id]
# idxMacchina = 2001
# [time]
# SAMPLETIME = 0.1
# TIMEOUTSHORT = 200
# TIMEOUTLONG = 6000
print ( ' idxMacchina = %s' % ( idxMacchina ) )
print ( ' SAMPLETIME = %4.2f' % ( SAMPLETIME ) )
print ( ' TIMEOUTSHORT = %4.2f' % ( TIMEOUTSHORT ) )
print ( ' TIMEOUTLONG = %4.2f' % ( TIMEOUTLONG ) )
print ( ' SENDURLTIME = %4.2f' % ( SENDURLTIME ) )
print ( ' URLBASE = %s' % ( URLBASE ) )
print ( ' URLADV1 = %s' % ( URLADV1 ) )
print ( ' LOGFILE = %s' % ( LOGFILE ) )
print ( ' LOGLEVEL = %s' % ( LOGLEVEL ) )
# -sys.stdout.write ( 'idxMacchina ?' + idxMacchina + '\n')
to_short = TIMEOUTSHORT
to_long = TIMEOUTLONG
#--------------------------------------------------------------
# apertura parallela
try:
import RPi.GPIO as GPIO
except RuntimeError:
print( "\n\n" + PROGRAM_NAME + " - Error 1 - you need superuser privileges")
except:
print( "\n\n" + PROGRAM_NAME + " - Error 2 - you need superuser privileges. USE 'sudo' to run your script\n\n")
sys.exit(1)
avviaParallela()
#--------------------------------------------------------------
# MARCO: qui inserire avvio thread di "svuotaCoda"
# avviaSvuotaCoda
#print "Avvia svuota coda"
do_every ( SENDURLTIME , svuota_coda );
#---------------------------------------------------------------
# ciclo forever and ever
old = ''
#print "Avvio ciclo"
logPro.info("Avvio loop principale")
while 1:
try:
time.sleep (SAMPLETIME)
except:
logPro.info("First_SLEEP: errore attesa sampletime")
# lettura dati da IOB
value = readParallelaFiltrata()
if ( value != '' ) :
if value != old :
#loggo e invio dati
try:
logQue.info( value + ' ['+ cont +']')
errormsglen = 0
accoda()
contatore()
except:
logPro.error("URLBROWSER: errore registrazione valore e accoda")
pass
#enable e reset timer
to_enable = True
to_short = TIMEOUTSHORT
to_long = TIMEOUTLONG
old = value
# gestione timeout breve
if ( to_enable ) :
to_short = to_short - SAMPLETIME
if to_short <= 0:
#loggo e invio dati
try:
logQue.info( '>' + value + ' ['+ cont +']')
errormsglen = 0
accoda()
contatore()
except:
logPro.error("URLBROWSER: errore registrazione valore e accoda TO_short")
pass
to_short = TIMEOUTSHORT
to_enable = False # dopo un colpo il timer breve viene disabilitato
to_long = TIMEOUTLONG
# gestione timeout lungo
to_long = to_long - SAMPLETIME
if to_long <= 0:
#loggo e invio dati
try:
logQue.info( '>>' + value + ' ['+ cont +']')
errormsglen = 0
accoda()
contatore()
except:
logPro.error("URLBROWSER: errore registrazione valore e accoda TO_long")
pass
to_long = TIMEOUTLONG
@@ -0,0 +1,363 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
#---------------------------------------------------------------
import serial
import time
import sys
import datetime
import urllib
import ConfigParser
import os, sys
#---------------------------------------------------------------
# COSTANTI
MSGLEN = 9
TIMEOUTSERIALE = 10
MAXRETRY = 3
# DA FILE CONF
idxMacchina = "2001"
SAMPLETIME = 0.1
TIMEOUTSHORT = (SAMPLETIME*20)
TIMEOUTLONG = (SAMPLETIME*600)
# VAR
to_enable = False
to_short = TIMEOUTSHORT
to_long = TIMEOUTLONG
to_serial = TIMEOUTSERIALE
to_retry = MAXRETRY
errormsglen = 0
#---------------------------------------------------------------
# classe logger
class Logger:
def __init__(self, filename):
try:
self.filename = filename
except:
logga("LOGGER: errore try su self.filename")
sys.exit(1)
def __call__(self, string):
try:
file = open(self.filename, 'a')
file.write('[' + time.strftime("%Y-%m-%d %H:%M:%S") + '] ')
file.write(string + '\n')
file.close()
except:
logga("LOGGER: errore try su scrittura")
sys.exit(1)
#---------------------------------------------------------------
# lettura buffer seriale e pulizia caratteri non stampabili
# ritorna '' se non c'è un messaggio buono o il messaggio pulito ( due bytes hex )
# il messaggio ha il formato xx<ACK>i00 00<CR><LF>xxx
def readSeriale():
global to_serial
global to_retry
global errormsglen
ret = ''
current = ''
i = 0
# ritorna '' se non ci sono abbastanza caratteri
try:
if ser.inWaiting() < MSGLEN :
#
# to_serial = to_serial - 1 # se non mi risponde, faccio un ' altra richiesta....
# if to_serial <= 0:
# try:
# requestData ()
# except:
# logga("SERIALE: errore su requestData")
# sys.exit(1)
# to_serial = TIMEOUTSERIALE # ripristino timer
# to_retry = to_retry - 1 # contatore retry
# if to_retry <= 0:
# logga ( 'IOB not responding' )
# return ret
logga("SERIALE: errore msglen < 9 char - Errore no. " + str(errormsglen))
errormsglen = errormsglen +1
avviaSeriale()
time.sleep(.2)
if errormsglen > 30:
sys.exit(1)
except:
if startstatus == 0:
logga ("Porta SERIALE non disponibile - ser.inWaiting error - exit... - Errore no. " + str(errormsglen))
errormsglen = errormsglen +1
avviaSeriale()
time.sleep(.2)
if errormsglen > 30:
sys.exit(1)
# finchè c'è robba .. leggi e tieni i buoni
to_serial = TIMEOUTSERIALE
to_retry = MAXRETRY
try:
while ser.inWaiting() > 0 :
try:
c = ser.read(1)
except:
logga("SERIALE: errore su try ser.read")
sys.exit(1)
# filtra caratteri non stampabili
if c > ' ' :
current += c
#sys.stdout.write(current + '<<<<\n')
# ora il messaggio ha il formato xxxxxi00 00xxx : cerco la 'i' iniziale
try:
while i < len(current) and current[i] != 'i':
i = i + 1
except:
logga("SERIALE: errore su ricerca i iniziale")
sys.exit(1)
# se non ho trovato la 'i' restituisco ''
if i == len(current)-1:
return ret
else:
current = current[i+1:i+3]
# richiesta dati ad IOB
requestData()
#sys.stdout.write ( current + '\n')
except:
if startstatus == 0:
logga ('Porta SERIALE non disponibile - ser.inWaiting e filtraggio error...exit')
sys.exit(1)
return current
#---------------------------------------------------------------
# richiesta dati ad IOB : scrittura su seriale
def requestData ():
try :
ser.write ("$i" + '\r\n')
ser.flush()
except :
if startstatus == 0:
logga ( "SERIAL: Errore di scrittura/flush")
#---------------------------------------------------------------
#Funzione di scrittura su url con try-except
def chiamaUrl():
try:
url = URLBASE + idxMacchina + URLADV1 + value
urllib.urlopen ( url )
except:
logga ( "NETWORK:Errore http-no com rete-timeout" + url )
#---------------------------------------------------------------
# Funzione che verifica possibilità di creare log e include testo corrente
def logga(message) :
try:
log(message)
except :
pass
#---------------------------------------------------------------
def avviaSeriale():
global ser
try:
ser = serial.Serial(
port = comm_port ,
baudrate = 9600 ,
parity = serial.PARITY_NONE ,
stopbits = serial.STOPBITS_ONE ,
bytesize = serial.EIGHTBITS
)
startstatus = 0
except serial.serialutil.SerialException , e :
try:
if startstatus == 0:
logga ( "SERIAL:Errore apertura seriale - " + comm_port)
except:
pass
sys.stdout.write ( '\nErrore apertura seriale\n\n%s\n\n' % e )
if errormsglen > 30:
sys.exit (1)
#---------------------------------------------------------------
#---------------------------------------------------------------
# MAIN
try:
config = ConfigParser.RawConfigParser()
config.read ( 'readSeriale.cfg' )
SAMPLETIME = config.getfloat ( 'time' , 'SAMPLETIME' )
TIMEOUTSHORT = config.getfloat ( 'time' , 'TIMEOUTSHORT' )
TIMEOUTLONG = config.getfloat ( 'time' , 'TIMEOUTLONG' )
idxMacchina = config.get ( 'id' , 'idxMacchina' )
comm_port = config.get ( 'comm' , 'port' )
URLBASE = config.get ( 'web' , 'URLBASE' )
URLADV1 = config.get ( 'web' , 'URLADV1' )
LOGFILE = config.get ( 'log' , 'LOGFILE' )
LOGLEVEL = config.get ( 'log' , 'LOGLEVEL' )
except:
sys.exit(1)
# oggetto Logger
try:
log = Logger(LOGFILE)
except:
# manda mail o simili - FARE!!!
print "LOG: Impossibile creare file log con nome "
print (LOGFILE)
print '\n\n Read seriale IOB v.0.2 !!!!\n'
global startstatus
startstatus = 1
if startstatus == 1:
logga("Avvio Programma")
# Verifica l'OS e di conseguenza carica il file relativo con metodo di lockfile appropriato + check singola istanza
if os.name == 'posix':
import unix
else:
import win
logga ( "Start Read seriale IOB v.0.2")
# lettura file configurazione
# [comm]
# port = /dev/ttyS0
# [id]
# idxMacchina = 2001
# [time]
# SAMPLETIME = 0.1
# TIMEOUTSHORT = 200
# TIMEOUTLONG = 6000
print ( ' comm_port = %s' % ( comm_port ) )
print ( ' idxMacchina = %s' % ( idxMacchina ) )
print ( ' SAMPLETIME = %4.2f' % ( SAMPLETIME ) )
print ( ' TIMEOUTSHORT = %4.2f' % ( TIMEOUTSHORT ) )
print ( ' TIMEOUTLONG = %4.2f' % ( TIMEOUTLONG ) )
print ( ' URLBASE = %s' % ( URLBASE ) )
print ( ' URLADV1 = %s' % ( URLADV1 ) )
print ( ' LOGFILE = %s' % ( LOGFILE ) )
print ( ' LOGLEVEL = %s' % ( LOGLEVEL ) )
# -sys.stdout.write ( 'idxMacchina ?' + idxMacchina + '\n')
to_short = TIMEOUTSHORT
to_long = TIMEOUTLONG
#--------------------------------------------------------------
#---------------------------------------------------------------
# apertura seriale
avviaSeriale()
#try:
# ser = serial.Serial(
# port = comm_port ,
# baudrate = 9600 ,
# parity = serial.PARITY_NONE ,
# stopbits = serial.STOPBITS_ONE ,
# bytesize = serial.EIGHTBITS
# )
# print "Initialized!"
#except serial.serialutil.SerialException , e :
# try:
# logga ( "SERIAL:Errore apertura seriale - " + comm_port)
# except:
# pass
# sys.stdout.write ( '\nErrore apertura seriale\n\n%s\n\n' % e )
# sys.exit (1)
#---------------------------------------------------------------
# ciclo forever and ever
old = ''
# richiesta dati ad IOB
try:
requestData()
except:
logga("SERIALE: errore sul try di requestData")
sys.exit(1)
while 1:
try:
time.sleep (SAMPLETIME)
except:
logga("SERIALE_SLEEP: errore attesa sampletime")
# lettura dati da IOB
try:
value = readSeriale()
except:
if startstatus == 0:
logga("errore PRIMA LETTURA SERIALE")
sys.exit(1)
if ( value != '' ) :
if value != old :
#loggo e invio dati
try:
logga ( value )
errormsglen = 0
chiamaUrl()
except:
logga("URLBROWSER: errore registrazione valore e chiamaUrl")
pass
#enable e reset timer
to_enable = True
to_short = TIMEOUTSHORT
to_long = TIMEOUTLONG
old = value
# gestione timeout breve
if ( to_enable ) :
to_short = to_short - SAMPLETIME
if to_short <= 0:
#loggo e invio dati
try:
logga ( '>' + value )
errormsglen = 0
chiamaUrl()
except:
pass
to_short = TIMEOUTSHORT
to_enable = False # dopo un colpo il timer breve viene disabilitato
to_long = TIMEOUTLONG
# gestione timeout lungo
to_long = to_long - SAMPLETIME
if to_long <= 0:
#loggo e invio dati
try:
logga ( '>>' + value )
errormsglen = 0
chiamaUrl()
except:
pass
to_long = TIMEOUTLONG
@@ -0,0 +1,17 @@
#!/bin/bash
#salva la temperatura CPU e GPU su chiamata...
# imposto logfile...
logFile="/var/log/logTemp.txt"
cpuTemp0=$(cat /sys/class/thermal/thermal_zone0/temp)
cpuTemp1=$(($cpuTemp0/1000))
cpuTemp2=$(($cpuTemp0/100))
cpuTempM=$(($cpuTemp2 % $cpuTemp1))
gpuTemp=`vcgencmd measure_temp`
loadAvg=`cat /proc/loadavg`
echo "$(date) | CPU: temp=$cpuTemp1.$cpuTempM ºC | GPU: $gpuTemp | LoadAvg: $loadAvg" >> $logFile
@@ -0,0 +1,130 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
# sendReboot v. 1.8
#---------------------------------------------------------------
import time
import sys
from datetime import datetime
import urllib
import ConfigParser
import os, sys
import logging
import time
#---------------------------------------------------------------
# COSTANTI
PROGRAM_NAME = "SendReboot IOB-pi v.1.8"
# DA FILE CONF
idxMacchina = "99"
# registro se ho fatto chiamata
global numTry
numTry = 1
#---------------------------------------------------------------
#Funzione di scrittura su url con try-except
#---------------------------------------------------------------
def chiamaUrl(numTry):
try:
urllib.urlopen ( url )
numTry = numTry + 10
except Exception, e:
print e
logging.info ( e )
print "Url aforte" , 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]
#---------------------------------------------------------------
# MAIN
#---------------------------------------------------------------
try:
config = ConfigParser.RawConfigParser()
config.read ( 'IOB.cfg' )
idxMacchina = config.get ( 'id' , 'idxMacchina' )
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)
#--------------------------------------------
# oggetto Logger
#--------------------------------------------
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')
except:
# manda mail o simili - FARE!!!
print "LOG: Impossibile creare file log con nome "
print (LOGFILE)
#--------------------------------------------
print "\n\n" + PROGRAM_NAME + "\n\n"
global startstatus
startstatus = 1
if startstatus == 1:
logging.info("Avvio Programma " + PROGRAM_NAME)
# lettura file configurazione
print ( ' idxMacchina = %s' % ( idxMacchina ) )
print ( ' URLREBO = %s' % ( URLREBO ) )
print ( ' LOGFILE = %s' % ( LOGFILE ) )
# lettura mac address
myMac = getMAC('eth0')
print ( ' MAC Address = %s' % ( myMac ) )
# configuro URL da inviare
url = URLREBO + idxMacchina + "&mac=" + myMac
# modifica: cerco se ho inviato segnale altrimenti ritento invio...
while (numTry < 11):
logging.info("Tentativo invio URL: " + `numTry` )
numTry = chiamaUrl(numTry)
time.sleep(3)
numTry = numTry + 1
# registro che ho inviato!
logging.info("Inviato segnale di reboot!: " + url )
@@ -0,0 +1,33 @@
#!/bin/sh -
#
### BEGIN INIT INFO
# Provides: sendReboot
# Required-Start: $network $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Steamware's IOB reboot signal
# Description: Steamware's sendReboot segnalazione reboot dispositivo
### END INIT INFO
#! /bin/sh
# /etc/init.d/sendReboot
export HOME
case "$1" in
start)
cd /home/pi/steamware
echo "Starting sendReboot"
/usr/bin/python ./sendReboot.py 2>&1 &
echo "Verifica Rete e file IOB"
/usr/local/bin/setIobConf.sh
;;
*)
echo "Usage: /etc/init.d/sendReboot {start}"
exit 1
;;
esac
exit 0
@@ -0,0 +1,22 @@
[Unit]
SourcePath=/etc/init.d/sendRebootIOB
Description=LSB: Steamware's IOB reboot signal
Before=runlevel2.target runlevel3.target runlevel4.target runlevel5.target shutdown.target
Wants=network-online.target
After=network.target network-online.target auditd.service
Conflicts=shutdown.target
[Service]
Type=forking
Restart=no
TimeoutSec=5min
IgnoreSIGPIPE=no
KillMode=process
GuessMainPID=no
RemainAfterExit=yes
SysVStartPriority=2
ExecStart=/etc/init.d/sendRebootIOB start
ExecStop=/etc/init.d/sendRebootIOB stop
[Install]
WantedBy=multi-user.target
@@ -0,0 +1,26 @@
#!/bin/bash
# verifico se sia rete donati o rete steamware o offline...
netStatus=`cat /sys/class/net/eth0/operstate`
iaddr=`ifconfig eth0 | grep "inet addr" | cut -d ':' -f 2 | cut -d ' ' -f 1`
cd /home/pi/steamware
if [[ $netStatus != "up" ]]
then
echo "Siamo Offline, pagina demo!"
elif [[ $iaddr == "10.74.82"* ]]
then
cp IOB.cfg.steamware IOB.cfg -f
echo "Siamo in Steamware!"
elif [[ $iaddr == "192.168.51"* ]]
then
cp IOB.cfg.donati IOB.cfg -f
echo "Siamo a Passirano!"
else
echo "Siamo altrove, pagina demo!"
fi
echo "$iaddr"
chown pi:pi *
+31
View File
@@ -0,0 +1,31 @@
import fcntl
import os
import logging
#---------------------------------------------------------------
# meccanismo di file lock per evitare multiple instances
# The function will try to lock the file specified , if it success, return True, else return False.
# The nice thing is that the lock will be dropped when the program terminates.
# >>>Use :
# if not lockFile(".lock.pod"):
# sys.exit(0)
def lockFile ( lockfile ) :
fd = os.open ( lockfile , os.O_CREAT | os.O_TRUNC | os.O_WRONLY )
try:
# Request exclusive (EX) non-blocking (NB) advisory lock.
fcntl.lockf ( fd , fcntl.LOCK_EX | fcntl.LOCK_NB )
except IOError:
return False
return True
if not lockFile ( ".lockfile" ) :
print '\n noi non siamo soli ...\n'
logging.error( "LOCK: Piu istanze aperte")
#sys.exit ( 0 )
#- print '\n running alone ...\n'
Binary file not shown.
@@ -0,0 +1,54 @@
#|/bin/bash
#installa il necessario per RPI-3-IOB partendo dal contenuto della folder /home/pi/steamware
#step 1: creo file di log nuovi
rm /var/log/log*.txt
rm /var/log/MapoIOB*
rm /home/pi/steamware/log*.txt
touch /var/log/logReboot.txt
touch /var/log/logTemp.txt
touch /var/log/MapoIOB.log
ln -sf /var/log/logReboot.txt /home/pi/steamware/logReboot.txt
ln -sf /var/log/logTemp.txt /home/pi/steamware/logTemp.txt
ln -sf /var/log/MapoIOB.log /home/pi/steamware/logfile.txt
chown pi:pi /home/pi -R
chmod 666 /var/log/log*.txt
chmod 666 /var/log/MapoIOB.log
#step 2: copio files in /usr/local/bin
cd /home/pi/steamware
chmod +x *.sh
cp *.sh /usr/local/bin/
#step 3: copio files x logrotate...
cd /home/pi/steamware
cp MapoIOB_logrot /etc/logrotate.d/
# step 4: copio target systemd in avvio...
cp -f sendRebootIOB /etc/init.d/sendRebootIOB
cp -f sendRebootIOB.service /etc/systemd/system/sendRebootIOB.service
#echo ""
#echo "-----------------------------------------------"
#echo "Completare registrazione servizio avvio: digitare i seguenti comandi"
#echo "systemctl enable sendRebootIOB"
#echo "systemctl daemon-reload"
#echo "systemctl status sendRebootIOB"
#echo "-----------------------------------------------"
#echo ""
# step 5: copio target MapoIOB in avvio...
cp -f MapoIOB /etc/init.d/MapoIOB
cp -f MapoIOB.service /etc/systemd/system/MapoIOB.service
#echo ""
#echo ""
#echo "-----------------------------------------------"
#echo "Infine creare voce crontab che salvi temperatura CPU/GPU ogni 20 minuti..."
#echo "crontab -e"
#echo "*/20 * * * * /usr/local/bin/saveTemp.sh"
#echo "-----------------------------------------------"
+32
View File
@@ -0,0 +1,32 @@
import win32api
print " Running on WINDOWS\n"
import os
#---------------------------------------------------------------
# meccanismo di file lock per evitare multiple instances
# The function will try to lock the file specified , if it success, return True, else return False.
# The nice thing is that the lock will be dropped when the program terminates.
# >>>Use :
# if not lockFile(".lock.pod"):
# sys.exit(0)
def lockFile ( lockfile ) :
try:
fd = os.open ( lockfile , os.O_CREAT | os.O_TRUNC | os.O_WRONLY )
except:
logga("Errore nel file WIN.PY per FD")
try:
# Request exclusive (EX) non-blocking (NB) advisory lock.
#fcntl.lockf ( fd , fcntl.LOCK_EX | fcntl.LOCK_NB )
print " Dummy Method! Completa Lockfile\n"
except IOError:
return False
return True
try:
if not lockFile ( ".lockfile" ) :
print '\n noi non siamo soli ...\n'
logga ( "LOCK: Piu istanze aperte")
sys.exit ( 0 )
except:
logga("if not lockfile NON RIUSCITO in file WIN.PY")
sys.exit(1)
+56
View File
@@ -0,0 +1,56 @@
[id]
idxMacchina = 0001
[web]
URLBASE = http://10.74.82.218/MP/IO/IOB/input/
URLALIVE = http://10.74.82.218/MP/IO/IOB
URLENABLED = http://10.74.82.218/MP/IO/IOB/enabled/
URLADV1 = ?valore=
URLREBO = http://10.74.82.218/MP/IO/sendReboot.aspx?idxMacchina=
[time]
SAMPLETIME = 0.05
TIMEOUTSHORT = 0.30
TIMEOUTLONG = 50
SENDURLTIME = 0.15
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
[invert]
bit0 = 0
bit1 = 0
bit2 = 0
bit3 = 0
bit4 = 0
bit5 = 0
bit6 = 0
bit7 = 0
[filter]
MAX_COUNTER_FILTER = 8
bit0 = 0
bit1 = 0
bit2 = 0
bit3 = 0
bit4 = 0
bit5 = 0
bit6 = 0
bit7 = 0
@@ -0,0 +1,35 @@
[id]
idxMacchina = 2007
[web]
URLBASE = http://192.168.51.77/MP/IO/IOB/input/
URLALIVE = http://192.168.51.77/MP/IO/IOB
URLENABLED = http://192.168.51.77/MP/IO/IOB/enabled/
URLADV1 = ?valore=
URLREBO = http://192.168.51.77/MP/IO/sendReboot.aspx?idxMacchina=
[time]
SAMPLETIME = 0.05
TIMEOUTSHORT = 0.30
TIMEOUTLONG = 50
SENDURLTIME = 0.15
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 = 1
bit4 = 0
bit5 = 0
bit6 = 0
bit7 = 0
@@ -0,0 +1,35 @@
[id]
idxMacchina = 1005
[web]
URLBASE = http://10.74.82.218/MP/IO/IOB/input/
URLALIVE = http://10.74.82.218/MP/IO/IOB
URLENABLED = http://10.74.82.218/MP/IO/IOB/enabled/
URLADV1 = ?valore=
URLREBO = http://10.74.82.218/MPIO/sendReboot.aspx?idxMacchina=
[time]
SAMPLETIME = 0.05
TIMEOUTSHORT = 0.30
TIMEOUTLONG = 50
SENDURLTIME = 0.15
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 = 1
bit4 = 0
bit5 = 0
bit6 = 0
bit7 = 0

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