info = json_decode($message->payload, true); break; case "devices": logger(DEBUG,_("Inserting zigbee devices in DB"), __FILE__ . ":" . __LINE__); $topics[$topic[0]]->devices = json_decode($message->payload, true); //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, true); mkDevicesDB($topic[0], $topics[$topic[0]]->groups, true); break; case "extensions": $topics[$topic[0]]->extensions = json_decode($message->payload, true); break; case "config": $topics[$topic[0]]->config = json_decode($message->payload, true); 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); if (($payloadArray = json_decode($message->payload, true)) === null) { $payloadArray = array($fnTreeEnd => $message->payload); } break; default: $payloadArray = json_decode($message->payload, true); } logger(DEBUG, _("friendlyname = ") . $fn, __FILE__ . ":" . __LINE__); $flag = 0; $alert = 0; while (!array_key_exists($fn, $indexFriendlyNames)) { logger(INFO, _("device does not exists in IndexFriendlyNames: ") . print_r($payloadArray,true), __FILE__ . ":" . __LINE__); if ($flag == 0) { logger(INFO, "Reindexing all indexes", __FILE__ . ":" . __LINE__); mkIndexes(); $flag += 1; }elseif($flag == 1) { logger(INFO, "getting device list from zigbee2mqtt", __FILE__ . ":" . __LINE__); publish("zigbee2mqtt", array("bridge/devices" => ""), "get"); $flag += 1; }elseif($flag >= 2) { $flage = 0; if ($alert++ > 4) { logger(ALERT, _("device does not exists in IndexFriendlyNames: ") . $fn, __FILE__ . ":" . __LINE__); break; } } } //logger(DEBUG, "PayloadArray = " . print_r($payloadArray,true), __FILE__ . ":" . __LINE__); if ($alert <= 4) { changeDevice($topicName, $fn, $indexFriendlyNames[$fn], $payloadArray); } }else { logger(DEBUG, _("Zigbee2mqtt doing get or set !?")); } }; $topics["zigbee2mqtt"]->callback = "zigbee2mqttCallback"; ?>