$baudRate, 'bits' => $bits, 'stop' => $stopBit, 'parity' => $parity )); 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)); 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"; } } // put each line of teleinformation stream in an array $array = explode("\n", $string . $data); //echo "LastToken " .EOL;print_r($lastToken);echo EOL; // loop to analyze each line of teleinformation stream foreach ($array as $key => $string) { $lastKey = array_key_last($array); $token = array(); // make an array with each line of teleinfo stream // row 1 is taglist // row 2 is horodatage or data // row 3 is data if row 2 is horodatage or cheksum if row 2 is data // row 4 is check sum if row3 is data $token[] = strtok($string, "\t"); while($token[] = strtok("\t")) {} //test if the precedent 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); // checksum check if (checkCRC($string, end($token))) { //add tag to list of tag to publish array_pop($token); mkLinkyDatas($token); } } } sleep(1); $client->loop(); } function mkLinkyDatas($data) { static $started = false; static $linkyDatas; logger(DEBUG, _("function mkLinkyDatas")); if (!$started) { logger(DEBUG, _("Array not started")); if ($data[0] == "ADSC") { logger(DEBUG, _("ADSC found, i start making array")); $started = true; $linkyDatas = '{"friendlyName":"' . $friendlyName . '",'; json_add($data, $linkyDatas); } }else { logger(DEBUG, _("Array already started")); if ($data[0] == "ADSC") { $linkyDatas .= "}"; publish($linkyDatas); logger(DEBUG, _("# Starting new array #")); $linkyDatas = '{"friendlyName":"' . $friendlyName . '",'; //Reinitialisation of array json_add($data, $linkyDatas); }else { logger(DEBUG, _("Adding data to array")); $linkyDatas.= ","; json_add($data, $linkyDatas); } } } 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; } ?>