HOMESERVER.DIY

Domohouse, interface user friendly pour domoticz V0.1 sortie

Tout le reste.

Domohouse, interface user friendly pour domoticz V0.1 sortie

Messagepar Tom23 » 03 Fév 2014 21:04

Historique

Ce topic a été ouvert il y a quelques semaines dans le but de trouver une solution qui me permettrait à moi et ma famille d'avoir un rapport simple avec mon installation domotique. Cette installation étant pour le moment composée d'un raspberry pi, d'un contrôleur domotique RFXtrx433, et du logiciel domotique Domoticz.
Ces choix ayant été fait pour me permettre de me lancer dans la domotisation de ma maison à moindre coût. J'en suis globalement satisfait. Domoticz étant plutôt simple à administrer. Mais souhaitant mettre en place un système de notification, j'ai rapidement vu que ce programme ne serait pas adapté au reste de la famille. Trop de menus, langage un peu technique, pas de système simple de notification... Il est par exemple impossible d'afficher simplement et visuellement le passage du facteur ou l'heure à laquelle on a sonné à la porte. J'ai mis en place "just for fun" des notification via twitter, mais l'intérêt est limité vu que je suis le seul à l'utiliser à la maison.

Ma première question était de savoir sur quel support cette interface devrait s'afficher. Liseuse, tablette, arduino + écran... Ayant profité d'une promo et d'un ODR sur une tablette android 7", je suis parti là dessus. Ceci m'ayant simplifier le choix technique de l'interface. Domoticz ayant une API fonctionnant avec des requêtes http, une interface web était le plus simple à mettre en place.

J'ai donc lancer l'idée de cette interface web en espérant trouver un peu d'aide au sein de notre petite communauté. Vu mon faible niveau en progr, c'était indispensable que l'on me guide. Et puis Seboss666 s'est pris au jeux et m'a rapidement proposé une jolie quantité de code. Après quelques jours, Seikwa l'a aussi rejoint et c'est à peu prés à ce moment là que j'ai arrêté de réellement participer au code. Ces 2 là allant bien trop vite pour moi.

Fonctions support:

Le projet avance à grands pas, et pour simplifier les choses, nous avons décidé d'une part d'avoir un salon xmpp dédié: domohouse@conf.tom23.com

Seboss666 nous faisant profiter de son github : https://github.com/seboss666/domohouse/



Beaucoup de choses sont encore à venir. Je ferai le point sur l'avancement et posterai des screens à la suite de ce post. Sinon il vous suffit de lire les quelques pages de cette discussion pour savoir un peu quelle direction le projet prend.

Fonctionnalités actuelles:

-Page d'accueil affichant les devices sélectionnés (switchs et valeurs mesurées)
-Possibilité de basculer l'état des switchs au doigt ou à la souris sur la page d'accueil.
-Configuration de l'adresse du serveur domoticz sur une page dédiée.
-Configuration via drag and drop des devices sur une page dédiée (interface tactile supportée)
-Page de configuration météo.
-Page météo dédiée.


Screenshots:

La page principale avec les informations:

Image

La page météo:

Image

La page de configuration permettant de joindre Domoticz:

Image

La page de configuration de la page principale:

Image

La page permettant d'entrer le code yahoo weather de la ville dont on souhaite afficher la méméto:

Image

En complément, un des développeurs à fait une petite vidéo de démo:
https://www.youtube.com/watch?v=Gv3Qyl-3klM



1er post original:

Je vous refais un historique rapide :

Je me suis mis à la domotique il y a quelques semaines dans le contexte que je décris dans cet article de mon blog : http://tom23.com/?p=140

Ca marche franchement bien. Ma maison tweete même toute seule depuis ce weekend.

Voilà pourquoi j'ouvre ce topic :
Je ne vois pas la domotique seulement comme un moyen d'automatiser divers éléments de ma maison. Je veux aussi qu'elle se serve des informations qu'elle recueille dans son environnement pour notifier la famille de ce qui se passe dans notre habitation. J'ai déjà commencer à le mettre en place sur un compte twitter, mais c'est plus pour jouer et avoir un accès rapide et efficace à certains évènements en tant qu'utilisateur assidu de ce "réseau social". Twitter étant ce qu'il est, je ne peux y faire toutes les notifications. D'une part parce qu'il y a bien des choses que je compte garder privée, d'autre par parce que je ne veux pas dépendre d'un service que je ne gère pas totalement, et enfin, parce que ce n'est pas pratique pour le reste de la famille.

Je cherche donc un moyen d'avoir ces notifications sans avoir à trainer toute l'interface de domoticz qui est trop lourde pour les enfants et pas assez WAF.

J'ai plusieurs hypothèses de travail en tête qui me viennent de quelques systèmes vus sur le net.
D'abord coté matériel, j'ai un petit budget. Inférieur à 100€. Les possibilités tournent autour de tablettes, de liseuses, ou d'arduino avec afficheur ou écran.
Les tablettes c'est cher mais ça présente plein d'avantages comme le tactile, des applis ou des navigateurs web robustes. Les liseuses ont des capacités plus limités mais sont bien plus accessibles financièrement. L'arduino, c'est financièrement accessible, ça semble très sympa à bricoler, mais pas de tactile et les afficheurs sont assez limités.

Ensuite, coté software, tout à l'aire possible. Domoticz sait utiliser les scripts lua comme un grand et le lua permet de lancer des actions exécutées directement par l'OS (lancement de script, ping...).

Je ne pratique quasiment pas la programmation. Je commence juste à m'y mettre et je ne connais très mal les possibilités de chaque langage.

Donc si certains d'entre vous ont des idées je suis preneur. Je me dis qu'une simple page web recevant ces notifications, affichant quelques infos et pouvant commander des fonctions basiques de domoticz pourrait être l'idéal.
Voilà quelques pages du wiki de domoticz que je ne comprends pas encore bien mais qui pourraient vous inspirer :
http://www.domoticz.com/wiki/Domoticz_API/JSON_URL%27s
http://www.domoticz.com/wiki/Events dont :

Using 'OpenURL' it is possible to trigger a url/api based on an event. The url will not retrieve/parse any data, use it for one way communication.

Some valid examples:

commandArray['Switch']='On'
commandArray['Scene:Livingroom']='On'
commandArray['Group:Kitchen']='Inactive'
commandArray['Keyfob']='Group On'
commandArray['DimmableDevice']='Set Level 50'
commandArray['SendNotification']='subject#body#0'
commandArray['SendEmail']='subject#body#your@email.com'
commandArray['OpenURL']='www.yourdomain.com/api/movecamtopreset.cgi'
commandArray['Blinds']='On RANDOM 30'
commandArray['Porch Light']='On FOR 2'

In device scripts, *always* do a check on the state of the changed device first. The device scripts are triggered fairly often, especially when you have a lot of thermometers and other measurement devices. If you just set the commandArray without any conditions, the script always just execute those commands at every device change, and those changes will trigger the scripts again and again resulting in a loop.


A vos idées ;)
Image
Avatar de l’utilisateur
Tom23
 
Messages: 925
Enregistré le: 24 Juil 2011 21:04

Re: Notifions et codons la domotique.

Messagepar Seboss666 » 03 Fév 2014 21:50

Ah, j'avais regardé uniquement la partie script et event, mais il y a possibilité d'appeler directement l'API !

Dans l'hypothèse où tu veux simplement afficher les informations liées à tes capteurs (température, lumière, consommation électrique, et j'en passe), sans passer par l'interface principale de Domoticz (qui est effectivement assez chargée), y'a moyen d'afficher par le biais d'un script PHP (qui sait parser le JSON renvoyé par Domoticz, si tant est que la sortie est clean) les infos souhaitées. Ça fait un peu empirique dit comme ça, et faudrait regarder la structure de Domoticz (et sa base de données) pour voir si y'a pas plus simple.

Mais si installer Domoticz est très simple à priori, je n'ai pas le matériel qui va bien à côté pour regarder de plus près.

Schématiquement ça donnerait, pour reprendre l'exemple de l'aube et crépuscule :
Code: Tout sélectionner
<?php
$username = "user";
$password = "pass";
$domo_ip = "ip_domoticz";
$domo_port = "port domoticz";
$domo_command = "type=command&param=getSunRiseSet";

$soleil = file_get_contents("http://" . $username . ":" . $password ."@" . $domo_ip .":" . $domo_port . "/json.htm?" . $domo_command);

$resultat = json_decode($soleil, true);

echo "Aube : " . $resultat['Sunrise'] . "
Crépuscule : " .$resultat['Sunset'];
?>


Le souci, c'est que j'ai l'impression que l'API en question est horriblement mal documentée, et que j'ai pas trouvé comment avoir le statut d'un switch en particulier par exemple.

Autre chose, puisqu'un parle d'accès web : sur le fofo, en cherchant plus d'infos sur l'API justement, je suis tombé sur ça : http://www.domoticz.com/forum/viewtopic.php?f=21&t=1076

Avec possibilité de restreindre l'affichage/controle des appareils par groupes de personnes. Mais je reste toujours dans le même cas, à savoir que totu ce que je dis est théorique.
La théorie, c'est quand on sait tout, mais que rien ne fonctionne. La pratique, c'est quand tout fonctionne, mais personne ne sait pourquoi. Ici, nous avons réuni les deux : rien ne fonctionne, et personne ne sait pourquoi !
Avatar de l’utilisateur
Seboss666
 
Messages: 236
Enregistré le: 13 Aoû 2013 22:27

Re: Notifions et codons la domotique.

Messagepar dworak_of_sky » 04 Fév 2014 09:14

Vais quand même essayer de contribuer minimalement :)

Pour reprendre ta question de twitter Tom, il ne fait pas que ce soit le serveur qui envoie des données vers une page web, mais la page web qui envoie une requête au serveur et affiche la réponse traitée.

là, c'est à priori ce qui est fait, via le script php proposé par Seboss. La sécurité (ce qui empêchera n'importe qui de récupérer les réponses du serveur) est assurée par le couple user/pass , mais là où ça peut être gênant, c'est que user et pass soient codés en dur: c'est mal. (mais pour des tests, c'est tout à fait la bonne manière de faire).

Seboss666 a écrit: j'ai pas trouvé comment avoir le statut d'un switch en particulier par exemple.

si le json renvoie les états de tous les switchs, il suffit de faire une sélection (expression régulière ?) sur le résultat renvoyé.

Si tu as des exemples de réponses Tom, particulièrement pour cette histoire de switchs, peux-tu les copier/coller dans ce topic ?
(C'est moins compliqué de traiter des résultats que de les obtenir :D)
Si c'est idiot, mais que ça marche, alors ce n'est pas idiot.
Avatar de l’utilisateur
dworak_of_sky
 
Messages: 176
Enregistré le: 12 Aoû 2011 14:36

Re: Notifions et codons la domotique.

Messagepar Seboss666 » 04 Fév 2014 09:36

Je n'ai posté qu'un exemple rapide de comment appeler l'API pour obtenir un résultat, et l'afficher. Et puis c'est du PHP, exécuté côté serveur, éventuellement situé au même endroit que Domoticz (d'un point de vue réseau), donc la visibilité du couple user/pass sera nulle d'un point de vue du client. Ça suppose que l'utilisateur créé dispose des droits pour éxécuter la commande voulue, ça se règle dans l'interface de Domoticz.

Si l'API est si peu documentée, il est possible aussi, mais moins fiable et à mon sens moins propre, de passer par un script LUA qui créerait un fichier "tampon" avec les infos dedans dans lequel on viendrait taper, là encore en PHP. Mais pour le coup ça implique d'avoir le serveur web sur la même machine que Domoticz, et dans le cas d'un Raspberry Pi, ça commence à être tendu question ressources.
La théorie, c'est quand on sait tout, mais que rien ne fonctionne. La pratique, c'est quand tout fonctionne, mais personne ne sait pourquoi. Ici, nous avons réuni les deux : rien ne fonctionne, et personne ne sait pourquoi !
Avatar de l’utilisateur
Seboss666
 
Messages: 236
Enregistré le: 13 Aoû 2013 22:27

Re: Notifions et codons la domotique.

Messagepar dworak_of_sky » 04 Fév 2014 10:43

OK.

Je m'étais basé sur cette ligne :
Code: Tout sélectionner
$soleil = file_get_contents("http://" . $username . ":" . $password ."@" . $domo_ip .":" . $domo_port . "/json.htm?" . $domo_command);


qui permet de récupérer un contenu distant pour peu qu'on adapte l'adresse.
D'où ce que je dis sur la sécurité.

[Mode grande gueule: ON]
Les fichiers tampons ?
Quel intérêt d'utiliser un langage dynamique dans ce cas ? ;)
[Mode grande gueule: OFF]
Si c'est idiot, mais que ça marche, alors ce n'est pas idiot.
Avatar de l’utilisateur
dworak_of_sky
 
Messages: 176
Enregistré le: 12 Aoû 2011 14:36

Re: Notifions et codons la domotique.

Messagepar Tom23 » 04 Fév 2014 16:42

Bon globalement je vous suis.
Mais si je veux entrer dans les détails c'est plus compliqué. Je préfère le réseau ça me parle plus :mrgreen:

Plus sérieusement, J'entrevois les solutions que vous me proposez. Et je pense que se tourner vers une solution web sera le plus adapté et le plus versatile.
Donc en gros, faut que je trouve une solution pour récupérer les infos et les envoyer vers une page web basique.
Je suis tombé là dessus pendant mes recherches : http://forum.hardware.fr/hfr/Discussion ... #t36771527
C'est typiquement le genre de chose que j'aimerai obtenir sur 2 ou 3 pages différentes dont une accueillant les notifications et les infos principales.

Je ne connais rien au json et très peu de choses au php. Mais si vous m'orientez sur comment je pourrai récupérer les infos de domoticz je devrai avancer. J'ai bien compris que le problème se situe là pour vous aussi, et à déjà d'avoir votre domoticz perso je peux vous donner accès au mien avec des droits de spectateur via MP.
De ce que j'ai vu les pages causent json, mais je ne vois pas grand chose de plus.

En passant, toutes les infos de domoticz sont stockées dans un fichier .db.
Image
Avatar de l’utilisateur
Tom23
 
Messages: 925
Enregistré le: 24 Juil 2011 21:04

Re: Notifions et codons la domotique.

Messagepar Seboss666 » 05 Fév 2014 01:35

Le fichier .db est une base sqlite, si on se fie aux prérequis d'installation de Domoticz. Le problème, c'est qu'on ne peut pas regarder dedans de manière fiable tant que Domoticz est lancé (c'est le principal problème de sqlite comparé à un SGBD comme MySQL : les accès concurrents). En lecture ça devrait passer cependant, mais là, on se heurte à devoir connaître la structure de la base pour en extraire toutes les infos, pas très smart.

Pour récupérer les infos je t"ai montré l'exemple en PHP, le script récupère l'information dans une variable au format JSON, qui est ensuite transformé en tableau avec la fonction json_decode, tableau dans lequel il suffit ensuite de prendre les valeurs qui t'intéressent et les traiter comme bon te semble. Basiquement le JSON c'est une grosse liste de couples clés/valeurs, dans le cas de Domoticz tout en chaines de caractères. C'est très facile à manipuler, c'est facilement compressible par un serveur web pour limiter la bande passante en cas de gros volume, et surtout, JSON voulant dire JavaScript Object Notation, ça veut dire que tu peux aussi manipuler les données directement côté client (ce qui limite la charge côté serveur, mais demande plus de soin pour s'adapter aux différentes plateformes). C'est un très bon outil pour une interface web. Par contre je saurais aider que pour le cas de la partie serveur (PHP), parce que question Javascript, je ne saurais être d'aucune aide (dans le topic HFR le gaillard utilise jQuery manifestement, ça peut effectivement aider) :oops:

Quelque soit la solution retenue (client ou serveur), l'idée est que tu n'as pas besoin d'extraire les infos de Domoticz pour ensuite alimenter une page web, c'est la page web qui demande directement à Domoticz, qui répond avec du JSON. Ça permet d'avoir les infos temps réel, puisqu'elle sont données à chaque requête. Le seul problème reste du coup de savoir ce qu'il est possible d'extraire par l'API. En clair, on sait où et comment demander (du moins je sais en PHP, en Javascript/AJAX j'ai pas encore potassé le sujet), on sait comment il répond, et donc traiter la réponse, mais on ne sait pas ce qu'on peut demander.
La théorie, c'est quand on sait tout, mais que rien ne fonctionne. La pratique, c'est quand tout fonctionne, mais personne ne sait pourquoi. Ici, nous avons réuni les deux : rien ne fonctionne, et personne ne sait pourquoi !
Avatar de l’utilisateur
Seboss666
 
Messages: 236
Enregistré le: 13 Aoû 2013 22:27

Re: Notifions et codons la domotique.

Messagepar Tom23 » 05 Fév 2014 18:31

J'ai un peu avancé en fouillant le forum. J'arrive à extraire toutes les infos en relation avec une sonde de température par exemple.

En entrant l'url suivante dans FF:

http://192.168.xx.xx:8080/json.htm?type=devices&rid=2


J'obtiens le texte suivant:

{ "5MinuteHistoryDays" : 1, "DashboardType" : 0, "MobileType" : 0, "WindScale" : 3.600000143051147, "WindSign" : "km/h", "result" : [ { "AddjMulti" : 1.0, "AddjMulti2" : 1.0, "AddjValue" : 0.0, "AddjValue2" : 0.0, "BatteryLevel" : 100, "CustomImage" : 0, "Data" : "19.7 C, 41 %", "DewPoint" : "6.08", "Favorite" : 1, "HardwareID" : 1, "HardwareName" : "RFXtrx433", "HaveTimeout" : false, "Humidity" : 41, "HumidityStatus" : "Normal", "ID" : "E701", "LastUpdate" : "2014-02-05 18:17:33", "Name" : "Sonde SDB bas", "Notifications" : "false", "SignalLevel" : 7, "SubType" : "THGN122/123, THGN132, THGR122/228/238/268", "Temp" : 19.70, "Timers" : "false", "Type" : "Temp + Humidity", "TypeImg" : "temperature", "Unit" : 1, "Used" : 1, "idx" : "2" } ], "status" : "OK", "title" : "Devices" }


Ce qui est une version plus complète de ce que j'ai dans le tableau de bord de domoticz :

Image

La fin de l'url rid=2 correspondant à l'idx du dashboard.

Ma source est ici : http://www.domoticz.com/forum/viewtopic.php?f=12&t=191
On est pas loin de ce que je souhaite faire en récupérant les infos. Restera à les envoyer où je le souhaite, sachant que pour ma part c'est surtout l'impulsion sur un bouton qui m'intéresse au début.
Image
Avatar de l’utilisateur
Tom23
 
Messages: 925
Enregistré le: 24 Juil 2011 21:04

Re: Notifions et codons la domotique.

Messagepar Seboss666 » 06 Fév 2014 00:16

Si j'ai bonne mémoire, ton scénario consiste à activer la VMC en fonction des infos retournées par ce capteur, j'ai bon ? Effectivement l'info réelle (la température et l'humidité) est noyée dans le reste. Sur la page d'accueil Domoticz on voit une capture d'écran de vue d'ensemble des appareils, avec les infos utiles, ça pourrait pas aller ?

Sinon, le capteur en lui-même ne fait rien, si tu veux savoir si la VMC est vraiment activée à un instant T, il faudra récupérer les infos sur le scénario/scène, ou la VMC elle-même si elle est renseignée (ou l'activateur de la VMC, ce qui est plus probable si l'installation est un peu ancienne). Là, si je dis pas de bêtise, l'info en question c'est le couple température/humidité (sous-clé "data" dans la clé "result" de la chaine Json récupérée). Il faudrait récupérer en plus l'état de l'activateur (idx1 ?) pour avoir une vue "données" d'ensemble de l'installation. En connaissant le seuil d'activation du scénario, tu pourras en plus mettre en évidence une défaillance (si humidité pas bon et que vmc pas en route, problème !)

Bref, en reprenant le code PHP que j'ai donné au dessus, les modifications donneraient ça :
Code: Tout sélectionner
<?php
$username = "user";
$password = "pass";
$domo_ip = "ip_domoticz";
$domo_port = "port domoticz";
$domo_command = "type=devices&rid=2";  <== La commande que tu as saisi dans Firefox

$info = file_get_contents("http://" . $username . ":" . $password ."@" . $domo_ip .":" . $domo_port . "/json.htm?" . $domo_command);

$resultat = json_decode($info, true);

echo "Température, Humidité : " .$resultat['result'][0]['Data']; <== c'est un peu obscur, mais le json_decode met la donnée dans un tableau qui est dans un tableau qui est dans un tableau, j'y suis pour rien
?>
(on peut éventuellement simplifier la chaine de file_get_contents() en virant les username/password s'il n'y en a pas besoin).

Pour info j'ai testé l'affichage de l'information chez moi en copiant/collant la sortie JSON que tu nous as donné. Le seul truc que j'ai pas testé, c'est la récupération directe par PHP de cette information. T'aurais pas moyen de tester mon bout de script pour voir si j'ai bon ? En gros, en l'appelant, s'il t'affiche la température et l'humidité, c'est gagné, sinon, faudra pousser un peu plus (ma crainte se situe sur l'authentification login/password, la doc est assez obscure sur la transmission du header)
La théorie, c'est quand on sait tout, mais que rien ne fonctionne. La pratique, c'est quand tout fonctionne, mais personne ne sait pourquoi. Ici, nous avons réuni les deux : rien ne fonctionne, et personne ne sait pourquoi !
Avatar de l’utilisateur
Seboss666
 
Messages: 236
Enregistré le: 13 Aoû 2013 22:27

Re: Notifions et codons la domotique.

Messagepar Tom23 » 06 Fév 2014 00:47

Ton premier code fonctionne et affiche bien les heures de levé et coucher de soleil.
Pour le 2ième, je testerai demain.

Pour préciser mon besoin, les pages de domoticz sont pas mal foutue avec une page d'accueil qui affiche les "modules" déclarés comme favoris, ainsi que les valeurs et états des différents composants de l'installation sur des pages propres.
Sauf que les niveaux de WAF et de CAF (Children Acceptance Factor) est trop bas. La façon dont je vois les choses est la suivante:
Une page simple affichant une enveloppe si le facteur est passé, la température extérieur, et un autre icône si on a sonné à la porte. D'autres trucs viendront se rajouter par la suite comme une page accessible par clic avec les températures des diverses pièces, une accessible avec un icône d'alerte et affichant quelle fenêtre est restée ouverte plus d'un certain temps...
Domoticz propose tout ça mais de façon peu explicite. Chaque switch étant afficher On ou Off par exemple.
Sans compter que les différents type d'affichage de l'interface web sont dégueux sur une liseuse.

J'ai essayé de bidouiller des trucs en me basant sur ça : http://www.actualitix.com/utiliser-mani ... n-php.html
Mais j'obtiens un retour json difficile à lire sans retour à la ligne (sous FF). Je ne sais pas comment tu fais pour t'y retrouver en sachant dans quel tableau est mis chaque donnée.
Ce qui est gênant en plus c'est que FF m'affiche page blanche à chaque erreur dans le fichier.

Pour ce qui est de mon histoire de VMC, c'est un des trucs que j'ai sous la main et dont j'ai tirer des infos via l'API. Mais c'est pas forcément celui que je veux exploiter en priorité. Le soucis c'est que j'ai pas mis en place la gestion de ma boite aux lettre faute de matériel que je n'ai pas encore totalement choisi.

Edit: ton 2ième script me renvoie une page blanche.
Image
Avatar de l’utilisateur
Tom23
 
Messages: 925
Enregistré le: 24 Juil 2011 21:04

Suivante

Retourner vers Divers

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité