1
0
This commit is contained in:
2022-02-23 10:23:16 +01:00
parent 7d1dd25f2a
commit 34dca81ba5
21 changed files with 738 additions and 533 deletions

View File

@ -1,8 +1,12 @@
<?php
$callback = function($topic, $message)
$topics["zigbee2mqtt"] = new topic;
$devices["zigbee2mqtt"] = array();
$topics["zigbee2mqtt"]->callback = function($topic, $message)
{
global $topics, $logFh, $devices, $included;
global $topics, $devices, $included, $logFh;
if ($topic[1] == "bridge")
{
switch ($topic[2])
@ -13,7 +17,7 @@ $callback = function($topic, $message)
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));
//fwrite($logFh, var_export($topics[$topic[0]]->devices, true));
mkDevicesDB($topic[0], $topics[$topic[0]]->devices);
getDevicesValues($topic[0]);
break;
@ -40,36 +44,46 @@ $callback = function($topic, $message)
}elseif (($topic[array_key_last($topic)]) != "get" and ($topic[array_key_last($topic)]) != "set" and $included)
{
$topic = explode ("/", $message->topic, 2); // get topic name
$topicName = $topic[0];
$fn = $topic[1];
$device = null;
$fnTree = explode ("/" , $topic[1]); // get friendlyname
echo $topic[0] . " => " . $topic[1] . EOL;
//$devices[$topic[0]][$fnTree[0]]->json = json_decode($message->payload);
if ($fnTree[array_key_last($fnTree)] == "availability")
echo $topicName . " => " . $fn . EOL;
logger(DEBUG, _("end of fnTree = ") . end($fnTree), __FILE__ . ":" . __LINE__);
$fnTreeEnd = end($fnTree);
switch($fnTreeEnd)
{
unset ($fnTree[array_key_last($fnTree)]);
$payloadArray = array("availability" => $message->payload);
//TODO payload can be a json object
}else
{
$payloadArray = json_decode($message->payload);
case "l1":
case "l2":
$fnTreeEnd = "state_" . $fnTreeEnd;
case "mode":
case "contact":
case "availability":
array_pop ($fnTree);
$fn = implode("/", $fnTree);
$fn = implode("/", $fnTree);
$payloadArray = array($fnTreeEnd => $message->payload);
//TODO payl
$payloadArray = array($fnTreeEnd => $message->payload);
//TODO payload can be a json object
break;
default:
$payloadArray = json_decode($message->payload,true);
}
$device = & $devices[$topic[0]];
foreach($fnTree as $fn)
logger(DEBUG, _("friendlyname = ") . $fn, __FILE__ . ":" . __LINE__);
if ((getDeviceByFriendlyname($device, $topicName, $fn, $payloadArray, true)) === false)
{
//print_r($device) ;
if (!isset($device[$fn])) //must not exists, but ...
{
logger(LOG_WARNING, $logFh, _("init of ") . $fn, __FILE__ . ":" . __LINE__);
$device[$fn] = array();
$device[$fn]["device"] = new device;
addDevice($device[$fn], $fn, $payloadArray);
}
$device = & $device[$fn];
logger(ERROR, sprintf(_("device with friendlyname %s not found"), $fn), __FILE__ . ":" . __LINE__);
}
changeDevice($topic[0], $topic[1], $device["device"], $payloadArray);
//fwrite($logFh, print_r($msg, true));
print_r($device);
changeDevice($topicName, $fn, $device["device"], $payloadArray);
}else
{
logger(DEBUG, _("Zigbee2mqtt doing nothing !?"));
}
};
$topics["zigbee2mqtt"] = new topic;
$topics["zigbee2mqtt"]->callback = & $callback;
?>