176 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			176 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
function storeDB($db, $filepath)
 | 
						|
{
 | 
						|
	$data = serialize($db);
 | 
						|
	$fp = fopen($filePath, "w");
 | 
						|
    fwrite($fp, $data);
 | 
						|
    fclose($fp);
 | 
						|
}
 | 
						|
 | 
						|
function deviceTree(string $topic, array $fnTree, array &$device)
 | 
						|
{
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
function mkDevicesDB($topic, $json, $group=false)
 | 
						|
{
 | 
						|
	global $devices, $listProperties, $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;
 | 
						|
			}
 | 
						|
			//searchProperty($fn, $device["device"], $jsonDevice, $listProperties);
 | 
						|
			$indexDevices[$device["device"]->ieeeAddress] = & $device["device"];
 | 
						|
			//print_r($device);
 | 
						|
		}
 | 
						|
	}
 | 
						|
	$dbInit = true;
 | 
						|
	fwrite($logFh, "################################START##################################################");
 | 
						|
	fwrite($logFh, print_r($devices, true));
 | 
						|
	fwrite($logFh, "################################END##################################################");
 | 
						|
 | 
						|
	echo "Devices DB made" .EOL;
 | 
						|
	//print_r($devices);
 | 
						|
}
 | 
						|
 | 
						|
function searchProperty($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, $json)
 | 
						|
{
 | 
						|
	//print_r($device);
 | 
						|
	/*foreach($fnTree as $fn)
 | 
						|
	{
 | 
						|
		//print_r($device);
 | 
						|
		if (!isset($device[$fn]))
 | 
						|
		{
 | 
						|
 | 
						|
		}
 | 
						|
		$device = & $device[$fn];
 | 
						|
	}*/
 | 
						|
 | 
						|
	//print_r($json);
 | 
						|
	$fnTree = explode("/", $fn);
 | 
						|
	print_r($json);
 | 
						|
	if ( ($jsonDevice = json_decode($json)) === null )
 | 
						|
	{
 | 
						|
		echo "json ========>>>>>>> " . print_r($json,true) . EOL;
 | 
						|
		if (!isset($device->value))
 | 
						|
		{
 | 
						|
			$device->{"value"} = $json;
 | 
						|
			$device->type = true;			//set this as parameter and not device
 | 
						|
		}
 | 
						|
		print_r($device);
 | 
						|
	}else
 | 
						|
	{
 | 
						|
		iterateDevice($topic, $fn, $device, $jsonDevice);
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
function iterateDevice($topic, $fn, &$device, $json)
 | 
						|
{
 | 
						|
	global $changed;
 | 
						|
 | 
						|
	//echo "device =>";print_r($device);echo EOL;
 | 
						|
	foreach($json 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);
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
?>
 |