Page 1 sur 9

[tuto] bloc code PHP scénario (petite commande simple)

Publié : 02 août 2016, 22:46
par winhex
récapitulatif de petite commande PHP dans le bloc code d'un scénario

Code : Tout sélectionner

$cmd = cmd::byString("#[EQUIPEMENT]#");
ou
$cmd = cmd::byId($ID);
Pour récupérer une valeur

Code : Tout sélectionner

$cmd = cmd::byString("#[Maison][Motion Sensor Couloir][Présence]#");
$value = $cmd->execCmd();
$scenario->setData("test_php", $value);
Récupérer la valeur et la date de derniere mise à jour

Code : Tout sélectionner

$cmd = cmd::byString("#[sondes][Sondes SdB][Humidité]#");
$value = $cmd->execCmd();
$collectDate = $cmd->getCollectDate(); 
$scenario->setData("test_php", $collectDate);
Pour modifier une valeur

Code : Tout sélectionner

$cmd::byId(471)->event("ma_valeur");
ou
$cmdC = "#[Appart][Elec][Test]#";
$cmd = cmd::byString($cmdC);
$cmd->event(("100"));
ou
cmd::byString("#[EQUIPEMENT]#")->event(("100"));
pour cacher une info

Code : Tout sélectionner

$o=cmd::byId(1647);
$o->setIsVisible(0); // valeur à 1 pour rendre visible
$p=$o->save();
pour cacher un objet

Code : Tout sélectionner

$o=eqLogic::byId(IDOBJECT);
$o->setIsVisible(1);                       ou 0 pour rendre non visible
$p=$o->save();
ou qui marche chez certains

Code : Tout sélectionner

$o=object::byId(2);
$o->setIsVisible(0);
$p=$o->save();
pour cacher et desactivé un scénario

Code : Tout sélectionner

$o=scenario::byId(29);
$o->setIsVisible(0);
$o->setIsActive(0);
$p=$o->save();
pour connaitre (équipement, objet, scénario)

Code : Tout sélectionner

$cmd=scenario::byId(78);
$visible = $cmd->getIsVisible();
$Active = $cmd->getIsActive(); // ne fonctionne pas pour equipement 
$scenario->setData("test_php", $visible);
ou
$scenario->setData("test_php", scenario::byString("#[test expression]#)->getIsVisible());

variable (attribué 0)

Code : Tout sélectionner

$Variable_J = "#nom#";
$scenario->setData($Variable_J, '0');
récupérer la valeur d'une variable

Code : Tout sélectionner

$Variable_J = "#nom#";
$tabJ = $scenario->getData($Variable_J);

Action

pour piloter une commande

Code : Tout sélectionner

$commande='#[test][setdate][on]#';
$cmd = cmd::byString($commande);
$cmd->execCmd();


Pour exécuter une commande action avec message: thk @yoguiti

Code : Tout sélectionner

$cmd=cmd::byString('#[MAISON][TEST][nom]#');
$cmd->execCmd($options=array('title'=>'Jeedom', 'message'=> "Bla Bla bla"), $cache=0);
Lancer un scénario

Code : Tout sélectionner

$scenario = scenario::byId(ID);
$scenario->launch();
pour arrêter un scenario on peut faire

Code : Tout sélectionner

$scenario = scenario::byId(ID);
$scenario->stop();
Pour modifier l'historique

Code : Tout sélectionner

$cmd = cmd::byId(773);
$cmd->addHistoryValue(  0,   $_datetime = '2016-06-02 08:30:00') ;
$cmd->addHistoryValue(  1,   $_datetime = '2016-06-02 09:30:00') ;
Pour rechercher une valeur

Code : Tout sélectionner

$cmdId = cmd::byString("#[sondes][Sondes SdB][Humidité]#")->getId();
$debut = date("Y-m-d H:i:s", strtotime("Yesterday"));
$fin = date("Y-m-d H:i:s", strtotime("-10 min"));  

$value = history::getStatistique($cmdId, $debut, $fin)["last"];

$scenario->setData("test", $value);

Plusieurs index possibles : avg, min, max, sum, count, std, variance, last

__ exemple __ (à vous d'en ajouté)
tous les soir à 23h59
commande cmdj / variable J
récupération de la variable J
attribué la valeur à la commande cmdj
mettre la variable à 0

Code : Tout sélectionner

$cmdJ1 ="#[Stat Chauffage][Stat Chauffage J+1 scenario][Allumer]#"; 
$Variable_J = "Stat chauffage J";
// variable d'hier
$tabJ = $scenario->getData($Variable_J);
// affichage N-1
$cmd = cmd::byString($cmdJ1);
$cmd->event(($tabJ));
// variable à 0
$scenario->setData($Variable_J, '0');
attribué l'heure de l'éxecution du scénario

Code : Tout sélectionner

$cmdC ="#[Cuisine][VR Cuisine][Le]#"; // Id 486
$temp = date('d-m à H:i');
$cmd = cmd::byString($cmdC);
$cmd->event(($temp));
déclenché toutes les 15mn
si retour de la sonde dépasse 10 mn affecté la valeur binaire

Code : Tout sélectionner

$_cmd = "262"; // sondes temp chambre adrien rfx

$mkt=mktime();
$tmp = scenarioExpression::collectDate($_cmd, $_format = 'U');
$tmp2 = ($mkt - $tmp);
if ($tmp2 < 600) {
$cmd =cmd::byId(921);
$cmd->event((1)); // OK
} else {
$cmd =cmd::byId(921);
$cmd->event((0)); // NOK
}
idem avec detecteur de porte en affectant une variable en plus

Code : Tout sélectionner

$_cmd = "296"; // Porte Entree rfx

$mkt=mktime();
$tmp = scenarioExpression::collectDate($_cmd, $_format = 'U');
$tmp2 = ($mkt - $tmp);

if ($tmp2 < 43200) {
$scenario->setData('Kontrol_Porte_Entr', "1"); // OK SCENARIO
$cmd =cmd::byId(471); // Detecteur Porte Entr
$cmd->event((1)); // OK
} else {
$scenario->setData('Kontrol_Porte_Entr', "0"); // NOK SCENARIO
$cmd =cmd::byId(471); // Detecteur Porte Entr
$cmd->event((0)); // NOK
}
variable dans variable
viewtopic.php?f=27&t=19351&p=347602#p347602

variable dans une fonction
viewtopic.php?f=32&t=17908&p=322540#p322540

pour aller plus loin le tuto reveil ou scénario heure levée/couché de soleil





ou encore plus loin (pour connaisseur)

[Framework SC] les scenarios en php
viewtopic.php?f=27&t=17645&hilit=framework+php

Re: [tuto] bloc code PHP scénario (petite commande simple)

Publié : 02 août 2016, 23:12
par toregreb
Merci. (Marktapage :) ).

Re: [tuto] bloc code PHP scénario (petite commande simple)

Publié : 02 août 2016, 23:24
par winhex
je fais la demande dans trucs & astuces

Re: [tuto] bloc code PHP scénario (petite commande simple)

Publié : 03 août 2016, 01:36
par nonolerobot
Merci, car souvent j'ai besoin de ce genre d'exemple pour comprendre comment utiliser l'API jeedom via du PHP dans les blocs code des scénarios. La doc est peu fourni à ce niveau et pourtant ça permet de faire des scénarios très puissant quand on sait coder.

Tien, quelqu'un sait s'il est possible de faire un équivalent de " A : 1200 faire" avec la planification d'une sous tâche en PHP ?

Re: [tuto] bloc code PHP scénario (petite commande simple)

Publié : 03 août 2016, 02:23
par dric
Excellents exemples encore merci, je les aurais bien vu dans la doc scénario de jeedom section Code.

Re: [tuto] bloc code PHP scénario (petite commande simple)

Publié : 12 août 2016, 21:49
par fwehrle
Ah ben ça fait longtemps que je cherchais des exemples comme ça. Merci. +1 pour la Doc scénario.

Envoyé de mon Nexus 6P en utilisant Tapatalk

Re: [tuto] bloc code PHP scénario (petite commande simple)

Publié : 14 août 2016, 10:32
par Tauks

Re: Re : [tuto] bloc code PHP scénario (petite commande simp

Publié : 14 août 2016, 11:10
par winhex
j'ajoute, merci pour cette source d'inspiration.
hs
je sais pas si tu as vu le tuto de domotique store sur l'implantation de commande z-wave ?
ça peut te servir
je joues avec les couleur d'un flood electrifié (clignotement ou pas sur valeur haute),
http://tutoriels.domotique-store.fr/con ... nario.html

Re: [tuto] bloc code PHP scénario (petite commande simple)

Publié : 14 août 2016, 12:28
par domoggvad
Merci @winhex pour ce partage instructif

Re: [tuto] bloc code PHP scénario (petite commande simple)

Publié : 14 août 2016, 16:11
par Tauks
winhex a écrit :j'ajoute, merci pour cette source d'inspiration.
hs
je sais pas si tu as vu le tuto de domotique store sur l'implantation de commande z-wave ?
ça peut te servir
je joues avec les couleur d'un flood electrifié (clignotement ou pas sur valeur haute),
http://tutoriels.domotique-store.fr/con ... nario.html
Ah ouais cool ça, du hack de module en quelque sorte . Faudrait que j'en trouve l'usage chez moi...

Envoyé de mon YOGA Tablet 2-830L en utilisant Tapatalk

Re: [tuto] bloc code PHP scénario (petite commande simple)

Publié : 26 août 2016, 16:56
par dric
Savez-vous comment effectuer cette action en code php ?

lastBetween("#[Z][X][value]#","Yesterday", "Today")

Récupérer la dernière valeur historisée hier.

Re: [tuto] bloc code PHP scénario (petite commande simple)

Publié : 26 août 2016, 17:10
par Tauks
dric a écrit :Savez-vous comment effectuer cette action en code php ?

lastBetween("#[Z][X][value]#","Yesterday", "Today")

Récupérer la dernière valeur historisée hier.
Mmmm, là pour le coup ça nécessite je pense d'attaquer la base de données en SQL avec un "SELECT ta_variable WHERE debut >= X et fin <= Y ORDER BY fin DESC". Le "comment faire" ça est une question qui me taraude et que je réserve à Loic quand j'aurai eu des réponse à mes autres questions :). Je ne sais notamment si l'interpréteur de code PHP de jeedom arrive à interpréter des objets SQL. Si oui, ça sera probablement avec ces fonctions. QQn d'autre pourra peut-être mieux t'éclairer.

[Edit] : En potassant la doc, j'ai trouvé ces deux commandes qui doivent faire le job :

Code : Tout sélectionner

getHistory(  $_dateStart = null,   $_dateEnd = null) 
getPluralityHistory(  $_dateStart = null,   $_dateEnd = null,   $_period = 'day',   $_offset) 
Donc tu les appelairais comme suit :

Code : Tout sélectionner

$cmd = cmd::getPluralityHistory(ton_ID_de_commande);
$resultats = $cmd ->execCmd();
Le type de ce que ça retourne n'est pas précisé mais je suspecte un tableau. Du coup si c'est ça, j'inverserais les éléments du tableau et je récupérerais le premier (qui est donc le dernier que tu recherches)

Code : Tout sélectionner

$resultats = array_reverse($resultats);
$valeur_cherchee = $resultats[0];
Si la commande te renvoie une chaîne de caractère, il faut d'abord l'exploser. je ne connais pas parcontre le format des dates.

Pour ta question ci-dessous, la doc me donne :

lastBetween(commande,start,end) : donne la dernière valeur enregistrée pour l’équipement entre les 2 bornes demandées (sous la forme Y-m-d H:i:s ou expression PHP)

Ex : lastBetween(#[Salle de bain][Hydrometrie][Humidité]#,Yesterday,Today) : renvoie la dernière température enregistrée hier.

Re: [tuto] bloc code PHP scénario (petite commande simple)

Publié : 26 août 2016, 17:13
par dric
Outch, si je pouvais éviter d'attaquer la base :)

Il y a une commande du type : cmd::byString("#[Z][X][value]#")->getHistory($debut, $fin)

Sauf que la doc jeedom ne dit pas quel type passer en paramètre. timestamp ou string c'est KO...

Re: [tuto] bloc code PHP scénario (petite commande simple)

Publié : 26 août 2016, 17:24
par Tauks
Cf ci-dessus :)

Re: [tuto] bloc code PHP scénario (petite commande simple)

Publié : 26 août 2016, 17:27
par dric
J'ai vu que c'était un tableau, sauf que je n'arrive pas à en avoir un non vide, la grande question c'est quoi mettre en paramètre.
Je tente avec le getPluralityHistory...

Edit : résultat tableau vide

Edit2 : il faut mettre des dates heure : getHistory("2016-08-26 00:00:00", "2016-08-26 14:00:00") et on a un tableau non vide, "mais" je ne sais récupérer les valeurs du tableau... c'est dingue

Re: [tuto] bloc code PHP scénario (petite commande simple)

Publié : 26 août 2016, 18:10
par dric
Investigation toujours en cours... Il y a la classe history et sa fonction all :
https://www.jeedom.com/doc/documentatio ... story.html

Re: [tuto] bloc code PHP scénario (petite commande simple)

Publié : 26 août 2016, 20:04
par dric
J'ai enfin trouvé comment récupérer la dernière valeur d'une commande "hier", voilà le code pour exemple :

Code : Tout sélectionner

$cmdId = cmd::byString("#[Z][X][value]#")->getId();
$debut = date("Y-m-d H:i:s", strtotime("Yesterday"));
$fin = date("Y-m-d H:i:s", strtotime("Today"));  

$all = history::all($cmdId, $debut, $fin);
$value = count($all) ? $all[count($all) - 1]->getValue() : null;

Re: [tuto] bloc code PHP scénario (petite commande simple)

Publié : 26 août 2016, 20:19
par Tauks
Classe, merci de partager tes investigations :)

Re: [tuto] bloc code PHP scénario (petite commande simple)

Publié : 26 août 2016, 21:01
par dric
J'ai passé beaucoup de temps pour trouver le fonctionnement, donc le partage fera gagner du temps j'espère.
La doc est vraiment inexistante, heureusement que le source est disponible, ça aide !

Une autre fonction intéressante history::getStatistique.

Plus simple pour faire la même chose : Dernière valeur d'hier :

Code : Tout sélectionner

$cmdId = cmd::byString("#[Z][X][value]#")->getId();
$debut = date("Y-m-d H:i:s", strtotime("Yesterday"));
$fin = date("Y-m-d H:i:s", strtotime("Today"));  

$value = history::getStatistique($cmdId, $debut, $fin)["last"];
Plusieurs index possibles : avg, min, max, sum, count, std, variance, last

Re: [tuto] bloc code PHP scénario (petite commande simple)

Publié : 26 août 2016, 22:40
par fwehrle
Génial ca. Ça va me faire gagner pas mal de temps. Merci. (Effectivement, la doc est light. )