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