Avant toute chose merci de (re)prendre connaissance de la charte et de la respecter.
Pour résumer :
- Avant de poser une question, je cherche si la réponse existe
- Je suis poli, courtois et je respecte tout un chacun sur le forum
- Si un post m'agace : je m'en éloigne plutôt que de répondre d'une façon qui pourrait être mal interprétée


Il n'est jamais du luxe que de rappeler des choses simples :
Courtoisie, amabilité, politesse et bonne humeur sont les maîtres mots pour un forum sympathique, bienveillant et accueillant :)

Le groupe des Helpers est present pour vous aidez, n'hésitez pas à poser des questions ;)

Toute la communauté vous remercie

[Framework SC] les scenarios en php

Cette partie est dédiée à la programmation sur le logiciel JEEDOM
Avatar de l’utilisateur
dJuL
Actif
Messages : 1425
Inscription : 28 janv. 2016, 01:37
Localisation : Ile de France

[Framework SC] les scenarios en php

Message par dJuL » 12 avr. 2016, 10:00

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 :D

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.

Avatar de l’utilisateur
Sshafi
Actif
Messages : 3891
Inscription : 01 juil. 2014, 16:08
Localisation : Albi

Re: dev en cours: les scenarios en php

Message par Sshafi » 12 avr. 2016, 10:12

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...
??? Menfin ...
VM ESXi # Aeon Lab Gen5 | RFXtrx433E | ...
Trucs & Astuces

Avatar de l’utilisateur
dJuL
Actif
Messages : 1425
Inscription : 28 janv. 2016, 01:37
Localisation : Ile de France

Re: dev en cours: les scenarios en php

Message par dJuL » 12 avr. 2016, 10:24

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)
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.

Avatar de l’utilisateur
lunarok
Actif
Messages : 6592
Inscription : 08 août 2014, 12:48
Localisation : Anjou

Re: dev en cours: les scenarios en php

Message par lunarok » 12 avr. 2016, 10:26

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
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

Avatar de l’utilisateur
mbuffat69
Timide
Messages : 389
Inscription : 02 févr. 2016, 21:25
Localisation : Lyon

Re: dev en cours: les scenarios en php

Message par mbuffat69 » 12 avr. 2016, 10:44

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)
Système DIY 2 PI3 avec SSD (voir mon profil pour le détail)

Avatar de l’utilisateur
domoggvad
Actif
Messages : 1865
Inscription : 29 avr. 2015, 16:02
Localisation : Seine-Saint-Denis (Villepinte)

Re: dev en cours: les scenarios en php

Message par domoggvad » 12 avr. 2016, 10:55

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.
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

Avatar de l’utilisateur
dJuL
Actif
Messages : 1425
Inscription : 28 janv. 2016, 01:37
Localisation : Ile de France

Re: dev en cours: les scenarios en php

Message par dJuL » 12 avr. 2016, 11:08

- 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
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.
(sinon plus rien ne marcherait, les plugins...)
- peut-on envisager de partager des variables entre le code php et l'interface gui (autre qu'avec des variables globales) ?
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)
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
- 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)
Oui et non
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.

romanais
Actif
Messages : 1989
Inscription : 21 août 2014, 21:36
Localisation : Drôme

Re: dev en cours: les scenarios en php

Message par romanais » 12 avr. 2016, 11:12

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 !
Merci à toute l'équipe pour le taf

Mon matériel

Avatar de l’utilisateur
mbuffat69
Timide
Messages : 389
Inscription : 02 févr. 2016, 21:25
Localisation : Lyon

Re: dev en cours: les scenarios en php

Message par mbuffat69 » 12 avr. 2016, 11:20

merci de ta réponse @dJul
j'ai hâte de pouvoir tester !!
Système DIY 2 PI3 avec SSD (voir mon profil pour le détail)

Avatar de l’utilisateur
PuNiSHeR
Actif
Messages : 1663
Inscription : 05 sept. 2015, 15:38
Localisation : Belgique
Contact :

Re: dev en cours: les scenarios en php

Message par PuNiSHeR » 12 avr. 2016, 11:32

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.

Avatar de l’utilisateur
Theduck38
Helper
Messages : 2659
Inscription : 22 févr. 2015, 17:32
Localisation : Près de Grenoble
Contact :

Re: dev en cours: les scenarios en php

Message par Theduck38 » 12 avr. 2016, 11:43

Ah ouuiiiii !!!

+++

(ça me plaît beaucoup) :D
-- 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é

Avatar de l’utilisateur
dJuL
Actif
Messages : 1425
Inscription : 28 janv. 2016, 01:37
Localisation : Ile de France

Re: dev en cours: les scenarios en php

Message par dJuL » 12 avr. 2016, 11:56

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.
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.
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.

Avatar de l’utilisateur
PuNiSHeR
Actif
Messages : 1663
Inscription : 05 sept. 2015, 15:38
Localisation : Belgique
Contact :

Re: dev en cours: les scenarios en php

Message par PuNiSHeR » 12 avr. 2016, 11:58

Impec. Y a plus qu'a, comme dirait l'autre. ;)

Avatar de l’utilisateur
marmoul
Actif
Messages : 890
Inscription : 01 sept. 2015, 15:50
Localisation : Haute-Saône (70)

Re: dev en cours: les scenarios en php

Message par marmoul » 12 avr. 2016, 13:05

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 :)

Avatar de l’utilisateur
domoggvad
Actif
Messages : 1865
Inscription : 29 avr. 2015, 16:02
Localisation : Seine-Saint-Denis (Villepinte)

Re: dev en cours: les scenarios en php

Message par domoggvad » 12 avr. 2016, 13:21

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

specimen
Timide
Messages : 213
Inscription : 07 nov. 2014, 18:11
Localisation : Montpellier

Re: dev en cours: les scenarios en php

Message par specimen » 12 avr. 2016, 16:43

J'avoue que je ne comprends pas très bien le concept.
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();
Et on peut aussi facilement positionner des valeurs dans Jeedom:

Code : Tout sélectionner

$cmdC = "#[Appart][Elec][Test]#";
$cmd = cmd::byString($cmdC);
$cmd->event(("100"));
Ca permet d'interagir dans les 2 sens.

Avatar de l’utilisateur
dJuL
Actif
Messages : 1425
Inscription : 28 janv. 2016, 01:37
Localisation : Ile de France

Re: dev en cours: les scenarios en php

Message par dJuL » 12 avr. 2016, 17:00

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 :

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;
  }
Voila le concept...
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.

Avatar de l’utilisateur
Claude69
Actif
Messages : 2074
Inscription : 04 avr. 2015, 07:57
Localisation : Nord de Lyon

Re: dev en cours: les scenarios en php

Message par Claude69 » 12 avr. 2016, 17:34

Super intéressé. Je MarkTaPage :D
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.31 ULTIMATE

Mon matériel ici

Morlock
Timide
Messages : 452
Inscription : 24 juin 2014, 21:17
Localisation : Belgique

Re: dev en cours: les scenarios en php

Message par Morlock » 12 avr. 2016, 18:03

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 :D
UdooX86 - Odroid C2 - RPI3 - RPI2 - DS415+
Z-Stick (GEN5) - RFXcom RFlink - Xiaomi home

Avatar de l’utilisateur
dJuL
Actif
Messages : 1425
Inscription : 28 janv. 2016, 01:37
Localisation : Ile de France

Re: dev en cours: les scenarios en php

Message par dJuL » 12 avr. 2016, 18:06

@Claude69

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;
}
J'ai pas testé, j'ai écrit à l'arrache ici y'a pt'etre un parse error...
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.

Répondre

Revenir vers « Développements sur Jeedom »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 0 invité