Comme annoncé, ce forum est passé en lecture seule au 1er janvier 2020. Désormais nous vous invitons à vous rendre sur notre nouvelle page communauté :
Image

A très bientôt !

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

Réservé à la création de scénarios dans JEEDOM
Répondre
winhex
Actif
Messages : 3799
Inscription : 23 janv. 2015, 01:41

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

Message par winhex » 02 août 2016, 22:46

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
Dernière édition par winhex le 03 juil. 2019, 22:03, édité 14 fois.

toregreb
Actif
Messages : 2510
Inscription : 20 août 2014, 22:19

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

Message par toregreb » 02 août 2016, 23:12

Merci. (Marktapage :) ).
Jeedom v2.2.6 sur RPi2+razberry (Zwave)+RFXCom, Enocean et MySensors.
[TUTO]Index HP/HC avec pinces Ampèremétriques
Trucs&Astuces

winhex
Actif
Messages : 3799
Inscription : 23 janv. 2015, 01:41

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

Message par winhex » 02 août 2016, 23:24

je fais la demande dans trucs & astuces

Avatar de l’utilisateur
nonolerobot
Actif
Messages : 541
Inscription : 06 juin 2015, 12:15
Localisation : Rouen

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

Message par nonolerobot » 03 août 2016, 01:36

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 ?
Serveur domotique : Raspberry PI 3 + PI desktop + SSD mSata 30 Go + Onduleur
Contrôleur Zwave : Aeon Labs z-stick gen5
Logiciel : Jeedom 3.1.7
Modules Zwave : 39 devices (Düwi, Fibaro, Aeon Labs, Qubino, NeoCoolCam) dont 14 à piles

Avatar de l’utilisateur
dric
Timide
Messages : 188
Inscription : 12 juil. 2016, 15:53

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

Message par dric » 03 août 2016, 02:23

Excellents exemples encore merci, je les aurais bien vu dans la doc scénario de jeedom section Code.

Avatar de l’utilisateur
fwehrle
Actif
Messages : 2824
Inscription : 01 juil. 2015, 11:03
Localisation : Strasbourg

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

Message par fwehrle » 12 août 2016, 21:49

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
Jeedom 3 sur Debian 9 en VM Proxmox 5 sur NUC Intel.
(Anciennement sur Docker sur Syno DS-415+ / MariaDB / DSM 6)
Teleinfo / RFXCom / Stick ZWave / IPX / Serveur Traccar / Blea

Avatar de l’utilisateur
Tauks
Actif
Messages : 530
Inscription : 04 avr. 2015, 19:57
Localisation : Strasbourg

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

Message par Tauks » 14 août 2016, 10:32

Mon blog "Domotique & IoT": ici
Mon matériel: ici

winhex
Actif
Messages : 3799
Inscription : 23 janv. 2015, 01:41

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

Message par winhex » 14 août 2016, 11:10

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

Avatar de l’utilisateur
domoggvad
Actif
Messages : 1880
Inscription : 29 avr. 2015, 16:02
Localisation : Seine-Saint-Denis (Villepinte)

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

Message par domoggvad » 14 août 2016, 12:28

Merci @winhex pour ce partage instructif
3 Odroid C2 (Prod - secours - test) Z83 tests: rfxcom + Z-wave- Clims DAIKIN - espeasy - thekey - Xiaomi - Telinfo - broadlink... widget V3 :viewtopic.php?f=29&t=44183&p=717810#p717810

Avatar de l’utilisateur
Tauks
Actif
Messages : 530
Inscription : 04 avr. 2015, 19:57
Localisation : Strasbourg

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

Message par Tauks » 14 août 2016, 16:11

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
Mon blog "Domotique & IoT": ici
Mon matériel: ici

Avatar de l’utilisateur
dric
Timide
Messages : 188
Inscription : 12 juil. 2016, 15:53

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

Message par dric » 26 août 2016, 16:56

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.

Avatar de l’utilisateur
Tauks
Actif
Messages : 530
Inscription : 04 avr. 2015, 19:57
Localisation : Strasbourg

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

Message par Tauks » 26 août 2016, 17:10

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.
Dernière édition par Tauks le 26 août 2016, 17:28, édité 3 fois.
Mon blog "Domotique & IoT": ici
Mon matériel: ici

Avatar de l’utilisateur
dric
Timide
Messages : 188
Inscription : 12 juil. 2016, 15:53

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

Message par dric » 26 août 2016, 17:13

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...

Avatar de l’utilisateur
Tauks
Actif
Messages : 530
Inscription : 04 avr. 2015, 19:57
Localisation : Strasbourg

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

Message par Tauks » 26 août 2016, 17:24

Cf ci-dessus :)
Mon blog "Domotique & IoT": ici
Mon matériel: ici

Avatar de l’utilisateur
dric
Timide
Messages : 188
Inscription : 12 juil. 2016, 15:53

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

Message par dric » 26 août 2016, 17:27

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

Avatar de l’utilisateur
dric
Timide
Messages : 188
Inscription : 12 juil. 2016, 15:53

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

Message par dric » 26 août 2016, 18:10

Investigation toujours en cours... Il y a la classe history et sa fonction all :
https://www.jeedom.com/doc/documentatio ... story.html

Avatar de l’utilisateur
dric
Timide
Messages : 188
Inscription : 12 juil. 2016, 15:53

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

Message par dric » 26 août 2016, 20:04

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;

Avatar de l’utilisateur
Tauks
Actif
Messages : 530
Inscription : 04 avr. 2015, 19:57
Localisation : Strasbourg

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

Message par Tauks » 26 août 2016, 20:19

Classe, merci de partager tes investigations :)
Mon blog "Domotique & IoT": ici
Mon matériel: ici

Avatar de l’utilisateur
dric
Timide
Messages : 188
Inscription : 12 juil. 2016, 15:53

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

Message par dric » 26 août 2016, 21:01

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

Avatar de l’utilisateur
fwehrle
Actif
Messages : 2824
Inscription : 01 juil. 2015, 11:03
Localisation : Strasbourg

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

Message par fwehrle » 26 août 2016, 22:40

Génial ca. Ça va me faire gagner pas mal de temps. Merci. (Effectivement, la doc est light. )
Jeedom 3 sur Debian 9 en VM Proxmox 5 sur NUC Intel.
(Anciennement sur Docker sur Syno DS-415+ / MariaDB / DSM 6)
Teleinfo / RFXCom / Stick ZWave / IPX / Serveur Traccar / Blea

Répondre

Revenir vers « Scénarios »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 7 invités