- added values in celsius degree and in km/h in pws2mqtt
- debug of hooks -added webserver.php
This commit is contained in:
		
							
								
								
									
										14
									
								
								class/db.php
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								class/db.php
									
									
									
									
									
								
							@@ -50,18 +50,12 @@ class db extends mysqli
 | 
				
			|||||||
			{
 | 
								{
 | 
				
			||||||
				// calculate a min/max value for storing data
 | 
									// calculate a min/max value for storing data
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				$var = $properties2log[$propertyTree];
 | 
									$minMax = $properties2log[$propertyTree];
 | 
				
			||||||
				if (is_callable($var))
 | 
									if (is_callable($minMax))
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					$var = $var($value);
 | 
										$minMax = $minMax($value);
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				//if (!is_numeric($var))
 | 
					
 | 
				
			||||||
				//{
 | 
					 | 
				
			||||||
				$minMax = (float)$value + $var;
 | 
					 | 
				
			||||||
				//}else
 | 
					 | 
				
			||||||
				//{
 | 
					 | 
				
			||||||
				//	$minMax = $var;
 | 
					 | 
				
			||||||
				//}
 | 
					 | 
				
			||||||
				echo "minMax = " .$minMax . EOL;
 | 
									echo "minMax = " .$minMax . EOL;
 | 
				
			||||||
				//echo "oldValue = " . $oldValue . EOL;
 | 
									//echo "oldValue = " . $oldValue . EOL;
 | 
				
			||||||
				//echo "Value = " . $value . EOL;
 | 
									//echo "Value = " . $value . EOL;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -33,8 +33,9 @@ class device
 | 
				
			|||||||
	public $payload;
 | 
						public $payload;
 | 
				
			||||||
	public $availability;
 | 
						public $availability;
 | 
				
			||||||
	public $toConfirm;
 | 
						public $toConfirm;
 | 
				
			||||||
 | 
						public $triggerDevice;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private function __construct()
 | 
						public function __construct()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		$this->availability = array("value" => null, "functions" => array());
 | 
							$this->availability = array("value" => null, "functions" => array());
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,7 +22,12 @@ $deviceTable = array(
 | 
				
			|||||||
	"0x00124b002226e384" => "RDC_SALON_BAIE",
 | 
						"0x00124b002226e384" => "RDC_SALON_BAIE",
 | 
				
			||||||
	"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",
 | 
				
			||||||
 | 
						"0x086bd7fffe5aeab6" => "RDC_CHAMBRE_AMBIANCE",
 | 
				
			||||||
 | 
						"0xbc33acfffe6561e4" => "RDC_CHAMBRE_ECLAIRAGE",
 | 
				
			||||||
 | 
						"0x00124b00234484ad" => "RDC_CHAMBRE_MVMT",
 | 
				
			||||||
 | 
						"0x04cf8cdf3c7b6056" => "RDC_CHAMBRE_LUMINOSITE",
 | 
				
			||||||
 | 
						"0x00158d0006c0447c" => "RDC_CHAMBRE_ARMOIRE_GAUCHE"
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
foreach($deviceTable as $device => $name)
 | 
					foreach($deviceTable as $device => $name)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,8 +27,8 @@ $properties2log = array(
 | 
				
			|||||||
	"dewptf" => 0.5,
 | 
						"dewptf" => 0.5,
 | 
				
			||||||
	"windchillf" => 0.5,
 | 
						"windchillf" => 0.5,
 | 
				
			||||||
	"winddir" => 40,
 | 
						"winddir" => 40,
 | 
				
			||||||
	"windspeedmph" => 20,
 | 
						"windspeedmph" => 5,
 | 
				
			||||||
	"windgustmph" => 20,
 | 
						"windgustmph" => 5,
 | 
				
			||||||
	"rainin" => null,
 | 
						"rainin" => null,
 | 
				
			||||||
	//"dailyrainin" => null,
 | 
						//"dailyrainin" => null,
 | 
				
			||||||
	//"weeklyrainin" => null,
 | 
						//"weeklyrainin" => null,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -199,7 +199,7 @@ function iterateDevice($topic, $fn, $parentDevice, &$device, $payloadArray, $pro
 | 
				
			|||||||
					$device->{$key} = array("value" => null);
 | 
										$device->{$key} = array("value" => null);
 | 
				
			||||||
					$device->$key["functions"] = array();
 | 
										$device->$key["functions"] = array();
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				echo $key . ' ===> oldvalue = ' . $oldValue . " value = " . $value . EOL;
 | 
									//echo $key . ' ===> oldvalue = ' . $oldValue . " value = " . $value . EOL;
 | 
				
			||||||
				if ($oldValue !== $value)
 | 
									if ($oldValue !== $value)
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					$device->$key["value"] = $value;
 | 
										$device->$key["value"] = $value;
 | 
				
			||||||
@@ -207,8 +207,6 @@ function iterateDevice($topic, $fn, $parentDevice, &$device, $payloadArray, $pro
 | 
				
			|||||||
					//$changed[$fn]["value"] = $value;
 | 
										//$changed[$fn]["value"] = $value;
 | 
				
			||||||
					logger(INFO, sprintf(_("Device %s property %s, %s"), $fn, $propertyTree . $key, bool2string($value)));
 | 
										logger(INFO, sprintf(_("Device %s property %s, %s"), $fn, $propertyTree . $key, bool2string($value)));
 | 
				
			||||||
					$mohaDB->logProperty($parentDevice, $propertyTree . $key, $value,   $oldValue);
 | 
										$mohaDB->logProperty($parentDevice, $propertyTree . $key, $value,   $oldValue);
 | 
				
			||||||
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
				if (!empty($device->$key["functions"]))
 | 
									if (!empty($device->$key["functions"]))
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					logger(DEBUG,_("executing notifications functions"));
 | 
										logger(DEBUG,_("executing notifications functions"));
 | 
				
			||||||
@@ -217,6 +215,8 @@ function iterateDevice($topic, $fn, $parentDevice, &$device, $payloadArray, $pro
 | 
				
			|||||||
						$function($device, $key, $value);
 | 
											$function($device, $key, $value);
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			//}
 | 
								//}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -159,6 +159,14 @@ function setDelay(&$device, $delay, $unit="second", $property, $value, $replace=
 | 
				
			|||||||
	$loglevel = $oldLevel;
 | 
						$loglevel = $oldLevel;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function removeEvent($device, $property , $value)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if (($eventKey = searchEvent($device, $property , $value)) === true)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							deleteEvent($eventKey);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
function searchEvent($device, $property , $value)
 | 
					function searchEvent($device, $property , $value)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	global $events;
 | 
						global $events;
 | 
				
			||||||
@@ -188,7 +196,6 @@ function deleteEvent($eventKey)
 | 
				
			|||||||
		//try to delete an flase event
 | 
							//try to delete an flase event
 | 
				
			||||||
		logger(WARNING, _("Try to delete event with key = ") . var_dump($eventKey));
 | 
							logger(WARNING, _("Try to delete event with key = ") . var_dump($eventKey));
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,15 +6,7 @@ class etage_plan_travail_eclairage  extends hook
 | 
				
			|||||||
	public $active = true;		//enable/disable hook (true => enabled)
 | 
						public $active = true;		//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("action", false));
 | 
						protected $devicelist = array("ETAGE_CUISINE_PLAN_TRAVAIL_ECLAIRAGE" => array("state", false));
 | 
				
			||||||
 | 
					 | 
				
			||||||
	// if you need some initialisation when creating the object, uncomment andput your code here.
 | 
					 | 
				
			||||||
	// If existing, This function is called by __construct
 | 
					 | 
				
			||||||
	/*protected function init()
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		// Your code here
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	*/
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// callback fonction. Is called with these 3 parameters
 | 
						// callback fonction. Is called with these 3 parameters
 | 
				
			||||||
	// $device 		-> calling device
 | 
						// $device 		-> calling device
 | 
				
			||||||
@@ -47,7 +39,6 @@ class etage_plan_travail_eclairage  extends hook
 | 
				
			|||||||
		}else
 | 
							}else
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			logger(INFO, sprintf(_("not publishing message: %s to %s, already set"), json_encode($msg), $device->friendlyName));
 | 
								logger(INFO, sprintf(_("not publishing message: %s to %s, already set"), json_encode($msg), $device->friendlyName));
 | 
				
			||||||
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		//echo 'delaystate = ' . var_dump($delayState);
 | 
							//echo 'delaystate = ' . var_dump($delayState);
 | 
				
			||||||
		if ($delayState !== false) 	setDelay($device, $this->delay, $this->timeUnit, "state", $delayState, true);
 | 
							if ($delayState !== false) 	setDelay($device, $this->delay, $this->timeUnit, "state", $delayState, true);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,16 +4,16 @@ class rdc_chambre_eclairage extends hook
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	public $hookName = "rdc_chambre_eclairage";
 | 
						public $hookName = "rdc_chambre_eclairage";
 | 
				
			||||||
	public $active = false;			//enable/disable hook (true => enabled)
 | 
						public $active = false;			//enable/disable hook (true => enabled)
 | 
				
			||||||
 | 
						public $delay = 5;				// amount of time in $timeunit
 | 
				
			||||||
	protected $devicelist = array();
 | 
						public $timeUnit = "minute";	// unit of time for delay, second, minute, hour, day, week, month, year
 | 
				
			||||||
 | 
						public $luminance_min = 60;
 | 
				
			||||||
	// if you need some initialisation when creating the object, uncomment andput your code here.
 | 
						public $luminance_max = 3000;
 | 
				
			||||||
	// If existing, This function is called by __construct
 | 
						protected $devicelist = array(
 | 
				
			||||||
	/*protected function init()
 | 
							"RDC_CHAMBRE_AMBIANCE" => array("state", false),
 | 
				
			||||||
	{
 | 
							"RDC_CHAMBRE_ECLAIRAGE" => array("state_l1", false),
 | 
				
			||||||
		// Your code here
 | 
							"RDC_CHAMBRE_MVMT" => array("occupancy", false),
 | 
				
			||||||
	}
 | 
							"RDC_CHAMBRE_ARMOIRE_GAUCHE" => array("contact", false)
 | 
				
			||||||
	*/
 | 
						);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// callback fonction. Is called with these 3 parameters
 | 
						// callback fonction. Is called with these 3 parameters
 | 
				
			||||||
	// $device 		-> calling device
 | 
						// $device 		-> calling device
 | 
				
			||||||
@@ -21,10 +21,34 @@ class rdc_chambre_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)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		// here your code
 | 
							global $devices, $indexDevices;
 | 
				
			||||||
 | 
							$lux = $indexDevices[RDC_CHAMBRE_LUMINOSITE]->illuminance_lux;
 | 
				
			||||||
 | 
							if ($property == "occupancy" and $value == "ON")
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								$this->send(RDC_CHAMBRE_LUMINOSITE, "ON", "OFF", AUTO);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		logger (INFO, sprintf(_("%s: notification received from MQTT from %s => parameter: %s value: %s"), $this->hookName, $device->friendlyName, $property, $value));
 | 
							logger (INFO, sprintf(_("%s: notification received from MQTT from %s => parameter: %s value: %s"), $this->hookName, $device->friendlyName, $property, $value));
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private function send($device, $state, $delayState = false, $method = MANUAL)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							global $devices, $indexDevices;
 | 
				
			||||||
 | 
							$device =  &$indexDevices[$device];
 | 
				
			||||||
 | 
							$msg = array("state" => $state);
 | 
				
			||||||
 | 
							if ($device->state["value"] != $state)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								logger(INFO, sprintf(_("publishing message: %s to %s"), json_encode($msg), $device->friendlyName));
 | 
				
			||||||
 | 
								$device->payload = $msg;
 | 
				
			||||||
 | 
								$device->set();
 | 
				
			||||||
 | 
								$device->method = $method;
 | 
				
			||||||
 | 
							}else
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								logger(INFO, sprintf(_("not publishing message: %s to %s, already set"), json_encode($msg), $device->friendlyName));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							//echo 'delaystate = ' . var_dump($delayState);
 | 
				
			||||||
 | 
							if ($delayState !== false) 	setDelay($device, $this->delay, $this->timeUnit, "state", $delayState, true);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$hooks["rdc_chambre_eclairage"] = new rdc_chambre_eclairage();
 | 
					$hooks["rdc_chambre_eclairage"] = new rdc_chambre_eclairage();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,7 +11,7 @@ class rdc_salon_eclairage extends hook
 | 
				
			|||||||
		RDC_SALON_LUMINOSITE => array("illuminance_lux", false)
 | 
							RDC_SALON_LUMINOSITE => array("illuminance_lux", false)
 | 
				
			||||||
		);
 | 
							);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public $delay = 5;				// amount of time in $timeunit
 | 
						public $delay = 3;				// amount of time in $timeunit
 | 
				
			||||||
	public $timeUnit = "minute";	// unit of time for delay, second, minute, hour, day, week, month, year
 | 
						public $timeUnit = "minute";	// unit of time for delay, second, minute, hour, day, week, month, year
 | 
				
			||||||
	public $luminance_min = 60;
 | 
						public $luminance_min = 60;
 | 
				
			||||||
	public $luminance_max = 3000;
 | 
						public $luminance_max = 3000;
 | 
				
			||||||
@@ -28,19 +28,29 @@ class rdc_salon_eclairage extends hook
 | 
				
			|||||||
				//print_r($indexDevices[RDC_SALON_LUMINOSITE]);
 | 
									//print_r($indexDevices[RDC_SALON_LUMINOSITE]);
 | 
				
			||||||
				if ($value == ON and $indexDevices[RDC_SALON_LUMINOSITE]->illuminance_lux["value"] <= $this->luminance_min)
 | 
									if ($value == ON and $indexDevices[RDC_SALON_LUMINOSITE]->illuminance_lux["value"] <= $this->luminance_min)
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					$this->send("ON", "OFF", AUTO);
 | 
										$this->send("ON", null, AUTO);
 | 
				
			||||||
 | 
										removeEvent($indexDevices[RDC_SALON_ECLAIRAGE_PANNEAU], "state", "OFF");
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									if ($value == OFF)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										if ($indexDevices(RDC_SALON_MVMT)->occupancy == OFF and $indexDevices(RDC_SALON_MVMT2)->occupancy == OFF)
 | 
				
			||||||
 | 
										{
 | 
				
			||||||
 | 
											setDelay($indexDevices[RDC_SALON_ECLAIRAGE_PANNEAU], $this->delay, $this->timeUnit, "state", "OFF", true);
 | 
				
			||||||
 | 
											//$this->send("ON", "OFF", AUTO);
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				break;
 | 
									break;
 | 
				
			||||||
			case "contact":
 | 
								case "contact":
 | 
				
			||||||
				if ($value == false and $indexDevices[RDC_SALON_LUMINOSITE]->illuminance_lux["value"] <= $this->luminance_min)
 | 
									if ($value == false and $indexDevices[RDC_SALON_LUMINOSITE]->illuminance_lux["value"] <= $this->luminance_min)
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					$this->send("ON", "OFF", AUTO);
 | 
										//$this->send("ON", "OFF", AUTO);
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				break;
 | 
									break;
 | 
				
			||||||
			case "illuminance_lux":
 | 
								case "illuminance_lux":
 | 
				
			||||||
				if ($value >= $this->luminance_max)
 | 
									if ($value >= $this->luminance_max)
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					$this->send("OFF");
 | 
										//$this->send("OFF", null, AUTO);
 | 
				
			||||||
 | 
										removeEvent($indexDevices[RDC_SALON_ECLAIRAGE_PANNEAU], "state", "OFF");
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				break;
 | 
									break;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										18
									
								
								moha.php
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								moha.php
									
									
									
									
									
								
							@@ -1,21 +1,19 @@
 | 
				
			|||||||
<?php
 | 
					<?php
 | 
				
			||||||
$title = "moha";
 | 
					$title = "moha";
 | 
				
			||||||
$testMode = true;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
$webServerIsActive = true;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
cli_set_process_title($title);
 | 
					cli_set_process_title($title);
 | 
				
			||||||
file_put_contents("/proc/".getmypid()."/comm",$title);
 | 
					file_put_contents("/proc/".getmypid()."/comm",$title);
 | 
				
			||||||
 | 
					declare(ticks = 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$testMode = true;
 | 
				
			||||||
 | 
					$webServerIsActive = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
require "constants.php";
 | 
					require "constants.php";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
declare(ticks = 1);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
$listProperties = array("powerSource" => "batterie");
 | 
					$listProperties = array("powerSource" => "batterie");
 | 
				
			||||||
$listPropertiesKeys = array("property");
 | 
					$listPropertiesKeys = array("property");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//global variables
 | 
					//global variables
 | 
				
			||||||
$logLevel = INFO | NOTICE | WARNING | ERROR | ALERT; //ALL;
 | 
					$logLevel = ALL; // INFO | NOTICE | WARNING | ERROR | ALERT; //ALL;
 | 
				
			||||||
$notificationLevel = ALERT | ERROR;
 | 
					$notificationLevel = ALERT | ERROR;
 | 
				
			||||||
$topics = array();				// list of topics
 | 
					$topics = array();				// list of topics
 | 
				
			||||||
$mids = array();				// list of message IDs
 | 
					$mids = array();				// list of message IDs
 | 
				
			||||||
@@ -61,7 +59,7 @@ function notify($message)
 | 
				
			|||||||
function logger($level, $log, $notif = true)
 | 
					function logger($level, $log, $notif = true)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	global $logFh, $logLevel, $notificationLevel, $logLevels;
 | 
						global $logFh, $logLevel, $notificationLevel, $logLevels;
 | 
				
			||||||
	$logString = date("c") . ' ' . $logLevels[$level] . " : $log";
 | 
						$logString = date("c") . ' ' . $logLevels[$level] . " " . __FILE__ . ":" . __LINE__ .  " : " . $log;
 | 
				
			||||||
	if ($level & $logLevel)
 | 
						if ($level & $logLevel)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		fwrite($logFh, $logString . EOL);
 | 
							fwrite($logFh, $logString . EOL);
 | 
				
			||||||
@@ -112,7 +110,7 @@ function listHooks($dir, &$hookList)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
function endMoha()
 | 
					function endMoha()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	global $devices, $topics, $nSubscribed ,$client, $logFh, $connected;
 | 
						global $testMode, $devices, $topics, $nSubscribed ,$client, $logFh, $connected;
 | 
				
			||||||
	$x = 0;
 | 
						$x = 0;
 | 
				
			||||||
	storeDB($devices, "/usr/share/moha/moha.db");
 | 
						storeDB($devices, "/usr/share/moha/moha.db");
 | 
				
			||||||
	if($testMode) file_put_contents("moha.devices", print_r($devices, true));
 | 
						if($testMode) file_put_contents("moha.devices", print_r($devices, true));
 | 
				
			||||||
@@ -149,6 +147,7 @@ require $configDir . "/properties2log.php";
 | 
				
			|||||||
require "mqtt_functions.php";
 | 
					require "mqtt_functions.php";
 | 
				
			||||||
require "events.php";
 | 
					require "events.php";
 | 
				
			||||||
require "db_functions.php";
 | 
					require "db_functions.php";
 | 
				
			||||||
 | 
					require "webserver.php";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//logger(DEBUG, _('assigning variable $client to mosquitto class "client"'), false);
 | 
					//logger(DEBUG, _('assigning variable $client to mosquitto class "client"'), false);
 | 
				
			||||||
//$client = new Mosquitto\Client();
 | 
					//$client = new Mosquitto\Client();
 | 
				
			||||||
@@ -263,6 +262,7 @@ while (true)
 | 
				
			|||||||
			logger(DEBUG,_("All hooks initialized"));
 | 
								logger(DEBUG,_("All hooks initialized"));
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		checkEvents();
 | 
							checkEvents();
 | 
				
			||||||
 | 
							askWebServer($read);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,9 +8,10 @@ $topics["pws2mqtt"]->callback = function($topic, $message)
 | 
				
			|||||||
	logger(INFO, sprintf(_("Incoming notification of device %s => friendly name : %s"), $topic[0], $topic[1]));
 | 
						logger(INFO, sprintf(_("Incoming notification of device %s => friendly name : %s"), $topic[0], $topic[1]));
 | 
				
			||||||
	$device = & $devices[$topic[0]];
 | 
						$device = & $devices[$topic[0]];
 | 
				
			||||||
	$payloadArray = json_decode($message->payload);
 | 
						$payloadArray = json_decode($message->payload);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!isset($device[$fn]))
 | 
						if (!isset($device[$fn]))
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		logger(LOG_WARNING, $logFh, "init of " . $fn .EOL);
 | 
							logger(WARNING, $logFh, "init of " . $fn .EOL);
 | 
				
			||||||
		$device[$fn] = array();
 | 
							$device[$fn] = array();
 | 
				
			||||||
		$device[$fn]["device"] = new device;
 | 
							$device[$fn]["device"] = new device;
 | 
				
			||||||
		$device[$fn]["device"]->type = $payloadArray->type;
 | 
							$device[$fn]["device"]->type = $payloadArray->type;
 | 
				
			||||||
@@ -19,6 +20,24 @@ $topics["pws2mqtt"]->callback = function($topic, $message)
 | 
				
			|||||||
		$indexDevices[$device[$fn]["device"]->ieeeAddress] = & $device[$fn]["device"];
 | 
							$indexDevices[$device[$fn]["device"]->ieeeAddress] = & $device[$fn]["device"];
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	$device = & $device[$fn];
 | 
						$device = & $device[$fn];
 | 
				
			||||||
 | 
						foreach ($payloadArray as $property => $value)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							$str = substr($property, -1);
 | 
				
			||||||
 | 
							if ($str == "f")
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								$newProperty = rtrim($property, "f") . "c";
 | 
				
			||||||
 | 
								$payloadArray->{$newProperty} = farenheit2celsius($value);
 | 
				
			||||||
 | 
							}elseif ($str == "h")
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								$newProperty = substr($property, 0, -3) . "kmh";
 | 
				
			||||||
 | 
								$payloadArray->{$newProperty} =  mph2kmh($value);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if ($property == "baromin")
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								$newProperty = "barominmb";
 | 
				
			||||||
 | 
								$payloadArray->{"barominmb"} =  millibars($value);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	changeDevice($topic[0], $fn, $device["device"], $payloadArray);
 | 
						changeDevice($topic[0], $fn, $device["device"], $payloadArray);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
?>
 | 
					?>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,12 +23,17 @@ function now()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
function farenheit2celsius($value)
 | 
					function farenheit2celsius($value)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return ($value - 32 / 1.8);
 | 
						return round((((float)$value - 32) / 1.8),2);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function mph2kmh($value)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return round(((float)$value * 1.60934),2);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function millibars($value)
 | 
					function millibars($value)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return ($value * 0.029530);
 | 
						return round(((float)$value * 33.86),2);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function mktopic($device)
 | 
					function mktopic($device)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										101
									
								
								webserver.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								webserver.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,101 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// server init: No Timeout
 | 
				
			||||||
 | 
					set_time_limit(0);
 | 
				
			||||||
 | 
					ob_implicit_flush();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$error_message = null;
 | 
				
			||||||
 | 
					$error_code = null;
 | 
				
			||||||
 | 
					$listenHost = "0.0.0.0";
 | 
				
			||||||
 | 
					$listenPort = 1025;
 | 
				
			||||||
 | 
					$socket = stream_socket_server("tcp://" . $listenHost . ":" . $listenPort, $error_code, $error_message) or logger(ERROR, _("Could not create socket") . EOL);
 | 
				
			||||||
 | 
					stream_set_blocking($socket, false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$read  = array( $socket );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function askWebServer($read)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						$array = array();
 | 
				
			||||||
 | 
						$argList =array();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if ( stream_select( $read, $array, $array, 0 ))
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							logger(DEBUG,_("socket ready to read"));
 | 
				
			||||||
 | 
							$spawn = stream_socket_accept($read[0]);
 | 
				
			||||||
 | 
							if ($spawn !== false)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								logger(DEBUG,_("socket accepted"));
 | 
				
			||||||
 | 
								$input = fgets($spawn, 4096);
 | 
				
			||||||
 | 
								logger(DEBUG, $input);
 | 
				
			||||||
 | 
								if (!empty($input))
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									$input = substr($input,5);
 | 
				
			||||||
 | 
									$input = explode(" ", $input);			// suppress text
 | 
				
			||||||
 | 
									$argTmp = explode("&", $input[0]);
 | 
				
			||||||
 | 
									foreach($argTmp as $tmp)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										logger(DEBUG, $tmp);
 | 
				
			||||||
 | 
										$array = explode("=", $tmp);
 | 
				
			||||||
 | 
										print_r($array);
 | 
				
			||||||
 | 
										if (isset($array[1]))	$argList[$array[0]] = $array[1];
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									if(array_key_exists("cmd", $argList))
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										switch(strtolower($argList["cmd"]))
 | 
				
			||||||
 | 
										{
 | 
				
			||||||
 | 
											case "get":
 | 
				
			||||||
 | 
												logger(DEBUG, "get reached");
 | 
				
			||||||
 | 
												if(empty($argList["device"]))
 | 
				
			||||||
 | 
												{
 | 
				
			||||||
 | 
													$response = "<html><header><body>get passed</body></header><html>";
 | 
				
			||||||
 | 
												}
 | 
				
			||||||
 | 
												fwrite($spawn, $response);
 | 
				
			||||||
 | 
												break;
 | 
				
			||||||
 | 
											case "set":
 | 
				
			||||||
 | 
												logger(DEBUG, "set reached");
 | 
				
			||||||
 | 
												$response = "<html><header><body>set passed</body></header><html>";
 | 
				
			||||||
 | 
												fwrite($spawn, $response);
 | 
				
			||||||
 | 
												break;
 | 
				
			||||||
 | 
											case "print":
 | 
				
			||||||
 | 
												logger(DEBUG, "print reached");
 | 
				
			||||||
 | 
												$var = $GLOBALS[$argList["object"]];
 | 
				
			||||||
 | 
												if (isset($argList["topic"]))
 | 
				
			||||||
 | 
												{
 | 
				
			||||||
 | 
													$topic = $argList["topic"];
 | 
				
			||||||
 | 
												}
 | 
				
			||||||
 | 
												if (isset($argList["address"]))
 | 
				
			||||||
 | 
												{
 | 
				
			||||||
 | 
													$var = $var[$argList["address"]];
 | 
				
			||||||
 | 
												}elseif (isset($argList["fn"]))
 | 
				
			||||||
 | 
												{
 | 
				
			||||||
 | 
													if(!empty($topic))
 | 
				
			||||||
 | 
													{
 | 
				
			||||||
 | 
														$var = $var[$topic];
 | 
				
			||||||
 | 
														$path = explode("/", $argList["fn"]);
 | 
				
			||||||
 | 
														foreach($path as $tmp)
 | 
				
			||||||
 | 
														{
 | 
				
			||||||
 | 
															$var = $var[$tmp];
 | 
				
			||||||
 | 
														}
 | 
				
			||||||
 | 
													}else
 | 
				
			||||||
 | 
													{
 | 
				
			||||||
 | 
														logger(ERROR, _("topic is not defining: add &topic=zigbee2mqtt to the resquest"));
 | 
				
			||||||
 | 
													}
 | 
				
			||||||
 | 
												}
 | 
				
			||||||
 | 
												$error = error_get_last();
 | 
				
			||||||
 | 
												if($error !== null)
 | 
				
			||||||
 | 
												{
 | 
				
			||||||
 | 
													$response = "<html><header><body>" . $error["message"] . " file: " . $error["file"] . " line: " . $error["line"] .  "</body></header><html>";
 | 
				
			||||||
 | 
												}
 | 
				
			||||||
 | 
												$response = "<html><header><body>" . print_r($var, true) .  "</body></header><html>";
 | 
				
			||||||
 | 
												fwrite($spawn, $response);
 | 
				
			||||||
 | 
												break;
 | 
				
			||||||
 | 
											default:
 | 
				
			||||||
 | 
												logger(DEBUG, "not understanding command");
 | 
				
			||||||
 | 
												fwrite($spawn, "not understanding command");
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					?>
 | 
				
			||||||
		Reference in New Issue
	
	Block a user