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
OUARZA
Timide
Messages : 298
Inscription : 13 févr. 2019, 08:10

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

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

OUARZA a écrit :
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
Bonsoir,
J'ai fait cela

Code : Tout sélectionner

$cmd = cmd::byString("#[Cellier][Machine à laver][Infos]#");
$value = $cmd->execCmd();
$value_array = explode(",",$value);
$compt = array_search("LaundryCare.Washer.Option.Temperature",$value_array) + 1;
$Temp = str_replace("LaundryCare.Washer.EnumType.Temperature.GC","",$value_array[$compt]);
$scenario->setData("Mal_Temp", $Temp);
La variable est créée mais elle est vide.
Comment faire ?
Merci

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

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

Message par winhex » 04 oct. 2019, 21:32

joue avec le log avant
car au moindre bug ton script s'arrête
exemple
viewtopic.php?f=31&t=29412&hilit=json_d ... 40#p740134

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

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

Message par OUARZA » 05 oct. 2019, 15:44

Bonjour winhex,
Pas sûr de bien comprendre.
J'ai donc modifié comme ça:

Code : Tout sélectionner

$cmd = cmd::byString("#[Cellier][Machine à laver][Infos]#");
$scenario->setLog($cmd);
$value = $cmd->execCmd();
$scenario->setLog($value);
$value_array = explode(",",$value);
$scenario->setLog($value_array);
$compt = array_search("LaundryCare.Washer.Option.Temperature",$value_array) + 1;
$scenario->setLog($compt);
$Temp = str_replace("LaundryCare.Washer.EnumType.Temperature.GC","",$value_array[$compt]);
$scenario->setLog($Temp);
$scenario->setData("Mal_Temp",$Temp);
Est-cela qu'il fallait faire ?
Merci

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

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

Message par OUARZA » 07 oct. 2019, 21:27

Bonjour à tous,
Je voulais simplement vous dire que j'avais réussi.
Effectivement en utilisant le log, cela permet de mieux comprendre :)

Code : Tout sélectionner

$cmd = cmd::byString("#[Cellier][Machine à laver][Infos]#");
//$scenario->setLog($cmd);
$value = $cmd->execCmd();
//1=valeur de la commande
$scenario->setLog($value);
$value_array = explode(",",$value);
//2=scinder le résultat virgule
$scenario->setLog($value_array);

//programme
$scenario->setLog("Log Programme");
$Prog_Temp = array_search("'Programme'",$value_array) +1;
$scenario->setLog($Prog_Temp);
$Prog = str_replace("Programme","",$value_array[$Prog_Temp]);
$scenario->setLog($Prog);
$cmd::byString("#[Cellier][Machine à laver][Programme :]#")->event($Prog);
machine7.JPG
machine7.JPG (18.31 Kio) Consulté 4816 fois
Mathieu

Coben
Timide
Messages : 76
Inscription : 16 janv. 2018, 03:06

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

Message par Coben » 21 oct. 2019, 01:52

Bonjour a tous, merci @Winhex pour ce tuto pour les nuls.
J,'essaye de faire un calcul sur les dates, afin d'obtenir une valeur (stockée dans une variable) au format AAAA-MM-JJ, qui me permetrait par l'intermediaire d'un scenario d'ajouter une date à un evenement agenda.
J'ai fait

Code : Tout sélectionner

$date = date("Y-m-d");//  ici la date
$date = strtotime(date("Y-m-d", strtotime($date)) . " +5 day");       // ajouter 5 jour
$Variable_J = "#datedepart#";
$scenario->setData($Variable_J, '$date');
Mais la variable "datedepart" reste vide....

Une idée?

Merci par avance

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

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

Message par winhex » 21 oct. 2019, 07:12

bonjour je doute que le tag soit de cette manière en code PHP scénario
essai l'enregistrement en réel variables (façon classique) et/ou recherche de la cmd pour l'avoir

Coben
Timide
Messages : 76
Inscription : 16 janv. 2018, 03:06

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

Message par Coben » 22 oct. 2019, 00:57

le probleme c'est qu'avec un scenario classique style
variable -> nom -> date("d-m-y")
il converti la date en numerique

Code : Tout sélectionner

[2019-10-21 18:09:50][SCENARIO] Start : Scenario lance manuellement.
[2019-10-21 18:09:50][SCENARIO] Exécution du sous-élément de type [action] : action
[2019-10-21 18:09:50][SCENARIO] Affectation de la variable datedepart => 21-10-19 = -8
[2019-10-21 18:09:50][SCENARIO] Fin correcte du scénario
avec un bloc code on doit pouvoir recuperer la date en string pour faire des calculs dessus.
j'ai trouvé une astuce de @domoggvad ici qui fonctionne bien
viewtopic.php?p=761718

d'ailleur le debut du topic part d'un de tes widget @Winhex

ce serrait difficile d'adapter ton widget clock à un widget "date"? on choisit une date dans le menu déroulant, cette date est stockée ou stockable en string dans une variable, qui sert ensuite (via scenario) a modifier une agenda.....
je veux bien m'y coller mais j'y connais rien!

Avatar de l’utilisateur
fredlamour
Timide
Messages : 260
Inscription : 31 janv. 2016, 11:38
Localisation : Brissac Loire Aubance

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

Message par fredlamour » 17 nov. 2019, 11:06

Bonjour,
Je suis plus que novice en code php donc merci d'avance de votre indulgence.
je prépare un scénario qui va jouer les informations du lendemain (météo, agenda, saint du jour).
Je récupère le saint du jour dans Domogeek mais la chaine sépare les prénoms par des virgules qui sont énoncées en TTS.
Je souhaite donc remplacer les virgules par des points.

L'idée est de lire la valeur saint du jour (#316# chez moi), remplacer les "," par les " " avec la commande str_replace et stocker le résultat dans un virtuel de type other (#2460#) chez moi.

J'ai donc écrit cela :

Code : Tout sélectionner

$cmd= cmd::byId(316); //récupération de la commande ou $id est l'id de la commande saint de demain
$saintdemain = str_replace(',','',$cmd ) // remplace les virgules par des espaces
$virtual = cmd::byId(2460); //  $id est l'id de la commande type info du virtuel sous type other
$virtual->event( $saintdemain->execCmd()); // Mise à jour du virtuel
Bien entendu si j'écris sur le forum c'est que cela ne fonctionne pas et j'ai l'erreur :

Code : Tout sélectionner

[2019-11-17 10:48:33][SCENARIO] Exécution du sous-élément de type [action] : code
[2019-11-17 10:48:33][SCENARIO] Exécution d'un bloc code
[2019-11-17 10:48:33][SCENARIO] syntax error, unexpected '$virtual' (T_VARIABLE)
[2019-11-17 10:48:33][SCENARIO] Fin correcte du scénario
pouvez vous me guider avec si possible une explication du pourquoi cela ne marche pas.
Merci d'avance

Seb82
Timide
Messages : 116
Inscription : 29 août 2017, 11:53
Contact :

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

Message par Seb82 » 17 nov. 2019, 11:34

Code : Tout sélectionner

$cmd= cmd::byId(316); //récupération de la commande ou $id est l'id de la commande saint de demain
$valeur=$cmd->execCmd();
$saintdemain = str_replace(',','',$valeur) // remplace les virgules par des espaces
$virtual = cmd::byId(2460); //  $id est l'id de la commande type info du virtuel sous type other
$virtual->event($saintdemain); // Mise à jour du virtuel
Essaie ça. C'est juste que $cmd est une référence pour retrouver la commande, pas la valeur qu'elle contient.

Avatar de l’utilisateur
fredlamour
Timide
Messages : 260
Inscription : 31 janv. 2016, 11:38
Localisation : Brissac Loire Aubance

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

Message par fredlamour » 22 nov. 2019, 20:43

Merci pour ta réponse Seb82.
Cependant l'erreur est toujours là :

Code : Tout sélectionner

2019-11-22 20:40:21][SCENARIO] Exécution d'un bloc code
[2019-11-22 20:40:21][SCENARIO] syntax error, unexpected '$virtual' (T_VARIABLE)
[2019-11-22 20:40:21][SCENARIO] Affectation de la variable varsaintdemain => #[SCENARIO][Variables][SaintdeDemain]# = #[SCENARIO][Variables][SaintdeDemain]#
Est ce que cela vient du fait que #316# et #2460# sont de type info/other ?

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

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

Message par winhex » 22 nov. 2019, 22:32

bonjour
use des logs

Code : Tout sélectionner

$cmd= cmd::byId(316); //récupération de la commande ou $id est l'id de la commande saint de demain
$valeur=$cmd->execCmd();
$scenario->setLog($valeur);
et si ok tu continues pour voir ou ca tic

un indice ;

hs
tu peux le faire sans scenario code

Avatar de l’utilisateur
fredlamour
Timide
Messages : 260
Inscription : 31 janv. 2016, 11:38
Localisation : Brissac Loire Aubance

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

Message par fredlamour » 26 nov. 2019, 20:10

Merci #winhex pour la méthose.
J'ai trouvé les 2 problèmes :
- ";" manquant
- id destination mal enregistré et été reconnu comme binaire au lieu de other.

Code : Tout sélectionner

$cmd= cmd::byId(316); //récupération de la commande ou $id est l'id de la commande saint de demain
$valeur=$cmd->execCmd();
$saintdemain = str_replace(',',' ',$valeur); // remplace les virgules par des espaces
$cmd::byId(2460)->event($saintdemain); //  $id est l'id de la commande type info du virtuel sous type other

pifou
Timide
Messages : 36
Inscription : 12 mars 2018, 18:42

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

Message par pifou » 08 déc. 2019, 23:21

Bonjour,
dans mon scénario code j'insère des data dans un fichier plat. Existe-t-il une commande pour ajouter un message dans le centre de message en cas d'erreur ? Pour l'instant je ne peux que ajouter du message dans le log du scénario, mais bien sur je n'irais pas vérifier mes logs chaque jour.
pi3 jeedom 3.2.11 sur raspbian-strech (9) z-wave system

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

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

Message par winhex » 08 déc. 2019, 23:51


Avatar de l’utilisateur
Jeandhom
Actif
Messages : 1386
Inscription : 20 oct. 2015, 17:32

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

Message par Jeandhom » 09 déc. 2019, 10:55

Code : Tout sélectionner

// Ajout d'un message dans le Centre de Message

message::add('Scénario ' . $scenario->getHumanName(),'Message 2','Message 3');

Code : Tout sélectionner

// Retrait d'un message dans le Centre de Message

message::removeAll('Scénario ' . $scenario->getHumanName());

pifou
Timide
Messages : 36
Inscription : 12 mars 2018, 18:42

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

Message par pifou » 09 déc. 2019, 18:47

Merci beaucoup ça marche parfaitement :) j'étais sur le point d'écrire un booléen dans une variable, et lire cette variable en sortie du scénario... là c'est top!
pi3 jeedom 3.2.11 sur raspbian-strech (9) z-wave system

Répondre

Revenir vers « Scénarios »

Qui est en ligne ?

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