Ce Forum passera en lecture seule en janvier 2020
Image
Merci de vous rendre sur https://community.jeedom.com maintenant pour vos prochains postes ;)

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

Réservé à la création de scénarios dans JEEDOM
Avatar de l’utilisateur
Sattaz
Timide
Messages : 191
Inscription : 22 nov. 2015, 20:34

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

Message par Sattaz » 03 mars 2019, 12:35

Bonjour!

Mon petit problème est résolu de moitié ... j'arrive à modifier la valeur d'un Curseur/Timer depuis un script si ce curseur vient d'un variateur de lampe ou autre object connecté.
Par contre, il m'est impossible de modifier un curseur qui fait parti du plugin 'script'.

Pour mes essais j'ai simplement créé un script (depuis le plugin script) et j'y ai ajouté 2 curseurs (type=action).
J'ai utilisé ce code sur mon premier curseur pour modifier la valeur d'un autre curseur par rapport à la valeur sélectionnée ($argv[1]).
J'identifie le curseur à modifier par son ID (j'avais l'id 53 pour une de mes lampes sur variateur et l'ID 32269 pour le second curseur du script)

Code : Tout sélectionner

<?php
require_once '/var/www/html/core/php/core.inc.php';
$cmd=cmd::byId(32269);
$option['slider']=$argv[1];
$cmd->execCmd($option);
?>
-> En actionnant le premier curseur, le script exécute bien le code php et je vois le curseur (id=53) de ma lampe changer, ça fonctionne!
-> Par contre ce même code php ne change en rien la valeur du second curseur (id=32269) dans mon script.

Hum ... une idée?

Merci,

Sébastien
Sébastien

rootard
Timide
Messages : 119
Inscription : 02 nov. 2018, 19:52

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

Message par rootard » 16 mars 2019, 19:35

Salut

J'essaie d'appeler la commande d'ajout de date du plugin agenda par code sans succès:
[Cuisine][Programme Cuisine][Ajouter une date]
Cette commande prend 2 arguments: le nom du programme et la date.

Image

Si j'ai bien compris pour exécuter la commande avec plusieurs arguments c'est:

Code : Tout sélectionner

$cmd->execCmd($options=array('pgm'=>'Confort', 'date'=> '2019-03-19'), $cache=0);
Ou puis je trouver le nom des arguments à passer dans la config de la commande (pgm et date dans ce cas)?
Voila la config de la commande

Image
Image

Merci ;)
Dernière édition par rootard le 17 mars 2019, 11:04, édité 2 fois.

rootard
Timide
Messages : 119
Inscription : 02 nov. 2018, 19:52

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

Message par rootard » 17 mars 2019, 11:02

Up!
Quelle est la syntaxe pour executer une commande avec plusieurs arguments?
Ou trouve-t-on le nom des arguments ?

Merci

pierrot87
Timide
Messages : 78
Inscription : 12 oct. 2018, 18:58

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

Message par pierrot87 » 13 mai 2019, 11:23

Bonjour
je cherche à récupérer le nom de l'utilisateur pour exécuter un scénario en fonction de l'utilisateur
cordialement

jaska21
Timide
Messages : 39
Inscription : 29 janv. 2016, 10:30

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

Message par jaska21 » 16 mai 2019, 11:12

Bjr pierrot87,

Dans la doc Scénario, il y a une piste pour ton problème (j'avais la page sous les yeux) :
Il existe des déclencheurs spécifiques (autre que ceux fournis par les commandes) :

#start# : déclenché au (re)démarrage de Jeedom,

#begin_backup# : événement envoyé au début d’une sauvegarde.

#end_backup# : événement envoyé à la fin d’une sauvegarde.

#begin_update# : événement envoyé au début d’une mise à jour.

#end_update# : événement envoyé à la fin d’une mise à jour.

#begin_restore# : événement envoyé au début d’une restauration.

#end_restore# : événement envoyé à la fin d’une restauration.

#user_connect# : connexion d’un utilisateur

Vous pouvez aussi déclencher un scénario quand une variable est mise à jour en mettant : #variable(nom_variable)#
Je crois que ça doit répondre à ta demande ;)

Bonne journée

pierrot87
Timide
Messages : 78
Inscription : 12 oct. 2018, 18:58

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

Message par pierrot87 » 16 mai 2019, 19:13

Bonsoir
merci pour la réponse
j'avais déjà vu et testé
le scénario se déclenche à chaque fois qu'un utilisateur se connecte
mais comment faire pour savoir quel est l'utilisateur
j'ai essayé
$scenario->setLog(print_r(user::getLogin(),TRUE));
mais je n'ai rien en retour
comment faire
bonne soirée

ManuJ71
Timide
Messages : 144
Inscription : 02 oct. 2016, 18:36

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

Message par ManuJ71 » 05 juin 2019, 18:10

Bonjour,

J'essaye depuis qq jours de résoudre un problème ... sans succès, je pose donc la question à la communauté.

J'ai une alarme commandée par scénario, avec un scénario qui active les alarmes , un scénario qui s'active en case d'alarme immédiate, un scénario s'active en cas d'alarme et un scénario qui éteint l'alarme.
Au début du scénario qui éteint l'alarme, je souhaite stopper les autres scénarios : (histoire qu'ils ne croisent pas leur actions)

Code : Tout sélectionner

$scenario = scenario::byId(90); // Activer bas
$scenario->stop();
$scenario = scenario::byId(130); // Activer Haut
$scenario->stop();
$scenario = scenario::byId(127); // Alarmes Action immédiate
$scenario->stop();
$scenario = scenario::byId(128); // Alarmes Action
$scenario->stop();
Ca fonctionne sans problème ... sauf qu'ensuite dans mon scénario, impossible d'écrire dans le log ...

Code : Tout sélectionner

$scenario->setLog('Alarmes éteintes');
qui fonctionne très bien avant, ne fonctionne plus ...

J'ai essayé avec :

Code : Tout sélectionner

$scenario = scenario::byId(91); // 91 le Id de mon scénario actuel ...
$scenario->setLog('Alarmes éteintes');
rien n'y fait ...

Quelqu'un aurait une idée ?


Merci d'avance ...

Avatar de l’utilisateur
tomdom
Actif
Messages : 925
Inscription : 14 nov. 2016, 05:46

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

Message par tomdom » 05 juin 2019, 18:40

Bonjour,

Normal. Tu as affecté à $scenario un autre scénario. Je pense que tu devrais faire :

Code : Tout sélectionner

$scenario_other = scenario::byId(90); // Activer bas
$scenario_other->stop();
$scenario_other = scenario::byId(130); // Activer Haut
$scenario_other->stop();
$scenario_other = scenario::byId(127); // Alarmes Action immédiate
$scenario_other->stop();
$scenario_other = scenario::byId(128); // Alarmes Action
$scenario_other->stop();
$scenario->setLog('Alarmes éteintes');
Il y a 10 catégories de personnes, celles qui connaissent le binaire et les autres
.

ManuJ71
Timide
Messages : 144
Inscription : 02 oct. 2016, 18:36

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

Message par ManuJ71 » 05 juin 2019, 19:07

Merci beaucoup ... !

akashha
Timide
Messages : 29
Inscription : 05 juil. 2018, 10:47

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

Message par akashha » 11 août 2019, 21:10

Bonjour,

Est-il possible d'exécuter un "gotodesign" en mode code ?

Merci d'avance.

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

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

Message par winhex » 04 sept. 2019, 20:46

convertisseur hexa <> rgb
Screenshot_20190904-200212_Chrome.jpg
Screenshot_20190904-200212_Chrome.jpg (29.82 Kio) Consulté 654 fois
Screenshot_20190905-171202_Chrome.jpg
Screenshot_20190905-171202_Chrome.jpg (87.35 Kio) Consulté 623 fois

Code : Tout sélectionner

// convertisseur hexa en rgb
$colorCmd = "#[test2][multi][test couleur]#";
$colorCmdRgb = "#[test2][multi][color rgb]#";

$color = cmd::byString($colorCmd)->execCmd();

cmd::byString("$colorCmdRgb")->event((1));

$scenario->setLog("hexa : $color");
    if ($color[0] == '#')
        $color = substr($color, 1);
  
    if (strlen($color) == 6) {
       $hex0 = hexdec($color[0] . $color[1]);
       $hex1 = hexdec($color[2] . $color[3]);
      $hex2 = hexdec($color[4] . $color[5]);
    }  

  $scenario->setLog("rgb($hex0,$hex1,$hex2)");
// $scenario->setData("rgb-variable", "rgb($hex0,$hex1,$hex2)");
cmd::byString("$colorCmdRgb")->event(("rgb($hex0,$hex1,$hex2)"));

// convertisseur rgb en hexa

   $rgb = dechex(($hex0<<16)|($hex1<<8)|$hex2);
   $rgb = ("#".substr("000000".$rgb, -6));
  $scenario->setLog("reconvertion en hexa : $rgb");

-----
message Jeedom

Code : Tout sélectionner

@message::add("user", "pour test", "encore");
mesage.png
mesage.png (13.86 Kio) Consulté 638 fois

Swatmorpheus
Actif
Messages : 913
Inscription : 23 avr. 2015, 14:38
Localisation : Haute Gironde

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

Message par Swatmorpheus » 27 sept. 2019, 11:07

Salut , je chercche à débuguer un scénario mais j'ai un cron toutes les minutes , donc vu que je cherche quand arrive certain événement et qu'à cause du cron le fichier log est vite rempli et on ne peut pas remonter loin je cherche à ajouter un fichier log dans la rubrique analyse/log donc j'ajoute un bloc code avec la fonction add::log::add(‘filename’,’level’,’message’); pour qu'il mais cela ne me marque rien dedans.

Code : Tout sélectionner

log::add('debug_scénario','[info]','mon message');
pourtant il me dit bien que la commande est exécuté

Code : Tout sélectionner

------------------------------------
[2019-09-27 11:01:40][SCENARIO] Start : Scenario lance manuellement.
[2019-09-27 11:01:40][SCENARIO] Exécution du sous-élément de type [action] : action
[2019-09-27 11:01:40][SCENARIO] Exécution d'un bloc élément : 455
[2019-09-27 11:01:40][SCENARIO] Exécution du sous-élément de type [action] : code
[2019-09-27 11:01:40][SCENARIO] Exécution d'un bloc code
[2019-09-27 11:01:40][SCENARIO] Fin correcte du scénario
je ne sais pas si y'a un problème avec les simples cotes ou c'est autre chose
j'ai regardé dans certain fichier de plugin , du core etc qui affichent les remontées dans analyse/log j'ai bien la même structuration mais je n'ai rien.
j'ai créé le fichier au cas ou il ne le créé pas tout seule et idem rien
si quelqu'un pouvait m'aiguiller
Prod: jeedom V3.2.12 DIY RPI3 + Zwave (fibaro) + Zigbee (xiaomi) + IPXV4 + X4VR
AppleTV4k
PI3 : Max2play
PiZéro: PiCoreplayer
Mini+: OpenElec 7.0.1 Kodi 16.1 Jarvis
En préinstall pour migration: Nuc hystou ,ESXi6.7,jeedom V3.2.12, LMS ,Owncloud

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

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

Message par winhex » 27 sept. 2019, 13:15

tu as tous ici
viewtopic.php?f=31&t=38507&p=758965&hil ... og#p721448

befa a écrit :
17 avr. 2019, 13:00
Bonjour à tous,

J'ai eu pas mal de difficultés mais j'ai fini par y arriver, alors si ça peut aider les prochains qui tomberont sur ce fil, voici comment j'ai procédé :

  1. Tout d'abord veillez à avoir le bon niveau de Log par défaut dans votre configuration Jeedom
    Dans : Configuration > Logs > puis en bas onglet Log (à côté de Alertes)
    Réglez le niveau de log "minimal" que vous souhaitez voir apparaître dans "Niveau de log par défaut".
    Pour ma part il était réglé sur "Erreur", donc les logs "Info" et "Warning" ne passaient pas.
    Je l'ai donc réglé sur "Info"
  2. Ensuite créez un fichier log avec le nom de votre choix, on dira "monlog" dans /var/www/html/log
    Vous verrez ce log apparaître dans Analyse > Logs si ça a bien fonctionné
  3. Enfin dans votre scénario, utilisez le bloc code avec la syntaxe suivante :
    log::add("monlog","info","L'information que je veux logger");
    Attention! utilisez bien des " car la fonction attend des string, j'ai galéré sur ce point à cause du copier/coller de codes incorrects sur les forums :roll:
    Ajustez le niveau de log que vous voulez info/warning/error
Voilà, moi ça me permet de tenir un ou des logs pour surveiller certains modules, ouvertures/fermetures de portes par exemple.
J’espère que ça dépannera certains d'entre vous !

// befa
log poussé regarde le format date (sans Y,M,D) saut de page,...
winhex a écrit :
28 août 2019, 00:37
un autre moyen log "app.log"

Code : Tout sélectionner

use Monolog\Logger;
use Monolog\Handler\StreamHandler;
use Monolog\Formatter\LineFormatter;

$logger = new Logger('default');
$format = "[%datetime%] \n [%level_name%] %message% \n [Context %context% Extra %extra%]\n -----------\n";
$streamHandler = new StreamHandler(__DIR__.'/../../log/app.log', Logger::DEBUG);
$streamHandler->setFormatter(new LineFormatter($format, 'H:i:s'));
//$logger->addInfo('Hello log!');
$logger->pushHandler($streamHandler);

$someText ="test";
$declencheur=$scenario->getRealTrigger();
// extras
$logger->pushProcessor(function ($record) {
    $record['extra']['user'] = get_current_user();
    return $record;
});
$logger->critical('Could not connect to the database');
 $logger->info($someText, ['qui lance' => $declencheur]);
//$logger->info('$someText');
[INFO] test
[Context {"qui lance":"user"} Extra {"user":"www-data"}]
-----------
[00:33:38]
[CRITICAL] Could not connect to the database
[Context [] Extra {"user":"www-data"}]
-----------
[00:33:38]
[INFO] test
[Context {"qui lance":"user"} Extra {"user":"www-data"}]
-----------
création json ect
http://zetcode.com/php/monolog/

Swatmorpheus
Actif
Messages : 913
Inscription : 23 avr. 2015, 14:38
Localisation : Haute Gironde

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

Message par Swatmorpheus » 28 sept. 2019, 11:12

merci winhex je vais regarder ça :)
Prod: jeedom V3.2.12 DIY RPI3 + Zwave (fibaro) + Zigbee (xiaomi) + IPXV4 + X4VR
AppleTV4k
PI3 : Max2play
PiZéro: PiCoreplayer
Mini+: OpenElec 7.0.1 Kodi 16.1 Jarvis
En préinstall pour migration: Nuc hystou ,ESXi6.7,jeedom V3.2.12, LMS ,Owncloud

Swatmorpheus
Actif
Messages : 913
Inscription : 23 avr. 2015, 14:38
Localisation : Haute Gironde

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

Message par Swatmorpheus » 28 sept. 2019, 11:23

parfait winhex , en effet j'étais aussi sur erreur et je mettais des simple cote comme expliqué dans la doc des scénario (qu'il faudrait modifier au passage)
Prod: jeedom V3.2.12 DIY RPI3 + Zwave (fibaro) + Zigbee (xiaomi) + IPXV4 + X4VR
AppleTV4k
PI3 : Max2play
PiZéro: PiCoreplayer
Mini+: OpenElec 7.0.1 Kodi 16.1 Jarvis
En préinstall pour migration: Nuc hystou ,ESXi6.7,jeedom V3.2.12, LMS ,Owncloud

Avatar de l’utilisateur
frixo
Timide
Messages : 15
Inscription : 31 août 2019, 14:38

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

Message par frixo » 02 oct. 2019, 11:16

Bonjour

Je cherche à vérifier ou détecter si l'exécution d'une commande tombe en erreur

Je m'explique, j'ai fait un script qui recherche toutes les lumières et les éteints.
Mais parmi ces lumières, une est piloté via le plugin Kasa. Hors ce dernier semble plutôt instable et des fois semble être hors ligne. Du coup ça fait bugguer le execcmd, et ma boucle s'arrête !

J'aimerais sois un try catch (le try catch php marche pas), soit avec une commande pour vérifier avant de lancer l'exec pour vérifier si ça va marcher ou pas

J'ai vu dans la doc une commande preExecCmd... Ça parle à qqun ?

Merci beaucoup pour votre aide.

Envoyé de mon SM-N950F en utilisant Tapatalk


OUARZA
Timide
Messages : 297
Inscription : 13 févr. 2019, 08:10

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

Message par OUARZA » 02 oct. 2019, 20:58

Bonsoir à tous,
Je précise, j'ai beaucoup de mal avec le code :)

Je cherche à récupérer une valeur dans une commande. Je pense qu'il faut utiliser le bloc code, c'est pour cela que je poste ici, mais sans certitude.
Voici la commande:

Code : Tout sélectionner

Résultat de la commande : ['20:53 02-10 true','BSH.Common.Status.DoorState','BSH.Common.EnumType.DoorState.Locked','BSH.Common.Status.LocalControlActive','','BSH.Common.Status.RemoteControlStartAllowed','1','BSH.Common.Status.OperationState','BSH.Common.EnumType.OperationState.Run','BSH.Common.Status.RemoteControlActive','1','Programme',Délicat/Soie,LaundryCare.Washer.Option.Temperature,LaundryCare.Washer.EnumType.Temperature.GC30,LaundryCare.Washer.Option.SpinSpeed,LaundryCare.Washer.EnumType.SpinSpeed.RPM600,LaundryCare.Washer.Option.IDos1DosingLevel,LaundryCare.Washer.EnumType.IDosingLevel.Off,LaundryCare.Washer.Option.IDos2DosingLevel,LaundryCare.Washer.EnumType.IDosingLevel.Off,LaundryCare.Washer.Option.Prewash,,LaundryCare.Washer.Option.RinsePlus1,,LaundryCare.Common.Option.VarioPerfect,LaundryCare.Common.EnumType.VarioPerfect.Off]
Je souhaite par exemple récupérer la température pour l'intégrer dans une commande via event (ou via une variable si on doit passer obligatoirement par une variable).
LaundryCare.Washer.EnumType.Temperature.GC30 ==> LaundryCare.Washer.EnumType.Temperature.GCXX

Le place des chiffres de la température n'est pas toujours au même rang.
Faut-il utiliser preg_match ?
Pourriez-vous me conseiller ?

Merci par avance.
Mathieu

Kyoshi
Timide
Messages : 427
Inscription : 04 mai 2018, 14:05

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

Message par Kyoshi » 04 oct. 2019, 11:43

Bonjour,

Je cherche à modifier une variable dans un bloc code mais je m'y prends comme un pied.

Mon scénario récupère une valeur dans une nouvelle variable :
Action / variable / Nom : mavariable / Valeur : #[Garage][Chaudière De Dietrich][PROG ACTIF A]#

La valeur est "2".

Si j'envoie la valeur "variable(mavariable)" via Pushover, j'ai bien la valeur "2" qui s'affiche. Jusque là, pas de soucis.

Par contre, je n'arrive pas à modifier la valeur de ma variable dans un bloc code.


J'ai fait plusieurs essais dans tous les sens (n'étant pas dev, il y a peut-être des énormitées).

Code : Tout sélectionner

//$value = $scenario->getData(mavariable);
$value="Plop";
$scenario->setData($mavariable, $value); 
=> Envoie de "variable(mavariable)" => 2

Ou

Code : Tout sélectionner

$variable_J = #[Garage][Chaudière De Dietrich][PROG ACTIF A]#;
scenario->setData($Variable_J, '0');
=> Envoie de "variable(Variable_J)" => vide
=> Envoie de #[Garage][Chaudière De Dietrich][PROG ACTIF A]# => 2

Sinon, j'ai essayé avec $scenario->setData(#variable(mavariable)#, $value) ou $scenario->setData("mavariable", $value) et des choses similaires mais rien...

Avatar de l’utilisateur
tomdom
Actif
Messages : 925
Inscription : 14 nov. 2016, 05:46

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

Message par tomdom » 04 oct. 2019, 16:54

Bpnjour,
Kyoshi a écrit :
04 oct. 2019, 11:43

Code : Tout sélectionner

$variable_J = #[Garage][Chaudière De Dietrich][PROG ACTIF A]#;
scenario->setData($Variable_J, '0');
=> Envoie de "variable(Variable_J)" => vide
=> Envoie de #[Garage][Chaudière De Dietrich][PROG ACTIF A]# => 2

Sinon, j'ai essayé avec $scenario->setData(#variable(mavariable)#, $value) ou $scenario->setData("mavariable", $value) et des choses similaires mais rien...

Code : Tout sélectionner

$scenario->setData('mavariable', '0');
et tu envoies variable(mavariable)
Il y a 10 catégories de personnes, celles qui connaissent le binaire et les autres
.

Kyoshi
Timide
Messages : 427
Inscription : 04 mai 2018, 14:05

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

Message par Kyoshi » 04 oct. 2019, 17:13

Hello tomdom,

Merci. En fait, j’avais également testé cela.
Mais quelque chose en amont bloquait le truc.
En tout commentant (sauf ce code), cela fonctionne bien.

Je vais pouvoir continuer.

EDIT : suis couillon... dans ma boucle if $value==xxx, je mettais un $value==yyy au lieu d'un $value=yyy... donc forcément ça foutait la merde... Des fois, il faut laisser tomber et revenir ensuite pour voir les énormités!

Répondre

Revenir vers « Scénarios »

Qui est en ligne ?

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