08-28-2016, 06:06 PM
Le réseau 1 wire 1-Wire (aussi connu sous le nom de bus Dallas ou OneWire) est un bus conçu par Dallas Semiconductor qui permet de connecter (en série, parallèle ou en étoile) des composants avec seulement deux fils (un fil de données et un fil de masse)1.
De nature similaire à I²C, il présente cependant des vitesses de transmission et un coût inférieurs. Il est généralement utilisé en domotique pour des thermomètres ou autres instruments de mesure météorologiques.
(Source wikipedia)
Afin de pouvoir récupérer les informations de ce bus il faut utiliser un serveur. Ce serveur peut très bien être un Arduino, RPI si l'on veut du DIY.
Je vais vous présenter une solution "plus industrielle" basée sur le serveur Owserver de embeddeddatasystems et comment récupérer ces informations sur notre Lifedomus bien entendu
Je ne parlerai pas ici de la manière de raccorder tous les éléments 1 wire mais uniquement de la partie configuration "soft" côté Lifedomus. (Si vous voulez plus de détails sur la partie hard dites le moi
C'est parti !
Prérequis
1 owsever lan
Des sondes , dans mon cas des DS18B20 – Capteur de température avec résolution ajustable
Configuration de la Lifedomus
Le serveur va exposer à cette url adresseip/details.xml un fichier xml ou l'on retrouve toutes les informations des capteurs raccordés sur le réseau 1 wire.
Chaque capteur d'un réseau 1wire possède un identifiant unique que l'on retrouve dans le fichier Xml
Le but de notre script sera donc d'aller chercher les différentes sondes en se basant sur l'identifiant puis de les afficher.
Connecteur
On va créer un connecteur universel http
On renseigne l'adresse IP de l'owserver (1)
Puis on va insérer ce code javascript (2)
Modifier
en indiquant les identifiants de vos sondes séparés par des ,
Modifier la variable
idowserver avec l'adresse mac de votre owserver
nbr_sondes
Equipement
Créer un équipement "capteur universel" dans "Mesures" "Capteurs"
Sélectionner le connecteur "owserver" que l'on a créé précédemment (1)
Ajouter une "commande" qui va appeler le fichier xml sur l'owserver (2)
Sélectionner "JS" (3)
Renseigner l'url du fichier xml (4)
Ajouter les différentes variables qui correspondent aux variables identifiées dans le javascript du connecteur (5) en n'oubliant pas de typer les valeurs en "Double" (6)
Enregistrer le connecteur (7)
Les données sont maintenant accessibles dans tous les automates ou en affichage dans le DS
De nature similaire à I²C, il présente cependant des vitesses de transmission et un coût inférieurs. Il est généralement utilisé en domotique pour des thermomètres ou autres instruments de mesure météorologiques.
(Source wikipedia)
Afin de pouvoir récupérer les informations de ce bus il faut utiliser un serveur. Ce serveur peut très bien être un Arduino, RPI si l'on veut du DIY.
Je vais vous présenter une solution "plus industrielle" basée sur le serveur Owserver de embeddeddatasystems et comment récupérer ces informations sur notre Lifedomus bien entendu
Je ne parlerai pas ici de la manière de raccorder tous les éléments 1 wire mais uniquement de la partie configuration "soft" côté Lifedomus. (Si vous voulez plus de détails sur la partie hard dites le moi
C'est parti !
Prérequis
1 owsever lan
Des sondes , dans mon cas des DS18B20 – Capteur de température avec résolution ajustable
Configuration de la Lifedomus
Le serveur va exposer à cette url adresseip/details.xml un fichier xml ou l'on retrouve toutes les informations des capteurs raccordés sur le réseau 1 wire.
Code :
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<Devices-Detail-Response xmlns="http://www.embeddeddatasystems.com/schema/owserver" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<PollCount>313452</PollCount>
<DevicesConnected>4</DevicesConnected>
<LoopTime>2.089</LoopTime>
<DevicesConnectedChannel1>1</DevicesConnectedChannel1>
<DevicesConnectedChannel2>0</DevicesConnectedChannel2>
<DevicesConnectedChannel3>3</DevicesConnectedChannel3>
<DataErrorsChannel1>0</DataErrorsChannel1>
<DataErrorsChannel2>0</DataErrorsChannel2>
<DataErrorsChannel3>274666</DataErrorsChannel3>
<VoltageChannel1>4.43</VoltageChannel1>
<VoltageChannel2>4.44</VoltageChannel2>
<VoltageChannel3>4.16</VoltageChannel3>
<VoltagePower>4.66</VoltagePower>
<DeviceName>OWServer_v2-Enet</DeviceName>
<HostName>EDSOWSERVER2</HostName>
<MACAddress>00:04:A3:59:29:05</MACAddress>
<owd_DS18B20 Description="Programmable resolution thermometer">
<Name>DS18B20</Name>
<Family>28</Family>
<ROMId>640000038B62D728</ROMId>
<Health>7</Health>
<Channel>1</Channel>
<RawData>
57024B467FFF09108000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
</RawData>
<PrimaryValue>37.4375 Deg C</PrimaryValue>
<Temperature Units="Centigrade">37.4375</Temperature>
<UserByte1 Writable="True">75</UserByte1>
<UserByte2 Writable="True">70</UserByte2>
<Resolution>12</Resolution>
<PowerSource>0</PowerSource>
</owd_DS18B20>
<owd_DS18B20 Description="Programmable resolution thermometer">
<Name>DS18B20</Name>
<Family>28</Family>
<ROMId>D30000027B792928</ROMId>
<Health>7</Health>
<Channel>3</Channel>
<RawData>
D2014B465FFF0E101D00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
</RawData>
<PrimaryValue>29.1250 Deg C</PrimaryValue>
<Temperature Units="Centigrade">29.1250</Temperature>
<UserByte1 Writable="True">75</UserByte1>
<UserByte2 Writable="True">70</UserByte2>
<Resolution>11</Resolution>
<PowerSource>0</PowerSource>
</owd_DS18B20>
<owd_DS18B20 Description="Programmable resolution thermometer">
<Name>DS18B20</Name>
<Family>28</Family>
<ROMId>B7000004A29DE528</ROMId>
<Health>7</Health>
<Channel>3</Channel>
<RawData>
D0014B467FFF1010DB00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
</RawData>
<PrimaryValue>29.0000 Deg C</PrimaryValue>
<Temperature Units="Centigrade">29.0000</Temperature>
<UserByte1 Writable="True">75</UserByte1>
<UserByte2 Writable="True">70</UserByte2>
<Resolution>12</Resolution>
<PowerSource>0</PowerSource>
</owd_DS18B20>
<owd_DS18B20 Description="Programmable resolution thermometer">
<Name>DS18B20</Name>
<Family>28</Family>
<ROMId>140000038B657B28</ROMId>
<Health>7</Health>
<Channel>3</Channel>
<RawData>
CC034B467FFF04101D00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
</RawData>
<PrimaryValue>60.7500 Deg C</PrimaryValue>
<Temperature Units="Centigrade">60.7500</Temperature>
<UserByte1 Writable="True">75</UserByte1>
<UserByte2 Writable="True">70</UserByte2>
<Resolution>12</Resolution>
<PowerSource>0</PowerSource>
</owd_DS18B20>
</Devices-Detail-Response>
Chaque capteur d'un réseau 1wire possède un identifiant unique que l'on retrouve dans le fichier Xml
Code :
<ROMId>640000038B62D728</ROMId>
Le but de notre script sera donc d'aller chercher les différentes sondes en se basant sur l'identifiant puis de les afficher.
Connecteur
On va créer un connecteur universel http
On renseigne l'adresse IP de l'owserver (1)
Puis on va insérer ce code javascript (2)
Code :
// Récupératon des informations d'une passrelle 1wire/IP owserver
// 08/08/08/2016 version 1 création du script => Home Sweet Dom
// 28/08/08/2016 version 2 Simplification du code ajout de la variable nombre de sondes et idowserver
var pas;
var idowserver = '00:04:A3:59:29:05';
var nbr_sondes = 4;
var nom_sonde = ["640000038B62D728","D30000027B792928","B7000004A29DE528","140000038B657B28"];
var val_sonde = Array;
var retour = trame;
p = retour.indexOf(idowserver)
val_sonde = [];
for (pas = 0; pas < nbr_sondes; pas++) {
if (p!=-1) {
p = retour.indexOf(nom_sonde[pas]);
var recherche = retour.substr(p);
ldprint(nom_sonde[pas]);
if (p!=-1) {
p = recherche.indexOf('<PrimaryValue>');
val_sonde[pas] = recherche.substr(p+14,7);
ldprint(val_sonde[pas]);
}
}
}
var temp_ext = val_sonde[0]
var temp_pac = val_sonde[1]
var temp_piscine = val_sonde[2]
var temp_int_solaire = val_sonde[3]
Modifier
Code :
var nom_sonde = ["640000038B62D728","D30000027B792928","B7000004A29DE528","140000038B657B28"];
en indiquant les identifiants de vos sondes séparés par des ,
Modifier la variable
idowserver avec l'adresse mac de votre owserver
nbr_sondes
Code :
var idowserver = '00:04:A3:59:29:05';
var nbr_sondes = 4;
Equipement
Créer un équipement "capteur universel" dans "Mesures" "Capteurs"
Sélectionner le connecteur "owserver" que l'on a créé précédemment (1)
Ajouter une "commande" qui va appeler le fichier xml sur l'owserver (2)
Sélectionner "JS" (3)
Renseigner l'url du fichier xml (4)
Code :
command = '/details.xml';
Ajouter les différentes variables qui correspondent aux variables identifiées dans le javascript du connecteur (5) en n'oubliant pas de typer les valeurs en "Double" (6)
Enregistrer le connecteur (7)
Les données sont maintenant accessibles dans tous les automates ou en affichage dans le DS
http://www.homesweetdom.lu
Boutique en ligne avec identification des produits testés compatibles Lifedomus
www.homesweetshop.eu
Boutique en ligne avec identification des produits testés compatibles Lifedomus
www.homesweetshop.eu