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