Comunicazione su stessa seriale con due script diversi (soluzione o alternative)

Salve a tutti,

mi trovo a dover implementare un programma che raccoglie alcuni dati ambientali (e fin qui, per il omento tutto ok, solo lettura di sensori) e attivare dei relè da comando esterno.
Ho impostato una cosa così: semplice script python che legge iterativamente la seriale di arduino e salva il salvabile su un database mysql -> procedura php che legge dal database i dati e li visualizza in una semplice maschera.

Dovrei, oltre a ciò, mandare dei comandi ad arduino per attivare dei relè tramite i pin digitali e anche fino a qui nessun problema.
Il comando viene mandato attraverso un taso sull'interfaccia web in php, il problema (abbastanza ovvio) è che quando lo invio da php, mi blocca la comunicazione con python e lo script si ferma.

Le due opzioni che avevo in mente sono:

  1. Interfacciare in qualche modo php con python, in modo che sia sempre lo stesso script che invia i comandi, ricevendo l'istruzione da php.

  2. Costruire un cavo di collegamento per la Serial1 sui pin 0 e 1 e usare quella per l'invio dei comandi.

Il problema del punto 1. è che non riesco a trovare nessun caso in cui sia descritta una procedura di questo tipo, oltre al fatto che lo script dovrebbe stare comunque sempre in "ascolto" mentre sta leggendo da arduino. Se anche scrivessi uno scipt apposito, avrei comunque lo stesso problema iniziale di comunicazione contemporanea sullo stesso canale.

Accetto altri suggerimenti.

Grazie

potresti usare un file "dati.txt" per passare i dati;

php crea un file "lock.txt"; se la creazione è senza errori (il file NON esisteva) allora ha il controllo del file dati, e ci scrive dentro la riga. poi cancella il file "lock.txt", di fatto liberando il file dati per essere usato da altre parti. Se invece la creazione del file di lock va in errore (file dati in uso), allora aspetta qualche istante (1 ms è sufficiente) e poi riprova, per 5/10 volte dopo di che da errore (giusto per evitare che il codice superi il tempo massimo di loading della pagina)

Questo serve per evitare che 2 pagine di PHP scrivano contemporaneamente nel file, incasinandosi a vicenda; potresti voler usare una delle librerie di lock file PHP... MA il file dati va usato ANCHE da phyton, e che io sappia non esiste un sistema di lock "portabile" quindi devi usare questo metodo per fare a manina

ora, anche il phyton fa la stessa cosa col file di "lock.txt", quando ottieni il lock leggi il file dati in memoria e SVUOTI il file dati (o lo rinomini) , rilasci il lock, e poi con calma analizzi tutti i coamdni richiesti e li mandi ad arduino.

Ora, come può phyton rilevare che il file dati è cambiato? Sicuramente c'è qualche libreria che consente di ascoltare la modifica di un file, in linux si può registrare un evento, in windows invece devi controllare la data di ultima modifica ogni tot (polling), cosa inefficiente, ma se polli ogni 500ms il ritardo di controllo è minimo.

(sicuramente le librerie che troverai per il "file lock multisistema" usano sistemi simili, e magari ce ne è una che consente di settare i file dati e di lock; se setti gli stessi sia lato php che phyton hai fatto)

un sistema ancora migliore è se trasformi il phyton in un server, con un socket che accetta connessioni multiple, e poi i PHP aprono una connessione al server phyton (che può essere sulla stessa macchina, o dall'altra parte del mondo!), poi internameto al phytn usi le classiche strutture di sincronizzazione native del linguaggio