From 5a736003db40f353db7729bec8d45b0c3986fabd Mon Sep 17 00:00:00 2001 From: Danzal974 Date: Thu, 23 Mar 2017 09:51:27 +0400 Subject: [PATCH 01/24] Ajout de thing graph dans CO2 --- components/CommunecterController.php | 7 + config/CO2/params.json | 14 + controllers/ThingController.php | 28 ++ views/app/annonces.php | 2 +- views/thing/graph.php | 661 +++++++++++++++++++++++++++ views/thing/index.php | 68 +++ views/thing/manage.php | 73 +++ views/thing/scklastestreadings.php | 168 +++++++ 8 files changed, 1020 insertions(+), 1 deletion(-) create mode 100644 controllers/ThingController.php create mode 100644 views/thing/graph.php create mode 100644 views/thing/index.php create mode 100644 views/thing/manage.php create mode 100644 views/thing/scklastestreadings.php diff --git a/components/CommunecterController.php b/components/CommunecterController.php index e322efd8..24127547 100755 --- a/components/CommunecterController.php +++ b/components/CommunecterController.php @@ -472,6 +472,13 @@ class CommunecterController extends Controller "siteurl" => array( "incnbclick" => array('href' => "ph/communecter/siteurl/incnbclick") ), + "thing" => array( + "index" => array('href' => "/ph/communecter/thing/index", "public" => true ), + "graph" => array('href' => "/ph/communecter/thing/graph", "public" => true ), + "scklastestreadings" => array('href' => "/ph/communecter/thing/scklastestreadings", "public" => true ), + "updatesckdevices" => array('href' => "/ph/communecter/thing/updatesckdevices", "public" => true ), + "manage" => array('href' => "/ph/communecter/thing/manage","public"=>true), + ), ); function initPage(){ diff --git a/config/CO2/params.json b/config/CO2/params.json index 226a33c7..9939c01d 100644 --- a/config/CO2/params.json +++ b/config/CO2/params.json @@ -110,6 +110,20 @@ "icon" : "university", "mainTitle" : "Communexion activée", "placeholderMainSearch" : "rechercher ..." + }, + + "#thing": + {"inMenu" : true, + "useHeader" : true, + "open" : true, + "subdomain" : "thing", + "subdomainName" : "Données libres", + "hash" : "#thing", + "icon" : "line-chart", + "mainTitle" : "Les objets communectés", + "placeholderMainSearch" : "Choisir parmis les objets ...", + "lblBtnCreate" : "Ajouter un objet", + "colorBtnCreate" : "azure" } } diff --git a/controllers/ThingController.php b/controllers/ThingController.php new file mode 100644 index 00000000..a9370db9 --- /dev/null +++ b/controllers/ThingController.php @@ -0,0 +1,28 @@ + +* Date: 26/01/2017 rapatrié dans CO2 le 22/03/17 +*/ + +class ThingController extends CommunecterController { + + const moduleTitle = "Thing"; + protected function beforeAction($action) { + parent::initPage(); + return parent::beforeAction($action); + } + + public function actions(){ + return array( + 'index' => 'citizenToolKit.controllers.thing.IndexAction', + 'graph' => 'citizenToolKit.controllers.thing.GetGraphAction', + //'scklastestreadings' => 'citizenToolKit.controllers.thing.GetLastestReadingAction', + 'updatesckdevices' => 'citizenToolKit.controllers.thing.UpdateSckDevicesAction', + 'manage' => 'citizenToolKit.controllers.thing.ManageAction', + + ); + } + +} diff --git a/views/app/annonces.php b/views/app/annonces.php index 039ec17b..9542cb60 100755 --- a/views/app/annonces.php +++ b/views/app/annonces.php @@ -21,7 +21,7 @@ $this->renderPartial($layoutPath.'header', array( "layoutPath"=>$layoutPath , "type" => @$type, - "page" => page) ); + "page" => $page) ); ?> + + +
+
+
+ + + +
+ + + + + + +
+
+ + + +
+ + + + + + +
+ + + + + + + + + + +
+
+
+
+
+
+ + +
+ +renderPartial($layoutPath.'footer', array("subdomain"=>"thing")); ?> + + + + + \ No newline at end of file diff --git a/views/thing/index.php b/views/thing/index.php new file mode 100644 index 00000000..7e0d455e --- /dev/null +++ b/views/thing/index.php @@ -0,0 +1,68 @@ +getClientScript(); +//HtmlHelper::registerCssAndScriptsFiles( $cssAnsScriptFilesModule ,Yii::app()->request->baseUrl); + +$layoutPath = 'webroot.themes.'.Yii::app()->theme->name.'.views.layouts.'; + //header + menu + $this->renderPartial($layoutPath.'header', + array( "layoutPath"=>$layoutPath , + "page" => "thing") ); +?> + +
+
+
+

Smart-Citizen-Kit

+ +
+ +
+
    + + + + + + + + + + +
+
+
+ +
+ +renderPartial($layoutPath.'footer', array("subdomain"=>"thing")); ?> + + \ No newline at end of file diff --git a/views/thing/manage.php b/views/thing/manage.php new file mode 100644 index 00000000..d66ca349 --- /dev/null +++ b/views/thing/manage.php @@ -0,0 +1,73 @@ +getClientScript(); + + // $cssAnsScriptFilesModule = array( + // '/plugins/d3/d3.v3.min.js', + // ); + // HtmlHelper::registerCssAndScriptsFiles($cssAnsScriptFilesModule, Yii::app()->request->baseUrl); + $layoutPath = 'webroot.themes.'.Yii::app()->theme->name.'.views.layouts.'; + //header + menu + $this->renderPartial($layoutPath.'header', + array( "layoutPath"=>$layoutPath , + "page" => "thing") ); + + + if(empty($country) || !isset($country)){$country='RE';} +?> + + + +
+
+

Pour mettre à jour l'adresse mac avec le deviceId du Smart-Citizen-kit

+
+
+
+ ". + "
"; + + //echo $mdataDevice['deviceId']."
\n"; + //echo $mdataDevice['_id']."
\n"; + } + + }?> + + + +
+ + +renderPartial($layoutPath.'footer', array("subdomain"=>"thing")); ?> + + + + + + + \ No newline at end of file diff --git a/views/thing/scklastestreadings.php b/views/thing/scklastestreadings.php new file mode 100644 index 00000000..70b42be1 --- /dev/null +++ b/views/thing/scklastestreadings.php @@ -0,0 +1,168 @@ +getClientScript(); +?> + + + + +
+
+

Dernières mesures Smart-Citizen-Kits

+
+
+ + +
+
+ +
+ + +
+
+ + + + + + + + +

+
+
+ +
+ + +
+ +
+ + +
+ + + + + From 28452cd53667094b50024b317fa691263c005fda Mon Sep 17 00:00:00 2001 From: Danzal974 Date: Thu, 23 Mar 2017 17:35:06 +0400 Subject: [PATCH 02/24] =?UTF-8?q?=09modifi=C3=A9=C2=A0:=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20docs/bugs.org=20=09nouveau=20fichier=C2=A0:=20docs/spe?= =?UTF-8?q?cs/Thing.md=20=09modifi=C3=A9=C2=A0:=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?views/thing/graph.php?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/bugs.org | 4 +-- docs/specs/Thing.md | 65 +++++++++++++++++++++++++++++++++++++++++++ views/thing/graph.php | 2 +- 3 files changed, 68 insertions(+), 3 deletions(-) create mode 100644 docs/specs/Thing.md diff --git a/docs/bugs.org b/docs/bugs.org index 172fecf5..0dea511c 100755 --- a/docs/bugs.org +++ b/docs/bugs.org @@ -2,8 +2,8 @@ * Correction de bugs CO2 * ************************************************************ - - +[ ] agenda ajout d'evenement impossible le datepicker bloque la date de fin, même si c'est bien une date ultérieur à la date de début. +[ ] Les annonces ne s'enregistre pas si on ajoute une adresse (passage par la carte). diff --git a/docs/specs/Thing.md b/docs/specs/Thing.md new file mode 100644 index 00000000..1de83b7b --- /dev/null +++ b/docs/specs/Thing.md @@ -0,0 +1,65 @@ +# Thing +Au delà des Smart-Citizen-Kit, thing pourrrait permettre d'intégrer les objets connecté à CO2. + +Un point d'entrée est disponible à coté du bouton "actus", il est nommé "Données Libres" (on peut renommer en IoT ou Objets Connectés), l'icone est un line-chart. + +## Smart-Citizen-Kit +La view index permet d'accéder + * à deux vue différentre : + * Les graphes (encore du developpement à finir) + * Les dernières valeurs enregistrés + * à une page de gestion (travaux en cours): + * première fonctionnalité de la page ajouter l'adresse mac correspondant au device (en cours de finalisation) + +### Double push + +Le kit pourrait être utilisé exclusivement avec Communecter, un serveur de temps pour sck est ajouter dans l'API, la reception simple fonctionne déjà, et la réception batch (plusieurs enregistrements en même temps) est en cours de développement. Ces fonctionnalités peuvent permettre une redondance, si on développe tous les fonctions nécessaire. + +#### Firmware +Le firmware sck double push a été développé par Nicolas Grondin en s'inspirant des débuts de travaux de Jean Daniel CAZAL (Stagiaire). +Nicolas Grondin a par la suite amélioré la gestion de la FIFO (écriture et lectur en EEPROM) et la stabilité du firmware. +Avec le double push nous devons choisir une période d'envoi des enregistrements adéquat pour ne pas surcharger la base de données, pour l'instant ce "time update" est de 5 minutes (300 secondes). + +#### Coté serveur +Un outil datetime dans l'API de communecter, permet de fournir l'heure au SCK. +Pour les enregistrements on passe par element/save, avec un traitement grace au fonction dans le model thing. + + +### Graphe (#thing.graph) + +Les données sont récupérer via l'API de Smartcitizen (api.smartcitizen.me/v0), la version de l'api est succeptible de changer, il faudra alors changer la constante Thing::URL_API_SC. +Les devices possèdent 9 sensors, pour obtenir les enregistrements (Température, Humidité, CO, NO2, Lumière, Bruit, Nombre de réseaux WLAN environnant, Batterie, et Panneau Photo-Voltaïque). +Le nombre de réseaux WIFI environnant n'est pas utilisé. + +#### Les requetes sur l'API + +Il faut faire une requete par sensor avec un rollup (temps séparant 2 enregistrement), une date de début et une date de fin. +La date de fin est l'heure actuelle en GMT. +La date de début est calculer, si le paramètre nbDays est utilisé dans la requète pour afficher la page graphe (par exemple : #thing.graphe?nbDays=20 , il y a une limite à 31 jours), sinon c'est un graphe sur une journée. C'est une fonctionnalité de substitution aux datepickers. + + +La page graphe utilise D3.js pour construire les graphes. Chaque sensor a son SVG dédié, si plusieurs devices sont dans la même zone, les données sont afficher sur le mème graphe. Pour l'instant la zone c'est même code postale et même country, on devra faire un filtrage par niveau par la suite (Région département). + +#### Bouton de selection de graphe +Tous les graphes sont construit une seul fois au chargement de la page. Les boutons cache les graphes et montre ceux qui sont selectionnés, le dernier bouton affiche tous les graphes. + +#### Légende +La légende permet d'être redirigé vers le device sur site officiel des SCK : smartcitizen.me/kits/[deviceId] + + +### Page des dernières valeur enregistré +Affiche les dernièrs enregistrement du SCK. + +Fonctionnalité qui pourra permettre d'ajouter valeurs dans des POD. + + +### Page de gestion (#thing.manage) + +Cette page à pour but de faire la liaison entre les enregistrements reçu dans notre base, et le device qui les envois. En effet, les devices n'ont pas connaissance de leur deviceId. Sur smartcitizen, cette liaison est faite lors de l'enregistrement du kit sur la plateforme. +Nous avons besoin de la même liaison dans notre base de données, celà permet au utilisateurs ou nous même (si on limite l'accès au administrateurs) de renseigné l'adresse mac du kit. + + +### Base de données + +[Une estimation de la capacité nécessaire](https://docs.google.com/spreadsheets/d/1E5_lm-dEw28Vq176nwduC9KgFOfZzYbgjU2mWfJxYRo/edit?usp=sharing) + diff --git a/views/thing/graph.php b/views/thing/graph.php index c43ff5f7..3f3482d1 100644 --- a/views/thing/graph.php +++ b/views/thing/graph.php @@ -607,7 +607,7 @@ function getDate( element ) { //TODO : Adapter la largeur des graphe à l'écran de l'utilisateur for ( var i = 0; i< listDevice.length ; i++) { - var urlReq="https://api.smartcitizen.me/v0/devices/"+listDevice[i]+"/readings?sensor_id="+sensorId+"&"+tRollup+"&from="+dXnISO+"&to="+dXmISO; + var urlReq="/devices/"+listDevice[i]+"/readings?sensor_id="+sensorId+"&"+tRollup+"&from="+dXnISO+"&to="+dXmISO; var sensorkey = ""; //console.log(urlReq); From 86ea1ea4acab9ae9dc5fc89290e27e310c5401ce Mon Sep 17 00:00:00 2001 From: Danzal974 Date: Fri, 24 Mar 2017 22:29:26 +0400 Subject: [PATCH 03/24] =?UTF-8?q?=09modifi=C3=A9=C2=A0:=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20views/thing/graph.php?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- views/thing/graph.php | 37 +++++++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/views/thing/graph.php b/views/thing/graph.php index 3f3482d1..2d7fb8e4 100644 --- a/views/thing/graph.php +++ b/views/thing/graph.php @@ -1,13 +1,11 @@ getClientScript(); - // if(!Yii::app()->request->isAjaxRequest) - // { + $cssAnsScriptFilesModule = array( '/plugins/d3/d3.v3.min.js', '/plugins/d3/c3.min.js', '/plugins/d3/c3.min.css', '/plugins/d3/d3.v4.min.js', - //DatePicker + /*/DatePicker '/plugins/bootstrap-datepicker/js/bootstrap-datepicker.js' , '/plugins/bootstrap-datepicker/js/locales/bootstrap-datepicker.fr.js' , '/plugins/bootstrap-datepicker/css/datepicker.css', @@ -15,15 +13,17 @@ //DateTime Picker '/plugins/bootstrap-datetimepicker/js/bootstrap-datetimepicker.js' , '/plugins/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.fr.js' , - '/plugins/bootstrap-datetimepicker/css/datetimepicker.css', + '/plugins/bootstrap-datetimepicker/css/datetimepicker.css',*/ ); HtmlHelper::registerCssAndScriptsFiles($cssAnsScriptFilesModule, Yii::app()->request->baseUrl); - // } + $params = CO2::getThemeParams(); + $layoutPath = 'webroot.themes.'.Yii::app()->theme->name.'.views.layouts.'; //header + menu $this->renderPartial($layoutPath.'header', array( "layoutPath"=>$layoutPath , + "type" => "all", "page" => "thing") ); ?> @@ -51,6 +51,7 @@ $infoSensorsDeviceOk=false; //todo : mutiliser les pois en objet sig, au lieu de construire des objets foreach ($devicesMongoRes as $mdataDevice) { + $devices[]=$mdataDevice; $sigDevicesForContextMap[]=array('geo' => $mdataDevice['geo'],'typeSig'=>'poi', @@ -72,10 +73,11 @@ } } -}; - +} +//print_r($sigDevicesForContextMap); +//$this->renderPartial("./thingMap"); //print_r($devices); ?> @@ -538,12 +540,13 @@ function showSCKDeviceOnMap(country,cp){ console.log("montrer sur la carte"); //console.log(country+" "+cp); - var contextDeviceMap= ; - //console.log(contextDeviceMap); - Sig.showMapElements(Sig.map, contextDeviceMap); + + //console.log(contextDeviceMap); + //mapThing = Sig.loadMap('mapCanvas'); + //Sig.showMapElements(Sig.map, contextDeviceMap); showMap(true); - $('#ajax-modal').modal("hide"); + //$('#ajax-modal').modal("hide"); } /* @@ -584,6 +587,12 @@ function getDate( element ) { jQuery(document).ready(function() { + contextDeviceMap= ; + console.log("Sig.map : "); + console.log(Sig.map); + //Sig.showMapElements(Sig.map, contextDeviceMap); + + setTitle("Mesures","line-chart"); if(devices.length>0){ @@ -612,7 +621,7 @@ function getDate( element ) { //console.log(urlReq); - $.ajax({ + /*$.ajax({ //exemple api GET https://api.smartcitizen.me/v0/devices/1616/readings?sensor_id=7&rollup=4h&from=2015-07-28&to=2015-07-30 type: 'GET', @@ -641,7 +650,7 @@ function getDate( element ) { //console.log(data); } - }).done(function() {setAxisXY(svgG,sensorkey); }); + }).done(function() {setAxisXY(svgG,sensorkey); }); */ } From 2548cfbd3cdc54fdc811af63c8e822018c36a9a0 Mon Sep 17 00:00:00 2001 From: Danzal974 Date: Mon, 27 Mar 2017 08:44:56 +0400 Subject: [PATCH 04/24] modif thing/manage --- views/thing/manage.php | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/views/thing/manage.php b/views/thing/manage.php index d66ca349..a5cb01b4 100644 --- a/views/thing/manage.php +++ b/views/thing/manage.php @@ -26,22 +26,20 @@
- ". - "
"; - - //echo $mdataDevice['deviceId']."
\n"; - //echo $mdataDevice['_id']."
\n"; - } - - }?> + $devices[]=$mdataDevice; ?> +
+ '> + + ' id='mac-sck'> + ' readonly> + +
+ - From 6e29d26a099392c92a398d5ec3af33d85cb88239 Mon Sep 17 00:00:00 2001 From: Danzal974 Date: Tue, 28 Mar 2017 16:27:09 +0400 Subject: [PATCH 05/24] =?UTF-8?q?=09nouveau=20fichier=C2=A0:=20assets/js/t?= =?UTF-8?q?hing/graph.js=20=09modifi=C3=A9=C2=A0:=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20config/CO2/params.json=20=09modifi=C3=A9=C2=A0:=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20docs/specs/Thing.md=20=09modifi=C3=A9=C2=A0:=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20views/thing/graph.php=20=09modifi=C3=A9?= =?UTF-8?q?=C2=A0:=20=20=20=20=20=20=20=20=20views/thing/index.php?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/js/thing/graph.js | 273 +++++++++++++++++++++++++++ config/CO2/params.json | 4 +- docs/specs/Thing.md | 2 +- views/thing/graph.php | 385 +++++++++------------------------------ views/thing/index.php | 5 +- 5 files changed, 360 insertions(+), 309 deletions(-) create mode 100644 assets/js/thing/graph.js diff --git a/assets/js/thing/graph.js b/assets/js/thing/graph.js new file mode 100644 index 00000000..db70b16e --- /dev/null +++ b/assets/js/thing/graph.js @@ -0,0 +1,273 @@ + +// Fonctions pour cacher et montrer les graphe + function showAllGraph(){ $(".graphs").show(); } + + function showGraph(figGraph){ $("#"+figGraph).show(); } + + function hideAllGraph(){ $(".graphs").hide(); } + + function hideGraph(figGraph){ $("#"+figGraph).hide(); } + +// +function setSVGForSensor(sensor) { + + var svgId = "sensor"+sensor; + var figGraph = "graphe_"+sensor; + var gId = svgId+"_g"; + //console.log(svgId); + + var svgObj = d3.select("#"+figGraph) + .append("svg").attr("width",svgwidth).attr("height",svgheight) + .attr("viewBox","0 0 "+svgwidth+" "+svgheight) + .attr("preserveAspectRatio","xMidYMid meet") + .attr("class","col-sm-12 svggraph") + .attr("id", svgId); //.style("visibility","hidden"); + var g = svgObj.append("g").attr("transform", "translate(" + gmargin.left + "," + gmargin.top + ")").attr("id", gId); + + var captionSensor = d3.select("#"+figGraph).append("figcaption").text("Graph of sensor "+infoSensors[svgId].name+" ("+infoSensors[svgId].description+")"); + + var objGraph = {svgid : svgId, + svg : svgObj, + mesure : {description : "", unit : "" }, + dimension : { width : +gwidth, + height : +gheight, + margin : gmargin }, + gid : gId , + domain : {Yn : vYn, Ym : vYm, Xn : vXn, Xm : vXm , domainInitialized : false}, + devices : [], + divgraphid : figGraph, + urlReqApi : "", + }; + + //console.dir(objGraph); + //Voir si on peu ce passer de la mise en tableau + var indexObjGraphe = (multiGraphe.push(objGraph)) - 1 ; + //console.log(indexObjGraphe); + return indexObjGraphe; +} + +function setLegend(deviceId,strkCol){ + +console.log(strockeColorArray); + + var idIM='icnmin_'+deviceId; + var idTL= 'textdevice_'+deviceId; + // var stId = "sCol_"+deviceId; + console.log(deviceId); + console.log(idIM); + //console.log(stId); + var legendILSC=" SCK device "+deviceId+""; + + // var iconMinus = ""; + + var dLegend = d3.select("#legend").append("div").attr("id","legend_"+deviceId).attr("class","col-sm-12 col-xs-12"); + dLegend.append("span").html(legendILSC); + + +} + +function showLegendGraph( ){ + + +} + + +function updateTheDomain(xArray,yArray,indexGraphe){ + var yChanged = false; + var xChanged = false; + var Yn = multiGraphe[indexGraphe].domain.Yn; + var Ym = multiGraphe[indexGraphe].domain.Ym; + var Xn = multiGraphe[indexGraphe].domain.Xn; + var Xm = multiGraphe[indexGraphe].domain.Xm; + + if( yArray[0] < Yn || Yn == 0) { + multiGraphe[indexGraphe].domain.Yn = yArray[0]; yChanged = true; } //min + if( yArray[1] > Ym || Yn == 0) { + multiGraphe[indexGraphe].domain.Ym = yArray[1]; yChanged = true; } //max + if( yChanged == true || multiGraphe[indexGraphe].domain.domainInitialized == false ) { + y.domain([multiGraphe[indexGraphe].domain.Yn,multiGraphe[indexGraphe].domain.Ym]); } + + if(xArray[0].valueOf() < Xn.valueOf() ){ + multiGraphe[indexGraphe].domain.Xn = xArray[0]; xChanged = true;} + if(xArray[1].valueOf() > Xm.valueOf() ){ + multiGraphe[indexGraphe].domain.Xm = xArray[1]; xChanged = true;} + + if( xChanged == true || multiGraphe[indexGraphe].domain.domainInitialized == false ) { + x.domain([multiGraphe[indexGraphe].domain.Xn,multiGraphe[indexGraphe].domain.Xm]); + multiGraphe[indexGraphe].domain.domainInitialized=true; + } + +} + +function setAxisXY(indexGraphe,sensorkey){ + //console.log(indexGraphe); + + var gId = multiGraphe[indexGraphe].gid; + var g = d3.select("#"+gId); + var xAxisId="xAxis"+ multiGraphe[indexGraphe].svgid; + var yAxisId="yAxis"+ multiGraphe[indexGraphe].svgid; + var height = multiGraphe[indexGraphe].dimension.height; + + d3.select("#"+xAxisId).remove(); // TODO refaire la selection sur le graphe sensor + d3.select("#"+yAxisId).remove(); + + g.append("g") + .attr("id", xAxisId) + .attr("class", "theAxis") + .attr("transform", "translate(0," + gheight + ")") + .call(d3.axisBottom(x)) + /* + .append("text") + .attr("fill","#000") + .attr("x", gwidth) + .attr("text-anchor","end") + .text("time")*/ + ; + + var sensorkunit = sensorkey+" "+infoSensors[multiGraphe[indexGraphe].svgid].unit ; + //console.log(sensorkunit); + g.append("g") + .attr("id", yAxisId) + .attr("class", "theAxis") + .call(d3.axisLeft(y)) + .append("text") + .attr("fill","#000") + .attr("transform", "rotate(-90)") + .attr("y", 8) + .attr("dy", "0.71em") + .attr("text-anchor","end") + .text(sensorkunit) + ; + + +} +//TODO : réglé le pb de color utiliser find dans array +function setStrokeColorForDevice(device) { + + var stId = "sCol_"+device; + if (strockeColorArray[stId] != null ) + { + strockeColor = strockeColorArray[stId]; + //console.log("strockeColor alreadySet: "+strockeColor); + } else + { // || strockeColorArray["sCol_"+device] ) { + strockeColor = "rgb("+Math.floor((Math.random()*220)+1)+","+ + Math.floor((Math.random()*220)+1)+","+ + Math.floor((Math.random()*220)+1)+")"; + //console.log("new strockeColor :"+strockeColor); + //stId = "sCol_"+device ; + + strockeColorArray[stId]=strockeColor; + //console.log(strockeColorArray); + setLegend(device,strockeColor); + + } + + return strockeColor; +} + +function fillArrayWithObjectTimestampsAndValues(readings){ + var d=[]; + readings.forEach( + function(item){ + var ts = new Date(); + ts.setTime(Date.parse(item[0])); + ts.setSeconds(0) + item[1] = +item[1]; + d.push({timestamps : ts, values : item[1]}); + } + ); + return d; +} +/** +@function tracer +@strockeColor +*/ +function tracer(da,device,sensor,strokeColor="blue", indexGraphe,strokeWidth=1.5){ + + var g = d3.select("#"+multiGraphe[indexGraphe].gid); + + var gpathId = "gpId_"+device+multiGraphe[indexGraphe].svgid; //ex : gpId_4162sensor17 + var graphClassSensor = "gcs_"+sensor; + g.append("path") + .datum(da) + .attr("fill", "none") + .attr("class", graphClassSensor) + .attr("id", gpathId) + .attr("stroke", strokeColor) + .attr("stroke-linejoin", "round") + .attr("stroke-linecap", "round") + .attr("stroke-width", strokeWidth) + .attr("d", line); +/* + g.append("text") + .datum(function(d){ return {id: d.id, value: d.values[d.values.length - 1]}; }) + .attr("transform", function(d) { return "translate(" + x(d.value.date) + "," + y(d.value.temperature) + ")"; }) + .attr("x", 3) + .attr("dy", "0.35em") + .style("font", "10px sans-serif") + .text(function(d) { return d.id; });*/ +} + +function graphe(device,sensors,readings,svgG){ + + var de = fillArrayWithObjectTimestampsAndValues(readings); + + var xMinMax = d3.extent(de, function(d){return d.timestamps;}); + var yMinMax = d3.extent(de, function(d){return d.values;}); + + updateTheDomain(xMinMax,yMinMax,svgG); + strkCol = setStrokeColorForDevice(device); + + tracer(de,device,sensors,strkCol,svgG); + +} + + + +function showSCKDeviceOnMap(country,cp){ + console.log("montrer sur la carte"); + //console.log(country+" "+cp); + + + + //console.log(contextDeviceMap); + //mapThing = Sig.loadMap('mapCanvas'); + //Sig.showMapElements(Sig.map, contextDeviceMap); + showMap(true); + //$('#ajax-modal').modal("hide"); + +} +/* + $( function() { + var dateFormat = "mm/dd/yy", + from = $( "#from" ) + .datepicker({ + defaultDate: "+1w", + changeMonth: true, + numberOfMonths: 3 + }) + .on( "change", function() { + to.datepicker( "option", "minDate", getDate( this ) ); + }), + to = $( "#to" ).datepicker({ + defaultDate: "+1w", + changeMonth: true, + numberOfMonths: 3 + }) + .on( "change", function() { + from.datepicker( "option", "maxDate", getDate( this ) ); + }); + + function getDate( element ) { + var date; + try { + date = $.datepicker.parseDate( dateFormat, element.value ); + } catch( error ) { + date = null; + } + + return date; + } + } ); +*/ diff --git a/config/CO2/params.json b/config/CO2/params.json index 9939c01d..270be24a 100644 --- a/config/CO2/params.json +++ b/config/CO2/params.json @@ -117,9 +117,9 @@ "useHeader" : true, "open" : true, "subdomain" : "thing", - "subdomainName" : "Données libres", + "subdomainName" : "Objets communectés", "hash" : "#thing", - "icon" : "line-chart", + "icon" : "database", "mainTitle" : "Les objets communectés", "placeholderMainSearch" : "Choisir parmis les objets ...", "lblBtnCreate" : "Ajouter un objet", diff --git a/docs/specs/Thing.md b/docs/specs/Thing.md index 1de83b7b..adbb1af9 100644 --- a/docs/specs/Thing.md +++ b/docs/specs/Thing.md @@ -1,7 +1,7 @@ # Thing Au delà des Smart-Citizen-Kit, thing pourrrait permettre d'intégrer les objets connecté à CO2. -Un point d'entrée est disponible à coté du bouton "actus", il est nommé "Données Libres" (on peut renommer en IoT ou Objets Connectés), l'icone est un line-chart. +Un point d'entrée est disponible à coté du bouton "actus", il est nommé "Objet connectés" (on peut renommer en IoT ou Objets Connectés), l'icone est un database. ## Smart-Citizen-Kit La view index permet d'accéder diff --git a/views/thing/graph.php b/views/thing/graph.php index 2d7fb8e4..a30a22d6 100644 --- a/views/thing/graph.php +++ b/views/thing/graph.php @@ -1,29 +1,31 @@ request->baseUrl); - $params = CO2::getThemeParams(); + //DateTime Picker + '/plugins/bootstrap-datetimepicker/js/bootstrap-datetimepicker.js' , + '/plugins/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.fr.js' , + '/plugins/bootstrap-datetimepicker/css/datetimepicker.css',*/ + + ); + HtmlHelper::registerCssAndScriptsFiles($cssAnsScriptFilesModule, Yii::app()->request->baseUrl); + + HtmlHelper::registerCssAndScriptsFiles( array('/js/thing/graph.js', ) , $this->module->assetsUrl); + + $params = CO2::getThemeParams(); $layoutPath = 'webroot.themes.'.Yii::app()->theme->name.'.views.layouts.'; //header + menu $this->renderPartial($layoutPath.'header', array( "layoutPath"=>$layoutPath , - "type" => "all", "page" => "thing") ); ?> @@ -105,6 +107,12 @@ width: 180px; z-index: 1; } + + #legend-graph { + color : black; + } + + .grid .tick { stroke: lightgrey; opacity: 0.7; @@ -113,28 +121,31 @@ stroke-width: 0; } - + #graph-container { + background-color: #fefefe; + } -
-
+ + +
+
- - +
+ + + + + +
@@ -145,9 +156,10 @@
- + + \ No newline at end of file diff --git a/views/thing/graph.php b/views/thing/graph.php index c17beb29..f04a5f4e 100644 --- a/views/thing/graph.php +++ b/views/thing/graph.php @@ -132,7 +132,11 @@ background-color: #fefefe; } +#graph-container{ + margin-top: 40px; + padding-top: 40px; +} diff --git a/views/thing/index.php b/views/thing/index.php deleted file mode 100644 index b52679f0..00000000 --- a/views/thing/index.php +++ /dev/null @@ -1,94 +0,0 @@ -getClientScript(); -//HtmlHelper::registerCssAndScriptsFiles( $cssAnsScriptFilesModule ,Yii::app()->request->baseUrl); - -$layoutPath = 'webroot.themes.'.Yii::app()->theme->name.'.views.layouts.'; - //header + menu - $this->renderPartial($layoutPath.'header', - array( "layoutPath"=>$layoutPath , - "page" => "thing") ); - -//tu auras "states":true si ta communexion est activée -//pour récupérer les valeurs de communexion tu a juste à faire ça : CO2::getCommunexionCookies(); -$boardIds = Thing::getDistinctBoardId(); -$deviceIds= Thing::getDistinctDeviceId(); - -$communexion = CO2::getCommunexionCookies(); - if($communexion["state"] == false){ - - }else{ - - } - -?> - - - -
-
-
-

Smart-Citizen-Kit

-

Il y a SCK communectés (BoardId différents, Double push)

-

Il y a SCK Enregistrés

-session["userId"]) )) { ?> -

Un administrateur peut gérer les SCK

- -
- -
-
    - - - - - session["userId"]) )) { ?> - - - - -
-
-
- -
- -renderPartial($layoutPath.'footer', array("subdomain"=>"thing")); ?> - - \ No newline at end of file diff --git a/views/thing/manage.php b/views/thing/manage.php index b4aa43da..759837b3 100644 --- a/views/thing/manage.php +++ b/views/thing/manage.php @@ -20,9 +20,23 @@ ?> + +
-

Pour mettre à jour l'adresse mac avec le deviceId du Smart-Citizen-kit

+

Pour mettre à jour la base communecter avec un compte smartcitizen.me

+

Si vous avez un compte smartcitizen.me vous pourrez mettre à jours les adresse mac de vos kit qui sont communectés (double push).

+

Pour avoir votre acces_token smartcitizen copier le + +

+
@@ -30,20 +44,21 @@

Pour mettre à jour l'adresse mac avec le deviceId du Smart-Citizen-kit

-
+
'> - - ' id='mac-sck'> - ' readonly> + + ' id='macsck'> + ' value='' readonly> +
- +
@@ -58,7 +73,7 @@ \ No newline at end of file diff --git a/views/thing/graph.php b/views/thing/graph.php index f04a5f4e..0e0ac5d5 100644 --- a/views/thing/graph.php +++ b/views/thing/graph.php @@ -83,7 +83,10 @@ //$this->renderPartial("./thingMap"); //print_r($devices); - +/* +if( Yii::app()->request->isAjaxRequest ){ + echo "
"."Ajax"; +}*/ ?> @@ -118,6 +121,9 @@ padding: 20px; margin: 20px } + #header-graph{ + + } .grid .tick { @@ -132,47 +138,46 @@ background-color: #fefefe; } -#graph-container{ - margin-top: 40px; - padding-top: 40px; - -} + request->isAjaxRequest) ){ ?> + #graph-container{ + margin-top: 40px; + padding-top: 40px; + } + -
-
-
- +
+
+ +
+ + + +
- +
- +
- - +
+
@@ -145,12 +173,12 @@ function getpageSCK(viewsThing){ - if (alReady==false) { + getAjax('#dropdown_thing',baseUrl+'/'+moduleId+"/thing/"+viewsThing, function(){ alReady=true; - setTimeout(function(){alReady=false; },3000 ); + setTimeout(function(){alReady=false; },2000 ); },"html"); - } + } @@ -185,6 +213,7 @@ function bindLeftMenuFilters () { }); $(".btn-select-category-1").off().on("click", function(){ + if (alReady==false) { $(".btn-select-category-1").removeClass("active"); $(this).addClass("active"); @@ -193,8 +222,10 @@ function bindLeftMenuFilters () { var page = $(this).data("page"); mylog.log("classType : "+classType); sectionKey = $(this).data("section"); + $("#title-menu-section").text(classType); $(".keycat").addClass("hidden"); + $(".keycat").removeClass("active"); $(".keycat-"+classType).removeClass("hidden"); if(sectionKey=="smartCitizen") { @@ -202,7 +233,8 @@ function bindLeftMenuFilters () { }else{ getpageCOPI(page); } - + + } }); $(".keycat").off().on("click", function(){ @@ -229,6 +261,7 @@ classToHide = smartCitizenSelector[classType][0]; jQuery(document).ready(function() { initKInterface({"affixTop":0}); bindLeftMenuFilters(); + //communexion=; /*var postalCode=; mylog.log("communexion postalCode : "); diff --git a/views/thing/graph.php b/views/thing/graph.php index 0e0ac5d5..c4457306 100644 --- a/views/thing/graph.php +++ b/views/thing/graph.php @@ -255,7 +255,7 @@ //Variable pour d3 et svg multiGraphe = [], strockeColorArray={}; - svgwidth = 800, svgheight = 450; //16:9 + svgwidth = 530, svgheight = 300; //16:9 gmargin = {top: 20, right: 30, bottom: 30, left: 40}; gwidth = +svgwidth - gmargin.left - gmargin.right; gheight = +svgheight - gmargin.top - gmargin.bottom; @@ -386,7 +386,7 @@ function initPageInterface(){ initKInterface({"affixTop":0}); $("#mainNav").addClass("affix"); - initPageInterface(); + //initPageInterface(); contextDevicesMap = ; diff --git a/views/thing/manage.php b/views/thing/manage.php index d697dd8d..b53a3c5c 100644 --- a/views/thing/manage.php +++ b/views/thing/manage.php @@ -16,7 +16,7 @@ ?> request->isAjaxRequest); @@ -41,7 +41,7 @@
-

Pour Mettre à jour les métadatas de la base communecter

+

Mettre à jour les métadatas de la base communecter

Si vous avez un compte smartcitizen.me vous pourrez mettre à jours les adresse mac de vos kit qui sont communectés (double push). Utiliser le token smarticitizen, pour plus d'information sur l'authentification et le token voir la page developper.smartcitizen.me.

@@ -58,26 +58,12 @@
-

Pour mettre à jour l'adresse mac avec le deviceId du Smart-Citizen-kit

+

Ajouter les adresses mac des Smart-Citizen-kit

- -
- '> - - - ' id='mac-sck-' value=""> - ' value='' readonly> - - - -
- - + + +
@@ -90,12 +76,6 @@ - From 74c9b476234ff46efbe0211bd3c8381b85a43863 Mon Sep 17 00:00:00 2001 From: Jean Daniel CAZAL Date: Tue, 9 May 2017 23:34:13 +0400 Subject: [PATCH 17/24] =?UTF-8?q?modifi=C3=A9=C2=A0:=20views/thing/graph.p?= =?UTF-8?q?hp=20modifi=C3=A9=C2=A0:=20views/thing/scklastestreadings.php?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- views/thing/graph.php | 3 +- views/thing/scklastestreadings.php | 290 +++++++++++------------------ 2 files changed, 111 insertions(+), 182 deletions(-) diff --git a/views/thing/graph.php b/views/thing/graph.php index c4457306..d0f061f1 100644 --- a/views/thing/graph.php +++ b/views/thing/graph.php @@ -406,10 +406,11 @@ function initPageInterface(){ var sensorsProcessed = 0; - +console.log(sckSensorIds); // fait un graphe par sensor et trace tous les devices sur le même graphe sensor sckSensorIds.forEach(function (item,index,array){ sensorsProcessed++; + console.log(item); for( var e in item) { diff --git a/views/thing/scklastestreadings.php b/views/thing/scklastestreadings.php index 9f3dbe21..fcdea6ca 100644 --- a/views/thing/scklastestreadings.php +++ b/views/thing/scklastestreadings.php @@ -1,28 +1,18 @@ request->baseUrl); - */ + + //$cs = Yii::app()->getClientScript(); $params = CO2::getThemeParams(); $layoutPath = 'webroot.themes.'.Yii::app()->theme->name.'.views.layouts.'; $isAjaxR=(Yii::app()->request->isAjaxRequest); + if(!$isAjaxR){ //header + menu @@ -30,25 +20,7 @@ array( "layoutPath"=>$layoutPath , "page" => "thing") ); } -?> - -0,'sensorsCheck'=>false, 'sckSensors'=>false, 'notInCODB'=>array()); @@ -69,11 +41,10 @@ } $devices = Thing::getSCKDevicesByLocality($country, $regionName, $depName, $cityName, null, null); + // Le type doit etre unique pour getSCKDeviceMdata findOne prend la première ocurrence : $sckMdataSensors = (array) (Thing::getSCKDeviceMdata(Thing::COLLECTION_METADATA,array("type"=>"sckSensors"))); -//var_dump($devices); -//$sckInfo['sckSensors']=settype($sckMdataSensors,'array' ); -//echo '
'; + $sckSensors=$sckMdataSensors['sckSensors']; $deviceByLocality = array(); @@ -89,8 +60,7 @@ if(isset($device['sensors']) && !empty($device['sensors']) && $sckInfo['sensorsCheck']==false){ $sckInfo['sensorsCheck']=true; $sensors = $device['sensors']; - //$array -//var_dump($sckSensors); + foreach ($sensors as $key => $sensor) { foreach ($sckSensors as $sckSensor) { //var_dump($sckSensor); @@ -101,11 +71,11 @@ } } } - //echo '
'; - //var_dump($sensors); + } if(isset($device['address'])){ + $newDevice= array("deviceId"=>$device['deviceId'],"name"=>$device['name'],"boardId"=>$device['boardId'], "sensors"=>array(),"timestamp"=>$device['timestamp'],"geo"=>$device['geo'],"latestCODB"=>array() ); // TODO ? : ajouter kit ? @@ -140,35 +110,8 @@ } -/* -if(!empty($devices)){$deviceId = reset($devices)['deviceId']; - - } - */ - -//$sckdevicemdata = Thing::getSCKDeviceMdata(Thing::COLLECTION,array("type"=>Thing::SCK_TYPE, "deviceId"=> strval($deviceId))); -//print_r($sckdevicemdata); -/* -echo "
\n"; -$sckmeasurements = Thing::getSCKDeviceMdata(Thing::COLLECTION,array("type"=>"sckMeasurements"))["sckMeasurements"]; -//print_r($sckmeasurements); -//boardId et deviceId namepoi -$boardId=$sckdevicemdata["boardId"]; -//echo $boardId; - -$record = Thing::getConvertedRercord($sckdevicemdata["boardId"],true,"2017-02-28"); -//$json = file_get_contents("https://api.smartcitizen.me/v0/devices/". $deviceId); - -//$lastReadDevice = json_decode($json ,true); -/*$lReadingsAPI = Thing::getLastedReadViaAPI($device); -$sensors = $lReadingsAPI["sensors"];// -*/ -//$sensors= $lastReadDevice["data"]["sensors"]; - - ?> -
-
+
- -
- + +
+ + +
@@ -294,7 +294,7 @@ //var listDevice = ; //console.log(listDevice); -// TODO : recuperer les sensor id pour chaque device par lastest readings API SC +// TODO : recuperer les sensor id pour chaque device par lastest readings API SC cad les donné de la base COmmunecter POI var sckSensorIds = [{bat : 17}, {hum : 13},{temp : 12},{no2 : 15}, { co: 16}, {noise : 7}, {solarPV : 18},{ambLight : 14 }, {nets : 21}]; diff --git a/views/thing/manage.php b/views/thing/manage.php index 18ca7742..d4dfa03a 100644 --- a/views/thing/manage.php +++ b/views/thing/manage.php @@ -97,24 +97,6 @@ \ No newline at end of file diff --git a/views/thing/graph.php b/views/thing/graph.php index 20c48ec6..61f29a43 100644 --- a/views/thing/graph.php +++ b/views/thing/graph.php @@ -1,33 +1,24 @@ request->baseUrl); - - HtmlHelper::registerCssAndScriptsFiles( array('/js/thing/graph.js', ) , $this->module->assetsUrl); - - $params = CO2::getThemeParams(); - - $layoutPath = 'webroot.themes.'.Yii::app()->theme->name.'.views.layouts.'; - //header + menu - $this->renderPartial($layoutPath.'header', - array( "layoutPath"=>$layoutPath , - "page" => "thing") ); +$cssAnsScriptFiles = array( + //'/plugins/d3/d3.v3.min.js', + //'/plugins/d3/c3.min.js', + //'/plugins/d3/c3.min.css', + '/plugins/d3/d3.v4.min.js' + ); +HtmlHelper::registerCssAndScriptsFiles($cssAnsScriptFiles, Yii::app()->request->baseUrl); + +$cssAnsScriptFilesModule = array('/js/thing/graph.js', ); + +HtmlHelper::registerCssAndScriptsFiles($cssAnsScriptFilesModule , $this->module->assetsUrl); +$params = CO2::getThemeParams(); + +$layoutPath = 'webroot.themes.'.Yii::app()->theme->name.'.views.layouts.'; +//header + menu +$this->renderPartial($layoutPath.'header', + array( "layoutPath"=>$layoutPath , + "page" => "thing") ); ?> 31) { $nbDays=31; } if(empty($country) || !isset($country)){$country='RE';} if(empty($postalCode) || !isset($postalCode)){$postalCode='0';} else if (is_int($postalCode)){$postalCode=strval($postalCode);} -$devicesMongoRes = Thing::getSCKDevicesByCountryAndCP($country,$postalCode); -$devices=array(); +//TODO remplacer par la function bylocality +$devicesMongoRes = Thing::getSCKDevicesByLocality($country,null,null,null,$postalCode); +//$devices=array(); //print_r($devicesMongoRes); $sigDevicesForContextMap = array(); $infoSensors=array(); $infoSensorsDeviceOk=false; + //todo : utiliser les pois en objet sig, au lieu de construire des objets foreach ($devicesMongoRes as $mdataDevice) { + //$devices[]=$mdataDevice; + $sigDevicesForContextMap[]= array('geo' => $mdataDevice['geo'], 'typeSig'=>'poi.'.Thing::SCK_TYPE, + 'name'=> "sck".$mdataDevice['deviceId'], '_id'=>$mdataDevice['_id'], 'type'=>Thing::SCK_TYPE, + 'address'=>$mdataDevice['address']); + + if(!$infoSensorsDeviceOk){ + $sensors=$mdataDevice['sensors']; + if(count($sensors)>=9){ + foreach ($sensors as $sensor) { + $infoSensors['sensor'.$sensor['id']] = array('id'=>$sensor['id'],'name' => $sensor['name'], + 'description'=>$sensor['description'],'unit'=>$sensor['unit']); + } + $infoSensors['timestamp']=$mdataDevice['timestamp']; + $infoSensors['kit']=$mdataDevice['kit']; + $infoSensorsDeviceOk=true; + } + } +} - $devices[]=$mdataDevice; - - $sigDevicesForContextMap[]= array('geo' => $mdataDevice['geo'], 'typeSig'=>'poi.'.Thing::SCK_TYPE, - 'name'=> "sck".$mdataDevice['deviceId'], '_id'=>$mdataDevice['_id'], 'type'=>Thing::SCK_TYPE, - 'address'=>$mdataDevice['address']); - - if(!$infoSensorsDeviceOk){ +/* +if( Yii::app()->request->isAjaxRequest ){ + echo "
"."Ajax"; +}*/ - $sensors=$mdataDevice['sensors']; - if(count($sensors)>=9){ - foreach ($sensors as $sensor) { - $infoSensors['sensor'.$sensor['id']] = array('id'=>$sensor['id'],'name' => $sensor['name'], - 'description'=>$sensor['description'],'unit'=>$sensor['unit'] ); - } - $infoSensors['timestamp']=$mdataDevice['timestamp']; - $infoSensors['kit']=$mdataDevice['kit']; +?> - $infoSensorsDeviceOk=true; - } - } + -
-
- -
- -
- - - - - - -
-
-
- -
- - - -
- - - - -
- - - - - - - - - - -
- -
-
-
-
- - +
+
+
+
+ +
+ + + + + + +
+
+
+
+ + +
+

module->assetsUrl ; ?>

+ +
+ + + + + + + + + +
+
+
+
+
+
+
+
- \ No newline at end of file diff --git a/views/thing/manage.php b/views/thing/manage.php index d4dfa03a..7a442abb 100644 --- a/views/thing/manage.php +++ b/views/thing/manage.php @@ -16,7 +16,7 @@ ?> request->isAjaxRequest); @@ -24,11 +24,11 @@ @@ -124,118 +117,114 @@ - +
- -renderPartial($layoutPath.'footer', array("subdomain"=>"thing")); ?> - +renderPartial($layoutPath.'footer', array("subdomain"=>"thing")); +} ?> \ No newline at end of file diff --git a/views/thing/manage.php b/views/thing/manage.php index 7a442abb..c78a9cda 100644 --- a/views/thing/manage.php +++ b/views/thing/manage.php @@ -12,11 +12,11 @@ "page" => "thing") ); - if(empty($country) || !isset($country)){$country='RE';} + if(empty($country)){$country='RE';} ?> request->isAjaxRequest); @@ -38,6 +38,8 @@ renderPartial($layoutPath.'footer', array("subdomain"=>"thing")); ?> + +

Mettre à jour les métadatas de la base communecter

From 1920b6a2dc7006a14a6b782746f91ced174fce0f Mon Sep 17 00:00:00 2001 From: Danzal974 Date: Thu, 1 Jun 2017 23:25:56 +0400 Subject: [PATCH 23/24] =?UTF-8?q?=09modifi=C3=A9=C2=A0:=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20assets/js/thing/graph.js=20=09modifi=C3=A9=C2=A0:=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20config/CO2/params.json?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/js/thing/graph.js | 4 +--- config/CO2/params.json | 3 ++- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/assets/js/thing/graph.js b/assets/js/thing/graph.js index e5500a24..90a86eb2 100644 --- a/assets/js/thing/graph.js +++ b/assets/js/thing/graph.js @@ -260,7 +260,7 @@ function grapheOneSensor(keySens,source, redraw) { } function fillArrayWithObjectTimestampsAndValues(readings, deviceid, sensorkey){ - mylog.log("- fillArrayWithObjectTimestampsAndValues(readings, device, sensorkey) "); + mylog.log("- fillArrayWithObjectTimestampsAndValues - "); dAPIsc[deviceid][sensorkey] = readings.map( function(item){ @@ -276,7 +276,6 @@ function fillArrayWithObjectTimestampsAndValues(readings, deviceid, sensorkey){ function dataSensorAdaptorTimestampsAndValues(convertedDataRecord,device){ mylog.log("--dataSensorAdaptorTimestampsAndValues--"); - console.time("dataSensorAdaptWithForEach"); var dataCOdb={temp : [], hum : [], bat: [], panel : [], no2 : [], panel : [], co : [], noise : [], nets : [], light : []}; convertedDataRecord.forEach( function(item){ var ts = new Date(); @@ -305,7 +304,6 @@ function dataSensorAdaptorTimestampsAndValues(convertedDataRecord,device){ } ); - console.timeEnd("dataSensorAdaptWithForEach"); dCOdb[device]=dataCOdb; for (ks in multiGraphe){ diff --git a/config/CO2/params.json b/config/CO2/params.json index f4a163b5..0702b1be 100644 --- a/config/CO2/params.json +++ b/config/CO2/params.json @@ -171,7 +171,8 @@ "hash" : "#app.thing", "icon" : "database", "mainTitle" : "Les objets communectés", - }, + "placeholderMainSearch" : "Les objets communectés ..." + } } From 99ce7ef1ea45cb2e66d57b22b1ec1c17fe67a837 Mon Sep 17 00:00:00 2001 From: Danzal974 Date: Thu, 15 Jun 2017 23:55:35 +0400 Subject: [PATCH 24/24] =?UTF-8?q?=09modifi=C3=A9=C2=A0:=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20docs/specs/Thing.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/specs/Thing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/specs/Thing.md b/docs/specs/Thing.md index 3d028cd1..329fa43e 100644 --- a/docs/specs/Thing.md +++ b/docs/specs/Thing.md @@ -17,7 +17,7 @@ Le kit pourrait être utilisé exclusivement avec Communecter, un serveur de tem #### Firmware Le firmware sck double push a été développé par Nicolas Grondin en s'inspirant des débuts de travaux de Jean Daniel CAZAL (Stagiaire). -Nicolas Grondin a par la suite amélioré la gestion de la FIFO (écriture et lectur en EEPROM) et la stabilité du firmware. +Nicolas Grondin a par la suite amélioré la gestion de la FIFO (écriture et lecture en EEPROM) et la stabilité du firmware. Avec le double push nous devons choisir une période d'envoi des enregistrements adéquat pour ne pas surcharger la base de données, pour l'instant ce "time update" est de 5 minutes (300 secondes). #### Coté serveur