Recherche

Votre recherche de tv a donné 3995 résultats.

C

Vous avez franchi la première étape qui est l'arduinisation de votre télécommande pour ouvrir vos volets ? Voici la seconde étape qui consiste à automatiser l'ouverture et la fermeture de vos volets aux horaires du lever et du coucher du soleil.

J'utilise pour cela un simple fichier NodeJS se basant sur les deux librairies suivantes :

  • Cron pour l'automatisation de tâches
  • Suncalc pour le calcul des horaires de lever et coucher du soleil.

Le programme réalisé est très simple, il programme un job Cron au prochain coucher ou lever du soleil. Le job se limite à réaliser un appel HTTP au service REST exposé par l'Arduino sur lequel est connecté la télécommande des volets. Dès lors que le job se termine, il programme une nouvelle tâche à l'inverse de la tâche qu'il vient d’effectuer.

/**
 * DomoGeeek v0.1
 * https://github.com/ltoinel/domogeeek
 *
 * Copyright 2014 DomoGeeek
 * Released under the Apache License 2.0 (Apache-2.0)
 *
 * @desc: Task that opens and closes my shutters

 */


var request = require('request');
var CronJob = require('cron').CronJob;
var SunCalc = require('suncalc');
       
//Local require
var config = require('../config');
var multipush = require('../../../libs/multipush');

/**
 * Initializes a new Cron job.
 *
 * @param name : the job name
 * @param uri : the uri to request
 * @param timeFunction : the time function to call
 * @param date : the date
 */

function initJob(name, uri, timeFunction, date){
       
        var time = timeFunction(date);
        console.log("Job initializing : " + name + " at " + time);
       
        var job = new CronJob(time,
       
        // OnTick
        function(){
               
                console.log("Job starting : " + name);
               
                request.get(uri).on('error', function(err) {
                        console.error("Shutter API error : " + err);
                });
               
                multipush.send(config.multipush,"Job starting",name,config.shutters.channel);
               
                // Stop the current job
                this.stop();
               
        // OnCompleted
        },function(){
               
                console.log("Job stop : " + name);
               
                // Schedule the next job
                scheduleNextJob(name);

        }, false, config.timezone).start();
}

/**
 * Schedules the next jobs.
 *
 * @param previousJobName The previous job name
 */

function scheduleNextJob(previousJobName){
       
        // If the previous job was closing the shutters
        if (previousJobName == config.shutters.close.message) {
               
                // Schedules the task that will open the shutters tomorrow
                initJob(config.shutters.open.message, config.shutters.open.url, getOpenTime, getTomorrowDate());

        // If the previous job was opening the shutters
        } else if (previousJobName == config.shutters.open.message){
               
                // Schedules the task that will close the shutters today
                initJob(config.shutters.close.message, config.shutters.close.url, getCloseTime, new Date());
        }
}

/**
 * Return the date of tomorrow.
 */

function getTomorrowDate(){
        var today = new Date();
        var tomorrow = new Date();
        tomorrow.setDate(today.getDate()+1);
        return tomorrow;
}

/**
 * Return the times regarding the configured latitude and longitude.
 *
 * @param date : the date to use for the times calculation.
 */

function getTimes(date){
        var times = SunCalc.getTimes(date, config.shutters.latitude, config.shutters.longitude);
        return times;
}

/**
 * Return the next time in cron format to open the shutters.
 *
 * @param date : the date to use for the sunrise calculation.
 */

function getOpenTime(date){

        // Fix configured time
        if (config.shutters.open.time !== undefined){
                return config.shutters.open.time;
        }
       
        var times = getTimes(date);
        console.log("Get sunrise time for " + date + " => " + times.sunrise);
       
        return times.sunrise.getSeconds()+" "+times.sunrise.getMinutes()+" "+times.sunrise.getHours()+" * * *";
}

/**
 * Return the next time in cron format to close the shutters.
 *
 * @param date : the date to use for the sunset calculation.
 */

function getCloseTime(date){
       
        // Fix configured time
        if (config.shutters.close.time !== undefined){
                return config.shutters.close.time;
        }
       
        var times = getTimes(date);
        console.log("Get sunset time for " + date + " => " + times.sunset);
       
        return times.sunset.getSeconds()+" "+times.sunset.getMinutes()+" "+times.sunset.getHours()+" * * *";
}

// Starts the right job now
var now = new Date();
var times = getTimes(now);

// Sunrise will arrive today, we have to open the shutters today
if (times.surise > now){
        initJob(config.shutters.open.message, config.shutters.open.url, getOpenTime, new Date());
}
// Sunrise was previous, sunset will arrive today, we have to close the shutters today
else if (times.sunset > now ){
        initJob(config.shutters.close.message, config.shutters.close.url, getCloseTime, new Date());
       
// Sunrise and sunset are past, we have to open the shutters tomorrow
} else if (times.sunset < now ){
        initJob(config.shutters.open.message, config.shutters.open.url, getOpenTime, getTomorrowDate());
}

Le fichier de configuration nécessaire au bon fonctionnement du programme :

// Shutters task service
config.shutters = {};
config.shutters.enabled = true;
config.shutters.latitude = 47.2;
config.shutters.longitude = -1.5;
config.shutters.open = {};
config.shutters.open.time = '0 0 9 * * *'; // If not set, use the sunset time
config.shutters.open.message = 'Ouverture automatique des volets';
config.shutters.open.url = 'http://xxx.xxx.xxx.xxx/up';
config.shutters.close = {};
//config.shutters.close.time = '0 0 22 * * *'; // If not set, use the sunrise time
config.shutters.close.message = 'Fermeture automatique des volets';
config.shutters.close.url =  'http://xxx.xxx.xxx.xxx/down';
config.shutters.channel =  'openkarotz';

Ce bout de code est OpenSource, vous pouvez l'enrichir et proposer des améliorations via GitHub.

mqttorg-glow.png

Connaissez-vous le MQTT ? Il s'agit d'un standard OASIS permettant de simplifier la communication machine à machine (M2M), idéalement conçu pour l'Internet des objets.

MQTT is a machine-to-machine (M2M)/"Internet of Things" connectivity protocol. It was designed as an extremely lightweight publish/subscribe messaging transport. It is useful for connections with remote locations where a small code footprint is required and/or network bandwidth is at a premium. For example, it has been used in sensors communicating to a broker via satellite link, over occasional dial-up connections with healthcare providers, and in a range of home automation and small device scenarios. It is also ideal for mobile applications because of its small size, low power usage, minimised data packets, and efficient distribution of information to one or many receivers.

C'est sympa, mais cela signifie quoi dans la pratique ?

Et bien cela ressemble à un bus d’événement très simple à contacter sur lequel des producteurs et des consommateurs de message peuvent s'abonner.

broker.png

Il existe de nombreuses implémentations de broker MQTT sur Internet. L'un des plus simples à utiliser est très certainement Mosca, une implémentation NodeJS de MQTT ultra-configurable et adaptable à tout besoin. Quelques lignes de code Javascript permettent d'instancier son propre serveur MQTT.

Pour des besoins plus lourds, notamment l'exposition REST/COAP des objets, il est possible d'utiliser Eclipse Ponte une surcouche de Mosca actuellement en incubation à la fondation Eclipse.

architecture-ponte.png

Ensuite si vous souhaitez ajouter de l’intelligence à votre broker MQTT, la solution la plus simple est de connecter une instance Node-Red à votre broker MQTT.

node-red-screenshot2.png

Vous pourrez créer les scénarios de votre choix, orchestrer des actions dès lors qu'un certain événement arrive sur le broker ...

C'est autour de ces deux produits que je suis en train de revoir l'architecture de mon logiciel de domotique pour les geeks : Domogeeek. Une branche de développement a été créée spécifiquement pour la migration. Le gros avantage du MQTT est que les producteurs de messages et les consommateurs peuvent être répartis sur différentes machines.

Je vous tiendrai au courant de mes avancements, une v1.0 devrait bientôt voir le jour dès que tous les modules auront été migrés.

je-suis-un-choix-banner.jpg

Petit coup de pouce à Vincent Quester, un ami qui participe au festival de film Nikon et qui a de super idées. Il a tourné un court métrage avec Blaise Moulin, un super comédien qui me fait bien rire.

Dans le court métrage, Blaise, petit franchouillard moyen, a du succès avec les femmes et ne sait pas leur dire non. Il apprendra pourtant, à ses dépens, que c'est en s'affirmant qu'on évite les pires situations.

nikon-je-suis-un-choix.jpg

Si la vidéo vous plait, n'hésitez pas à les soutenir !

gdg-paris-2015.jpg

Le prochain Devfest parisien aura lieu le 30 janvier prochain à l'ECE Paris.

Au programme de cet événement :

  • 300+ participants de tous horizons.
  • 20+ heures de pure technologie Google.
  • 20+ speakers de France et au delà.
  • 4 tracks en parallèle : web, mobile, cloud, discovery.

L'entrée coûte 10€. Plus d'informations sur les différents speakers à venir.

http://devfest.gdgparis.com

smart-energy-meter-chart.png

Après le Karotz qui parle quand vous dépassez un certain seuil de consommation d'énergie, voici une solution simple pour produire soit même des graphes de consommation électrique.

La première étape est d'installer sur votre tableau électrique un Z-Wave Smart Energy Meter de chez Aeon. Celui-ci est proposé à un tarif avoisinant les 100€ et diffuse des rapports de consommation en Z-Wave à intervalle régulier.

La seconde étape consiste à capturer les paquets Z-Wave et à les enregistrer dans une base NoSQL. Pour cela vous pouvez utiliser mon module "ZwaveBus" disponible sur Gitbub, celui-ci fonctionne parfaitement sur un petit Raspberry équipé d'un dongle Z-wave.

aeon-labs-compteur-de-consommation-electrique.jpg

Il vous suffira ensuite de ne laisser que le listener "power.js" qui prend en charge les messages Z-Wave provenant du Smart Energy Meter. Il faudra au préalable vous assurer du "nodeid" de votre Smart Meter, vous pourrez le découvrir au premier lancement du module "ZwaveBus".

Enfin, vous pouvez garder que les quelques lignes de code suivantes si vous n'avez pas de Karotz à faire parler ou clignoter.

/**
 * We listen for a COMMAND_CLASS_METER event.
 * This event is sent by the Aeon HEM2 power energy meter.
 */

bus.on(COMMAND_CLASS_METER, function(nodeid, value){

         if (nodeid == 7 && value['label'] == "Power"){
               
                // Saving the event into the mongoDB
                new Event({ nodeid: nodeid,
                    comclass: comclass,
                    type: value['type'],
                    label: value['label'],
                    value: value['value']}).save();
               
        }
});

Une fois l'application NodeJS démarrée (node app.js) et la base mongoDB démarrée, le module expose un Webservice REST simplement accessible au travers de l'URL suivante :

http://ip-de-votre-machine:9094/data/Power?date=2014-12-30

Le paramètre "Power" correspond aux types de rapports qui sont sauvegardés dans la base MongoDB et qui sont nécessaires pour la production de graphe.

Pour fabriquer un graphe de votre consommation d'électricité journalière, il suffira de créer la page Web suivante :

<html>
<head>
 <link rel="stylesheet" href="http://cdnjs.cloudflare.com/ajax/libs/morris.js/0.5.1/morris.css">
 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
 <script src="http://cdnjs.cloudflare.com/ajax/libs/raphael/2.1.0/raphael-min.js"></script>
 <script src="http://cdnjs.cloudflare.com/ajax/libs/morris.js/0.5.1/morris.min.js"></script>
</head>
<body>

<div id="powerChart" style="height: 900px; width: 100%"></div>

<script>

console.log("Appel du service JSON");

$.ajax({
  dataType: "json",
  url: "http://ip-de-votre-machine:9094/data/Power",
  success: drawChart
});

function drawChart(data){
        console.log("Affichage du résultat");

        new Morris.Area({
          // ID of the element in which to draw the chart.
          element: 'powerChart',
          // Chart data records -- each entry in this array corresponds to a point on
          // the chart.
          data: data,
          // The name of the data record attribute that contains x-values.
          xkey: 'date',
          // A list of names of data record attributes that contain y-values.
          ykeys: ['value'],
          // Labels for the ykeys -- will be displayed when you hover over the
          // chart.
          labels: ['value'],
          // Filleds area opacity.
          fillOpacity: 0.2,
          // Smooth lines.
          smooth : true,
          // Point size.
          pointSize : 1,
          // Max value
          ymax : 12000,
          // Label suffix all y-labels.
          postUnits: "W",
          hideHover : true,
        });
}
</script>

</body>
</html>

Cette page appelle le Webservice exposés par l'application "ZwaveBus" permettant de récupérer la liste des rapports stockés au sein de la base MongoDB et les transmet au script "morris.js" qui se charge de produire un graphique dynamique.

Vous voilà outillé pour analyser vos consommations électriques dans le détail et identifier quels sont les appareils qui surconsomment de l'énergie. Vous découvrirez peut-être que vous n'avez pas le bon abonnement EDF et qu'un abonnement avec une puissance plus faible pourrait être suffisant pour vos besoins.

Mon projet Domogeeek (box domotique NodeJS sur Raspberry) avance petit à petit, mon dernier hack est de faire parler mon Karotz quand ma maison consomme trop d'électricité.

J'ai pour cela installé un compteur d'électricité Z-Wave HEM2 de chez Aeon directement sur mon installation électrique. J'ai connecté la pince ampérométrique du module directement sur la phase arrivant sur mon panneau, ce qui me permet d'obtenir la consommation électrique exacte de la maison.

aeon-labs-compteur-de-consommation-electrique.jpg

J'ai ensuite développé en quelques lignes de code un plugin Javascript pour le module ZwaveBus de mon projet Domogeeek.

Ce module de quelques lignes est capable de faire parler le Karotz dès qu'un rapport de consommation est transmis par le module de chez Aeon sur la base des paramètres d'émission de rapport définis.

/**
 * DomoGeeek v0.1
 * https://github.com/ltoinel/domogeeek
 *
 * Copyright 2014 DomoGeeek
 * Released under the Apache License 2.0 (Apache-2.0)
 *
 * @desc: Power module for the Aeon HEM2 power energy meter
 */

 
// Local require
var bus = require( '../bus' );
var config = require('./../config');
var openkarotz = require('../../../libs/openkarotz');

// The command to listen
var COMMAND_CLASS_METER = 50;

// RGB to Hex
function rgbToHex(r, g, b) {
    return ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
}

/**
 * We listen for a COMMAND_CLASS_METER event.
 * This event is sent by the Aeon HEM2 power energy meter.
 */

bus.on(COMMAND_CLASS_METER, function(nodeid, value){

        if (nodeid == 7 && value['label'] == "Power"){
                var power = value['value'];
                console.log("Saving the power value : " + power);
               
                // Max possible consume is 12000 Wh
                var n = power / 12000 * 100;
                var red = (255 * n) / 100;
                var green = (255 * (100 - n)) / 100;
                var blue = 0;
               
                var color =  rgbToHex(red,green,blue);
                console.log("Color :  " + color);
               
                // Change the OpenKarotz led
                openkarotz.led(config.openkarotz, color);
               
                // Make the OpenKarotz talking
                openkarotz.talk(config.openkarotz, "La maison consomme "+ power + " Watt");
               
        }
});

En plus de faire parler le lapin, le module est capable de faire changer la couleur de la LED du lapin. Vert signifie une consommation faible et rouge signifie une consommation importante.

C'est ludique et cela permet de connaitre la consommation des appareils que l'on allume. Il est aussi possible de donner en temps réel le coût de l'énergie par heure. Il suffit pour cela de diviser la consommation en Watt par 1000 et de la multiplier par 0,13 pour avoir un prix en euro.

3000 Watt sur une heure = 3 Kwh = 3 x 0,13 euros = 0,39 €/h = 0,39 x 24 x 365 = 3416 € / an

Dans l'exemple ci-dessous, mon ballon d'eau chaude vient tout juste de s'allumer, ce qui explique la consommation importante. Voici en vidéo, le rendu du plugin, il est aussi possible de faire tourner les oreilles du lapin lors de la réception d'un rapport.

bird-lab-visuel.jpg

Du 24 novembre 2014 au 31 mars 2015, participez à une vaste expérience scientifique nommée BirdLab organisée par VigieNature. Première opération de sciences participatives associant jeu et observation sur smartphone, son objectif est de collecter des informations sur les comportements de nourrissage des oiseaux en hiver.

Pour participer à cette expérience grandeur nature, il vous faut trois éléments :

  • Deux mangeoires de format A4 que vous devrez fabriquer et positionner dans un jardin avec un écartement de 1 m à 2 m .
  • Des graines de tournesol.
  • Un smartphone équipé de l'application mobile Birdlab (iOS ou Android)

Une fois prêt, vous pourrez grâce à l'application mobile, comptabiliser les oiseaux venant manger sur la mangeoire et transmettre toutes les données récoltées à des scientifiques qui analyseront les données pour en déduire des comportements.

Les questions auxquelles l'expérimentation permettra de fournir des réponses sont nombreuses :

  • Quels sont les comportements des oiseaux à mangeoire ?
  • Un oiseau préfère-t-il se nourrir là où d’autres congénères sont déjà présents ou préfère-t-il s’isoler ?
  • Comment les espèces coopèrent-elles ?
  • Existe-t-il des comportements de compétition ou de coopération entre individus ou entre espèces ?
  • L’habitat influence-t-il ces comportements ?

Si vous avez un petit espace dans votre jardin et un peu de temps, n'hésitez pas à participer à cette initiative ludique.

Pour en savoir plus sur cette expérience, rendez-vous sur le site de VigieNature.

À vos mangeoires !

Vous avez certainement déjà entendu parlé de Bitcoin et de cryptomonnaie, mais savez-vous réellement comment fonctionnent ces nouvelles monnaies basées sur de la cryptographie ?

Voici certainement l'une des vidéos les plus didactiques qui explique le fonctionnement du Bitcoin et de beaucoup d'autres cryptomonnaies.

Si jamais la vidéo précédente vous a donné envie d'en savoir plus, une seconde vidéo beaucoup plus longue et complète a été publiée par le même auteur :

Enfin, si le sujet vous intéresse, un article très complet sur le fonctionnement du Bitcoin est disponible sur le blog de l'auteur de cette vidéo. Cet article a été traduit dans différentes langues, il ne manque qu'une traduction française de l'article pour le rendre accessible à tous.

bon-cadeau-amazon.png

Voici un plan de secours si jamais vous êtes en manque d'idée pour Noël : Le bon d'achat Amazon

Les bons sont soit à envoyer par email ou à imprimer. C'est une bonne solution de repli si jamais vous rendez compte à la dernière minute qu'il vous manque un ou plusieurs cadeaux.

La valeur des bons est configurable, le minimum est de 10€. Une imprimante et une enveloppe et le tour est joué !

Les bons cadeaux Amazon sont disponibles ici.

Vous suivez peut-être l'actualité autour des cryptomonnaies, le marché est de plus en plus complexe. Le nombre de monnaies disponibles croit énormément, aujourd'hui on peut retrouver plus de 500 cryptomonnaies référencées sur Coinmarketcap.

Il y a quelques mois encore, les cryptomonnaies pouvaient être dénombrées simplement. Suite à l'explosion du marché du Bitcoin en fin d'année 2013, l'engouement des personnes autour ses monnaies alternatives a fait explosé le secteur, segmentant ainsi le marché. Malgré cela, le Bitcoin reste la monnaie leader du marché avec 4,5 Milliards de Dollars, cependant la place de second peut encore évoluer.

Les investissements sur les marchés des cryptomonnaies restent très incertains, ceux qui ont acheté du Bitcoin en début d'année doivent s'en souvenir encore. Le Bitcoin a été élu "pire investissement de l'année 2014" par Quartz, juste devant le Rouble.

the-worst-of-the-worst-decline-in-2014_chartbuilder.png

Les seules monnaies qui progressent sont celles qui innovent, un exemple est le Darkcoin qui a énormément progressé grâce son mode d’anonymisation total des transactions.

Malheureusement, mais c'est cela qui fait leur valeur, toutes ces monnaient cryptographiques sont polluantes à fabriquer car elles nécessitent énormément d'électricité. SolarCoin surfe sur l'écologie pour proposer une monnaie alternative 100% issues d'énergie solaire.

La valeur d'une cryptomonnaie est indexée entre l'offre et la demande et son coût de fabrication en électricité, chaque cryptomonnaie possède une notion de "profitabilité" qu'il est intéressant de regarder dès lors que l'on souhaite miner des cryptomonnaies. La profitabilité actuelle des cryptomonnaies les plus avantageuses à miner tourne autour de 60%, cette profitabilité nécessite cependant un investissement matériel de plus en plus important pour permettre d'obtenir un gain.

L'univers de la cryptomonnaie est passionnant, avec le temps, le marché des cryptomonnaies majoritaires devrait se stabiliser offrant ainsi un placement intéressant face à la fluctuation de nombreuses monnaies réelles.