août 13

Domotique et Intelligence : la communication

lacommunication

Quelques mois plus tôt, j’avais évoqué la nécessité de la connaissance pour un environnement domotique (cf. http://blog.guiguiabloc.fr/index.php/2014/01/04/domotique-et-intelligence-la-connaissance/)

J’aimerais maintenant aborder avec vous la deuxième partie, la communication.

A suivre l’actualité des constructeurs et les retours ou discussions des utilisateurs de domotique sur les blogs ou forums divers, j’ai l’impression assez désagréable de vivre à nouveau le même scénario qu’il y a plusieurs années quand l’informatique personnelle s’est généralisée auprès du grand public.

Tout le monde y va de son interface, de son protocole de communication, de sa box révolutionnaire, de ses structures http etc.. Bref, « c’est moi qui ait la bonne solution et les autres n’ont qu’a s’adapter ».

king

Alors heureusement, un peu d’intelligence à effleurer ce microcosme car la plupart des solutions « tout-en-un » intègre des api permettant d’interagir via des requêtes http.Ne vous réjouissez tout de même pas trop vite, chaque API est différente (REST (ou pas), SOAP (ou pas), LUA_API_QUEJESUISSEULEACOMPRENDRE(c), etc..)
Parce que s’il vous prend l’idée saugrenue (ou pas…) de faire discuter votre box Fibaro avec un RFXtrx branché sur votre VeraLite ou votre PC, vous allez y passer un peu de temps…

Ne soyez pas médisant, j’ai pris la solution la plus simple :D et ce n’est qu’un exemple très basique, j’aurais pu pousser le concept jusqu’à exiger que je puisse communiquer via mon smartphone avec Tasker qui appelle ma centrale MyFox, qui interroge le module fibaro relié à mon eedomus en fonction des sondes de températures dont les données remontent sur mon RFXCOM Lan en supposant que le module X10 relié à mon CM15 soit « on ».

why_trollcat

C’est complètement idiot, j’avoue, mais c’était un exemple un peu capillotracté du travail à fournir pour pouvoir faire discuter tout ses équipements entre eux.

Ne croyez pas que cela se borne à vos box domotiques, tout ceux qui ont un jour ajouter un serveur Asterisk pour gérer leur téléphonie a la maison se sont demandé « et comment que je discute entre ce serveur et ma box ???? »
Car oui mon bon monsieur, c’est la génération des objets connectés !!! Connectés, oui, mais à moi tout seul parce que le dialogue avec les autres, très peu pour moi !

Nous sommes tout les jours submergés de ces nouveaux objets qui doivent nous rendrent la vie plus facile, mais ne croyez pas qu’il va vous être facile de l’intégrer à votre monde, chacun parle sa propre langue et dans le terme « connecté » largement usité par les médias et les constructeurs, on parle rarement de communication, la faute à qui ?…

lol cat

Pour sauver ce petit monde de passionnés de domotique perdu dans les méandres d’un univers sourd et aveugle, il existe quand même des projets qui cherche à unifier ou interagir avec tout cela.

Nul besoin de vous présenter Imperihome qui risque fortement de devenir « LA » solution Android pour faire causer ensemble tout ça.

En protocole « natif », xPL (dont je suis un fervent défenseur :p (mais ça vous le savais déjà si vous êtes habitué de ce blog)), a du mal a se faire sa place malgré un concept simple et plutôt efficace.

Plus récemment, xAAL, prometteur, une grosse évolution de ce que l’on peut faire dans la communication des objets connectés et de la domotique en générale (quand on peut parler des copains :p  @jkxathome )

Bref, vous l’avez compris, quand on veut discuter simplement avec toutes nos passerelles domotiques ou nos objets connectés, cela devient vite très problématique parce qu’il faut tout changer selon avec qui vous souhaitez communiquer.

Dans mon billet précédent de cette « série », j’avais évoquer le fait que mon serveur domotique était une sorte de centralisateur des informations remontées par tout ce qui gravitait autout de lui.
Pour la communication, je suis partie du même constat.
Je ne veux pas m’adresser dans des langues différentes à chacun des périphériques, mais uniquement à une « porte d’entrée » et dans un langage compréhensible.

Un des exemples les plus démonstratifs est le dernier projet dont je vous avais fait part, api.domogeek.fr.
Vous envoyez une requête simple pour connaître une information basique et publique sans vous soucier des méthodes différentes d’appels uniques à chacune de ses informations (les dates de vacances scolaires, la vigilance météo etc…).

Dans votre environnement domotique, cela doit être la même chose.
Un point d’entrée unique, structuré, défini, qui se chargera de discuter ensuite dans le langage de chaque périphérique.

La meilleure façon de mettre cela en place est une API de type REST.

La mise en oeuvre est simple et à la portée de tous (surtout si vous avez décider d’utiliser un vrai langage comme python (troll inside).

Une fois déployé, il devient facile pour tout vos scripts, applications smartphones, etc… de faire appel à cette API pour communiquer avec vos équipements sans vous souciez de vous rappeler comment doit s’écrire la requête http vers tel ou tel module.

Prenons l’exemple du lancement d’une scène sur une VeraLite.

Si je dois interroger directement la VeraLite par http, ma requête ressemblera à cela :

http://vera:3480/data_request?id=lu_action&serviceId=urn:micasaverde-com:serviceId:HomeAutomationGateway1&action=RunScene&SceneNum=1

(facile à retenir, hein ? :p)

Imaginons maintenant que l’on écrive une simple fonction en python pour cela :

def setscene(device):
  url = 'http://vera:3480/data_request?'
  values = {'output_format' : 'text', 'id' : 'lu_action','serviceId': 'urn:micasaverde-com:serviceId:HomeAutomationGateway1', 'action' : 'RunScene', 'SceneNum' : device }
  try:
    data = urllib.urlencode(values)
    req = urllib2.Request(url+data)
    sendrequest = urllib2.urlopen(req)
    responsefromvera = sendrequest.read()
    if responsefromvera != "OK":
      return web.notfound()
      return "200 SUCCESS"
  except Exception, detail:
    print "Error ", detail

Maintenant, codons une API Rest toute bête (attention c’est du brut de fonderie bien crado) :

#!/usr/bin/python
# Gruik coded by GuiguiAbloc
import urllib, urllib2, web, re
def scenevera(device):
  url = 'http://vera.styx.net:3480/data_request?'
  values = {'output_format' : 'text', 'id' : 'lu_action', 'serviceId' : 'urn:micasaverde-com:serviceId:HomeAutomationGateway1', 'action' : 'RunScene','SceneNum' : device }
  try:
    data = urllib.urlencode(values)
    req = urllib2.Request(url+data)
    sendrequest = urllib2.urlopen(req)
    responsefromvera = sendrequest.read()
    if responsefromvera != "OK":
      return web.notfound()
      return "200 SUCCESS"
  except Exception, detail:
    print "Error ", detail
 
web.config.debug = False
 
urls = (
'/scene/(.*)', 'scenes'
)
 
render = web.template.render('templates/', globals={'re':re})
app = web.application(urls, globals())
 
class scenes:
  def POST(self,uri):
    request = uri.split('/')
    if request == ['']:
      return web.badrequest()
    if request[0]:
      device = request[0]
      try:
        result = scenevera(device)
        return "200 SUCCESS\n"
      except:
        web.notfound()
 
if __name__ == '__main__':
app.run()

Démarrez votre script (python monscript.py), il écoutera par défaut sur le port 8080 et lancer une requête http de type « POST » (avec surement le meilleur outil sous linux pour contruire des appels http de toutes sortes, cURL) :

curl -XPOST http://localhost:8080/scene/13

Et hop, magique, la scène 13 est lancée :)

Maintenant, vous avez une base de données MySQL (par exemple) dans laquelle vous stockez amoureusement toutes les valeurs de températures de vos sondes Oregon.
Interrogeons simplement la dernière valeur dans votre BDD de la même façon.

D’abord la fonction, on va imaginer que votre table « sensor » contient les colonnes « sensorRoom » qui défini le nom de votre sonde et « sensorValue », la valeur enregistrée :

...
import MySQLdb
...
def tempdb(ID):
  try:
    if ID == "salon":
      ID = "TempSalon"
    if ID == "exterieur" or ID == "dehors" or ID == "ext":
      ID = "TempExt"
    conn = MySQLdb.connect('localhost', 'mabase', 'login', 'motdepasse')
    cur = conn.cursor()
    cur.execute("SELECT sensorValue from sensor where sensorRoom='%s' ORDER BY idx DESC limit 1" % ID )
    result = cur.fetchone()
    return result[0]
 
  except MySQLdb.Error, e:
    print "Error %d: %s" % (e.args[0], e.args[1])
    return None
  conn.close()

On l’inclut dans notre API Python et l’on rajoute les appels :

...urls = (
'/scene/(.*)', 'scenes',
'/temp/(.*)', 'temp'
)
...
class temp:
  def GET(self,uri):
    request = uri.split('/')
    if request == ['']:
      return web.badrequest()
    if request[0]:
      room = request[0]
      try:
        result = tempdb(room)
        return result
      except:
        web.notfound()

On lance le tout et on fait un appel :

curl http://localhost:8080/temp/exterieur
16.5

C’est quand même plus simple, non ?

Voici 2 exemples basiques qui nous permettent de communiquer simplement via un point d’entrée à divers équipements de notre domotique.

Gardez le contrôle, toujours, de votre environnement. Quelque soit les objets, périphériques, modules communicants qui seront et feront la vie de votre domotique, il vous appartient de maîtriser la communication avec eux. Établissez un point d’entrée unique dont vous détiendrez la syntaxe et le langage sans devoir dépendre du bon vouloir d’un constructeur.
Changer de fournisseur ou de technos ne doit pas être plus dur que modifier quelques lignes de votre interface de communication sans revoir l’intégralité de votre interface web ou de votre application smartphone.

Et puisque je suis dans ma période lolcats sur ce billet…

161432646-1161414097812Amusez vous bien :D

Classé dans domotique | Taggé , , | 12 Commentaires
juil 03

DomoGeek, une API simple pour répondre aux questions simples

communication

A force d’utilisation de scripts et de scénarios domotique, je me suis rendu compte que des questions toutes simples avaient parfois du mal à trouver une réponse.

Prenons l’exemple d’un jour férié. Aujourd’hui est-il un jour férié ?

Cela peut paraitre idiot comme question, mais pour avoir la réponse, ce n’est pas si évident (en fait, c’est quand on travaille pas :p)

Pour un scénario domotique, ce genre d’information est importante (rien que pour gérer la surveillance ou le chauffage par exemple), et pour avoir la réponse, la plupart code un bon gros script qiu vas poller un google agenda dans lequel ils ont intégré le calendrier des jours fériés.

Maintenant, de quelle couleur est le jour TEMPO EDF ?

Pareil, on va coder des dizaines de lignes pour aller parser le site EDF et en ressortir la valeur.

Etc…

Bref, vous l’avez compris, à chaque fois, on doit, individuellement, écrire des scripts pour avoir des réponses à des questions toutes simples qui relève de l’information publique.

Et la je me suis dit, pourquoi ne pas offrir une simple API qui répond à ce genre de questions ?

J’ai soumis la question sur le forum de Toute la Domotique et les retours étant plutôt positif, je tente un petit POC pour voir si cela intéresse les gens.

Lancement donc de api.domogeek.fr :)

Pour le moment c’est pas du tout sec, ça ne répond qu’à 2 questions, jour férié et couleur Tempo, mais au fil du temps, je rajouterais d’autres fonctions (surtout si la demande se fait sentir :) )

Voilà l’idée que je pose là. Vous en faites ce que vous voulez (le code source est même disponible sur mon Github si vous voulez l’héberger sur votre RaspBerry par exemple), vous me dites si ça peut vous servir et surtout,

Amusez vous bien :D

Classé dans domotique | Taggé , , | 5 Commentaires
fév 17

Domotique : Valoriser et exploiter les données

domomoney

Ce n’est pas faute de vous le répéter, les données sont un des éléments essentiels de la domotique (et par nécessité, de l’informatique également).

Après quelques jours/mois/années d’utilisation de votre environnement domotique, vous vous êtes sûrement rendu compte de la quantité de données dont vous disposez et que, probablement, vous n’avez que faire ou que vous exploitez faiblement.

Cette quantité de données peut aussi devenir problématique à stocker et traiter au fil du temps, et vous avez fait le choix sage et délibéré d’en omettre une bonne partie (par exemple, le nombre de fois où l’interrupteur des toilettes est passé de ON à OFF).

Vous êtes un producteur de données diverses et variées, qui vont des valeurs des sondes de températures et d’hygrométrie de votre domicile et de son extérieur, de la vitesse du vent, de la consommation d’eau, d’électricité, de fioul, de gaz, de la valeur de Co2 dans les pièces, du nombre de fois ou un module s’est activé etc… Bref, vous disposez d’un nombre conséquent de valeurs.

Vous, vous êtes industriel, vous concevez et vendez des modules à greffer derrière les interrupteurs et cela vous intéressez sûrement de savoir combien de fois votre module est activé dans une journée et combien de temps il dure. Ou vous êtes constructeur de maison BBC et après les examens concluants, vous seriez intéressé de connaitre le ratio température intérieure/extérieure/consommation énergétique de cette (ces) maison(s) au fil des années.

Bref, vous vous rendez bien compte qu’il existe un chemin de rencontre entre les producteurs de données et les consommateurs de ses données.

Ce point de rencontre, il prend désormais forme par l’entremise de CityzenData, la division « données » du groupe Cityzen Sciences. Il était destiné initialement à répondre aux besoins du consortium SmartSensing pour la gestion des données produites par des capteurs insérés dans des vêtements.

Je vous en avez déjà parlé il y a quelques mois (twitter, blog, forums) en vous interpellant sur le fait de garder un oeil dessus.

Le CTO de CityzenData ne doit pas vous être inconnu si vous suivez l’actualité informatique puisqu’il s’agit de Mathias Herberts, un des pionniers du BigData en France, mais aussi un copain et ancien collègue de travail.
Et quand Mathias m’a proposé de faire « joujou » avec leur plateforme, bien évidemment j’ai répondu présent (même si je suis plus scripteur que développeur, c’est toujours agréable :D )

Une fois enregistré sur la plateforme Cityzendata, vous disposez de 3 tokens.

- Un token « écriture » vous permet de pousser des données
- Un token « lecture » vous permet de lire uniquement les données liées à votre application
- Un token « lecture générale » peut lire toutes les données que vous avez produites indépendamment de l’application.

A cela est communiqué une url d’API endpoint pour pousser vos données, une autre pour les exploiter (ou pour que d’autres les exploitent).

  • Envoyer vos données

Basiquement, avant d’écrire votre propre code, cela fonctionne par un simple POST HTTP :

curl -i -H « Le_Header_Token: votre_token_ecriture » -H « Content-Type: text/plain » -d ‘// temperature{piece=tempsalon} 20′ http://url_endpoint

Et voila, vous venez d’intégrer une valeur comportant un timestamp (une valeur de temps) en microsecondes dans votre « application », sous la classe Temperature avec comme dénomination pièce est égale à tempsalon et la valeur est de 20.

C’est bien évidemment l’insertion la plus simple, vous pouvez y mettre votre propre timestamp, la latitude, la longitude et l’élévation en plus si vous le souhaitez. Car les données ont aussi la faculté d’être géo-temporelles.

Un peu de code plus tard, et je me suis écrit mon client xPL pour pousser automatiquement les données sur la plateforme de CityzenData.
En résumé, toutes les trames de mes sondes (température, hygrométrie, consommation électrique) qui transitent par mon bus xPL sont automatiquement transmises sur la plateforme.

Ce client, vous le trouverez sur mon github :

https://github.com/guiguiabloc/xPL-PyHAL/blob/master/tools/xPL-CityzenData.py

(ce client a besoin d’un fichier de paramètres, config.sonde (présent dans le dépôt github),qui fait le lien entre le code ID du module et le nom que vous souhaitez donné aux labels).

  • Traiter vos données

Pour récupérer, manipuler et traiter les données présentes sur la plateforme, CityzenData a développé un langage appelé Einstein. C’est un langage de programmation orienté pile, un peu comme le Forth.
Voici par exemple mon script einstein qui me permet de récuperer toutes les valeurs consommation électrique :

'Votre_token_lecture'
'=energy'
0 ->MAP
'2014-02-08T00:00:00.000000Z'
'2015-01-01T00:00:00.000000Z'
5 ->LIST
FETCH

Ou uniquement les valeurs de températures à l’extérieur depuis le 09 février.

'votre_token_lecture'
'=temperature'
'room'
'=exterieur'
2 ->MAP
'2014-02-09T10:00:00.000000Z'
'2015-01-01T00:00:00.000000Z'
5 ->LIST
FETCH

Comme pour l’insertion de données, une requête http exécute einstein sur la plateforme

curl –data-binary @guigui.einstein http://api_einstein

Le résultat est au format json :

[[{"c":"temperature","l":{".app":"domotique.guigui","room":"exterieur"},"a":{},"v":[[1391940411191000,7.1],[1391940368152000,7.1],[1391940325145000,7.1],[1391940282146000,7.1],[1391940239143000,7.2],[1391940196144000,7.2],[1391940153143000,7.2],[1391940024140000,7.2]]}]]

Pour gérer tout cela en Python :

import urllib
import urllib2
import sys
import json
 
einstein = open('energy2.einstein', 'r')
data = einstein.read()
url =  'http://api_einstein'
req = urllib2.Request(url, data, {'Content-Type': 'application/octet-stream'})
dataeinstein = json.load(urllib2.urlopen(req))
 
map = {}
for item in dataeinstein[0][0]['v']:
map[item[0]] = item[1]
print map
 
# si cherche une valeur pour un timestamp donné
data = {}
data = map
temp = data[1391931523551000]
print temp

Il y a bien entendu beaucoup de fonctions incluses dans einstein que ce simple exemple et ce billet ne suffirait pas à toutes les expliquer.

Maintenant que je vous ai présenté tout cela, en quoi cela vous concerne ?

Vous êtes producteur de données, outre le fait de disposer d’une plateforme de stockage et de traitement hors normes, vous pouvez mettre à disposition des consommateurs des données qui peuvent les intéresser, et être rémunéré en conséquence.

Vous êtes consommateur, vous disposez de sources de données multiples et variées sur lesquelles vous pouvez appliquer des modèles de calculs et de traitement.

Je vous laisse visiter leur site pour plus d’explications et la façon de les contacter si vous êtes intéressé.

J’imagine déjà certains d’entre vous agiter fièrement le drapeau de la protection de ses données personnelles et du grand méchant cloud, mais il va falloir rapidement que vous rationalisiez tout cela.
Tout d’abord, c’est vous qui décidez des données que vous mettez à disposition et si le température de votre salon vous semble être une notion totalement privée, alors oui, ce billet ne vous concerne pas.

Ensuite, c’est par le partage que l’on fait avancer les choses. Si je peux donner à Fibaro (pour en citer un au hasard), la durée de vie de son module (qui tombe en panne par exemple après 67789 utilisations), et qu’il revoit sa copie, alors oui ça m’intéresse.

En espérant vous avoir ouvert les yeux sur la façon dont on peut valoriser et exploiter des données de domotique,

Amusez vous bien :)

Classé dans domotique | Taggé , | 6 Commentaires
jan 04

Domotique et Intelligence : la connaissance

connaissance

Ce qui rend une installation domotique digne de ce nom, c’est la capacité qu’a ce système à interagir avec votre environnement mais surtout,  je pense,  a connaître ce qui l’entoure et de disposer d’informations lui permettant d’offrir une réaction ou une proposition en corrélation avec votre besoin de l’instant présent.

Quand j’ai abordé la domotique, j’en avais eu plus une vision d’intelligence artificielle à mon service que d’un simple concept d’électronique/informatique appliqué aux objets.
Sûrement parce que les gens de ma génération ont (re)découvert « 2001, L’odyssée de l’espace » et surtout HAL 9000 et s’en sont fait un Graal de ce qu’aller devenir l’informatique dans le futur.

Prendre cette voie a profondément modifié ma perception de ce que devait  être mon système domotique mais surtout sa construction et son déploiement.
Je n’ai pas eu l’approche conceptuelle qui était de rendre mon environnement « contrôlable » mais d’intégrer une nouvelle entité virtuelle en son sein.
Cette démarche, que j’espère vous présentez au fil de quelques billets au gré de mon humeur et de ma motivation ;) , donne à la domotique un nouveau sens qui, bien que cela demande plus de travail, apporte un oeil différent de cette « maison de demain » si chère à nos fournisseurs/intégrateurs/revendeurs.

Le terme « intelligence artificielle » me semble beaucoup trop présomptueux et souvent galvaudé pour l’utiliser,  je parlerais donc surtout d’ « intelligence » au sens large du terme et d’entité pour tenter de vous présenter mon approche.

alixearticleLe système mis en place chez moi s’appelle A.L.I.X.E (Automation Layer for Interact and eXchanging with Environment).

(pour l’anecdote (oui je sais que vous en êtes friand), quand j’attendais mon enfant, je souhaitais une fille, et j’avais déjà prévu de la prénommer Alixe. J’ai eu un garçon (rassurez-vous je n’ai pas de regret :D ), mais le prénom est resté dans mon subconscient et c’est l’entité de la maison qui en a hérité (oui c’est obsessionnel un geek ;) )

C’est un serveur dédié a cela. Quand j’utilise le terme « serveur » c’est uniquement pour avoir une vue « physique » de la chose. C’est un système d’exploitation, basé sur Debian, peaufiné et modifié pour répondre aux besoins (kernel, sécurité, stack reseau, file descriptor , executables, etc…, bref tout ce qui fait que vous optimisez votre serveur pour un rôle précis), disposant de son propre shell (sa ligne de commande) que j’ai développé au fil du temps avec un mélange de python et d’erlang, de son centralisateur d’évènements (dont j’ai sorti un version plus légère pour tous, xPL-PyHAL), d’un système de procédure de raisonnement, mais aussi de sa possibilité d’agréger des sources d’informations diverses et variées et d’en tirer sa quintessence pour les exploiter.
Un coeur de l’entité reproductible car c’est une simple image disque, autonome et déployable en quelques minutes si elle devait se déplacer.
Elle dispose de rôles et de prérogatives clairement définis que, dès le début, j’ai tenté de consigner dans un cahier des charges et d’explications, qui fait aujourd’hui plus de 200 pages… et qui, je pense, ne sera (re)lu que par moi mais qui m’ont forcé dès le début à rester au plus près de la voie que je m’étais fixé.

La conception habituelle de la domotique est d’avoir, dans la majorité la plus répandue des cas, une box domotique sur laquelle on contrôle ses périphériques (interrupteurs, capteurs etc…) et auxquels on applique des scénarios (« s’il fait nuit et qu’il y a un mouvement dans la cage d’escalier, allume la lumière du couloir du haut et du bas », pour les plus simples).
C’est un fonctionnement abordable par tous, simple (si on maitrise un tant soit peu les nouvelles technologies), immédiatement opérationnel (après avoir connecté tout ses modules) et donnant des résultats plus que satisfaisant.

Toute cette très longue introduction pour aborder la notion de connaissance dans votre environnement domotique.

connaissance2Une des choses les plus importantes, que ce soit en informatique ou en domotique, c’est la donnée.

A ce sujet, je vous invite grandement, avant tout,  à regarder la keynote de Mathias Herberts à l’IFREMER (avec qui j’ai eu le plaisir de travailler et qui m’apporte, encore,  des vues et des échanges plus qu’intéressants) dans laquelle il aborde, simplement, le rôle de ses données :

Votre système domotique ne peut être performant que si ces données sont importantes, pertinentes et variées mais surtout, s’il en a l’accès et la connaissance.

Lors de la rédaction de mon suivi de déploiement, il m’a semblé nécessaire d’y inclure une partie « connaissance », que l’on pourrait résumer simplement par « Ce que je sais ».

Que « sait » votre système domotique à l’instant T ? Quelles connaissances a t’il de son environnement au moment où vous le solliciter ? Bref, que connais l’entité pour apporter la réponse qui vous satisfait le mieux ?

La connaissance, aujourd’hui, est, du moins par chance dans notre pays, accessible à tous. Quelle que soit la question que vous vous posez, un moteur de recherche internet vous donnera une multitude de sources d’informations vous permettant d’acquérir cette connaissance (à vous bien sûr d’être assez objectif pour faire le tri de ce flot d’informations), et surtout de savoir rapidement se cantonner a sa demande ;) (tout le monde a eu cette bizarre expérience de chercher une information sur quelque chose et de se retrouver à lire d’autres articles très éloignés du sujet principal (va savoir pourquoi aujourd’hui je lisais avec intérêt la définition du dizaote alors qu’à la base je cherchais une information sur un réalisateur de cinéma…)

Cette connaissance, c’est à vous de l’apporter a votre système et de savoir s’il y en a suffisamment pour que sa réaction soit la même que vous auriez eu.

Un des tests les plus simples à faire (et que je fais souvent avec ALIXE) est « Que sais-tu ? »

Voici par exemple un extrait d’une simple réponse donnée à l’écriture de ce billet :

DANS L'ENSEMBLE, JE SAIS QUE :
Il fait nuit , et nous  sommes en week-end
Aucun mouvement exterieur détecté depuis plus de 1 heure
Le dernier appel téléphonique reçu était le 0298  à 16h32
Tu es présent dans la maison ainsi que Madame et Junior
Tu n'es pas dans ta voiture et pas au travail
Tu n'es pas en RTT, ni Madame
Parmi les parents, personne n'est en congés ou en RTT 
Junior est en vacances scolaires
Nous consommons actuellement 1341 Watts 
Aujourd'hui, nous avons consommé 423 Litres d'eau
Et depuis le dernier relevé, nous avons consommé 34266 Litres d'eau
L'alarme est désactivée
DANS LE SALON
Dans le salon, il y a quelqu'un
Cette personne est Madame
L'halogène du salon est allumé ainsi que la télévision
Les fenêtres sont fermées
Il y fait 20 degrés 
DANS LE BUREAU
Dans le bureau, il n'y a personne
La fenêtre est fermée
Il y fait 19.8 degrés 
L'onduleur est sur secteur et consomme 507 Watts 
L'accès à internet est opérationnel

C’est une très petite extraction de ce qu’ALIXE peut ressortir de ses connaissances de l’instant T.

Elle est rendu possible parce qu’elle dispose de nombreuses sources d’informations qui ensuite sont ingérées par le système.
La box domotique Zwave (une VeraLite) est une de ses sources (et n’est pas considéré comme le contrôleur principal mais comme un fournisseur de flux), les sondes de températures, une autre, nos agendas gmail, les tags NFC, les smartphones, le récepteur RFXCOM 433 Mhz, les capteurs de mouvements, d’ouvertures, les caméras de surveillances, les bornes wifi, etc…

Tout est source d’informations et est envoyée ou reçue par ALIXE.

Ces données informatives sont ou durables dans le temps  par nécessité d’exploitation future (les valeurs des sondes de températures et d’hygrométrie par exemple) et sont stockées dans une base de données, ou purement volatiles (l’état d’une lumière ou si je suis dans la voiture par exemple) et là elle sont stockées dans un Memcached en tant que clé/valeur (clé:guiguienvoiture valeur:non).

ALIXE ne fait qu’interroger ses données pour mettre à jour ses connaissances à l’instant T.

Vous utilisez Memcached, vous avez un simple serveur http apache avec php, une page toute bête du genre

<?php
$memcache = new Memcache;
$memcache->connect('localhost', 11211) or die ("Connexion impossible");
$get_halogenesalon = $memcache->get('halogenesalon');
if ($get_halogenesalon=="on")
$halogenesalon="allumé";
else
$halogenesalon="éteint";
$memcache->close();
?>
 
DANS LE SALON :
L'halogène du salon est <?php echo $halogenesalon ; ?>

Et vous avez une idée des connaissances de votre système domotique.

En ne considérant que tout les équipements domotiques de la maison n’étaient que des extensions de l’entité (les box/contrôleurs compris), cela a profondément modifié la façon d’interagir avec l’environnement mais surtout de simplifier l’interaction et les connaissances qu’elle pouvait avoir.

Aujourd’hui, je ne suis pas dépendant d’une technologie, d’une box, ou d’un protocole parce que tout cela n’est qu’un élément, une main d’ALIXE.
Tout son « réseau » de données lui donne les connaissances nécessaires pour savoir, quand c’est le moment, l’état presque complet de son environnement.

Si vous décidez de pousser plus loin le concept de votre domotique personnelle (ou même dans l’état actuel de votre installation), prenez à coeur d’essayer de recenser les connaissances qu’à votre système de votre environnement. Cet état de connaissance poussera beaucoup plus loin les possibilités de scénarios que vous pourriez demander à votre système et pourra même vous suprendre par les lacunes qu’il peut avoir.

Quand l’état de connaissance de l’environnement s’approchera très fortement (voir le dépassera dans la plupart des cas, sinon à quoi servirait la domotique ;) ), de ce que VOUS savez, la phase d’interaction n’en sera que plus perspicace et efficace.

Mais ça, c’est pour un prochain billet :)

Classé dans domotique | 13 Commentaires