Sondes 1wire et Owserver
#1
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   Wink-1627

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  Idea-161a


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

Eek-1e6fb
http://www.homesweetdom.lu
Boutique en ligne avec identification des produits testés compatibles Lifedomus
www.homesweetshop.eu




Utilisateur(s) parcourant ce sujet : 1 visiteur(s)