Avant toute chose merci de (re)prendre connaissance de la charte et de la respecter.
Pour résumer :
- Avant de poser une question, je cherche si la réponse existe
- Je suis poli, courtois et je respecte tout un chacun sur le forum
- Si un post m'agace : je m'en éloigne plutôt que de répondre d'une façon qui pourrait être mal interprétée


Il n'est jamais du luxe que de rappeler des choses simples :
Courtoisie, amabilité, politesse et bonne humeur sont les maîtres mots pour un forum sympathique, bienveillant et accueillant :)

Le groupe des Helpers est present pour vous aidez, n'hésitez pas à poser des questions ;)

Toute la communauté vous remercie

/!\ L’ancien forum passera en lecture seule en janvier 2020 (Si community a bien pris le relais) puis nous le fermerons définitivement en janvier 2021./!\
Merci de vous rendre sur https://community.jeedom.com maintenant pour vos prochains postes ;)

Les sketchs Mysensors....Comprendre, Améliorer, Créer!

Retrouvez ici des sujets concernant le protocole mySensors et les modules domotiques de type mySensors utilisés avec JEEDOM
/!\ Plugin mySensors non officiel
rol-rider
Actif
Messages : 5059
Inscription : 10 août 2014, 23:50

Les sketchs Mysensors....Comprendre, Améliorer, Créer!

Message par rol-rider » 28 févr. 2015, 13:53

A la manière de Totovaauski ! je vais essayer de mettre les choses en forme!
Je vous recommande son post :https://forum.jeedom.fr/viewtopic.php?f=35&t=5131
très instructif pour les débutants sur IDE Arduino indispensable ici.
Encore un post utile pour des achats de composants, cartes, matériels électroniques.https://forum.jeedom.fr/viewtopic.php?f=35&t=4653
Je ne suis pas un spécialiste de la programmation, ni de MySensors, mais je voulais rassembler ce qui parait évident pour certain et incompréhensible pour d'autres.
J'ai besoin bien entendu de l'aide des spécialistes, pour corriger mes erreurs.
Je commence donc cette découverte de MySensors avec Al85 qui m'est d'un précieux secours.
Tout à commencé ici: http://www.mysensors.org/


Bien sur ces informations peuvent contenir des erreurs, des imperfections, des fautes d'orthographes...etc à vous de me les signaler pour que je puisse rectifier.

lexique de base et termes utilisés dans les sketchs MySensors

N°ID............:Adresse du nœud sur le réseau mysensors (référencé ID du node sur la page du plugin mySensors de Jeedom)
CHILD_ID......:Numéro du capteur sur le nœud.Un nœud peut avoir plusieurs capteur température, humidité...etc
S_..............:Type de capteur présent sur le nœud. S_LIGHT par exemple.
V_..............:Type de message a envoyer ou recevoir.V_LIGHT par exemple.
Jeedom........:Lorsque j'aborde Jeedom, c'est bien sur le plugin mySensors sur Jeedom (j'espère que lunarok ne m'en voudra pas pour ce raccourci).
Gateway.......:La passerelle entre le réseau MySensors et votre réseau informatique (aujourd'hui, deux types pour Jeedom, Serial/USB et Ethernet/RJ45).
Node...........:Un nœud (capteur/actionneur).
Controler......:Le service coté informatique qui communique avec la gateway.
Sensor.........:Un capteur sur un nœud.
Repeater......:Un nœud répéteur de signal (sur secteur et sans période de sommeil) il peut aussi être capteur/actioneur.
NRF24L01+...: Petit module de 4.5cm2 qui assure la gestion de la communication sans fil sur la fréquence 2.4GHz.
Sketch.........:Terme utilisé pour désigner les programmes arduino.
Téléverser....:Action de mettre en mémoire (dans le nano ou pro mini) le sketch (programme).
Pin 2...........:Broche N°2 du nano ou pro mini.
BP reset.......:Le bouton reset du nano ou pro mini permet de re lancer le sketch depuis le début.(pratique pour refaire une présentation du nœud).
Clear eeprom.....:Action de téléverser le sketch "ClearEepromConfig" afin d'effacer l'eeprom de l'arduino (le N°ID ainsi que l'état des relais sont conservés dans l'eeprom).




Commençons par le protocole de communication MySensors

C'est un protocole série qui est utilisé entre le node (noeud) et la Gateway (passerelle) ou entre node. Une simple liste de commande/valeurs séparé par des ; sa taille est de 25 octets.
Le maximum pour le NRF24L01+ est de 32 octets. La bibliothèque de MySensors (version 1.4) utilise 7 octets pour l'en-tête du message.

Exemple d'une réception dans les logs MySensors de jeedom:

<- 11;0;1;0;0;21.8
28-02-2015 15:51:22 | info | Save Value : Value-21.8-11-0
28-02-2015 15:51:22 | info | http:/127.0.0.1:80/jeedom/core/api/jeeApi.php?api=xxxxxxxxxxxxxxx&messagetype=saveValue&type=mySensors&id=11&sensor=0&donnees=0&value=21.8

11;0;1;0;0;21.8---------réception brute du nœud, dans l'ordre-------- Node, Sensor, Commande, Ack, Type, Value

11 ---Node C'est le N°ID pour différencier les différents nœuds. Il est généré par la gateway et stocké en Eeprom dans le nœud (la donnée est conservée même sans alimentation et n'est pas écrasée lors d'un nouveau téléversement, d'où l'utilité du ClearEeprom) sa valeur peut être comprise entre 1 et 254, (0 et 255 sont réservés) . Dans le sketch ce sont les commandes "gw.sendSketchInfo("Capteur ILS", "1.0");"et "gw.present (CHILD_ID, S_DOOR);" qui vont créer l'équipement sur jeedom avec un N°ID. Capteur ILS est le nom du sketch dans les informations sur jeedom et 1.0 la version du sketch, un numéro de sensor et des info/commande correspondant ici à un capteur d'ouverture. Sans ces commandes, pas de création d'équipement dans Jeedom.

0 ----sensor Chaque nœud peut avoir plusieurs capteurs par exemple le DTH22 donne l'humidité et la température donc 2 capteurs sur le même nœud avec le même N°ID nous aurons sensor 0 et sensor 1 pour différencier les données. C'est le sketch qui va les attribuer gw.present(CHILD_ID,S_LIGHT); avec CHILD_ID de 0 à 254 (avec 254 capteurs! ça devient un sac de nœud!)

1-----Commande de 0 à 4
0 = c'est une présentation, envoyé par un nœud quand il se présente. Cela se fait habituellement dans le setup () au démarrage du sketch.
1= c'est un SET (demande de mise à jour) d'un nœud vers la gateway pour modifier une valeur ou de la gateway vers un nœud pour activer un relais ou d'un nœud vers un nœud.
2= c'est un GET.(demande le valeur) ne vient pas forcément d'un nœud vers Jeedom. On pourrait très bien faire un GET d'un nœud vers un autre ou un GET depuis Jeedom pour vérifier une valeur.
3= message interne I_BATTERY_LEVEL par exemple ou aussi une demande de reboot.
4= Destiné à l' OTA fonctionnel avec Jeedom.

0-----Ack pas pris en charge sur Jeedom???? Le paramètre ack à la signification suivante:
sortant: 0 = message non acquitté, 1 = demande ack du noeud
entrant: 0 = message normal, 1 = ceci est un message ACK

0-----Type Selon la commande (présentation ou mise à jour d'un valeur) la signification est différente.
pour une présentation: 0 pour ouverture---S_DOOR, 3 pour relais---S_LIGH (voir tableau 1).
pour une mise à jour : 0 pour température--VTEMP, 3 pour dimmer--V_DIMMER (voir tableau 2).

21.8--value La valeur envoyée.

Donc pour notre exemple des logs Jeedom 11;0;1;0;0;21.8 nous avons affaire à un nœud N°11; c'est le capteur (0); c'est le nœud qui émets vers la gateway(1);Ack, on en tient pas compte?? (0); il s'agit d'une température (0) ; la valeur est (21.8). C'est donc un nœud température qui envoie la valeur 21.8

Tableau 1 : N° d’identifiant et correspondance Jeedom lors d'une Présentation (commande=0)
Image

Tableau 2 : N° d’identifiant et correspondance lors d'une demande d'un nœud de mise à jour d'une valeur (commande=1)
Traduction google, extrait du site MySensors ( toutes ne sont peut être pas valides sur Jeedom)
Image
Dernière édition par rol-rider le 30 avr. 2015, 18:13, édité 15 fois.
RPI3 avec mSATA
RFXcom; RFLink; Z-Wave; Mysensors; ESPEasy
Noeuds MySensors-téléinfo-Température-Distance-Baromètre-relais
Noeuds ESPEasy-open-garage-relais-PIR-Station Météo

rol-rider
Actif
Messages : 5059
Inscription : 10 août 2014, 23:50

Re: Les sketchs Mysensors....Comprendre, Améliorer, Créer!

Message par rol-rider » 28 févr. 2015, 13:54

Image

Notre premier sketch

Dans cette exemple issu du site de MySensors.
nous avons de la ligne 1 à 9.
la zone déclarative.
on y trouve,
les différentes bibliothèques utilisées (les anglais disent library....donc en français on trouvera parfois librairie), ici MySensor.h et SPI.h
Les différentes variables, et pourquoi ici et pas dans la fonction setup, ici elles seront globales sinon elles seront locale.
Variable globale: La variable est visible et utilisable de n'importe quel endroit du programme.
Variable local: La variable n'est visible et utilisable que dans une certaine partie du programme.

nous avons de la ligne 11 à 15.
La fonction Setup qui sera lue et exécutée qu'une seul fois.

nous avons de la ligne 17 à 21.
La fonction Loop qui sera lue et exécutée en boucle sans fin.


Initialisation dans la zone déclarative

#include <MySensor.h>................obligatoire, bien sur, puisqu'on l’utilise.

MySensor gw;...........................ici on donne un nom à la bibliothèque (gw) se pourrait être bmw, mais on laisse gw ça va éviter des erreurs par la suite.

MyMessage msg (ID, V_TRIPPED);....Pour envoyer des données, on doit les stoker, l'envoi effectif à la gateway se fera dans la fonction loop avec gw.send (msg.set(OPEN));


Dans la fonction void setup (exécutée une seule fois).

gw.begin();...............Obligatoire pour utiliser la bibliothèque, une sorte de démarrage, remarquer gw devant .begin, si vous l'avez appelée bmw il faut mettre bmw.begin();
Si c'est la première fois que le nœud est lancé, il va chercher un N°ID unique de la gateway. Une fois que le N°ID a été reçu il sera sauvegardé dans la mémoire EEPROM de l'Arduino. Le N°ID est automatiquement lu dans l'EEPROM à chaque réinitialisation du nœud.
L'initialisation détermine également le chemin du réseau le plus court vers la Gateway.

EXEMPLE: gw.begin(message_spécial, Attribution_id_du_nœud, mode_répéteur, id_d'un_nœud_parent, .... pas besoin du reste )

message_spécial..........en cas de type relais ou autres qui doivent recevoir des modifications depuis jeedom il faut mettre : incomingMessage (qui sera une partie du sketch détaillé après).

Attribution_id_du_nœud........Attribution du N°ID du nœud normalement laisser la valeur "AUTO" ce qui signifie qu'il sera attribuer par jeedom.

mode_répéteur...............Activation du mode répéteur c'est a dire qu'il peut recevoir des info d'autres nœuds et les envoyer à la gateway.
true= mode répéteur activé
Pas renseigné= mode répéteur désactivé

id_d'un_nœud_parent......... Possibilité de renseigner l'ID d'un nœud parent je ne connais pas exactement l'utilité.

Voilà ce que l'on trouve dans le sketch RelayActuator............gw.begin(incomingMessage, AUTO, true);

gw.present (ID, S_DOOR);................C'est la présentation, le nœud doit se présenter à la gateway. Ici, ID, plus souvent CHILD_ID parce que ce n'est pas le N°ID du nœud mais N° du sensor, avec un DTH22, deux valeurs, humidité et température, donc deux CHILD_ID différentes.
Comme ici dans le sketch HUMIDITYSENSOR
gw.present(CHILD_ID_HUM, S_HUM);
gw.present(CHILD_ID_TEMP, S_TEMP);

Voir le Tableau 1 et respecter les types de nœuds afin que Jeedom crée les bonnes info/commande.
Par exemple pour la création dans jeedom d'un équipement relais avec info/commande il faudra utiliser S_LIGHT.


Dans la fonction void loop (exécutée en boucle).

gw.send(msg.set(OPEN));.........Envoi des données (si MyMessage msg ( ID , V_TRIPPED ) a été déclaré) c'est donc ici que les données sont transférées à la gateway (ou à un nœud ).
Le type de variable envoyé au contrôleur a été spécifié dans MyMessage (voir tableau ).

L'exemple du sketch ci-dessus est volontairement simpliste et inutile, car il signale la même valeur toutes les 10 secondes.
Dernière édition par rol-rider le 16 juin 2015, 20:00, édité 7 fois.
RPI3 avec mSATA
RFXcom; RFLink; Z-Wave; Mysensors; ESPEasy
Noeuds MySensors-téléinfo-Température-Distance-Baromètre-relais
Noeuds ESPEasy-open-garage-relais-PIR-Station Météo

rol-rider
Actif
Messages : 5059
Inscription : 10 août 2014, 23:50

Re: Les sketchs Mysensors....Comprendre, Améliorer, Créer!

Message par rol-rider » 28 févr. 2015, 13:54

Passons maintenant à un sketch proposé dans les exemples de IDE arduino.



...........................................................RelayActuator.ino...............................................................


Image


La zone déclarative ligne 1 à 12

Rien de nouveau,
Les bibliothèques nécessaires.

La déclaration des constantes.
#define RELAY_1 3............................on attribue la pin 3 pour notre premier relais, on peut évidemment la changer pour des raisons de câblage.
#define NUMBER_OF_RELAYS 1..............on définit le nombre de relais que l'on souhaite. Si vous avez 2 relais le second sera sur la pin 3+1.
#define RELAY_ON 1..........................on définit la valeur qui sera utilisé pour le on/off du relais.
#define RELAY_OFF 0.........................par exemple si vous avez des platines relais qui colle avec une sortie à 0, il suffit d'inverser RELAY_ON 0 et RELAY_OFF 1

Le nom de la bibliothèques MySensor.

La fonction setup ligne 14 à 30

Le démarrage de notre bibliothèque MySensor par:
gw.begin(incomingMessage, AUTO, true);
incomingMessage...........................Fonction pour des messages entrants et sortants provenant d'autres nœuds ou de la gateway (permets de recevoir les ordres de commutations du ou des relais).
AUTO.........................................Attribution par la gateway d'un N°ID.
true...........................................Activation du mode répéteur (un nœud relais est normalement alimenté sur secteur, on utilise donc le mode répéteur).


gw.sendSketchInfo("Relay", "1.0");......Cette fonction sert a envoyer l'intitulé du sketch sur la page équipement de jeedom (pour le nœud créé). Elle est indispensable sous Jeedom, sans elle, pas de création de nœud par le plugin. pas mal de débutants (moi compris) se sont cassés les dents sur le sketch "BinarySwitchSensor" ou elle est manquante !

EXEMPLE: gw.sendSketchInfo(Nom_du_sketch,Version_sketch,Acquittement);

Nom_du_sketch= on peut mettre le nom du sketch que l'on veut qui détail le but du sketch, maximum 25 caractères, cela sera remonté sur jeedom
Version_sketch = on peut mettre la version du sketch que l'on fait cela sera remonté sur jeedom
Acquittement = Permet de recevoir un acquittement de la passerelle pour être sur de la bonne communication avec la gateway. La gestion de cela sera vu plus tard.

Pensez à mettre des guillemets car variable de type string (texte)
Comme ici : gw.sendSketchInfo("Relay", "1.0");

Ensuite vient la présentation:
gw.present(sensor, S_LIGHT);...........ici, elle se trouve dans une boucle qui est répétée autant de fois que le nombre de relais saisi plus haut. sensor est défini à 1 donc le premier sensor (capteur pour jeedom) aura la valeur 1 et on utilise S_LIGHT qui correspond bien d'après le tableau 1 à un relais.

Toujours dans la boucle: pinMode(pin, OUTPUT);.................ici on configure en sortie la pin attribué au relais (même principe que la présentation un ou plusieurs relais).

Viens maintenant cette commande qui permet lorsque le nœud reboot (lors d'une coupure de courant par exemple) de récupérer sa dernière position. Mieux que le RFXcom qui lui se met en phase de programmation (5sc) lors de la reprise du courant et ensuite à 0.

digitalWrite(pin, gw.loadState(sensor)?RELAY_ON:RELAY_OFF);
gw.loadState(sensor);....................On va chercher dans EEPROM la valeur stocké à la position sensor et la fonction digitalwrite va écrire sur la pin qui est en sortie la valeur récupérée.(toujours dans la boucle, donc pin3, pin4 en fonction du nombre de relais.

La fonction loop ligne 33 à 37

Pas grand chose ici,gw.process();
Rappelez-vous que nous sommes dans la zone principale du programme et que tout ce qui s'y trouve est exécuté en boucle.
Notre nœud est un nœud relais et répéteur. Donc nous attendons un message pour commuter le relais ou relayer un message d'un nœud trop éloigné de la gateway.
ça tombe bien parce que c'est le rôle de la fonction.
gw.process();............................Traitement des messages radio entrants,(pas de mise en sommeil).

La fonction void incomingMessage(const MyMessage &message) ligne 39 à 52

C'est ici que le signal est traité.
(je vais avoir besoin d'aide pour éclaircir cette fonction)
En gros: si le message reçu est du type V_LIGHT on commute (digitalWrite) le ou les relais en fonction du message et on sauve la valeur en mémoire avec (gw.saveState(message.sensor, message.getBool());)

gw.saveState(message.sensor, message.getBool());...............Enregistrement de l’état dans le nœud.

gw.saveState(adresse, valeur);

adresse...................adresse (0à255) ou l'on va écrire la valeur.
valeur.....................valeur à mémoriser.
Vous pouvez enregistrer un état dans l'EEPROM, ce qui permets au nœud de type actionneurs de "se rappeler" l'état après une mise hors tension. Vous avez 256 octets de libre. Notez qu'il y a une limitation sur le nombre d'écritures en EEPROM (~ 100 000 cycles).

Les "Serial.print("Incoming change for sensor:");" sont destinés au moniteur série de IDE arduino, et ne pourront être affichés que si le nœud est relié en USB à l'ordi sur lequel tourne IDE arduino.

Les autres fonctions utilisées

gw.sleep(Interruption, mode, ms);...............fonction de mise en sommeil.
Pour économiser la batterie, il est crucial de faire dormir le nœud autant que possible. Le nœud peut se réveiller par des interruptions externes (pin 2 ou 3) ou par une minuterie.

Interruption........................l'interuption qui doit déclencher le réveil.
mode...............................3 modes différents RISING sur front montant, FALLING sur front descendant, CHANGE sur changement.
ms..................................Nombre de milliseconde, (si=0 pas de réveil).

EXEMPLE:

unsigned long SLEEP_TIME = 30000;..........................ici on déclare (dans la zone déclarative) le temps de sommeil, ce sont des millisecondes donc 30sc. de 1 à 4294967295 soit plus de 49jours!
gw.sleep(SLEEP_TIME);.........................................ici on appelle la fonction sommeille (à la fin de la fonction loop) et 30sc plus tard, la fonction loop est ré-exécutée.


gwsleep(PRIMARY_BUTTON_PIN-2, CHANGE, 0);............ici le réveil ne se fait que sur le changement (0/1) de la pin 2.



gw.sendBatteryLevel(niveau, ack);

niveau................................Niveau de batterie 0-100(%)
ack....................................Permet de demander un acquittement de la communication. Par défaut, pas d’acquittement.

Exemple:gw.sendBatteryLevel(p);............................Je vous renvoie sur le post d'edualc fort instructif sur la surveillance des piles et de l'utilisation de cette commande.https://forum.jeedom.fr/viewtopic.php?f=35&t=2051
Dernière édition par rol-rider le 16 juin 2015, 20:02, édité 9 fois.
RPI3 avec mSATA
RFXcom; RFLink; Z-Wave; Mysensors; ESPEasy
Noeuds MySensors-téléinfo-Température-Distance-Baromètre-relais
Noeuds ESPEasy-open-garage-relais-PIR-Station Météo

rol-rider
Actif
Messages : 5059
Inscription : 10 août 2014, 23:50

Re: Les sketchs Mysensors....Comprendre, Améliorer, Créer!

Message par rol-rider » 28 févr. 2015, 13:54

Pour débuter avec Mysensors.....côté réalisation/pratique.
(ceci est bien sûr mon avis et il n'engage que moi, on peut bien sur faire autrement.)


Alors vous l'aurez compris:
il vous faut:
-Un contrôleur, ici ce sera Jeedom avec le plugin Mysensors d'installé.
-Une passerelle (la Gateway) qui fera la liaison entre les noeuds (nodes) et le contrôleur.
-Un noeud (ou node) au minimum en fonction de ce que vous voulez mesurer (temp, pression, lumière, relais,etc....)

Pour réaliser ce projet,
deux choix possibles:

-Connecter les différents composants à l'aide de câbles Dupont femelle-femelle (voir le site MySensors, je n'en parlerai pas ici)

-Souder et connecter les différents composants sur plaques d'essai (pour une réalisation durable, c'est le meilleur choix).

Donc quelques soudures sur plaques d'essai (en époxy, éviter la bakélite trop fragile).
il vous faudra un fer à souder avec une panne fine genre JBC 14ST ou Antex C15 (J'ai un JBC40ST avec une panne de 1mm et ça le fait!).
Un rouleau de soudure, maxi 0.8mm (si le fil est trop gros vous allez faire des pâtés).
Pour le fil de câblage, j'utilise du fil de récupération de câble RJ45 (multibrin et suffisamment fin).
quelques outils, pince coupante, étau , lampe etc....
évitez les foirfouilles et autre premier prix!! Rappelez-vous,Les bons outils font les bons ouvriers.



la Gateway:

Deux choix possibles la série et l'Ethernet.

La série est connectée en usb au Raspberry (je prends exemple de Jeedom installé sur Raspberry), l'alimentation de la gateway se fait par l'usb.

L'Ethernet, elle est relié sur votre réseau domestique, une alimentation externe est indispensable.

Je parlerais que de la gateway série, plus simple et rapide à réaliser.

On peut la décomposer en trois parties:
1- l'alimentation ,très simple elle sera fournie par le câble usb.
2- la partie microcontrôleur (basé sur arduino avec un programme appelé sketch à téléverser dans la mémoire de l'arduino).
3- la partie émission/réception (réalisé par un module NRF24L01+)

Le matériel minimum pour la gateway série:

un arduino nano.
Image
un NRF24L01+ (avec antenne intégrée).
Image
ou un NRF24L01+ (avec antenne déportée).
Image

un câble mini usb/usb A
Image

Boîtiers, une plaque d'essai à pastille, fil de câblage,connecteur pour NRF.
Image

bien sur le choix du nano peut être discuté, mais c'est vraiment le mieux pour réaliser simplement la gateway série.



Le nœud (ou node)

Le premier sera un nœud température (capteur numérique DS18B20).

Le matériel minimum:
un arduino nano.
un chargeur 220/5V
un câble mini usb/usb A
un NRF24L01+ (antenne intégrée) avec son connecteur.
un DS18B20 + résistance 4.7K

Image
Une source d'alimentation pour le nœud température.


Image
DS18B20 en boitier TO 92

Image
le même encapsulé et "étanche".



un boîtier, une plaque d'essai à pastille, fil de câblage etc....

le choix du nano est ici beaucoup moins évidente, pas question d'alimenter le nano sur pile, mais le but est de faire simple, pour vous lancez à réaliser votre premier nœud.
Libre à vous ensuite de prolonger l'expérience en réalisant un nœud sur pile à base de carte Laregie ou de Pro Mini 3V 8Mhz modifié (elles sont toutes basées sur le même microcontrôleur l'Atmega328P).

Alors pourquoi le nano pour débuter:
-Facile à programmer par le câble usb A/mini usb (le convertisseur série est sur la carte, la liaison usb permet de visionner des infos sur le moniteur série de IDE arduino).
-Facile à alimenter par le câble usb A/mini usb.
-Dispose d'une sortie 3.3V parfaite pour alimenter le NRF24L01+.
-Pas cher environ 3€....sur ebay Chine.


A suivre.....


Avant de continuer, il vous faudra acheter les nano, nrf, et autres composants des adresses ont déjà été données......je les remets.
Achat de composants en France ou à l'étranger:
https://forum.jeedom.fr/viewtopic.php?f=35&t=4653.....pour l'étranger je commande souvent chez Czb Electronic pour une 30/40€ maxi j'ai jamais eu de soucis (sauf que c'est long 3/4 semaines! parfois moins).
Pour vous familiariser avec arduino:
https://forum.jeedom.fr/viewtopic.php?f=35&t=5131
http://www.mon-club-elec.fr/pmwiki_mon_ ... IN.ARDUINO


Travaux pratiques...La soudure

Voilà ce que vous recevrez si vous avez commandé un nano.
Image


Je positionnement le nano avec les broches sur la plaque d'essai à trous (aucune soudure n'est encore faite).
le positionnement sur la plaque permet de garder le bon entraxe entre les deux rangées de broches.
je ne soude pas le connecteur ICSP....que l'on utilise pas.
Image

j'utilise un support Weller.
Image

mais sur un étau, c'est aussi possible!
Image


Pour une bonne soudure il faut chauffer la broche et la pastille quelques secondes avant d'apporter le fil de soudure (du 0.5mm pour moi) le laisser fondre puis retirer la panne. (le PCB est à trou métallisé il faut quand même laisser la panne 3/4sc). Pour éviter la surchauffe, faite une soudure de chaque coté l'un après l'autre.
Pas de commentaire sur la panne, elle est froide, sale et vielle....je cumule!
Image


voilà toutes les soudures ont été faites, on peut retirer le nano de la plaque d'essai pour vérification.
Image

Certaines sont à refaire !
Image

Maintenant que vous maîtrisez les soudures et avant de passer au câblage avec le NRF24L01,
je vous conseille de vous familiariser avec le logiciel IDE arduino.
Petite précision: le nano dispose d'un convertisseur usb série à base de CH340 qui vous posera beaucoup moins de problème d'installation que le fameux convertisseur FT232R. (encore un avantage pour ce nano).
Amusez-vous à téléverser votre premier sketch----Blink est fait pour ça, il fait clignoter la led sur la pin 13 et ça tombe bien parce que le nano dispose d'une led sur le module connecté à la pin 13, donc après le téléversement vous devriez voir la led clignoter.
Je crois qu'elle clignote déjà à la base mais rien ne vous empêche de modifier les tempo de clignotement delay(50) et delay(2000) vous verrez que votre sketch contrôle bien votre nano!
Attention, lorsque vous branchez l'usb sur le nano celui-ci est sous tension et les barrettes que vous venez de souder aussi alors poser votre nano sur une surface non conductrice à l'écart de fil, tournevis etc..



Le Câblage

Pour réaliser les différentes liaisons (avec du fil multibrin de câble RJ45).
J'utilise la pastille à coté de la broche du nano. (le fil de câblage est étamé avant, c'est plus simple à souder et ça évite qu'un brin de cuivre se ballade sur l'autre pastille).
Image


Après soudure, (pas réalisée ici) il n'y a plus qu'à couper et plier le fil vers la broche et à lier (en chauffant) les deux soudures.
Image


Voilà un exemple avec les soudures réalisées.
Image

Pour gagner de la place en largeur (ici c'est un nœud sur pile) j'ai positionné les fils de câblage entre les deux barrettes du module arduino.
Cela demande un peu plus de préparation (faire un schéma sur papier avec un repérage N°pin/couleur du fil).
Il faut d'abord souder tous les fils et ensuite positionner et souder le module arduino (ici c'est un pro mini).
Image
Dernière édition par rol-rider le 26 avr. 2015, 11:59, édité 8 fois.
RPI3 avec mSATA
RFXcom; RFLink; Z-Wave; Mysensors; ESPEasy
Noeuds MySensors-téléinfo-Température-Distance-Baromètre-relais
Noeuds ESPEasy-open-garage-relais-PIR-Station Météo

Avatar de l’utilisateur
lunarok
Actif
Messages : 6648
Inscription : 08 août 2014, 12:48
Localisation : Anjou

Re: Les sketchs Mysensors....Comprendre, Améliorer, Créer!

Message par lunarok » 28 févr. 2015, 14:54

Pour la question 1, t'as trouvé tout seul oui.

Pour la question 2 et 3, c'est bien documenté (mais oui en anglais) :
http://www.mysensors.org/download/

Pour la question 2 :
53;1;1;0;2;1 -> Noeud 53, Capteur 1, Set (1), Pas d'acquittement (0), Donnée V_LIGHT (ce que tu teste en général dans le incoming message), 1 (donc ON)
Ca, c'est pas trop compliqué à lire sur la page de l'API

Pour la question 3 et en complément de la 2 :
Je crois que dans le répertoire resources du plugin, j'ai mis un mémo, c'est le tableau qui m'a servi à reconstituer les types de capteurrs et types de données
En gros, un sensor envoi son sketch en info et sa version.
Après pour chaque capteur il le présente à la gateway avec un chiffre, ce chiffre représente son type (relay, température ...) il y a un tableau avec la liste de type (qui est fermée)
Et chaque envoi de donnée, tu donnes le type de données (température, courant ...) Pareil il y a un tableau fermé.
Mon Blog | Xiaomi Home
Pour contribuer au développement des plugins (don ou achat de matériel) : Paypal
Aides nous à t'aider : les logs, détails du soucis, la doc, recherche sur le forum ...
PS : pas de support par MP, je ne répondrais pas

totovaauski
Actif
Messages : 1926
Inscription : 05 juil. 2014, 11:21

Re: Les sketchs Mysensors....Comprendre, Améliorer, Créer!

Message par totovaauski » 28 févr. 2015, 15:31

@rol-rider :
Voiçi le tableau dont parle @lunarok. Pense à le renommer en .xls!

@lunarok : j'ai converti ton bio fichier ods en xls (pas tapé :D ) !! mais si @rol-rider possede Open-office c'est avec joie que je peux lui filer la version "libre" !
mysensors.txt
(16 Kio) Téléchargé 310 fois
RPI3 + Dongle Aeon
Jeedom sur : Raspberry Pi + Raspberry compute
Mysensors , z-wave, xiaomi ...

https://www.youtube.com/watch?v=-bjbUg9d64g
https://www.youtube.com/watch?v=GPj1ozB ... _b-Toq47NQ

rol-rider
Actif
Messages : 5059
Inscription : 10 août 2014, 23:50

Re: Les sketchs Mysensors....Comprendre, Améliorer, Créer!

Message par rol-rider » 28 févr. 2015, 15:40

Ok, merci pour le tableau!

Ce que je cherche surtout:
c'est les différentes commandes Mysensors dans les sketchs.
il me sembles que lorsque l'on crée une librairie (Mysensors) pour arduino on dispose de nouvelles commande, je trouve rien la dessus !
RPI3 avec mSATA
RFXcom; RFLink; Z-Wave; Mysensors; ESPEasy
Noeuds MySensors-téléinfo-Température-Distance-Baromètre-relais
Noeuds ESPEasy-open-garage-relais-PIR-Station Météo

Avatar de l’utilisateur
Al85
Timide
Messages : 184
Inscription : 18 nov. 2014, 20:59

Re: Les sketchs Mysensors....Comprendre, Améliorer, Créer!

Message par Al85 » 28 févr. 2015, 19:47

je vais essayer de faire un récapitulatif des commandes spécifique a mysensors et l'endroit ou il faut le mettre il en manquera peut etre:

Creation de variable obligatoire:

MySensor gw; // je conseil de laisser ca comme ca c'est celle utiliser sur le site mysensors

Création de la valeur gw qui servira après pour appeler des messages ou des fonction du type de celle en dessous gw.begin(....


Dans la boucle setup Commande obligatoire:

Fonction : .begin Sert a demarrer le sketch

.begin(message_special, Attribution_id_du_noeud, mode_repeteur, id_d'un_noeud_parent, .... pas besoin du reste )

message_special= en cas de type relais ou autre qui doivent recevoir des modification depuis jeedom il faut mettre : incomingMessage (qui sera une partie du sketch detaillé apres).
Attribution_id_du_noeud=Attribution de l'ID du noeud normalement laisser la valeur "AUTO" ce qui signifie qu'il sera attribuer par jeedom.
Sinon mettre une valeur entre 1 et 255 pour forcer le n° d'ID
Dans ton cas l'ID est 53.
mode_repeteur= Activation du mode repeteur c'est a dire qu'il peux recevoir des info d'autre noeud et les envoyer a la gateway.
True= mode répéteur activé // Pas renseigné= mode repeteur desactivé
id_d'un_noeud_parent= Possibilité de renseigner l'ID d'un noeud parent je ne sais pas exactement a quoi cela sert.

Exemple le plus courant : gw.begin(incomingMessage, AUTO);


Fonction .sendSketchInfo : Sert a envoyer l'intitulé du sketch

.sendSketchInfo(Nom_du_sketch,Version_sketch,Acquittement)

Nom_du_sketch= on peut mettre le nom du sketch que l'on veut qui detail le but du sketch, maximum 25 caractères, cela sera remonter sur jeedom
Version_sketch= on peut mettre un la version du sketch que l'on fait cela sera remonter sur jeedom
Acquittement= Permet de recevoir un acquittement de la passerelle pour etre sur de la bonne comunication avec la gateway. La gestion de cela sera vu plus tard.

Pensez a mettre des guillemet car variable de type string (texte)
Exemple : gw.sendSketchInfo("Capteur ILS", "1.0");

Fonction .present : Sert a déclarer les capteurs présent.

.present(Child_ID, Type du capteur)

Child_ID=Correspond au N° du capteur sur le neud peut aller de 0 a 254. Exemple si on met 1 dans jeedom on le retrouvera dans la colonne N° Sensor.
Attention ne pas mettre deux fois le même pour deux capteurs differents sinon il sera afficher avec un N°Sensor different sur jeedom et vous risquerez d'avoir des problèmes d'interaction entre jeedom et le noeud.
Type du capteur= Correspond au Type du capteur que vous avez sur le noeud (CF Tableau1). On peut delcarer plusieurs fois le même Type dans le sketch.

Les Variable CHILD doivent etre declarer au debut du sketch avec les autres variables
Exemple : gw.present(CHILD_LIGHT1, S_LIGHT); // CHILD_LIGHT1 1
gw.present(CHILD_CONSIGNE, S_CUSTOM); // CHILD_CONS 5
gw.present(2,S_HEATER); // On peut aussi mettre directement un nombre mais pas conseiller parce qu'on va en avoir besoin plus loin dans le sketch aussi.


Fonction .loadState: Sert a recuperer des données stocker dans l'eeprom.

.loadState(Variable, position);

Variable= Variable dans laquelle sera mis la valeur que l'on récupère dans l'eeprom. Attention la variable récupéré est une valeur entre 0 et 255 donc pas possible de stocker des valeurs flottante par exemple.
position= désigne la position de la donnée a aller chercher. On peut stocker jusqu'a 255 données contenant une valeur allant de 0 a 255.

Pour récupérer une valeur sauvegardé il faut qu'elle soit stocké par la commande .saveState( que l'on detaillera plus tard.
Exemple : gw.loadState(CHILD_CONSIGNE,CONSIGNE) // On recupère la valeur de la consigne stocker dans l'eeprom.

Dans la boucle LOOP:

Fonction .process(): Sert à lancer les communications par wifi la tache est exécuter en arrière plan.

gw.process();
Attention cette commande est obligatoire même s'il n'y a rien d'autre dans la section LOOP.


Fonction .send(): Sert a envoyé un message au controleur(jeedom) ou a un autre noeud.

send(MyMessage . Set... .set((Valeur,Nb_Decimal),Acquittement)

MyMessage = Message configurer avant la partie Setup avec les variables et les define. Ex: MyMessage msg(0,V_TEMP); (Voir detail plus haut)
Set...= Sert a dire que le message va être envoyé par le noeud.Cette info n'est pas obligatoire pour etre traiter par le controleur.
Il existe plusieurs type de set:
------------setType(Type de capteur) dit que l'on envoi une donnée d'un type particulier au contrôleur par exemple si le type est creer dans le loop. je ne sais pas si c'est pris en compte par jeedom.
------------setSensor(N°Capteur) dit que l'on envoi une donée d'un capteur du noeud au controleur.
------------setDestination(N°ID d'un noeud) dit que l'on envoi une donnée a un noeud definit.
Valeur=Donnée à envoyer.
Nb_Decimal=Paramétrage du nombre de décimale pour que le controlleur le prenne en compte.
Acquittement=Demande d'un acquittement par la gateway pour être sur que le noeud communique bien avec. On ne peux pas demander un acquittement au controleur.
Si la gateway est bien atteinte par le noeud elle renvoi un message que l'on pourra interprété mai on verra a plus bas.

Le reste à venir
Dernière édition par Al85 le 04 mars 2015, 22:15, édité 8 fois.
Orange PI plus2e : Jeedom Stable 3.11;
Mysensors: Téléinfo, 4xRelais Tableau elec, Portail garage, 2xSondes, Boite aux lettres, 2xLumière.
Broker MQTT. Pour ESP8266
Xiaomi Home avec detecteurs d'ouverture.
RPI2:Ecran officiel.

Avatar de l’utilisateur
Jamsta
Actif
Messages : 746
Inscription : 10 oct. 2014, 07:11
Localisation : Biganos (Région Bordelaise)
Contact :

Re: Les sketchs Mysensors....Comprendre, Améliorer, Créer!

Message par Jamsta » 28 févr. 2015, 20:23

C'est excellent, je suis également très intéressé par ton post, très instructif, ça permet de mieux comprendre et nous faire évoluer

Envoyé de mon HTC One_M8 en utilisant Tapatalk
Jeedom Pro Z-Wave + Edisio|MySensors + Téléinfo sur RPi B+
Domotik's Habitat
Matériel

rol-rider
Actif
Messages : 5059
Inscription : 10 août 2014, 23:50

Re: Les sketchs Mysensors....Comprendre, Améliorer, Créer!

Message par rol-rider » 28 févr. 2015, 22:03

@Al85 oui bien sur! je mettrais ça en forme au début.
RPI3 avec mSATA
RFXcom; RFLink; Z-Wave; Mysensors; ESPEasy
Noeuds MySensors-téléinfo-Température-Distance-Baromètre-relais
Noeuds ESPEasy-open-garage-relais-PIR-Station Météo

Avatar de l’utilisateur
lunarok
Actif
Messages : 6648
Inscription : 08 août 2014, 12:48
Localisation : Anjou

Re: Les sketchs Mysensors....Comprendre, Améliorer, Créer!

Message par lunarok » 28 févr. 2015, 22:45

Ou sinon vous me mettez ca en forme directement sur la doc avec un pull request sur le git ? :D Ca manque clairement en francophone, et même sous la forme d'un glossaire comme ca + les tableaux, ca serait un plus
Mon Blog | Xiaomi Home
Pour contribuer au développement des plugins (don ou achat de matériel) : Paypal
Aides nous à t'aider : les logs, détails du soucis, la doc, recherche sur le forum ...
PS : pas de support par MP, je ne répondrais pas

Avatar de l’utilisateur
Al85
Timide
Messages : 184
Inscription : 18 nov. 2014, 20:59

Re: Les sketchs Mysensors....Comprendre, Améliorer, Créer!

Message par Al85 » 28 févr. 2015, 23:10

Euh oui quelle doc?
Je pense que je vais continuer de détaillé ici et Rol-rider fera le tri je pense c'est lui le chef du sujet ;).
Et il serait bien qu'on me confirme que je raconte pas de conneries aussi :)
Si y a des personnes plus expérimentés qui peuvent contrôler un peu ce que je raconte ça serai pas mal.
Orange PI plus2e : Jeedom Stable 3.11;
Mysensors: Téléinfo, 4xRelais Tableau elec, Portail garage, 2xSondes, Boite aux lettres, 2xLumière.
Broker MQTT. Pour ESP8266
Xiaomi Home avec detecteurs d'ouverture.
RPI2:Ecran officiel.

Frck
Timide
Messages : 41
Inscription : 01 févr. 2015, 00:47
Localisation : 24

Re: Les sketchs Mysensors....Comprendre, Améliorer, Créer!

Message par Frck » 01 mars 2015, 12:30

alors la se post va beaucoup m'aider a comprendre certaine chose.
jeedom sur rpi3
z wave,xiaomi,433mhz

totovaauski
Actif
Messages : 1926
Inscription : 05 juil. 2014, 11:21

Re: Les sketchs Mysensors....Comprendre, Améliorer, Créer!

Message par totovaauski » 01 mars 2015, 13:15

Félicitation, @rol-rider ! Je vais faire un lien vers ton post à partir du mien ...
RPI3 + Dongle Aeon
Jeedom sur : Raspberry Pi + Raspberry compute
Mysensors , z-wave, xiaomi ...

https://www.youtube.com/watch?v=-bjbUg9d64g
https://www.youtube.com/watch?v=GPj1ozB ... _b-Toq47NQ

Avatar de l’utilisateur
Al85
Timide
Messages : 184
Inscription : 18 nov. 2014, 20:59

Re: Les sketchs Mysensors....Comprendre, Améliorer, Créer!

Message par Al85 » 01 mars 2015, 13:35

@rol-rider:
1-----Commande de 0 à 4
0 = c'est une présentation, envoyé par un nœud quand il se présente. Cela se fait habituellement dans le setup () au démarrage du sketch.
1= Le capteur demande de mettre à jour la valeur envoyé.(la liaison se fait du nœud vers la gateway).
2= ??????????????????
3= message interne I_BATTERY_LEVEL par exemple (à confirmer??)
4= Utilisé pour les mises à jour du firmware OTA (en dévellopement)
1= type gw.send(....
2= Le capteur demande une valeur a jeedom type : gw.request(.... // En cours de test sur jeedom pour le capteur de type S_CUSTOM.
3= type gw.sendBatteryLevel(...
4= type inconnu pour moi pour le moment/

Tu peux mettre a jour ca si tu veux.
Orange PI plus2e : Jeedom Stable 3.11;
Mysensors: Téléinfo, 4xRelais Tableau elec, Portail garage, 2xSondes, Boite aux lettres, 2xLumière.
Broker MQTT. Pour ESP8266
Xiaomi Home avec detecteurs d'ouverture.
RPI2:Ecran officiel.

Avatar de l’utilisateur
lunarok
Actif
Messages : 6648
Inscription : 08 août 2014, 12:48
Localisation : Anjou

Re: Les sketchs Mysensors....Comprendre, Améliorer, Créer!

Message par lunarok » 01 mars 2015, 13:41

Correction importante sur le 1 et 2

1 : c'est un SET. Il ne vient pas forcément d'un capteur, cas le plus flagrant, un relais, Jeedom envoit un SET au noeud
2 : c'est un GET. Là encore, ca ne vient pas forcément d'un noeud vers Jeedom. On pourrait très bien faire un GET d'un noeud vers un autre. Mais aussi faire un GET depuis Jeedom pour vérifier une valeur.

Pour le 3 c'est Internal tout court, pas uniquement la batterie. Mais aussi une demande de reboot par exemple.

4 c'est bien le type destiné à l'OTA (qui est déjà fonctionnel dans mySensors, c'est le plugin qui le gère pas ... et encore vu que le nodejs vient de mySensors c'est qu'à moitié vrai)
Mon Blog | Xiaomi Home
Pour contribuer au développement des plugins (don ou achat de matériel) : Paypal
Aides nous à t'aider : les logs, détails du soucis, la doc, recherche sur le forum ...
PS : pas de support par MP, je ne répondrais pas

rol-rider
Actif
Messages : 5059
Inscription : 10 août 2014, 23:50

Re: Les sketchs Mysensors....Comprendre, Améliorer, Créer!

Message par rol-rider » 01 mars 2015, 19:16

Existe il pour IDE arduino la possibilité de tester le programme en mode pas à pas avec la valeur des différentes variables.
Je crois que ça existe pour de l'assembleur, un mode debug?
RPI3 avec mSATA
RFXcom; RFLink; Z-Wave; Mysensors; ESPEasy
Noeuds MySensors-téléinfo-Température-Distance-Baromètre-relais
Noeuds ESPEasy-open-garage-relais-PIR-Station Météo

Filoucaenais
Timide
Messages : 125
Inscription : 01 juil. 2014, 09:00

Re: Les sketchs Mysensors....Comprendre, Améliorer, Créer!

Message par Filoucaenais » 01 mars 2015, 20:04

pas à ma connaissance et j'ai chercher cette option à mes débuts de l'arduino

Ericd
Timide
Messages : 59
Inscription : 18 déc. 2014, 16:45
Localisation : Toulouse

Re: Les sketchs Mysensors....Comprendre, Améliorer, Créer!

Message par Ericd » 01 mars 2015, 20:26

Bravo et félicitations pour ce post et les explications sur le protocole....
SUPER intéressant.

Avatar de l’utilisateur
Al85
Timide
Messages : 184
Inscription : 18 nov. 2014, 20:59

Re: Les sketchs Mysensors....Comprendre, Améliorer, Créer!

Message par Al85 » 01 mars 2015, 21:01

@Rol-rider
0 ----sensor Chaque nœud peut avoir plusieurs capteurs par exemple le DTH22 donne l'humidité et la température donc 2 capteurs sur le même nœud avec le même N°ID nous aurons sensor 0 et sensor 1 pour différencier les données. C'est le sketch qui va les attribuer gw.present(CHILD_ID,S_LIGHT); avec CHILD_ID de 0 à 9 (à confirmer!).
Au niveau de al librairie mysensor CHILD_ID de 0 à 255 je pense que ca doit etre pareil sur jeedom a confirmer par lunarok?
Orange PI plus2e : Jeedom Stable 3.11;
Mysensors: Téléinfo, 4xRelais Tableau elec, Portail garage, 2xSondes, Boite aux lettres, 2xLumière.
Broker MQTT. Pour ESP8266
Xiaomi Home avec detecteurs d'ouverture.
RPI2:Ecran officiel.

Verrouillé

Revenir vers « [Plugin Tiers] MySensors »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 0 invité