callback = function($topic, $message) { global $topics, $devices, $included, $logFh, $indexFriendlyNames; if ($topic[1] == "bridge") { switch ($topic[2]) { case "info": $topics[$topic[0]]->info = json_decode($message->payload); break; case "devices": logger(DEBUG,_("Inserting zigbee devices in DB"), __FILE__ . ":" . __LINE__); $topics[$topic[0]]->devices = json_decode($message->payload); //fwrite($logFh, var_export($topics[$topic[0]]->devices, true)); mkDevicesDB($topic[0], $topics[$topic[0]]->devices); getDevicesValues($topic[0]); break; case "groups": logger(DEBUG,_("Inserting zigbee groups in DB"), __FILE__ . ":" . __LINE__); $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 $included) { $topic = explode ("/", $message->topic, 2); // get topic name $topicName = $topic[0]; $fn = $topic[1]; $device = new device; $fnTree = explode ("/" , $topic[1]); // get friendlyname echo $topicName . " => " . $fn . EOL; logger(DEBUG, _("end of fnTree = ") . end($fnTree), __FILE__ . ":" . __LINE__); $fnTreeEnd = end($fnTree); switch($fnTreeEnd) { case "l1": case "l2": $fnTreeEnd = "state_" . $fnTreeEnd; case "set": case "mode": case "contact": case "availability": array_pop ($fnTree); $fn = implode("/", $fnTree); $fn = implode("/", $fnTree); $payloadArray = array($fnTreeEnd => $message->payload); //TODO payload can be a json object break; default: $payloadArray = json_decode($message->payload,true); } logger(DEBUG, _("friendlyname = ") . $fn, __FILE__ . ":" . __LINE__); if (!array_key_exists($fn, $indexFriendlyNames[$topicName])) { logger(ERROR, sprintf(_("device with friendlyname %s not found"), $fn), __FILE__ . ":" . __LINE__); }else { changeDevice($topicName, $fn, $indexFriendlyNames[$topicName][$fn], $payloadArray); } }else { logger(DEBUG, _("Zigbee2mqtt doing get or set !?")); } }; ?>