Page 10 sur 20

Re: [Framework SC] les scenarios en php

Publié : 28 mai 2016, 12:18
par dJuL
Merci Patrick, je vais regarder ça...

Je ne suis pas bêta testeur donc c'est pas simple.

pour le trigger je regarde aussi mais de mémoire j'ai fait exactement la même chose que Jeedom justement.
Le truc c'est que dans Jeedom tu tapes la fonction dans une condition ou dans une action, donc le trigger est évalué
Il faut donc l'utiliser dans une fonction qui utilise une expression Jeedom.
Si tu l'utilises avec un sc::getExp() ou sc::getCond() ça devrait faire la même chose que dans Jeedom (je pense).

Sinon pour avoir sa valeur en php avec ceci ça dervait marcher (j'ai ps tester donc à confirmer) :
$trigger = sc::getTrigger();
$triggerValue = sc::getExp($trigger);

Re: [Framework SC] les scenarios en php

Publié : 30 mai 2016, 19:43
par m.georgein
Bonjour,

Je reviens sur le problème du NULL.

en lançant :
sc::setcmd(('#' . $Equipement . '[Ambiance_]#', $Valeur)
Si $Valeur = 0 (ou '') on obtient une erreur 'NULL' et le slider n'est pas mis à jour.

Par contre en mettant la syntaxe classique :
$option['slider'] = $Valeur;
cmd::byString('#' . $Equipement . '[Ambiance_]#')->execCmd($option);
on à bien la mise a jour du slider qui est faite et aucun message d'erreur même si $Valeur= 0.
le lancement de
cmd::byString('#' . $Equipement . '[Ambiance_]#')->execCmd(0);
fonctionne également

Quelque chose m'a échappé ?

Re: [Framework SC] les scenarios en php

Publié : 30 mai 2016, 20:07
par dJuL
Merci m.georgein ;)

Le pb du NULL n'avait rien à voir avec celui de Jeedom mais était interne à la classe.
En fait Il est apparu quand j'ai rajouté l'évaluation des expressions directement dans la fonction setCmd

Bref, c'est corrigé, il suffit de lancer l'update ;)

(par contre "" n'est toujours pas accepté pour un slider car on veut un nombre, mais "0" ou 0 maintenant c'est tout bon
et "" passe toujours sans pb pour un titre et/ou un message)

Re: [Framework SC] les scenarios en php

Publié : 30 mai 2016, 22:28
par m.georgein
dJuL plus rapide que l'ombre de sa souris !!!

Question subsidiaire, en dehors du framework sc, y a t il une possibilité de lire les tags (#heure#, etc) ainsi qu'exploiter les fonctions (average, stateDuration, etc) dans les blocs code des scénarios ??

Re: [Framework SC] les scenarios en php

Publié : 31 mai 2016, 10:17
par Patrick
dJuL a écrit :Merci Patrick, je vais regarder ça...

Je ne suis pas bêta testeur donc c'est pas simple.

pour le trigger je regarde aussi mais de mémoire j'ai fait exactement la même chose que Jeedom justement.
Le truc c'est que dans Jeedom tu tapes la fonction dans une condition ou dans une action, donc le trigger est évalué
Il faut donc l'utiliser dans une fonction qui utilise une expression Jeedom.
Si tu l'utilises avec un sc::getExp() ou sc::getCond() ça devrait faire la même chose que dans Jeedom (je pense).

Sinon pour avoir sa valeur en php avec ceci ça dervait marcher (j'ai ps tester donc à confirmer) :
$trigger = sc::getTrigger();
$triggerValue = sc::getExp($trigger);
@dJuL : Désolé pour le manque de réactivité, et merci de ton retour ;)
J'ai testé avec getCond(), et ca marche...
Si tu veux que je fasse quelques tests pour les logs, n'hésite pas ;-)

Re: [Framework SC] les scenarios en php

Publié : 31 mai 2016, 17:25
par dJuL
Ok merci ;)
Bah a voir soit je fait un strip tags et du coup ça passera tel quel en texte brut, soit je fait un truc qui modifie la balise PRE pour conserver la mise en forme html... Je sais pas trop encore, j'me tâte...

Re: [Framework SC] les scenarios en php

Publié : 15 juin 2016, 09:40
par m.georgein
Bonjour,
Je reviens avec (encore) un problème de syntaxe, impossible faire fonctionner l'expression :
sc::wait(sc::getexp('scenario(#[Salon][Volets roulants][Volet roulant]#)' == 0), 5);
donne
WARNING: getExp() - Évaluation d'une expression vide ( retourne NULL )

Avec
sc::wait(sc::getcond('scenario(#[Salon][Volets roulants][Volet roulant]# == 0)'), 5);
j'obtiens
Évaluation d'une condition: ( scenario(#scenario33# == 0) ) ?
[SCENARIO] - Condition évaluée: ( 0 ) ?
[SCENARIO] - Résultat: FAUX
[SCENARIO] - WARNING: wait() - L'expression est vide, le temps d'attente sera le temps d'attente maxixum

J'ai essayé des tas d'autres approches syntaxique sans succès.

Une idée ???????

Re: [Framework SC] les scenarios en php

Publié : 15 juin 2016, 10:20
par Theduck38
Heu, tu es sûr de ton utilisation de la fonction scenario ?
La doc précise que la fonction ne renvoie pas de valeur.

Par ailleurs, pour chaque appel de fonction de la classe sc, il doit falloir mettre sc:: devant => donc sc::scenario()

Par illeurs, j'ai quelques doutes sur le placement de tes guillemets simple par rapport à l'appel au getcond et à ses parenthèses.

Essaye d'écrire ça sur plusieurs niveaux pour architecturer ta requête.
Un bon moyen de savoir où ça ne va pas est de générer du log pour chaque niveau élémentaire de la requête : d'abord faire la partie 'scenario' et renvoyer un log pour voir si elle marche, puis la partie 'getcond', puis le 'wait'...

Edit : tu cherches à faire quoi exactement ?

Re: [Framework SC] les scenarios en php

Publié : 15 juin 2016, 11:07
par dJuL
m.georgein a écrit :Bonjour,
Je reviens avec (encore) un problème de syntaxe, impossible faire fonctionner l'expression :
sc::wait(sc::getexp('scenario(#[Salon][Volets roulants][Volet roulant]#)' == 0), 5);
donne
WARNING: getExp() - Évaluation d'une expression vide ( retourne NULL )

Avec
sc::wait(sc::getcond('scenario(#[Salon][Volets roulants][Volet roulant]# == 0)'), 5);
j'obtiens
Évaluation d'une condition: ( scenario(#scenario33# == 0) ) ?
[SCENARIO] - Condition évaluée: ( 0 ) ?
[SCENARIO] - Résultat: FAUX
[SCENARIO] - WARNING: wait() - L'expression est vide, le temps d'attente sera le temps d'attente maxixum

J'ai essayé des tas d'autres approches syntaxique sans succès.

Une idée ???????
La fonction wait prend directement une condition jeedom (String) en entrée et pas un boolean pourquoi donc utiliser getExp ou getCond qui vont évaluer le résultat à la place de la fonction wait ?

sc::wait('scenario(#[Salon][Volets roulants][Volet roulant]# == 0', 5);

Tout simplement, et ça devrait marcher

Re: [Framework SC] les scenarios en php

Publié : 15 juin 2016, 12:01
par m.georgein
Une des rares solution que je n'avais pas essayée !

Ta syntaxe aussi comportait une erreur (manque la parenthèse en fin d'équipement), en fait il faut écrire :
sc::wait('scenario(#[Salon][Volets roulants][Volet roulant]#) == 0', 2);

et là ça roule parfaitement !!!

Je commence à avoir une grande quantité de scénario complexe utilisant ton framework (gestion volet, lumière, alarme, caméra, visu de snapshot, etc.). Alors si tu as besoin de quelqu'un pour des tests ou autre n'hésite pas ! Ce sera un simple retour d'ascenseur !


Pour répondre à Theduck38 ici il s'agit d'un appel à la fonction scenario native de jeedom, c'est le wait qui appartient à sc.

Re: [Framework SC] les scenarios en php

Publié : 15 juin 2016, 12:07
par dJuL
Oui désolé pour la ) manquante je l'ai tapé à la volé ;)

Re: [Framework SC] les scenarios en php

Publié : 15 juin 2016, 14:49
par Theduck38
m.georgein a écrit : Pour répondre à Theduck38 ici il s'agit d'un appel à la fonction scenario native de jeedom, c'est le wait qui appartient à sc.
Voui, ça m'a effleuré après coup, mais ne connaissant ni ton niveau ni ton but je n'ai pas réédité le post. Le principal c'est que tu aies réussi à le faire :)

Re: [Framework SC] les scenarios en php

Publié : 16 juin 2016, 10:32
par m.georgein
Encore lui !!!

Cette fois ci je viens avec la fonction sc::unsetvar()

Apparemment si la variable est vide elle n'est pas supprimée ... C'est contournable mais il faut y penser !!! :(

Re: [Framework SC] les scenarios en php

Publié : 16 juin 2016, 13:07
par dJuL
Tu parles d'un variable Jeedom en bdd ?

Re: [Framework SC] les scenarios en php

Publié : 16 juin 2016, 13:22
par m.georgein
Jeedom oui

Re: [Framework SC] les scenarios en php

Publié : 16 juin 2016, 13:28
par dJuL
Ok je regarde ça quand je rentre

Re: [Framework SC] les scenarios en php

Publié : 17 juin 2016, 09:55
par dJuL
J'ai l'impression que lorsque la variable est vide Jeedom ne retourne pas la valeur vide mais la valeur spécifiée par défaut, ce qui fait que le framework ne lance pas l'effacement croyant que la variable n'existe pas.
Je regarderai ça plus en profondeur ce WE.

As tu vérifier le log du scénario concernant l'effacement ?

Re: [Framework SC] les scenarios en php

Publié : 17 juin 2016, 16:37
par m.georgein
Je viens de refaire le test, le message est :
WARNING: unsetvar() - Variable Alarme_Mvmt non définie, aucune destruction
et pourtant elle existe bien dans la liste des variables jeedom, mais vide.

Re: [Framework SC] les scenarios en php

Publié : 17 juin 2016, 16:50
par dJuL
Ok c'est bien ce que je craignais, lorsque la variable est vide Jeedom considère qu'elle n'existe pas et retourne la valeur par défaut au lieu de vide.
ex: si tu vais dans une expression jeedom un variable(toto , "defaut"), si toto est vide "défaut" sera retourné au lieu de "" qui est pourtant sa valeur.

Comme le framework utilise la valeur par defaut pour savoir si la variable est définie, forcément ça ne marche pas lorsqu'elle est vide.

Je vais voir si je peux trouver une autre méthode pour savoir si la variable existe en bdd, ou bien voir si ça ne créer pas d'erreur d'effacer une variable qui n'existe pas, auquel cas le framework pourrait se passer du test d’existence avant d'effectuer le unset.

Re: [Framework SC] les scenarios en php

Publié : 17 juin 2016, 17:24
par m.georgein
Encore une chose qui n'a peut être rien à voir avec toi mais si je ne pose pas la question ...

Dans le log "expression", j'ai des centaines de lignes de ce type :
[2016-06-17 17:13:34][expression][DEBUG] : [Parser 1] Expression : #[SdB][Fenêtre SdB][Ouverture]# tranformé en #[SdB][Fenêtre SdB][Ouverture]# => Unexpected character "#" around position 0.
[2016-06-17 17:13:39][expression][DEBUG] : [Parser 1] Expression : 2016-06-17 17:12:59 tranformé en 2016-06-17 17:12:59 => Unexpected token "number" of value "17" around position 12.
[2016-06-17 17:08:01][expression][DEBUG] : [Parser 1] Expression : #ff0000 tranformé en #ff0000 => Unexpected character "#" around position 0.
[2016-06-17 17:07:30][expression][DEBUG] : [Parser 1] Expression : ALARME !!! tranformé en ALARME !!! => Variable "ALARME" is not valid around position 1.

Pas d'incidence sur le fonctionnement mais consommation cpu pour rien ;) et difficulté de lecture des logs !!!

Signé : ton pire client :roll: :roll: