some debbuging
This commit is contained in:
		
							
								
								
									
										41
									
								
								class/availability.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								class/availability.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,41 @@ | |||||||
|  | <?php | ||||||
|  |  | ||||||
|  | class availability | ||||||
|  | { | ||||||
|  | 	// by default all devices are listening for availability | ||||||
|  |  | ||||||
|  | 	// callback fonction. Is called with these 3 parameters | ||||||
|  | 	// $device 	-> calling device | ||||||
|  | 	// $param 	-> parameter passed by mqtt | ||||||
|  | 	// $value 	-> value of the parameter | ||||||
|  | 	public function callBack($device, $param, $value) | ||||||
|  | 	{ | ||||||
|  | 		switch($param) | ||||||
|  | 		{ | ||||||
|  | 			case "availability":			// theorically can't be other, but .... | ||||||
|  | 				if ($device->availability != $value) | ||||||
|  | 				{ | ||||||
|  | 					//echo "==========>>>>>> Availability $value" . EOL; | ||||||
|  | 					if (!empty($device->availability)) | ||||||
|  | 					{ | ||||||
|  | 						$log = WARNING; | ||||||
|  | 					}else | ||||||
|  | 					{ | ||||||
|  | 						$log = INFO; | ||||||
|  | 					} | ||||||
|  | 					$device->availability = $value | ||||||
|  | 					logger($log, sprintf(_("Device: %s/%s is %s"), $topic, $fn , $value)); | ||||||
|  | 				} | ||||||
|  | 			break; | ||||||
|  | 		} | ||||||
|  | 		echo _("notification received from MQTT") . EOL; | ||||||
|  | 		//echo $param . "=> " . $value . EOL; | ||||||
|  | 	} | ||||||
|  | 	public function getHook() | ||||||
|  | 	{ | ||||||
|  | 		return array($this,"callback"); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | $hooks["availability"] = new availability; | ||||||
|  | ?> | ||||||
| @@ -1,31 +0,0 @@ | |||||||
| <?php |  | ||||||
| 	<?php |  | ||||||
| class availability |  | ||||||
| { |  | ||||||
| 	// by default all devices are listening for availability |  | ||||||
|  |  | ||||||
| 	// callback fonction. Is called with these 4 parameters |  | ||||||
| 	public function callBack($topic, $fn, $param, $value) |  | ||||||
| 	{ |  | ||||||
| 		global $devices, $indexDevices, $notificationMethods; |  | ||||||
| 		switch($param) |  | ||||||
| 		{ |  | ||||||
| 			case "availability": |  | ||||||
| 				if ($value != "online") |  | ||||||
| 				{ |  | ||||||
| 					//your code here |  | ||||||
| 					logger("Device: " . $topic . "/" . $fn . "is offline"); |  | ||||||
| 				} |  | ||||||
| 				break; |  | ||||||
| 		} |  | ||||||
| 		echo _("notification received from MQTT") . EOL; |  | ||||||
| 		//echo $param . "=> " . $value . EOL; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| $hooks["availability"] = new availability; |  | ||||||
| ?> |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ?> |  | ||||||
| @@ -68,41 +68,4 @@ class interval | |||||||
| 	public $endDate; | 	public $endDate; | ||||||
| } | } | ||||||
|  |  | ||||||
| class notificationMethod |  | ||||||
| { |  | ||||||
| 	public $url; |  | ||||||
| 	public $msg; |  | ||||||
| 	public $active; |  | ||||||
| 	public $level; |  | ||||||
|  |  | ||||||
| 	function __construct($url) |  | ||||||
| 	{ |  | ||||||
| 		$this->url = $url; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	public function send($text=null) |  | ||||||
| 	{ |  | ||||||
| 		if (empty($text)) $text= $this->msg; |  | ||||||
| 		if (!empty($msg)) |  | ||||||
| 		{ |  | ||||||
| 			$opts = array( |  | ||||||
| 				'http'=>array( |  | ||||||
| 					'method'=>"GET", |  | ||||||
| 					'header'=>"Accept-language: fr\r\n" |  | ||||||
| 				) |  | ||||||
| 			); |  | ||||||
| 			$context = stream_context_create($opts); |  | ||||||
|  |  | ||||||
| 			/* Envoi une requête HTTP vers $url |  | ||||||
| 			avec les en-têtes additionnels ci-dessus */ |  | ||||||
| 			$fp = fopen($url . "/" . $msg, 'r', false, $context); |  | ||||||
| 			$response = stream_get_contents($fp, -1, 0); |  | ||||||
| 			fclose($fp); |  | ||||||
| 		}else |  | ||||||
| 		{ |  | ||||||
| 			// TODO log_error("notificationMethod : $msg is null"); |  | ||||||
| 		} |  | ||||||
|  |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| ?> | ?> | ||||||
|   | |||||||
							
								
								
									
										106
									
								
								class/main.php~
									
									
									
									
									
								
							
							
						
						
									
										106
									
								
								class/main.php~
									
									
									
									
									
								
							| @@ -1,106 +0,0 @@ | |||||||
| class Message |  | ||||||
| { |  | ||||||
| 	public $id; |  | ||||||
| 	public $state = false; |  | ||||||
| 	public $msg; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| class topic { |  | ||||||
| 	public $mid; |  | ||||||
| 	public $status; |  | ||||||
| 	public $info; |  | ||||||
| 	public $devices; |  | ||||||
| 	public $groups; |  | ||||||
| 	public $extensions; |  | ||||||
| 	public $config; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| class device |  | ||||||
| { |  | ||||||
| 	public $method;    //auto or manual |  | ||||||
| 	public $topic; |  | ||||||
| 	public $device; |  | ||||||
| 	public $ieeeAddress; |  | ||||||
| 	public $groupID; |  | ||||||
| 	public $friendlyName; |  | ||||||
| 	public $powerSource; |  | ||||||
| 	public $description; |  | ||||||
| 	public $functions; |  | ||||||
| 	public $payload; |  | ||||||
| 	public $availibility; |  | ||||||
|  |  | ||||||
| 	public function set($event) |  | ||||||
| 	{ |  | ||||||
| 		publish($this, $this->payload, "set", $event); |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	public function get() |  | ||||||
| 	{ |  | ||||||
| 		publish($this, $this->payload, "get", $event); |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| class ranges |  | ||||||
| { |  | ||||||
| 	public $start;			//datetime |  | ||||||
| 	public $end;			//datetime |  | ||||||
| } |  | ||||||
|  |  | ||||||
| class event |  | ||||||
| { |  | ||||||
| 	public $ieeeAddress; |  | ||||||
| 	public $topic; |  | ||||||
| 	public $param; |  | ||||||
| 	public $value; |  | ||||||
| 	public $device; |  | ||||||
| 	public $published; |  | ||||||
| 	public $dateTimeEvent;			// datetime : next occurence for recurrent event |  | ||||||
| 	public $startDatetime; |  | ||||||
| 	public $stopDatetime; |  | ||||||
| 	public $recurrenceInterval;		// interval : for recurrent event |  | ||||||
| 	public $exceptionInterval;		// array of object ranges |  | ||||||
| } |  | ||||||
|  |  | ||||||
| class interval |  | ||||||
| { |  | ||||||
| 	public $startDate; |  | ||||||
| 	public $endDate; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| class notificationMethod |  | ||||||
| { |  | ||||||
| 	public $url; |  | ||||||
| 	public $msg; |  | ||||||
| 	public $active; |  | ||||||
| 	public $level; |  | ||||||
|  |  | ||||||
| 	function __construct($url) |  | ||||||
| 	{ |  | ||||||
| 		$this->url = $url; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	public function send($text=null) |  | ||||||
| 	{ |  | ||||||
| 		if (empty($text)) $text= $this->msg; |  | ||||||
| 		if (!empty($msg)) |  | ||||||
| 		{ |  | ||||||
| 			$opts = array( |  | ||||||
| 				'http'=>array( |  | ||||||
| 					'method'=>"GET", |  | ||||||
| 					'header'=>"Accept-language: fr\r\n" |  | ||||||
| 				) |  | ||||||
| 			); |  | ||||||
| 			$context = stream_context_create($opts); |  | ||||||
|  |  | ||||||
| 			/* Envoi une requête HTTP vers $url |  | ||||||
| 			avec les en-têtes additionnels ci-dessus */ |  | ||||||
| 			$fp = fopen($url . "/" . $msg, 'r', false, $context); |  | ||||||
| 			$response = stream_get_contents($fp, -1, 0); |  | ||||||
| 			fclose($fp); |  | ||||||
| 		}else |  | ||||||
| 		{ |  | ||||||
| 			// TODO log_error("notificationMethod : $msg is null"); |  | ||||||
| 		} |  | ||||||
|  |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| @@ -10,8 +10,11 @@ function storeDB($db, $filepath) | |||||||
|  |  | ||||||
| function mkDevicesDB($topic, $json, $group=false) | function mkDevicesDB($topic, $json, $group=false) | ||||||
| { | { | ||||||
| 	global $devices, $listProperties, $listPropertiesKeys, $indexDevices, $dbInit, $logFh; | 	global $devices, $listProperties, $listPropertiesKeys, $indexDevices, $dbInit, $logFh, $hooks; | ||||||
| 	if (!isset($devices[$topic]))   $devices[$topic]= array(); | 	if (!isset($devices[$topic])) | ||||||
|  | 	{ | ||||||
|  | 		$devices[$topic]= array(); | ||||||
|  | 	} | ||||||
| 	foreach ($json as $jsonDevice) | 	foreach ($json as $jsonDevice) | ||||||
| 	{ | 	{ | ||||||
| 		//print_r($device); | 		//print_r($device); | ||||||
| @@ -20,11 +23,16 @@ function mkDevicesDB($topic, $json, $group=false) | |||||||
| 		$device = & $devices[$topic]; | 		$device = & $devices[$topic]; | ||||||
| 		foreach($fnTree as $fnPart) | 		foreach($fnTree as $fnPart) | ||||||
| 		{ | 		{ | ||||||
| 			$device[$fnPart] = array(); | 			if (!isset($device[$fnPart])) | ||||||
|  | 			{ | ||||||
|  | 				$device[$fnPart] = array(); | ||||||
|  | 			} | ||||||
| 			$device = & $device[$fnPart]; | 			$device = & $device[$fnPart]; | ||||||
| 		} | 		} | ||||||
|  | 		if (!isset($device["device"])) | ||||||
| 		$device["device"] = new device; | 		{ | ||||||
|  | 			$device["device"] = new device; | ||||||
|  | 		} | ||||||
| 		$device["device"]->topic = $topic; | 		$device["device"]->topic = $topic; | ||||||
| 		//$device["device"]->device = $jsonDevice; | 		//$device["device"]->device = $jsonDevice; | ||||||
| 		$device["device"]->friendlyName = $jsonDevice->friendly_name; | 		$device["device"]->friendlyName = $jsonDevice->friendly_name; | ||||||
| @@ -35,20 +43,7 @@ function mkDevicesDB($topic, $json, $group=false) | |||||||
| 			$indexDevices[$device["device"]->groupID] = $jsonDevice->friendly_name; | 			$indexDevices[$device["device"]->groupID] = $jsonDevice->friendly_name; | ||||||
| 		}else | 		}else | ||||||
| 		{ | 		{ | ||||||
| 			$device["device"]->type = $jsonDevice->type; | 			addDevice($device, $fn, $jsonDevice); | ||||||
| 			$device["device"]->ieeeAddress = $jsonDevice->ieee_address; |  | ||||||
| 			if ( !empty($jsonDevice->power_source ) ) |  | ||||||
| 			{ |  | ||||||
| 				$device["device"]->powerSource = $jsonDevice->power_source; |  | ||||||
| 			} |  | ||||||
| 			if ($jsonDevice->definition != null) |  | ||||||
| 			{ |  | ||||||
| 				$device["device"]->description = $jsonDevice->definition->description; |  | ||||||
| 				searchPropertyKey($fn, $device["device"], $jsonDevice->definition->exposes, $listPropertiesKeys); |  | ||||||
| 			} |  | ||||||
| 			searchPropertyValue($fn, $device["device"], $jsonDevice, $listProperties); |  | ||||||
| 			$indexDevices[$device["device"]->ieeeAddress] = & $device["device"]; |  | ||||||
| 			//print_r($device); |  | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	$dbInit += 1; | 	$dbInit += 1; | ||||||
| @@ -60,6 +55,32 @@ function mkDevicesDB($topic, $json, $group=false) | |||||||
| 	//print_r($devices); | 	//print_r($devices); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | function addDevice(& $device, $fn, $jsonDevice ) | ||||||
|  | { | ||||||
|  | 	global $listProperties, $listPropertiesKeys, $hooks, $indexDevices; | ||||||
|  | 	$device["device"]->type = $jsonDevice->type; | ||||||
|  | 	$device["device"]->ieeeAddress = $jsonDevice->ieee_address; | ||||||
|  | 	if ( !empty($jsonDevice->power_source ) ) | ||||||
|  | 	{ | ||||||
|  | 		$device["device"]->powerSource = $jsonDevice->power_source; | ||||||
|  | 	} | ||||||
|  | 	if ($jsonDevice->definition != null) | ||||||
|  | 	{ | ||||||
|  | 		$device["device"]->description = $jsonDevice->definition->description; | ||||||
|  | 		searchPropertyKey($fn, $device["device"], $jsonDevice->definition->exposes, $listPropertiesKeys); | ||||||
|  | 	} | ||||||
|  | 	searchPropertyValue($fn, $device["device"], $jsonDevice, $listProperties); | ||||||
|  |  | ||||||
|  | 	// adding callback function for availability | ||||||
|  | 	//print_r($hooks); | ||||||
|  | 	$device["device"]->functions[] = $hooks["availability"]->getHook(); | ||||||
|  |  | ||||||
|  | 	//indexing device | ||||||
|  | 	$indexDevices[$device["device"]->ieeeAddress] = & $device["device"]; | ||||||
|  |  | ||||||
|  | 	//print_r($device); | ||||||
|  | } | ||||||
|  |  | ||||||
| function searchPropertyKey($fn, &$device, $object, $listPropertiesKeys) | function searchPropertyKey($fn, &$device, $object, $listPropertiesKeys) | ||||||
| { | { | ||||||
| 	foreach($listPropertiesKeys as $property) | 	foreach($listPropertiesKeys as $property) | ||||||
| @@ -101,7 +122,7 @@ function changeDevice($topic, $fn, &$device, $payloadArray) | |||||||
| function iterateDevice($topic, $fn, &$device, $payloadArray) | function iterateDevice($topic, $fn, &$device, $payloadArray) | ||||||
| { | { | ||||||
| 	global $changed; | 	global $changed; | ||||||
| 	print_r($payloadArray); | 	//print_r($payloadArray); | ||||||
| 	//echo "device =>";print_r($device);echo EOL; | 	//echo "device =>";print_r($device);echo EOL; | ||||||
| 	foreach($payloadArray as $key => $value) | 	foreach($payloadArray as $key => $value) | ||||||
| 	{ | 	{ | ||||||
| @@ -128,8 +149,11 @@ function iterateDevice($topic, $fn, &$device, $payloadArray) | |||||||
| 		{ | 		{ | ||||||
| 			if (empty($device->$key) or $value != null) | 			if (empty($device->$key) or $value != null) | ||||||
| 			{ | 			{ | ||||||
| 				if (isset($device->$key)) $oldValue = $device->$key; | 				if (isset($device->$key)) | ||||||
| 				if ($oldValue != $value) | 				{ | ||||||
|  | 					$oldValue = $device->$key; | ||||||
|  |  | ||||||
|  | 				}if ($oldValue != $value) | ||||||
| 				{ | 				{ | ||||||
| 					$device->{$key} = $value; | 					$device->{$key} = $value; | ||||||
| 					$changed[$fn]["key"] = $key; | 					$changed[$fn]["key"] = $key; | ||||||
| @@ -145,14 +169,15 @@ function iterateDevice($topic, $fn, &$device, $payloadArray) | |||||||
| 					} | 					} | ||||||
| 					echo  " to " . $value . EOL;*/ | 					echo  " to " . $value . EOL;*/ | ||||||
| 				} | 				} | ||||||
| 				//print_r($device->functions); | 				//print_r($device->functions);		print_r($value); | ||||||
|  |  | ||||||
| 				if (!empty($device->functions)) | 				if (!empty($device->functions)) | ||||||
| 				{ | 				{ | ||||||
| 					echo "executing notifications functions " . EOL; | 					echo "executing notifications functions " . EOL; | ||||||
| 					foreach($device->functions as $function) | 					foreach($device->functions as $function) | ||||||
| 					{ | 					{ | ||||||
| 						//print_r($function); | 						//print_r($function); | ||||||
| 						$function($topic, $fn, $key, $value); | 						$function($device, $key, $value); | ||||||
| 					} | 					} | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
|   | |||||||
							
								
								
									
										12
									
								
								events.php
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								events.php
									
									
									
									
									
								
							| @@ -33,7 +33,7 @@ function checkEvents() | |||||||
| 					publish($event->device, array($event->param => $event->value), "set", $key); | 					publish($event->device, array($event->param => $event->value), "set", $key); | ||||||
| 					if (($event->dateTimeEvent->add($event->recurrenceInterval)) === false) | 					if (($event->dateTimeEvent->add($event->recurrenceInterval)) === false) | ||||||
| 					{ | 					{ | ||||||
| 						logger(ERROR, __("Error in event recurrence. event: ") . $key); | 						logger(ERROR, _("Error in event recurrence. event: ") . $key); | ||||||
| 					} | 					} | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| @@ -88,7 +88,7 @@ function setRecurrentEvent(&$device, $param, $value, $startDatetime, $stopDateti | |||||||
| 	$event->dateTimeEvent 		= $event->startDatetime; | 	$event->dateTimeEvent 		= $event->startDatetime; | ||||||
| 	if (($event->dateTimeEvent->add($event->recurrenceInterval)) === false) | 	if (($event->dateTimeEvent->add($event->recurrenceInterval)) === false) | ||||||
| 	{ | 	{ | ||||||
| 		logger(ERROR, __("Error in event recurrence. event: ") . $key); | 		logger(ERROR, _("Error in event recurrence. event: ") . $key); | ||||||
|  |  | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| @@ -124,13 +124,13 @@ function setDelay(&$device, $delay, $unit="second", $param, $value, $replace=fal | |||||||
| 	} | 	} | ||||||
| 	if (empty($s)) | 	if (empty($s)) | ||||||
| 	{ | 	{ | ||||||
| 		logger(ERROR, __("setDelay error: unit is empty")); | 		logger(ERROR, _("setDelay error: unit is empty")); | ||||||
| 	} | 	} | ||||||
| 	if (($datetime->add(new DateInterval('PT'. $delay . $s))) === false) | 	if (($datetime->add(new DateInterval('PT'. $delay . $s))) === false) | ||||||
| 	{ | 	{ | ||||||
| 		logger(ERROR, __("setDelay error: datetime->add")); | 		logger(ERROR, _("setDelay error: datetime->add")); | ||||||
| 	} | 	} | ||||||
| 	print_r($datetime); | 	//print_r($datetime); | ||||||
| 	if ($replace) | 	if ($replace) | ||||||
| 	{ | 	{ | ||||||
| 		$eventKey = searchEvent($device, $param, $value); | 		$eventKey = searchEvent($device, $param, $value); | ||||||
| @@ -169,7 +169,7 @@ function deleteEvent($eventKey) | |||||||
| { | { | ||||||
| 	global $events; | 	global $events; | ||||||
| 	unset ($events[$eventKey]); | 	unset ($events[$eventKey]); | ||||||
| 	logger(INFO, __("delete event ") . $eventKey); | 	logger(INFO, _("delete event ") . $eventKey); | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -3,12 +3,12 @@ class notificationFreemobile | |||||||
| { | { | ||||||
| 	private $url = "https://smsapi.free-mobile.fr/sendmsg?user=32886706&pass=JTGUY6l5OG73zX&msg="; | 	private $url = "https://smsapi.free-mobile.fr/sendmsg?user=32886706&pass=JTGUY6l5OG73zX&msg="; | ||||||
| 	private $name = "freemobile"; | 	private $name = "freemobile"; | ||||||
|  | 	public $active = true; | ||||||
|  | 	public $level; | ||||||
|  |  | ||||||
| 	function __construct() | 	function __construct() | ||||||
| 	{ | 	{ | ||||||
| 		global $notificationMethods; | 		$this->level = WARNING | ERROR; | ||||||
| 		$notificationMethods[$name]->active = true; |  | ||||||
| 		$notificationMethods[$name]->level = ALL; |  | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	function send($message) | 	function send($message) | ||||||
| @@ -23,7 +23,13 @@ class notificationFreemobile | |||||||
| 			curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); | 			curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); | ||||||
|  |  | ||||||
| 			// $output contains the output string | 			// $output contains the output string | ||||||
| 			logger(INFO, curl_exec($ch)); | 			if (($result = curl_exec($ch)) === false) | ||||||
|  | 			{ | ||||||
|  | 				logger(ERROR, _(sprintf( "Curl return error: %s when sending notification", curl_error($ch)))); | ||||||
|  | 			}else | ||||||
|  | 			{ | ||||||
|  | 				logger(INFO, _("Curl return: ") . $result . _(" when sending notification")); | ||||||
|  | 			} | ||||||
|  |  | ||||||
| 			// close curl resource to free up system resources | 			// close curl resource to free up system resources | ||||||
| 			curl_close($ch); | 			curl_close($ch); | ||||||
| @@ -33,6 +39,6 @@ class notificationFreemobile | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| $notificationMethods["freemobile"] = new notificationMethod(); | $notificationMethods["freemobile"] = new notificationFreemobile(); | ||||||
|  |  | ||||||
| ?> | ?> | ||||||
|   | |||||||
| @@ -4,7 +4,7 @@ class rdc_panneau_salon | |||||||
| 	// list of devices we are listening to | 	// list of devices we are listening to | ||||||
| 	private $devicelist = array("0x00124b0022ebac5c", "0x588e81fffe2cf695", "0x00124b001f900753", "0x04cf8cdf3c78aff0"); | 	private $devicelist = array("0x00124b0022ebac5c", "0x588e81fffe2cf695", "0x00124b001f900753", "0x04cf8cdf3c78aff0"); | ||||||
| 	public $delay = 3;				// amount of time in $timeunit | 	public $delay = 3;				// amount of time in $timeunit | ||||||
| 	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 | ||||||
| 	public $luminance_min = 80; | 	public $luminance_min = 80; | ||||||
| 	public $luminance_max = 3000; | 	public $luminance_max = 3000; | ||||||
|  |  | ||||||
| @@ -21,36 +21,39 @@ class rdc_panneau_salon | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	// callback fonction. Is called with these 4 parameters | 	// callback fonction. Is called with these 4 parameters | ||||||
| 	public function callBack($topic, $fn, $param, $value) | 	public function callBack(&$device, $param, $value) | ||||||
| 	{ | 	{ | ||||||
| 		global $devices, $indexDevices; | 		global $devices, $indexDevices; | ||||||
| 		switch($param) | 		switch($param) | ||||||
| 		{ | 		{ | ||||||
| 			case "occupancy": | 			case "occupancy": | ||||||
| 				if ($value == 1) $this->send(); | 				if ($value == 1 and $indexDevices["0x04cf8cdf3c78aff0"]->illuminance_lux <= $this->luminance_min) | ||||||
|  | 				{ | ||||||
|  | 					$this->send("ON"); | ||||||
|  | 				} | ||||||
| 				break; | 				break; | ||||||
| 			case "contact": | 			case "contact": | ||||||
| 				if ($value == false) $this->send(); | 				if ($value == false and $indexDevices["0x04cf8cdf3c78aff0"]->illuminance_lux <= $this->luminance_min) | ||||||
|  | 				{ | ||||||
|  | 					$this->send("ON"); | ||||||
|  | 				} | ||||||
| 				break; | 				break; | ||||||
| 			case "illuminance_lux": | 			case "illuminance_lux": | ||||||
| 				if ($value >= $this->luminance_max) $this->send(); | 				if ($value >= $this->luminance_max) $this->send("OFF"); | ||||||
| 		} | 		} | ||||||
| 		echo _("notification received from MQTT") . EOL; | 		echo _("notification received from MQTT") . EOL; | ||||||
| 		//echo $param . "=> " . $value . EOL; | 		//echo $param . "=> " . $value . EOL; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	private function send() | 	private function send($state) | ||||||
| 	{ | 	{ | ||||||
| 		global $devices, $indexDevices; | 		global $devices, $indexDevices; | ||||||
| 		if ($indexDevices["0x04cf8cdf3c78aff0"]->illuminance_lux <= $this->luminance_min) | 		$msg = array("state" => $state); | ||||||
| 		{ | 		$device = & $indexDevices["0x588e81fffe343e8f"]; | ||||||
| 			$msg = array("state" => "ON"); | 		logger(INFO, _("publishing ") . $msg . _(" message: ") . $device->friendlyName); | ||||||
| 			$device = & $indexDevices["0x588e81fffe343e8f"]; | 		$device->payload = $msg; | ||||||
| 			logger(INFO, __("publishing ") . $msg . __(" message: ") . $device->friendlyName); | 		$device->set(null); | ||||||
| 			$device->payload = $msg; | 		setDelay($device, $this->delay, $this->timeUnit, "state", "OFF", true); | ||||||
| 			$device->set(null); |  | ||||||
| 			setDelay($device, $this->delay, $this->timeUnit, "state", "OFF", true); |  | ||||||
| 		} |  | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										29
									
								
								moha.php
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								moha.php
									
									
									
									
									
								
							| @@ -4,15 +4,13 @@ | |||||||
| define( "EOL", "\n"); | define( "EOL", "\n"); | ||||||
| define("Z2M", "zigbee2mqtt"); | define("Z2M", "zigbee2mqtt"); | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| declare(ticks = 1); | declare(ticks = 1); | ||||||
|  |  | ||||||
| $listProperties = array("powerSource" => "batterie"); | $listProperties = array("powerSource" => "batterie"); | ||||||
| $listPropertiesKeys = array("property"); | $listPropertiesKeys = array("property"); | ||||||
|  |  | ||||||
| include "class/main.php"; |  | ||||||
|  | require "class/main.php"; | ||||||
|  |  | ||||||
| //global variables | //global variables | ||||||
| $topics = array();				// list of topics | $topics = array();				// list of topics | ||||||
| @@ -36,25 +34,28 @@ $topics["zigbee2mqtt"] = new topic; | |||||||
| bindtextdomain("moha", "./locale"); | bindtextdomain("moha", "./locale"); | ||||||
| textdomain("moha"); | textdomain("moha"); | ||||||
|  |  | ||||||
| if (!init()) exit(1); |  | ||||||
|  |  | ||||||
| require "mqtt_functions.php"; |  | ||||||
| require "utils.php"; | if (!init()) exit(1); | ||||||
| require "events.php"; |  | ||||||
| require "db_functions.php"; |  | ||||||
|  |  | ||||||
| $client = new Mosquitto\Client(); | $client = new Mosquitto\Client(); | ||||||
|  |  | ||||||
| // log levels | // log levels | ||||||
| define( "DEBUG", $client->LOG_DEBUG); | define( "DEBUG", $client::LOG_DEBUG); | ||||||
| define( "INFO", $client->LOG_INFO); | define( "INFO", $client::LOG_INFO); | ||||||
| define( "NOTICE", $client->LOG_NOTICE); | define( "NOTICE", $client::LOG_NOTICE); | ||||||
| define( "WARNING", $client->LOG_WARNING); | define( "WARNING", $client::LOG_WARNING); | ||||||
| define( "ERROR", $client->LOG_ERR); | define( "ERROR", $client::LOG_ERR); | ||||||
| define( "ALL", DEBUG | INFO | NOTICE | WARNING | ERROR); | define( "ALL", DEBUG | INFO | NOTICE | WARNING | ERROR); | ||||||
| $logLevel = DEBUG; | $logLevel = DEBUG; | ||||||
| $notificationLevel = WARNING | ERROR; | $notificationLevel = WARNING | ERROR; | ||||||
|  |  | ||||||
|  | require "utils.php"; | ||||||
|  | require "mqtt_functions.php"; | ||||||
|  | require "events.php"; | ||||||
|  | require "db_functions.php"; | ||||||
|  | require "class/availability.php"; | ||||||
|  |  | ||||||
| // defining callback functions | // defining callback functions | ||||||
| $client->onConnect('connectResponse'); | $client->onConnect('connectResponse'); | ||||||
| $client->onDisconnect('disconnectResponse'); | $client->onDisconnect('disconnectResponse'); | ||||||
|   | |||||||
| @@ -46,7 +46,7 @@ function message($message) | |||||||
| 		{ | 		{ | ||||||
| 			unset ($fnTree[array_key_last($fnTree)]); | 			unset ($fnTree[array_key_last($fnTree)]); | ||||||
| 			$payloadArray = array("availability" => $message->payload); | 			$payloadArray = array("availability" => $message->payload); | ||||||
| 			print_r($payloadArray); | 			//print_r($payloadArray); | ||||||
| 		}else | 		}else | ||||||
| 		{ | 		{ | ||||||
| 			$payloadArray = json_decode($message->payload); | 			$payloadArray = json_decode($message->payload); | ||||||
|   | |||||||
| @@ -12,6 +12,8 @@ function signalHandler($signal) | |||||||
|  |  | ||||||
| function notify($message) | function notify($message) | ||||||
| { | { | ||||||
|  | 	global $notificationMethods; | ||||||
|  | 	$result = false; | ||||||
| 	foreach($notificationMethods as $value) | 	foreach($notificationMethods as $value) | ||||||
| 	{ | 	{ | ||||||
| 		$result |= $value->send($message); | 		$result |= $value->send($message); | ||||||
| @@ -21,7 +23,8 @@ function notify($message) | |||||||
|  |  | ||||||
| function logger($level, $log) | function logger($level, $log) | ||||||
| { | { | ||||||
| 	global $logFh, $logLevel; | 	global $logFh, $logLevel, $notificationLevel; | ||||||
|  | 	echo "$level" | ||||||
| 	if ( $level >= $logLevel) | 	if ( $level >= $logLevel) | ||||||
| 	{ | 	{ | ||||||
| 		fwrite($logFh, "$level : $log" . EOL); | 		fwrite($logFh, "$level : $log" . EOL); | ||||||
| @@ -29,9 +32,9 @@ function logger($level, $log) | |||||||
| 	} | 	} | ||||||
| 	if ($level >= $notificationLevel) | 	if ($level >= $notificationLevel) | ||||||
| 	{ | 	{ | ||||||
| 		if(notify($message) == true) | 		if(notify(" Moha\n" . $log) == false) | ||||||
| 		{ | 		{ | ||||||
| 			logger(INFO, __("Notification not sent")); | 			logger(INFO, _("Notification not sent")); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user