Forum Lifedomus

Version complète : sonde oregon
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.
Pages : 1 2
il y a t'il une possibilite de recuperer les valeurs de sondes de capteur oregon en 433 mhz dans la ld?
Avec un RFXCOM.
merci pour ta reponse. comment fait t'on ( reconnu en natif ?) ou a tu fait un script java?
Il existe un RFXCOM tcp. Bon, en feuilletant la doc ça n'a pas l'air simple d’utilisation (je pensai qu'il était utilisable avec des requêtes HTTP). En fait, il ne fait qu'émuler un port RS232 sur LAN, donc il faut se palucher le codage/décodage des trames avec un connecteur universel TCP/IP.

Il existe aussi un RFXCOM usb, j'ai pas épluché la doc mais à voir si possibilité de l'intégrer avec un connecteur universel RS232.

Dans les 2 cas il faut analyser et décoder les trames avec du JS.
J'ai également un peu fouillé pour confirmer ton analyse. Personne n'a encore fait ce genre de dev en JS ? est ce que l'équipe de dev de lifedomus pourrai nous dire si cette équipement a prévu d’être intégrer dans un future proche ?
Je crois que pour à peine plus cher que le prix du rfxcom on peut acquérir une zibase pro+, supportant les sondes Oregon (sans parler du zwave, enocean, du X10 et des protocoles sur 433Mhz et en plus elle fait box domotique), interrogeable en HTTP, ce qui est beaucoup plus simple que de devoir réanalyser toutes les trames du rfxcom ...
merci pour tes conseils. je regarde aussi vers rpi et domogik, mais l'ideal serai du natif chez ld
j'ai suivi le conseil de tilleul avec une zibase sur rpi et rfxom. j'ai maintenant les valeurs dans un xml a http://192.168.0.70/sensors.xml
comment peut t'on lire le xml avec ld
jnai creer un connecteur http avec http://192.168.0.70/ et un equipement avec sensors.xml mais rien ne remonte dans la trame?
Perso j'utilise la Varuna qui connecte les sondes Oregon et est gérer en natif par LifeDomus. ça fonctionne bien et les valeurs sont disponibles sur toute les sondes.
889laurent a écrit :j'ai suivi le conseil de tilleul avec une zibase sur rpi et rfxom. j'ai maintenant les valeurs dans un xml a http://192.168.0.70/sensors.xml
comment peut t'on lire le xml avec ld
jnai creer un connecteur http avec http://192.168.0.70/ et un equipement avec sensors.xml mais rien ne remonte dans la trame?

Méthode:
1) créer un connecteur HTTP qui pointe vers l'adresse de la zibase (192.168.0.70). Pas besoin de "/" final. Pas besoin de "http://" au début non plus. Juste l'adresse IP de la Zibase ... Pas besoin de préciser non plus une méthode d'authentification (on peut laisser "?")...
2) dans ce connecteur, charger le code JS suivant (à créer dans un éditeur texte simple genre bloc-notes sur PC):
Code :
var retour = trame;
3) créer un équipement universel, lié au connecteur http de la zibase
4) créer une variable qui s'appelle "retour"
5) créer une commande "Sensors" qui contient simplement
Code :
command = '/sensors.xml';
6) dans le DS, créer un widget qui affiche la valeur de la variable "retour" et qui quand on clique dessus lance la commande "Sensors"
7) ce qui se passe quand on clique:
- la commande '/sensors.xml' est envoyée au connecteur http 192.168.0.70
- le connecteur interprête le code JS qui lui est lié et vient mettre le résultat de "trame" (qui est une variable LD toujours disponible) dans une variable "retour" qui est "partagée" entre le connecteur et l'équipement
- dans le DS on voit que la variable retour contient le contenu du fichier XML
8) ce n'est pas l'équipement qui va décoder la trame (ou alors il faut créer une 2e commande) mais c'est bien le connecteur. Il faut donc éditer le code JS du connecteur pour aller retrouver l'info du capteur oregon. Dans mon fichier XML la valeur du capteur se trouve sur cette ligne:
Code :
[COLOR=#881280][FONT=monospace]<ev[/FONT][/COLOR][COLOR=#881280][FONT=monospace] type="7"[/FONT][/COLOR][COLOR=#881280][FONT=monospace] pro="OS"[/FONT][/COLOR][COLOR=#881280][FONT=monospace] id="3930862593"[/FONT][/COLOR][COLOR=#881280][FONT=monospace] gmt="1396168728"[/FONT][/COLOR][COLOR=#881280][FONT=monospace] v1="217"[/FONT][/COLOR][COLOR=#881280][FONT=monospace] v2="0"[/FONT][/COLOR][COLOR=#881280][FONT=monospace] lowbatt="1"[/FONT][/COLOR][COLOR=#881280][FONT=monospace]/>[/FONT][/COLOR]
La valeur se trouve dans v1, soit 217 à diviser par 10, c'est-à-dire 21,7°C.
Il faut donc écrire du code pour aller chercher cette valeur v1. On ne peut pas faire une recherche générale de "v1" sur le fichier car il y a plusieurs fois v1 dans le fichier si on a plusieurs sondes/capteurs/actionneurs/etc. Par contre le "id" contient un code unique qui identifie ma sonde Oregon ...
On va donc d'abord chercher
Code :
[COLOR=#881280][FONT=monospace]<ev[/FONT][/COLOR][COLOR=#881280][FONT=monospace] type="7"[/FONT][/COLOR][COLOR=#881280][FONT=monospace] pro="OS"[/FONT][/COLOR][COLOR=#881280][FONT=monospace] id="3930862593"[/FONT][/COLOR]

ce qui va nous positionner sur la bonne ligne, puis on va chercher la première occurrence de
Code :
v1="
(la partie "gmt=" est fonction de l'heure donc elle varie et il faut la passer)
et enfin chercher le deuxième guillement de
Code :
v1="217"
9) voila le code complet à injecter dans le connecteur
Code :
var retour = trame;
if (retour.indexOf('<?xml')==0) {                                        // on va bel et bien analyser sensors.xml    
var p = retour.indexOf('<ev type="7" pro="OS" id="3930862593"');     // recherche de la sonde Oregon    
if (p!=-1) {                                                         // sonde trouvée
        var cherche = retour.substr(p);                                    // on se rapproche un peu...
        p = cherche.indexOf('v1="');                                    // on se cale sur la valeur de la sonde
        if (p!=-1) {                                                    // il y a bien une valeur ...
            cherche = cherche.substr(p+4);                                // on se rapproche encore un peu juste après le 'v1="'...
            p = cherche.indexOf('"');                                    // où se trouve le guillemet final de v1 ?
            if (p!=-1) {
                 cherche = cherche.substring(0,p);                            // cette fois-ci, cherche contient la valeur ...
                 var temp = cherche/10;                                        // et on la divise par 10 ... 'temp' est une variable partagée de l'équipement
            }
        }
    }
}

A noter en 2e ligne, une petite vérification pour s'assurer que le retour contient bien de l'XML et donc a priori le contenu de sensors.xml
10) il ne nous reste plus qu'à revenir dans l'équipement, créer une variable "temp" de type DOUBLE. C'est elle qui contient la température lue par le connecteur ...
11) pour les autres capteurs il suffit d'adapter le code et de créer autant de variables "partagées" que de valeurs qu'on désire ramener dans LD. Ne pas hésiter à utiliser la commande "ldprint()" qui permet d'afficher des infos dans le debug du connecteur (la trame est d'office affichée, il n'est plus nécessaire de faire un ldprint(trame); )
12) la variable "retour" de l'équipement peut éventuellement être supprimée si on n'en fait rien ...

Voila j'espère que c'était clair pour tous :cool:[ATTACH=CONFIG]305[/ATTACH]

Je pense que je vais en faire un tutoriel sur mon site osmotiq.com un de ces quatre :)
Pages : 1 2