debugging
This commit is contained in:
		
							
								
								
									
										51
									
								
								class/db.php
									
									
									
									
									
								
							
							
						
						
									
										51
									
								
								class/db.php
									
									
									
									
									
								
							@@ -1,15 +1,22 @@
 | 
				
			|||||||
<?php
 | 
					<?php
 | 
				
			||||||
 | 
					logger(DEBUG,"Including db.php");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class db extends mysqli
 | 
					class db extends mysqli
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	public $mysqlServer = "127.0.0.1";
 | 
						public $mysqlServer = "192.168.1.253"; // "127.0.0.1";
 | 
				
			||||||
	public $username = "moha";
 | 
						public $username = "moha";
 | 
				
			||||||
	public $passwd = "MysqlMoha";
 | 
						public $passwd = "MysqlMoha";
 | 
				
			||||||
	public $database = "moha";
 | 
						public $database = "moha";
 | 
				
			||||||
 | 
						public $result;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	function __construct($mysqlServer, $username, $passwd, $database)
 | 
						function __construct()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		return $this->connect($mysqlServer, $username, $passwd, $database);
 | 
							if ($this->connect($this->mysqlServer, $this->username, $this->passwd, $this->database) === false)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								logger(ERROR,"Connection to sql server error :" . $this->connect_error);
 | 
				
			||||||
 | 
								return 2;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							$result = new mysqli_result($this);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	function protect($string)
 | 
						function protect($string)
 | 
				
			||||||
@@ -17,17 +24,39 @@ class db extends mysqli
 | 
				
			|||||||
		return $this->real_escape_string($string);
 | 
							return $this->real_escape_string($string);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	function logProperty($device, $property, $value)
 | 
						function logProperty($device, $propertyTree, $value, $oldValue = 0)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		$query = "SELECT * FROM logs WHERE device='" . $device->ieeeAddress . "' AND property='" .
 | 
							global $mohaDB, $properties2log;
 | 
				
			||||||
		$query = "IF (EXISTS INSERT INTO logs(device, property, value) VALUES(" . $device->ieeeAddress . ", " . $property . ", " . $value . ") ON DUPLICATE KEY UPDATE value=" . $value
 | 
							$precision = 0;
 | 
				
			||||||
 | 
							echo "############## logProperty ################\nproperty => " . $propertyTree .EOL;
 | 
				
			||||||
 | 
							if (array_key_exists($propertyTree, $properties2log))
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								//echo "logging in database";
 | 
				
			||||||
 | 
								$ieeeAddress = $device->ieeeAddress;
 | 
				
			||||||
 | 
								//print_r($ieeeAddress);
 | 
				
			||||||
 | 
								$query = "INSERT INTO logs (device, property, value) VALUES('" . $this->protect($ieeeAddress) . "', '" . $this->protect($propertyTree) . "', '" . $this->protect($value) . "')";
 | 
				
			||||||
 | 
								if (is_numeric($value) and !empty($properties2log[$propertyTree]))
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									$minMax = (float)$value * (float)$properties2log[$propertyTree] / 100;
 | 
				
			||||||
 | 
									//echo "minMax = " .$minMax . EOL;
 | 
				
			||||||
 | 
									//echo "oldValue = " . $oldValue . EOL;
 | 
				
			||||||
 | 
									//echo "Value = " . $value . EOL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									if ($value >= $oldValue - $minMax and $value <= $oldValue + $minMax)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										//echo "========>>>>>>>>>not changed" . EOL;
 | 
				
			||||||
 | 
										return 0;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if(!$this->result = $this->query($query))
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									logger(ERROR, _("mysql query errror: ") . $this->error);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								logger(INFO, sprintf(_("New value of property: %s of device: %s stored in database"), $propertyTree, $device->friendlyName, $value));
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$mohaDB = new db($mysqlServer, $username, $passwd, $database);
 | 
					$mohaDB = new db();
 | 
				
			||||||
if ($mohaDB->connect_error)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	logger(ERROR, _("Mysql connection failed: ") . $db->connect_error);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
?>
 | 
					?>
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										57
									
								
								class/hook_class.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								class/hook_class.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,57 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					class hook
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						public $hookName = "";
 | 
				
			||||||
 | 
						public $active = true;
 | 
				
			||||||
 | 
						public $initialized = false;
 | 
				
			||||||
 | 
						protected $devicelist;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// list of devices we are listening to
 | 
				
			||||||
 | 
						function __construct()
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							logger(DEBUG, _("Initializing hook: ") . $this->hookName);
 | 
				
			||||||
 | 
							$this->installHooks();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						function installHooks()
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							global $indexDevices;
 | 
				
			||||||
 | 
							$result = true;
 | 
				
			||||||
 | 
							// assigne the function to the sensors devices
 | 
				
			||||||
 | 
							if ($this->active === true)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								foreach ($this->devicelist as $ieeeAddress => $property2change)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									logger(DEBUG, _("Device: ") . $ieeeAddress);
 | 
				
			||||||
 | 
									if ($property2change[1] === false)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										logger(DEBUG, _("Trying to store callback"));
 | 
				
			||||||
 | 
										if (isset($indexDevices[$ieeeAddress]))
 | 
				
			||||||
 | 
										{
 | 
				
			||||||
 | 
											$property = $property2change[0];
 | 
				
			||||||
 | 
											$indexDevices[$ieeeAddress]->$property["functions"][] = array($this,"callback");
 | 
				
			||||||
 | 
											$property2change[1] = true;
 | 
				
			||||||
 | 
											logger(DEBUG, sprintf(_("Property '%s' is initialized with callback"), $property2change[0]));
 | 
				
			||||||
 | 
										}else
 | 
				
			||||||
 | 
										{
 | 
				
			||||||
 | 
											logger(WARNING, sprintf(_("Hook %s can not initialize Property '%s' of device %s"), $this->hookName, $property2change[0], $ieeeAddress));
 | 
				
			||||||
 | 
											$result = false;
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}else
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										logger(DEBUG, _("Callback already installed"));
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								echo "result => "; var_dump($result);
 | 
				
			||||||
 | 
								if ($result === true)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									$this->initialized = true;
 | 
				
			||||||
 | 
									logger(DEBUG, $this->hookName . (" initialized"));
 | 
				
			||||||
 | 
									//var_dump($this);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return $result;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					?>
 | 
				
			||||||
@@ -1,4 +1,6 @@
 | 
				
			|||||||
<?php
 | 
					<?php
 | 
				
			||||||
 | 
					logger(DEBUG,"Including class main.php");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Message
 | 
					class Message
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	public $id;
 | 
						public $id;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -25,7 +25,7 @@ $deviceTable = array(
 | 
				
			|||||||
foreach($deviceTable as $device => $name)
 | 
					foreach($deviceTable as $device => $name)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	define($name, $device);
 | 
						define($name, $device);
 | 
				
			||||||
	logger(INFO, _("defining constant ") . $name);
 | 
						//logger(DEBUG, _("defining constant ") . $name);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
?>
 | 
					?>
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										41
									
								
								config/properties2log.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								config/properties2log.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// list of properties to log in database
 | 
				
			||||||
 | 
					// key is property name => value is % of difference with stocked value. if new value is stored if
 | 
				
			||||||
 | 
					// superior or inferior at value +/- x%
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$properties2log = array(
 | 
				
			||||||
 | 
						"action" => null,
 | 
				
			||||||
 | 
						"state" =>null,
 | 
				
			||||||
 | 
						"contact" => null,
 | 
				
			||||||
 | 
						"temperature" =>2,
 | 
				
			||||||
 | 
						"state_l1" => null,
 | 
				
			||||||
 | 
						"state_l2" => null,
 | 
				
			||||||
 | 
						"humidity" => null,
 | 
				
			||||||
 | 
						"current_heating_setpoint" => null,
 | 
				
			||||||
 | 
						"position" => null,
 | 
				
			||||||
 | 
						"pressure" => 0.5,
 | 
				
			||||||
 | 
						"occupancy" => null,
 | 
				
			||||||
 | 
						"tamper" => null,
 | 
				
			||||||
 | 
						"illuminance_lux" => 8,
 | 
				
			||||||
 | 
					//	"illuminance" => 8,
 | 
				
			||||||
 | 
						"requested_brightness_level" => 8,
 | 
				
			||||||
 | 
						"tempf" => 5,
 | 
				
			||||||
 | 
						"humidity" => null,
 | 
				
			||||||
 | 
						"dewptf" => 5,
 | 
				
			||||||
 | 
						"windchillf" => 5,
 | 
				
			||||||
 | 
						"winddir" => 8,
 | 
				
			||||||
 | 
						"windspeedmph" => 20,
 | 
				
			||||||
 | 
						"windgustmph" => 20,
 | 
				
			||||||
 | 
						"rainin" => null,
 | 
				
			||||||
 | 
						"dailyrainin" => null,
 | 
				
			||||||
 | 
						"weeklyrainin" => null,
 | 
				
			||||||
 | 
						"monthlyrainin" => null,
 | 
				
			||||||
 | 
						"yearlyrainin" => null,
 | 
				
			||||||
 | 
						"solarradiation" => 10,
 | 
				
			||||||
 | 
						"UV" => null,
 | 
				
			||||||
 | 
						"indoortempf" => 5,
 | 
				
			||||||
 | 
						"indoorhumidity" => null,
 | 
				
			||||||
 | 
						"baromin" => 5
 | 
				
			||||||
 | 
						);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										101
									
								
								db_functions.php
									
									
									
									
									
								
							
							
						
						
									
										101
									
								
								db_functions.php
									
									
									
									
									
								
							@@ -1,11 +1,18 @@
 | 
				
			|||||||
<?php
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					logger(DEBUG,"Including db_functions.php");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// to save or not to save the DB, that is the question ...
 | 
				
			||||||
function storeDB($db, $filepath)
 | 
					function storeDB($db, $filepath)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	$data = serialize($db);
 | 
					    $data = serialize($db);
 | 
				
			||||||
	$fp = fopen($filePath, "w");
 | 
					    file_put_contents($filepath, $data);
 | 
				
			||||||
    fwrite($fp, $data);
 | 
					 }
 | 
				
			||||||
    fclose($fp);
 | 
					
 | 
				
			||||||
 | 
					function loadDB(& $db, $filepath)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						$data = file_get_contents($filepath);
 | 
				
			||||||
 | 
						$db = unserialize($data);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function mkDevicesDB($topic, $json, $group=false)
 | 
					function mkDevicesDB($topic, $json, $group=false)
 | 
				
			||||||
@@ -23,13 +30,13 @@ function mkDevicesDB($topic, $json, $group=false)
 | 
				
			|||||||
		$device = & $devices[$topic];
 | 
							$device = & $devices[$topic];
 | 
				
			||||||
		foreach($fnTree as $fnPart)
 | 
							foreach($fnTree as $fnPart)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			if (!isset($device[$fnPart]))
 | 
								if (!array_key_exists($fnPart, $device))
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				$device[$fnPart] = array();
 | 
									$device[$fnPart] = array();
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			$device = & $device[$fnPart];
 | 
								$device = & $device[$fnPart];
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if (!isset($device["device"]))
 | 
							if (!array_key_exists("device", $device))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			$device["device"] = new device;
 | 
								$device["device"] = new device;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -71,13 +78,8 @@ function addDevice(& $device, $fn, $jsonDevice )
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	searchPropertyValue($fn, $device["device"], $jsonDevice, $listProperties);
 | 
						searchPropertyValue($fn, $device["device"], $jsonDevice, $listProperties);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// adding callback function for availability
 | 
					 | 
				
			||||||
	//print_r($hooks);
 | 
					 | 
				
			||||||
	//$device["device"]->availability["functions"][] = $hooks["availability"]->getHook();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	//indexing device
 | 
						//indexing device
 | 
				
			||||||
	$indexDevices[$device["device"]->ieeeAddress] = & $device["device"];
 | 
						$indexDevices[$device["device"]->ieeeAddress] = & $device["device"];
 | 
				
			||||||
 | 
					 | 
				
			||||||
	//print_r($device);
 | 
						//print_r($device);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -119,11 +121,10 @@ function searchPropertyValue($fn, &$device, $object, $listProperties)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
function changeDevice($topic, $fn, &$device, $payloadArray)
 | 
					function changeDevice($topic, $fn, &$device, $payloadArray)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	//$fnTree = explode("/", $fn);
 | 
					 | 
				
			||||||
	//print_r($payloadArray);
 | 
						//print_r($payloadArray);
 | 
				
			||||||
	if (!empty($payloadArray))
 | 
						if (!empty($payloadArray))
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		iterateDevice($topic, $fn, $device, $payloadArray);
 | 
							iterateDevice($topic, $fn, $device, $device, $payloadArray);
 | 
				
			||||||
	}else
 | 
						}else
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		logger(ERROR, _("payloadArray is empty!"));
 | 
							logger(ERROR, _("payloadArray is empty!"));
 | 
				
			||||||
@@ -131,43 +132,75 @@ function changeDevice($topic, $fn, &$device, $payloadArray)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function iterateDevice($topic, $fn, &$device, $payloadArray)
 | 
					function iterateDevice($topic, $fn, $parentDevice, &$device, $payloadArray, $propertyTree="")
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	global $changed;
 | 
						global $changed, $mohaDB;
 | 
				
			||||||
 | 
						$deviceType = (gettype($device) == "object");				// = true if object
 | 
				
			||||||
 | 
						//echo "devicetype = "; var_dump($deviceType); echo EOL;
 | 
				
			||||||
	//print_r($payloadArray);
 | 
						//print_r($payloadArray);
 | 
				
			||||||
	//echo "device =>";print_r($device);echo EOL;
 | 
						//echo "device =>";print_r($device);echo EOL;
 | 
				
			||||||
 | 
						//echo "PropertyTree ==============> " . $propertyTree . EOL;
 | 
				
			||||||
	foreach($payloadArray as $key => $value)
 | 
						foreach($payloadArray as $key => $value)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		$oldValue = null;
 | 
							$oldValue = null;
 | 
				
			||||||
		//echo "key =>"; print_r($key); echo EOL;
 | 
							//echo "key =>"; print_r($key); echo EOL;
 | 
				
			||||||
		//echo "value =>"; print_r($value); echo EOL;
 | 
							//echo "value =>"; print_r($value); echo EOL;
 | 
				
			||||||
 | 
					 | 
				
			||||||
		//echo "type : " . gettype($value) .EOL;
 | 
							//echo "type : " . gettype($value) .EOL;
 | 
				
			||||||
		if (gettype($value) == "object")
 | 
							$valueType = gettype($value);
 | 
				
			||||||
 | 
							if ( $valueType == "object")
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
 | 
								$propertyTree .=  $key . "/";
 | 
				
			||||||
			//echo " is Object" . EOL;
 | 
								//echo " is Object" . EOL;
 | 
				
			||||||
			if (!property_exists($device, $key))
 | 
								if ($deviceType === true )
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				$device->{$key} = null;
 | 
									if (!property_exists($device, $key))
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										$device->{$key} = new stdClass;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									//echo "iterating" . EOL;
 | 
				
			||||||
 | 
									iterateDevice($topic, $fn, $parentDevice, $device->$key,  $value, $propertyTree);
 | 
				
			||||||
 | 
								}else
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									//echo "is array";
 | 
				
			||||||
 | 
									if (!array_key_exists($key, $device))
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										$device[$key] = new stdClass;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									//echo "iterating" . EOL;
 | 
				
			||||||
 | 
									iterateDevice($topic, $fn, $parentDevice, $device[$key], $value, $propertyTree);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							}elseif ($valueType == "array")
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								$propertyTree .=  $key . "/";
 | 
				
			||||||
 | 
								if ($deviceType === true )
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									$device->$key = array();
 | 
				
			||||||
 | 
									iterateDevice($topic, $fn, $parentDevice, $device->$key, $value, $propertyTree);
 | 
				
			||||||
 | 
								}else
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									$device[$key] = array();
 | 
				
			||||||
 | 
									iterateDevice($topic, $fn, $parentDevice, $device[$key], $value, $propertyTree);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			//echo "iterating" . EOL;
 | 
					 | 
				
			||||||
			iterateDevice($topic, $fn, $device, $value);
 | 
					 | 
				
			||||||
		}elseif (gettype($value) == "array")
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			//echo "is array" . EOL;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
			iterateDevice($topic, $fn, $device, $value);
 | 
					 | 
				
			||||||
		}else
 | 
							}else
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
 | 
								//echo "db_functions".EOL;
 | 
				
			||||||
 | 
								//($device);
 | 
				
			||||||
			if (empty($device->$key) or $value != null)
 | 
								if (empty($device->$key) or $value != null)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				if (isset($device->$key))
 | 
									if (property_exists($device, $key))
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					$oldValue = $device->$key;
 | 
										if (is_array($device->$key))
 | 
				
			||||||
 | 
										{
 | 
				
			||||||
 | 
											$oldValue = $device->$key["value"];
 | 
				
			||||||
 | 
										}else
 | 
				
			||||||
 | 
										{
 | 
				
			||||||
 | 
											$oldValue = $device->$key;
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
				}else
 | 
									}else
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					$device->{$key}["value"] = null;
 | 
										$device->{$key} = array("value" => null);
 | 
				
			||||||
					$device->$key["functions"] = array();
 | 
										$device->$key["functions"] = array();
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				if ($oldValue !== $value)
 | 
									if ($oldValue !== $value)
 | 
				
			||||||
@@ -175,8 +208,10 @@ function iterateDevice($topic, $fn, &$device, $payloadArray)
 | 
				
			|||||||
					$device->$key["value"] = $value;
 | 
										$device->$key["value"] = $value;
 | 
				
			||||||
					$changed[$fn]["key"] = $key;
 | 
										$changed[$fn]["key"] = $key;
 | 
				
			||||||
					$changed[$fn]["value"] = $value;
 | 
										$changed[$fn]["value"] = $value;
 | 
				
			||||||
					logger(INFO, sprintf(_("Device %s property %s, value changed to %s"), $device->friendlyName, $key, $value));
 | 
										logger(INFO, sprintf(_("Device %s property %s, value changed to %s"), $fn, $propertyTree . $key, $value));
 | 
				
			||||||
					$mohaDB->logProperty($device, $key, $value);
 | 
										//print_r($device);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
										//$mohaDB->logProperty($parentDevice, $propertyTree . $key, $value,   $oldValue);    TODO re-activate
 | 
				
			||||||
					//echo "oldvalue => " . print_r($oldValue, true) . EOL;
 | 
										//echo "oldvalue => " . print_r($oldValue, true) . EOL;
 | 
				
			||||||
					/*if (empty($oldValue))
 | 
										/*if (empty($oldValue))
 | 
				
			||||||
					{
 | 
										{
 | 
				
			||||||
@@ -187,11 +222,9 @@ function iterateDevice($topic, $fn, &$device, $payloadArray)
 | 
				
			|||||||
					}
 | 
										}
 | 
				
			||||||
					echo  " to " . $value . EOL;*/
 | 
										echo  " to " . $value . EOL;*/
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				//print_r($device->functions);		print_r($value);
 | 
					 | 
				
			||||||
				//print_r($device);
 | 
					 | 
				
			||||||
				if (!empty($device->$key["functions"]))
 | 
									if (!empty($device->$key["functions"]))
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					echo "executing notifications functions " . EOL;
 | 
										logger(DEBUG,_("executing notifications functions"));
 | 
				
			||||||
					foreach($device->$key["functions"] as $function)
 | 
										foreach($device->$key["functions"] as $function)
 | 
				
			||||||
					{
 | 
										{
 | 
				
			||||||
						//print_r($function);
 | 
											//print_r($function);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,5 @@
 | 
				
			|||||||
<?php
 | 
					<?php
 | 
				
			||||||
 | 
					logger(DEBUG,"Including events.php");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*	for all functions, datetime parameter format is 'dd/mm/yy hh:mm:ss'			*/
 | 
					/*	for all functions, datetime parameter format is 'dd/mm/yy hh:mm:ss'			*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,28 +2,25 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
class availability
 | 
					class availability
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						public $hookname = "availability";
 | 
				
			||||||
 | 
						public $initialized = true;
 | 
				
			||||||
	// by default all devices are listening for availability
 | 
						// by default all devices are listening for availability
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	function __construct()
 | 
						function __construct()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		global $devices;
 | 
							global $devices;
 | 
				
			||||||
		$this->iterate($devices);
 | 
							$this->iterate();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private function iterate(& $device)
 | 
						private function iterate()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		foreach ($device as $key => $value)
 | 
							global $indexDevices;
 | 
				
			||||||
 | 
							foreach ($indexDevices as $value)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			if (gettype($value) == "array")
 | 
								$value->availability["functions"][] = array($this,"callback");
 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				$this->iterate($value);
 | 
					 | 
				
			||||||
			}elseif (is_a($value, "device"))
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
				$value->availability["functions"][] = array($this,"callback");
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// callback fonction. Is called with these 3 parameters
 | 
						// callback fonction. Is called with these 3 parameters
 | 
				
			||||||
	// $device 	-> calling device
 | 
						// $device 	-> calling device
 | 
				
			||||||
	// $property 	-> parameter passed by mqtt
 | 
						// $property 	-> parameter passed by mqtt
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,28 +1,19 @@
 | 
				
			|||||||
<?php
 | 
					<?php
 | 
				
			||||||
class alerte_intrusion
 | 
					class alerte_intrusion extends hook
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	public $hookName = "alerte_intrusion";
 | 
						public $hookName = "alerte_intrusion";
 | 
				
			||||||
	public $active = true;
 | 
						public $active = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private $devicelist = array(ENTREE_PORTE => "contact", GARAGE_PORTE => "contact", RDC_CHAMBRE_BAIE => "contact", RDC_SALON_BAIE => "contact");
 | 
						protected $devicelist = array(
 | 
				
			||||||
 | 
							ENTREE_PORTE => array("contact", false),
 | 
				
			||||||
 | 
							GARAGE_PORTE => array("contact", false),
 | 
				
			||||||
 | 
							RDC_CHAMBRE_BAIE => array("contact", false),
 | 
				
			||||||
 | 
							RDC_SALON_BAIE => array("contact", false));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public $delay = 3;				// amount of time in $timeunit
 | 
						public $delay = 3;				// amount of time in $timeunit
 | 
				
			||||||
	public $delayManual = 10;		// amount of time in $timeunit for manual mode
 | 
						public $delayManual = 10;		// amount of time in $timeunit for manual mode
 | 
				
			||||||
	public $timeUnit = "minute";	// unit of time for delay, second, minute, day, week, month, year
 | 
						public $timeUnit = "minute";	// unit of time for delay, second, minute, day, week, month, year
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	function __construct()
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		global $indexDevices;
 | 
					 | 
				
			||||||
		// assigne the function to the sensors devices
 | 
					 | 
				
			||||||
		if ($this->active === true)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			foreach ($this->devicelist as $ieeeAddress => $param)
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				$indexDevices[$ieeeAddress]->$param["functions"][] = array($this,"callback");
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// callback fonction. Is called with these 4 parameters
 | 
						// callback fonction. Is called with these 4 parameters
 | 
				
			||||||
	public function callBack(&$device, $param, $value)
 | 
						public function callBack(&$device, $param, $value)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,15 +1,14 @@
 | 
				
			|||||||
<?php
 | 
					<?php
 | 
				
			||||||
class rdc_salon_eclairage
 | 
					class rdc_salon_eclairage extends hook
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	public $hookName = "rdc_salon_eclairage";
 | 
						public $hookName = "rdc_salon_eclairage";
 | 
				
			||||||
	public $active = true;
 | 
					 | 
				
			||||||
	// list of devices we are listening to
 | 
						// list of devices we are listening to
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private $devicelist = array(
 | 
						protected $devicelist = array(
 | 
				
			||||||
		RDC_SALON_MVMT => "occupancy",
 | 
							RDC_SALON_MVMT => array("occupancy", false),
 | 
				
			||||||
		RDC_SALON_MVMT2 => "occupancy",
 | 
							RDC_SALON_MVMT2 => array("occupancy", false),
 | 
				
			||||||
		RDC_ENTREE_PORTE => "contact",
 | 
							RDC_ENTREE_PORTE => array("contact", false),
 | 
				
			||||||
		RDC_SALON_LUMINOSITE => "illuminance_lux"
 | 
							RDC_SALON_LUMINOSITE => array("illuminance_lux", false)
 | 
				
			||||||
		);
 | 
							);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public $delay = 3;				// amount of time in $timeunit
 | 
						public $delay = 3;				// amount of time in $timeunit
 | 
				
			||||||
@@ -18,20 +17,6 @@ class rdc_salon_eclairage
 | 
				
			|||||||
	public $luminance_max = 3000;
 | 
						public $luminance_max = 3000;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	function __construct()
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		global $indexDevices;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		// assigne the function to the sensors devices
 | 
					 | 
				
			||||||
		if ($this->active === true)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			foreach ($this->devicelist as $ieeeAddress => $param)
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				$indexDevices[$ieeeAddress]->$param["functions"][] = array($this,"callback");
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// callback fonction. Is called with these 4 parameters
 | 
						// callback fonction. Is called with these 4 parameters
 | 
				
			||||||
	public function callBack(&$device, $param, $value)
 | 
						public function callBack(&$device, $param, $value)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@@ -61,7 +46,7 @@ class rdc_salon_eclairage
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		global $devices, $indexDevices;
 | 
							global $devices, $indexDevices;
 | 
				
			||||||
		$device = & $indexDevices[RDC_SALON_ECLAIRAGE_PANNEAU];
 | 
							$device = & $indexDevices[RDC_SALON_ECLAIRAGE_PANNEAU];
 | 
				
			||||||
		if ($device->state_l1["value"] != $state)
 | 
							if ($device->state["value"] != $state)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			$msg = array("state" => $state);
 | 
								$msg = array("state" => $state);
 | 
				
			||||||
			logger(INFO, sprintf(_("publishing message: %s to %s"), json_encode($msg), $device->friendlyName));
 | 
								logger(INFO, sprintf(_("publishing message: %s to %s"), json_encode($msg), $device->friendlyName));
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,40 +1,31 @@
 | 
				
			|||||||
<?php
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class rdc_sdb_eclairage
 | 
					class rdc_sdb_eclairage extends hook
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	public $hookName = "rdc_sdb_eclairage";
 | 
						public $hookName = "rdc_sdb_eclairage";
 | 
				
			||||||
	public $active = true;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/*			already defined in hook class			*/
 | 
				
			||||||
 | 
						// public $active = true;
 | 
				
			||||||
 | 
						//public $initlialized = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public $delay = 3;				// amount of time in $timeunit
 | 
				
			||||||
 | 
						public $delayManual = 10;		// amount of time in $timeunit for manual mode
 | 
				
			||||||
 | 
						public $timeUnit = "minute";	// unit of time for delay, second, minute, day, week, month, year
 | 
				
			||||||
	// list of devices we are listening to
 | 
						// list of devices we are listening to
 | 
				
			||||||
	// 0x00158d0003f0f3b4	douche mvmnt
 | 
						// 0x00158d0003f0f3b4	douche mvmnt
 | 
				
			||||||
	// 0x842e14fffe1c0cd1	plafond mvmnt
 | 
						// 0x842e14fffe1c0cd1	plafond mvmnt
 | 
				
			||||||
	// 0x00124b0022ec05dc	mvmnt
 | 
						// 0x00124b0022ec05dc	mvmnt
 | 
				
			||||||
	// 0x00158d0005c1a998	module commutateur => state_l1
 | 
						// 0x00158d0005c1a998	module commutateur => state_l1
 | 
				
			||||||
	private $devicelist = array(
 | 
					
 | 
				
			||||||
		"0x00158d0003f0f3b4" => "occupancy",
 | 
						// devicelist[$ieeAddress][0] => property to watch
 | 
				
			||||||
		"0x842e14fffe1c0cd1" => "occupancy",
 | 
						// devicelist[$ieeAddress][1] => initialized = true
 | 
				
			||||||
		"0x00124b0022ec05dc" => "occupancy",
 | 
						protected $devicelist = array(
 | 
				
			||||||
		RDC_SDB_WC_ECLAIRAGE => "state_l1"
 | 
							"0x00158d0003f0f3b4" => array("occupancy", false),
 | 
				
			||||||
 | 
							"0x842e14fffe1c0cd1" => array("occupancy", false),
 | 
				
			||||||
 | 
							"0x00124b0022ec05dc" => array("occupancy", false),
 | 
				
			||||||
 | 
							RDC_SDB_WC_ECLAIRAGE => array("state_l1", false)
 | 
				
			||||||
	);
 | 
						);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public $delay = 3;				// amount of time in $timeunit
 | 
					 | 
				
			||||||
	public $delayManual = 10;		// amount of time in $timeunit for manual mode
 | 
					 | 
				
			||||||
	public $timeUnit = "minute";	// unit of time for delay, second, minute, day, week, month, year
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	function __construct()
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		global $indexDevices;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		// assigne the function to the sensors devices
 | 
					 | 
				
			||||||
		if ($this->active === true)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			foreach ($this->devicelist as $ieeeAddress => $property)
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				$indexDevices[$ieeeAddress]->$property["functions"][] = array($this,"callback");
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// callback fonction. Is called with these 4 parameters
 | 
						// callback fonction. Is called with these 4 parameters
 | 
				
			||||||
	public function callBack(&$device, $property, $value)
 | 
						public function callBack(&$device, $property, $value)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@@ -73,6 +64,6 @@ class rdc_sdb_eclairage
 | 
				
			|||||||
		$device->set(null);
 | 
							$device->set(null);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
$hooks["rdc_sdb_eclairage"] = new rdc_sdb_eclairage();
 | 
					$hooks["rdc_sdb_eclairage"] = new rdc_sdb_eclairage();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
?>
 | 
					?>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,30 +1,15 @@
 | 
				
			|||||||
<?php
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class rdc_wc_eclairage
 | 
					class rdc_wc_eclairage extends hook
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	public $hookName = "rdc_wc_eclairage";
 | 
						public $hookName = "rdc_wc_eclairage";
 | 
				
			||||||
	public $active = true;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private $devicelist = array(RDC_SDB_WC_ECLAIRAGE => "state_l2");
 | 
						protected $devicelist = array(RDC_SDB_WC_ECLAIRAGE => array("state_l2", false));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public $delay = 3;				// amount of time in $timeunit
 | 
						public $delay = 3;				// amount of time in $timeunit
 | 
				
			||||||
	public $delayManual = 10;		// amount of time in $timeunit for manual mode
 | 
						public $delayManual = 10;		// amount of time in $timeunit for manual mode
 | 
				
			||||||
	public $timeUnit = "minute";	// unit of time for delay, second, minute, day, week, month, year
 | 
						public $timeUnit = "minute";	// unit of time for delay, second, minute, day, week, month, year
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	function __construct()
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		global $indexDevices;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		// assigne the function to the sensors devices
 | 
					 | 
				
			||||||
		if ($this->active === true)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			foreach ($this->devicelist as $ieeeAddress => $property)
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				$indexDevices[$ieeeAddress]->$property["functions"][] = array($this,"callback");
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// callback fonction. Is called with these 4 parameters
 | 
						// callback fonction. Is called with these 4 parameters
 | 
				
			||||||
	public function callBack(&$device, $property, $value)
 | 
						public function callBack(&$device, $property, $value)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										107
									
								
								moha.php
									
									
									
									
									
								
							
							
						
						
									
										107
									
								
								moha.php
									
									
									
									
									
								
							@@ -17,9 +17,6 @@ declare(ticks = 1);
 | 
				
			|||||||
$listProperties = array("powerSource" => "batterie");
 | 
					$listProperties = array("powerSource" => "batterie");
 | 
				
			||||||
$listPropertiesKeys = array("property");
 | 
					$listPropertiesKeys = array("property");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
require "class/main.php";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//global variables
 | 
					//global variables
 | 
				
			||||||
$topics = array();				// list of topics
 | 
					$topics = array();				// list of topics
 | 
				
			||||||
$mids = array();				// list of message IDs
 | 
					$mids = array();				// list of message IDs
 | 
				
			||||||
@@ -30,7 +27,7 @@ $hooks = array();				// array of hooks
 | 
				
			|||||||
$notificationMethods = array();	// array of notification methods objects
 | 
					$notificationMethods = array();	// array of notification methods objects
 | 
				
			||||||
$events = array();				// list of event objects
 | 
					$events = array();				// list of event objects
 | 
				
			||||||
$changed = array();				// list of changed devices
 | 
					$changed = array();				// list of changed devices
 | 
				
			||||||
$dbInit = false;				// flag to indicate that desvices db is initialized
 | 
					$dbInit = 0;					// flag to indicate that devices db is initializedl
 | 
				
			||||||
$connected = false;				// connected to MQTT server
 | 
					$connected = false;				// connected to MQTT server
 | 
				
			||||||
$included = false;				// flag indicate scripts are loaded
 | 
					$included = false;				// flag indicate scripts are loaded
 | 
				
			||||||
$nSubscribed = 0;				// Number of topics subsribed
 | 
					$nSubscribed = 0;				// Number of topics subsribed
 | 
				
			||||||
@@ -38,9 +35,27 @@ $logFile = "/var/log/moha.log";	// Path of log file
 | 
				
			|||||||
$logFh = null;					// filehandle of log file
 | 
					$logFh = null;					// filehandle of log file
 | 
				
			||||||
$curlErr = 0;					// Number of errors returned by curl
 | 
					$curlErr = 0;					// Number of errors returned by curl
 | 
				
			||||||
$configDir = "./config";		// default config dir (production value is /etc/moha/)
 | 
					$configDir = "./config";		// default config dir (production value is /etc/moha/)
 | 
				
			||||||
$properties2log = array("action", "state", "contact", "temperature", "state_l1", "state_l2", "humidity", "current_heating_setpoint", "position", "pressure", "occupancy", "tamper", "illuminance_lux","illuminance", "requested_brightness_level", );
 | 
					$hooksInitialized = 0;		// are all hooks initialized ? false/true
 | 
				
			||||||
 | 
					require $configDir . "/properties2log.php";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					logger(DEBUG, _("lauching init function"), false);
 | 
				
			||||||
if (!init()) exit(1);
 | 
					if (!init()) exit(1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// gettext
 | 
				
			||||||
 | 
					bindtextdomain("moha", "./locale");
 | 
				
			||||||
 | 
					textdomain("moha");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function notify($message)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						global $notificationMethods;
 | 
				
			||||||
 | 
						$result = false;
 | 
				
			||||||
 | 
						foreach($notificationMethods as $value)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							//$result =  $result | $value->send($message);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return $result;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function logger($level, $log, $notif = true)
 | 
					function logger($level, $log, $notif = true)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	global $logFh, $logLevel, $notificationLevel;
 | 
						global $logFh, $logLevel, $notificationLevel;
 | 
				
			||||||
@@ -61,22 +76,6 @@ function logger($level, $log, $notif = true)
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
logger(DEBUG, _("Require topics definition -> zigbee3mqtt"), false);
 | 
					 | 
				
			||||||
$topics["zigbee2mqtt"] = new topic;
 | 
					 | 
				
			||||||
require "topics_callbacks/zigbee2mqtt.php";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
logger(DEBUG, _("Require topics definition -> pws2mqtt"), false);
 | 
					 | 
				
			||||||
$topics["pws2mqtt"] = new topic;
 | 
					 | 
				
			||||||
require "topics_callbacks/pws2mqtt.php";
 | 
					 | 
				
			||||||
*/
 | 
					 | 
				
			||||||
logger(DEBUG, _("gettext init"), false);
 | 
					 | 
				
			||||||
// gettext
 | 
					 | 
				
			||||||
bindtextdomain("moha", "./locale");
 | 
					 | 
				
			||||||
textdomain("moha");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
logger(DEBUG, _("lauching init function"), false);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
logger(DEBUG, _('assigning variable : $client'), false);
 | 
					logger(DEBUG, _('assigning variable : $client'), false);
 | 
				
			||||||
$client = new Mosquitto\Client();
 | 
					$client = new Mosquitto\Client();
 | 
				
			||||||
@@ -93,14 +92,20 @@ $logLevel = ALL;
 | 
				
			|||||||
$notificationLevel = WARNING | ERROR;
 | 
					$notificationLevel = WARNING | ERROR;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
logger(DEBUG, _("requiring php modules"), false);
 | 
					logger(DEBUG, _("requiring php modules"), false);
 | 
				
			||||||
 | 
					require "class/main.php";
 | 
				
			||||||
 | 
					require "class/db.php";
 | 
				
			||||||
 | 
					require "class/hook_class.php";
 | 
				
			||||||
require "utils.php";
 | 
					require "utils.php";
 | 
				
			||||||
require "mqtt_functions.php";
 | 
					require "mqtt_functions.php";
 | 
				
			||||||
require "events.php";
 | 
					require "events.php";
 | 
				
			||||||
require "db.php";
 | 
					 | 
				
			||||||
require "db_functions.php";
 | 
					require "db_functions.php";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					logger(DEBUG, _("Loading stored devices datas"));
 | 
				
			||||||
 | 
					loadDB($devices, "moha.db");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// topics definition
 | 
					// topics definition
 | 
				
			||||||
loadHooks("./topics_callbacks", $hooksList);
 | 
					listHooks("./topics_callbacks", $hooksList);
 | 
				
			||||||
if (!empty($hooksList))
 | 
					if (!empty($hooksList))
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	foreach ($hooksList as $callback)
 | 
						foreach ($hooksList as $callback)
 | 
				
			||||||
@@ -114,14 +119,17 @@ logger(DEBUG, _("requiring config files -> devices_constants.php"), false);
 | 
				
			|||||||
//include predefined file witch define constants for devices
 | 
					//include predefined file witch define constants for devices
 | 
				
			||||||
if (is_readable($configDir . "/" . "devices_constants.php"))
 | 
					if (is_readable($configDir . "/" . "devices_constants.php"))
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	$hooksList[] = $configDir . "/" . "devices_constants.php";
 | 
						include $configDir . "/" . "devices_constants.php";
 | 
				
			||||||
	//echo "hooklist"; print_r($hooksList); echo EOL;
 | 
						//echo "hooklist"; print_r($hooksList); echo EOL;
 | 
				
			||||||
	logger(INFO, sprintf(_("%s/devices_constants.define found, so it will be included :-)"), $configDir), false);
 | 
						logger(INFO, sprintf(_("%s/devices_constants.define found, so it has been included :-)"), $configDir), false);
 | 
				
			||||||
}else
 | 
					}else
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	logger(WARNING, sprintf(_("%s/devices_constants.define not found, so not included :-)"), $configDir), false);
 | 
						logger(WARNING, sprintf(_("%s/devices_constants.define not found, so not included :-)"), $configDir), false);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// making the list of hooks to include
 | 
				
			||||||
 | 
					listHooks("./hooks", $hooksList);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
logger(DEBUG, _("Program start"), false);
 | 
					logger(DEBUG, _("Program start"), false);
 | 
				
			||||||
// Program start
 | 
					// Program start
 | 
				
			||||||
$client = new Mosquitto\Client();
 | 
					$client = new Mosquitto\Client();
 | 
				
			||||||
@@ -155,11 +163,11 @@ $oneshot = false;
 | 
				
			|||||||
while (true)
 | 
					while (true)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	$client->loop();
 | 
						$client->loop();
 | 
				
			||||||
	if ($dbInit == 2 and ! $included)
 | 
						if (! $included)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		logger(DEBUG, _("Making hooks list"), false);
 | 
							logger(DEBUG, _("Making hooks list"), false);
 | 
				
			||||||
		getDevicesValues();
 | 
							getDevicesValues();
 | 
				
			||||||
		loadHooks("./hooks", $hooksList);
 | 
					
 | 
				
			||||||
		if (!empty($hooksList))
 | 
							if (!empty($hooksList))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			foreach ($hooksList as $hook)
 | 
								foreach ($hooksList as $hook)
 | 
				
			||||||
@@ -167,23 +175,38 @@ while (true)
 | 
				
			|||||||
				logger(INFO, _("Including ") . $hook, false);
 | 
									logger(INFO, _("Including ") . $hook, false);
 | 
				
			||||||
				include $hook;
 | 
									include $hook;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
								file_put_contents("moha.devices", print_r($devices, true));
 | 
				
			||||||
 | 
								$included = true;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}elseif($dbInit == 2 and $included)
 | 
					
 | 
				
			||||||
 | 
						}elseif($included)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if ($oneshot === false)		//	execute once initialization finished
 | 
							if ($oneshot === false)		//	execute once initialization finished
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			logger(DEBUG, _("Oneshot part of loop"), false);
 | 
								logger(DEBUG, _("Oneshot part of loop"), false);
 | 
				
			||||||
			$oneshot = true;
 | 
								$oneshot = true;
 | 
				
			||||||
			/*foreach($topics as $name => $topic)
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				//echo $name;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
				$topic->mid = $client->subscribe($name . "/#", 2);
 | 
					 | 
				
			||||||
				$mids[$topic->mid] = $name;
 | 
					 | 
				
			||||||
				$topic->status = false;
 | 
					 | 
				
			||||||
			}*/
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		checkEvents();
 | 
							checkEvents();
 | 
				
			||||||
 | 
							if($hooksInitialized == 0)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								$i = 1;
 | 
				
			||||||
 | 
								foreach($hooks as $hookName => $hook)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if ($hook->initialized === false)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										logger(WARNING, _("Hook not completely initialized :") . $hookName);
 | 
				
			||||||
 | 
										$i &= $hook->installHooks();
 | 
				
			||||||
 | 
										echo "hook->initialized";var_dump($hook->initialized);echo EOL;
 | 
				
			||||||
 | 
										// (int)$hook->initialized;
 | 
				
			||||||
 | 
										var_dump($hook);
 | 
				
			||||||
 | 
										echo "i =======> " . $i;var_dump($i); echo EOL;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								$hooksInitialized = $i;
 | 
				
			||||||
 | 
							}else
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								logger(DEBUG,_("All hooks initialized"));
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -193,7 +216,6 @@ function init()
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	global $logFile, $logFh, $client;
 | 
						global $logFile, $logFh, $client;
 | 
				
			||||||
	date_default_timezone_set('Europe/Paris');
 | 
						date_default_timezone_set('Europe/Paris');
 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (! $logFh = fopen($logFile, "w") )
 | 
						if (! $logFh = fopen($logFile, "w") )
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		echo _("error opening log file");
 | 
							echo _("error opening log file");
 | 
				
			||||||
@@ -202,9 +224,8 @@ function init()
 | 
				
			|||||||
	return true;
 | 
						return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function loadHooks($dir, &$hookList)
 | 
					function listHooks($dir, &$hookList)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	global $included;
 | 
					 | 
				
			||||||
	$files = scandir($dir);
 | 
						$files = scandir($dir);
 | 
				
			||||||
	//print_r($files);
 | 
						//print_r($files);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -217,7 +238,7 @@ function loadHooks($dir, &$hookList)
 | 
				
			|||||||
			if (is_dir($dir . "/" . $file))
 | 
								if (is_dir($dir . "/" . $file))
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				//echo "directory : " . $dir . '/' . $file . EOL;
 | 
									//echo "directory : " . $dir . '/' . $file . EOL;
 | 
				
			||||||
				loadHooks($dir . '/' . $file, $hookList);
 | 
									listHooks($dir . '/' . $file, $hookList);
 | 
				
			||||||
			}elseif (strpos($file, ".php", -4) !== false)
 | 
								}elseif (strpos($file, ".php", -4) !== false)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				//echo "file : " . $dir . "/" . $file . EOL;
 | 
									//echo "file : " . $dir . "/" . $file . EOL;
 | 
				
			||||||
@@ -229,13 +250,14 @@ function loadHooks($dir, &$hookList)
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	//print_r($hookList);
 | 
						//print_r($hookList);
 | 
				
			||||||
	$included = true;
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function endMoha()
 | 
					function endMoha()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	global $topics, $nSubscribed ,$client, $logFh, $connected;
 | 
						global $devices, $topics, $nSubscribed ,$client, $logFh, $connected;
 | 
				
			||||||
	$x = 0;
 | 
						$x = 0;
 | 
				
			||||||
 | 
						storeDB($devices, "moha.db");
 | 
				
			||||||
 | 
						file_put_contents("moha.devices", print_r($devices, true));
 | 
				
			||||||
	if ($connected)
 | 
						if ($connected)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		$mid = $client->unsubscribe("#");
 | 
							$mid = $client->unsubscribe("#");
 | 
				
			||||||
@@ -253,6 +275,7 @@ function endMoha()
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	fclose($logFh);
 | 
						fclose($logFh);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	exit(0);
 | 
						exit(0);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,85 +1,24 @@
 | 
				
			|||||||
<?php
 | 
					<?php
 | 
				
			||||||
 | 
					logger(DEBUG,"Including mqtt_functions.php");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function messageReceived($message)
 | 
					function messageReceived($message)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	global $topics, $logFh, $devices, $included;
 | 
						global $topics, $logFh, $devices, $included;
 | 
				
			||||||
	$topic = explode ("/", $message->topic);
 | 
						$topic = explode ("/", $message->topic);
 | 
				
			||||||
	$callback = $topics[$topic[0]]->callback;
 | 
						$callback = $topics[$topic[0]]->callback;
 | 
				
			||||||
 | 
						//logger(DEBUG, "===== topic " . print_r($topic, true));
 | 
				
			||||||
	$callback($topic, $message);
 | 
						$callback($topic, $message);
 | 
				
			||||||
	/*
 | 
					 | 
				
			||||||
	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 :
 | 
					// payload is an array :
 | 
				
			||||||
// $key is property => $value is value of the property
 | 
					// $key is property and $value is value of the property
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function publish($topic, $payload, $commande="set", $eventKey)
 | 
					function publish($topic, $payload, $commande="set", $eventKey)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	global $client, $mids, $logFh;
 | 
						global $client, $mids, $logFh;
 | 
				
			||||||
	//print_r($payload);
 | 
						//print_r($payload);
 | 
				
			||||||
	$string = $topic . "/" . $commande;
 | 
						$string = $topic . "/" . $commande;
 | 
				
			||||||
	$mid = $client->publish($string, json_encode($payload) , 2);
 | 
						//$mid = $client->publish($string, json_encode($payload) , 2);  //TODO activer
 | 
				
			||||||
	if (isset($mids[$mid]))
 | 
						if (isset($mids[$mid]))
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		//echo "unsetting mids" .EOL;
 | 
							//echo "unsetting mids" .EOL;
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										33
									
								
								topics_callbacks/linky2mqtt.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								topics_callbacks/linky2mqtt.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,33 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					//TODO to test and debug
 | 
				
			||||||
 | 
					$topics["linky2mqtt"] = new topic;
 | 
				
			||||||
 | 
					/*$devices["linky2mqtt"]["linky"]["device"] = new device;
 | 
				
			||||||
 | 
					$device = &$devices["linky2mqtt"]["linky"]["device"];
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$topics["linky2mqtt"]->callback = function($topic, $message)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						global $topics, $logFh, $devices, $included;
 | 
				
			||||||
 | 
						$topicName = $topic[0];
 | 
				
			||||||
 | 
						$friendlyName = $topic[1]; 			// get friendlyName
 | 
				
			||||||
 | 
						logger(INFO, sprintf(_("Icoming notification of device %s"), $topic[0], $topic[1]));
 | 
				
			||||||
 | 
						$device = & $devices[$topic[0]];
 | 
				
			||||||
 | 
						$payloadArray = json_decode($message->payload);
 | 
				
			||||||
 | 
						//print_r($payloadArray);
 | 
				
			||||||
 | 
						//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;
 | 
				
			||||||
 | 
							$device[$fn]["device"]->type = "mesure";
 | 
				
			||||||
 | 
							$device[$fn]["device"]->ieeeAddress = $payloadArray["ADSC"];
 | 
				
			||||||
 | 
							//addDevice($device[$fn], $fn, );
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						$device = & $device[$fn];
 | 
				
			||||||
 | 
						//print_r($device);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						changeDevice($topicName, $friendlyName, $device["device"], $payloadArray);
 | 
				
			||||||
 | 
						print_r($device["device"]);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					?>
 | 
				
			||||||
@@ -1,28 +1,29 @@
 | 
				
			|||||||
<?php
 | 
					<?php
 | 
				
			||||||
$topics["pws2mqtt"] = new topic;
 | 
					$topics["pws2mqtt"] = new topic;
 | 
				
			||||||
 | 
					/*$devices["pws2mqtt"]["WH2650A"]["device"] = new device;
 | 
				
			||||||
 | 
					$device = &$devices["pws2mqtt"]["WH2650A"]["device"];*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$topics["pws2mqtt"]->callback = function($topic, $message)
 | 
					$topics["pws2mqtt"]->callback = function($topic, $message)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	global $topics, $logFh, $devices, $included;
 | 
						global $topics, $logFh, $devices, $included;
 | 
				
			||||||
	$topic = explode ("/", $message->topic, 2);   	// get topic name
 | 
						$fn = $topic[1]; 			// get friendlyname
 | 
				
			||||||
	$fnTree = explode ("/" , $topic[1]); 			// get friendlyname
 | 
						logger(INFO, sprintf(_("Icoming notification of device %s => friendly name : %s"), $topic[0], $topic[1]));
 | 
				
			||||||
	echo $topic[0] . " => " . $topic[1] . EOL;
 | 
					 | 
				
			||||||
	$device = & $devices[$topic[0]];
 | 
						$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];
 | 
					 | 
				
			||||||
		//print_r($device);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	$payloadArray = json_decode($message->payload);
 | 
						$payloadArray = json_decode($message->payload);
 | 
				
			||||||
 | 
						//print_r($payloadArray);
 | 
				
			||||||
 | 
						//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;
 | 
				
			||||||
 | 
							$device[$fn]["device"]->type = $payloadArray->type;
 | 
				
			||||||
 | 
							$device[$fn]["device"]->ieeeAddress = $payloadArray->ieeeAddress;
 | 
				
			||||||
 | 
							//addDevice($device[$fn], $fn, );
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
							//print_r($device);
 | 
				
			||||||
 | 
						$device = & $device[$fn];
 | 
				
			||||||
	changeDevice($topic[0], $topic[1], $device["device"], $payloadArray);
 | 
						changeDevice($topic[0], $topic[1], $device["device"], $payloadArray);
 | 
				
			||||||
	print_r($device["device"]);
 | 
						//print_r($device["device"]);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
?>
 | 
					?>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,11 +11,13 @@ $callback = function($topic, $message)
 | 
				
			|||||||
				$topics[$topic[0]]->info = json_decode($message->payload);
 | 
									$topics[$topic[0]]->info = json_decode($message->payload);
 | 
				
			||||||
				break;
 | 
									break;
 | 
				
			||||||
			case "devices":
 | 
								case "devices":
 | 
				
			||||||
 | 
									logger(DEBUG,_("Inserting zigbee devices in DB"));
 | 
				
			||||||
				$topics[$topic[0]]->devices = json_decode($message->payload);
 | 
									$topics[$topic[0]]->devices = json_decode($message->payload);
 | 
				
			||||||
				fwrite($logFh, print_r($topics[$topic[0]]->devices, true));
 | 
									fwrite($logFh, print_r($topics[$topic[0]]->devices, true));
 | 
				
			||||||
				mkDevicesDB($topic[0], $topics[$topic[0]]->devices);
 | 
									mkDevicesDB($topic[0], $topics[$topic[0]]->devices);
 | 
				
			||||||
				break;
 | 
									break;
 | 
				
			||||||
			case "groups":
 | 
								case "groups":
 | 
				
			||||||
 | 
									logger(DEBUG,_("Inserting zigbee groups in DB"));
 | 
				
			||||||
				$topics[$topic[0]]->groups = json_decode($message->payload);
 | 
									$topics[$topic[0]]->groups = json_decode($message->payload);
 | 
				
			||||||
				mkDevicesDB($topic[0], $topics[$topic[0]]->groups, true);
 | 
									mkDevicesDB($topic[0], $topics[$topic[0]]->groups, true);
 | 
				
			||||||
				break;
 | 
									break;
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										16
									
								
								utils.php
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								utils.php
									
									
									
									
									
								
							@@ -1,19 +1,19 @@
 | 
				
			|||||||
<?php
 | 
					<?php
 | 
				
			||||||
 | 
					logger(DEBUG,"Including utils.php");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function now()
 | 
					function now()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return new DateTime("now");
 | 
						return new DateTime("now");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function notify($message)
 | 
					function farenheit2celsius($value)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	global $notificationMethods;
 | 
						return ($value - 32 / 1.8);
 | 
				
			||||||
	$result = false;
 | 
					}
 | 
				
			||||||
	foreach($notificationMethods as $value)
 | 
					
 | 
				
			||||||
	{
 | 
					function millibars($value)
 | 
				
			||||||
		$result =  $result | $value->send($message);
 | 
					{
 | 
				
			||||||
	}
 | 
						return ($value * 0.029530);
 | 
				
			||||||
	return $result;
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function mktopic($device)
 | 
					function mktopic($device)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user