topic); if ($topic[1] == "bridge") { switch ($topic[2]) { case "info": $topics[$topic[0]]->info = json_decode($message->payload); break; case "devices": $topics[$topic[0]]->devices = json_decode($message->payload); fwrite($logFh, print_r($topics[$topic[0]]->devices, true)); mkDevicesDB($topic[0], $topics[$topic[0]]->devices); break; case "groups": $topics[$topic[0]]->groups = json_decode($message->payload); mkDevicesDB($topic[0], $topics[$topic[0]]->groups, true); break; case "extensions": $topics[$topic[0]]->extensions = json_decode($message->payload); break; case "config": $topics[$topic[0]]->config = json_decode($message->payload); break; case "logging": //TODO break; case "state": $topics[$topic[0]]->state = $message->payload; break; default: break; }; }elseif (($topic[array_key_last($topic)]) != "get" and ($topic[array_key_last($topic)]) != "set") { $topic = explode ("/", $message->topic, 2); // get topic name $fnTree = explode ("/" , $topic[1]); // get friendlyname echo $topic[0] . " => " . $topic[1] . EOL; //$devices[$topic[0]][$fnTree[0]]->json = json_decode($message->payload); $device = & $devices[$topic[0]]; foreach($fnTree as $fn) { //print_r($device) ; if (!isset($device[$fn])) { logger(LOG_INFO, $logFh, "init of " . $fn .EOL); $device[$fn] = array(); $device[$fn]["device"] = new device; } $device = & $device[$fn]; } changeDevice($topic[0], $topic[1], $device["device"], $message->payload); //fwrite($logFh, print_r($msg, true)); } } // payload is an array : // key is parameter => value is value of parameter function publish($device, $payload, $commande="set", $eventKey) { global $client, $mids, $logFh; //print_r($payload); $string = $device->topic . "/" . $device->friendlyName . "/" . $commande; $mid = $client->publish($string, json_encode($payload) , 2); if (isset($mids[$mid])) { //echo "unsetting mids" .EOL; unset ($mids[$mid]); }else { //echo "setting mids" .EOL; $mids[$mid] = true; } //echo $string . " =>>>>>> " . json_encode($payload) . EOL; logger(LOG_INFO, $logFh, "Publishing " . $string . " with payload => " . json_encode($payload)); } function connectResponse($r, $message) { global $connected; echo _("I got code ") . $r . _(" and message : '") . $message . "'" . EOL; switch ($r) { case 0: echo _("Successfull connection") . EOL; $connected = true; break; case 1: echo _("Connection refused : unacceptable protocol version") . EOL; $connected = true; break; case 2: echo _("Connection refused : identifier rejected") . EOL; $connected = true; break; case 3: echo _("Connection refused (broker unavailable )") . EOL; $connected = true; break; } } function subscribeResponse($mid, $qosCount) { global $topics, $mids, $nSubscribed; $key = $mids[$mid]; echo _("Subscribed to ") . $key . EOL; $topics[$key]->status = true; $nSubscribed += 1; } function unsubscribeResponse($mid) { global $client; //$topics, $mids, $nSubscribed; //$key = $mids[$mid]; echo _("Unsubscribed"); // from ") . $topics[$key]->name . EOL; //$topics[$key]->status = false; //$nSubscribed -= 1; $client->disconnect(); } function disconnectResponse($r) { global $connected; if ($r != 0) { echo _('Badly '); }else { echo _('Cleanly '); } echo _("disconnected from server") . EOL; $connected = false; } function publishResponse($mid) { global $mids, $events; logger(LOG_INFO, "Event with mid = " . $mid . " published by MQTT broker"); if (isset($mids[$mid])) { //echo "unsetting mids" . EOL; unset ($mids[$mid]); }else { //echo "setting mids" . EOL; $mids[$mid] = true; } } function logger($level, $log) { global $logFh, $logLevel; if ( $level >= $logLevel) { fwrite($logFh, "$level : $log" . EOL); print ("$level : $log" . EOL); } } ?>