Interfacer un arduino avec une Zibase 2S

mini2440, arduino, xbee, JeeLabs, Pic, picaxe ... Ici on parle de tous les montages Ă  base de microcontroleurs

Interfacer un arduino avec une Zibase 2S

Messagede norbert81 » 23 Avr 2013, 17:40

Salut Ă  tous,
Je voulais savoir si on pouvait faire communiquer une zibase et un arduino (avec un shield ethernet).
L'idée est de pouvoir récupérer des infos venant de contact sec qui seraient branchés sur les entrées de l'arduino et éventuellement de pouvoir commander des relais à travers ses sorties, mais tout ça piloté par la zibase.
Un peu comme fait une IPX800 via des requĂŞtes http:

Je n'arrive pas Ă  trouver le "lien" entre la box et l'arduino.

Si vous avez des infos sur ce sujet, je suis preneur.

Merci

Norbert
norbert81
Membre Actif
 
Messages: 28
Inscription: 07 Juin 2012, 06:48

Re: Interfacer un arduino avec une Zibase 2S

Messagede Cyb » 23 Avr 2013, 20:26

Salut,
En ce qui me concerne, j'ai implémenté le protocole domia (compatible Zibase) sur Arduino avec un simple récepteur RF 433Mhz.
Cyb
P'tit Dieu de domotique
 
Messages: 177
Inscription: 21 Oct 2010, 19:52
Localisation: Thimister-Clermont (Belgique)

Re: Interfacer un arduino avec une Zibase 2S

Messagede norbert81 » 23 Avr 2013, 21:51

Salut,
Super merci, j'avais pas du tout pensé à cette solution.
On peut implémenter aussi le z-wave ?
En tout cas, je vais creuser cette idée avec ce protocole domia ;-)
Merci
norbert81
Membre Actif
 
Messages: 28
Inscription: 07 Juin 2012, 06:48

Re: Interfacer un arduino avec une Zibase 2S

Messagede Cyb » 24 Avr 2013, 14:26

Pour du Zwave, utilise plutot un Raspberry pi.
Cyb
P'tit Dieu de domotique
 
Messages: 177
Inscription: 21 Oct 2010, 19:52
Localisation: Thimister-Clermont (Belgique)

Re: Interfacer un arduino avec une Zibase 2S

Messagede norbert81 » 25 Avr 2013, 12:48

Merci pour la réponse.
Si je veux rester sur une solution Ethernet, je peux prendre l'arduino Ethernet. (Tout est cablé en RJ45 chez moi)
Pour débuter et me faire la main, il y aura juste un capteur d'ouverture et une sonde de température en lecture.
D'après ce que j'ai compris, je vais pouvoir monter un serveur web qui pourra m'afficher une page avec la valeur de ma sonde de température et de l'état de mon contact d'ouverture.
A partir de la, la ZIBASE 2 pourra interroger cette page pour récupérer les valeurs sur la ZIBASE 2 ? c'est ça ?

J'ai d'autres questions :
Est-ce-qu'on peut générer un fichier XML sur l'arduino pour pouvoir aller le lire ensuite à partir de la ZIBASE ?
Si plus tard je veux piloter des relais sur l'arduino, toujours avec le serveur web de celle-ci, est-ce-que je pourrais les commander Ă  travers des requĂŞtes HTTP qui partiraient de la ZIBASE ?

Merci
Norbert
norbert81
Membre Actif
 
Messages: 28
Inscription: 07 Juin 2012, 06:48

Re: Interfacer un arduino avec une Zibase 2S

Messagede xiboard » 25 Avr 2013, 13:33

Bonjour,

Je suis en train de faire exactement ce que tu cherche Ă  faire ! :D :D

Je suis actuelement en train de develloper le code mais cette semaine j'était bien occupé et le mois prochain aussi donc ça va pas trop avancer avant début juin malheuresement.
Moi j'arrive Ă  communiquer dans les deux sens entre la zibase et l'arduino mais je passe par des astuces, il y a peu ĂŞtre mieux n'hesitez pas Ă  apporter votre pierre a l'Ă©difice, c'est la force des forums.

Donc pour le moment, le projet est d'installer l'arduino + shield ethenet relié via câble ou CPL au réseau maison dans un coffret au niveau de mon portail.
Il va me permetre de commander l'ouverture du portail, de messurer la T° ext ici, de detecter la sonnette, de detecter le courrier, de decter un passage barrière infraroure portail et de commander une ou plusieurs lumières.
Je vais aussi inclures une chose particulière, une sonde de lumière (ou une led utilisée en sonde sisi c'est possible) dans un tube pour détecter les appels de phares. Pour la petite histoire j'ai déjà réussi à mettre en place une détection de 'codes' d'appels de phares type morse avec un ou plusieurs codes à définirs. De la même manière avec la sonnette je pourrais detecter des codes, ça permettra à mes parents s'ils viennent d'ouvrir le portail sans telco (et sans phares :P )

Pour la sonnette, je pense by-passer l'interphonne actuel. Ca me permettra de ne pas faire sonner la sonnette la nuit par exemple ou autre idée ou bien de la faire sonner via une commade zibase.

VoilĂ , prometteur, non ? 8) 8)

Pour la communication :
Zibase (ou autre) -> arduino : en commande HTTP c'est génial, super simple à mettre en place et assez fléxible. ça marche impecable.
Une commande http peux être accompagné d'une réponse type xml (du faut xml mais bon) pour un retour d'état ou reponse à demande de température.
La zibase sait lire un chiffre après un mot clé donc facile !

Pour de l'arduino -> Zibase : appel de scénario. C'est peut être pas le top mais ça marche bien. Un scenario peut commander après des perif virutels. J'ai pas encore trops chercher on peux peut-être commander direct des perif virtuels... L'inconvegnant c'est qu'il faut programmer l'arduino avec le n° de scénario donc ça pourrait être à améliorer ça.

Toute la question est aussi de chosir qui fait le job, soit l'arduino sert seulement d'interface entrés/sorties soit elle fait tout de même des actions... J'ai plus confiance en ma programmation donc je fait un max de truc avec l'arduino....

Par exemple, l'arduino gère le portail si on envoie une commande d'ouverture/fermeture alors que la maneouvre n'est pas terminée il ne fait rien...

Pour info, niveau coût, j'achette tout direct en chine (sur DX.com). L'arduino mega (une 50ene E/S) est à environ 15€, le shield ethernet est à 13€ aussi, une carte 8 relais (220V/10A) est à 8€... à vous de voir si vous voullez de la qualitée prenez dans les boutiques officieles mais perso je n'est pas été décu et même très surprit.

Pour la température, l'arduino gère très bien le 1-wire donc j'ai un DS18B20.

J'envoie aussi des push via pushingbox direct depuis l'arduino.

Aller place au code, qui je rappel est en cours de dev, ceux qu'il veullent un truc tout fait tout propre attendez quelques semaines.

Code: Tout sélectionner
//ZodiArduino par Xiboard

#include <SPI.h>
#include <Ethernet.h>
#include <ClickButton.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Bounce.h>

long goOnTime;
long onTime;

long shortClick = 350;
long longClick = 1000;

String pwrdRead = String(10);
int alarmeStat = 0;

//MODE DEBUG > Suivi Serial 
boolean DEBUG = true;
 
//DĂ©finitions des PINs
//ENTRES
#define buttonPin 50

#define ONE_WIRE_BUS 3

//SORTIES
#define ledPin 22
#define portePin 23
#define alarme 24

//DĂ©finitions des constantes
int courrierState;
int temperatureReturn = 0;
int lastOuverturePortail;

String readString = String(100);

float tempC;
long lastMesureTemp = 0;
long periodeMesureTemp = 120000; //2 mins

// 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);
//Configuration 1-Wire
DeviceAddress Thermometer = { 0x28, 0x97, 0x45, 0x95, 0x04, 0x00, 0x00, 0xEF };

//Configuration Arduino :
byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x19 };
IPAddress ip(192,168,0,100);

//Configuration Zibase :
IPAddress ipZibase(192,168,0,50);
 
//Configuration PushingBox :
char DEVID1[] = "v************"; //DevID PushingBox $message$
char serverPushName[] = "api.pushingbox.com";

EthernetClient client;
EthernetServer server(80);

// Setup des Entres Bounces
Bounce sonnette = Bounce( buttonPin, 50);

void setup() {
  Serial.begin(9600);
  //1-Wire
  sensors.begin();
  sensors.setResolution(Thermometer, 10);
 
  //Setup des Sorties 
  pinMode(ledPin,OUTPUT);
  pinMode(portePin,OUTPUT);
  pinMode(alarme,OUTPUT);
 
  //Demarrage Ethernet
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet");
    // no point in carrying on, so do nothing forevermore:
    while(true);
  }
  else{
    Serial.println("Ethernet ready");
    // print the Ethernet board/shield's IP address:
    Serial.print("IP address Arduino: ");
    Serial.println(Ethernet.localIP());
  }
  // give the Ethernet shield a second to initialize:
  delay(1000);
  server.begin();
  lastOuverturePortail = millis();
}

void loop() {
  //Lectures des entrĂ©es
  if(sonnette.update() && sonnette.read()) analyse_button();

  //TEST Sonnette Code 1 
  if (pwrdRead == "...---..."){
   //ouverture porte
   digitalWrite(portePin, HIGH);
   delay(1000);
   digitalWrite(portePin, LOW);
   pwrdRead = "";
  }
 
  //Test Sonnette Code 2
  if (pwrdRead == ".-."){
   //alarme
   if (alarmeStat == 0){
     digitalWrite(alarme, HIGH);
     alarmeStat = 1;
   }else{
     digitalWrite(alarme, LOW);
     alarmeStat = 0;
   }
   pwrdRead = "";
  }
 
  //Test Sonnette Appui Normal
  if (pwrdRead == "."  || pwrdRead == "_" || pwrdRead == "-"){
   //sonnette normale
   zibaseScenario(63);
   sendToPushingBox(DEVID1,"Quelqu'un%20sonne%20Ă %20la%20maison");
   digitalWrite(ledPin, HIGH);
   delay(1000);
   digitalWrite(ledPin, LOW);
   pwrdRead = "";
  }

  //Test COURRIER
  if(0 == 1){
    zibaseScenario(63);
    sendToPushingBox(DEVID1,"Nouveau%20courrier%20!");   
  }
 
  //APPEL GET : COMMANDE RELAIS
  EthernetClient client = server.available();
  if(client){
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
       
        if (readString.length() < 100) {
        readString += c;
        }       
        //if HTTP request has ended
        if (c == '\n') {           
          if (readString.indexOf("?") >= 0)
          {
             if (readString.indexOf("cmdPortail=1") > 0 ) ouverturePortail();
             if (readString.indexOf("lumPortail=0") > 0 ) {
               Serial.println("Lumiere portail off");
               digitalWrite(alarme, HIGH);
             }               
             if (readString.indexOf("lumPortail=1") > 0 ) {
               Serial.println("Lumiere portail on");
               digitalWrite(alarme, LOW);
             }
             if (readString.indexOf("sonnette=1") > 0 ) Serial.println("action sonnette");
             if (readString.indexOf("temperature") > 0 ){
               Serial.println("renvoie temperature");
               temperatureReturn = 1;
             }
             
          }
          else
          {
            Serial.print("Aucune commande reconnue");
          }
         
          //now output HTML data header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
          if(temperatureReturn){
            client.println("<HTML>");
            client.println("<HEAD>");
            client.println("<TITLE>Arduino Retour Temperature</TITLE>");
            client.println("</HEAD>");
            client.println("<BODY>");
            client.println('<?xml version="1.0" encoding="utf8" ?>');
            client.print("<temperature>");
            client.print(tempC);
            client.print("</temperature>");
            client.println("</BODY>");
            client.println("</HTML>");
          }
          delay(100);
          //stopping client
          client.stop();
         
          readString="";
        }
      }
    }
  }
 
  //Mesure Temperature 1-Wire
  if ((millis() - lastMesureTemp) > periodeMesureTemp){
      Serial.print("Getting temperature...\n\r");
      sensors.requestTemperatures();
      printTemperature(Thermometer);
  } 
}

void ouverturePortail() {
  if(millis() - lastOuverturePortail > 60000) {   
    Serial.print("Ouverture/fermeture portail en cours...\n\r");
   digitalWrite(portePin, HIGH);
   delay(1000);
   digitalWrite(portePin, LOW);
    lastOuverturePortail = millis()
  }else{
    Serial.print("Impossible, ouverture/fermeture portail en cours.\n\r");
  }
}

void analyse_button() {
  pwrdRead = "";
  while(sonnette.read() || sonnette.duration() < 1000) {
    //boucle tant que on a un Ă©tat 1 ou temps inf Ă  1s
    if(sonnette.risingEdge()) goOnTime = millis();
    if(sonnette.fallingEdge()){
      onTime = millis() - goOnTime;
      if (onTime < shortClick){
          //clic court
          Serial.println("appui court");
          pwrdRead += ".";
      }
      if (onTime > shortClick && onTime < longClick){
          //click long
          Serial.println("appui long");
          pwrdRead += "-";
      }
      if (onTime > longClick){
          //Click trop long
          Serial.println("appui tres long");
          pwrdRead += "_";
      }
    }
    sonnette.update();   
  }
}

void printTemperature(DeviceAddress deviceAddress)
{
  float tempC = sensors.getTempC(deviceAddress);
  if (tempC == -127.00) {
    Serial.print("Error getting temperature");
  } else {
    Serial.print("C: ");
    Serial.print(tempC);
  }
}


void zibaseScenario(int scenario){
  client.stop();
  if(DEBUG){Serial.println("connecting Zibase......");} 
  if (client.connect(ipZibase, 80)) {
    if(DEBUG){Serial.println("connected Zibase");}
    if(DEBUG){Serial.println("sendind request");}
    if(DEBUG){
      Serial.print("Lancement scenaro num");
      Serial.println(scenario);
    }
    client.print("GET /cgi-bin/domo.cgi?cmd=LM%20");
    client.print(scenario);
    client.println(" HTTP/1.1");
    client.print("Host: ");
    client.println(ipZibase);
    client.println("User-Agent: Arduino");
    client.println();
  }
  else {
    if(DEBUG){Serial.println("connection Zibase failed :/");}
  }
}

//char msg[]
void sendToPushingBox(char devid[], char msg[]){
  client.stop();
  if(DEBUG){Serial.println("connecting PushingBox...");}

  if (client.connect(serverPushName, 80)) {
    if(DEBUG){Serial.println("connected PushingBox");}

    if(DEBUG){Serial.println("sendind request");}
    client.print("GET /pushingbox?devid=");
    client.print(devid);
    client.print("&message=");
    client.print(msg);   
    client.println(" HTTP/1.1");
    client.print("Host: ");
    client.println(serverPushName);
    client.println("User-Agent: Arduino");
    client.println();
  }
  else {
    if(DEBUG){Serial.println("connection PushingBox failed :/");}
  }
}


Dsl, les commentaires sont essentiellements pour moi...
Il y a pas mal de librairies pour que ça marche chez vous mais vous pouvez les trouvez facilement sur google.

Je repète que c'est en test actuelement, et que le code tel quel n'est pas super fonctionnels quelques trucs marchent mais pas tout c'est pour donner une ligne directrice.

Aller n'hésitez pas à donner des idées je suis joueur :P
xiboard
P'tit Guru de domotique
 
Messages: 78
Inscription: 27 Nov 2012, 00:36

Re: Interfacer un arduino avec une Zibase 2S

Messagede xiboard » 25 Avr 2013, 13:38

Pour completer un peu mon petit message :lol: :lol: :lol:

Je compte me racheter un autre arduio + 3 cartes 8 relais afin de gérer l'éclairage de la maison (câble étoile des inter et plafoniers).
Je pense mettre des inter poussoir partout (bien que avec l'arduino on s'en fou on peux detecter un changement d'Ă©tat).
Il y a une librairie excelente qui est 'ClickButton' elle permet de faire du multiclick/appuis long et companie super simplement.
ça ouvre des possibilitées.
xiboard
P'tit Guru de domotique
 
Messages: 78
Inscription: 27 Nov 2012, 00:36

Re: Interfacer un arduino avec une Zibase 2S

Messagede norbert81 » 25 Avr 2013, 20:17

Salut,
Merci pour ta réponse ;-) j'y vois plus clair et surtout je sais qu'on peut le faire :-)
En fait ton cahier des charges et pratiquement comme le mien ;-) sauf que moi, je voudrais que ce soit la ZIBASE qui pilote tout ça. Mais bon, peut être que je vais changer en cours de route.

Maintenant, je vais me commander le matos, ressortir mon matériel d'électronique quand j'étais étudiant.
Vu que je mon taf c'est developpeur (php, flex, zend, bdd) je pense que je devrais m'en sortir.
Pour moi, c'est important de s'aider et je partagerai mon code avec vous. Plus on est de fou.... ;-)
Norbert
norbert81
Membre Actif
 
Messages: 28
Inscription: 07 Juin 2012, 06:48


Retourner vers Microcontroleurs

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités

Copyright © 2011 - Touteladomotique.com - Tous droits rĂ©servĂ©s
Les blogs partenaires : Abavala, Domo-Blog, Domotique34, Maison et Domotique