Giusto per completare la logica di questo caso vi scrivo come ho letto io una risposta da lettura stato del dispositivo.
In questo caso il dispositivo risponde con una stringa che contiene dopo un certo comando (in questo caso il carattere G) la codifica in ASCII di un byte.
Quello che interessa ovviamente sono i singoli stati dei bit (0=contatto aperto, 1=contatto chiuso).
Il codice è questo, ovviamente se qualcuno ha idee migliori ben vengano:
Codice PHP:
// Posizione del comando
$commandPosition = strpos($responseMessage, 'G');
// Seleziona il byte dello stato degli input
$inputStatus = substr($responseMessage, $commandPosition + 1, 2);
// Converte dalla codifica in ASCII del byte a binario per verificare i singoli bit
$binaryResponse = base_convert($inputStatus, 16, 2);
// Aggiunge gli eventuali zeri al byte
$byteReponse = str_pad($binaryResponse, 8, "0", STR_PAD_LEFT);
// Inverte la stringa per associare la giusta chiave dell'array al numero di bit
$byteReponseReversed = strrev($byteReponse);
// Splitta il risultato in array
$bitResponse = str_split($byteReponseReversed);
Avrò così in risposta una array con chiave=numero del bit e valore=stato del bit.
Ad esempio una risposta F0 corrisponde a 11110000 ovvero:
bit 7 = 1
bit 6 = 1
bit 5 = 1
bit 4 = 1
bit 3 = 0
bit 2 = 0
bit 1 = 0
bit 0 = 0
Ciao