Jeedom ?
- Forhorse
- Auteur du sujet
- Hors Ligne
- Membre senior
- Messages : 40
- Remerciements reçus 3
Je fais un discret retour ici, bien heureux que le site existe encore (parce que ces derniers temps à cette adresse je tombais sur un site chinois...) Mon Maxisun tourne encore parfaitement, j\'ai juste eu un petit soucis au printemps avec une carte SD qui contenait trop de fichiers (elle était pas pleine mais il y avait trop de fichiers pour que le Maxisun en donne la liste) et une sonde de température ballon hs, mais rien de grave.
Là je suis en train de jouer un peu avec Jeedom, une petite envie de faire un peu de domotique à la maison, sans doute un projet qui restera sur un coin du bureau sans aboutir mais on sait jamais. Je me disais que ça serait sympa d\'avoir les valeurs du Maxisun qui remontent dans Jeedom et que sans doute je trouverais ici quelqu\'un qui l\'a déjà fait, mais visiblement non ?
Connexion ou Créer un compte pour participer à la conversation.
- patrick
- Hors Ligne
- Administrateur
- Messages : 3085
- Remerciements reçus 475
Je ne pourrais pas t'aider sur ce sujet parce que je n'ai pas réussi à installer Jeedom sur mon PC, et donc pas moyen de faire des tests. Normalement ça devrait fonctionner si tu remplis les champs nécessaires dans le cadre Réseau/client de MSApp:
Tu as un bouton "Test envoi requête" pour envoyer directement de MSApp vers Jeedom, sans passer par le MS.
Connexion ou Créer un compte pour participer à la conversation.
- Forhorse
- Auteur du sujet
- Hors Ligne
- Membre senior
- Messages : 40
- Remerciements reçus 3
Etrange que tu n'ais pas réussit à installer Jeedom, moi qui suis pourtant totalement nul avec Linux j'ai réussit en suivant les différents tutos que l'on trouve sur le net. Par contre j'ai remarqué que Jeedom est du genre très exclusif... il ne faut pas qu'une autre application utilisant apache2/mysql tourne sur le même pc sinon c'est mort (ou alors il faut être un pro de linux)
J'ai essayé de faire cohabiter jeedom et zoneminder sur la même machine mais tout ce que j'ai obtenu c'est que ni l'un ni l'autre ne fonctionne... c'est bien au dela de mes compétences.
Donc pour essayer jeedom il faut soit une install vierge, soit le faire sur une machine virtuelle dédiée, en tout cas quand on est null comme moi c'est la seule solution que je vois.
Si j'arrive un jour à faire remonter les infos du Maxisun dans Jeedom je ferrais un retour ici, a moins que quelqu'un d'autre le fasse avant moi.
Connexion ou Créer un compte pour participer à la conversation.
- Forhorse
- Auteur du sujet
- Hors Ligne
- Membre senior
- Messages : 40
- Remerciements reçus 3
Personne ne s'est penché sur le problème depuis mon dernier message ?
Connexion ou Créer un compte pour participer à la conversation.
- Forhorse
- Auteur du sujet
- Hors Ligne
- Membre senior
- Messages : 40
- Remerciements reçus 3
En fait, en jouant avec la console de firefox j'ai remarqué que l'interface web du Maxisun allait régulièrement récupérer le fichier "status.xml" et que ce fichier contient toutes les valeurs que je voudrais faire remonter vers Jeedom.
Malheureusement comme ce n'est pas du "vrai" XML mais un mix entre XML et CSV les outils disponibles dans Jeedom ne me permettent de retrouver que la première valeur de chaque balise.
Je vais sans doute devoir développer un script PHP pour les valeurs suivantes, mais comme j'ai une petite allergie au PHP ça risque de me prendre du temps.
Connexion ou Créer un compte pour participer à la conversation.
- patrick
- Hors Ligne
- Administrateur
- Messages : 3085
- Remerciements reçus 475
Le fichier status.xml ressemble à ça:
<?xml version="1.0" encoding="ISO-8859-1"?><xml>
<rtcc>10:51:19 ME</rtcc>
<paramSys>10:51:19;06/01/2021;On;01:00;-1,0;MSunPV161;5.0.1;0000161;5.1.0;</paramSys>
<inAns>17,6;27,6;22,7;0,0;0,0;0,0;0,0;0,0;16008;59576;4002;1097,7;25,3;17,8;43,6;1014;</inAns>
<survMm>0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;</survMm>
<cmdPos>2;1;0;0;0;0;0;0;</cmdPos>
<outStat>87;13;87;13;0;0;0;0;0;0;0;0;0;0;0;0;</outStat>
<cptVals>0;0;0;0;0;0;0;54dd5;</cptVals>
<chOutVal>8001;0;8001;ffff;:43,5; 20,5; 21,6; 35,6;</chOutVal>
</xml>
Les valeurs des 16 entrées sont à la ligne "inAns". Chaque valeur est séparée par un point virgule ";".
Il te suffit de "déserialiser" ces valeurs et les placer dans un "array".
La page index.htm fait ça en html, très simplement:
// Update the analog inputs value
var inAnVals = getXMLValue(xmlData, 'inAns').split(';');
Tu retrouves les 16 valeurs dans la variable/tableau inAnVals.
Qu'envoies-tu comme requête au Maxisun et comment traites-tu la réponse ?
Connexion ou Créer un compte pour participer à la conversation.
- Forhorse
- Auteur du sujet
- Hors Ligne
- Membre senior
- Messages : 40
- Remerciements reçus 3
Je suis resté en firmware 4.2.4a alors le status.xml de mon Maxisun a un petit peu moins de balises, mais y a celles qui m’intéressent : inAns et outStat (les autres servent à quoi ?)
On peut pas dire que le fort de Jeedom soit sa documentation, c'est peut être un système ouvert mais il reste bien obscur pour un non initié comme moi... Bref à force de fouiller j'ai réussit à sortir un truc fonctionnel.
Donc l'idée de base est de partir sur 2 plug-in officiel de la catégorie programmation : virtuels et scripts
La partie visible est un objet virtuel qui contient les 4 informations que j'ai besoin d'afficher/utiliser (dans un scenario par exemple) ces 4 infos ne pointent sur rien, c'est un script php qui va se charger de rafraichir les valeurs.
La partie script prend place dans un objet de script du plug-in du même nom, de type script.
Voilà la première version de mon script
<?php
require_once dirname(__FILE__) . '/../../../core/php/core.inc.php';
//script pour récupérer les infos d'un Maxisun
$url = 'http://192.168.0.9/status.xml';
log::add('script','debug',$url );
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$datas = curl_exec($curl);
curl_close($curl);
$sondes = new SimpleXMLElement($datas);
$array = explode(';', $sondes->inAns);//decomposition des données en tableau
$x=1;
foreach ($array as $values)
{
$capteur[$x] = $values;
$x = $x + 1;
}
$id = "#[Maison][CESI][T_Capteur]#";
if(isset($id))
{
cmd::byString($id)->event($capteur[1]);
}
$id = "#[Maison][CESI][T_Exterieur]#";
if(isset($id))
{
cmd::byString($id)->event($capteur[2]);
}
$id = "#[Maison][CESI][T_Ballon_Haut]#";
if(isset($id))
{
cmd::byString($id)->event($capteur[3]);
}
$id = "#[Maison][CESI][T_Ballon_Bas]#";
if(isset($id))
{
cmd::byString($id)->event($capteur[4]);
}
echo true;
?>
J'ai bien conscience que c'est pas du super code, qu'il y a des étapes intermédiaires inutiles, etc... mais ça fonctionne, coder reste pour moi un loisir que je ne pratique que trop rarement, et le php c'est pas franchement ce que je préfère. ça pose les bases et ceux qui sont plus doué que moi feront certainement mieux.
Vu que je dois être le seul à (essayer) d'utiliser Jeedom ici, je ne rentre pas inutilement dans les détails, mais ça aidera peut être quelqu'un un jour et je reste dispo en cas d'éventuelles questions.
Connexion ou Créer un compte pour participer à la conversation.
- Forhorse
- Auteur du sujet
- Hors Ligne
- Membre senior
- Messages : 40
- Remerciements reçus 3
L'espace entre le signe "-" et la valeur dans le fichier XML faisait buguer l'affichage qui restait à 0
Suite a un échange sur le forum Jeedom, c'est en fait plus simple de passer par un scénario et d'y inclure un bout de script php par le bloc correspondant. Le fonctionnement est au global identique mais l'affectation des valeurs ainsi récupérées au virtuel chargé de les afficher et les utiliser est plus simple et plus "visuel" surtout s'il y a besoin de les modifier.
$tags = $scenario->getTags(); // récuperation des tag
$ip = $tags['#ip_maxisun#'];
$url = 'http://'.$ip.'/status.xml';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$datas = curl_exec($curl); //appel du fichier XML du Maxisun
curl_close($curl);
$sondes = new SimpleXMLElement($datas); //parser XML pour récuperation des valeurs des balises
$array = explode(';', $sondes->inAns);//decomposition des données des sondes (balise <inAns>) en tableau
$x=1;
foreach ($array as $values)
{
$values = str_replace(' ','',$values);
$tags["#S".$x."#"] = floatval(str_replace (',','.',$values));// creation des tag
$x++;
}
$scenario->setTags($tags); // affectation des tags
Si on veut recuperer autre chose que les sondes, c'est pas plus compliqué, il suffit d'appliquer le même principe a une autre balise du fichier XML (ça peut être fait à la suite dans le même script)
EDIT : Petite détail qui a son importance mais qui n'est pas forcement évidente, le scénario doit être configuré pour s’exécuter sur une programmation (cron) régulière (1mn, 5mn,...)
Pièces jointes :
Connexion ou Créer un compte pour participer à la conversation.
- patrick
- Hors Ligne
- Administrateur
- Messages : 3085
- Remerciements reçus 475
Je ne sais pas si tu as pu faire ce que tu voulais, mais je me suis amusé hier à voir si on pouvait piloter les "Commandes" du Maxisun avec une application ou box de domotique.
Et en fait c'est très simple, une seule commande curl suffit:
curl -X POST -d 'parS=2;8;10;15;7;0;0;0;' http://192.168.1.97/index.xml
Comme pour les sondes où il faut lire tout le fichier "status.xml", le souci c'est qu'on pilote en même temps les 8 Commandes, et donc pas moyen de ne changer l'état que d'une seule.
Je pense que ce serait + simple pour le traitement d'avoir un fichier xml (ou json) pour les sondes, un pour les compteurs, un pour l'état des commandes et un autre pour l'état des sorties.
Qu'en penses-tu ?
Connexion ou Créer un compte pour participer à la conversation.
- bloody27370
- Hors Ligne
- Nouveau membre
- Messages : 19
- Remerciements reçus 2
Ce sujet m'intéresse beaucoup, je n'ai pas besoin de récupérer des infos mais j'aimerais plutot modifier les commandes depuis Jeedom.
Par contre j'ai un peu de mal à comprendre la commande curl, et surtout comment identifier le besoin.
Voilà ce que j'aimerais faire :
1) Pouvoir passer en Manu ou auto ma commande du ballon Eau Chaude
2) Pouvoir sélectionner le type de routage (Inject / Zéro / etc ...)
D'avance merci pour votre aide.
Connexion ou Créer un compte pour participer à la conversation.
- patrick
- Hors Ligne
- Administrateur
- Messages : 3085
- Remerciements reçus 475
Pièces jointes :
Connexion ou Créer un compte pour participer à la conversation.
- bloody27370
- Hors Ligne
- Nouveau membre
- Messages : 19
- Remerciements reçus 2
Connexion ou Créer un compte pour participer à la conversation.
- bloody27370
- Hors Ligne
- Nouveau membre
- Messages : 19
- Remerciements reçus 2
J'ai fais un scénario dans Jeedom car je ne sais pas comment faire autrement mais il y a surement mieux à faire.
Pour ceux que ça intéresse, voila le code pour le mode auto
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://192.168.50.206/index.xml');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "parS=10;10;0;0;0;0;0;1;");
$headers = array();
$headers[] = 'Content-Type: application/x-www-form-urlencoded';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);
Le code pour le mode Manu
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://192.168.50.206/index.xml');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "parS=5;5;0;0;0;0;0;2;");
$headers = array();
$headers[] = 'Content-Type: application/x-www-form-urlencoded';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);
Connexion ou Créer un compte pour participer à la conversation.
- thierry y
- Hors Ligne
- Membre senior
- Messages : 62
- Remerciements reçus 1
perso je souhaiterais uniquement recupérer les valeurs des sondes, pouvez vous m'expliquer comment faire?
Merci par avance
Connexion ou Créer un compte pour participer à la conversation.
- thierry y
- Hors Ligne
- Membre senior
- Messages : 62
- Remerciements reçus 1
perso je souhaiterais uniquement recupérer les valeurs des sondes, pouvez vous m'expliquer comment faire?
Merci par avance
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
- Accueil
- forum
- Maxisun
- Foire aux questions
- Jeedom ?