Ma solution DIY de domotique

Parce que les applications du Raspberry Pi sont illimités...

Modérateur : Francois

destroyedlolo
Raspinaute
Messages : 1587
Enregistré le : dim. 10 mai 2015 18:44
Localisation : Dans la campagne à côté d'Annecy
Contact :

Ma solution DIY de domotique

Message par destroyedlolo » dim. 21 juin 2015 14:21

Salut,

Une petite présentation de la solution "Domotique" totalement fait main ... Je laisse le modo la déplacé ailleurs si nécessaire car comme ça reprend un peu tous les sujets, je n'ai pas su où la mettre :oops: .

D'abord un schéma d'architecture :
Image

Précédemment, j'utilisais une solution centralisée basée sur des web services (Domestik, symbolisé par l'ordi avec le stéthoscope), mais ce n'est pas très efficace lorsque l'on souhaite afficher des infos sur plusieurs machines (dashboard, pluggin sur les ordi, TV, ...). Ce programme reste utilisé pour superviser mes différents ordinateurs, historise les données et génèrent des graphismes.

Dorénavant, le cœur du système est un bus de messages MQTT avec le très connu broker open-source Mosquitto : ainsi, je peux échanger des données vraiment en temps réel, avec autant de producteurs et de consommateurs que nécessaire avec un impact minim sur les perfs de l'ensemble.

Ce bus est alimenté par des démons dont les principaux sont :
  • Téléinfod symbolisé par un petit ... démon sur le haut et que j'ai déjà présenté sur ce forum pour la production et la conso électrique
  • Marcel symbolisé par le lapin, qui récupère les infos des sondes de mon bus 1wire, les stats de l'onduleur, de la freebox. Je travaille pour qu'il m'envoie des SMS en cas d'alerte (genre température de l'aquarium hors limites, batterie de l'onduleur faible, défaillance d'une machine, ...). Il n'est pas impossible que je controle aussi des actionneurs par la suite ;)
  • je prévois aussi de déporter certaines sondes sur des ESP qui enverraient directement leur données vers le broker MQTT. Pour les endroits où tirer un bus 1wire serait difficile
Les données sont accessibles par l'interface web de Domestik, soit en temps réel sur les écrans de mes PC par des plugin conky. Et je suis en train de bosser sur un dashboard avec un écran LCD contrôlé par un BananaPro pour remplacé ma station météo qui vient de lâcher. Le projet est bien avancé. c'est très léger car programmer en C, j'utilise DirectFB pour ne pas avoir à charger X et les dashboard eux mêmes sont des scripts Lua pour plus de flexibilité.

Le bus et la majorité des démons fonctionnent sur mon BananaPI sans problème : la charge CPU est négligeable tout comme l’empreinte mémoire. Tous est open source et devrait se compiler sans problème sur Raspberry ou autre ... sauf pour la conso/production électrique car la framboise n'a qu'un Uart.

Voili, voila, si vous avez des questions, n'hésitez pas. Comme je le disais, c'est 100% opensources donc si d'autres veulent tenter l'aventure et/ou ajouter des trucs, bienvenue :mrgreen:
  • BananaPI : Gentoo, disque SATA de 2 To
  • Domotique : 1-wire, TéléInfo, Tablette passée sous Gentoo, ESP8266
  • Multimedia par DNLA
  • Et pleins d'idées ... et bien sûr, pas assez de temps.
Un descriptif de ma domotique 100% fait maison.

Avatar du membre
Manfraid
Modérateur
Messages : 1402
Enregistré le : ven. 3 oct. 2014 14:50
Contact :

Re: Ma solution DIY de domotique

Message par Manfraid » dim. 21 juin 2015 22:47

Salut. Superbe présentation cependant il faudrait un peu plus de détail pour les personnes ayant déjà quelque connessance
NAS : DIY OS Debian: DD250Go + 3x2To + 6To
Raspberry pi : 2B OS : Raspbian
Se tromper est humain, Vraiment foutre la merde nécessite le mot de passe de root.

destroyedlolo
Raspinaute
Messages : 1587
Enregistré le : dim. 10 mai 2015 18:44
Localisation : Dans la campagne à côté d'Annecy
Contact :

Re: Ma solution DIY de domotique

Message par destroyedlolo » lun. 22 juin 2015 01:01

Bonjour et merci de ton intérêt.

L'état d'avancement peut être vu sur cette page de mon site avec les liens vers mes outils.

Côté technique,
  • Domestik est un outils de supervision à la Nagios mais en beaucoup beaucoup plus léger. Y'a encore beaucoup de taf a faire pour atteindre le niveau d'un BigBrother ou d'un Nagios, mais il suffit à mes besoins et n’écroule ni mon serveur, ni le réseau (ceux qui jouent avec Nagios me comprendront :lol:). C'est principalement du PHP avec un base PostgreSQL et les échanges avec les machines supervisées se font en webservice.
  • Teleinfod est un démon qui converti les trames téléinfo des compteurs EDF collectées sur les Uart du banana avec un classique convertisseur de niveau, en messages MQTT. J'en avais parlé ici. Il est écrit en C et est multi-threadé ce qui fait que si un des flux est bloqué, le reste continu de fonctionner.
  • Marcel, lui aussi écrit en C, récupère les valeurs des sondes 1wire exposées grâce à owfs pour les publier aussi en tant que messages MQTT . En fait, il pourrait utiliser n'importe quelle valeurs accessibles par un fichier ... donc quasiment tout sous Unix.
  • J'ai aussi mis en ligne un exemple de client MQTT pour Conky.
  • je bosse actuellement sur la couche technique de mon futur dashboard : Séléné. Toujours du C en utilisant la fameuse librairie Paho en mode asynchrone : il y aura donc un thread qui s'occupera de toutes la partie "interface utilisateur", alors que les messages arrivent sur un second thread. C'est un peu "touchy" car il faut gérer l'accès concurrent aux données et faire communiquer les 2 threads ensemble. Ca avance doucement mais sûrement ... sauf pour la Doc :mrgreen:
Le tous fonctionne depuis quelques semaines maintenant et la charge CPU dépasse rarement les 5% ... et quand c'est le cas, c'est à cause des visites sur mon site. Sachant aussi que mon Banana sert aussi de DNLA avec mediatomb, et de tête de réseau (DHCP, DNS, NTP, ...).

J'espère que ça éclaircie un peu ce que je fais ... mais n'hésitez pas si vous avez des questions ... ou des suggestions :mrgreen:
Modifié en dernier par destroyedlolo le dim. 25 oct. 2015 12:35, modifié 1 fois.
  • BananaPI : Gentoo, disque SATA de 2 To
  • Domotique : 1-wire, TéléInfo, Tablette passée sous Gentoo, ESP8266
  • Multimedia par DNLA
  • Et pleins d'idées ... et bien sûr, pas assez de temps.
Un descriptif de ma domotique 100% fait maison.

Korhm
Raspinaute
Messages : 232
Enregistré le : ven. 19 sept. 2014 08:13
Localisation : Toulouse

Re: Ma solution DIY de domotique

Message par Korhm » lun. 22 juin 2015 07:46

J'adore ton schéma :) Et je vais jeter un coup d’œil à tout ce que touche le teleinfo.

Ton Domestik, c'est fait maison aussi ?


Si tu as besoin de plus d'info/d'aide sur l'envois de SMS à partir d'un raspberry pi n'hésite pas, i j'ai déjà tout mis en place grâce à gammu (envois de sms dans certains conditions, stockages des sms dans une bdd, analyse des sms reçu et actions associées, ...)

Avatar du membre
Manfraid
Modérateur
Messages : 1402
Enregistré le : ven. 3 oct. 2014 14:50
Contact :

Re: Ma solution DIY de domotique

Message par Manfraid » lun. 22 juin 2015 08:31

Salut,

effectivement avec les explication fournis sur ton site tout est très clair
NAS : DIY OS Debian: DD250Go + 3x2To + 6To
Raspberry pi : 2B OS : Raspbian
Se tromper est humain, Vraiment foutre la merde nécessite le mot de passe de root.

Avatar du membre
vague nerd
Modérateur
Messages : 1473
Enregistré le : mar. 14 oct. 2014 11:42
Localisation : France !

Re: Ma solution DIY de domotique

Message par vague nerd » lun. 22 juin 2015 11:00

Bonjour.
J'adore ton schéma :)
+1 !
Cdt.
Cordialement,

Vague Nerd

destroyedlolo
Raspinaute
Messages : 1587
Enregistré le : dim. 10 mai 2015 18:44
Localisation : Dans la campagne à côté d'Annecy
Contact :

Re: Ma solution DIY de domotique

Message par destroyedlolo » lun. 22 juin 2015 16:14

Korhm a écrit :J'adore ton schéma :)
Des heures de travail ... ou pas :lol:
Korhm a écrit :Ton Domestik, c'est fait maison aussi ?
Oui, c'est aussi sur mon site. J'avais essayé Nagios mais il consommait trop sur mon serveur et surtout sur les machines clientes ... et comme j'ai passé quelques semaines coincé dans mon lit a cause d'un pb de ski, il fallait bien que je m'occupe.
Par contre, ça fait longtemps que je n'ai pas fait de release donc le SVN est beaucoup plus avancé que les tar (surtout en ce qui concerne les sondes migrées au MQTT).
Korhm a écrit :Si tu as besoin de plus d'info/d'aide sur l'envois de SMS à partir d'un raspberry pi n'hésite pas, i j'ai déjà tout mis en place grâce à gammu (envois de sms dans certains conditions, stockages des sms dans une bdd, analyse des sms reçu et actions associées, ...)
Ben, Free propose une API sous forme de webservice ce qui m'évite de monopoliser un portable (et un abonnement :) ) pour ça.
Par contre, merci pour gammu que je ne connaissais pas : il me sera peut-être utile pour un autre projet ;)

A+
  • BananaPI : Gentoo, disque SATA de 2 To
  • Domotique : 1-wire, TéléInfo, Tablette passée sous Gentoo, ESP8266
  • Multimedia par DNLA
  • Et pleins d'idées ... et bien sûr, pas assez de temps.
Un descriptif de ma domotique 100% fait maison.

destroyedlolo
Raspinaute
Messages : 1587
Enregistré le : dim. 10 mai 2015 18:44
Localisation : Dans la campagne à côté d'Annecy
Contact :

Re: Ma solution DIY de domotique

Message par destroyedlolo » jeu. 2 juil. 2015 14:03

Je reprend un peu mes explications, en me focalisant sur Séléné et donc sur mon future dashboard.

J'ai vu pas mal de solutions de ce genre basées sur des Raspberry, et souvent, il s'agit d'un OS complet à la Raspbian, avec X et un navigateur web en plein écran qui affiche les infos. Mouai, c'est un peu lourd juste pour afficher quelques graphes et surtout ça nécessite des cycles de maintenance complets car beaucoup de composants.

J'ai décidé de faire plus léger utilisant DirectFB au lieu d'un environnement X complet : pour ceux qui ne connaissent pas, il s'agit d'une librairie qui permet de taper directement dans le framebuffer, typiquement comme le fait Grub pour son menu de démarrage. Le bleme est que même s'il est beaucoup utilisé dans l'embarqué, le projet n'est pas très dynamique (pas de grosses mis-à-jour depuis ... 2013), ce qui fait qu'il commence à être déphasé avec d'autres librairies telles que Pango :x Bref, on verra : j'ai développé Séléné de facon modulaire donc je pourrai passé à autre chose si je suis trop bloqué.

J'ai aussi séparé la partie technique et la partie "construction de l'interface" :
  • La première est écrite en C pour plus de performances et possibilités
  • La seconde est basée sur des scripts Lua, langage interprété très léger que vous connaissez déjà si vous vous intéressez aux cartes ESP ou pour faire des plugin Conky, et qui est fait pour être embarqué dans des applications plus grosses.
La partie graphique
Comme je le disais, je me base donc sur DirectFB ; j'ai créé des classes Lua qui encapsulent les fonctions de base (tracé une ligne, chargé une images, ...). Le "hello world" classique de DirectFB, à savoir le tracé d'une ligne horizontal donne :

Code : Tout sélectionner

#!./Selene --dfb:quiet

--- The famous "horizontal line test"

Selene.init( Selene.CooperativeConst('FULLSCREEN') );	-- Set display cooperative mode

srf = SelSurface.create { caps=SelSurface.CapabilityConst('PRIMARY') } -- create a primary surface
w,h = srf:GetSize()	-- Retrieve its size

srf:FillRectangle(10, 10, w-20, h-20)	-- Background with a border

srf:SetColor( 0xff, 0x80, 0x80, 0x80)	-- Orange
srf:DrawLine( w/2, 0, w/2, h )

print "Hit 'enter' key to exit"
io.stdin:read'*l'	-- wait for enter

srf:destroy()
Pour le moment, je n'ai fait que les routines de bas niveau, mais je ferais des classes plus évoluées (courbes, graphes, ...) lorsque j'attaquerai ma vrais interface ;)

La partie MQTT

Ici aussi la mécanique est cachée par des classes Lua et comme je le disais, je me base sur la très répendu librairie Paho.

La connexion se fait par un simple

Code : Tout sélectionner

Brk, err = SelMQTT.connect( "tcp://localhost:1883", { reliable=false  } )
if not Brk then
	print( err )
	return
end
quand à la souscription :

Code : Tout sélectionner

_, err = Brk:subscribe( { 
	{ topic = "/tata/+/truc", func=handle_tata, trigger=update_tata, trigger_once=false, qos=SelMQTT.QoSConst("QoS0") },
	{ topic = "/toto",func=handle_toto, trigger=update_toto, trigger_once=true } 
} )
if err then
	print( err )
	return
end
La réception se fait de manière asynchrone, dans un thread différent et l'on doit donc définir 2 callbacks :
  • func= fonction qui est appelé dans le thread de reception pour chaque arrivée de message. Comme pour une interruptions, cette fonction doit être très simple et rapide, dans le genre

    Code : Tout sélectionner

    function handle_tata( topic, msg )
    	SelShared.set('tata', msg)
    	return true
    end
    
    SelShared.set() définie une variable partagée entre les threads.
  • Si la fonction précédente renvoie true, la fonction trigger= est mise dans la liste des tâches à exécuter (Todo list).
Voila, c'est tout pour aujourd'hui, si vous êtes interessé, la prochaine fois sera pour les timers, l'échange de message et les boucles d'attentes :mrgreen:

Tous les commentaires sont les bienvenues :ugeek:

A+
Modifié en dernier par destroyedlolo le jeu. 14 juil. 2016 19:36, modifié 2 fois.
  • BananaPI : Gentoo, disque SATA de 2 To
  • Domotique : 1-wire, TéléInfo, Tablette passée sous Gentoo, ESP8266
  • Multimedia par DNLA
  • Et pleins d'idées ... et bien sûr, pas assez de temps.
Un descriptif de ma domotique 100% fait maison.

Avatar du membre
Manfraid
Modérateur
Messages : 1402
Enregistré le : ven. 3 oct. 2014 14:50
Contact :

Re: Ma solution DIY de domotique

Message par Manfraid » jeu. 2 juil. 2015 14:35

Superbe présentation
NAS : DIY OS Debian: DD250Go + 3x2To + 6To
Raspberry pi : 2B OS : Raspbian
Se tromper est humain, Vraiment foutre la merde nécessite le mot de passe de root.

Korhm
Raspinaute
Messages : 232
Enregistré le : ven. 19 sept. 2014 08:13
Localisation : Toulouse

Re: Ma solution DIY de domotique

Message par Korhm » jeu. 2 juil. 2015 16:39

Très intéressant la partie avec directFB.
As-tu des Screenshots pour voir à quoi cela ressemble ?

Répondre

Retourner vers « Et tout le reste »