#!/usr/bin/php -q <?php DEFINE('CONTEXT', dirname($_SERVER['SCRIPT_FILENAME'])); include CONTEXT . '/core/_includes/eib-functions.php'; $groupaddr = $argv[1]; $dpt = $argv[2]; if (count($argv) == 4) { $rendu = true; } else { $rendu = false; } $hexa = exec('eibread -s 127.0.0.1 ' . $groupaddr); $data = hexdec($hexa); if (!$rendu) { print dptSelectDecode($dpt, $data) . "\n"; } else { print decodeState($dpt, $data) . "\n"; }
function decodeState($dpt, $data) { $state = dptSelectDecode($dpt, $data); $t = All_DPT(); $type = recursive_array_search($dpt, $t); switch ($type) { case "Boolean": return $t[$type][$dpt]["Valeurs"][$state]; break; case "8BitEncAbsValue": return $t[$type][$dpt]["Valeurs"][$state]; break; default: return $state . " " . $t[$type][$dpt]["Unite"]; break; } }
Mise a jour du ficheir knxtrace.json a chaque modification d'un equipement suivi */ System_Daemon::info("Mise a jour du fichier knxtrace.json a chaque modification d'un equipement suivi et sauvegarde en base s'il doit etre historisé"); //$lastpos = 0; while (true) { // On tail le fichier de log $knxlisten = tail(PATH_LOG, $lastpos); // On r�agit d�s qu'on a un Write // Pour chaque ligne, on r�cup�re le Groupe d'Addresse et de la valeur qu'on converti $groupaddr = get_string_between($knxlisten, 'group addr: ', ' -'); $hexa = get_string_between($knxlisten, 'Hexa: ', ' -'); //on met a jour le valeur dans le tableau et on regenere le fichier json //recursive_array_search if (array_key_exists($groupaddr, $sniffed)) { $decimal = hexdec($hexa); $value = dptSelectDecode($sniffed[$groupaddr]['dpt'], $decimal); //ecriture en base si changement d'etat et bas simplement l'equipement qui redis la meme chose sur le bus //System_Daemon::notice("Old Value -> ".$groupaddr.":: ".$oldSniffedValue[$groupaddr]); //System_Daemon::notice("New Value -> ".$groupaddr.":: ".$value); if ($oldSniffedValue[$groupaddr] != $value) { //System_Daemon::notice("MAJ"); $sniffed[$groupaddr]['value'] = $value; makeJsonTrace($sniffed); //System_Daemon::notice("TRACKED::".$sniffed[$groupaddr]['is_track']); if ($sniffed[$groupaddr]['is_track'] == 1) { //Inseetion en base de données car l'eqt is_track=true //System_Daemon::notice("SAVE"); $jour = date('Y-m-d'); //$heure = date('H:i:s'); $time = time(); //time stamp is in seconds, so now -1 would be the current date minus 1
$sniffed[$data['group_addr']] = array("name" => $data['name'], "dpt" => $data['dpt'], "value" => "", "unite" => getDptUnite($data['dpt'])); } var_dump($sniffed); var_dump(json_encode($sniffed, JSON_UNESCAPED_SLASHES)); var_dump(decodeState('9.017', 1447)); echo ":::::::<br>"; echo "<br>"; /* DPT 1 */ echo 'DPT 1.xxx - OK -'; //$data = 0x0; //-> bin : 0 -> Off $data = 0x80; //-> bin 1 -> on echo ' Decode : ' . $data . " - binaire : " . decbin($data) . " - "; $res = $data; var_dump($res); echo dptSelectDecode('1.000', $data); /* DPT 2 */ echo 'DPT 2.xxx - OK -'; // control type //$data = 0x2; //-> bin : 10 -> Off $data = 0x3; //-> bin 01 -> on echo ' Decode : ' . $data . " - binaire : " . decbin($data) . " - "; //si control = 0 on garde la sortie a 0 $res = 0x0; if ($data >> 1) { // si le control est a 1, on met en sortie la valeur du premier bit $res = $data & 0x1; } var_dump($res); /* DPT 3 */