1
0
moha/mqtt_functions.php

168 lines
4.1 KiB
PHP

<?php
function messageReceived($message)
{
global $topics, $logFh, $devices, $included;
$topic = explode ("/", $message->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" and $included)
{
$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);
if ($fnTree[array_key_last($fnTree)] == "availability")
{
unset ($fnTree[array_key_last($fnTree)]);
$payloadArray = array("availability" => $message->payload);
//print_r($payloadArray);
}else
{
$payloadArray = json_decode($message->payload);
}
$device = & $devices[$topic[0]];
foreach($fnTree as $fn)
{
//print_r($device) ;
if (!isset($device[$fn])) //must not exists, but ...
{
logger(LOG_WARNING, $logFh, "init of " . $fn .EOL);
$device[$fn] = array();
$device[$fn]["device"] = new device;
//addDevice($device[$fn], $fn, );
}
$device = & $device[$fn];
}
changeDevice($topic[0], $topic[1], $device["device"], $payloadArray);
//fwrite($logFh, print_r($msg, true));
}
}
// payload is an array :
// $key is property => $value is value of the property
function publish($topic, $payload, $commande="set", $eventKey)
{
global $client, $mids, $logFh;
//print_r($payload);
$string = $topic . "/" . $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 sprintf(_("I got code %d and message : '%s'"), $r, $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;
//print_r($mids);
$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]);
//print_r($mids);
}else
{
//echo "setting mids" . EOL;
$mids[$mid] = true;
}
}
?>