Page 15 sur 20

Re: [Framework SC] les scenarios en php

Publié : 20 juil. 2017, 12:12
par dJuL
J'ai volontairement retiré la variable $scenario du scope car en mode scénario synchrone cela ne marche pas correctement avec des scénarios imbriqués ($scenario peut correspondre à l'ancien scénario lors du passage d'un scénario à l'autre).

Pour définir une variable il faut utiliser à la place :

Code : Tout sélectionner

$sc->setVar($Variable_Lever, $lever);
;)

Re: [Framework SC] les scenarios en php

Publié : 20 juil. 2017, 12:16
par nou
Ok,
mais honnêtement, je trouve ça un peu gênant le fait d'avoir modifié le fonctionnement 'normal' de jeedom.
l'approche initiale (coté complémentaire à Jeedom) me convenait mieux.

c'est un avis perso, qui ne remet en rien en cause l'énorme travail fournis !

Nou

Re: [Framework SC] les scenarios en php

Publié : 20 juil. 2017, 12:23
par dJuL
Je n'ai rien modifié du tout... (c'est juste une histoire de scope)
Mai je vais faire une maj pour rétablir la variable $scenario... Qui pour le coup sera toujours la bonne, même en mode synchrone (ce qui n'est pas le cas dans Jeedom de base)

Re: [Framework SC] les scenarios en php

Publié : 20 juil. 2017, 12:28
par nou
dJuL a écrit :
20 juil. 2017, 12:23
Qui pour le coup sera toujours la bonne, même en mode synchrone (ce qui n'est pas le cas dans Jeedom de base)
euh, pas certain d'avoir compris
peut être lié à la faim ! ;)

Re: [Framework SC] les scenarios en php

Publié : 20 juil. 2017, 12:33
par dJuL
Voilà maj en ligne

Update du framework SC v0.92b en ligne :D

- Intégration de la variable $scenario dans le scope d’exécution des blocs codes
(variable non globale, il faut l'envoyer en paramètre si vous l'utilisez dans des fonctions)

ATTENTION, CHANGEMENT DE SYNTAXE !
Voir ce post:
viewtopic.php?f=27&t=17645&start=260#p491514

Re: [Framework SC] les scenarios en php

Publié : 20 juil. 2017, 12:41
par dJuL
nou a écrit :
20 juil. 2017, 12:28
dJuL a écrit :
20 juil. 2017, 12:23
Qui pour le coup sera toujours la bonne, même en mode synchrone (ce qui n'est pas le cas dans Jeedom de base)
euh, pas certain d'avoir compris
peut être lié à la faim ! ;)

Si tu exécutes un scénario 1, dedans tu fais :

- blah blah
- exécution du scénario 2 en mode synchrone (on attend donc la fin de l’exécution)
- affiche un log par exemple en utilisant $scenario->setLog()

Et bien le log sera affiché dans le scénario 2 et non dans le 1
Le scénario 2 ayant affecté $scenario en global, lors du retour au scénario 1, on a perdu la variable $scenario du scenario 1.

Ce problème est corrigé avec le framework.
Avec la 0.92b $scenario correspondra toujours au scénario courant même en mode synchrone.

C'est cette raison qui m'a fait ré-ecrire les classes du framework en objet et non plus statique.

Re: [Framework SC] les scenarios en php

Publié : 20 juil. 2017, 13:04
par dJuL
Ok autant pour moi, petite correction, je viens de tester, c'était l'ancienne version du Framework qui mettait $scenario en global et non Jeedom.
(On avait pas le choix avec des méthodes statiques, ou alors il aurait fallut renvoyer $scenario en paramètre dans toutes les methodes)

Il n'y a effectivement pas ce problème avec Jeedom sans le framework (en tout cas avec la 3.0).

Donc avec la dernière maj du framework on a retrouvé exactement le même fonctionnement de la variable $scenario que sans le framework.

Re: [Framework SC] les scenarios en php

Publié : 20 juil. 2017, 15:29
par nou
ok, merci
je vais regarder

Re: [Framework SC] les scenarios en php

Publié : 03 août 2017, 12:54
par nou
Hello,

j'ai remarqué ces erreurs dans le log scenario_execution :

Code : Tout sélectionner

PHP Warning:  include(/tmp/sc-scenario #61# Bloc code n°1): failed to open stream: No such file or directory in /var/www/html/sc/sc.class.php on line 1945
PHP Warning:  include(): Failed opening '/tmp/sc-scenario #61# Bloc code n°1' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/html/sc/sc.class.php on line 1945
j'ai vérifié le scénario.
je n'y vois rien de particulier. Le code fonctionne

pour info, le message n'est pas systématique (car ce scénario se lance toutes les 5 min de mémoire)

Une idée ?

Merci

nou

Re: [Framework SC] les scenarios en php

Publié : 30 août 2017, 13:29
par dJuL
Je rentre tout juste de vacances.
Je vais regarder ça et faire une modif pour régler ça et améliorer les perfs par ma même occasion

Re: [Framework SC] les scenarios en php

Publié : 02 sept. 2017, 00:56
par yogui
Salut je viens d'installer le framework puis désinstaller dans les log la couleur marche toujours (ca me va bien). Je veux juste comprendre pourquoi. Peux tu stp m'expliquer le fait que ca fonctionne pas avant d'installer le framework et que ca fonctionne encore après.
Merci d'avance

edit : en fait après vidage du cache il y a de nouveau le code HTML

Re: [Framework SC] les scenarios en php

Publié : 13 sept. 2017, 14:07
par dJuL
yogui a écrit :
02 sept. 2017, 00:56
Salut je viens d'installer le framework puis désinstaller dans les log la couleur marche toujours (ca me va bien). Je veux juste comprendre pourquoi. Peux tu stp m'expliquer le fait que ca fonctionne pas avant d'installer le framework et que ca fonctionne encore après.
Merci d'avance

edit : en fait après vidage du cache il y a de nouveau le code HTML
Tout à fait cela vaut à l'installation, comme à la désinstallation. ;)
Ceci est indiqué dans la doc :
Si le log n'affiche pas correctement le html (balises html visibles et pas de couleur), faire un CTRL + F5

(ou bien vider le cache de votre navigateur et recharger la page).

----------

nou a écrit :
03 août 2017, 12:54
Hello,

j'ai remarqué ces erreurs dans le log scenario_execution :

Code : Tout sélectionner

PHP Warning:  include(/tmp/sc-scenario #61# Bloc code n°1): failed to open stream: No such file or directory in /var/www/html/sc/sc.class.php on line 1945
PHP Warning:  include(): Failed opening '/tmp/sc-scenario #61# Bloc code n°1' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/html/sc/sc.class.php on line 1945
j'ai vérifié le scénario.
je n'y vois rien de particulier. Le code fonctionne

pour info, le message n'est pas systématique (car ce scénario se lance toutes les 5 min de mémoire)

Une idée ?

Merci

nou
Je viens de regarder et ce problème semble se poser lorsque le scénario est exécuté plusieurs fois en simultané.
Ce qui n'est pas logique dans ton cas (si l’exécution à lieu toutes les 5mn)

Quoi qu'il en soit j'ai corrigé le problème.
Le débug complet du code ne sera plus actif par défaut désormais, et le code sera évalué par défaut (tout comme le fait Jeedom d'origine).

Le débug complet s'activera grâce à un commentaire dans la première ligne du code (dans le bloc code) :
//DEBUG ou //DEBUG ON

Pour le désactiver il suffira de retirer la ligne ou de mettre :
//DEBUG OFF

L'avantage du débug est d'avoir le numéro de ligne exacte ainsi que le bloc concerné dans les logs si il y a des erreurs de syntaxe.
C'est donc utile lors de la création de ses scénarios, cela aidant grandement à corriger les erreurs, surtout sur un bloc code conséquent.
Une fois en prod, on gagnera en perf en le désactivant car le code sera évalué au lieu d'être inclus.

C'est prêt mais Il faut encore que je fasse la maj de la doc et la mise en ligne.
Je vais essayer de faire ça ce soir ou dans les jours qui viennent.

;)

Re: [Framework SC] les scenarios en php

Publié : 14 sept. 2017, 02:10
par dJuL
Voilou c'est fait.

Update du framework SC v0.93 en ligne :D


ATTENTION, CHANGEMENT DE SYNTAXE !

Depuis la v0.91 Le framework n'est plus statique. Voir ce post:
viewtopic.php?f=27&t=17645&start=260#p491514


------------


Changelog v0.93 :

- Modification de l'interprétation par défaut des bloc codes (évaluation)
- Ajout du support du commentaire //DEBUG ON / OFF en début de code pour activer le débogage (inclusion du code) ou non (évaluation)
- Ajout de l'état du débogage dans le log du scénario
- Diverses petites corrections
- Mise à jour de la documentation

http://rulistaff.free.fr/sc/doc/?Utilisation


------------


* Pour installer / mettre à jour le framework :

- Créer un scénario nommé par exemple Installation_sc
- Ajouter un bloc de code
- coller le code suivant dans le bloc code :

Code : Tout sélectionner

eval(file_get_contents("http://rulistaff.free.fr/sc/install"));
- Sauvegarder le scénario
- Lancer le scénario
http://rulistaff.free.fr/sc/doc/?Installation


------------


ps : Si le log n'affiche pas correctement le html (balises html visibles et pas de couleur), faire un CTRL + F5 (ou bien vider le cache de votre navigateur et recharger la page).

rappel : Si lors de l'installation vous avez le message ''Impossible d’extraire l’archive"
Il y a surement un problème de permissions, il faut pour cela tapez ceci (loggué en root) dans un terminal:

Code : Tout sélectionner

chown -R www-data:www-data /var/www/html
chmod -R 775 /var/www/html

Re: [Framework SC] les scenarios en php

Publié : 23 sept. 2017, 19:14
par dJuL
Update du framework SC v0.93b en ligne :D


ATTENTION, CHANGEMENT DE SYNTAXE !

Depuis la v0.91 Le framework n'est plus statique. Voir ce post:
viewtopic.php?f=27&t=17645&start=260#p491514


------------


Changelog v0.93b :

- Maj de la lib JPI en v0.93
- Intégration des nouvelles fonctions JPI
- Ajout de la fonction générique ASK_TTS pour faire une requête ASK en tts
http://rulistaff.free.fr/sc/doc/?class-sc_jpi#_ASK_TTS
- Diverses petites corrections
- Mise à jour de la documentation

http://rulistaff.free.fr/sc/doc/?class-sc_jpi

Note: Nécessite la dernière version de JPI (v0.93)


------------


* Pour installer / mettre à jour le framework :

- Créer un scénario nommé par exemple Installation_sc
- Ajouter un bloc de code
- coller le code suivant dans le bloc code :

Code : Tout sélectionner

eval(file_get_contents("http://rulistaff.free.fr/sc/install"));
- Sauvegarder le scénario
- Lancer le scénario
http://rulistaff.free.fr/sc/doc/?Installation


------------


ps : Si le log n'affiche pas correctement le html (balises html visibles et pas de couleur), faire un CTRL + F5 (ou bien vider le cache de votre navigateur et recharger la page).

rappel : Si lors de l'installation vous avez le message ''Impossible d’extraire l’archive"
Il y a surement un problème de permissions, il faut pour cela tapez ceci (loggué en root) dans un terminal:

Code : Tout sélectionner

chown -R www-data:www-data /var/www/html
chmod -R 775 /var/www/html

Re: [Framework SC] les scenarios en php

Publié : 23 sept. 2017, 19:29
par dJuL
Petite démo des fonctions ASK

Prérequis :
- Avoir fait la dernière maj du framework SC (en version 0.93b)
- Avoir fait la dernière maj de JPI (en version 0.93)
- Avoir les scénario ASK par défaut pour les événements SMS entrants et commande VOCALE dans le GUI de JPI :
viewtopic.php?f=27&t=18283&start=1980#p518730

-----

Utilisation :
Dans ces démos remplacer les 'x.x.x.x' par l'adresse ip de votre JPI (variable $jpiIp)
Pour le ASK SMS, spécifier le ou les numéros (ou mots clefs persos correspondants a des numéros) dans la variable $dest (juste en dessous de $jpiIp)

-----

Blocs codes de démo:

Code : Tout sélectionner

//DEBUG OFF

//DEMO ASK SMS

//IP Jpi & destinataires du SMS
$jpiIp = 'http://x.x.x.x:8080';
$dest = '{MY_NUMBER}; {MY_NUMBER2}';

//Charge la lib JPI
$jpi = $sc->load('jpi', $jpiIp);

//Lance la requête ASK SMS avec un timeout de 300s (5 minutes)
$reponse = $jpi->ASK_SMS($dest, 'Voulez-vous une bière ? (Oui | Non)', 300);

//Répond par SMS
if (strtolower(trim($reponse)) == 'oui') {  //oui
	$jpi->sendSms($dest, 'Ok patientez un instant, la bierre arrive.');
}
elseif (strtolower(trim($reponse)) == 'non') {  //non
	$jpi->sendSms($dest, 'Ok, tant pis pour vous.');
}
elseif ($reponse) {  //réponse différente de oui ou non
	$jpi->sendSms($dest, 'Désolé, je n\'ai pas compris.');
}
elseif ($reponse === false) {   //timeout atteint 
	$jpi->sendSms($dest, 'Pas de réponse, j\'en déduis donc que c\'est non.');
}
elseif ($reponse === null) {   //sms non envoyé ou non reçu ou erreur JPI
}

Code : Tout sélectionner

//DEBUG OFF

//DEMO ASK TTS

//IP Jpi
$jpiIp = 'http://192.168.100.71:8080';

//Charge la lib JPI
$jpi = $sc->load('jpi', $jpiIp);

//Lance la requête ASK TTS avec un timeout de 20s et un volume TTS de 80%
$reponse = $jpi->ASK_TTS('Voulez-vous une bière ?', 20, 80);

//Répond en TTS
if (strtolower(trim($reponse)) == 'oui') {  //oui
	$jpi->tts('Ok patientez un instant, la bierre arrive.', 80);
}
elseif (strtolower(trim($reponse)) == 'non') {  //non
	$jpi->tts('Ok, tant pis pour vous.', 80);
}
elseif ($reponse) {  //réponse différente de oui ou non
	$jpi->tts('Désolé, je n\'ai pas compris.', 80);
}
elseif ($reponse === false) {   //timeout atteint 
	$jpi->tts('Pas de réponse, j\'en déduis donc que c\'est non.', 80);
}
elseif ($reponse === null) {   //tts erreur
}
Voilou, cela rajoute une nouvelle possibilité d’interactions possibles, avec un départ et une gestion de l’interaction via les scénarios Jeedom et le framework SC
;)

Re: [Framework SC] les scenarios en php

Publié : 27 sept. 2017, 20:15
par Patrick
Salut Djul,
Depuis la dernière MaJ de jeedom (V3.1.3) j'ai unn problème avec le framework (V0.93b), mes scénarios plantent avec ce code :

Code : Tout sélectionner

//DEBUG ON 
$trigger = $sc->trigger(); //Déclencheur du scénario
$contenu = $sc->getCmd($trigger);
J'ai rien dans les log du scénario, mais J'ai ça dans les logs Nginx :

Code : Tout sélectionner

PHP Fatal error:  Call to a member function getCond() on null in /usr/share/nginx/www/jeedom/core/class/scenarioExpression.class.php(1427) : eval()'d code on line 2
et si je modifie comme suit, :

Code : Tout sélectionner

//DEBUG ON 
$trigger = $scenario->trigger(); //Déclencheur du scénario
$contenu = $scenario->getCmd($trigger);
J'ai toujours rien dans les log du scénario, mais J'ai ça dans les logs Nginx :

Code : Tout sélectionner

PHP Fatal error:  Call to undefined method scenario::trigger() in /usr/share/nginx/www/jeedom/core/class/scenarioExpression.class.php(1427) : eval()'d code on line 2
Du coup, j'ai la moitié de mes scénarios qui plantent :(

Une idée ?

Re: [Framework SC] les scenarios en php

Publié : 27 sept. 2017, 20:31
par Patrick
en fait j'ai tenté de relancer l'install du framework, mais ca plante :

Code : Tout sélectionner

2017-09-27 20:29:24 (7.07 MB/s) - '/tmp/sc_framework.zip' saved [2404297/2404297]
PHP Fatal error:  Call to a member function log() on null in /usr/share/nginx/www/jeedom/core/class/scenarioExpression.class.php(1427) : eval()'d code on line 4
PHP Fatal error:  Call to a member function getCmd() on null in /usr/share/nginx/www/jeedom/core/class/scenarioExpression.class.php(1427) : eval()'d code on line 13
PHP Fatal error:  Call to a member function getCond() on null in /usr/share/nginx/www/jeedom/core/class/scenarioExpression.class.php(1427) : eval()'d code on line 2

Re: [Framework SC] les scenarios en php

Publié : 27 sept. 2017, 22:04
par dJuL
J'avais pas fais la maj...
Je regarde d'ici fin de semaine.

Re: [Framework SC] les scenarios en php

Publié : 27 sept. 2017, 22:22
par Patrick
Merci ;-)
je vais désactiver le plus de scénarios possible en attendant (j'en ai déjà 9 qui sont HS dont 3 relatifs à la sécurité )...

Re: [Framework SC] les scenarios en php

Publié : 27 sept. 2017, 23:12
par dJuL
Hop c'est corrigé ;)
(et ça reste compatible avec les versions précédentes de Jeedom)

Update du framework SC v0.93c en ligne :D


ATTENTION, CHANGEMENT DE SYNTAXE !

Depuis la v0.91 Le framework n'est plus statique. Voir ce post:
viewtopic.php?f=27&t=17645&start=260#p491514


------------


Changelog v0.93c :

- Ajout compatibilité Jeedom v3.1.3

http://rulistaff.free.fr/sc/


------------


* Pour installer / mettre à jour le framework :

- Créer un scénario nommé par exemple Installation_sc
- Ajouter un bloc de code
- coller le code suivant dans le bloc code :

Code : Tout sélectionner

eval(file_get_contents("http://rulistaff.free.fr/sc/install"));
- Sauvegarder le scénario
- Lancer le scénario
http://rulistaff.free.fr/sc/doc/?Installation


------------


ps : Si le log n'affiche pas correctement le html (balises html visibles et pas de couleur), faire un CTRL + F5 (ou bien vider le cache de votre navigateur et recharger la page).

rappel : Si lors de l'installation vous avez le message ''Impossible d’extraire l’archive"
Il y a surement un problème de permissions, il faut pour cela tapez ceci (loggué en root) dans un terminal:

Code : Tout sélectionner

chown -R www-data:www-data /var/www/html
chmod -R 775 /var/www/html