Dans le but de réduire le coût de mon installation et de permettre la récupération de température en valeur entière précise (la véra ne sait pas gérer les nombre flottants) j'ai cherché à récupérer ces valeurs sur ma box pour gérer une régulation de température.
ici j'utilise un arduino + Shield ethernet + 2 DS18B20 + 1 résistance 4.7KOhms => environ 25€ en tout !
Schéma:

Voici mon code, je n'ai rien inventé mais assemblé différents codes.
- Code: Tout sélectionner
/*
VeraDallasEthernetClient
LEGEANTVERT Janvier 2013
Circuit:
* Ethernet shield sur pins 10, 11, 12, 13
* 2 X DS18B20 sur pin 2
*/
#include <SPI.h>
#include <Ethernet.h>
#include <OneWire.h>
#include <DallasTemperature.h>
// Enter a MAC address for your controller below.
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress server(192,168,0,6); // Adresse de la Vera
// Initialisation de la librairie ethernet
EthernetClient client;
// Définition de la pin arduino utilisée pour le bus OneWire
#define ONE_WIRE_BUS 2
// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
//28 64 62 BF 3 0 0 7C
DeviceAddress insideThermometer = { 0x28, 0x64, 0x62, 0xBF, 0x03, 0x00, 0x00, 0x7C };
//28 36 59 BF 3 0 0 C8
DeviceAddress outsideThermometer = { 0x28, 0x36, 0x59, 0xBF, 0x03, 0x00, 0x00, 0xC8 };
//variable contenant la temperature a envoyer dans la requete
int temperature;
int variable;
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
Serial.println("Start Setup");
// Démarrage connexion ethernet
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
// no point in carrying on, so do nothing forevermore:
for(;;)
;
}
// Démarrage gestion OneWire
sensors.begin();
// sélection de la résolution (10 à 12bits)
sensors.setResolution(insideThermometer, 10);
sensors.setResolution(outsideThermometer, 10);
Serial.println("Initialisation terminee...");
// give the Ethernet shield a second to initialize:
delay(1000);
}
void CommandeVera()
{
//on etablie la connexion avec la VERA
if (client.connect(server, 3480)) {
Serial.println("Connection a Vera et envoi de requete");
// Requete HTTP avec methode GET et placement des parametres pour la VERA dans un virtual device Vcontainer
client.print("GET /data_request?id=variableset&DeviceNum=41&serviceId=urn:upnp-org:serviceId:VContainer1&Variable=Variable");
client.print(variable);
client.print("&Value=");
client.print(temperature);
client.println(" HTTP/1.0");
client.println();
}
else {
//s'il n'y a pas de connexion
Serial.println("Erreur de connexion");
}
//on stop la connexion avec la VERA
client.stop();
Serial.print("Requete envoyee temperature ");
Serial.print(variable);
Serial.print(" valeur : ");
Serial.println(temperature);
}
void loop()
{
Serial.println(" ");
Serial.println("D e b u t L o o p ");
//commande de récupération des températures
sensors.requestTemperatures();
//récup de la valeur temperature inside et mise en centi-degrés
temperature = 100 * sensors.getTempC(insideThermometer);
variable=1;
CommandeVera();
Serial.println("Attente 30s avant temperature 2");
//on laisse 10s entre les 2 requetes
delay (10000);
//récup de la valeur outside et mise en centi-degrés
temperature = 100 * sensors.getTempC(outsideThermometer);
variable=2;
CommandeVera();
Serial.println("Attente 60s avant retour loop");
delay(30000);
delay(30000);
}
Afin de me simplifier la vie, j'utilise la librairie DallasTemperature (http://milesburton.com/index.php?title=Dallas_Temperature_Control_Library)
On peut évidement, au lieu de récupérer une température sur le bus, récupérer la valeur d'entrées de tout type et l'envoyer de la même manière.
Voilà ce que l'on retrouve coté BOX:

Merci de me dire ce que vous en pensez, la prochaine étape sera que mon arduino puisse aussi recevoir des commandes de ma box domotique (Vera2) et agir en conséquence.Je souhaite aussi ajouter la possibilité de générer une alerte sur Mon karotz en cas de dépassement d'un seuil...
Actuellement, je récupère la température de 2 sondes et envoi ces valeurs en "centi-degrés" dans des Variables virtuelles VContainer sur ma vera avec un taux de rafraîchissement d'environ une minute.
Pour toute remarque n'hésitez pas!
Merci.