PoolMaster: gestion et domotisation de ma piscine

cseb:
Bonjour le wemos Mega est en fait un clone de l'arduino mega couplé à un Esp8266 via le serial3.
Cela permet d'utiliser l'esp8266 comme un shield WiFi.

Il y a très peu de modification apporté au code source.

J'insère le code des que possible.
Merci

Je me demande si l'ESP est capable d'avoir deux connections (server + client) simultanées: Esp8266 client and server at the same time - Networking, Protocols, and Devices - Arduino Forum

Je vais tester cela merci,

Entre temps j'ai reçu mes interfaces ORP et ma sonde ds18B20 et j'ai une autre question :
Comment se fait la calibration du ph?

D'avance merci

Salut,

Pour la calib du pH, regarde la fonction MQTT suivante:

{"PhCalib":[4.02,3.8,9.0,9.11]} -> multi-point linear regression calibration (minimum 1 point-couple, 6 max.) in the form [ProbeReading_0, BufferRating_0, xx, xx, ProbeReading_n, BufferRating_n]

Donc il faut au minimum une solution tampon ("buffer") calibrée, deux ou plus sont conseillées pour plus de précision de calibrage.
Tu mesures chaque solution tampon et tu notes les valeurs mesurées + les valeurs nominales et tu envoies le tout via MQTT au système.

Bonjour, Super travail et merci pour ton partage.

Actuellement j'utilise domogarden pour ma piscine qui fonctionne a merveille, mais ton projet me correspond mieux puisque tout est accessible depuis internet et j'utilise moi même jeedom.

Cependant lors de l'installation je bloque sur la configuration de MQTT. Je rempli l'adress ip que je desir, un login et un mdp, mais en fait je ne sais pas si c'est ça qu'il faut faire. Peut m'indiquer comment faire pour lancer MQTT ou un lien ?

Merci,
Alex

Merci Alex, ça fait toujours plaisir.

Pour la config MQTT, tu dois avoir un broker MQTT (j'utilise Mosquitto) d'installé et l'avoir testé, par ex. via Jeedom (j'utilise le plugin jMQTT) ou bien un client lambda (j'utilise MQTT.fx). Une fois que tu es certain du bon fonctionnement du broker et des credentials (IP, login et mdp), ce sont ceux que tu dois utiliser dans le code de PoolMaster.

Super, j'ai jeedom qui communique avec maintenant. Me reste plus qu'a comprendre ou envoyer les api et créer les virtuels.
Merci.

Alexkids11:
Super, j'ai jeedom qui communique avec maintenant. Me reste plus qu'a comprendre ou envoyer les api et créer les virtuels.
Merci.

Good!
Si Jeedom communique, tu peux maintenant créer un objet PISCINE dans le plugin jMQTT, tu l'inscris au topic "Home/Pool/#" et tu le mets en mode inclusion. A la prochaine réception d'infos au format JSON de la part de PoolMaster, il va alors créer une commande associée. Tu coches la case PARSE JSON et il va la décomposer en commandes individuelles que tu pourras rassembler dans un virtuel par exemple.

Petite subtilité pour décomposer les infos binaires imbriquées dans les variables IO et IO2, regarde la capture d'écran des paramètres Jeedom sur mon GIT

Pour envoyer des commandes à PoolMaster, tu crées des commandes dans ton objet PISCINE du plugin jMQTT de Jeedom, tu choisis le topic "Charmoisy/Pool/API" et tu mets la commande en valeur, par exemple "{"FiltPump":1}" pour allumer la filtration et "{"FiltPump":0}" pour l'éteindre

Bonjour a toi loulou je voulais connaître ton système de domotique et super projet

Merci du coup de main, je suis un peu perdu quand meme. :slight_smile:
J'ai bien deux lignes qui se sont créé.
Home/Pool/err et Home/Pool/status . Mais quand je clique sur PARSE JSON il ne décompose aucune ligne.
J'ai peut être mal compris une consigne. Par contre les API fonctionnent bien en mettant comme topic Home/Pool/API .

zaienj:
Bonjour a toi loulou je voulais connaître ton système de domotique et super projet

Merci Zaienj, mon système domotique s'organise autour de:

  • des "nodes" filaires de type Arduino ethernet (comme le projet PoolMaster)
  • des "nodes" radio (protocole LoraWan) pour les besoins distants et parfois autonomes (sur batterie)
  • un broker MQTT (Mosquitto) qui relie les nodes entre eux et permet de les piloter, s'y connecter, etc.
  • Jeedom (et un peu de NodeRed) pour le dashboard, historisation des données, appli mobile, etc.

Alexkids11:
Merci du coup de main, je suis un peu perdu quand meme. :slight_smile:
J'ai bien deux lignes qui se sont créé.
Home/Pool/err et Home/Pool/status . Mais quand je clique sur PARSE JSON il ne décompose aucune ligne.
J'ai peut être mal compris une consigne. Par contre les API fonctionnent bien en mettant comme topic Home/Pool/API .

PoolMaster publie trois types d'infos sur trois topics:

1/ le statut de connection au broker MQTT sur "Home/Pool/status"
2/ les messages d'erreur sur "Home/Pool/err"
3/ le plus important, les données mesurées toutes les 30secs sur "Home/Pool". Ces données ont la forme d'un message au format JSON imbriqué du style "{"Tmp":818,"pH":321,"PSI":56,"Orp":583,"FilUpT":8995,"PhUpT":0,"ChlUpT":0,"IO":11,"IO2":0}" et c'est ce message qu'il faut parser, pas les autres

On dirait que tu ne reçois pas ce dernier. Es-tu certain que ta sonde de temp. d'eau DS18B20 fonctionne?

Pour débuger, lance le moniteur série (9600 bauds) de l'IDE Arduino pendant l'exécution du programme afin de voir ce qui est publié, et envoie moi ce qui est affiché si nécessaire.

En fait rien n'etait branché dessus, je voulais que tout sois au point avant de tout brancher.
Donc j'ai tout branché a pars l'ecran lcd, mais c'est pas mieux...

sendile
Printed some characters to LCD Screen2: 81
Printed some characters to LCD Screen2: 81
Stored config version: 107. Loading settings from eeprom
107, 0, 0
8, 12, 20, 20, 59
1800, 1800
3600000, 7200000, 0, 0
7.40, 730.00, 0.50, 0.25, 10.00, 27.00, 3.00, 4.23, -2.28, -1268.78, 2718.63, 1.00, 0.00
1330000.00, 0.00, 0.00, 2857.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.40
FreeRam: 3646 - Qeued messages: 1
published: Home/Pool/status - online
[memCheck]: 3885b
Payload: {"Tmp":0,"pH":0,"PSI":40,"Orp":0,"FilUpT":0,"PhUpT":0,"ChlUpT":0,"IO":24,"IO2":0} - Payload size: 94
Json parseObject() success -
Payload: {"Tmp":0,"pH":0,"PSI":40,"Orp":0,"FilUpT":0,"PhUpT":0,"ChlUpT":0,"IO":24,"IO2":0} - Payload size: 94
Printed some characters to LCD Screen1: 80
Printed some characters to LCD Screen2: 80
Printed some characters to LCD Screen2: 80
Printed some characters to LCD Screen2: 80
sending XML file
2060-07-20 17:18:12 - Error getting temperature from DS18b20_0
Ph: 18.87 - Orp: 0.00 - 2718.63mV
PSI: 3.54 - 3.54Bar
Printed some characters to LCD Screen2: 80
Printed some characters to LCD Screen2: 80
Printed some characters to LCD Screen2: 80
Printed some characters to LCD Screen2: 80
2060-07-20 17:18:14 - Error getting temperature from DS18b20_0
Ph: 18.87 - Orp: 0.00 - 2718.63mV
PSI: 2.30 - 2.92Bar
Printed some characters to LCD Screen2: 80
Printed some characters to LCD Screen2: 80
Printed some characters to LCD Screen2: 80
Trying to print too many characters to LCD Screen1: 84
sending XML file
2060-07-20 17:18:17 - Error getting temperature from DS18b20_0
Ph: 18.09 - Orp: 0.00 - 2718.63mV
PSI: 29.00 - 11.61Bar

Petite question. J'ai vu que la sonde ds18b20 est branché sur la borne 20 donc sur quels bornes le rtc module est branché ? Car moi j'utiliser les bornes 20 (sda)et 21(scl) pour le cablage.
Merci

Alexkids11:
En fait rien n'etait branché dessus, je voulais que tout sois au point avant de tout brancher.
Donc j'ai tout branché a pars l'ecran lcd, mais c'est pas mieux...

sendile
Printed some characters to LCD Screen2: 81
.
.
.

PSI: 29.00 - 11.61Bar

Bon à première vue je ne vois pas ce qui cloche, il rentre bien dans la fonction PublishDataCallback() et publie les données de mesure. Avant de rajouter plus de fonctions debug dans le code, vérifie bien dans ton code que la variable "PoolTopic" est bien égale à "Home/Pool" et que ton objet jMQTT dans Jeedom a bien souscrit au topic "Home/Pool/#"

Alternativement, utilise le client MQTT.fx, souscrit au topic # et regarde si et sur quel topic les données de mesure sont publiées.

Enfin, tu as un souci avec la sonde de température, as-tu bien renseigné son adresse unique (variables "DS18b20_0" et "sDS18b20_0") dans le code

Alexkids11:
Petite question. J'ai vu que la sonde ds18b20 est branché sur la borne 20 donc sur quels bornes le rtc module est branché ? Car moi j'utiliser les bornes 20 (sda)et 21(scl) pour le cablage.
Merci

Mon hardware est un CONTROLLINO, donc pas un Arduino 2560. Il faut donc que tu revoies les affectations de la sonde de temp, du RTC, voire des relais et autre. Si tu veux bien fais moi un retour sur tes affectations finales et je l'intègrerai dans le code pour ceux qui ont un Arduino 2560

[edit] en regardant mon code actuel je vois que j'avais déjà réaffecté la sonde de temp à la pin 6 car je suis en train de tester un périphérique I2C et donc j'avais besoin de la pin 20

Loulou74:
Bon à première vue je ne vois pas ce qui cloche, il rentre bien dans la fonction PublishDataCallback() et publie les données de mesure. Avant de rajouter plus de fonctions debug dans le code, vérifie bien dans ton code que la variable "PoolTopic" est bien égale à "Home/Pool" et que ton objet jMQTT dans Jeedom a bien souscrit au topic "Home/Pool/#"

Alternativement, utilise le client MQTT.fx, souscrit au topic # et regarde si et sur quel topic les données de mesure sont publiées.

Enfin, tu as un souci avec la sonde de température, as-tu bien renseigné son adresse unique (variables "DS18b20_0" et "sDS18b20_0") dans le code

Encore merci pour ton aide,
Mon objet jMQTT est bien souscrit au topic "Home/Pool/#" et dans le code j'ai la variable PoolTopic = "Home/Pool" . Je vais la modifier pour PoolTopic = "Home/Pool/#" .

Pour ma sonde je pense que c'est un problème physique est non logiciel. Je réessayerai le code et la sonde se soir ou demain.

Pour les pins adressé voila ce que j'ai fait .

//Data wire is connected to input digital pin 20 on the Arduino
#define ONE_WIRE_BUS_A 20

#define FILTRATION_PUMP 38
#define PH_PUMP 36
#define CHL_PUMP 42

//Digital input pins connected to Acid and Chl tank level reed switches
#define CHL_LEVEL 28
#define PH_LEVEL 30

//Analog input pins connected to Phidgets 1130_0 pH/ORP Adapters.
//Galvanic isolation circuitry between Adapters and Arduino required!
#define ORP_MEASURE A9
#define PH_MEASURE A8

//Analog input pin connected to pressure sensor
#define PSI_MEASURE A7

Il me manque juste le rtc module je ne sais pas ou le brancher.

Du coup tu branches la sonde sur la pin 6:

#define ONE_WIRE_BUS_A 6

Et le RTC sur les pins 20 et 21 du bus I2C

Pour les topics il ne faut pas ajouter la "wildcard" # dans le code, juste dans les clients qui souscrivent au topic (Jeedom et MQTT.fx par ex.).
Si tu ne veux pas essayer MQTT.fx, essaye de faire souscrire Jeedom au topic "#" pour voir tout ce qui passe par le broker Mosquitto (via le log temps réel de Jeedom par ex.)

Bonjour Loulou74, j'ai pris mon temps pour essayer d'avancé, voila ce que j'ai fait.

J'ai installé MQTT.fx, la il ma trouvé 3 topics : Home/Pool/API , Home/Pool/status et Home/Pool/Err .
Je retrouve les mêmes sur JMQTT .
Ce qui est bizzare c'est que sur JMQTT ou MQTT.fx le status est offline alors que depuis le moniteur série de l'arduino le status est online.
Quand je regarde les logs sur jeedom et ça tourne en boucle.

[2019-05-04 09:48:05][DEBUG] : daemon starts, pid is 26980
[2019-05-04 09:48:05][INFO] : Connect to mosquitto: Host=localhost, Port=1883, Id=jeedom
[2019-05-04 09:48:05][DEBUG] : mosquitto: Client jeedom sending CONNECT
[2019-05-04 09:48:05][INFO] : Equipment Home: subscribes to "Home/#" with Qos=1
[2019-05-04 09:48:05][DEBUG] : mosquitto: Client jeedom sending SUBSCRIBE (Mid: 1, Topic: Home/#, QoS: 1, Options: 0x00)
[2019-05-04 09:48:05][INFO] : Subscribes to the API topic "jeedom/api"
[2019-05-04 09:48:05][DEBUG] : mosquitto: Client jeedom sending SUBSCRIBE (Mid: 2, Topic: jeedom/api, QoS: 1, Options: 0x00)
[2019-05-04 09:48:05][DEBUG] : mosquitto: Client jeedom received CONNACK (0)
[2019-05-04 09:48:05][DEBUG] : mosquitto: connection response is Connection Accepted.
[2019-05-04 09:48:05][DEBUG] : mosquitto: Client jeedom sending PUBLISH (d0, q1, r1, m3, 'jeedom/status', ... (6 bytes))
[2019-05-04 09:48:05][DEBUG] : mosquitto: Client jeedom received SUBACK
[2019-05-04 09:48:05][DEBUG] : mosquitto: topic subscription accepted, mid=1
[2019-05-04 09:48:05][DEBUG] : mosquitto: Client jeedom received PUBLISH (d0, q1, r1, m1, 'Home/Pool/status', ... (7 bytes))
[2019-05-04 09:48:05][DEBUG] : mosquitto: Client jeedom sending PUBACK (m1, rc0)
[2019-05-04 09:48:05][DEBUG] : Payload offline for topic Home/Pool/status
[2019-05-04 09:48:05][INFO] : -> Home|Poolstatus offline
[2019-05-04 09:48:05][DEBUG] : mosquitto: Client jeedom received PUBLISH (d0, q1, r1, m2, 'Home/Pool/Err', ... (32 bytes))
[2019-05-04 09:48:05][DEBUG] : mosquitto: Client jeedom sending PUBACK (m2, rc0)
[2019-05-04 09:48:05][DEBUG] : Payload Trying to print 83 chars to LCD1 for topic Home/Pool/Err
[2019-05-04 09:48:05][INFO] : -> Home|PoolErr Trying to print 83 chars to LCD1
[2019-05-04 09:48:05][DEBUG] : mosquitto: Client jeedom received PUBLISH (d0, q1, r1, m3, 'Home/Pool/API', ... (10 bytes))
[2019-05-04 09:48:05][DEBUG] : mosquitto: Client jeedom sending PUBACK (m3, rc0)
[2019-05-04 09:48:05][DEBUG] : Payload {"Mode":0} for topic Home/Pool/API
[2019-05-04 09:48:05][INFO] : -> Home|PoolAPI {"Mode":0}
[2019-05-04 09:48:05][DEBUG] : mosquitto: Client jeedom received SUBACK
[2019-05-04 09:48:05][DEBUG] : mosquitto: topic subscription accepted, mid=2
[2019-05-04 09:48:05][DEBUG] : mosquitto: Client jeedom received PUBACK (Mid: 3, RC:0)
[2019-05-04 09:48:06][DEBUG] : mosquitto: disconnectedunexpectedly
[2019-05-04 09:48:06][WARNING] : exception thrown by MQTT client: The connection was lost.
[2019-05-04 09:48:06][INFO] : relance le démon dans 15s

Et pour ce qui est de la sonde j'ai toujours la meme erreur : Error getting temperature from DS18b20_0
Alors j'ai changé de pin, j'ai changé de sonde, j'ai vérifier son fonctionnement en installant un code simple pour pouvoir la lire. Je ne comprends pas d'ou viens le problème.

Merci Loulou74 du coup de main pour résoudre mes problemes, mais je vais abandonné car trop de soucis.

Alexkids11:
Et pour ce qui est de la sonde j'ai toujours la meme erreur : Error getting temperature from DS18b20_0
Alors j'ai changé de pin, j'ai changé de sonde, j'ai vérifier son fonctionnement en installant un code simple pour pouvoir la lire. Je ne comprends pas d'ou viens le problème.

Merci Loulou74 du coup de main pour résoudre mes problemes, mais je vais abandonné car trop de soucis.

Dommage mais je comprends.
J'ai pas encore testé mon code sur la config Arduino Mega 2560 donc je ne suis pas surpris qu'il y aie quelques bugs à résoudre.