1
0

debug + réglage rdc_store

This commit is contained in:
Daniel Tartavel 2022-06-13 19:22:08 +02:00
parent b2f79dd49c
commit 413c25c0b7
5 changed files with 198 additions and 141 deletions

View File

@ -98,7 +98,7 @@ class db extends mysqli
{ {
$value = $this->result->fetch_array(MYSQLI_NUM); $value = $this->result->fetch_array(MYSQLI_NUM);
//var_dump($value); //var_dump($value);
logger(DEBUG, _("result is: ") . print_r($value, true), __FILE__ . ":" . __LINE__); logger(DEBUG, _("result is: ") . print_r($value[0], true), __FILE__ . ":" . __LINE__);
return $value[0]; return $value[0];
} }
} }

View File

@ -28,54 +28,59 @@ class hook
static $requestflag = 0; static $requestflag = 0;
$result = true; $result = true;
// assigne the function to the sensors devices // assigne the function to the sensors devices
if ($this->active === true) foreach ($this->devicelist as $ieeeAddress => $property)
{ {
foreach ($this->devicelist as $ieeeAddress => $property)
{
if (array_key_exists($ieeeAddress, $indexDevices))
{
logger(DEBUG, _("Device: ") . $ieeeAddress, __FILE__ . ":" . __LINE__);
if (!array_key_exists($this->hookName, $indexDevices[$ieeeAddress]->properties[$property]["functions"]))
{
if (array_key_exists($property, $indexDevices[$ieeeAddress]->properties))
{
logger(DEBUG, _("Trying to store callback"), __FILE__ . ":" . __LINE__);
if (array_key_exists("functions", $indexDevices[$ieeeAddress]->properties[$property]))
{
$indexDevices[$ieeeAddress]->properties[$property]["functions"][$this->hookName] = array($this,"callback");
logger(DEBUG, sprintf(_("Property '%s' of %s is initialized with callback"), $property, $indexDevices[$ieeeAddress]->friendlyName), __FILE__ . ":" . __LINE__);
}else if (array_key_exists($ieeeAddress, $indexDevices))
{ {
logger(WARNING, sprintf(_("Hook %s can not initialize Property '%s' of device %s"), $this->hookName, $property, $ieeeAddress), __FILE__ . ":" . __LINE__); logger(DEBUG, _("Device: ") . $ieeeAddress, __FILE__ . ":" . __LINE__);
$result = false; //if (!array_key_exists($this->hookName, $indexDevices[$ieeeAddress]->properties[$property]["functions"]))
} //{
}else if (array_key_exists($property, $indexDevices[$ieeeAddress]->properties))
{
logger(DEBUG, _("Trying to store callback"), __FILE__ . ":" . __LINE__);
if (array_key_exists("functions", $indexDevices[$ieeeAddress]->properties[$property]))
{
if ($this->active === true)
{ {
logger(WARNING, sprintf(_("Hook %s can not initialize Property '%s' of device %s : property does not exists"), $this->hookName, $property, $indexDevices[$ieeeAddress]->friendlyName), __FILE__ . ":" . __LINE__); $indexDevices[$ieeeAddress]->properties[$property]["functions"][$this->hookName] = array($this,"callback");
$result = false; logger(DEBUG, sprintf(_("Property '%s' of %s is initialized with callback"), $property, $indexDevices[$ieeeAddress]->friendlyName), __FILE__ . ":" . __LINE__);
}elseif ($this->active === false)
{
unset ($indexDevices[$ieeeAddress]->properties[$property]["functions"][$this->hookName]);
logger(DEBUG, $indexDevices[$ieeeAddress]->friendlyName . "/" . $property . _(" Unsetting ") .$this->hookName , __FILE__ . ":" . __LINE__);
} }
}else }else
{ {
logger(DEBUG, _("Callback already installed"), __FILE__ . ":" . __LINE__); logger(WARNING, sprintf(_("Hook %s can not initialize Property '%s' of device %s"), $this->hookName, $property, $ieeeAddress), __FILE__ . ":" . __LINE__);
$result = false;
} }
}else }else
{ {
logger(ERROR, $ieeeAddress . (" does not exists"), __FILE__ . ":" . __LINE__); logger(WARNING, sprintf(_("Hook %s can not initialize Property '%s' of device %s : property does not exists"), $this->hookName, $property, $indexDevices[$ieeeAddress]->friendlyName), __FILE__ . ":" . __LINE__);
if ($devicesRequest === false)
{
publish("zigbee2mqtt", array("bridge/devices" => ""), "get");
$devicesRequest = true;
}elseif ($requestflag++ > 30)
{
$requestflag = 0;
}
$result = false; $result = false;
mkIndexes(); }
//}else
//{
// logger(DEBUG, _("Callback already installed"), __FILE__ . ":" . __LINE__);
//}
}else
{
logger(ERROR, $ieeeAddress . (" does not exists"), __FILE__ . ":" . __LINE__);
if ($devicesRequest === false)
{
publish("zigbee2mqtt", array("bridge/devices" => ""), "get");
$devicesRequest = true;
}elseif ($requestflag++ > 30)
{
$requestflag = 0;
} }
$result = false;
mkIndexes();
} }
//echo "result => "; var_dump($result); //echo "result => "; var_dump($result);
if ($result === true) if ($result === true)
{ {
@ -83,13 +88,7 @@ class hook
logger(INFO, $this->hookName . _(" initialized"), __FILE__ . ":" . __LINE__); logger(INFO, $this->hookName . _(" initialized"), __FILE__ . ":" . __LINE__);
//var_dump($this); //var_dump($this);
} }
}/*else }
{
$this->initialized = true;
logger(INFO, $this->hookName . _("hook is disabled"), __FILE__ . ":" . __LINE__);
}*/
//print(var_export($indexDevices[$ieeeAddress],true));
//storeDB($devices,"debug.devices");
return $result; return $result;
} }
} }

View File

@ -275,7 +275,7 @@ function getDevicesValues($topic)
function changeValue(&$property, $value, &$parentDevice, $propertyTree, $key) function changeValue(&$property, $value, &$parentDevice, $propertyTree, $key)
{ {
global $mohaDB, $properties2log; global $mohaDB, $properties2log, $hooks;
//$changed[$fn]["key"] = $key; //$changed[$fn]["key"] = $key;
//$changed[$fn]["value"] = $value; //$changed[$fn]["value"] = $value;
@ -293,13 +293,14 @@ function changeValue(&$property, $value, &$parentDevice, $propertyTree, $key)
{ {
try try
{ {
logger(INFO, print_r($function, true), __FILE__ . ":" . __LINE__); $active = $hooks[$function[0]->hookName]->active;
if ( $function[0]->active === true ) logger(INFO, "active = " . bool2string($active), __FILE__ . ":" . __LINE__);
if ( $active === true )
{ {
$function($parentDevice, $key, $value); $function($parentDevice, $key, $value);
}else }else
{ {
logger(INFO, $function . _(" is disabled"), __FILE__ . ":" . __LINE__ ); logger(INFO, $function[0]->hookName . _(" is disabled"), __FILE__ . ":" . __LINE__ );
} }
}catch (Exception $e) }catch (Exception $e)

View File

@ -4,6 +4,7 @@ class availability
{ {
public $hookname = "availability"; public $hookname = "availability";
public $initialized = true; public $initialized = true;
public $active = true;
// by default all devices are listening for availability // by default all devices are listening for availability
function __construct() function __construct()
@ -21,6 +22,10 @@ class availability
} }
} }
function installHooks(&$indexDevices)
{
return true;
}
// 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

View File

@ -3,7 +3,7 @@
class rdc_store extends hook class rdc_store extends hook
{ {
public $hookName = "rdc_store"; public $hookName = "rdc_store";
public $active = false; //enable/disable hook (true => enabled) public $active = true; //enable/disable hook (true => enabled)
public $timer = 0; public $timer = 0;
public $luminance_min = 60; public $luminance_min = 60;
public $luminance_max = 3000; public $luminance_max = 3000;
@ -29,7 +29,6 @@ class rdc_store extends hook
{ {
global $mohaDB, $devices, $indexDevices; global $mohaDB, $devices, $indexDevices;
if ($this->active)
logger(DEBUG, "Callback : RDC_STORE", __FILE__ . ":" . __LINE__); logger(DEBUG, "Callback : RDC_STORE", __FILE__ . ":" . __LINE__);
$rain = 0; $rain = 0;
static $rainS; static $rainS;
@ -41,127 +40,178 @@ class rdc_store extends hook
$storeDevice = $indexDevices[RDC_STORE]; $storeDevice = $indexDevices[RDC_STORE];
//$this->maxLevel = 100; //$this->maxLevel = 100;
$r = 100; $r = 100;
$moving = "STOP";
$motorReversal = false;
if (array_key_exists("position", $storeDevice->properties)) if (array_key_exists("moving", $storeDevice->properties))
{ {
$this->storeLevel = 100 - $storeDevice->properties["position"]["value"]; $moving = $storeDevice->properties["moving"]["value"];
logger(DEBUG, "storeLevel=" . $this->storeLevel, __FILE__ . ":" . __LINE__); logger(DEBUG, "Moving = " . $moving, __FILE__ . ":" . __LINE__);
}else
{
$this->storeLevel = 0;
//return true;
} }
if (array_key_exists("illuminance_lux", $indexDevices[RDC_EXTERIEUR_LUMINOSITE]->properties)) if (array_key_exists("motor_reversal", $storeDevice->properties))
{ {
$exterieur_lux = $indexDevices[RDC_EXTERIEUR_LUMINOSITE]->properties["illuminance_lux"]["value"]; if ($storeDevice->properties["motor_reversal"]["value"] == "ON")
$exterieurLuxMoyen = $mohaDB->moyenne($indexDevices[RDC_EXTERIEUR_LUMINOSITE], "illuminance_lux", 5);
if ($exterieur_lux == 0)
{ {
$exterieurLuxMoyen = $exterieur_lux; $motorReversal = true;
}else
{
$motorReversal = false;
} }
logger(DEBUG, "exterieur_lux=" . $exterieur_lux . " et exterieurLuxMoyen=" . $exterieurLuxMoyen, __FILE__ . ":" . __LINE__); logger(DEBUG, "Motor reversal =" . bool2string($motorReversal), __FILE__ . ":" . __LINE__);
} }
if (array_key_exists("illuminance_lux", $indexDevices[RDC_SALON_LUMINOSITE]->properties))
if ($moving == "STOP")
{ {
$salon_lux = $mohaDB->moyenne($indexDevices[RDC_SALON_LUMINOSITE], "illuminance_lux", 10); if (array_key_exists("position", $storeDevice->properties))
if ($salon_lux == 0)
{ {
$salon_lux = $indexDevices[RDC_SALON_LUMINOSITE]->properties["illuminance_lux"]["value"]; if ($motorReversal)
}
logger(DEBUG, "salon_lux=" . $salon_lux, __FILE__ . ":" . __LINE__);
}
if ($exterieur_lux > 30000 or $salon_lux >600)
{
logger(DEBUG, "exterieur_lux > 30000 or salon_lux >600", __FILE__ . ":" . __LINE__);
if ($this->maxLevel != 0 and $salon_lux > 100)
{
$store2level = $this->storeLevel + 15;
if ( $store2level > $this->maxLevel )
{ {
logger(DEBUG, "store2level > maxLevel", __FILE__ . ":" . __LINE__); $this->storeLevel = $storeDevice->properties["position"]["value"];
$this->set($this->maxLevel);
}else }else
{ {
logger(DEBUG, "store2level <= maxLevel", __FILE__ . ":" . __LINE__); $this->storeLevel = 100 - $storeDevice->properties["position"]["value"];
$this->set($store2level); }
logger(DEBUG, "storeLevel=" . $this->storeLevel, __FILE__ . ":" . __LINE__);
}else
{
$this->storeLevel = 0;
//return true;
}
if (array_key_exists("illuminance_lux", $indexDevices[RDC_EXTERIEUR_LUMINOSITE]->properties))
{
$exterieur_lux = $indexDevices[RDC_EXTERIEUR_LUMINOSITE]->properties["illuminance_lux"]["value"];
$exterieurLuxMoyen = $mohaDB->moyenne($indexDevices[RDC_EXTERIEUR_LUMINOSITE], "illuminance_lux", 5);
if ($exterieurLuxMoyen == 0)
{
$exterieurLuxMoyen = $exterieur_lux;
}
logger(DEBUG, "exterieur_lux=" . $exterieur_lux . " et exterieurLuxMoyen=" . $exterieurLuxMoyen, __FILE__ . ":" . __LINE__);
}
if (array_key_exists("illuminance_lux", $indexDevices[RDC_SALON_LUMINOSITE]->properties))
{
$salon_lux = $mohaDB->moyenne($indexDevices[RDC_SALON_LUMINOSITE], "illuminance_lux", 10);
if ($salon_lux == 0)
{
$salon_lux = $indexDevices[RDC_SALON_LUMINOSITE]->properties["illuminance_lux"]["value"];
}
logger(DEBUG, "salon_lux=" . $salon_lux, __FILE__ . ":" . __LINE__);
}
if ($exterieur_lux > 30000 or $salon_lux >600)
{
logger(DEBUG, "exterieur_lux > 30000 or salon_lux >600", __FILE__ . ":" . __LINE__);
if ($this->maxLevel != 0 and $salon_lux > 100)
{
$store2level = $this->storeLevel + 15;
if ( $store2level > $this->maxLevel )
{
logger(DEBUG, "store2level > maxLevel", __FILE__ . ":" . __LINE__);
$this->set($this->maxLevel);
}else
{
logger(DEBUG, "store2level <= maxLevel", __FILE__ . ":" . __LINE__);
$this->set($store2level);
}
}
}elseif ($exterieurLuxMoyen < 5000 and $salon_lux < 450)
{
logger(DEBUG, "exterieurLuxMoyen < 5000 and salon_lux < 1000", __FILE__ . ":" . __LINE__);
$this->close("Luminosité faible");
}
if (array_key_exists(METEO, $indexDevices))
{
if (array_key_exists("rainin", $indexDevices[METEO]->properties))
{
$rainTmp = $indexDevices[METEO]->properties["rainin"]["value"];
$rain = $rainTmp - $rainS;
$rainS = $rainTmp;
logger(DEBUG, "rain=" . $rain, __FILE__ . ":" . __LINE__);
}
if (array_key_exists("windgustkmh", $indexDevices[METEO]->properties))
{
if ($indexDevices[METEO]->properties["windgustkmh"]["value"] > 50)
{
logger(ALERT, "Vent fort :" . $indexDevices[METEO]->properties["windgustkmh"]["value"], __FILE__ . ":" . __LINE__);
}
$rafale = $mohaDB->moyenne($indexDevices[METEO], "windgustkmh", 6);
if ($rafale == 0)
{
$rafale = $indexDevices[METEO]->properties["windgustkmh"]["value"];
}
logger(DEBUG, "rafale=" . $rafale, __FILE__ . ":" . __LINE__);
}
if (array_key_exists("windspeedkmh", $indexDevices[METEO]->properties))
{
if ($indexDevices[METEO]->properties["windspeedkmh"]["value"] > 50)
{
logger(ALERT, "Vent fort :" . $indexDevices[METEO]->properties["windspeedkmh"]["value"], __FILE__ . ":" . __LINE__);
}
$vent = $mohaDB->moyenne($indexDevices[METEO], "windspeedkmh", 6);
if ($vent == 0)
{
$vent = $indexDevices[METEO]->properties["windspeedkmh"]["value"];
}
logger(DEBUG, "vitesse du vent =" . $vent, __FILE__ . ":" . __LINE__);
}
if ($vent > $rafale)
{
$rafale = $vent;
}
if (array_key_exists("solarradiation", $indexDevices[METEO]->properties))
{
$soleil = $mohaDB->moyenne($indexDevices[METEO], "solarradiation", 12);
logger(DEBUG, "soleil=" . $soleil, __FILE__ . ":" . __LINE__);
} }
} }
}elseif ($exterieurLuxMoyen < 9000 and $salon_lux < 1000) logger(DEBUG, sprintf(_("property=%s, value=%s"), $property, $value), __FILE__ . ":" . __LINE__);
{ if ($rafale >= 70 or $rain != 0)
logger(DEBUG, "exterieurLuxMoyen < 9000 and salon_lux < 1000", __FILE__ . ":" . __LINE__);
$this->close("Luminosité faible");
}
if (array_key_exists(METEO, $indexDevices))
{
if (array_key_exists("rainin", $indexDevices[METEO]->properties))
{ {
$rainTmp = $indexDevices[METEO]->properties["rainin"]["value"]; $this->maxLevel = 0;
$rain = $rainTmp - $rainS; logger(DEBUG, sprintf("rafale = %s and rain = %s",$rafale, $rain), __FILE__ . ":" . __LINE__);
$rainS = $rainTmp; $this->close("vent trop fort ou pluie");
logger(DEBUG, "rain=" . $rain, __FILE__ . ":" . __LINE__); return 0;
} }elseif ($rafale != 0)
if (array_key_exists("windgustkmh", $indexDevices[METEO]->properties))
{ {
if ($indexDevices[METEO]->properties["windgustkmh"]["value"] > 50) //calcul du maxlevel par rapport a la vitesse des rafales
$r = round(($rafale-20)/5, 0, PHP_ROUND_HALF_UP)*10;
if ($r < 0) $r = 0;
if ($motorReversal)
{ {
logger(ALERT, "Vent fort :" . $indexDevices[METEO]->properties["windgustkmh"]["value"], __FILE__ . ":" . __LINE__); $this->maxLevel = $r;
} }else
$rafale = $mohaDB->moyenne($indexDevices[METEO], "windgustkmh", 6);
if ($rafale == 0)
{ {
$rafale = $indexDevices[METEO]->properties["windgustkmh"]["value"]; $this->maxLevel = 100 - $r;
} }
logger(DEBUG, "rafale=" . $rafale, __FILE__ . ":" . __LINE__); logger(DEBUG, "rafale=" . $rafale, __FILE__ . ":" . __LINE__);
} }
if (array_key_exists("solarradiation", $indexDevices[METEO]->properties)) logger(DEBUG, "maxlevel=" . $this->maxLevel, __FILE__ . ":" . __LINE__);
{
$soleil = $mohaDB->moyenne($indexDevices[METEO], "solarradiation", 12);
logger(DEBUG, "soleil=" . $soleil, __FILE__ . ":" . __LINE__);
}
}
logger(DEBUG, sprintf(_("property=%s, value=%s"), $property, $value), __FILE__ . ":" . __LINE__);
if ($rafale >= 50 or $rain != 0)
{
$this->maxLevel = 0;
logger(DEBUG, sprintf("rafale = %s and rain = %s",$rafale, $rain), __FILE__ . ":" . __LINE__);
$this->close("vent trop fort ou pluie");
return 0;
}elseif ($rafale != 0)
{
$this->maxLevel = ($r = 120 - round($rafale/4, 0, PHP_ROUND_HALF_UP)*10)<0 ? 0 : $r;
//$this->maxLevel = 100 / $rafale;
logger(DEBUG, "rafale=" . $rafale, __FILE__ . ":" . __LINE__);
}
logger(DEBUG, "maxlevel=" . $this->maxLevel, __FILE__ . ":" . __LINE__);
//$store2level = $this->maxLevel;
switch ($property)
{
/*case "illuminance_lux":
logger(DEBUG, "CASE: illuminance_lux:" . $value, __FILE__ . ":" . __LINE__);
break;*/ switch ($property)
case "rainin": {
logger(DEBUG, "CASE: rainin:" . $value, __FILE__ . ":" . __LINE__); case "rainin":
$this->close("Pluie"); logger(DEBUG, "CASE: rainin:" . $value, __FILE__ . ":" . __LINE__);
break; $this->close("Pluie");
case "windgustkmh"; break;
logger(DEBUG, "CASE: windgustkmh:" . $rafale, __FILE__ . ":" . __LINE__); case "windgustkmh";
//case "windspeedkmh": logger(DEBUG, "CASE: windgustkmh:" . $rafale, __FILE__ . ":" . __LINE__);
// logger(DEBUG, "CASE: windspeedkmh:" . $value, __FILE__ . ":" . __LINE__); break;
break; default:
default: }
} logger(DEBUG, "maxLevel = " . $this->maxLevel . ' result => $r = ' . $r, __FILE__ . ":" . __LINE__);
logger(DEBUG, "maxLevel = " . $this->maxLevel . ' result => $r = ' . $r, __FILE__ . ":" . __LINE__); if ($this->storeLevel > $this->maxLevel)
if ($this->storeLevel > $this->maxLevel) {
$this->set($this->maxLevel);
}
}else
{ {
$this->set($this->maxLevel); logger(DEBUG, _("Store is Moving ") . $moving, __FILE__ . ":" . __LINE__);
} }
} }
private function set ($level) private function set ($level)
{ {
logger(DEBUG, "function 'set' to level : " . $level, __FILE__ . ":" . __LINE__); logger(DEBUG, "function 'set' to level : " . $level, __FILE__ . ":" . __LINE__);
if ($this->storeLevel < $level AND $level <=100) if ($level <= 100)
{ {
logger(DEBUG, "Open store :" . $level, __FILE__ . ":" . __LINE__); logger(DEBUG, "Open store :" . $level, __FILE__ . ":" . __LINE__);
$this->send(100 - $level); $this->send(100 - $level);
@ -193,4 +243,6 @@ class rdc_store extends hook
} }
$hooks["rdc_store"] = new rdc_store(); $hooks["rdc_store"] = new rdc_store();
?> ?>
print_r($function[0], true)