Cosm/pachube c'est naze. Faisons mieux :)

Bla bla sur la domotique. La section ou on se trompe jamais !

Re: Cosm/pachube c'est naze. Faisons mieux :)

Messagede nightfever » 17 AoĂ» 2013, 13:20

potentiellement, je serai intéressé. Tu peux mettre un screen de ce que ça donne stp ?
par contre je ne comprends pas ce que tu dis niveau de l'interactivité. Pour moi pchart est aussi interactif que highcharts non ?
-- Armony one |freebox v6 |LightManager |intertechno | chacon | galaxy tab 8.9|SmartTv avec wifi --
-- Jeedom sur RPI 2 + clé 3G| Vera Lite (firmware UI5 v1.5.622)+ RFXtrx usb | 6 x Oregon THGR122NX | 1 x capteur ST814 |6 x tête thermostatique Danfos | Thermostat Z-wave programmable | 5 x fibaro FGD-211 | 1 x module AEO_MSEI | 1x FGS211 | 1 x multifonctions AEO_DSB05 | 1 x multifonctions BE_MOLITE | 2 x FGR211 --
-- NAS DS213 | openremote + myvera| teleinfo sur raspberry pi | IpCam Foscam FI9821W-V2 --
nightfever
Dieu de domotique
 
Messages: 394
Inscription: 15 DĂ©c 2012, 16:47
Localisation: Nord

Re: Cosm/pachube c'est naze. Faisons mieux :)

Messagede lpgipi » 18 AoĂ» 2013, 14:28

Bonjour,

Je suis tombé sur ce site devant moi même faire des courbes de mes données.
C’est un tres gros boulot qui a été fait avec le script graph car je ne maitrise pas du tout ce language.

J'ai d'ailleurs un soucis. Avec la première version de graph (windowstime = 1/7/31/365), cela fonctionne TB
mais avec la modif apportée (window=hour/day/month/year), j'ai un message d'erreur : "L'image http...." ne peut etre affichée car elle contient des erreurs

Quelqu’un peut il m'aider et me dire ce qui ne va pas ? ou m'expliquer comment trouver pourquoi cette version ne fonctionne pas chez moi

J'ai mis le code ci dessous. C'est celui d'origine avec comme corrections
$this->_db_name = "mygraph";
$this->_db_login = "mygraphuser";
$this->_db_passw = "mygraphpassword";
$this->_db_table = "mygraph_tbl";
+ la ligne pour avoir les bonnes heures

Merci d'avance

Code: Tout sélectionner
        <?php
   
       date_default_timezone_set('Europe/Brussels');


    include("pChart2.1.3/class/pData.class.php");
    include("pChart2.1.3/class/pDraw.class.php");
    include("pChart2.1.3/class/pImage.class.php");


    class MyGraph
    {
        var $_db_name;
        var $_db_login;
        var $_db_passw;
        var $_db_table;

        var $_title;
        var $_feeds;
        var $_type;
        var $_dateformat;
        var $_dateformatphp;
       var $_interval;

        var $_dataset;
        var $_data;

        function _computeMysql()
        {
            // Liste uniquement les feeds qui m'interessent
            $sql_feeds = "";
            reset($this->_feeds);
            while (list($k, $v) = each($this->_feeds))
            {
                $sql_feeds .= ($sql_feeds == "" ) ? "(" : "OR ";
                $sql_feeds .= 'ffeed="' . $k . '" ';
            }
            $sql_feeds .= ")";

            // Create query
            $sql  = 'SELECT ' . $this->_type . '(fvalue) AS computed, ffeed, DATE_FORMAT(`ftimestamp`, \'' . $this->_dateformat . '\') as date, UNIX_TIMESTAMP(`ftimestamp`) AS utimestamp';
            $sql .= ' FROM '  . $this->_db_table;
            $sql .= ' WHERE ' . $sql_feeds . ' AND ftimestamp BETWEEN DATE_SUB(NOW(), INTERVAL 1 ' . $this->_interval . ') AND NOW()';
            $sql .= ' GROUP BY date, ffeed';

            // Connecte
            $db = mysql_connect('localhost', $this->_db_login, $this->_db_passw);
            mysql_select_db($this->_db_name, $db) or die('Erreur SQL !<br>'.mysql_error());

            // Execute query
            $req = mysql_query($sql) or die('Erreur SQL !<br>' . $sql . '<br>' . mysql_error());

            // aggrate datas
            $this->_dataset = array();
            while($data = mysql_fetch_assoc($req))
            {
                $this->_dataset[$data['ffeed']]["value"][] = floor(($data['computed'] * 1000)) / 1000;

                $t = date($this->_dateformatphp, $data['utimestamp']);
                $this->_dataset[$data['ffeed']]["time"][] = $t;
            }
           
            //echo ("<pre>" . $sql . "<br><br>"); print_r($this->_dataset);
            //exit ();
        }

        function _addData($name)
        {
            $this->_data->addPoints($this->_dataset[$name]["value"], $name);
            $this->_data->setSerieDescription($name, $this->_feeds[$name]);
            $this->_data->setSerieOnAxis($name, 0);
            $this->_data->setSerieWeight($name, 1);
        }

        function _computeGraph($width, $height)
        {
            $this->_data->setAxisPosition(0,AXIS_POSITION_LEFT);
            $this->_data->setAxisName(0,$this->_title);
            $this->_data->setAxisUnit(0,"");

            $picture = new pImage($width,$height,$this->_data,TRUE);

            $settings = array("R"=>170, "G"=>183, "B"=>87, "Dash"=>1, "DashR"=>190, "DashG"=>203, "DashB"=>107);
            $picture->drawFilledRectangle(0,0,$width,$height,$settings);

            $settings = array("StartR"=>219, "StartG"=>231, "StartB"=>139, "EndR"=>1, "EndG"=>138, "EndB"=>68, "Alpha"=>50);
            $picture->drawGradientArea(0,0,$width,$height,DIRECTION_VERTICAL,$settings);

            $picture->drawRectangle(0,0,$width - 1,$height - 1,array("R"=>0,"G"=>0,"B"=>0));

            $picture->setFontProperties(array("FontName"=>"pChart2.1.3/fonts/Forgotte.ttf","FontSize"=>14));
            $textSettings = array("Align"=>TEXT_ALIGN_MIDDLEMIDDLE, "R"=>255, "G"=>255, "B"=>255);
            $picture->drawText($width / 2, 25,$this->_title,$textSettings);

            $picture->setGraphArea(30,60,$width - 25, $height - 30);
            $picture->setFontProperties(array("R"=>0,"G"=>0,"B"=>0,"FontName"=>"pChart2.1.3/fonts/pf_arma_five.ttf","FontSize"=>6));

            $settings = array("Pos"=>SCALE_POS_LEFTRIGHT, "Mode"=>SCALE_MODE_FLOATING, "LabelingMethod"=>LABELING_ALL,
                              "GridR"=>255, "GridG"=>255, "GridB"=>255, "GridAlpha"=>50, "TickR"=>0, "TickG"=>0, "TickB"=>0, "TickAlpha"=>50,
                              "LabelRotation"=>0, "CycleBackground"=>1, "DrawXLines"=>1, "DrawSubTicks"=>1,
                              "SubTickR"=>255, "SubTickG"=>0, "SubTickB"=>0, "SubTickAlpha"=>50, "DrawYLines"=>ALL, "LabelSkip"=>3);
            $picture->drawScale($settings);

            $config = array(); //array("DisplayValues"=>1);
            $picture->drawSplineChart($config);

            $Config = array("FontR"=>0, "FontG"=>0, "FontB"=>0, "FontName"=>"pChart2.1.3/fonts/pf_arma_five.ttf", "FontSize"=>6,
                            "Margin"=>6, "Alpha"=>30, "BoxSize"=>5, "Style"=>LEGEND_NOBORDER, "Mode"=>LEGEND_HORIZONTAL);
            $picture->drawLegend($width - 120,15,$config);

            $picture->stroke();
        }

        function __construct($title)
        {
            $this->_db_name  = "mygraph";
            $this->_db_login = "mygraphuser";
            $this->_db_passw = "mygraphpassword";
            $this->_db_table = "mygraph_tbl";

            $this->_title = "Untitled";
            $this->_feeds = array();
            $this->_type = "AVG";

            $this->_dataset = array();
            $this->_data = null;

            $this->_title = $title;

            $this->setWindowTime("day");
        }

        function setFeeds($feeds)
        {
            $this->_feeds = $feeds;
        }

        // set window
        function setWindowTime($time)
        {
            switch($time)
            {
                case "hour" :
                    $this->_dateformat = "%Y%m%d%H%i";
                    $this->_dateformatphp = 'H:i';
                    $this->_interval = "HOUR";
                    break;
                case "day" :
                    $this->_dateformat = "%Y%m%d%H";
                    $this->_dateformatphp = 'l H\h\0\0';
                    $this->_interval = "DAY";
                    break;
                case "month" :
                    $this->_dateformat = "%Y%m%d";
                    $this->_dateformatphp = 'j F';
                    $this->_interval = "MONTH";
                    break;
                case "year" :
                    $this->_dateformat = "%Y%m";
                    $this->_dateformatphp = 'F Y';
                    $this->_interval = "YEAR";
                    break;
                default :
                    $this->setWindowTime("day");
                    break;
            }
        }

        function setTypeAvg()
        {
            $this->_type = "AVG";
        }

        function setTypeSum()
        {
            $this->_type = "SUM";
        }

        function compute()
        {
            $this->_computeMysql();

            // Add data to graph
            $this->_data = new pData();
            $lastfeed = null;
            reset($this->_feeds);
            while (list($n, $d) = each($this->_feeds))
            {
                $lastfeed = $n;
                $this->_addData($n, $d);
            }
            $this->_data->addPoints($this->_dataset[$lastfeed]["time"], "Absissa");
            $this->_data->setAbscissa("Absissa");

            $this->_computeGraph(640, 480); //640*480
        }
    }

    if (!isset($_GET['feeds'])) die(
    "<pre><b>Usage:</b> <i>script.php?title=mytitle&window=hour&feeds[feedname1]=feeddesc1&feeds[feedname2]=feeddesc2&feeds[feedname3]=feeddesc3</i>
    <b>With:</b>
        <i>title</i> (string) which is the graph name.
        <i>window</i> (string) is the graph time window and must be 'hour', 'day', 'month', 'year' (default is 'day').
        <i>feeds</i> (array) which is an array that contain the feed name as key and the feed description as value.
        <i>type</i> (string) optional parameter that can have 'sum' value to compute sum instead of average.</pre>");


    if (isset($_GET['title']))
        $title = $_GET['title'];
    else
        $title = "Sans titre";

    $myGraph = new MyGraph($title);

    $myGraph->setFeeds($_GET['feeds']);

    if (isset($_GET['type']) && $_GET['type'] == "sum")
        $myGraph->setTypeSum();

    if (isset($_GET['window']))
        $myGraph->setWindowTime($_GET['window']);

    $myGraph->compute();


    ?>



[quote="psykokwak"]Hello tous le monde.
J'ai amélioré le script "graph.php" (il y avait des petits soucis sur la méthode de calcule des intervalles de temps dans les graphs).

Voici le nouveau script (qui remplace l'ancien). Attention, il y a un changement : le paramètre "windowtime" devient "window" et ne prends plus un chiffre mais soit "hour", "day", "month" ou "year" pour demander un graph sur la derniere tranche horaire.
lpgipi
Membre un peu timide !
 
Messages: 3
Inscription: 18 AoĂ» 2013, 14:18

Re: Cosm/pachube c'est naze. Faisons mieux :)

Messagede csebou » 18 AoĂ» 2013, 19:27

@nightvfever: Highgraph ( et highstock) ne sont pas juste des images figées mais sont des graphiques légèrement interactifs dans le sens ou si l'on passe le curseur dessus cela affiche la ou les valeurs et l'on peut y incorporer des boutons de zooms ou autres.
Voici un exemple de ce que j'ai réussit à faire avec 3 températures:Image

PS: ne pas se fier aux unités et au titre que je n'ai pas encore changés
csebou
Membre Actif
 
Messages: 18
Inscription: 29 Avr 2013, 12:38
Localisation: RĂ©gion parisienne

Re: Cosm/pachube c'est naze. Faisons mieux :)

Messagede lpgipi » 19 AoĂ» 2013, 08:39

Bonjour

Ton image n'est pas passée, csebou.
Peux tu stp partager tes scripts ?

Un lien d'un gars qui la fait aussi avec highchart, c'est vraiment pro
http://conso.gourdet.net/tableau-de-bord.html
origine du lien : http://forum.snootlab.com/viewtopic.php?f=32&t=921

Cdlt
lpgipi
Membre un peu timide !
 
Messages: 3
Inscription: 18 AoĂ» 2013, 14:18

Re: Cosm/pachube c'est naze. Faisons mieux :)

Messagede nightfever » 19 AoĂ» 2013, 09:22

une grande partie des scripts que CSEBOU a du utiliser sont ici (il confirmera ou non)

nightfever a Ă©crit:@ spectreman :
regarde ici (exemple 4)
l'auteur du site à rajouté cet exemple suite à quelques échanges que nous avons effectués. Ca fonctionne chez moi mais ça rame un peu (pas eu le temps d'approfondir).
Il travaille sur une autre version pchart actuellement.


Après être repassé sur le site, je me suis aperçu qu'il a continué les échanges avec l'auteur jusqu'à ce que l'auteur y dépose l'exemple 6.
J'ai fais un copier/coller hier soir, en changeant les infos de connexion et ça a marché du premier coup.
Ce qui n'apparait pas, c'est la façon dont on envoi les infos des sondes vers la BDD. Cela est traité en début de ce sujet (une scène dans la vera....)

J'en profite pour donner un nouveau lien du même auteur, suite à quelques échanges avant que je parte en vacances. Il avait dit qu'il regarderait mais je n'avais pas vu qu'il l'avait déposé sur son site :
exemple1 avac highstock
Je le préfère et ça fonctionne nikel

Bon courage
-- Armony one |freebox v6 |LightManager |intertechno | chacon | galaxy tab 8.9|SmartTv avec wifi --
-- Jeedom sur RPI 2 + clé 3G| Vera Lite (firmware UI5 v1.5.622)+ RFXtrx usb | 6 x Oregon THGR122NX | 1 x capteur ST814 |6 x tête thermostatique Danfos | Thermostat Z-wave programmable | 5 x fibaro FGD-211 | 1 x module AEO_MSEI | 1x FGS211 | 1 x multifonctions AEO_DSB05 | 1 x multifonctions BE_MOLITE | 2 x FGR211 --
-- NAS DS213 | openremote + myvera| teleinfo sur raspberry pi | IpCam Foscam FI9821W-V2 --
nightfever
Dieu de domotique
 
Messages: 394
Inscription: 15 DĂ©c 2012, 16:47
Localisation: Nord

Re: Cosm/pachube c'est naze. Faisons mieux :)

Messagede csebou » 19 AoĂ» 2013, 09:42

En effet une grande partie des scripts pour highcahrt et Highstock sont disponibles sur le site de Falaf.
Compte tenu que j'ai pas mal discuté avec le modo, ce dernier à mis à jour les codes en fonction de mes besoins.

De ce fait les fichiers sont directement compatibles avec notre domotique (tout du moins la mienne :D ).

Je suis exactement du mĂŞme avis que nightfever concernant Highstock qui est Ă  mon sens beaucoup plus pertinent pour de la domotique (nombreuses gestions du temps).

Pour ce qui est de la BDD je veux bien répondre à vos questions mais sachez que pour ma part je stocke toutes mes données sur un NAS SYNOLOGY installé chez moi dans une BDD mysql.
Sachez qu'il y a 1 mois je ne savais pas que cela existait et j'en avais jamais entendu parlé et aujourd'hui jarrive à faire à peu près tout ce que je souhaite ! (et suis pas peu fier) Evidemment grace à l'aide de bcp de gens sympas qui ont pris le temps de m'aider et c'est pourquoi je me sens un peu obligé de faire de même maintenant...

PS: C'est vraiment une galère pour déposer une image sur ce site... alors je vais essayer de vous mettre un lien...
csebou
Membre Actif
 
Messages: 18
Inscription: 29 Avr 2013, 12:38
Localisation: RĂ©gion parisienne

Re: Cosm/pachube c'est naze. Faisons mieux :)

Messagede nightfever » 19 AoĂ» 2013, 10:05

je suis à peu près dans la même config que toi CSEBOU : même architecture et stockage sur un NAS syno donc tu avais un bon début avec les codes de falaf et c'était facile pour moi de reprendre hier en rentrant de vacances :D
Pour les autres qui veulent utiliser highcharts ou highstocks avec une vera :
il suffit de reprendre la synthèse que j'avais faite ici
la différence est qu'on ne se sert plus de pchart et graph.php
pour l'affichage du graph, prendre le code de falaf (exemple 6) ici et changer les informations de log Ă  la BDD
ensuite entrer l'adresse du style : http://192.168.x.x/exemple6.php?feed1=T ... 6=Temp_SDB
:mrgreen:
-- Armony one |freebox v6 |LightManager |intertechno | chacon | galaxy tab 8.9|SmartTv avec wifi --
-- Jeedom sur RPI 2 + clé 3G| Vera Lite (firmware UI5 v1.5.622)+ RFXtrx usb | 6 x Oregon THGR122NX | 1 x capteur ST814 |6 x tête thermostatique Danfos | Thermostat Z-wave programmable | 5 x fibaro FGD-211 | 1 x module AEO_MSEI | 1x FGS211 | 1 x multifonctions AEO_DSB05 | 1 x multifonctions BE_MOLITE | 2 x FGR211 --
-- NAS DS213 | openremote + myvera| teleinfo sur raspberry pi | IpCam Foscam FI9821W-V2 --
nightfever
Dieu de domotique
 
Messages: 394
Inscription: 15 DĂ©c 2012, 16:47
Localisation: Nord

Re: Cosm/pachube c'est naze. Faisons mieux :)

Messagede lpgipi » 19 AoĂ» 2013, 10:21

Pour l'instant, je remplis ma base de données Mysql sur le PC avec wamp et d'un arduino.
Si j'arrive au bout, alors je verrai pour un serveur minimaliste et econome (Rasberri pi) et finaliserai les codes qui en l'Ă©tat ne sont que des tests de bon fonctionnement.

Je suis actuellement sur la phase tracés des courbes en php ???
Je vais appronfondir les liens car j'ai passer la journée hier à essayer de comprendre (en vain) pourquoi la mise à jour de graph par psykokwak ne fonctionnait pas.
C'est frustrant mais je pense que je vais laisser tomber et passer Ă  highchart

Merci
lpgipi
Membre un peu timide !
 
Messages: 3
Inscription: 18 AoĂ» 2013, 14:18

Re: Cosm/pachube c'est naze. Faisons mieux :)

Messagede csebou » 19 AoĂ» 2013, 12:51

@nightfever: as tu besoin de mon aide pour ta base de données ou c'est OK ?
csebou
Membre Actif
 
Messages: 18
Inscription: 29 Avr 2013, 12:38
Localisation: RĂ©gion parisienne

Messagede nightfever » 19 AoĂ» 2013, 13:31

Non je te remercie. Ma bdd est ok et j'ai la même architecture que toi. Ça fait 2 mois que j'y stock les infos de les sondes. J'ai un souci avec highchart mais pas avec highstock et vu que ce dernier répond à ce que je souhaite, tout roule. Je bidouillerai un peu le code pour mettre en paramètres la taille du graph mais j'ai vu les codes alors ça devrait aller. Ce soir je te mp pour te donner mon utilisation globale.

Envoyé depuis mon E350 en utilisant Tapatalk 4 Beta
-- Armony one |freebox v6 |LightManager |intertechno | chacon | galaxy tab 8.9|SmartTv avec wifi --
-- Jeedom sur RPI 2 + clé 3G| Vera Lite (firmware UI5 v1.5.622)+ RFXtrx usb | 6 x Oregon THGR122NX | 1 x capteur ST814 |6 x tête thermostatique Danfos | Thermostat Z-wave programmable | 5 x fibaro FGD-211 | 1 x module AEO_MSEI | 1x FGS211 | 1 x multifonctions AEO_DSB05 | 1 x multifonctions BE_MOLITE | 2 x FGR211 --
-- NAS DS213 | openremote + myvera| teleinfo sur raspberry pi | IpCam Foscam FI9821W-V2 --
nightfever
Dieu de domotique
 
Messages: 394
Inscription: 15 DĂ©c 2012, 16:47
Localisation: Nord

Re: Cosm/pachube c'est naze. Faisons mieux :)

Messagede sb_domo » 13 Nov 2013, 10:43

Salut,
J'ai fait un tuto pour MyVera: http://sbdomotique.wordpress.com/2013/11/13/myvera-affichergraphiques/ mais le principe et les pages php sont utilisables pour autre chose. Il y a quelques modifications car j'ai essayé d'optimiser votre méthode. En particulier, toutes les mesures sont envoyées lors d'un seul lancement de scène ce que je trouve plus facile à gérer qu'avec une scène par mesure (et moins lourd pour la Vera).
sb_domo
Dieu de domotique
 
Messages: 612
Inscription: 11 Mar 2012, 09:32

Re: Cosm/pachube c'est naze. Faisons mieux :)

Messagede csebou » 13 Nov 2013, 20:20

@sb_domo: impeccable ton tuto ! il est très bien réalisé et je suis sur qu'il en aidera beaucoup. C'est vrai que l'insertion des graphs dans myvera c'est le top avec Highstock. Je profites d'ailleurs de cette occasion pour te remercier à nouveau pour ce formidable IHM qu'est myvera et qui est sans conteste le meilleur de toutes les box domotique !!
csebou
Membre Actif
 
Messages: 18
Inscription: 29 Avr 2013, 12:38
Localisation: RĂ©gion parisienne

PrécédenteSuivante

Retourner vers Discussions Générales

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 4 invités

Copyright © 2011 - Touteladomotique.com - Tous droits rĂ©servĂ©s
Les blogs partenaires : Abavala, Domo-Blog, Domotique34, Maison et Domotique