a lot of bugs corrected\nrdc_wc_eclairage
This commit is contained in:
		@@ -81,7 +81,7 @@ class db extends mysqli
 | 
			
		||||
 | 
			
		||||
	function moyenne($deviceObject, $property, $time)
 | 
			
		||||
	{
 | 
			
		||||
		$query = "SELECT AVG(value) WHERE device='" . $deviceObject->ieeeAddress . "' AND property='" . $property . "' AND TIMEDIFF(NOW(), 'date') < " . $time;
 | 
			
		||||
		$query = "SELECT AVG(value) FROM logs WHERE device='" . $deviceObject->ieeeAddress . "' AND property='" . $property . "' AND TIMEDIFF(NOW(), 'date') < " . $time;
 | 
			
		||||
		if(!$this->result = $this->query($query))
 | 
			
		||||
		{
 | 
			
		||||
			logger(ERROR, _("mysql query errror: ") . $this->error, __FILE__ . ":" . __LINE__);
 | 
			
		||||
 
 | 
			
		||||
@@ -5,40 +5,45 @@ class hook
 | 
			
		||||
	public $active = true;
 | 
			
		||||
	public $initialized = false;
 | 
			
		||||
	protected $devicelist;
 | 
			
		||||
	protected $propertyInitialized;
 | 
			
		||||
 | 
			
		||||
	// list of devices we are listening to
 | 
			
		||||
	function __construct()
 | 
			
		||||
	{
 | 
			
		||||
		logger(INFO, _("Initializing hook: ") . $this->hookName);
 | 
			
		||||
		$this->installHooks();
 | 
			
		||||
		//$this->installHooks();
 | 
			
		||||
		foreach ($this->devicelist as $ieeeAddress => $property)
 | 
			
		||||
		{
 | 
			
		||||
			$this->propertyInitialized[$ieeeAddress][$property] = false;
 | 
			
		||||
		}
 | 
			
		||||
		if (method_exists($this, "init"))
 | 
			
		||||
		{
 | 
			
		||||
			$this->init();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function installHooks()
 | 
			
		||||
	function installHooks(&$indexDevices)
 | 
			
		||||
	{
 | 
			
		||||
		global $indexDevices;
 | 
			
		||||
		global $devices;
 | 
			
		||||
		$result = true;
 | 
			
		||||
		// assigne the function to the sensors devices
 | 
			
		||||
		if ($this->active === true)
 | 
			
		||||
		{
 | 
			
		||||
			foreach ($this->devicelist as $ieeeAddress => $property2change)
 | 
			
		||||
			foreach ($this->devicelist as $ieeeAddress => $property)
 | 
			
		||||
			{
 | 
			
		||||
				logger(DEBUG, _("Device: ") . $ieeeAddress, __FILE__ . ":" . __LINE__);
 | 
			
		||||
				if ($property2change[1] === false)
 | 
			
		||||
				if ($this->propertyInitialized[$ieeeAddress][$property] === false)
 | 
			
		||||
				{
 | 
			
		||||
					logger(DEBUG, _("Trying to store callback"), __FILE__ . ":" . __LINE__);
 | 
			
		||||
					if (isset($indexDevices[$ieeeAddress]))
 | 
			
		||||
					if (isset($indexDevices[$ieeeAddress]->properties[$property]["functions"]))
 | 
			
		||||
					{
 | 
			
		||||
						$property = $property2change[0];
 | 
			
		||||
						$indexDevices[$ieeeAddress]->properties[$property]["functions"][] = array($this,"callback");
 | 
			
		||||
						$property2change[1] = true;
 | 
			
		||||
						logger(DEBUG, sprintf(_("Property '%s' is initialized with callback"), $property2change[0]), __FILE__ . ":" . __LINE__);
 | 
			
		||||
						$indexDevices[$ieeeAddress]->properties[$property]["functions"][$this->hookName] = array($this,"callback");
 | 
			
		||||
						$this->propertyInitialized[$ieeeAddress][$property] = true;
 | 
			
		||||
						logger(DEBUG, sprintf(_("Property '%s' of %s is initialized with callback"), $property, $indexDevices[$ieeeAddress]->friendlyName), __FILE__ . ":" . __LINE__);
 | 
			
		||||
 | 
			
		||||
					}else
 | 
			
		||||
					{
 | 
			
		||||
						logger(WARNING, sprintf(_("Hook %s can not initialize Property '%s' of device %s"), $this->hookName, $property2change[0], $ieeeAddress), __FILE__ . ":" . __LINE__);
 | 
			
		||||
						logger(WARNING, sprintf(_("Hook %s can not initialize Property '%s' of device %s"), $this->hookName, $property, $ieeeAddress), __FILE__ . ":" . __LINE__);
 | 
			
		||||
						$result = false;
 | 
			
		||||
					}
 | 
			
		||||
				}else
 | 
			
		||||
@@ -53,12 +58,13 @@ class hook
 | 
			
		||||
				logger(INFO, $this->hookName . _(" initialized"), __FILE__ . ":" . __LINE__);
 | 
			
		||||
				//var_dump($this);
 | 
			
		||||
			}
 | 
			
		||||
		}else
 | 
			
		||||
		}/*else
 | 
			
		||||
		{
 | 
			
		||||
			$this->initialized = true;
 | 
			
		||||
			logger(INFO, $this->hookName . _("hook is disabled"), __FILE__ . ":" . __LINE__);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		}*/
 | 
			
		||||
		//print(var_export($indexDevices[$ieeeAddress],true));
 | 
			
		||||
		//storeDB($devices,"debug.devices");
 | 
			
		||||
		return $result;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -127,7 +127,7 @@ class watch
 | 
			
		||||
		return $this;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function notifyCallback(&$device, $property, $value)
 | 
			
		||||
	public function notifyCallback($device, $property, $value)
 | 
			
		||||
	{
 | 
			
		||||
		if (eval($this->function))
 | 
			
		||||
		{
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,8 @@
 | 
			
		||||
		array(RDC_SDB_WC_ECLAIRAGE, "state_l2"),
 | 
			
		||||
		array(RDC_CHAMBRE_AMBIANCE, "state"),
 | 
			
		||||
		array(RDC_CHAMBRE_ECLAIRAGE, "state_l1"),
 | 
			
		||||
		array(RDC_SDB_TEMP_HUM, "temperature"),
 | 
			
		||||
		array(RDC_SDB_RADIATEUR, "current_heating_setpoint"),
 | 
			
		||||
		array(METEO, "tempc"),
 | 
			
		||||
		array(METEO, "humidity"),
 | 
			
		||||
		array(METEO, "winddir"),
 | 
			
		||||
 
 | 
			
		||||
@@ -10,19 +10,35 @@ $deviceTable = array(
 | 
			
		||||
	"0x00124b0022ebac5c" => "RDC_SALON_MVMT2",
 | 
			
		||||
	"0x588e81fffe2cf695" => "RDC_SALON_MVMT",
 | 
			
		||||
	"0x00124b001f900753" => "RDC_ENTREE_PORTE",
 | 
			
		||||
	"0x00158d0001923c21" => "RDC_CHAMBRE_RADIATEUR",
 | 
			
		||||
	"0x04cf8cdf3c78aff0" => "RDC_SALON_LUMINOSITE",
 | 
			
		||||
	"0x588e81fffe343e8f" => "RDC_SALON_ECLAIRAGE_PANNEAU",
 | 
			
		||||
	"0x00158d0003f0f3b4" => "RDC_SDB_DOUCHE_MVMT",
 | 
			
		||||
	"0x804b50fffef31656" => "RDC_SALON_RADIATEUR",
 | 
			
		||||
	"0xbc33acfffe458c65" => "RDC_SDB_RADIATEUR",
 | 
			
		||||
	"0xa4c138b5a98db785" => "RDC_SDB_DOUCHE_MVMT",
 | 
			
		||||
	"0x842e14fffe1c0cd1" => "RDC_SDB_PLAFOND_MVMT",
 | 
			
		||||
	"0x00124b0022ec05dc" => "RDC_SDB_MVMT",
 | 
			
		||||
	"0x00158d0005c1a998" => "RDC_SDB_WC_ECLAIRAGE",
 | 
			
		||||
	"0xbc33acfffe458c65" => "RDC_SDB_RADIATEUR",
 | 
			
		||||
	"0x00158d000533c45e" => "RDC_SDB_TEMP_HUM",
 | 
			
		||||
	"0xa4c1384a2b586da9" => "RDC_WC_MVMT",
 | 
			
		||||
	"0x00124b001f90ee7e" => "ENTREE_PORTE",
 | 
			
		||||
	"0x00124b002226d9a2" => "GARAGE_PORTE",
 | 
			
		||||
	"0x00124b001f90e725" => "RDC_CHAMBRE_BAIE",
 | 
			
		||||
	"0x00124b002226e384" => "RDC_SALON_BAIE",
 | 
			
		||||
	"0xbc33acfffe4583f7" => "ETAGE_SALON_RADIATEUR",
 | 
			
		||||
//	"" => "ETAGE_CHAMBRE_RADIATEUR",
 | 
			
		||||
//	"" => "ETAGE_SDB_RADIATEUR",
 | 
			
		||||
	"0x5c0272fffec4de9e" => "ETAGE_BUREAU_RADIATEUR",
 | 
			
		||||
	"0x00158d0001a0028c" => "ETAGE_BUREAU_FENETRE",
 | 
			
		||||
	"0x00158d0001de080d" => "ETAGE_CHAMBRE_FENETRE",
 | 
			
		||||
	"0x842e14fffe8c53a5" => "ETAGE_CUISINE_PLAN_TRAVAIL_INTER",
 | 
			
		||||
	"0x680ae2fffe403f22" => "ETAGE_CUISINE_PLAN_TRAVAIL_ECLAIRAGE",
 | 
			
		||||
	"0xbc33acfffe65621b" => "ETAGE_CUISINE_PLAN_TRAVAIL_SPOT",
 | 
			
		||||
	"0x00158d0001ddefe1" => "ETAGE_ENTREE_PORTE",
 | 
			
		||||
	"0x00158d00044fd579" => "ETAGE_SALON_FENETRE",
 | 
			
		||||
	"0x00158d0004621e1f" => "ETAGE_CUISINE_FENETRE",
 | 
			
		||||
	"0x00158d0001ddefe1" => "ETAGE_PORTE_FENETRE",
 | 
			
		||||
	"0x086bd7fffe5aeab6" => "RDC_CHAMBRE_AMBIANCE",
 | 
			
		||||
	"0xbc33acfffe6561e4" => "RDC_CHAMBRE_ECLAIRAGE",
 | 
			
		||||
	"0x00124b00234484ad" => "RDC_CHAMBRE_MVMT",
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										18
									
								
								config/propertiesbytype.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								config/propertiesbytype.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
$propertyByType = array(
 | 
			
		||||
				"light" => array(
 | 
			
		||||
					"state",
 | 
			
		||||
					"brightness",
 | 
			
		||||
					"state_l1",
 | 
			
		||||
					"state_l2"
 | 
			
		||||
					)
 | 
			
		||||
				"climate" => array(
 | 
			
		||||
					"local_temperature",
 | 
			
		||||
					"value",
 | 
			
		||||
					"current_heating_setpoint",
 | 
			
		||||
					)
 | 
			
		||||
				);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
?>
 | 
			
		||||
@@ -5,18 +5,29 @@ logger(DEBUG,_("Including db_functions.php"), __FILE__ . ":" . __LINE__);
 | 
			
		||||
//to save or not to save the DB, that is the question ...
 | 
			
		||||
function storeDB($db, $filepath)
 | 
			
		||||
{
 | 
			
		||||
    $data = serialize($db);
 | 
			
		||||
    return file_put_contents($filepath, $data);
 | 
			
		||||
 }
 | 
			
		||||
	logger(DEBUG,_("Storing database ") . $filepath, __FILE__ . ":" . __LINE__);
 | 
			
		||||
	$data = serialize($db);
 | 
			
		||||
	if (file_put_contents($filepath, $data) === false)
 | 
			
		||||
	{
 | 
			
		||||
		logger(DEBUG,_("Failed storing database ") . $filepath , __FILE__ . ":" . __LINE__);
 | 
			
		||||
		return false;
 | 
			
		||||
	}else
 | 
			
		||||
	{
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function loadDB(& $db, $filepath)
 | 
			
		||||
function loadDB($filepath)
 | 
			
		||||
{
 | 
			
		||||
	logger(DEBUG,_("Loading database ") . $filepath, __FILE__ . ":" . __LINE__);
 | 
			
		||||
	$data = file_get_contents($filepath);
 | 
			
		||||
	if ($data === false)
 | 
			
		||||
	{
 | 
			
		||||
		logger(DEBUG,_("Failed loading database ") . $filepath , __FILE__ . ":" . __LINE__);
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
	$db = unserialize($data);
 | 
			
		||||
	return $db;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function mkDevicesDB($topic, $json, $group=false)
 | 
			
		||||
@@ -52,14 +63,15 @@ function mkDevicesDB($topic, $json, $group=false)
 | 
			
		||||
		{
 | 
			
		||||
			//print_r($device);
 | 
			
		||||
			$device["device"]->groupID = $jsonDevice->id;
 | 
			
		||||
			$indexDevices[$device["device"]->groupID] = & $device["device"];
 | 
			
		||||
			$indexFriendlyNames[$topic][$fn] = & $device["device"];
 | 
			
		||||
			//$indexDevices[$device["device"]->groupID] = & $device["device"];
 | 
			
		||||
			//$indexFriendlyNames[$topic][$fn] = & $device["device"];
 | 
			
		||||
		}else
 | 
			
		||||
		{
 | 
			
		||||
			addDevice($topic, $device["device"], $fn, $jsonDevice);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	$dbInit += 1;
 | 
			
		||||
	mkIndexes();
 | 
			
		||||
	fwrite($logFh, "################################START##################################################");
 | 
			
		||||
	fwrite($logFh, var_export($devices, true));
 | 
			
		||||
	fwrite($logFh, "################################END##################################################");
 | 
			
		||||
@@ -84,8 +96,8 @@ function addDevice($topic, &$device, $fn, $jsonDevice )
 | 
			
		||||
	searchPropertyValue($fn, $device, $jsonDevice, $listProperties);
 | 
			
		||||
 | 
			
		||||
	//indexing device
 | 
			
		||||
	$indexDevices[$device->ieeeAddress] = & $device;
 | 
			
		||||
	$indexFriendlyNames[$topic][$fn] = & $device;
 | 
			
		||||
	//$indexDevices[$device->ieeeAddress] = & $device;
 | 
			
		||||
	//$indexFriendlyNames[$topic][$fn] = & $device;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function searchPropertyKey($fn, &$device, $inputObject, $listPropertiesKeys)
 | 
			
		||||
@@ -102,8 +114,8 @@ function searchPropertyKey($fn, &$device, $inputObject, $listPropertiesKeys)
 | 
			
		||||
			if (!array_key_exists($string, $device->properties))
 | 
			
		||||
			{
 | 
			
		||||
				$device->properties[$string]["value"] = null;
 | 
			
		||||
			}
 | 
			
		||||
				$device->properties[$string]["functions"] = array();
 | 
			
		||||
			}
 | 
			
		||||
			foreach($inputObject as $key2 => $value2)
 | 
			
		||||
			{
 | 
			
		||||
				if ($key2 != "property")
 | 
			
		||||
@@ -162,7 +174,7 @@ function changeDevice($topic, $fn, &$device, $payloadArray)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function iterateDevice($topic, $fn, $parentDevice, &$properties, $payloadArray, $propertyTree="")
 | 
			
		||||
function iterateDevice($topic, $fn, &$parentDevice, &$properties, $payloadArray, $propertyTree="")
 | 
			
		||||
{
 | 
			
		||||
	global $changed, $mohaDB, $testMode;
 | 
			
		||||
	//if (is_a($device, "device"))			// = true if object
 | 
			
		||||
@@ -181,13 +193,16 @@ function iterateDevice($topic, $fn, $parentDevice, &$properties, $payloadArray,
 | 
			
		||||
 | 
			
		||||
		if ($valueType == "array")
 | 
			
		||||
		{
 | 
			
		||||
			logger(DEBUG,_("valueType == array"), __FILE__ . ":" . __LINE__);
 | 
			
		||||
			//logger(DEBUG,_("valueType == array"), __FILE__ . ":" . __LINE__);
 | 
			
		||||
			$propertyTree .=  $key . "/";
 | 
			
		||||
			$properties[$key] = array();
 | 
			
		||||
			if(!array_key_exists($key, $properties))
 | 
			
		||||
			{
 | 
			
		||||
				$properties[$key] = array();
 | 
			
		||||
			}
 | 
			
		||||
			iterateDevice($topic, $fn, $parentDevice, $properties[$key], $value, $propertyTree);
 | 
			
		||||
		}else
 | 
			
		||||
		{
 | 
			
		||||
			logger(DEBUG,_("valueType is ") . $valueType, __FILE__ . ":" . __LINE__);
 | 
			
		||||
			//logger(DEBUG,_("valueType is ") . $valueType, __FILE__ . ":" . __LINE__);
 | 
			
		||||
			//var_dump($properties);echo EOL;
 | 
			
		||||
			if (!array_key_exists($key, $properties))
 | 
			
		||||
			{
 | 
			
		||||
@@ -205,7 +220,7 @@ function getDevicesValues($topic)
 | 
			
		||||
{
 | 
			
		||||
	global $indexDevices, $topics;
 | 
			
		||||
	logger(DEBUG, _("getDevicesValues function" ), __FILE__ . ":" . __LINE__ );
 | 
			
		||||
	foreach($indexDevices as $device)
 | 
			
		||||
	foreach($indexDevices as &$device)
 | 
			
		||||
	{
 | 
			
		||||
		if ($device->topic == $topic)
 | 
			
		||||
		{
 | 
			
		||||
@@ -220,9 +235,10 @@ function getDevicesValues($topic)
 | 
			
		||||
				{
 | 
			
		||||
					if (array_key_exists("access", $value))
 | 
			
		||||
					{
 | 
			
		||||
						if ($value["access"] & 5)
 | 
			
		||||
						if ($value["access"] & 4)
 | 
			
		||||
						{
 | 
			
		||||
							$device->payload[$property] = "";
 | 
			
		||||
							break;
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
@@ -256,23 +272,45 @@ function changeValue(&$property, $value, &$parentDevice, $propertyTree, $key)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function mkIndexes($devices)
 | 
			
		||||
function mkIndexes()
 | 
			
		||||
{
 | 
			
		||||
	global $indexDevices, $indexFriendlyNames;
 | 
			
		||||
	global $devices, $indexDevices, $indexFriendlyNames;
 | 
			
		||||
	$device = null;
 | 
			
		||||
	logger(INFO, _("function mkIndexes"), __FILE__ . ":" . __LINE__);
 | 
			
		||||
	foreach ($devices as $key => $object)
 | 
			
		||||
	foreach ($devices as $key => &$object)
 | 
			
		||||
	{
 | 
			
		||||
		//print "======####" . $key . EOL;
 | 
			
		||||
		if (is_a($object, "device"))
 | 
			
		||||
		{
 | 
			
		||||
			//echo "==========>" . $object->friendlyName . EOL;
 | 
			
		||||
			$indexDevices[$object->ieeeAddress] = &$object;
 | 
			
		||||
			$indexFriendlyNames[$object->friendlyName] = &$object;
 | 
			
		||||
		}else
 | 
			
		||||
		{
 | 
			
		||||
			mkIndexes($object);
 | 
			
		||||
		}
 | 
			
		||||
		print "======####" . $key . EOL;
 | 
			
		||||
		$r = iterate2device($object);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function iterate2device(&$object)
 | 
			
		||||
{
 | 
			
		||||
	global $indexDevices, $indexFriendlyNames, $indexTypes;
 | 
			
		||||
	foreach ($object as $key => &$device)
 | 
			
		||||
	{
 | 
			
		||||
		if (is_a($device, "device"))
 | 
			
		||||
		{
 | 
			
		||||
 | 
			
		||||
			$object = &$device;
 | 
			
		||||
			//print("=============" . $device->friendlyName);
 | 
			
		||||
			if (!array_key_exists($object->ieeeAddress, $indexDevices))
 | 
			
		||||
			{
 | 
			
		||||
				//print("============>");
 | 
			
		||||
				$indexDevices[$object->ieeeAddress] = &$object;
 | 
			
		||||
				$indexFriendlyNames[$object->topic][$object->friendlyName] = &$object;
 | 
			
		||||
				if (property_exists($object, "type"))
 | 
			
		||||
				{
 | 
			
		||||
					$indexTypes[$object->type][] = &$object;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			return true;
 | 
			
		||||
		}else
 | 
			
		||||
		{
 | 
			
		||||
			iterate2device($device);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
?>
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,7 @@ function checkEvents()
 | 
			
		||||
	$oldLevel = $logLevel;
 | 
			
		||||
	$logLevel = DEBUG;
 | 
			
		||||
	$exception = false;
 | 
			
		||||
	foreach ($events as $key => $event)
 | 
			
		||||
	foreach ($events as $key => &$event)
 | 
			
		||||
	{
 | 
			
		||||
		$now = now();
 | 
			
		||||
		if (!empty($event->startDatetime))
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ class availability
 | 
			
		||||
	private function iterate()
 | 
			
		||||
	{
 | 
			
		||||
		global $indexDevices;
 | 
			
		||||
		foreach ($indexDevices as $value)
 | 
			
		||||
		foreach ($indexDevices as &$value)
 | 
			
		||||
		{
 | 
			
		||||
			$value->properties["availability"]["functions"][] = array($this,"callback");
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@ class etage_plan_travail_eclairage  extends hook
 | 
			
		||||
	public $active = false;		//enable/disable hook (true => enabled)
 | 
			
		||||
	public $delay = 3;				// amount of time in $timeunit
 | 
			
		||||
	public $timeUnit = "hour";	// unit of time for delay, second, minute, hour, day, week, month, year
 | 
			
		||||
	protected $devicelist = array(ETAGE_CUISINE_PLAN_TRAVAIL_ECLAIRAGE => array("state", false));
 | 
			
		||||
	protected $devicelist = array(ETAGE_CUISINE_PLAN_TRAVAIL_ECLAIRAGE => "state");
 | 
			
		||||
 | 
			
		||||
	// callback fonction. Is called with these 3 parameters
 | 
			
		||||
	// $device 		-> calling device
 | 
			
		||||
@@ -14,6 +14,7 @@ class etage_plan_travail_eclairage  extends hook
 | 
			
		||||
	// $value 		-> value of the property
 | 
			
		||||
	public function callBack($device, $property, $value)
 | 
			
		||||
	{
 | 
			
		||||
		logger(DEBUG, sprintf(_("property=%s, value=%s"), $property, $value), __FILE__ . ":" . __LINE__);
 | 
			
		||||
		// here your code
 | 
			
		||||
		if($value == "ON")  // ON
 | 
			
		||||
		{
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										128
									
								
								hooks/scripts/radiateurs.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										128
									
								
								hooks/scripts/radiateurs.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,128 @@
 | 
			
		||||
<?php
 | 
			
		||||
class radiateurs extends hook
 | 
			
		||||
{
 | 
			
		||||
	public $hookName = "radiateurs";
 | 
			
		||||
	public $active = false;
 | 
			
		||||
 | 
			
		||||
	/*			already defined in hook class			*/
 | 
			
		||||
	// public $active = true;
 | 
			
		||||
	//public $initlialized = false;
 | 
			
		||||
	public $minTemp = 5;
 | 
			
		||||
	public $delay = 3;				// amount of time in $timeunit
 | 
			
		||||
	public $delayManual = 15;		// 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
 | 
			
		||||
 | 
			
		||||
	// devicelist[$ieeAddress][0] => property to watch
 | 
			
		||||
	// devicelist[$ieeAddress][1] => initialized = true
 | 
			
		||||
	protected $devicelist = array(
 | 
			
		||||
		RDC_CHAMBRE_BAIE => "contact",
 | 
			
		||||
		RDC_SALON_BAIE => "contact",
 | 
			
		||||
		RDC_ENTREE_PORTE => "contact",
 | 
			
		||||
		ETAGE_ENTREE_PORTE => "contact",
 | 
			
		||||
		ETAGE_CUISINE_FENETRE => "contact",
 | 
			
		||||
		ETAGE_SALON_FENETRE => "contact",
 | 
			
		||||
		ETAGE_SALON_PORTE_FENETRE => "contact",
 | 
			
		||||
		ETAGE_CHAMBRE_FENETRE => "contact",
 | 
			
		||||
		ETAGE_BUREAU_FENETRE => "contact"
 | 
			
		||||
	);
 | 
			
		||||
 | 
			
		||||
	PROTECTED $hvac = array(
 | 
			
		||||
		RDC_CHAMBRE_BAIE => RDC_CHAMBRE_RADIATEUR,
 | 
			
		||||
		RDC_SALON_BAIE => RDC_SALON_RADIATEUR,
 | 
			
		||||
		RDC_ENTREE_PORTE => RDC_SALON_RADIATEUR,
 | 
			
		||||
		RDC_GARAGE_PORTE => RDC_SDB_RADIATEUR,
 | 
			
		||||
		ETAGE_ENTREE_PORTE => ETAGE_SALON_RADIATEUR,
 | 
			
		||||
		ETAGE_CUISINE_FENETRE => ETAGE_SALON_RADIATEUR,
 | 
			
		||||
		ETAGE_SALON_FENETRE => ETAGE_SALON_RADIATEUR,
 | 
			
		||||
		ETAGE_SALON_PORTE_FENETRE => ETAGE_SALON_RADIATEUR,
 | 
			
		||||
//		ETAGE_CHAMBRE_FENETRE => ETAGE_CHAMBRE_RADIATEUR,
 | 
			
		||||
		ETAGE_BUREAU_FENETRE => ETAGE_BUREAU_RADIATEUR,
 | 
			
		||||
//		ETAGE_SDB_FENETRE => ETAGE_SDB_RADIATEUR
 | 
			
		||||
	);
 | 
			
		||||
 | 
			
		||||
	protected $prevTemp = array(
 | 
			
		||||
		RDC_CHAMBRE_RADIATEUR => 0,
 | 
			
		||||
		RDC_SALON_RADIATEUR => 0,
 | 
			
		||||
		RDC_SDB_RADIATEUR => 0,
 | 
			
		||||
		ETAGE_SALON_RADIATEUR => 0,
 | 
			
		||||
		ETAGE_BUREAU_RADIATEUR => 0
 | 
			
		||||
//		ETAGE_SDB_RADIATEUR => 0,
 | 
			
		||||
//		ETAGE_CHAMBRE_RADIATEUR => 0
 | 
			
		||||
	);
 | 
			
		||||
 | 
			
		||||
	// callback fonction. Is called with these 3 parameters
 | 
			
		||||
	public function callBack(&$device, $property, $value)
 | 
			
		||||
	{
 | 
			
		||||
		global $indexDevices;
 | 
			
		||||
		$now = date("MM");
 | 
			
		||||
		if ($now <= 5 or $now >= 11)
 | 
			
		||||
		{
 | 
			
		||||
			if ($value === false)
 | 
			
		||||
			{
 | 
			
		||||
				send($indexDevices[$hvac[$device->ieeeAddress]], true);
 | 
			
		||||
	/*			switch ($device->$ieeeAdress)
 | 
			
		||||
				{
 | 
			
		||||
					send($indexDevices[$hvac[$device->ieeeAddress]], false);
 | 
			
		||||
					case RDC_CHAMBRE_BAIE:
 | 
			
		||||
						break;
 | 
			
		||||
					case RDC_SALON_BAIE:
 | 
			
		||||
					case RDC_ENTREE_PORTE:
 | 
			
		||||
						break;
 | 
			
		||||
					case RDC_GARAGE_PORTE:
 | 
			
		||||
						break;
 | 
			
		||||
					case ETAGE_CUISINE_FENETRE:
 | 
			
		||||
					case ETAGE_SALON_FENETRE:
 | 
			
		||||
					case ETAGE_SALON_PORTE_FENETRE:
 | 
			
		||||
					case ETAGE_ENTREE_PORTE:
 | 
			
		||||
 | 
			
		||||
						break;
 | 
			
		||||
					case ETAGE_CHAMBRE_FENETRE:
 | 
			
		||||
 | 
			
		||||
						break;
 | 
			
		||||
					case ETAGE_BUREAU_FENETRE:
 | 
			
		||||
 | 
			
		||||
						break;
 | 
			
		||||
				}*/
 | 
			
		||||
			}else
 | 
			
		||||
			{
 | 
			
		||||
				send($indexDevices[$hvac[$device->ieeeAddress]], false);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function send($device, $state)
 | 
			
		||||
	{
 | 
			
		||||
		global $indexDevices;
 | 
			
		||||
		if ($state === false)
 | 
			
		||||
		{
 | 
			
		||||
			$t = getValue($device, "current_heating_setpoint");
 | 
			
		||||
			if ($t != $minTemp)
 | 
			
		||||
			{
 | 
			
		||||
				$prevTemp[$device] = getValue($device, "current_heating_setpoint");
 | 
			
		||||
			}
 | 
			
		||||
		}else
 | 
			
		||||
		{
 | 
			
		||||
			$r = array_keys($hvac, $device->ieeeAddress);
 | 
			
		||||
			foreach($r as $value)
 | 
			
		||||
			{
 | 
			
		||||
				if (getValue($indexDevices[$value], "contact") === true)
 | 
			
		||||
				{
 | 
			
		||||
					$flag = true;
 | 
			
		||||
					break;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			if ($flag === false)
 | 
			
		||||
			{
 | 
			
		||||
				$msg = array("current_heating_setpoint" => (!empty($prevTemp[$device])?$prevTemp[$device]:19));
 | 
			
		||||
				logger(INFO, sprintf(_("publishing message: %s to %s"), json_encode($msg), $deviceTarget->friendlyName), __FILE__ . ":" . __LINE__);
 | 
			
		||||
				$deviceTarget->payload = $msg;
 | 
			
		||||
				$deviceTarget->set();
 | 
			
		||||
				$deviceTarget->method = AUTO;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
$hooks["radiateurs"] = new radiateurs();
 | 
			
		||||
 | 
			
		||||
?>
 | 
			
		||||
@@ -9,10 +9,10 @@ class rdc_chambre_eclairage extends hook
 | 
			
		||||
	public $luminance_min = 60;
 | 
			
		||||
	public $luminance_max = 3000;
 | 
			
		||||
	protected $devicelist = array(
 | 
			
		||||
		RDC_CHAMBRE_AMBIANCE => array("state", false),		// "ON"/"OFF"
 | 
			
		||||
		RDC_CHAMBRE_ECLAIRAGE => array("state_l1", false),	// "ON"/"OFF"
 | 
			
		||||
		RDC_CHAMBRE_MVMT => array("occupancy", false),
 | 
			
		||||
		RDC_CHAMBRE_ARMOIRE_GAUCHE => array("contact", false)
 | 
			
		||||
		RDC_CHAMBRE_AMBIANCE => "state",		// "ON"/"OFF"
 | 
			
		||||
		RDC_CHAMBRE_ECLAIRAGE => "state_l1",	// "ON"/"OFF"
 | 
			
		||||
		RDC_CHAMBRE_MVMT => "occupancy",
 | 
			
		||||
		RDC_CHAMBRE_ARMOIRE_GAUCHE => "contact"
 | 
			
		||||
	);
 | 
			
		||||
 | 
			
		||||
	// callback fonction. Is called with these 3 parameters
 | 
			
		||||
@@ -25,9 +25,10 @@ class rdc_chambre_eclairage extends hook
 | 
			
		||||
		$lux = $indexDevices[RDC_CHAMBRE_LUMINOSITE]->properties["illuminance_lux"];
 | 
			
		||||
		$targetAmbiance = $indexDevices[RDC_CHAMBRE_AMBIANCE];
 | 
			
		||||
		$targetEclairage = $indexDevices[RDC_CHAMBRE_ECLAIRAGE];
 | 
			
		||||
 | 
			
		||||
		logger(DEBUG, sprintf(_("property=%s, value=%s"), $property, $value), __FILE__ . ":" . __LINE__);
 | 
			
		||||
		if ($property == "occupancy" and $value == ON)
 | 
			
		||||
		{
 | 
			
		||||
			logger(DEBUG, _("CASE: occupancy"), __FILE__ . ":" . __LINE__);
 | 
			
		||||
			$this->send($targetAmbiance, "state", "ON", "OFF", AUTO);
 | 
			
		||||
		}elseif ($property == "contact")
 | 
			
		||||
		{
 | 
			
		||||
@@ -42,7 +43,7 @@ class rdc_chambre_eclairage extends hook
 | 
			
		||||
		logger (INFO, sprintf(_("%s: notification received from MQTT from %s => parameter: %s value: %s"), $this->hookName, $device->friendlyName, $property, bool2string($value)), __FILE__ . ":" . __LINE__);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private function send($deviceObject, $property, $state, $delayState = false, $method = MANUAL)
 | 
			
		||||
	private function send(&$deviceObject, $property, $state, $delayState = false, $method = MANUAL)
 | 
			
		||||
	{
 | 
			
		||||
		global $indexDevices;
 | 
			
		||||
		$msg = array($property => $state);
 | 
			
		||||
 
 | 
			
		||||
@@ -5,26 +5,28 @@ class alerte_intrusion extends hook
 | 
			
		||||
	public $active = true;
 | 
			
		||||
 | 
			
		||||
	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));
 | 
			
		||||
		ENTREE_PORTE => "contact",
 | 
			
		||||
		GARAGE_PORTE => "contact",
 | 
			
		||||
		RDC_CHAMBRE_BAIE => "contact",
 | 
			
		||||
		RDC_SALON_BAIE => "contact"
 | 
			
		||||
		);
 | 
			
		||||
 | 
			
		||||
	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
 | 
			
		||||
 | 
			
		||||
	// callback fonction. Is called with these 4 parameters
 | 
			
		||||
	public function callBack($device, $param, $value)
 | 
			
		||||
	public function callBack($device, $property, $value)
 | 
			
		||||
	{
 | 
			
		||||
		switch($param)
 | 
			
		||||
 | 
			
		||||
		switch($property)
 | 
			
		||||
		{
 | 
			
		||||
			case "contact":
 | 
			
		||||
				if ($value == false)
 | 
			
		||||
				{
 | 
			
		||||
					logger(ALERT, sprintf(_("%s est ouverte alors que personne n'est présent"), $device->friendlyName), __FILE__ . ":" . __LINE__);
 | 
			
		||||
				}
 | 
			
		||||
				break;
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -6,10 +6,10 @@ class rdc_salon_eclairage extends hook
 | 
			
		||||
	public $active = true;
 | 
			
		||||
	// list of devices we are listening to
 | 
			
		||||
	protected $devicelist = array(
 | 
			
		||||
		RDC_SALON_MVMT => array("occupancy", false),
 | 
			
		||||
		RDC_SALON_MVMT2 => array("occupancy", false),
 | 
			
		||||
		RDC_ENTREE_PORTE => array("contact", false),
 | 
			
		||||
		RDC_SALON_LUMINOSITE => array("illuminance_lux", false)
 | 
			
		||||
		RDC_SALON_MVMT => "occupancy",
 | 
			
		||||
		RDC_SALON_MVMT2 => "occupancy",
 | 
			
		||||
		RDC_ENTREE_PORTE => "contact",
 | 
			
		||||
		RDC_SALON_LUMINOSITE => "illuminance_lux"
 | 
			
		||||
		);
 | 
			
		||||
 | 
			
		||||
	public $delay = 3;				// amount of time in $timeunit
 | 
			
		||||
@@ -18,7 +18,7 @@ class rdc_salon_eclairage extends hook
 | 
			
		||||
	public $luminance_max = 100;
 | 
			
		||||
 | 
			
		||||
	// callback fonction. Is called with these 4 parameters
 | 
			
		||||
	public function callBack(&$device, $param, $value)
 | 
			
		||||
	public function callBack($device, $param, $value)
 | 
			
		||||
	{
 | 
			
		||||
		global $indexDevices;
 | 
			
		||||
		logger(INFO, _("hook : rdc_salon_eclairage"), __FILE__ . ":" . __LINE__);
 | 
			
		||||
@@ -33,12 +33,17 @@ class rdc_salon_eclairage extends hook
 | 
			
		||||
			case "occupancy":
 | 
			
		||||
				logger(INFO, _("CASE: Occupancy => ") . bool2string($value), __FILE__ . ":" . __LINE__);
 | 
			
		||||
				//print_r(getValue(RDC_SALON_LUMINOSITE, "illuminance_lux"));
 | 
			
		||||
				if ($value == ON and getValue(RDC_SALON_LUMINOSITE, "illuminance_lux") <= $this->luminance_min)
 | 
			
		||||
				if ($value == ON)
 | 
			
		||||
				{
 | 
			
		||||
					logger(INFO, _("setting to ON"), __FILE__ . ":" . __LINE__);
 | 
			
		||||
					$this->send($deviceTarget, "ON", null, AUTO);
 | 
			
		||||
					removeEvent($deviceTarget, "state", "OFF");
 | 
			
		||||
				}elseif ($value == OFF)
 | 
			
		||||
					$illuminance = getValue(RDC_SALON_LUMINOSITE, "illuminance_lux");
 | 
			
		||||
					logger(INFO, _("illuminance value : ") . $illuminance, __FILE__ . ":" . __LINE__);
 | 
			
		||||
					if ($illuminance <= $this->luminance_min)
 | 
			
		||||
					{
 | 
			
		||||
						logger(INFO, _("setting to ON"), __FILE__ . ":" . __LINE__);
 | 
			
		||||
						$this->send($deviceTarget, "ON", null, AUTO);
 | 
			
		||||
						removeEvent($deviceTarget, "state", "OFF");
 | 
			
		||||
					}
 | 
			
		||||
				}else
 | 
			
		||||
				{
 | 
			
		||||
					logger(INFO, _("Value is OFF"), __FILE__ . ":" . __LINE__);
 | 
			
		||||
					if (getValue(RDC_SALON_MVMT, "occupancy") == OFF and (getValue(RDC_SALON_MVMT2, "occupancy") == OFF))
 | 
			
		||||
@@ -74,7 +79,7 @@ class rdc_salon_eclairage extends hook
 | 
			
		||||
					{
 | 
			
		||||
						setDelay($deviceTarget, $this->delay, $this->timeUnit, "state", "OFF", true);
 | 
			
		||||
					}
 | 
			
		||||
				}elseif ($value <= $this->luminance_min and (getValue(RDC_SALON_MVMT, "occupancy") == ON OR getValue(RDC_SALON_MVMT2,"occupancy") == ON))
 | 
			
		||||
				}elseif ($value <= $this->luminance_min and (getValue(RDC_SALON_MVMT, "occupancy") == ON || getValue(RDC_SALON_MVMT2,"occupancy") == ON))
 | 
			
		||||
				{
 | 
			
		||||
					logger(INFO, _("illuminance < min and movement detected"), __FILE__ . ":" . __LINE__);
 | 
			
		||||
					$this->send($deviceTarget, "ON", null, AUTO);
 | 
			
		||||
 
 | 
			
		||||
@@ -17,10 +17,10 @@ class rdc_sdb_eclairage extends hook
 | 
			
		||||
	// devicelist[$ieeAddress][0] => property to watch
 | 
			
		||||
	// devicelist[$ieeAddress][1] => initialized = true
 | 
			
		||||
	protected $devicelist = array(
 | 
			
		||||
		//RDC_SDB_DOUCHE_MVMT => array("occupancy", false),
 | 
			
		||||
		RDC_SDB_PLAFOND_MVMT => array("occupancy", false),
 | 
			
		||||
		RDC_SDB_MVMT => array("occupancy", false),
 | 
			
		||||
		RDC_SDB_WC_ECLAIRAGE => array("state_l1", false)
 | 
			
		||||
		RDC_SDB_DOUCHE_MVMT => "occupancy",
 | 
			
		||||
		RDC_SDB_PLAFOND_MVMT => "occupancy",
 | 
			
		||||
		RDC_SDB_MVMT => "occupancy",
 | 
			
		||||
		RDC_SDB_WC_ECLAIRAGE => "state_l1"
 | 
			
		||||
	);
 | 
			
		||||
 | 
			
		||||
	// callback fonction. Is called with these 3 parameters
 | 
			
		||||
@@ -29,10 +29,11 @@ class rdc_sdb_eclairage extends hook
 | 
			
		||||
		global $indexDevices;
 | 
			
		||||
		//var_dump($value);
 | 
			
		||||
		$deviceTarget = $indexDevices[RDC_SDB_WC_ECLAIRAGE];
 | 
			
		||||
 | 
			
		||||
		logger(DEBUG, sprintf(_("property=%s, value=%s"), $property, $value), __FILE__ . ":" . __LINE__);
 | 
			
		||||
		switch($property)
 | 
			
		||||
		{
 | 
			
		||||
			case "occupancy":
 | 
			
		||||
				logger(DEBUG, _("CASE: occupancy"), __FILE__ . ":" . __LINE__);
 | 
			
		||||
				if ($value == ON)
 | 
			
		||||
				{
 | 
			
		||||
					if (getValue($deviceTarget->ieeeAddress, "state_l1") != "ON")
 | 
			
		||||
@@ -44,6 +45,7 @@ class rdc_sdb_eclairage extends hook
 | 
			
		||||
				}
 | 
			
		||||
				break;
 | 
			
		||||
			case "state_l1":
 | 
			
		||||
				logger(DEBUG, _("CASE: state_l1"), __FILE__ . ":" . __LINE__);
 | 
			
		||||
				if ($value == "ON")
 | 
			
		||||
				{
 | 
			
		||||
					setDelay($deviceTarget, $this->delay, $this->timeUnit, "state_l1", "OFF", true);
 | 
			
		||||
 
 | 
			
		||||
@@ -7,16 +7,16 @@ class rdc_store extends hook
 | 
			
		||||
	public $timer = 0;
 | 
			
		||||
	public $luminance_min = 60;
 | 
			
		||||
	public $luminance_max = 3000;
 | 
			
		||||
	public $storeDownTime = 20;
 | 
			
		||||
	public $storeUpTime = 25;
 | 
			
		||||
	public $storeDownTime = 38;
 | 
			
		||||
	public $storeUpTime = 41;
 | 
			
		||||
	protected $storeLevel;
 | 
			
		||||
 | 
			
		||||
	protected $propertyInitialized =array();
 | 
			
		||||
	protected $devicelist = array(
 | 
			
		||||
		RDC_EXTERIEUR_LUMINOSITE => array("illuminance_lux", false),		// "ON"/"OFF"
 | 
			
		||||
		METEO => array("rainin", false),
 | 
			
		||||
		RDC_EXTERIEUR_LUMINOSITE => "illuminance_lux",		// "ON"/"OFF"
 | 
			
		||||
		METEO => "rainin",
 | 
			
		||||
		//METEO => array("solarradiation", false),
 | 
			
		||||
		METEO => array("windspeedkmh", false),
 | 
			
		||||
		METEO => array("windgustkmh", false)
 | 
			
		||||
		METEO => "windspeedkmh",
 | 
			
		||||
		METEO => "windgustkmh"
 | 
			
		||||
	);
 | 
			
		||||
 | 
			
		||||
	// callback fonction. Is called with these 3 parameters
 | 
			
		||||
@@ -27,22 +27,50 @@ class rdc_store extends hook
 | 
			
		||||
	{
 | 
			
		||||
		global $mohaDB, $devices, $indexDevices;
 | 
			
		||||
 | 
			
		||||
		logger(DEBUG, "Callback : RDC_STORE", __FILE__ . ":" . __LINE__);
 | 
			
		||||
		$rain = 0;
 | 
			
		||||
		$exterieur_lux = 0;
 | 
			
		||||
		$rafale = 0;
 | 
			
		||||
		$soleil = 0;
 | 
			
		||||
		$storeDevice = $indexDevices[RDC_STORE];
 | 
			
		||||
		$storeLevel = $storeDevice->properties["position"];
 | 
			
		||||
		$exterieur_lux =  $mohaDB->moyenne($indexDevices[RDC_EXTERIEUR_LUMINOSITE], "illuminance_lux", 15);
 | 
			
		||||
		$rain = $indexDevices[METEO]->properties["rainin"];
 | 
			
		||||
		$rafale = $mohaDB->moyenne($indexDevices[METEO], "windgustkmh", 12);
 | 
			
		||||
		$soleil = $mohaDB->moyenne($indexDevices[METEO], "solarradiation", 12);
 | 
			
		||||
		if (array_key_exists("position", $storeDevice->properties))
 | 
			
		||||
		{
 | 
			
		||||
			$storeLevel = $storeDevice->properties["position"];
 | 
			
		||||
		}else
 | 
			
		||||
		{
 | 
			
		||||
			return true;
 | 
			
		||||
		}
 | 
			
		||||
		if (array_key_exists("illuminance_lux", $indexDevices[RDC_EXTERIEUR_LUMINOSITE]->properties))
 | 
			
		||||
		{
 | 
			
		||||
			$exterieur_lux = $mohaDB->moyenne($indexDevices[RDC_EXTERIEUR_LUMINOSITE], "illuminance_lux", 15);
 | 
			
		||||
		}
 | 
			
		||||
		if (array_key_exists("rainin", $indexDevices[METEO]->properties))
 | 
			
		||||
		{
 | 
			
		||||
			$rain = $indexDevices[METEO]->properties["rainin"];
 | 
			
		||||
		}
 | 
			
		||||
		if (array_key_exists("windgustkmh", $indexDevices[METEO]->properties))
 | 
			
		||||
		{
 | 
			
		||||
			$rafale = $mohaDB->moyenne($indexDevices[METEO], "windgustkmh", 12);
 | 
			
		||||
		}
 | 
			
		||||
		if (array_key_exists("solarradiation", $indexDevices[METEO]->properties))
 | 
			
		||||
		{
 | 
			
		||||
			$soleil = $mohaDB->moyenne($indexDevices[METEO], "solarradiation", 12);
 | 
			
		||||
		}
 | 
			
		||||
		logger(DEBUG, sprintf(_("property=%s, value=%s"), $property, $value), __FILE__ . ":" . __LINE__);
 | 
			
		||||
		if ($rafale >= 6 or $rain != 0)
 | 
			
		||||
		{
 | 
			
		||||
			$maxLevel = 0;
 | 
			
		||||
		}else
 | 
			
		||||
		{
 | 
			
		||||
			$maxLevel = 100 / $rafale;
 | 
			
		||||
			if ($rafale != 0)
 | 
			
		||||
			{
 | 
			
		||||
				$maxLevel = 100 / $rafale;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		switch ($property)
 | 
			
		||||
		{
 | 
			
		||||
		case "illuminance_lux":
 | 
			
		||||
			logger(DEBUG, "CASE: illuminance_lux:" . $value, __FILE__ . ":" . __LINE__);
 | 
			
		||||
			if ($exterieur_lux > 3000)
 | 
			
		||||
			{
 | 
			
		||||
				if ($rain == 0 and $maxLevel != 0)
 | 
			
		||||
@@ -62,26 +90,29 @@ class rdc_store extends hook
 | 
			
		||||
			}
 | 
			
		||||
			break;
 | 
			
		||||
		case "rainin":
 | 
			
		||||
			logger(DEBUG, "CASE: rainin:" . $value, __FILE__ . ":" . __LINE__);
 | 
			
		||||
			$this->close("Pluie");
 | 
			
		||||
			break;
 | 
			
		||||
		case "windgustkmh";
 | 
			
		||||
			logger(DEBUG, "CASE: windgustkmh:" . $value, __FILE__ . ":" . __LINE__);
 | 
			
		||||
		case "windspeedkmh":
 | 
			
		||||
			logger(DEBUG, "CASE: windspeedkmh:" . $value, __FILE__ . ":" . __LINE__);
 | 
			
		||||
			if($value > 50)
 | 
			
		||||
			{
 | 
			
		||||
				$this->close("Trop de vent");
 | 
			
		||||
			}elseif ($value > 40 and  $level > 20)
 | 
			
		||||
			}elseif ($value > 40 and  $this->storeLevel > 20)
 | 
			
		||||
			{
 | 
			
		||||
				$this->maxLevel = 20;
 | 
			
		||||
				$this->send(20);
 | 
			
		||||
			}elseif ($value > 30 and  $level > 40)
 | 
			
		||||
			}elseif ($value > 30 and  $this->storeLevel > 40)
 | 
			
		||||
			{
 | 
			
		||||
				$this->maxLevel = 40;
 | 
			
		||||
				$this->send(40);
 | 
			
		||||
			}elseif ($value >20 and  $level > 60)
 | 
			
		||||
			}elseif ($value >20 and  $this->storeLevel > 60)
 | 
			
		||||
			{
 | 
			
		||||
				$this->maxLevel = 60;
 | 
			
		||||
				$this->send(60);
 | 
			
		||||
			}elseif ($value >10 and  $level > 80)
 | 
			
		||||
			}elseif ($value >10 and  $this->storeLevel > 80)
 | 
			
		||||
			{
 | 
			
		||||
				$this->maxLevel = 80;
 | 
			
		||||
				$this->send(80);
 | 
			
		||||
@@ -91,6 +122,8 @@ class rdc_store extends hook
 | 
			
		||||
			}
 | 
			
		||||
			$this->close("Fortes rafales de vent");
 | 
			
		||||
			break;
 | 
			
		||||
		default:
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -98,7 +131,8 @@ class rdc_store extends hook
 | 
			
		||||
	{
 | 
			
		||||
		if ($this->storeLevel < $level)
 | 
			
		||||
		{
 | 
			
		||||
			$this->send($level);
 | 
			
		||||
			logger(DEBUG, "Open store :" . $level, __FILE__ . ":" . __LINE__);
 | 
			
		||||
			$this->send(100 - $level);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -106,7 +140,9 @@ class rdc_store extends hook
 | 
			
		||||
	{
 | 
			
		||||
		if ($this->storeLevel != 0)
 | 
			
		||||
		{
 | 
			
		||||
			logger(DEBUG, "Close store :" . $level, __FILE__ . ":" . __LINE__);
 | 
			
		||||
			print ( "store fermé " . $reason);
 | 
			
		||||
			$this->send(100);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -117,8 +153,7 @@ class rdc_store extends hook
 | 
			
		||||
		$msg = array("position" => $level);
 | 
			
		||||
		logger(INFO, sprintf(_("publishing message: %s to %s"), json_encode($msg), $deviceObject->friendlyName), __FILE__ . ":" . __LINE__);
 | 
			
		||||
		$deviceObject->payload = $msg;
 | 
			
		||||
		$deviceObject->set();
 | 
			
		||||
		$deviceObject->method = AUTO;
 | 
			
		||||
		$deviceObject->set(AUTO);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -4,20 +4,24 @@ class rdc_wc_eclairage extends hook
 | 
			
		||||
{
 | 
			
		||||
	public $hookName = "rdc_wc_eclairage";
 | 
			
		||||
 | 
			
		||||
	protected $devicelist = array(RDC_SDB_WC_ECLAIRAGE => array("state_l2", false));
 | 
			
		||||
	protected $devicelist = array(
 | 
			
		||||
				RDC_SDB_WC_ECLAIRAGE => "state_l2",
 | 
			
		||||
				RDC_WC_MVMT => "occupancy"
 | 
			
		||||
				);
 | 
			
		||||
 | 
			
		||||
	public $delay = 3;				// amount of time in $timeunit
 | 
			
		||||
	public $delayManual = 8;		// amount of time in $timeunit for manual mode
 | 
			
		||||
	public $timeUnit = "minute";	// unit of time for delay, second, minute, day, week, month, year
 | 
			
		||||
 | 
			
		||||
	// callback fonction. Is called with these 4 parameters
 | 
			
		||||
	public function callBack($device, $property, $value)
 | 
			
		||||
	public function callBack(&$device, $property, $value)
 | 
			
		||||
	{
 | 
			
		||||
		global $indexDevices;
 | 
			
		||||
		//var_dump($value);
 | 
			
		||||
		switch($property)
 | 
			
		||||
		{
 | 
			
		||||
			case "state_l2":
 | 
			
		||||
				logger(DEBUG, _("CASE: state_l2"), __FILE__ . ":" . __LINE__);
 | 
			
		||||
				if ($value == "ON")
 | 
			
		||||
				{
 | 
			
		||||
					setDelay($device, $this->delayManual, $this->timeUnit, "state_l2", "OFF", true);
 | 
			
		||||
@@ -27,9 +31,29 @@ class rdc_wc_eclairage extends hook
 | 
			
		||||
					deleteEvent(searchEvent($device, "state_l2", "OFF"));
 | 
			
		||||
				}
 | 
			
		||||
				break;
 | 
			
		||||
			case "occupancy":
 | 
			
		||||
				logger(DEBUG, _("CASE: occupancy"), __FILE__ . ":" . __LINE__);
 | 
			
		||||
				if ($value == true)
 | 
			
		||||
				{
 | 
			
		||||
					$this->send("ON");
 | 
			
		||||
				}
 | 
			
		||||
		}
 | 
			
		||||
		logger (INFO, sprintf(_("%s: notification received from MQTT from %s => parameter: %s value: %s"), $this->hookName, $device->friendlyName, $property, bool2string($value)), __FILE__ . ":" . __LINE__);
 | 
			
		||||
	}
 | 
			
		||||
	private function send($state)
 | 
			
		||||
	{
 | 
			
		||||
		global $indexDevices;
 | 
			
		||||
		$deviceObject = $indexDevices[RDC_SDB_WC_ECLAIRAGE];
 | 
			
		||||
		$msg = array("state_l2" => $state);
 | 
			
		||||
		logger(INFO, sprintf(_("publishing message: %s to %s"), json_encode($msg), $deviceObject->friendlyName), __FILE__ . ":" . __LINE__);
 | 
			
		||||
		$deviceObject->payload = $msg;
 | 
			
		||||
		$deviceObject->set(null);
 | 
			
		||||
		if ($deviceObject->method != MANUAL)
 | 
			
		||||
		{
 | 
			
		||||
			$deviceObject->method = AUTO;
 | 
			
		||||
		}
 | 
			
		||||
		setDelay($deviceObject, $this->delay, $this->timeUnit, "state_l2", "OFF", true);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
$hooks["rdc_wc_eclairage"] = new rdc_wc_eclairage();
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										93
									
								
								moha.php
									
									
									
									
									
								
							
							
						
						
									
										93
									
								
								moha.php
									
									
									
									
									
								
							@@ -20,6 +20,7 @@ $mids = array();				// list of message IDs
 | 
			
		||||
$devices = array();				// array of device objetcs
 | 
			
		||||
$indexDevices = array();		// index of devices by ieee_address
 | 
			
		||||
$indexFriendlyNames = array();	// index of devices by freindly name
 | 
			
		||||
$indexTypes = array();			// index of devices by type
 | 
			
		||||
$hooksList = array();			// list of hooks to be included
 | 
			
		||||
$hooks = array();				// array of hooks
 | 
			
		||||
$notificationMethods = array();	// array of notification methods objects
 | 
			
		||||
@@ -75,7 +76,7 @@ function notify($message)
 | 
			
		||||
function logger($level, $log, $pos = "", $notif = true)
 | 
			
		||||
{
 | 
			
		||||
	global $logFh, $logLevel, $notificationLevel, $logLevels;
 | 
			
		||||
	$logString = date("c") . ' ' . $logLevels[$level] . " " ;
 | 
			
		||||
	$logString = $logLevels[$level] . " " ;
 | 
			
		||||
	if ($pos !== false)
 | 
			
		||||
	{
 | 
			
		||||
		$logString .= $pos;
 | 
			
		||||
@@ -83,8 +84,8 @@ function logger($level, $log, $pos = "", $notif = true)
 | 
			
		||||
	$logString .= " - " . $log;
 | 
			
		||||
	if ($level & $logLevel)
 | 
			
		||||
	{
 | 
			
		||||
		fwrite($logFh, $logString . EOL);
 | 
			
		||||
		print ($logString . EOL);
 | 
			
		||||
		fwrite($logFh, date("c") . ' ' . $logString . EOL);
 | 
			
		||||
		print ("MOHA-" . $logString . EOL);
 | 
			
		||||
	}
 | 
			
		||||
	$test = $level & $notificationLevel;
 | 
			
		||||
	if (($test != 0) and ($notif === true))
 | 
			
		||||
@@ -135,9 +136,13 @@ function endMoha()
 | 
			
		||||
	$x = 0;
 | 
			
		||||
 | 
			
		||||
	logger(WARNING, _("moha is ending"), __FILE__ . ":" . __LINE__);
 | 
			
		||||
	if (storeDB($devices, $dataPath . "moha.db") === false)
 | 
			
		||||
	if (storeDB($devices, $dataPath . "devices.db") === false)
 | 
			
		||||
	{
 | 
			
		||||
		logger(ERROR, _("Can not store db" ), __FILE__ . ":" . __LINE__);
 | 
			
		||||
		logger(ERROR, _("Can not store devices db" ), __FILE__ . ":" . __LINE__);
 | 
			
		||||
	}
 | 
			
		||||
	if (storeDB($topics, $dataPath . "topics.db") === false)
 | 
			
		||||
	{
 | 
			
		||||
		logger(ERROR, _("Can not store topics db" ), __FILE__ . ":" . __LINE__);
 | 
			
		||||
	}
 | 
			
		||||
	if($testMode) file_put_contents($dataPath . "moha.devices", var_export($devices, true));
 | 
			
		||||
	if ($connected)
 | 
			
		||||
@@ -173,11 +178,6 @@ if (is_readable($configDir . "/devices_constants.php"))
 | 
			
		||||
	include $configDir . "/devices_constants.php";
 | 
			
		||||
	//echo "hooklist"; print_r($hooksList); echo EOL;
 | 
			
		||||
	logger(INFO, sprintf(_("%s/devices_constants.define found, so it has been included :-)"), $configDir), __FILE__ . ":" . __LINE__, false);
 | 
			
		||||
}elseif(is_readable("config/devices_constants.php"))
 | 
			
		||||
{
 | 
			
		||||
	include "config/devices_constants.php";
 | 
			
		||||
	//echo "hooklist"; print_r($hooksList); echo EOL;
 | 
			
		||||
	logger(INFO, sprintf(_("%s/devices_constants.define found, so it has been included :-)"), $configDir), __FILE__ . ":" . __LINE__, false);
 | 
			
		||||
}else
 | 
			
		||||
{
 | 
			
		||||
	logger(WARNING, sprintf(_("%s/devices_constants.define not found, so not included :-)"), $configDir), __FILE__ . ":" . __LINE__, false);
 | 
			
		||||
@@ -194,17 +194,6 @@ require "events.php";
 | 
			
		||||
require "db_functions.php";
 | 
			
		||||
require "webserver/webserver.php";
 | 
			
		||||
 | 
			
		||||
logger(DEBUG, _("Loading stored devices datas from ") . $dataPath . "moha.db", __FILE__ . ":" . __LINE__);
 | 
			
		||||
if (loadDB($devices, $dataPath . "moha.db") === false)
 | 
			
		||||
{
 | 
			
		||||
	logger(ERROR, _("Can not load device db"), __FILE__ . ":" . __LINE__);
 | 
			
		||||
}else
 | 
			
		||||
{
 | 
			
		||||
	mkIndexes($devices);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// topics definition
 | 
			
		||||
listHooks("./topics_callbacks", $hooksList);
 | 
			
		||||
if (!empty($hooksList))
 | 
			
		||||
@@ -216,9 +205,42 @@ if (!empty($hooksList))
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// making the list of hooks to include
 | 
			
		||||
listHooks("./hooks", $hooksList);
 | 
			
		||||
if (!empty($hooksList))		// some hooks to include if hooklist is not empty
 | 
			
		||||
{
 | 
			
		||||
	foreach ($hooksList as $hookFile)		// loop to include hooks in hookslist
 | 
			
		||||
	{
 | 
			
		||||
		logger(INFO, _("Including ") . $hookFile, __FILE__ . ":" . __LINE__, false);
 | 
			
		||||
		include_once $hookFile;
 | 
			
		||||
	}
 | 
			
		||||
	if ($logLevel & DEBUG)
 | 
			
		||||
	{
 | 
			
		||||
		file_put_contents($dataPath . "moha.devices", var_export($devices, true));   // debugging : save device list
 | 
			
		||||
	}
 | 
			
		||||
	$included = true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
logger(DEBUG, _("Loading stored topics datas from ") . $dataPath . "topics.db", __FILE__ . ":" . __LINE__);
 | 
			
		||||
if (file_exists($dataPath . "topics.db"))
 | 
			
		||||
{
 | 
			
		||||
	if (($topics = loadDB($dataPath . "topics.db")) === false)
 | 
			
		||||
	{
 | 
			
		||||
		logger(ERROR, _("Can not load topics db"), __FILE__ . ":" . __LINE__);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
logger(DEBUG, _("Loading stored devices datas from ") . $dataPath . "devices.db", __FILE__ . ":" . __LINE__);
 | 
			
		||||
if (file_exists($dataPath . "devices.db"))
 | 
			
		||||
{
 | 
			
		||||
	if (($devices = loadDB($dataPath . "devices.db")) === false)
 | 
			
		||||
	{
 | 
			
		||||
		logger(ERROR, _("Can not load devices db"), __FILE__ . ":" . __LINE__);
 | 
			
		||||
	}else
 | 
			
		||||
	{
 | 
			
		||||
		mkIndexes();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Program start
 | 
			
		||||
logger(DEBUG, _("Program start"), __FILE__ . ":" . __LINE__, false);
 | 
			
		||||
@@ -247,7 +269,7 @@ $client->onPublish('publishResponse');
 | 
			
		||||
$client->connect($mqttServerIp, 1883, 5);
 | 
			
		||||
 | 
			
		||||
logger(INFO, _("Subscribing to bridge"), __FILE__ . ":" . __LINE__, false);
 | 
			
		||||
foreach($topics as $name => $topic)
 | 
			
		||||
foreach($topics as $name => &$topic)
 | 
			
		||||
{
 | 
			
		||||
	$topic->mid = $client->subscribe($name . "/#", 2);
 | 
			
		||||
	$mids[$topic->mid] = $name;
 | 
			
		||||
@@ -261,23 +283,24 @@ $oneshot = false;
 | 
			
		||||
while (true)
 | 
			
		||||
{
 | 
			
		||||
	$client->loop();			// mqtt server loop()
 | 
			
		||||
	if (! $included)			// hooks not already included
 | 
			
		||||
	/*if (! $included)			// hooks not already included
 | 
			
		||||
	{
 | 
			
		||||
		logger(DEBUG, _("Making hooks list"), __FILE__ . ":" . __LINE__, false);
 | 
			
		||||
 | 
			
		||||
		logger(DEBUG, _("Loading hooks list"), __FILE__ . ":" . __LINE__, false);
 | 
			
		||||
		if (!empty($hooksList))		// some hooks to include if hooklist is not empty
 | 
			
		||||
		{
 | 
			
		||||
			foreach ($hooksList as $hookFile)		// loop to include hooks in hookslist
 | 
			
		||||
			{
 | 
			
		||||
				logger(INFO, _("Including ") . $hookFile, __FILE__ . ":" . __LINE__, false);
 | 
			
		||||
				include $hookFile;
 | 
			
		||||
				include_once $hookFile;
 | 
			
		||||
			}
 | 
			
		||||
			if ($logLevel & DEBUG)
 | 
			
		||||
			{
 | 
			
		||||
				file_put_contents($dataPath . "moha.devices", var_export($devices, true));   // debugging : save device list
 | 
			
		||||
			}
 | 
			
		||||
			file_put_contents($dataPath . "moha.devices", var_export($devices, true));   // debugging : save device list
 | 
			
		||||
			$included = true;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	}else
 | 
			
		||||
	{
 | 
			
		||||
	{*/
 | 
			
		||||
 | 
			
		||||
		if ($oneshot === false)		//	execute while the first loop :WARNING hooks can to be not initialized
 | 
			
		||||
		{
 | 
			
		||||
@@ -285,15 +308,16 @@ while (true)
 | 
			
		||||
 | 
			
		||||
			$oneshot = true;
 | 
			
		||||
		}
 | 
			
		||||
		$nn = 0;
 | 
			
		||||
		if($hooksInitialized == 0)			// all hooks are not initialized
 | 
			
		||||
		{
 | 
			
		||||
			$i = 1;
 | 
			
		||||
			foreach($hooks as $hookName => $hook)
 | 
			
		||||
			foreach($hooks as $hookName => &$hook)
 | 
			
		||||
			{
 | 
			
		||||
				if ($hook->initialized === false)
 | 
			
		||||
				if ($hook->initialized === false and $hook->active === true)
 | 
			
		||||
				{
 | 
			
		||||
					logger(WARNING, _("Initializing Hook not completely initialized :") . $hookName, __FILE__ . ":" . __LINE__);
 | 
			
		||||
					$i &= $hook->installHooks();
 | 
			
		||||
					$i &= $hook->installHooks($indexDevices);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			$hooksInitialized = $i;
 | 
			
		||||
@@ -301,7 +325,6 @@ while (true)
 | 
			
		||||
		{
 | 
			
		||||
			logger(DEBUG, _("All hooks initialized"), __FILE__ . ":" . __LINE__);
 | 
			
		||||
			$flagHooks = true;
 | 
			
		||||
 | 
			
		||||
		}else			// executed when hooks initialization finished but database init not finished
 | 
			
		||||
		{
 | 
			
		||||
			//logger(DEBUG, _("looping"), __FILE__ . ":" . __LINE__);
 | 
			
		||||
@@ -309,7 +332,7 @@ while (true)
 | 
			
		||||
		}
 | 
			
		||||
		checkEvents();
 | 
			
		||||
		askWebServer($read);
 | 
			
		||||
	}
 | 
			
		||||
	//}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
endMoha();
 | 
			
		||||
 
 | 
			
		||||
@@ -13,23 +13,30 @@ function messageReceived($message)
 | 
			
		||||
// payload is an array :
 | 
			
		||||
// $key is property and $value is value of the property
 | 
			
		||||
 | 
			
		||||
function publish($topic, $payload, $commande="set") //, $eventKey)
 | 
			
		||||
function publish($topic, $payloadArray, $commande="set") //, $eventKey)
 | 
			
		||||
{
 | 
			
		||||
	global $client, $mids, $logFh, $testMode;
 | 
			
		||||
	$string = $topic . "/" . $commande;
 | 
			
		||||
	if ($testMode === false)
 | 
			
		||||
	{
 | 
			
		||||
		$mid = $client->publish($string, json_encode($payload) , 2);
 | 
			
		||||
		if (isset($mids[$mid]))
 | 
			
		||||
		if ($client !== null)
 | 
			
		||||
		{
 | 
			
		||||
			//echo "unsetting mids" .EOL;
 | 
			
		||||
			unset ($mids[$mid]);
 | 
			
		||||
			$mid = $client->publish($string, json_encode($payloadArray) , 2);
 | 
			
		||||
			if (isset($mids[$mid]))
 | 
			
		||||
			{
 | 
			
		||||
				//echo "unsetting mids" .EOL;
 | 
			
		||||
				unset ($mids[$mid]);
 | 
			
		||||
			}else
 | 
			
		||||
			{
 | 
			
		||||
				//echo "setting mids" .EOL;
 | 
			
		||||
				$mids[$mid] = true;
 | 
			
		||||
			}
 | 
			
		||||
			logger(LOG_INFO, $logFh, "Publishing " . $string . " with payload => " . json_encode($payloadArray), __FILE__ . ":" . __LINE__);
 | 
			
		||||
		}else
 | 
			
		||||
		{
 | 
			
		||||
			//echo "setting mids" .EOL;
 | 
			
		||||
			$mids[$mid] = true;
 | 
			
		||||
			logger(ERROR, $logFh, "MQTT client is null not publishing " . $string . " with payload => " . json_encode($payloadArray), __FILE__ . ":" . __LINE__);
 | 
			
		||||
		}
 | 
			
		||||
		logger(LOG_INFO, $logFh, "Publishing " . $string . " with payload => " . json_encode($payload), __FILE__ . ":" . __LINE__);
 | 
			
		||||
 | 
			
		||||
	}else
 | 
			
		||||
	{
 | 
			
		||||
		logger(INFO, _("Test mode on: no publishing "), __FILE__ . ":" . __LINE__);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,11 @@
 | 
			
		||||
<?php
 | 
			
		||||
//TODO to test and debug
 | 
			
		||||
$topics["linky2mqtt"] = new topic;
 | 
			
		||||
$devices["linky2mqtt"] = array();
 | 
			
		||||
var_dump($topics);
 | 
			
		||||
if (!array_key_exists("linky2mqtt", $topics))	$topics["linky2mqtt"] = new topic;
 | 
			
		||||
if (!array_key_exists("linky2mqtt", $devices))	$devices["linky2mqtt"] = array();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
$topics["linky2mqtt"]->callback = function($topic, $message)
 | 
			
		||||
function linky2mqttCallback($topic, $message)
 | 
			
		||||
{
 | 
			
		||||
	global $topics, $logFh, $devices, $included;
 | 
			
		||||
	$topicName = $topic[0];
 | 
			
		||||
@@ -20,8 +21,9 @@ $topics["linky2mqtt"]->callback = function($topic, $message)
 | 
			
		||||
		$device["device"]->friendlyName = $payloadArray["friendly_name"];
 | 
			
		||||
		$device["device"]->ieeeAddress =  $payloadArray["ieeeAddress"];
 | 
			
		||||
		$device["device"]->type = $payloadArray["type"];
 | 
			
		||||
		$indexDevices[$device["device"]->ieeeAddress] = & $device["device"];
 | 
			
		||||
		$indexFriendlyNames[$topicName][$fn] = & $device["device"];
 | 
			
		||||
		//$indexDevices[$device["device"]->ieeeAddress] = & $device["device"];
 | 
			
		||||
		//$indexFriendlyNames[$topicName][$fn] = & $device["device"];
 | 
			
		||||
		mkIndexes();
 | 
			
		||||
	}else
 | 
			
		||||
	{
 | 
			
		||||
		$device = &$device[$fn];
 | 
			
		||||
@@ -34,4 +36,5 @@ $topics["linky2mqtt"]->callback = function($topic, $message)
 | 
			
		||||
	changeDevice($topicName, $friendlyName, $device["device"], $payloadArray);
 | 
			
		||||
	//print_r($device["device"]);
 | 
			
		||||
}
 | 
			
		||||
$topics["linky2mqtt"]->callback = "linky2mqttCallback";
 | 
			
		||||
?>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,9 +1,8 @@
 | 
			
		||||
<?php
 | 
			
		||||
$topics["pws2mqtt"] = new topic;
 | 
			
		||||
$devices["pws2mqtt"] = array();
 | 
			
		||||
if (!array_key_exists("pws2mqtt", $topics))		$topics["pws2mqtt"] = new topic;
 | 
			
		||||
if (!array_key_exists("pws2mqtt", $devices))	$devices["pws2mqtt"] = array();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
$topics["pws2mqtt"]->callback = function($topic, $message)
 | 
			
		||||
function pws2mqttCallback($topic, $message)
 | 
			
		||||
{
 | 
			
		||||
	global $logFh, $devices, $included;
 | 
			
		||||
	$topicName = $topic[0];
 | 
			
		||||
@@ -21,8 +20,10 @@ $topics["pws2mqtt"]->callback = function($topic, $message)
 | 
			
		||||
		$device["device"]->ieeeAddress =  $payloadArray["ieeeAddress"];
 | 
			
		||||
		$device["device"]->type = $payloadArray["type"];
 | 
			
		||||
		$device["device"]->topic = $topicName;
 | 
			
		||||
		$indexDevices[$device["device"]->ieeeAddress] = & $device["device"];
 | 
			
		||||
		$indexFriendlyNames[$topicName][$fn] = & $device["device"];
 | 
			
		||||
		//$indexDevices[$device["device"]->ieeeAddress] = & $device["device"];
 | 
			
		||||
		//$indexFriendlyNames[$topicName][$fn] = & $device["device"];
 | 
			
		||||
		mkIndexes();
 | 
			
		||||
 | 
			
		||||
	}else
 | 
			
		||||
	{
 | 
			
		||||
		$device = &$device[$fn];
 | 
			
		||||
@@ -54,5 +55,16 @@ $topics["pws2mqtt"]->callback = function($topic, $message)
 | 
			
		||||
	{
 | 
			
		||||
		changeDevice($topicName, $fn, $device["device"], $payloadArray);
 | 
			
		||||
	}
 | 
			
		||||
};
 | 
			
		||||
$topics["pws2mqtt"]->callback = "pws2mqttCallback";
 | 
			
		||||
 | 
			
		||||
if (!is_callable("pws2mqttGetList"))
 | 
			
		||||
{
 | 
			
		||||
	function pws2mqttGetList()
 | 
			
		||||
	{
 | 
			
		||||
			publish("pws2mqtt", array("",""), "get" );
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pws2mqttGetList();
 | 
			
		||||
?>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,9 +1,9 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
$topics["zigbee2mqtt"] = new topic;
 | 
			
		||||
$devices["zigbee2mqtt"] = array();
 | 
			
		||||
if (!array_key_exists("zigbee2mqtt", $topics))		$topics["zigbee2mqtt"] = new topic;
 | 
			
		||||
if (!array_key_exists("zigbee2mqtt", $devices))		$devices["zigbee2mqtt"] = array();
 | 
			
		||||
 | 
			
		||||
$topics["zigbee2mqtt"]->callback = function($topic, $message)
 | 
			
		||||
function zigbee2mqttCallback($topic, $message)
 | 
			
		||||
{
 | 
			
		||||
	global $topics, $devices, $included, $logFh, $indexFriendlyNames;
 | 
			
		||||
 | 
			
		||||
@@ -85,5 +85,6 @@ $topics["zigbee2mqtt"]->callback = function($topic, $message)
 | 
			
		||||
	}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
$topics["zigbee2mqtt"]->callback = "zigbee2mqttCallback";
 | 
			
		||||
 | 
			
		||||
?>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
<?php
 | 
			
		||||
require_once "events.php";
 | 
			
		||||
 | 
			
		||||
function webDashboard($socket, $n="Général", $page="/")
 | 
			
		||||
function webDashboard($socket, $n="Général")
 | 
			
		||||
{
 | 
			
		||||
	global $dashboards, $indexDevices;
 | 
			
		||||
	require_once "webserver/javascript.php";
 | 
			
		||||
@@ -18,13 +18,8 @@ function webDashboard($socket, $n="Général", $page="/")
 | 
			
		||||
				$property = $array[1];
 | 
			
		||||
				if (array_key_exists($array[1], $device->properties))
 | 
			
		||||
				{
 | 
			
		||||
 | 
			
		||||
					$propertyObject = $device->properties[$property];
 | 
			
		||||
					$value = $propertyObject["value"];
 | 
			
		||||
					if ($value === null)
 | 
			
		||||
					{
 | 
			
		||||
						$value = "null";
 | 
			
		||||
					}
 | 
			
		||||
					logger(DEBUG, $device->friendlyName . " => " . bool2string(_($value)));
 | 
			
		||||
					$response .= $device->friendlyName . aliases($device->friendlyName, $property) . " => " . bool2string(_($value)) . EOL;
 | 
			
		||||
					if (array_key_exists("access", $propertyObject))
 | 
			
		||||
@@ -33,17 +28,15 @@ function webDashboard($socket, $n="Général", $page="/")
 | 
			
		||||
						if(($propertyObject["access"] & 2))
 | 
			
		||||
						{
 | 
			
		||||
							logger(DEBUG, _("Write Access OK ") . ($propertyObject["access"] & 2), __FILE__ . ":" . __LINE__);
 | 
			
		||||
							$response .= "     " . displayChoice($device, $property) . EOL;
 | 
			
		||||
							$response .= "     " . displayChoice($device, $property);
 | 
			
		||||
						}
 | 
			
		||||
						if(($propertyObject["access"] & 4))
 | 
			
		||||
						{
 | 
			
		||||
							logger(DEBUG, _("can get value") . ($propertyObject["access"] & 4), __FILE__ . ":" . __LINE__);
 | 
			
		||||
							$response .= '     <input type="button" id="' . $device->topic ."/" .  $device->friendlyName . "/" . $propertyObject["name"] . '" value="'  . _("Update") . "\" onmouseup=\"getPropertyValue('" . $device->topic . "','" . $device->friendlyName . "','" . $propertyObject["name"] . "')\"><br>" . EOL;
 | 
			
		||||
							$response .= '     <input type="button" id="' . $device->topic ."/" .  $device->friendlyName . "/" . $propertyObject["name"] . '" value="'  . _("Update") . "\" onmouseup=\"getPropertyValue('" . $device->topic . "','" . $device->friendlyName . "','" . $propertyObject["name"] . "')\">";
 | 
			
		||||
						}
 | 
			
		||||
					}else
 | 
			
		||||
					{
 | 
			
		||||
						$response .= EOLH;
 | 
			
		||||
					}
 | 
			
		||||
						$response .= EOLH;
 | 
			
		||||
				}else
 | 
			
		||||
				{
 | 
			
		||||
					logger(ERROR, _("Property do not exist"), __FILE__ . ":" . __LINE__);
 | 
			
		||||
@@ -167,25 +160,7 @@ function webBrowse($socket, $argList, $page="/browse")
 | 
			
		||||
					$response .= insertJavascript();
 | 
			
		||||
					foreach($device->properties as $key => $value)
 | 
			
		||||
					{
 | 
			
		||||
						$response .= $key . "     ";
 | 
			
		||||
						if (array_key_exists("access", $value))
 | 
			
		||||
						{
 | 
			
		||||
							if(($value["access"] & 2))
 | 
			
		||||
							{
 | 
			
		||||
								logger(DEBUG, _("Write Access OK ") . ($value["access"] & 2), __FILE__ . ":" . __LINE__);
 | 
			
		||||
								$response .= displayChoice($device, $key);
 | 
			
		||||
							}
 | 
			
		||||
							if(($value["access"] & 4))
 | 
			
		||||
							{
 | 
			
		||||
								logger(DEBUG, _("can get value") . ($value["access"] & 4), __FILE__ . ":" . __LINE__);
 | 
			
		||||
								$response .= '     <input type="button" id="' . $device->topic ."/" .  $device->friendlyName . "/" . $key . '" value="'  . _("Update") . "\" onmouseup=\"getPropertyValue('" . $device->topic . "', '" . $device->friendlyName . "', '" . $key . "')\">";
 | 
			
		||||
							}
 | 
			
		||||
						}
 | 
			
		||||
						$response .= "<br>\n" . $tab . "[<br>\n";
 | 
			
		||||
						//echo memory_get_usage();
 | 
			
		||||
						//$response = value($key, $value, $response);
 | 
			
		||||
						iterateProperty($device, $key, $value, $response, $tab);
 | 
			
		||||
						$response .= $tab . "]<br>\n";
 | 
			
		||||
						$response = displayProperty($device, $key, $value, $response);
 | 
			
		||||
					}
 | 
			
		||||
					/*foreach($device->properties as $key => $value)
 | 
			
		||||
					{
 | 
			
		||||
@@ -228,6 +203,30 @@ function webBrowse($socket, $argList, $page="/browse")
 | 
			
		||||
	htmlSend($socket, $response);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function displayProperty($device, $key, $value, $response)
 | 
			
		||||
{
 | 
			
		||||
	$response .= $key . "     ";
 | 
			
		||||
	if (array_key_exists("access", $value))
 | 
			
		||||
	{
 | 
			
		||||
		if(($value["access"] & 2))
 | 
			
		||||
		{
 | 
			
		||||
			logger(DEBUG, _("Write Access OK ") . ($value["access"] & 2), __FILE__ . ":" . __LINE__);
 | 
			
		||||
			$response .= displayChoice($device, $key);
 | 
			
		||||
		}
 | 
			
		||||
		if(($value["access"] & 4))
 | 
			
		||||
		{
 | 
			
		||||
			logger(DEBUG, _("can get value") . ($value["access"] & 4), __FILE__ . ":" . __LINE__);
 | 
			
		||||
			$response .= '     <input type="button" id="' . $device->topic ."/" .  $device->friendlyName . "/" . $key . '" value="'  . _("Update") . "\" onmouseup=\"getPropertyValue('" . $device->topic . "', '" . $device->friendlyName . "', '" . $key . "')\">";
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	$response .= "<br>\n" . $tab . "[<br>\n";
 | 
			
		||||
	//echo memory_get_usage();
 | 
			
		||||
	//$response = value($key, $value, $response);
 | 
			
		||||
	iterateProperty($device, $key, $value, $response, $tab);
 | 
			
		||||
	$response .= $tab . "]<br>\n";
 | 
			
		||||
	return $response;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function iterateProperty($device, $property, $value, &$response, $tab="")
 | 
			
		||||
{
 | 
			
		||||
	$tab .= "        ";
 | 
			
		||||
@@ -367,5 +366,21 @@ function webNotify($argList)
 | 
			
		||||
		$response = _("notify command have been set");
 | 
			
		||||
		$monitored[] = new watch($argList["topic"], $argList["fn"], $argList["property"], $argList["condition"], $argList["value"]);
 | 
			
		||||
	}
 | 
			
		||||
	return $response;
 | 
			
		||||
}
 | 
			
		||||
/*
 | 
			
		||||
function webDisplayByType($argList)
 | 
			
		||||
{
 | 
			
		||||
	global $indexTypes, $config;
 | 
			
		||||
	require_once $config . "porpertiesbytype.php";
 | 
			
		||||
	require_once "webserver/javascript.php";
 | 
			
		||||
 | 
			
		||||
	$response .= insertJavascript();
 | 
			
		||||
	foreach($indexTypes[$argList["type"]] as $device)
 | 
			
		||||
	{
 | 
			
		||||
		foreach($)
 | 
			
		||||
		displayProperty($device, $device->, $value, $response)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
*/
 | 
			
		||||
?>
 | 
			
		||||
 
 | 
			
		||||
@@ -28,7 +28,6 @@ function htmlSend($socket, $text, $meta="")
 | 
			
		||||
					"Connection: close" . EOLR .
 | 
			
		||||
					"Content-Type: text/html; charset=UTF-8" . EOLR . EOLR;
 | 
			
		||||
	$response =  $httpHeader . '<!doctype html>' . EOL . '<html lang="fr">' . EOL . '<head>' . EOL . $meta . EOL . '<meta charset="utf-8">' . EOL . '<title>Moha</title>' . EOL . '</head><body>' . EOL . $text . "</body></html>";
 | 
			
		||||
 | 
			
		||||
	stream_socket_sendto($socket, $response);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -62,11 +61,13 @@ function askWebServer($read)
 | 
			
		||||
						$argList["cmd"] = trim($tmp);
 | 
			
		||||
					}else
 | 
			
		||||
					{
 | 
			
		||||
						$argList[trim(strchr($tmp, "=", true))] = trim(substr(strchr($tmp, "="), 1));
 | 
			
		||||
						$key = trim(strchr($tmp, "=", true));
 | 
			
		||||
						$argList[$key] = trim(substr(strchr($tmp, "="), 1));
 | 
			
		||||
						if (count($argTmp) == 1) $argList["cmd"] = $key;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
				logger(DEBUG, print_r($argList, true), __FILE__ . ":" . __LINE__);
 | 
			
		||||
 | 
			
		||||
				logger(DEBUG, print_r($argList, true), __FILE__ . ":" . __LINE__);
 | 
			
		||||
				if(array_key_exists("cmd", $argList))
 | 
			
		||||
				{
 | 
			
		||||
					$command = strtolower($argList["cmd"]);
 | 
			
		||||
@@ -74,11 +75,11 @@ function askWebServer($read)
 | 
			
		||||
					switch($command)
 | 
			
		||||
					{
 | 
			
		||||
						case "dashboard":
 | 
			
		||||
							webDashboard($spawn, $argList["dashboard"], $argList["page"]);
 | 
			
		||||
							webDashboard($spawn, $argList["dashboard"]);
 | 
			
		||||
							break;
 | 
			
		||||
						case "browse":
 | 
			
		||||
							logger(DEBUG, _("Browsing"), __FILE__ . ":" . __LINE__);
 | 
			
		||||
							webBrowse($spawn, $argList, $argList["page"]);
 | 
			
		||||
							webBrowse($spawn, $argList);
 | 
			
		||||
							//return true;
 | 
			
		||||
							break;
 | 
			
		||||
						case "get":
 | 
			
		||||
@@ -99,6 +100,9 @@ function askWebServer($read)
 | 
			
		||||
							htmlSend($spawn, webNotify($argList));
 | 
			
		||||
							logger(DEBUG, print_r($monitored, true), __FILE__ . ":" . __LINE__);
 | 
			
		||||
							break;
 | 
			
		||||
						case "type":
 | 
			
		||||
							logger(DEBUG, $command . _(" reached"), __FILE__ . ":" . __LINE__);
 | 
			
		||||
							htmlSend($spawn, webDisplayByType($argList));
 | 
			
		||||
						default:
 | 
			
		||||
						if (is_numeric(array_key_first($argList)))
 | 
			
		||||
						{
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user