Librairie d'émulation eedomus pour developpeurs de scripts

Discussion et échanges de scripts pour la box eedomus

Librairie d'émulation eedomus pour developpeurs de scripts

Messagepar Havok » 13 Juin 2019 10:40

Bonjour amis developpeurs,

Mes developpements sont souvent fait hors de chez moi (donc loin de ma eedomus). Je teste donc mes scripts sur un serveur "standard". Ce qui me pose quelques soucis pour le remplacement des fonctions "standards" de php par les fonctions "maison" (genre getArg ou httpQuery).

Mon idée est d'utiliser une librairie qui emule les fonctions spécifiques eedomus afin de construire le fonctionnement global, l'algorythme, etc... sur n'importe quel serveur web.
Ensuite, quand cela fonctionne je paufine et je test en étant à la maison.

Cette solution à plusieurs avantages :
- Pas besoin d'être physiquement sur le reseau de la box (on garde la sécurité qui oblige à être sur le réseau de la box pour upload un script)
- Ca permet de faire les test ailleurs que sur ca box (j'avoue que j'ai pas envie de tout planter avec mes scripts pas finis)

J'ai donc commencé à créé une librairie qui émule ces fonctions (et qui peuvent servir dans des projets standards).
Si vous êtes interessés je vous invite donc à participer au développement de celle-ci directement sur github :
https://github.com/aussitot/eedomus.emulation.lib

Pour l'instant les fonctions supportées :
Code : Tout sélectionner
function httpQuery($url, $action = 'GET'/*GET,POST,PUT,DELETE*/, $post = NULL, $oauth_token = NULL, $headers = NULL, $use_cookies = false, $ignore_errors = false, &$info = null)

function sdk_json_decode($json)

function getArg($var, $mandatory = true, $default = ' ')

function saveVariable($variable_name, $variable_content)

function loadVariable($variable_name)

function jsonToXML($json)

function getValue($periph_id /*Code API*/, $value_text = false)

function xpath($xml, $path)
Dernière édition par Havok le 26 Juin 2019 10:22, édité 1 fois.
Havok
 
Messages : 702
Inscription : 06 Fév 2015


Re: Librairie d'émulation eedomus pour developpeurs de scrip

Messagepar eedomusbox » 26 Juin 2019 15:40

Très bonne idée
Comment tu sais ce que font exactement ces fonctions?
eedomusbox
 
Messages : 887
Inscription : 12 Sep 2014
Localisation : 69

Re: Librairie d'émulation eedomus pour developpeurs de scrip

Messagepar Havok » 27 Juin 2019 08:13

Je sais ce qu'elles doivent faire (c'est dans la doc des scripts eedomus). Par contre je ne sais pas comment elles le font donc je recrée la fonction pour qu'elle fasse à priori ce qui est prévu.

L'avantage c'est aussi que la librairie peut servir dans d'autres projets classiques. Le httpQuery est par exemple bien utile pour ne pas avoir à jouer avec le curl, le jsonToXML, saveVariable etc...
Havok
 
Messages : 702
Inscription : 06 Fév 2015

Re: Librairie d'émulation eedomus pour developpeurs de scrip

Messagepar thrymartin » 08 Mai 2020 06:43

Hello,

Excellent, j'ai mis ton lien dans mes trucs et astuces, par contre si je puis me permettre, getArg n'est prévu que pour une seule variable, en rajoutant juste des conditionnels sur $var et en complétant avec le nom de la variable et sa valeur, on a les 1, 2 ou 3 GetArg...

Code : Tout sélectionner
// http://localhost/script/?exec=plugin.php&var1=[VAR1]&var2=[VAR2]&var1=[VAR3]

function getArg($var, $mandatory = true, $default = ' ') {
   
if ($var=="var1") {  $return = "valeur1";}
if ($var=="var2") {  $return = "valeur2";}
if ($var=="var3") {  $return = "valeur3";}
   
  if (isset($_GET[$var])) $return = $_GET[$var];
  return $return;
}
thrymartin
 
Messages : 920
Inscription : 03 Mars 2019
Localisation : La Réunion

Re: Librairie d'émulation eedomus pour developpeurs de scrip

Messagepar merguez07 » 08 Mai 2020 08:55

thrymartin a écrit:Excellent, j'ai mis ton lien dans mes trucs et astuces, par contre si je puis me permettre, getArg n'est prévu que pour une seule variable, en rajoutant juste des conditionnels sur $var et en complétant avec le nom de la variable et sa valeur, on a les 1, 2 ou 3 GetArg...


Salut thrymartin,
je n'ai pas compris ta remarque ni le but de ton code. En effet getArg peut être utilisé avec plusieurs variables. Il te suffit d'utiliser un séparateur entre chaque variable et d'utiliser un explode pour les séparer dans le code.
tuto 1 -->Programmation des scripts Eedomus
tuto 2 -->SmartDevice
tuto 3 -->Le déclenchement de règles
scripts -->Météo du jour | GH Thermostat | TotalWatt | Detecfire | smartbattery
Skype Eedomus -->lien vers le skype Eedomus
merguez07
 
Messages : 2346
Inscription : 15 Sep 2017
Localisation : Le Teil en Ardèche

Re: Librairie d'émulation eedomus pour developpeurs de scrip

Messagepar thrymartin » 08 Mai 2020 09:55

Hello merguez :

Il n'est pas question ici de savoir comment développer du code avec plusieurs variables
mais d'émuler GetArg quand on teste son code dans un bac à sable, genre http://sandbox.onlinephpfunctions.com/

8-)

et dans la librairie de fonctions d'émulation des instructions spécifiques Eedomus écrites par Havok, GetArg n'est émulé que pour UNE seule et unique variable, alors qu'on peut en avoir 4 différentes: les 3 VAR et la récupération de l'ID du périphérique appelant 'eedomus_controller_module_id'
=> si on a dans son code même que 2 GetArg un avec VAR1 et l'autre avec VAR2, ça va faire désordre si ça renvoi la même valeur :roll:

C'est quand même "hachement "pratique : on met de côté, pour un script particulier, les fonctions d'émulations avec les variables qui vont avec, puis quand on va dans le bac à sable, on colle ça d'abord, puis le script, sans en changer une virgule et hop...
et si on veut changer une variable pour voir ce que ça donne, on le fait en début de code, dans les fonctions d'émulation, sans avoir à fouiller dans le script pour le modifier...

valavala
thrymartin
 
Messages : 920
Inscription : 03 Mars 2019
Localisation : La Réunion

Re: Librairie d'émulation eedomus pour developpeurs de scrip

Messagepar merguez07 » 08 Mai 2020 19:14

Effectivement.
je me recouche :D
tuto 1 -->Programmation des scripts Eedomus
tuto 2 -->SmartDevice
tuto 3 -->Le déclenchement de règles
scripts -->Météo du jour | GH Thermostat | TotalWatt | Detecfire | smartbattery
Skype Eedomus -->lien vers le skype Eedomus
merguez07
 
Messages : 2346
Inscription : 15 Sep 2017
Localisation : Le Teil en Ardèche

Re: Librairie d'émulation eedomus pour developpeurs de scrip

Messagepar Havok » 08 Mai 2020 19:27

@thrymartin si effectivement la fonction eedomus fonctionne ainsi alors n’hesite pas à changer le code, il est disponible sur github et à le soumettre, je le validerai.
Havok
 
Messages : 702
Inscription : 06 Fév 2015

Re: Librairie d'émulation eedomus pour developpeurs de scrip

Messagepar thrymartin » 10 Mai 2020 19:06

Hello,
j'étais pourtant sur d'avoir appuyé sur submit, avec la vue en surligné des modifs
et tout a disparu

je viens de le refaire avec une note,
====
"GetArg pour 1 à 3 variables nommées + ID du périphérique appelant"
====
je viens de voir un autre bouton : "create pull request" ? bon, j'ai cliqué aussi

modifs :

avant la fonction actuelle

// avec une seule variable (définir $return)
.../...

et ajout de la nouvelle
// http://localhost/script/?exec=plugin.php&var1=[VAR1]&var2=[VAR2]&var1=[VAR3]
// code API du périphérique appelant
function getArg($var, $mandatory = true, $default = ' ') {
if ($var=="var1") { $return = "valeur1";}
if ($var=="var2") { $return = "valeur2";}
if ($var=="var3") { $return = "valeur3";}
if ($var=="eedomus_controller_module_id") { $return = 1234567;}
if (isset($_GET[$var])) $return = $_GET[$var];
return $return;
}
thrymartin
 
Messages : 920
Inscription : 03 Mars 2019
Localisation : La Réunion

Re: Librairie d'émulation eedomus pour developpeurs de scrip

Messagepar Havok » 11 Mai 2020 11:18

Salut,

Bon en fait je ne comprends pas trop.
La fonction getArg est l'équivalent php de $_GET[$var]
donc si tu veux récupérer les variables de
Code : Tout sélectionner
http://localhost/script/?exec=plugin.php&var1=[VAR1]&var2=[VAR2]&var3=[VAR3]


Tu fais
Code : Tout sélectionner
$var1 = getArg("var1");
$var2 = getArg("var2");
$var3 = getArg("var3");


getArg('eedomus_controller_module_id') n'est pas géré mais avec ta modification non plus.
Je ne comprends pas bien tes modifications à vrai dire :)
Havok
 
Messages : 702
Inscription : 06 Fév 2015

Re: Librairie d'émulation eedomus pour developpeurs de scrip

Messagepar thrymartin » 12 Mai 2020 04:58

JUSTEMENT !

si dans ton code, tu as
Code : Tout sélectionner
$var1 = getArg("var1");
$var2 = getArg("var2");
$var3 = getArg("var3");
// et même
$periph_ID = getArg("eedomus_controller_module_id");


comment tu fais avec la fonction initiale a un seul paramètre ?
disons que tu donnes en valeur de retour 'toto' ( $return = 'toto)';

toutes tes variables récupérées par GetArg vont avoir la valeur 'toto' !

ça va faire désordre, c'est pas comme ça qu'on va tester un code
c'est fait pour ceux qui n'ont besoin que d'un seul appel à GetArg, moi j'ai les 4 dans Mobile Alerts si tu veux aller vérifier.
quand a eedomus_controller_module_id c'est une variable comme une autre, quand on émule, on lui attribue un ID, c'est tout, la seule différence d'avec les autres, c'est que son nom est prédéfinie par le staf eedomus et pas par nous. (son utilisation est décrite dans l'aide Eedomus a l'entrée GetArg)

ma proposition permet de le faire, mais si ça te va pas, laisse tomber !
moi j'ai déjà mis ça dans trucs et astuces
avec d'ailleurs une adresse de bac a sable en ligne, bien plus pratique qu'un serveur php, genre EasyPHP qu'on devrait réserver aux codes faisant appel à SQL par exemple

en courrier tu as déjà eu un code directement a tester avec 4 variables

fin de transmission pour moi
thrymartin
 
Messages : 920
Inscription : 03 Mars 2019
Localisation : La Réunion

Re: Librairie d'émulation eedomus pour developpeurs de scrip

Messagepar Havok » 12 Mai 2020 10:32

Oula faut se calmer mon garçon....

Je suis désolé je ne comprends vraiment pas ton problème. Peut-être que je me trompe, si quelqu'un veut me l'expliquer de manière plus sympathique :D

Je recommence :

J'ai par exemple
Code : Tout sélectionner
http://localhost/script/?exec=plugin.php&tata=25&toto=50&titi=100


Si Tu appelles 3 fois la fonction getArg avec le bon argument :
Code : Tout sélectionner
$tata = getArg("tata");
$toto = getArg("toto");
$titi = getArg("titi");


Et bien tu te retrouve avec $tata=25, $toto=50 et $titi=100.
Donc tu récupère bien tes 3 variables. Je ne vois pas ou est le problème.

Moi je ne comprends pas ce code....
@merguez07 ou un autre si tu vous pouvez m'expliquer :D

Code : Tout sélectionner
// http://localhost/script/?exec=plugin.php&var1=[VAR1]&var2=[VAR2]&var1=[VAR3]
function getArg($var, $mandatory = true, $default = ' ') {
   if ($var=="var1")                     {  $return = "valeur1";}
   if ($var=="var2")                     {  $return = "valeur2";}
   if ($var=="var3")                     {  $return = "valeur3";}
   if ($var=="eedomus_controller_module_id")   {  $return = 1234567;}
if (isset($_GET[$var])) $return = $_GET[$var];
return $return;
}
Havok
 
Messages : 702
Inscription : 06 Fév 2015

Re: Librairie d'émulation eedomus pour developpeurs de scrip

Messagepar merguez07 » 12 Mai 2020 10:45

perso j'ai pas non plus vraiment compris la réponse de Thierry, ni pourquoi il semble s'emporter (ils ont le sang chaud à la réunion :D )
tuto 1 -->Programmation des scripts Eedomus
tuto 2 -->SmartDevice
tuto 3 -->Le déclenchement de règles
scripts -->Météo du jour | GH Thermostat | TotalWatt | Detecfire | smartbattery
Skype Eedomus -->lien vers le skype Eedomus
merguez07
 
Messages : 2346
Inscription : 15 Sep 2017
Localisation : Le Teil en Ardèche

Re: Librairie d'émulation eedomus pour developpeurs de scrip

Messagepar thrymartin » 12 Mai 2020 11:51

mais c'est pas possible, ils me relancent !

on parle d'émulation de GetArg , pas de code script ou d'utilisation de GetArg

on ne peut pas utiliser ta fonction d'émulation pour plus d'un appel GetArg dans un bac a sable comme ici :

http://sandbox.onlinephpfunctions.com/

on colle ta fonction, on y met la valeur voulue, par exemple toto
et je ne vois pas comment tu pourrais y mettre tata ou titi, c'est pas prévu
(du, pourquoi de la mienne)

on colle le script suivant a la suite

$tata = getArg("tata");
$toto = getArg("toto");
$titi = getArg("titi");

et on se retrouve comme bourvil et sa 2CV cassée avec toto partout !
thrymartin
 
Messages : 920
Inscription : 03 Mars 2019
Localisation : La Réunion

Re: Librairie d'émulation eedomus pour developpeurs de scrip

Messagepar merguez07 » 12 Mai 2020 12:56

En fait perso j'utilise parfois phptester pour tester des brins de code mais je n'ai jamais eu vraiment besoin d'une emulation complète car ma box est toujours à proximité.

Ce que j'ai du mal à comprendre dans ton explication thierry ( car le code je l'ai parfaitement compris) c'est en fait, pourquoi tu veux émuler le getArg . On est d'accord le GetArg sert à faire passer des informations entre la requête et le code PHP. Or, sauf erreur de ma part on ne peut faire de requête sur un bac à sable (c'est peut être là où je me trompe).

Donc si je dois emuler la transmission de ma requête &var1=1&var2=2&var3=3 je vais pas utiliser getArg mais mettre directement dans mon code php

$var1=1;
$var2=2;
$var3=3;

c'est là ou je bloque dans ton explication. Il est possible, que je sois, une nouvelle fois, complètement à la ramasse, mais STP Thierry, keep cool :D
tuto 1 -->Programmation des scripts Eedomus
tuto 2 -->SmartDevice
tuto 3 -->Le déclenchement de règles
scripts -->Météo du jour | GH Thermostat | TotalWatt | Detecfire | smartbattery
Skype Eedomus -->lien vers le skype Eedomus
merguez07
 
Messages : 2346
Inscription : 15 Sep 2017
Localisation : Le Teil en Ardèche

Re: Librairie d'émulation eedomus pour developpeurs de scrip

Messagepar Havok » 12 Mai 2020 13:15

Oui j'ai compris. Effectivement sur son bac à sable on ne peut pas passer de requête avec des arguments. Donc il rajoute, en dur, dans la fonction un renvoi des valeurs. Ainsi son code qui fait appel à getArg pourra être mis sur la eedomus sans changement.

A chaque nouveau programme il faut modifier le code de getArg pour renvoyer les bonnes valeurs. Ce qui n'est pas le principe d'une librairie que tu ajoutes à ton projet. Ca doit être transparent.

Bref cette librairie n'est absolument pas faite pour un bac à sable mais pour un serveur web tout à fait normal. Donc tu peux effectivement la modifier pour tes besoins propres mais je ne peux pas valider cette modification.
Havok
 
Messages : 702
Inscription : 06 Fév 2015

Re: Librairie d'émulation eedomus pour developpeurs de scrip

Messagepar thrymartin » 12 Mai 2020 13:18

mais si, ça peut ! a coller dans le bac à sable
http://sandbox.onlinephpfunctions.com/


Code : Tout sélectionner
<?php

// VAR 1, 2 et 3 renseignés comme suit dans la fenetre de config du périphérique
// VAR1 : 091254687
// VAR2 : 30
// VAR3 : en
// URL d'appel (et définition des variables)
// http://localhost/script/?exec=plugin.php&phoneid=[VAR1]&cacheduration=[VAR2]&langue=[VAR3]
// ID du périphérique appelant : 1234567

// fonction d'émulation Get Arg
function getArg($var, $mandatory = true, $default = ' ') {
   if ($var=="phoneid")                     {  $return = "091254687";}
   if ($var=="cacheduration")                     {  $return = 30;}
   if ($var=="langue")                     {  $return = "en";}
   if ($var=="eedomus_controller_module_id")   {  $return = 1234567;}
if (isset($_GET[$var])) $return = $_GET[$var];
return $return;
}


// partie du script appelant les variables VAR1 à 3 et l'ID du périphérique
$PhoneID = GetArg('phoneid');
$Cache_Duration = GetArg('cacheduration');
$Langue = GetArg('langue');
$periph_id = getArg('eedomus_controller_module_id');

// affichage des variables pour test

echo "Phone ID : " . $PhoneID;
echo "\n";
echo "Cache_Duration : " . $Cache_Duration;
echo "\n";
echo "Langue : " . $Langue;
echo "\n";
echo "ID de l'appelant : " . $periph_id;
echo "\n";

?>


quand au serveur web, c'est trop galère, tout comme les easyphp, apache et tout ça: a réserver pour du très gros code, voir même uniquement des configurations de progiciels, comme phpbb ou wordpress, mais pas pour un script eedomus: moi je voulais juste pouvoir tester tel quel, sans passer par la galère du test de script via eedomus qui ne donnera qu'un résultat final sans possibilité de mettre des drapeaux et autres exit dans le code pour deboguer.

donc je reprend certains de tes trucs, qui sont une bonne base, pour me refaire les miens a moi destinés aux bacs à sable et que je vais indiquer dans mes "trucs et astuces" qui sont surtout destinés aux débutants et à ceux qui recherchent comment faire un truc particulier quand une fonction n'existe pas (genre récupérer le nom court d'un périphérique).
Dernière édition par thrymartin le 12 Mai 2020 15:12, édité 1 fois.
thrymartin
 
Messages : 920
Inscription : 03 Mars 2019
Localisation : La Réunion

Re: Librairie d'émulation eedomus pour developpeurs de scrip

Messagepar thrymartin » 12 Mai 2020 13:30

réponse à merguez : parce que mon code était long, (surtout avant que je le raccourcisse pour transvaser les options dans le json) et va le redevenir avec ce que je veux lui faire ingurgiter, et que donc c'est franchement galère d'aller changer une (des) variable(s) en plein milieu du code, ou de tout recommencer à chaque fois
on a les 2 extrèmes la : havok et son serveur web et toi (ou moi avant que je trouve ça trop galère) qui remplace les instructions spécifiques directement dans le code.
bon, disons, que je fais entre les deux.

bref, une fois pour toute, en début de code, on met les fonctions qui vont bien, moi j'ai surtout besoin du GetArg justement, donc je met dedans les variables concernées et leurs valeurs et pour l'URL de recup de l'HTML, je mets tout le code HTML dans une variable
je mets un grand
// ====================================================

ensuite je travaille sur le code et quand je veux le tester, je n'ai qu'a le coller entièrement sous ce grand trait, sans en changer une ligne et zou

si je veux changer une valeur, je le fais directement en début de code, dans les fonctions d'émulation, sans chercher partout

valavala

et scusez mes débordements, mais a chaque fois j'avais l'impression d'un dialogue de sourd ou on me répondait a côté : je ne parlais QUE de l'émulation et on me répondait codage de script

bon, jvais prendre l'air 8-)
thrymartin
 
Messages : 920
Inscription : 03 Mars 2019
Localisation : La Réunion


Retour vers Scripts & Périphériques du store

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 13 invité(s)