$baudRate, 'bits' => $bits, 'stop' => $stopBit, 'parity' => 1 )); while(!$bbSerialPort) { logger(ERROR, sprintf(_("Connection to Linky can not be established, retrying in %s seconds"), $reconnectDelay)); sleep($reconnectDelay); } logger(INFO, _("Connected to serial port: " . $portName)); $lastToken = array(); while(1) { $data = dio_read($bbSerialPort); //this is a blocking call if ($data) { $string = ""; logger(DEBUG, _("Data Received: ")); // add the precedent last incomplete tag foreach ($lastToken as $lt) { if (isset($lt)) { $string .= $lt . "\t"; } } $array = explode("\n", $string . $data); //echo "LastToken " .EOL;print_r($lastToken);echo EOL; // loop to analyze tags foreach ($array as $key => $string) { $lastKey = array_key_last($array); $token = array(); $token[] = strtok($string, "\t"); while($token[] = strtok("\t")) {} //test if the last tag is completed or not if ($key === $lastKey) { //print("repere 1"); //var_dump($token); if (isset($token[0])) { logger(DEBUG, _("ẗoken[0] is set")); if (array_key_exists($token[0], $taglist)) { logger(DEBUG, _("ẗoken[0] exists in taglist")); if (($taglist[$token[0]] & HORODATAGE) and !isset($token[3])) { logger(DEBUG, _("Token[3] not set")); $lastToken = $token; break; }elseif (!isset($token[2]) or !isset($token[1])) { logger(DEBUG, _("Token[1] or Token[2] not set")); $lastToken = $token; break; } }else { logger(DEBUG, _("last Token not in taglist")); $lastToken = $token; break; } }else { logger(WARNING, _("Token[0] is not set")); break; } } array_pop($token); if (checkCRC($string, end($token))) { array_pop($token); mkLinkyDatas($token); } } } sleep(1); /*if ($exit === false) { $exit = true; }else { exit(); }*/ $client->loop(); } function mkLinkyDatas($data) { static $started = false; static $linkyDatas; //echo $data[0] . EOL; logger(DEBUG, _("function mkLinkyDatas")); if (!$started) { logger(DEBUG, _("Array not started")); //echo "is ADSC ?" . $data[0] .EOL; if ($data[0] == "ADSC") { logger(DEBUG, _("ADSC found, i start making array")); $started = true; //$linkyDatas[][$data[0]] = $data[1]; $linkyDatas = "{"; json_add($data, $linkyDatas); //echo $data[0] . "=>" . $data[1] .EOL; } }else { logger(DEBUG, _("Array already started")); if ($data[0] == "ADSC") { $linkyDatas .= "}"; publish($linkyDatas); logger(DEBUG, _("# Starting new array #")); $linkyDatas = "{"; //Reinitialisation of array //$linkyDatas[][$data[0]] = $data[1]; json_add($data, $linkyDatas); //echo $data[0] . "=>" . $data[1] .EOL; }else { logger(DEBUG, _("Adding data to array")); //$linkyDatas[][$data[0]] = $data[1]; $linkyDatas.= ","; json_add($data, $linkyDatas); //echo $data[0] . "=>" . $data[1] . EOL; } } //echo $linkyDatas[array_key_last($linkyDatas)][$data[0]] ." => " . $linkyDatas[array_key_last($linkyDatas)][$data[1]]; } function json_add($data, &$jsonString) { if (count($data) == 3) { $jsonString .= '"' . $data[0] . '":{"' . $data[1] . '":"' . trim($data[2]) . '"}'; }else { $jsonString .= '"' . $data[0] . '":"' . trim($data[1]) . '"'; } return $jsonString; } ?>