Pages: [1] 2   Go Down
Author Topic: Arduino protocol websocket,Ajax ou autre, domotique et plus encore  (Read 5223 times)
0 Members and 1 Guest are viewing this topic.
Made in Belgium
Offline Offline
God Member
*****
Karma: 1
Posts: 756
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Non satisfais des solutions web statique et vu que je cible plus particulièrement la domotique, il me fallait une solution permettant d'utiliser un client léger (tout est relatif) facile à intégré , portable et surtout une solution full duplex.
La seul façons d’atteindre mes objectifs à été d'utiliser les sockets et plus particulièrement les  websocket presque normalisé et déjà implémenté dans safari, chrome et Firefox (pas réussi avec celui ci).
J'ai d'abord chercher les serveurs compatible websocket et j'ai décidé d'utilisé celui ci  en php que j'ai pu remanier à ma sauce pour le rendre compatible avec l'arduino (sans le surchargé de la couche handshake des websocket).
Donc mon (mes) client(s) ce connecte au serveur via les websocket, l'arduino comme socket simple.
Pour la communication entre mon (mes) client(s) et l'arduino j'ai écris mon propre protocole simple et parfaitement adapté à la domotique inspiré du protocole plcbus(x10).
Il est simple à comprendre , il consiste à envoyer une trame du genre format hex 0x02|0x04|0x03|0x05|0x01|0x00|0x03 .
0x02: début de trame
0x04: t'aille des données ici 4 octet (0x03|0x05|0x01|0x00) donc taille maximum de 255 octet (256-la commande) pour l'envoie de donné sur le port série ou autre par exemple.
0x03: la commande par exemple analogWrite (256 possibilités de commandes)
0x05: le numéro de l'entrée correspondant
0x01: HIGH
0x00: ack non demandé (à l'inverse 0x01 ack demandé)
0x03 fin de trame (le fait de mettre un début et une fin de trame permet de vérifié ça validité, pas à 100% mais presque)

Le tout est envoyé au format Json vers le serveur ensuite parser  par le serveur qui transmet la trame à l'arduino, l'arduino retourne la trame sous forma JSon directement au client (le support JSon est natif en javascript donc ...) .
Pour l'instant je n'en suis qu'au début du développement et des testes , il pourra y avoir encore des modifications mais je suis assez satisfait du résultat actuel.

un petit schéma pour visualiser tout ça.


Deux petite vidéos faites avec les moyens du bord, je tente de montré que les deux client (safari et chrome) sont bien synchrone, l'arduino retourne bien le statut ainsi que l’envoie de la valeur d'une photo résistance toute les 5 sec (analog 5)  et l'appuis d'un bouton poussoir en local qui retourne en même temps le statut de la sortie arduino au client web (On vois bien tout l’intérêt des websocket et non celui d'une page web statique qui ne permet pas de modifié le statut d'une entré ou sortie: ma lampe est allumée ou éteinte ????).



La librairie avec 2 petit exemples de possibilités pour l'arduino.
http://only.dommel.be/docs/DDuino.zip

le serveur et l'exemple pour mes testes.
http://only.dommel.be/docs/DDuinowsoc.zip
Vous pouvez utiliser Mamp, Wamb, ... comme serveur web pour le faire fonctionné.

http://www.mamp.info/en/index.html
http://www.wampserver.com/

Pour le serveur il faut modifier cette ligne dans le fichier websocket.start.php avec vos propre valeurs (l'adresse du serveur, le port serveur , l'adresse de l'arduino)
Code:
$master = new WebSocket("192.168.1.100",9390, "192.168.1.109");

pour lancé le serveur il suffit soit via la console de taper la commande si dessous (en s'étant placé dans le répertoire), soit en lançant le fichier websocket.start.php via le navigateur.
Code:
php -q websocket.start.php

pour le client de teste  il faudra également modifier cette ligne dans le fichier client.html avec vos propre paramètres (adresse du serveur et port).
Code:
<body onload="init('ws://192.168.1.100:9390')">

Côté arduino ajouter la librairie et mettre vos propre donnée (adresse arduino, ip serveur, port serveur, ...)
Code:
#include <DDuino.h>

Le code arduino est assez simple, vu que l'arduino agira comme client on tente une connexion, ici je fais une tentative toute les 5 sec pour mes testes.

Code:
if(!client.connected()  && millis() > delay1)
  {
    client.connect();
    if(client.connected())
    {
      Serial.println("conect ...");
    }
    else
    {
      Serial.println("disconet ...");
    }
    delay1 = millis()+5000;
  }

On réceptionne les données clients, appel à une fonction action une fois toute les données reçues .

Code:
if(client.available())
  {
    uint8_t lengthData = client.available();
    
    uint8_t data[lengthData];
    
    int i = 0;
    while(client.available() > 0)
    {
      data[i] = client.read();
      i+=1;
    }
    
    action(data);
    
    client.flush();
  }
}


l'objet ce charge d’effectuer les traitements et de renvoyé des données ack (si demandé "1") ou relevé sonde, ... au clients web

Code:
void action(uint8_t* data)
{
  String str = dduino.sendCmdJsonReturn(data);

  if(str != "0")
  {
    client.print(str);
  }
}

Note: mon protocole n'est pas uniquement valable que pour la communication avec un ethernet shield, il peux aussi être utiliser entre arduino vi un port série, i2c, ...
Une autre méthode aurait alors été utilisé pour l’envoie de données aux client(s) sendCmdDataReturn(uint8_t *data) qui retourne un tableau d'octet, il suffit d'adapter le code aux mode de communications.

Voir le code minimum pour faire fonctionné l'arduino via le web, c'est très light et on peux presque tout faire sans y touché.
Code:
#include <SPI.h>
#include <Ethernet.h>
#include <DDuino.h>

DDuino dduino = DDuino();
unsigned long delay1 = 0;

byte mac[] = {  0x90, 0xA2, 0xDA, 0x00, 0x6D, 0x86 };
byte ip[] = { 192,168,1,109 };
byte server[] = { 192,168,1,100 };
 
Client client(server, 9390);

void setup()
{
  Ethernet.begin(mac, ip, subnet);
  client.connected();
  Serial.begin(9600);
}

void loop()
{  
  if(client.available())
  {
    uint8_t lengthData = client.available();
    uint8_t data[lengthData];
    
    int i = 0;
    while(client.available() > 0)
    {
      data[i] = client.read();
      i+=1;
    }
    
    action(data);
    client.flush();
  }
}

void action(uint8_t* data)
{
  String str = dduino.sendCmdJsonReturn(data);

  if(str != "0")
  {
    client.print(str);
  }
}

Le code web est assez simple en utilisant les fichiers Javascript fourni.
exemple de code html, un simple appel de méthode qui active une sortie numérique de l'arduino digitalWrite(8, 1, 1) active la sortie numérique 8 avec demande de ack, il n'y a rien de plus à mettre, il ne faut pas être un grand développeur pour l'utiliser.

Code:
<div><button id="dw8" onclick="digitalWrite(8, 1, 1)">on</button></div>

pour le retour de statut il suffit de modifier l'intérieure de la fonction appropriée dans le fichier response.js et agir selon les données reçues sur le code html via javascript.

Code:
function digitalWriteResp(pin, value, ack)
{
   id="dw"+pin;
   if(pin == 8)
   {
     if(value == 1)
     {
       $(id).innerHTML="off";
       $(id).setAttribute('onclick', "digitalWrite("+pin+", 0, "+ack+")");
     }
     else
     {
       $(id).innerHTML="on";
       $(id).setAttribute('onclick', "digitalWrite("+pin+", 1, "+ack+")");
     }
  }
}

Les commandes actuels +- testé, // fonctions javascript correspondantent

Code:
#define PIN_MODE 0x01  //pinMode(pin, value)
#define DIGITAL_WRITE 0x02 //digitalWrite(pin, value, ack)
#define DIGITAL_READ 0x03 //digitalRead(pin)
#define ANALOG_REFERENCE 0x04 //analogReference(value)
#define ANALOG_WRITE 0x05 //analogWrite(pin, value, ack)
#define ANALOG_READ 0x06 //analogRead(pin)
#define SHIFT_OUT 0x07 //shiftOut(latch, data, clock, bitOrder, value, ack)
#define SHIFT_IN 0x08 //shiftIn(dataPin, clockPin, bitOrder)
#define PULSE_IN 0x09 //pulseIn(pin)
#define TONE 0x0A //tone(pin, value, ack)
#define TONE_DURATION 0x0B //toneDuration(pin, value, duration, ack)
#define NO_TONE 0x0C //noTone(pin, ack)

#define SERIAL_WRITE 0x0D //serialWrite(chaine)

#define EEPROM_READ 0x0E // eepromRead(address_start, address_end)
#define EEPROM_WRITE 0x0F //eepromWrite(address, value, ack)

#define SERVO_WRITE 0x10 //servoWrite(item, value, ack)
#define SERVO_WRITEMS 0x11 //servoWriteMS(item, value, ack)

#define STEP 0x12 //stepperStep(item, value)
#define SETSPEED 0x13 //stepperSetSpeed(item, value)

#define SPI_PARAM 0x14 //spiParam(BitOrder, ClockDivider, DataMode)
#define SPI_TRANSFER 0x15 //spiTransfer(slave, data)



« Last Edit: October 03, 2011, 09:15:34 am by osaka » Logged


Made in Belgium
Offline Offline
God Member
*****
Karma: 1
Posts: 756
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Suite ...

une dernière petite explication concernant certaines librairies comme EEPROM, Servo, Stepper, ... par défaut elles sont désactivées dans DDuino.h afin d'allégé un peux la librairie, pour les réactivé il suffit de passé leurs directive à 1.
Exemple

Code:
#ifndef SERVO_D
#define SERVO_D 0
#endif

Pour la librairies servo et stepper on peux rajouter des objets Servo ou Stepper dans le code arduino après les avoirs initialisé, on peux en ajouter autant que le permet l'arduino (ou ça mémoire).
Exemple.
Code:
 
  dduino.addServo(3); //on attache un servo à la sortie digital 3
  dduino.addServo(9);

  dduino.addStepper(pas, broche1, broche2); // on donne le pas et attribue les broches du moteur
 dduino.addStepper(pas, broche1, broche2, broche3, broche4);

Dans le code html javascript ça sera aussi un peux différent, on ne s'adresse pas à une entrée de l'arduino mais on donne la position de l'objet dans le tableau.
Exemple:

Code:
servoWrite(0x00, value, 0x01);
On donne la position du servo dans le tableau, donc ici le premier 0x00 qui correspond à la première entrée dans le tableau [ 0 ].
 
Voilà J'ai fini ma petite présentation, il y a encore beaucoup à faire, beaucoup de testes et de debug mais si ça intéresse je partage ce que je cherchais à faire depuis longtemps.
(Je ne suis pas satisfait des sockets php, pas mal de problème genre je reçois les données octet par octet si je laisse pas une pause de 1sec entre l'envoi arduino et ça réponse donc j'ai du improvisé mais c'est pas génial il y a des manques côté php et difficile à résoudre, je n'aime pas ce typage de variables trop permissif et hasardeux ...
Peut être un serveur java perso à la place plus tard)

MàJ:

Je viens de faire une version ajax du projet, il n'y a pas eu grand chose à modifier juste la méthode de transmission, rien de changer pour la librairie indépendante de la partie communication mais j'ai quand même corriger quelques trucs (il y en aura surement encore).

La seule chose à modifier est l'adresse arduino dans socket.php, pour les testes j'ai également fais en sorte qu'il y ai un relevé d'une entrée analogique toute les minutes (voir init() dans webAjax.js) .
A chaque échange il y a automatiquement une valeur de retour toujours sous format JSon ou un simple "0" (response.js pour agir sur la page selon les valeurs de retour).

http://only.dommel.be/docs/DDuinoAjax.zip

Inclus un exemple spécifique DDuinoAjax.pde pour ce cas de figure, l'arduino devient serveur.
http://only.dommel.be/docs/DDuino.zip

« Last Edit: September 27, 2011, 04:58:58 am by osaka » Logged


France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut,

Super bouleau !
Franchement bravo c'est vraiment classe !

Je suppose par contre que les websocket sont pris en charge que par firefox smiley-kitty (opera user inside smiley-mr-green) ?

(Je ne suis pas satisfait des sockets php, pas mal de problème genre je reçois les données octet par octet si je laisse pas une pause de 1sec entre l'envoi arduino et ça réponse donc j'ai du improvisé mais c'est pas génial il y a des manques côté php et difficile à résoudre, je n'aime pas ce typage de variables trop permissif et hasardeux ...
Peut être un serveur java perso à la place plus tard)
Tu parle des sockets php, j'ai justement un projet avec et j'ai ce type de problème (je perd un ou deux byte de la réponse de l'arduino à cause des timings foireux) tu pourrai m'en dire plus là dessus ?

Ps: Pourquoi vouloir faire un serveur java !? Coté but/perf java c'est une cata ...

Quoi qu'il en soit c'est du bon bouleau, avec un petit gui  en jquery ça pourrai faire un truc vraiment sympa !
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Made in Belgium
Offline Offline
God Member
*****
Karma: 1
Posts: 756
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset



Je suppose par contre que les websocket sont pris en charge que par firefox smiley-kitty (opera user inside smiley-mr-green) ?

Normalement oui je les ai activé dans firefox 6 mais j'ai droit à une beau "ReferenceError: Undefined variable: WebSocket", idem pour opera, peut être pas encore activé pour les versions d'osx.
Par contre sous chrome et Safari pas de problème, je suppose que les autres vont suivre bientôt.

(Je ne suis pas satisfait des sockets php, pas mal de problème genre je reçois les données octet par octet si je laisse pas une pause de 1sec entre l'envoi arduino et ça réponse donc j'ai du improvisé mais c'est pas génial il y a des manques côté php et difficile à résoudre, je n'aime pas ce typage de variables trop permissif et hasardeux ...
Peut être un serveur java perso à la place plus tard)
Tu parle des sockets php, j'ai justement un projet avec et j'ai ce type de problème (je perd un ou deux byte de la réponse de l'arduino à cause des timings foireux) tu pourrai m'en dire plus là dessus ?

J'ai du utilisé une variable qui retient chaque entrée jusqu'à la fin du message "}"

Code:
function sendAllclients($msg)
 {
    $this->bufCli.=$msg;
   
    if(substr_count($this->bufCli, '{') && substr_count($this->bufCli, '}'))
    {
        $this->bufCli= $this->wrap($this->bufCli);
        foreach($this->users as $user)
        {
            if($user->socket!= $this->arduino)
            {
                socket_write($user->socket,$this->bufCli,strlen($this->bufCli));
               
            }
        }
        $this->bufCli = "";
    }
 }

c'est pas génial et un peux boiteux mais mieux que d'avoir une latence d'1 seconde entre chaque échange  smiley-confuse

Ps: Pourquoi vouloir faire un serveur java !? Coté but/perf java c'est une cata ...

Ci tu n'utilise pas awt-Swing (et encore) java est très performant et très peux consommateur de ressource.
J'avais fais un serveur de socket Java en mode cli pour mon projet de fin d'étude qui permettais la communication entre divers clients et du matériels plcbus/OneWire/... via port série et sa consommation étaient extrêmement faible tant en mémoire que processeur tout en étant plus fiable et allant beaucoup plus loin que ce que permet php par exemple  .
Java est très loin de ce qu'il était à ses début, mais garde sa mauvaise réputation quand à sa consommation et ressource. smiley-wink
« Last Edit: September 12, 2011, 07:33:05 am by osaka » Logged


0
Offline Offline
Full Member
***
Karma: 0
Posts: 145
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote from: osaka
Si si tu peux faire des includes de .h dans tes .pde, c'est juste le type de fichier utilisé par l'application arduino.
L’intérêt de ma lib et d'utilisé les websockets est justement de ne pas devoir inclure le code web dans l'arduino, donc plus de possibilitées pour l'interface comme l'arduino et le shield sont limité à 2000 octet par connexion (4 simultanée) .
La lib donc mon protocole permet la communication entre l'arduino et n'importe quel moyen de transmission comme tcp/ip, serie, i2c, ... sans même devoir introduire de code dans l'arduino cible (à part l'instanciation de la lib et le moyen de transmission).
Les websockets me permet la communication socket donc full duplex, l'arduino peux envoyé des informations au client web et celui ci peux affiché l'information en temps réel sans devoir en faire la demande en rafraichissant la page ou par bouton, etc.
Par exemple ici chico appuie sur un bouton poussoir physique de son mur, sur sa page web l’état de son ampoule est toujours  "off", moi l'arduino aura notifier à la page que la lampe vient de passer à "on" en temps réel sans intervention de ma part.
On peux même imaginer faire des macros à l'infini à partir de la page web sans que ça prenne un gramme de place dans l'arduino.
Je continue ici c'est plus approprié:

Effectivement ça autorise plus de connexions simultanées, et allège l'Arduino. Mais pourquoi mets tu en avant le full duplex ? C'est comme pour le javascript avec json, c'est toujours le même côté qui initie la conversation non ?

De plus, quelle taille prend ta lib ?
Logged

Made in Belgium
Offline Offline
God Member
*****
Karma: 1
Posts: 756
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Mais pourquoi mets tu en avant le full duplex ? C'est comme pour le javascript avec json, c'est toujours le même côté qui initie la conversation non ?

He bien non là est tout l’intérêt de pouvoir utilisé les socket et donc les websocket ...

Je met en avant le côté full duplex parce que l’intérêt des socket est là justement.
http://fr.wikipedia.org/wiki/Socket
http://fr.wikipedia.org/wiki/Websocket
http://fr.wikipedia.org/wiki/Duplex_%28canal_de_communication%29

- Le protocole WebSocket vise à développer un canal de communication bidirectionnel et full-duplex sur un socket TCP pour les navigateurs et les serveurs web.
- full-duplex pour lesquels l'information est transportée simultanément dans chaque sens

Mon arduino peut très bien informé le client web (ici le navigateur) qui suivant le message reçu modifiera instantanément son contenu (via javascript)
Regarde bien les vidéos j'envoie une trame à l'arduino en cliquant sur le bouton, le socket client (web) informe l'arduino qui exécute l'action demandée, l'arduino renvoie directement à la page web des données au forma JSon (si ack demandé), javascript ce charge de parser les informations (JSon) et agira sur la page directement pour les deux clients (chrome et safari en parallèle ici pour l'exemple, tu vois bien l’état des boutons et autre bouger simultanément des deux côtés).
Regarde aussi la partie AnalogRead pin5 de la page (en bas) qui est le relevé d'une photo résistance, je ne fais aucune action sur la page, c'est l'arduino qui envoie cette information sans que je l'ai demandé et sans avoir besoin de rafraichir la page.
La fenêtre avec le code JSon que tu vois c'est le message renvoyé par l'arduino, ça donne une idée de la vitesse entre l'appuis du bouton ou autre et le message de retour.
Pour de la domotique être informé directement d'un état (ça va la lumière est éteinte ouf  smiley-sleep. He be non madame l'a allumé localement  smiley-twist) ou une alarme ou autre est un minimum pour avoir quelque chose de fiable, imagine que tu ais le feu chez toi, tu préférerais pas être informé directement plutôt qu'au prochain rafraichissement de la page  smiley-roll-blue?

En taille 6ko pour la mémoire programme +-, ça dépand de ce que tu utilise de la lib, en sram je ne sais pas lol  smiley-wink.
« Last Edit: September 20, 2011, 05:54:03 pm by osaka » Logged


Offline Offline
Full Member
***
Karma: 0
Posts: 177
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Étant très intéressé par ton projet j'ai voulu tester l'exemple que tu fournis en zip... mais je suis incapable de verifier le code.. j'ai une bonne petite liste d'erreur :

Code:
In file included from /Users/chesnel/Documents/Arduino/libraries/DDuino/DDuino.cpp:42:
/Users/chesnel/Documents/Arduino/libraries/DDuino/DDuino.h:53:19: error: Servo.h: No such file or directory
In file included from /Users/chesnel/Documents/Arduino/libraries/DDuino/DDuino.cpp:42:
/Users/chesnel/Documents/Arduino/libraries/DDuino/DDuino.h:80: error: 'Servo' has not been declared
/Users/chesnelDocuments/Arduino/libraries/DDuino/DDuino.h:104: error: ISO C++ forbids declaration of 'Servo' with no type
/Users/chesnel/Documents/Arduino/libraries/DDuino/DDuino.h:104: error: expected ';' before '*' token
/Users/chesnel/Documents/Arduino/libraries/DDuino/DDuino.cpp: In member function 'uint8_t* DDuino::runCMD(uint8_t*)':
/Users/chesnel/Documents/Arduino/libraries/DDuino/DDuino.cpp:209: error: 'class DDuino' has no member named 'servo'
/Users/chesnel/Documents/Arduino/libraries/DDuino/DDuino.cpp:211: error: 'class DDuino' has no member named 'servo'
/Users/chesnel/Documents/Arduino/libraries/DDuino/DDuino.cpp:222: error: 'class DDuino' has no member named 'servo'
/Users/chesnel/Documents/Arduino/libraries/DDuino/DDuino.cpp:224: error: 'class DDuino' has no member named 'servo'
/Users/chesnel/Documents/Arduino/libraries/DDuino/DDuino.cpp: At global scope:
/Users/chesnel/Documents/Arduino/libraries/DDuino/DDuino.cpp:385: error: variable or field 'setServo' declared void
/Users/chesnel/Documents/Arduino/libraries/DDuino/DDuino.cpp:385: error: 'Servo' was not declared in this scope
/Users/chesnel/Documents/Arduino/libraries/DDuino/DDuino.cpp:385: error: 'servos' was not declared in this scope

aurais-je raté quelque chose ? :/
Logged

Made in Belgium
Offline Offline
God Member
*****
Karma: 1
Posts: 756
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Suite ...

une dernière petite explication concernant certaines librairies comme EEPROM, Servo, Stepper, ... par défaut elles sont désactivées dans DDuino.h afin d'allégé un peux la librairie, pour les réactivé il suffit de passé leurs directive à 1.
Exemple

Code:
#ifndef SERVO_D
#define SERVO_D 1
#endif


Ca doit venir d'ici, je ne les ai pas inclus par défaut afin de gagner un petit peux de place  smiley-small (qui est précieuse pour l'arduino  smiley-confuse) et comme pas indispensable si on à pas besoin de servo ou ou autre objet des lib "standard".
Dans "/Users/chesnel/Documents/Arduino/libraries/DDuino/DDuino.h" ligne 32

Normalement avec le premier exemple "dDuino1" il ne devrait pas y avoir besoin de modifié la lib.  smiley-wink

Edit: A l'inverse pour le premier exemple, mettre la directive à 1 dans DDuino.h sans inclure <Servo.h> dans le .pde peux donner cette erreur. c'est un des côté du c/c++ où j'ai du mal à comprendre certain comportement...
« Last Edit: September 21, 2011, 07:16:48 am by osaka » Logged


Offline Offline
Full Member
***
Karma: 0
Posts: 177
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

okay merci je testerais ce soir en rentrant smiley
Logged

Made in Belgium
Offline Offline
God Member
*****
Karma: 1
Posts: 756
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

J'ai surement du être peux claire dans certaine de mes explications donc n'hésite pas à demandé.  smiley-wink
Edit: j'ai fais quelque modification et ajout.
« Last Edit: September 21, 2011, 12:24:43 pm by osaka » Logged


0
Offline Offline
Full Member
***
Karma: 0
Posts: 145
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

J'ai regardé un peu plus en détail et mieux compris… chapeau !  smiley
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 177
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bon après mettre rendu compte que je m'acharner à faire fonctionner sour Firefox... et que malgrès le wesocket activé j'avais cette erreur dans la page : ReferenceError: WebSocket is not defined (D'ailleurs Firefox est sensé pouvoir gérer le websocket ce n'est pas normal d'avoir cette erreur :/)
Je suis passé sous chrome eh là j'ai franchi une étape de plus...
Code:
WebSocket - status 0
Disconnected - status 3

Et  mon websocket se déconnecte... as-tu déjà eu ce soucis ?

Ps : apparament cela provient du coté arduino ou il n'a aucune réponse donc il se déconnecte. Pourtant j'ai pingé l'ip de mon arduino est j'ai un retour... Je continue à chercher.
« Last Edit: September 24, 2011, 11:57:16 am by chesnel » Logged

Made in Belgium
Offline Offline
God Member
*****
Karma: 1
Posts: 756
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

En fait j'ai seulement vu il y a peu qu'avec firefox côté javascript la connexion ce fait via MozWebSocket et non webSocket ... de plus ils sont passé à la version 7 du protocole ..., j'ai réussi à obtenir une connexion mais nouveauté bizarre de la part de mozilla la communication semble crypté ou sous un autre type d'encodage ... arf ... on dirait qu'ils ont fais leur truc à leur sauce comme le fait microsoft   smiley-neutral (même en envoyant une chaine de caractère identique à l'arrivée elle est toujour différente et sous forme "?[?P$" ou ?œ?4?? ou ??,זCm ....)
Également un nouveau phénomène avec chrome, on dirais qu'ils sont passé à la version 8 du protocole sans que j'ai fais de mise à jour ou autre  smiley-eek-blue ... il est similaire au handshaque qui a été radicalement modifié à partir de la version 6 du protocole  mais je n’obtiens pas la connexion  smiley-cry qui pourtant marche avec firefox ...  smiley-twist mon upgrade et la clef sont pourtant bon et conforme à la norme ...
Ca marche toujours pour Safari et Opera (j'avais oublier de l'activé précédemment) qui sont toujours sous le protocole antérieure au 6 ...
Beaucoup de choses sont en trains de bouger niveau websocket, vivement que la normalisation définitive ...
« Last Edit: September 24, 2011, 12:30:12 pm by osaka » Logged


Offline Offline
Full Member
***
Karma: 0
Posts: 177
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Au niveau de chrome l'endroit ou sa bloque c'est à la ligne 36 du websocket.class.php

Code:
if($socket==$this->master)

le $socket = Resource id #6
le $this->master =Resource id #5

J'ai pas chercher plus loin et j'ai tester sous Safari et là autre erreur... Arduino disconnect smiley-grin
Logged

Made in Belgium
Offline Offline
God Member
*****
Karma: 1
Posts: 756
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

http://only.dommel.be/docs/DDuinowsoc.zip je remet le fichier à jour histoire d'avoir la dernière version avec le nouveau handshake.

http://only.dommel.be/docs/DDuino.zip
« Last Edit: September 24, 2011, 01:18:30 pm by osaka » Logged


Pages: [1] 2   Go Up
Jump to: