1
0
moha/db_functions.php

165 lines
4.1 KiB
PHP

<?php
function storeDB($db, $filepath)
{
$data = serialize($db);
$fp = fopen($filePath, "w");
fwrite($fp, $data);
fclose($fp);
}
function mkDevicesDB($topic, $json, $group=false)
{
global $devices, $listProperties, $listPropertiesKeys, $indexDevices, $dbInit, $logFh;
if (!isset($devices[$topic])) $devices[$topic]= array();
foreach ($json as $jsonDevice)
{
//print_r($device);
$fn = $jsonDevice->friendly_name;
$fnTree = explode("/", $fn);
$device = & $devices[$topic];
foreach($fnTree as $fnPart)
{
$device[$fnPart] = array();
$device = & $device[$fnPart];
}
$device["device"] = new device;
$device["device"]->topic = $topic;
//$device["device"]->device = $jsonDevice;
$device["device"]->friendlyName = $jsonDevice->friendly_name;
if ($group)
{
//print_r($device);
$device["device"]->groupID = $jsonDevice->id;
$indexDevices[$device["device"]->groupID] = $jsonDevice->friendly_name;
}else
{
$device["device"]->type = $jsonDevice->type;
$device["device"]->ieeeAddress = $jsonDevice->ieee_address;
if ( !empty($jsonDevice->power_source ) )
{
$device["device"]->powerSource = $jsonDevice->power_source;
}
if ($jsonDevice->definition != null)
{
$device["device"]->description = $jsonDevice->definition->description;
searchPropertyKey($fn, $device["device"], $jsonDevice->definition->exposes, $listPropertiesKeys);
}
searchPropertyValue($fn, $device["device"], $jsonDevice, $listProperties);
$indexDevices[$device["device"]->ieeeAddress] = & $device["device"];
//print_r($device);
}
}
$dbInit += 1;
fwrite($logFh, "################################START##################################################");
fwrite($logFh, print_r($devices, true));
fwrite($logFh, "################################END##################################################");
echo "Devices DB made" . EOL;
//print_r($devices);
}
function searchPropertyKey($fn, &$device, $object, $listPropertiesKeys)
{
foreach($listPropertiesKeys as $property)
{
foreach($object as $key => $value)
{
if ( isset($value->property))
{
//echo "property ===> " . $value->property . EOL;
$device->{$value->property} = null;
}
}
//print_r($device);
}
}
function searchPropertyValue($fn, &$device, $object, $listProperties)
{
$objectArray = (array)$object;
foreach($listProperties as $key => $value)
{
if (in_array($value, $objectArray))
{
//echo "$value trouvé =>";
$device->$key = $value;
//echo $device->$key . EOL;
}
}
}
function changeDevice($topic, $fn, &$device, $payloadArray)
{
//$fnTree = explode("/", $fn);
//print_r($payloadArray);
iterateDevice($topic, $fn, $device, $payloadArray);
}
function iterateDevice($topic, $fn, &$device, $payloadArray)
{
global $changed;
print_r($payloadArray);
//echo "device =>";print_r($device);echo EOL;
foreach($payloadArray as $key => $value)
{
$oldValue = 0;
//echo "key =>"; print_r($key); echo EOL;
//echo "value =>"; print_r($value); echo EOL;
//echo "type : " . gettype($value) .EOL;
if (gettype($value) == "object")
{
//echo " is Object" . EOL;
if (!property_exists($device, $key))
{
$device->{$key} = null;
}
//echo "iterating" . EOL;
iterateDevice($topic, $fn, $device, $value);
}elseif (gettype($value) == "array")
{
//echo "is array" . EOL;
iterateDevice($topic, $fn, $device, $value);
}else
{
if (empty($device->$key) or $value != null)
{
if (isset($device->$key)) $oldValue = $device->$key;
if ($oldValue != $value)
{
$device->{$key} = $value;
$changed[$fn]["key"] = $key;
$changed[$fn]["value"] = $value;
//echo "oldvalue => " . print_r($oldValue, true) . EOL;
/*if (empty($oldValue))
{
echo "Initializing " . $key;
}else
{
echo "changed " . $key . " value " . $oldValue;;
}
echo " to " . $value . EOL;*/
}
//print_r($device->functions);
if (!empty($device->functions))
{
echo "executing notifications functions " . EOL;
foreach($device->functions as $function)
{
//print_r($function);
$function($topic, $fn, $key, $value);
}
}
}
}
}
}
?>