Page 9 sur 9

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

Publié : 04 oct. 2019, 20:58
par OUARZA
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

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

Publié : 04 oct. 2019, 21:32
par winhex
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

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

Publié : 05 oct. 2019, 15:44
par OUARZA
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

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

Publié : 07 oct. 2019, 21:27
par OUARZA
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é 1104 fois
Mathieu

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

Publié : 21 oct. 2019, 01:52
par Coben
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

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

Publié : 21 oct. 2019, 07:12
par winhex
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

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

Publié : 22 oct. 2019, 00:57
par Coben
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!

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

Publié : 17 nov. 2019, 11:06
par fredlamour
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

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

Publié : 17 nov. 2019, 11:34
par Seb82

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.

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

Publié : 22 nov. 2019, 20:43
par fredlamour
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 ?

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

Publié : 22 nov. 2019, 22:32
par winhex
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

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

Publié : 26 nov. 2019, 20:10
par fredlamour
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

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

Publié : 08 déc. 2019, 23:21
par pifou
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.

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

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

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

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

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());

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

Publié : 09 déc. 2019, 18:47
par pifou
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!