[Framework SC] les scenarios en php
[Framework SC] les scenarios en php
Salut,
Alors je trouve les scénarios de jeedom très bien foutus, avec les blocs, mais jeedom étant super ouvert ça donne toujours envie d'en faire plus.
Je me suis retrouvé parfois à faire des conditions à rallonge, avec des blocs dans des blocs...
Et là j'ai commencé a regarder le code source de jeedom pour pouvoir faire mes scénarios en php.
Puis du coup je me suis dit autant faire une classe que ce soit plus propre dans les balises codes.
Puis là je me dis peut être que ça peut intéresser du monde, pour ceux qui connaissent un peu la programmation.
Voilà donc l'idée, un petit framework pour manier tous les objets et fonctions propre à jeedom facilement dans des blocs codes.
Voici les avantages que je trouve à cette technique :
- Permet d'avoir toute la puissance du langage php
- Permet de facilement réadapter des script en LUA
- Permet de créer des opération rapides en une ligne qui prendrait 20 blocs en mode visuel
- Peut se découper en autant de blocs code que l'on veut (pratique pour déboguer, permet de désactiver un bloc...)
- reste compatible à 100% avec les blocs visuel (d’où l'autre avantage de splitter les blocs de code : pouvoir insérer des blocs classiques entre les blocs de code)
- Log détaillé
- Utilise une architecture avec des librairies, infini ou presque en évolutions et en possibilités
- Encore plus geek
Pour consulter la documentation et la procédure d'installation, ça se passe ici :
http://rulistaff.free.fr/sc
La doc est assez complète et comporte des exemples complet ainsi qu'un exemple d'utilisation pour chaque fonction.
Voilou
Alors je trouve les scénarios de jeedom très bien foutus, avec les blocs, mais jeedom étant super ouvert ça donne toujours envie d'en faire plus.
Je me suis retrouvé parfois à faire des conditions à rallonge, avec des blocs dans des blocs...
Et là j'ai commencé a regarder le code source de jeedom pour pouvoir faire mes scénarios en php.
Puis du coup je me suis dit autant faire une classe que ce soit plus propre dans les balises codes.
Puis là je me dis peut être que ça peut intéresser du monde, pour ceux qui connaissent un peu la programmation.
Voilà donc l'idée, un petit framework pour manier tous les objets et fonctions propre à jeedom facilement dans des blocs codes.
Voici les avantages que je trouve à cette technique :
- Permet d'avoir toute la puissance du langage php
- Permet de facilement réadapter des script en LUA
- Permet de créer des opération rapides en une ligne qui prendrait 20 blocs en mode visuel
- Peut se découper en autant de blocs code que l'on veut (pratique pour déboguer, permet de désactiver un bloc...)
- reste compatible à 100% avec les blocs visuel (d’où l'autre avantage de splitter les blocs de code : pouvoir insérer des blocs classiques entre les blocs de code)
- Log détaillé
- Utilise une architecture avec des librairies, infini ou presque en évolutions et en possibilités
- Encore plus geek
Pour consulter la documentation et la procédure d'installation, ça se passe ici :
http://rulistaff.free.fr/sc
La doc est assez complète et comporte des exemples complet ainsi qu'un exemple d'utilisation pour chaque fonction.
Voilou
Dernière édition par dJuL le 28 avr. 2016, 00:36, édité 2 fois.
Dernière version de JPI
Un bouton donation se trouve dans la fenêtre DIVERS / A propos de l'interface web si vous souhaitez soutenir le projet.
Un bouton donation se trouve dans la fenêtre DIVERS / A propos de l'interface web si vous souhaitez soutenir le projet.
Re: dev en cours: les scenarios en php
Même si pour l'instant je n'ai pas encore trop utilisé les blocs code, je trouve ton idée très intéressante
Et du coup je marque ta page
From Tapatruc...
Et du coup je marque ta page
From Tapatruc...
Re: dev en cours: les scenarios en php
Merci
De toutes façons d'origine on ne peut pas magner les équipements super facilement dans un bloc code, et encore moins récupérer leurs valeurs facilement, surtout avec les conversion en #id# dans la bdd quand le nom est en dur... Ce genre de pbs.
A la base le bloc code n'est pas fait pour ça, voila pourquoi j'ai commencé à faire une classe qui permet de faire du scenario dans les blocs codes aussi (à condition de connaitre un peu le php)
De toutes façons d'origine on ne peut pas magner les équipements super facilement dans un bloc code, et encore moins récupérer leurs valeurs facilement, surtout avec les conversion en #id# dans la bdd quand le nom est en dur... Ce genre de pbs.
A la base le bloc code n'est pas fait pour ça, voila pourquoi j'ai commencé à faire une classe qui permet de faire du scenario dans les blocs codes aussi (à condition de connaitre un peu le php)
Dernière version de JPI
Un bouton donation se trouve dans la fenêtre DIVERS / A propos de l'interface web si vous souhaitez soutenir le projet.
Un bouton donation se trouve dans la fenêtre DIVERS / A propos de l'interface web si vous souhaitez soutenir le projet.
Re: dev en cours: les scenarios en php
Pareil, j'aime le principe, même si j'ai peu d'espoir que beaucoup l'utilise vu que les users sont plutot du genre à demander de la bouillie prédigérée que de la haute gastronomie.
Mais dans le lot il doit bien y avoir quelques fines bouches que ca ravira. En tout cas faciliter et donner des raisons d'utiliser le bloc code c'est une bonne chose
Mais dans le lot il doit bien y avoir quelques fines bouches que ca ravira. En tout cas faciliter et donner des raisons d'utiliser le bloc code c'est une bonne chose
Mon Blog | Xiaomi Home
Pour contribuer au développement des plugins (don ou achat de matériel) : Paypal
Aides nous à t'aider : les logs, détails du soucis, la doc, recherche sur le forum ...
PS : pas de support par MP, je ne répondrais pas
Pour contribuer au développement des plugins (don ou achat de matériel) : Paypal
Aides nous à t'aider : les logs, détails du soucis, la doc, recherche sur le forum ...
PS : pas de support par MP, je ne répondrais pas
Re: dev en cours: les scenarios en php
Je trouve l'idée très intéressante (en particulier pour moi qui écrit un peu de php dans mes scénarios)
J'ai cependant qques questions:
- quid de la pérennité de la solution: dépend -t-elle fortement de la version de jeedom, et nécessite elle à ton avis des mises à jour systématiques
- peut-on envisager de partager des variables entre le code php et l'interface gui (autre qu'avec des variables globales) ?
- si on utilise des nom d'équipements (jeedom) dans le code php , je suppose que cela ne sera pas mise à jour si on change le nom de l'équipement (ce qui se fait dans l'interface gui)
J'ai cependant qques questions:
- quid de la pérennité de la solution: dépend -t-elle fortement de la version de jeedom, et nécessite elle à ton avis des mises à jour systématiques
- peut-on envisager de partager des variables entre le code php et l'interface gui (autre qu'avec des variables globales) ?
- si on utilise des nom d'équipements (jeedom) dans le code php , je suppose que cela ne sera pas mise à jour si on change le nom de l'équipement (ce qui se fait dans l'interface gui)
Système DIY 2 PI3 avec SSD (voir mon profil pour le détail)
- domoggvad
- Actif
- Messages : 1880
- Inscription : 29 avr. 2015, 16:02
- Localisation : Seine-Saint-Denis (Villepinte)
Re: dev en cours: les scenarios en php
Bonjour @dJuL
Merci pour ce partage, même moi qui commence mes cours de PHP pour les nuls, je trouve l'idée très enrichissante, et ça démystifie un peu la programmation, surtout à mon petit niveau.
Merci pour ce partage, même moi qui commence mes cours de PHP pour les nuls, je trouve l'idée très enrichissante, et ça démystifie un peu la programmation, surtout à mon petit niveau.
3 Odroid C2 (Prod - secours - test) Z83 tests: rfxcom + Z-wave- Clims DAIKIN - espeasy - thekey - Xiaomi - Telinfo - broadlink... widget V3 :viewtopic.php?f=29&t=44183&p=717810#p717810
Re: dev en cours: les scenarios en php
Je ne pense pas car elle utilise vraiment des fonctions de bases du core de jeedom, qui n'ont pas de raison d'être modifiées régulièrement.- quid de la pérennité de la solution: dépend -t-elle fortement de la version de jeedom, et nécessite elle à ton avis des mises à jour systématiques
(sinon plus rien ne marcherait, les plugins...)
Pour l'instant non, il faut passer par une variable jeedom (par contre d'un bloc code à l'autre pas besoin, c'est une option de sauvegarder la variable en jeedom ou pas)- peut-on envisager de partager des variables entre le code php et l'interface gui (autre qu'avec des variables globales) ?
Mais à l'avenir si la classe est incluse dans Jeedom, ce ne sera pas une obligation, il suffit d'ajouter 2 lignes de codes dans la classe scenarioExpression de Jeedom pour ça.
edit: Ah oui par contre il y a une fonction pour effacer une variable (jeedom ou interne) ce qui permet de cleaner la table des variables jeedom en fin de scenario par exemple
Oui et non- si on utilise des nom d'équipements (jeedom) dans le code php , je suppose que cela ne sera pas mise à jour si on change le nom de l'équipement (ce qui se fait dans l'interface gui)
Si l’équipement est marqué en dur (string intégral contenant le nom), genre $toto = "#[equipement]#"; aucun soucis, on peut le renommer et ça suivra sans soucis.
Les blocs codes sont sauvegardés comme les autres blocs, et tous les noms trouvés #equipements# sont transformés en #id# dans la bdd, ce qui permet le renommage sans tout péter.
Par contre si son nom est construit dynamiquement, genre $toto_sub = "equipement"; puis $toto = "#[" . $toto_sub . "]#";
Là si on renomme ça ne marchera plus, forcément...
Dernière édition par dJuL le 12 avr. 2016, 11:19, édité 2 fois.
Dernière version de JPI
Un bouton donation se trouve dans la fenêtre DIVERS / A propos de l'interface web si vous souhaitez soutenir le projet.
Un bouton donation se trouve dans la fenêtre DIVERS / A propos de l'interface web si vous souhaitez soutenir le projet.
Re: dev en cours: les scenarios en php
Salut, je n'ai pas encore d'idée d'utilisation pour l'instant, mais l'outil créé le besoin :p
Super boulot en tout cas, je suis scié, c'est hyper intéressant et clair !
Super boulot en tout cas, je suis scié, c'est hyper intéressant et clair !
Re: dev en cours: les scenarios en php
merci de ta réponse @dJul
j'ai hâte de pouvoir tester !!
j'ai hâte de pouvoir tester !!
Système DIY 2 PI3 avec SSD (voir mon profil pour le détail)
Re: dev en cours: les scenarios en php
Je suis preneur pour donner encore plus de puissance aux scénario, moi qui fait assez bien de bloc code. On en a jamais assez, même si Jeedom est très puissant et flexible.
Maintenant, ce qu'il serait bien, c'est une mise à jour simplifié comme un plugin. C'est juste une question de facilité pour ne pas perdre du temps inutilement.
Maintenant, ce qu'il serait bien, c'est une mise à jour simplifié comme un plugin. C'est juste une question de facilité pour ne pas perdre du temps inutilement.
DIY ODROID C2 Jeedom PROD - v3.1.7.
DIY RPi2 Jeedom TEST - v3.1.7.
[TUTO] Scénario Lever/Coucher Soleil v2 + Virtuel sans dépendances
Debian Chroot - Installation Auto Jeedom v2.x.x
DIY RPi2 Jeedom TEST - v3.1.7.
[TUTO] Scénario Lever/Coucher Soleil v2 + Virtuel sans dépendances
Debian Chroot - Installation Auto Jeedom v2.x.x
- Theduck38
- Helper
- Messages : 2714
- Inscription : 22 févr. 2015, 17:32
- Localisation : Près de Grenoble
- Contact :
Re: dev en cours: les scenarios en php
Ah ouuiiiii !!!
+++
(ça me plaît beaucoup)
+++
(ça me plaît beaucoup)
-- TD38 --
Helper Officiel Jeedom
Zimeteo sur Jeedom : http://www.meteo.lecoin.info
Jeedom Stable sur serveur custom
Le risque électrique - Afficheur leds RGB - Tablette Murale - Thermostat connecté
Helper Officiel Jeedom
Zimeteo sur Jeedom : http://www.meteo.lecoin.info
Jeedom Stable sur serveur custom
Le risque électrique - Afficheur leds RGB - Tablette Murale - Thermostat connecté
Re: dev en cours: les scenarios en php
Si du monde est intéressé, et que ça se passe comme pour le thème, et que Loic est ok, ce sera très simple, la maj sera faite directement en même temps que Jeedom, et je mettrait a dispo en plus un script sur le market (comme pour le thème) pour forcer la maj en un click pour ceux qui ne veulent pas attendre la maj jeedom pour avoir la dernière release.PuNiSHeR a écrit : Maintenant, ce qu'il serait bien, c'est une mise à jour simplifié comme un plugin. C'est juste une question de facilité pour ne pas perdre du temps inutilement.
Dernière version de JPI
Un bouton donation se trouve dans la fenêtre DIVERS / A propos de l'interface web si vous souhaitez soutenir le projet.
Un bouton donation se trouve dans la fenêtre DIVERS / A propos de l'interface web si vous souhaitez soutenir le projet.
Re: dev en cours: les scenarios en php
Impec. Y a plus qu'a, comme dirait l'autre.
DIY ODROID C2 Jeedom PROD - v3.1.7.
DIY RPi2 Jeedom TEST - v3.1.7.
[TUTO] Scénario Lever/Coucher Soleil v2 + Virtuel sans dépendances
Debian Chroot - Installation Auto Jeedom v2.x.x
DIY RPi2 Jeedom TEST - v3.1.7.
[TUTO] Scénario Lever/Coucher Soleil v2 + Virtuel sans dépendances
Debian Chroot - Installation Auto Jeedom v2.x.x
Re: dev en cours: les scenarios en php
Moi j'y connais pas grand chose au scénario car je débute et j'ai très peu de matos mais si c'est comme pour le thème dark je prend c'est au top
- domoggvad
- Actif
- Messages : 1880
- Inscription : 29 avr. 2015, 16:02
- Localisation : Seine-Saint-Denis (Villepinte)
Re: dev en cours: les scenarios en php
Difficile de dire non, cela permet de mieux comprendre le rouage..
3 Odroid C2 (Prod - secours - test) Z83 tests: rfxcom + Z-wave- Clims DAIKIN - espeasy - thekey - Xiaomi - Telinfo - broadlink... widget V3 :viewtopic.php?f=29&t=44183&p=717810#p717810
Re: dev en cours: les scenarios en php
J'avoue que je ne comprends pas très bien le concept.
On peut déjà récupérer des valeurs de Jeedom par :
Et on peut aussi facilement positionner des valeurs dans Jeedom:
Ca permet d'interagir dans les 2 sens.
On peut déjà récupérer des valeurs de Jeedom par :
Code : Tout sélectionner
$cmd = cmd::byString('#[Appart][Elec][Test]#');
$test = $cmd->execCmd();
Code : Tout sélectionner
$cmdC = "#[Appart][Elec][Test]#";
$cmd = cmd::byString($cmdC);
$cmd->event(("100"));
Re: dev en cours: les scenarios en php
Le but est de simplifier les manips au maximum, tout en ayant un log efficace, qui affiche les noms d'équipement et pas les id, et de rajouter des fonctions qui raccourcissent et simplifie le code.
Celui qui maitrise déjà tout n'en aura pas besoin...
Et encore que perso je préfère passer par la classe c'est bien plus lisible et bien plus court.
A la base je l'ai faite pour moi.
Le but est de faire un mini "framework" pour simplifier l'utilisation pour les non expert des fonctions jeedom, et d'avoir accès à toutes les fonctions des scenarios de jeedom (et plus) avec la même syntaxe ou presque.
Au début je recopiais des fonctions dans chaque scénario, au bout d'un moment je me suis dis que ce serait mieux de faire une classe incluse en une ligne, plutôt que de modifier mes fonctions dans chaque scénario, ingérable pour avoir la même version partout.
Par exemple la fonction qui retourne les valeurs :
Voila le concept...
Celui qui maitrise déjà tout n'en aura pas besoin...
Et encore que perso je préfère passer par la classe c'est bien plus lisible et bien plus court.
A la base je l'ai faite pour moi.
Le but est de faire un mini "framework" pour simplifier l'utilisation pour les non expert des fonctions jeedom, et d'avoir accès à toutes les fonctions des scenarios de jeedom (et plus) avec la même syntaxe ou presque.
Au début je recopiais des fonctions dans chaque scénario, au bout d'un moment je me suis dis que ce serait mieux de faire une classe incluse en une ligne, plutôt que de modifier mes fonctions dans chaque scénario, ingérable pour avoir la même version partout.
Par exemple la fonction qui retourne les valeurs :
Code : Tout sélectionner
public static function val($cmd, $log = true, $logStyle = null) {
$cmd = self::_tag($cmd, $log);
if (!$cmd) {
return null;
}
$cmd_obj = self::_cmdbyString($cmd);
$value = ($cmd_obj) ? $cmd_obj->execCmd() : null;
if ($log && $value !== null) {
$cmd = (self::_isId($cmd)) ? self::_tag($cmd_obj->getHumanName()) : $cmd;
self::_log("Récupération valeur", self::_format($cmd) . " = " . self::_format($value), $log, $logStyle);
}
else if ($value === null) {
self::error("Impossible de lire la valeur de " . self::_format($cmd), $log);
}
return $value;
}
Dernière édition par dJuL le 14 avr. 2016, 03:42, édité 2 fois.
Dernière version de JPI
Un bouton donation se trouve dans la fenêtre DIVERS / A propos de l'interface web si vous souhaitez soutenir le projet.
Un bouton donation se trouve dans la fenêtre DIVERS / A propos de l'interface web si vous souhaitez soutenir le projet.
Re: dev en cours: les scenarios en php
Super intéressé. Je MarkTaPage
J'étais justement en train de m'initier
J'étais justement en train de m'initier
Code : Tout sélectionner
$Msg = array();
$TotalMsg = 0;
#récupération des messages
$Msg[0] = $scenario->getData('Msg_Pompe');
$Msg[1] = $scenario->getData('Msg_Portail');
$Msg[2] = $scenario->getData('Msg_Garage');
$Msg[3] = $scenario->getData('Msg_Poubelles');
$Msg[4] = $scenario->getData('Msg_Congel');
$Msg[5] = $scenario->getData('Msg_MaL');
$Msg[6] = $scenario->getData('Msg_Déshumidificateur');
for($i=0;$i<7;$i++) {
if($Msg[$i]>0 and $Msg[$i]<200) {
$TotalMsg = $TotalMsg + 1;
}
}
#renvoyer le tout dans les variables du scénario
$scenario->setData('Msg_Present', $TotalMsg);
Gestion d'ouverture / fermeture Portail et garage
Gestion filtration piscine
Divers éclairages
Et tout plein d'autres choses ...
JEEDOM NUC 3.3.33 ULTIMATE
Mon matériel ici
Gestion filtration piscine
Divers éclairages
Et tout plein d'autres choses ...
JEEDOM NUC 3.3.33 ULTIMATE
Mon matériel ici
Re: dev en cours: les scenarios en php
dJuL passe une vitesse là !
Cette fois c'est un outil mais malheureusement je n'ai pas le cerveau qui va avec lol
J'ai beau essayer de comprendre vos lignes et de m'aider de google... en vain.
Je vais quand même suivre ce sujet, sait-on jamais
Cette fois c'est un outil mais malheureusement je n'ai pas le cerveau qui va avec lol
J'ai beau essayer de comprendre vos lignes et de m'aider de google... en vain.
Je vais quand même suivre ce sujet, sait-on jamais
UdooX86 - Odroid C2 - RPI3 - RPI2 - DS415+
Z-Stick (GEN5) - RFXcom RFlink - Xiaomi home
Z-Stick (GEN5) - RFXcom RFlink - Xiaomi home
Re: dev en cours: les scenarios en php
@Claude69
Voici une version un peu plus légère de ton code qui fait la même chose:
J'ai pas testé, j'ai écrit à l'arrache ici y'a pt'etre un parse error...
Voici une version un peu plus légère de ton code qui fait la même chose:
Code : Tout sélectionner
$Msg = array('Msg_Pompe', 'Msg_Portail', Msg.... etc);
$TotalMsg = 0;
for ($i=0; $i<count($Msg); $i++) {
$val = $scenario->getData($Msg[$i]);
$TotalMsg+= ($val > 0 && $val < 200) ? 1 : 0;
}
Dernière version de JPI
Un bouton donation se trouve dans la fenêtre DIVERS / A propos de l'interface web si vous souhaitez soutenir le projet.
Un bouton donation se trouve dans la fenêtre DIVERS / A propos de l'interface web si vous souhaitez soutenir le projet.
Qui est en ligne ?
Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 14 invités