Ce Forum passera en lecture seule en janvier 2020
Image
Merci de vous rendre sur https://community.jeedom.com maintenant pour vos prochains postes ;)

[Plugin Tiers][Sujet Principal] Jeedouino

Pour échanger sur les plugins classés en catégorie "Protocoles domotiques"
JeedAlf
Timide
Messages : 25
Inscription : 16 févr. 2018, 08:51

Re: [Plugin Tiers][Sujet Principal] Jeedouino

Message par JeedAlf » 07 mars 2018, 18:21

Bonjour,

J'ai une petite question concernant les valeurs de la température et humidité remontée par une sonde DHT11.
Tout marche correctement, mais je constate que les valeurs affichées dans Jeedom sont des entiers. Est-ce normal ?

Certes les sondes ne sont pas forcément précises pour donner à 0.01° ou 0.01% près, mais dans l'historique avoir des valeurs plus fines permet de mieux suivre les tendances (même si en absolu ce n'est pas précis, pour les différences en relatif ça reste précis). Là j'ai des courbes en escalier. J'ai d'autres sondes ailleurs gérées par un autre équipement que jeeduino, et les courbes dans l'historiques sont plus "jolies".

Bref je voulais savoir s'il y avait quelque chose à faire pour avoir des valeurs plus précises prises en compte dans jeedom ?
Au niveau du sketch, il semble que c'est bien prévu d'avoir 2 digits après la virgule:
(myDHT->readTemperature()*100);

(sinon on aurait directement (myDHT->readTemperature());)

Merci,

Alf.

arnaud.r
Timide
Messages : 9
Inscription : 11 mars 2018, 01:00

Re: [Plugin Tiers][Sujet Principal] Jeedouino

Message par arnaud.r » 11 mars 2018, 01:13

Bonjour,

J'ai un souci avec le pilotage d'un relais avec une commande de type pulse. Je ne vois pas de différence de réaction entre une tempo à 0.1s et une à 0.7s (au delà plus de souci). C'est pour un pilotage de type incrémentale mais les incréments sont de 0.5s, avec une commande à 0.7s mon système l’interprète généralement comme 2 impulsions mais des fois 1 seule donc c'est impilotable.
Mais question est donc est-ce un bug du plugin (qui ne gère pas les tempo <0.7s) ?
Ou est-ce le temps de réaction du relais ?

Merci d'avance

arnaud.r
Timide
Messages : 9
Inscription : 11 mars 2018, 01:00

Re: [Plugin Tiers][Sujet Principal] Jeedouino

Message par arnaud.r » 11 mars 2018, 14:08

Bonjour,

Je pense que ça vient du plugin car sur ce post : http://easydomoticz.com/forum/viewtopic ... 6&start=70 quelqu'un arrive à envoyer l'équivalent d'un "pulse" de 0.5s avec les mêmes relais que les miens.

Merci.

glaurence
Timide
Messages : 28
Inscription : 01 sept. 2017, 16:18

Re: [Plugin Tiers][Sujet Principal] Jeedouino

Message par glaurence » 27 mars 2018, 22:44

Bonjour,

malgré mes efforts et mes recherches, je ne parviens pas à interfacer Jeedouino avec un écran LCD I2C via arduino UNO.
J'ai lu dans cette section, plusieurs questions de ce type qui sont restées sans réponse malheureusement.

J'ai bien paramétré "#define UseLCD16x2 2" dans le sketch...
Pourriez-vous cependant me confirmer que le plugin supporte l'I2C sur arduino svp ?

Dans la page affectation des pins, pour les pins A4 (SDA) et A5 (SCL), le menu déroulant ne propose pas d'action affichage LCD.

Merci pour votre petit coup de pouce !

ksin
Timide
Messages : 85
Inscription : 22 mai 2017, 13:09
Localisation : Lyon

Re: [Plugin Tiers][Sujet Principal] Jeedouino

Message par ksin » 28 mars 2018, 16:33

Bonjour,

Est-ce que quelqu'un a fait fonctionner ce plugin sur une VM d'un ESXi ?

Merci de vos retours
Jeedom 3.3.30 sur Debian 9.4
NUC7I5BNK avec ESXi 6.7

arthux
Timide
Messages : 16
Inscription : 22 oct. 2017, 11:27

Re: [Plugin Tiers][Sujet Principal] Jeedouino

Message par arthux » 28 mars 2018, 21:06

Bonjour,
Très bon plugin ! Mais je rencontre une difficulté ... Je crois que l'arduino ethernet (directement intégré sur la carte) et l'écran lcd n'arrive pas à remonter les informations ... J'arrive à envoyer du texte sur l'écran ...
J'ai à plusieurs reprise "UIPEFailCount : 8" ... et "To eqLogic:" avec rien après ...
Du coup ça bloque sur timeout
Quelqu'un peu m'aider ?
Merci d'avance !

Le sketch :

Code : Tout sélectionner

////////
//
// Sketch Arduino pour le Plugin JEEDOUINO v097+ de JEEDOM
// Connection via Ethernet
//
// Généré le 2018-03-27 23:49:06.
// Pour l'équipement Arduino_Ethernet (EqID : 40 ).
// Modèle de carte : auno.
////////
#define DEBUGtoSERIAL 1	// 0, ou 1 pour debug dans la console serie
#define UseWatchdog 0
#define NODHCP 0					// 0 pour IP via DHCP, 1 pour IP fixée dans le sketch.
#define UseDHT 0
#define UseDS18x20 0
#define UseTeleInfo 0
#define UseLCD16x2 1	// 0 = None(Aucun) / 1 = LCD Standard 6 pins / 2 = LCD via I2C
#define UseEthernet 0 	// Choix de la lib suivant shield ethernet : 0 = W5100 / 1 = ENC28J60	/ 2 = W5500 - Voir note ci-dessous
#define UseHCSR04 0
#define UsePwm_input 0 // Code obsolete (sera supprimé) - Entrée Numérique Variable (0-255 sur 10s) en PULL-UP
#define UseBMP180 0	// pour BMP085/180 Barometric Pressure & Temp Sensor
#define UseServo 0		// Pour controler la postion d'un servo.
#define UseWS2811 0	// Pour gerer les led stips a base de WS2811/2 avec l'excellente lib Adafruit_NeoPixel

// Vous permet d'inclure du sketch perso - voir Doc / FAQ.
// Il faut activer l'option dans la configuration du plugin.
// Puis choisir le nombre de variables utilisateur sous l'onglet Pins/GPIO de votre équipement.
#define UserSketch 0
// Tags pour rechercher l'emplacement pour votre code :
//UserVars
//UserSetup
//UserLoop

#if (UseWatchdog == 1)
	#include <avr/wdt.h>
#endif

#include <SPI.h>
// Pour shield avec W5100
#if (UseEthernet == 0)
	#include <Ethernet.h>
#endif
// Pour shield avec W5500
#if (UseEthernet == 2)
	#include <Ethernet2.h>
#endif
// Pour shield avec ENC28J60 - Note : il faut passer NODHCP à 1 ci-dessus.
// Attention, problèmes de mémoire possibles sur arduino nano/uno/328 avec cette lib (v1.59)!
// Pour la récupérer, et l'installer dans l'IDE, voir : https://github.com/ntruchsess/arduino_uip/tree/Arduino_1.5.x
//
// Il faudra modifier dans le fichier \arduino-IDE\libraries\arduino_uip-master\utility\uipethernet-conf
// les lignes suivantes:
//#define UIP_SOCKET_NUMPACKETS		3
//#define UIP_CONF_MAX_CONNECTIONS 2
//#define UIP_CONF_UDP						 0
//
#if (UseEthernet == 1)
	#include <UIPEthernet.h>	// v1.59
#endif
// Traitement spécifique a cette librairie (pb de deconnection):
int UIPEFailCount = 0;
unsigned long UIPEFailTime = millis();



////////
// DS18x20
// https://github.com/PaulStoffregen/OneWire
#if (UseDS18x20 == 1)
	#include <OneWire.h>
#endif

byte IP_ARDUINO[] = { 192, 168, 5, 34 };
byte IP_JEEDOM[] = { 192, 168, 5, 41 };
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x28 };
EthernetServer server(8000);

#include <EEPROM.h>

// CONFIGURATION VARIABLES

#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
	#define NB_DIGITALPIN 54
	#define NB_ANALOGPIN 16
#else
	#define NB_DIGITALPIN 14
	#define NB_ANALOGPIN 6
#endif
#define NB_TOTALPIN ( NB_DIGITALPIN + NB_ANALOGPIN)

// Etat des pins de l'arduino ( Mode )
char Status_pins[NB_TOTALPIN];
byte pin_id;
byte echo_pin;

String eqLogic = "";
String inString = "";
String Message = "";
byte BootMode;

// Pour la detection des changements sur pins en entree
byte PinValue;
byte OLDPinValue[NB_TOTALPIN ];
unsigned long AnalogPinValue;
unsigned long OLDAnalogPinValue[NB_TOTALPIN ];
unsigned long CounterPinValue[NB_TOTALPIN ];
unsigned long PinNextSend[NB_TOTALPIN ];
byte swtch[NB_TOTALPIN];
// pour envoi ver jeedom
String jeedom = "\0";
// reception commande
char c[250];
byte n=0;
byte RepByJeedom=0;
// Temporisation sorties
unsigned long TempoPinHIGH[NB_TOTALPIN ]; // pour tempo pins sorties HIGH
unsigned long TempoPinLOW[NB_TOTALPIN ]; // pour tempo pins sorties LOW
unsigned long pinTempo=0;
unsigned long NextRefresh=0;
unsigned long ProbeNextSend=millis();
unsigned long timeout = 0;


#if (UseTeleInfo == 1)
	// TeleInfo / Software serial
	#include <SoftwareSerial.h>
	byte teleinfoRX = 0;
	byte teleinfoTX = 0;
	SoftwareSerial teleinfo(6,7);	// definir vos pins RX , TX
#endif

#if (UseLCD16x2 == 1)
	// LiquidCrystal Standard (not i2c)
	#include <LiquidCrystal.h>
	LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
#endif
#if (UseLCD16x2 == 2)
	// LiquidCrystal	i2c
	#include <Wire.h>
	#include <LiquidCrystal_I2C.h>
	LiquidCrystal_I2C lcd(0x27,16,2);
#endif

// SETUP

void setup()
{
	jeedom.reserve(256);
	Message.reserve(16);
	inString.reserve(4);
	#if (DEBUGtoSERIAL == 1)
		Serial.begin(115200); // Init du Port serie/USB
		Serial.setTimeout(5); // Timeout 5ms
		Serial.println(F("JEEDOUINO IS HERE."));
	#endif
	if (EEPROM.read(13) != 'J')
	{
		Init_EEPROM();
	#if (NODHCP == 0)
		if (Ethernet.begin(mac) == 0) 	// 1er demarrage 1er flash Jeedouino, on essaye via dhcp
		{
			#if (DEBUGtoSERIAL == 1)
				Serial.println(F("Connection via DHCP failed."));
			#endif
			#if (UseWatchdog == 1)
				wdt_enable(WDTO_15MS); // try reboot
			#endif
			while(1){}
		}
		IPAddress IP_ARDUINO = Ethernet.localIP();
		jeedom = F("&ipwifi=");
		jeedom += IP_ARDUINO[0];
		jeedom += '.';
		jeedom += IP_ARDUINO[1];
		jeedom += '.';
		jeedom += IP_ARDUINO[2];
		jeedom += '.';
		jeedom += IP_ARDUINO[3];
		SendToJeedom();
	#else
		Ethernet.begin(mac, IP_ARDUINO);
	#endif
	}
	else Ethernet.begin(mac, IP_ARDUINO);

	#if (DEBUGtoSERIAL == 1)
		Serial.println(F("Connection to LAN."));
	#endif
	server.begin();
	Load_EEPROM(1);

	#if (DEBUGtoSERIAL == 1)
		Serial.print(F("\nEqLogic:"));
		Serial.println(eqLogic);
	#endif

	#if (UseTeleInfo == 1)
		teleinfo.begin(1200);	 // vitesse par EDF
	#endif

	#if (UseLCD16x2 == 1)
		lcd.begin(16, 2);
		lcd.setCursor(0,0);
		lcd.print(F("JEEDOUINO v097+"));
	#endif
	#if (UseLCD16x2 == 2)
		lcd.init();
		lcd.backlight();
		lcd.home();
		lcd.print(F("JEEDOUINO v097+"));
	#endif
}
//// User Setup
#if (UserSketch == 1)
	void UserSetup()
	{
		// Votre setup()
	}
#endif

// LOOP

void loop()
{
	// TRAITEMENT DES TEMPO SORTIES SI IL Y EN A
	jeedom="";
	for (int i = 2; i < NB_TOTALPIN; i++)
	{
		if (TempoPinHIGH[i]!=0 && TempoPinHIGH[i]<millis()) // depassement de la temporisation
		{
			TempoPinHIGH[i]=0; // Suppression de la temporisation
			PinWriteHIGH(i);
		}
		else if (TempoPinLOW[i]!=0 && TempoPinLOW[i]<millis()) // depassement de la temporisation
		{
			TempoPinLOW[i]=0; // Suppression de la temporisation
			PinWriteLOW(i);
		}
	}
	// FIN TEMPO

	// On ecoute le reseau
	EthernetClient client = server.available();

	if (client)
	{
		// on regarde si on recois des donnees
		n=0;
		#if (DEBUGtoSERIAL == 1)
			Serial.println(F("\nRECEIVING:"));
		#endif
		timeout = millis()+30000;	// 30s
		while (client.connected() and timeout>millis())
		{
			if (client.available())
			{
				c[n] = client.read();
				if (c[n]=='\r') c[n]='\n';
				if (c[n]=='\n')
				{
					while	(client.available()) c[n+1] = client.read();
					break;
				}
				n++;
			}
		}
		#if (DEBUGtoSERIAL == 1)
			if (timeout<millis()) Serial.println(F("\nTimeOut:"));
			for (int i = 0; i <= n; i++)	Serial.print(c[i]);
		#endif

		if (n && c[n]=='\n')
		{
			n--;
			// on les traites
			if (c[0]=='C' && c[n]=='C')	 // Configuration de l'etat des pins
			{
				// NB_TOTALPIN = NB_DIGITALPIN	+ NB_ANALOGPIN

				if (n==(NB_TOTALPIN+1))				 // Petite securite
				{
					for (int i = 0; i < NB_TOTALPIN; i++)
					{
						EEPROM.update(30+i, c[i+1]);			// Sauvegarde mode des pins
					}
					Load_EEPROM(0);							// On met en place
					client.print(F("COK"));							 // On reponds a JEEDOM
					jeedom+=F("&REP=COK");
					ProbeNextSend=millis()+60000; // Décalage pour laisser le temps aux differents parametrages d'arriver de Jeedom
				}
			}
			else if (c[0]=='E' && c[n]=='Q')	// Recuperation de l' eqLogic de Jeedom concernant cet arduino
			{
				eqLogic = "";
				EEPROM.update(15, n);				 // Sauvegarde de la longueur du eqLogic
				for (int i = 1; i < n; i++)
				{
					EEPROM.update(15+i, c[i]-'0');			// Sauvegarde de l' eqLogic
					eqLogic += (char)c[i];
				}
				client.print(F("EOK"));							 // On reponds a JEEDOM
				jeedom+=F("&REP=EOK");
				ProbeNextSend=millis()+60000; // Décalage pour laisser le temps aux differents parametrages d'arriver de Jeedom
			}
			else if (c[0]=='I' && c[n]=='P')	// Recuperation de l' IP de Jeedom ( I192.168.000.044P )
			{
				if (n<17)			 // Petite securite
				{
					int ip=0;
					inString="";
					for (int i = 1; i <= n; i++)	//jusqu'a n car il faut un caractere non digit pour finir
					{
					if (isDigit(c[i]))
					{
						inString += (char)c[i];
					}
					else
					{
						IP_JEEDOM[ip]=inString.toInt();
						inString="";
						ip++;
					}
					}
					EEPROM.update(26, IP_JEEDOM[0]);					// Sauvegarde de l' IP
					EEPROM.update(27, IP_JEEDOM[1]);
					EEPROM.update(28, IP_JEEDOM[2]);
					EEPROM.update(29, IP_JEEDOM[3]);
					client.print(F("IPOK"));							// On reponds a JEEDOM
					jeedom+=F("&REP=IPOK");
					ProbeNextSend=millis()+60000; // Décalage pour laisser le temps aux differents parametrages d'arriver de Jeedom
				}
			}
			else if (c[0]=='S' && c[n]=='S')	// Modifie la valeur d'une pin sortie
			{
				jeedom+=F("&REP=SOK");
				for (int i = 1; i < n; i++)
				{
					if (isDigit(c[i])) c[i]=c[i]-'0';
				}

				pin_id=10*int(c[1])+int(c[2]);					// recuperation du numero de la pin

				Set_OutputPin(pin_id);
				client.print(F("SOK"));							 // On reponds a JEEDOM
				ProbeNextSend=millis()+10000; // Décalage pour laisser le temps au differents parametrages d'arriver de Jeedom
			}
			else if ((c[0]=='S' || c[0]=='R') && c[n]=='C')		 	// Reçoie la valeur SAUVEE d'une pin compteur (suite reboot)
			{																				// ou RESET suite sauvegarde equipement.
					if (n>3)										// Petite securite
					{
						for (int i = 1; i < n; i++)
						{
							if (isDigit(c[i])) c[i]=c[i]-'0';
						}

						if (c[0]=='R') CounterPinValue[pin_id]=0;	// On reset la valeur si demandé.

						pin_id=10*int(c[1])+int(c[2]);										// récupération du numéro de la pin
						int multiple=1;
						for (int i = n-1; i >= 3; i--)										// récupération de la valeur
						{
							CounterPinValue[pin_id] += int(c[i])*multiple;
							multiple *= 10;
						}
						PinNextSend[pin_id]=millis()+2000;
						NextRefresh=millis()+2000;
						ProbeNextSend=millis()+10000; // Décalage pour laisser le temps au differents parametrages d'arriver de Jeedom

						client.print(F("SCOK"));												// On reponds a JEEDOM
						jeedom+=F("&REP=SCOK");
					}
			}
			else if (c[0]=='S' && c[n]=='F')	// Modifie la valeur de toutes les pins sortie (suite reboot )
			{
				// NB_TOTALPIN = NB_DIGITALPIN	+ NB_ANALOGPIN
				if (n==(NB_TOTALPIN+1))			 // Petite securite
				{
					jeedom+=F("&REP=SFOK");
					for (int i = 2; i < NB_TOTALPIN; i++)
					{
						switch (Status_pins[i])
						{
							case 'o': // output
							case 's': // switch
							case 'l': // low_relais
							case 'h': // high_relais
							case 'u': // output_pulse
							case 'v': // low_pulse
							case 'w': // high_pulse
								if (c[i+1]=='0')
								{
									PinWriteLOW(i);
								}
								else if (c[i+1]=='1')
								{
									PinWriteHIGH(i);
								}
							break;
						}
					}
				RepByJeedom=0; // Demande repondue, pas la peine de redemander a la fin de loop()
					client.print(F("SFOK"));							// On reponds a JEEDOM
					ProbeNextSend=millis()+20000; // Décalage pour laisser le temps au differents parametrages d'arriver de Jeedom
				}
			}
			else if (c[0]=='S' && (c[n]=='L' || c[n]=='H' || c[n]=='A')) // Modifie la valeur de toutes les pins sortie a LOW / HIGH / SWITCH / PULSE
			{
				if (n==2 || n==7)			// Petite securite	: S2L / S2H / S2A / SP00007L /SP00007H
				{
					jeedom+=F("&REP=SOK");
					for (int i = 1; i < n; i++)
					{
						if (isDigit(c[i])) c[i]=c[i]-'0';
					}
					if (c[1]=='P') pinTempo = 10000*int(c[2])+1000*int(c[3])+100*int(c[4])+10*int(c[5])+int(c[6]);
					for (int i = 2; i < NB_TOTALPIN; i++)
					{
						TempoPinHIGH[i] = 0;
						TempoPinLOW[i] = 0;
						switch (Status_pins[i])
						{
							case 'o': // output
							case 's': // switch
							case 'l': // low_relais
							case 'h': // high_relais
							case 'u': // output_pulse
							case 'v': // low_pulse
							case 'w': // high_pulse
								if (c[n]=='L')
								{
									if (c[1] == 'P') TempoPinHIGH[i] = pinTempo;
									PinWriteLOW(i);
								}
								else if (c[n] == 'H')
								{
									if (c[1] == 'P') TempoPinLOW[i] = pinTempo;
									PinWriteHIGH(i);
								}
								else
								{
									if (swtch[i]==1) PinWriteLOW(i);
									else PinWriteHIGH(i);
								}
							break;
						}
					}
					client.print(F("SOK"));							// On reponds a JEEDOM
					ProbeNextSend=millis()+10000; // Décalage pour laisser le temps au differents parametrages d'arriver de Jeedom
				}
			}
			else if (c[0]=='B' && c[n]=='M')	// Choix du BootMode
			{
				BootMode=int(c[1]-'0');
				EEPROM.update(14, BootMode);

				client.print(F("BMOK"));								// On reponds a JEEDOM
				jeedom+=F("&REP=BMOK");
				ProbeNextSend=millis()+3000; // Décalage pour laisser le temps au differents parametrages d'arriver de Jeedom
			}
		#if (UseHCSR04 == 1)
			else if (c[0]=='T' && c[n]=='E') 	// Trigger pin + pin Echo pour le support du HC-SR04 (ex: T0203E)
			{
				if (n==5)				 // Petite securite
				{
					client.print(F("SOK"));								// On reponds a JEEDOM
					jeedom+=F("&REP=SOK");
					ProbeNextSend=millis()+10000; // Décalage pour laisser le temps aux differents parametrages d'arriver de Jeedom

					for (int i = 1; i < n; i++)
					{
						if (isDigit(c[i])) c[i]=c[i]-'0';
					}
					pin_id=10*int(c[1])+int(c[2]);					// recuperation du numero de la pin trigger
					echo_pin=10*int(c[3])+int(c[4]);			// recuperation du numero de la pin echo

					digitalWrite(pin_id, HIGH);							// impulsion de 10us pour demander la mesure au HC-SR04
					delayMicroseconds(10);
					digitalWrite(pin_id, LOW);
					long distance = pulseIn(echo_pin, HIGH); 	// attente du retour de la mesure (en us) - timeout 1s
					distance = distance * 0.034 / 2;					// conversion en distance (cm). NOTE : V=340m/s, fluctue en foncion de la temperature
					// on envoi le resultat a jeedom
					jeedom += '&';
					jeedom += echo_pin;
					jeedom += '=';
					jeedom += distance;
				}
			}
		#endif
		#if (UseLCD16x2 == 1 || UseLCD16x2 == 2)
			else if (c[0]=='S' && c[n]=='M') 	// Send Message to LCD
			{
					client.print(F("SMOK"));								// On reponds a JEEDOM
					jeedom+=F("&REP=SMOK");
					ProbeNextSend=millis()+10000; // Décalage pour laisser le temps aux differents parametrages d'arriver de Jeedom

					//pin_id=10*int(c[1]-'0')+int(c[2]-'0');
					lcd.clear();
					Message = "";
					int i = 3; // Normal, utilise dans les 2x FOR
					for (i; i < n; i++)	//S17Title|MessageM >>> S 17 Title | Message M	// Title & Message <16chars chacun
					{
						if (c[i] == '|') break;
						Message += (char)c[i];
					}
					lcd.setCursor(0,0);	// Title
					lcd.print(Message);
					i++;
					Message = "";
					for (i; i < n; i++)
					{
						Message += (char)c[i];
					}
					lcd.setCursor(0,1);	// Message
					lcd.print(Message);
			}
		#endif
		#if (UseWS2811 == 1)
			else if (c[0]=='C' && c[n]=='R')	// COLOR : C09LFF00FFR ou C09M12R pin 09 color L or effect M
			{
				for (int i = 1; i < n; i++)
				{
					if (isDigit(c[i])) c[i]=c[i]-'0';
					if ((c[i] >= 'A') && (c[i] <= 'F')) c[i]=c[i] - 'A' + 10; // For hex
				}
				if (c[3]=='M')
				{
					client.print(F("SOK"));	// On reponds a JEEDOM avant le TIMEOUT
					pinTempo = 10 * int(c[4]) + int(c[5]);
					#if (DEBUGtoSERIAL == 1)
						Serial.print(F("\startShow: "));
						Serial.println(pinTempo);
					#endif
					startShow(pinTempo);
				}
				else if (c[3]=='L')
				{
					client.print(F("SOK"));	// On reponds a JEEDOM avant le TIMEOUT
					if (n == 10)			 // Petite securite
					{
						uint8_t r = 16 * int(c[4]) + int(c[5]);
						uint8_t g = 16 * int(c[6]) + int(c[7]);
						uint8_t b = 16 * int(c[8]) + int(c[9]);
						#if (DEBUGtoSERIAL == 1)
							Serial.print(F("\R: "));
							Serial.println(r);
							Serial.print(F("\G: "));
							Serial.println(g);
							Serial.print(F("\B: "));
							Serial.println(b);
						#endif
						for(uint16_t z = 0; z < strip.numPixels(); z++) 
						{
							strip.setPixelColor(z, r, b, g);
						}
						strip.show();
					}
				}
				else client.print(F("NOK"));	// On reponds a JEEDOM 
			}
		#endif		
		#if (UserSketch == 1)
			else if (c[0]=='U' && c[n]=='R')	// UseR Action
			{
				client.print(F("SOK"));	// On reponds a JEEDOM
				UserAction();
			}
		#endif

			else
			{
				client.print(F("NOK"));									 // On reponds a JEEDOM
				jeedom+=F("&REP=NOK");
			}
		}
	}
	client.stop();
	// On ecoute les pins en entree
	//jeedom="";
	for (int i = 2; i < NB_TOTALPIN; i++)
	{
		byte BPvalue = 0;
		switch (Status_pins[i])
		{
		case 'i': // input
		case 'p': // input_pullup
			PinValue = digitalRead(i);
			if (PinValue!=OLDPinValue[i] && (PinNextSend[i]<millis() || NextRefresh<millis()))
			{
				OLDPinValue[i]=PinValue;
				jeedom += '&';
				jeedom += i;
				jeedom += '=';
				jeedom += PinValue;
				PinNextSend[i]=millis()+1000; // Delai pour eviter trop d'envois
			}
			break;
		case 'n':		// BP_input_pulldown
			BPvalue = 1;
		case 'q':		// BP_input_pullup
			PinValue = digitalRead(i);
			if (PinValue != OLDPinValue[i])
			{
				PinNextSend[i] = millis() + 50;	 // Delai antirebond
				OLDPinValue[i] = PinValue;
				ProbeNextSend = millis() + 5000; // decale la lecture des sondes pour eviter un conflit
			}
			if (PinNextSend[i] < millis() && PinValue != swtch[i])
			{
				if (PinValue == BPvalue) CounterPinValue[i] += 1;
				OLDAnalogPinValue[i] = millis() + 250;	 // Delai entre clicks
				swtch[i] = PinValue;
			}
			if (OLDAnalogPinValue[i] < millis() && CounterPinValue[i] != 0)
			{
				if (PinValue == BPvalue) CounterPinValue[i] = 99; // Appui long
				jeedom += '&';
				jeedom += i;
				jeedom += '=';
				jeedom += CounterPinValue[i];
				CounterPinValue[i] = 0;
				OLDAnalogPinValue[i] = millis() + 1000;
			}
			break;
		#if (UsePwm_input == 1)
		case 'g': // input_variable suivant tempo
			PinValue = digitalRead(i);
			// Calcul
			if (PinNextSend[i]>millis()) // bouton laché avant les 10s
			{
				pinTempo=255-((PinNextSend[i]-millis())*255/10000); // pas de 25.5 par seconde
			}
			else pinTempo=255;	// si bouton laché après les 10s, on bloque la valeur a 255

			if (PinValue!=OLDPinValue[i]) // changement état entrée = bouton appuyé ou bouton relaché
			{
				OLDPinValue[i]=PinValue;
				if (swtch[i]==1)	// on vient de lacher le bouton.
				{
					swtch[i]=0; // on enregistre le laché.
					jeedom += '&';
					jeedom += i;
					jeedom += '=';
					jeedom += pinTempo;
					PinNextSend[i]=millis();
				}
				else
				{
					swtch[i]=1; // on vient d'appuyer sur le bouton, on enregistre.
					PinNextSend[i]=millis()+10000; // Delai pour la tempo de maintient du bouton.
					CounterPinValue[i]==millis(); // reutilisation pour economie de ram
					ProbeNextSend=millis()+15000; // decale la lecture des sondes pour eviter un conflit
				}
			}
			else
			{
				if (swtch[i]==1 && CounterPinValue[i]<millis())
				{
					jeedom += '&';
					jeedom += i;
					jeedom += '=';
					jeedom += pinTempo;
					CounterPinValue[i]==millis()+1000; // reactualisation toutes les secondes pour ne pas trop charger Jeedom
				}
			}
			break;
		#endif
		case 'a': // analog_input
				AnalogPinValue = analogRead(i);
				if (AnalogPinValue!=OLDAnalogPinValue[i] && (PinNextSend[i]<millis() || NextRefresh<millis()))
				{
					if (abs(AnalogPinValue-OLDAnalogPinValue[i])>20)		// delta correctif pour eviter les changements negligeables
					{
						int j=i;
						if (i<54) j=i+40;	 // petit correctif car dans Jeedom toutes les pins Analog commencent a l'id 54+
						OLDAnalogPinValue[i]=AnalogPinValue;
						//jeedom += '&' + j + '=' + AnalogPinValue;
						jeedom += '&';
						jeedom += j;
						jeedom += '=';
						jeedom += AnalogPinValue;
						PinNextSend[i]=millis()+5000; // Delai pour eviter trop d'envois
					}
				}
				break;
		case 'c': // compteur_pullup CounterPinValue
			PinValue = digitalRead(i);
			if (PinValue!=OLDPinValue[i])
			{
				OLDPinValue[i]=PinValue;
				CounterPinValue[i]+=PinValue;
			}
			if (NextRefresh<millis() || PinNextSend[i]<millis())
			{
				jeedom += '&';
				jeedom += i;
				jeedom += '=';
				jeedom += CounterPinValue[i];
				PinNextSend[i]=millis()+10000;		// Delai 10s pour eviter trop d'envois
			}
			break;
		#if (UseDHT == 1)
		case 'd': // DHT11
		case 'e': // DHT21
		case 'f':	// DHT22
			if (PinNextSend[i]<millis() and ProbeNextSend<millis())
			{
				jeedom += '&';
				jeedom += i;
				jeedom += '=';
				jeedom += int (myDHT[i]->readTemperature()*100);
				jeedom += '&';
				jeedom += i+1000;
				jeedom += '=';
				jeedom += int (myDHT[i]->readHumidity()*100);
				PinNextSend[i]=millis()+300000;	// Delai 60s entre chaque mesures pour eviter trop d'envois
				ProbeNextSend=millis()+10000; // Permet de decaler la lecture entre chaque sonde DHT sinon ne marche pas cf librairie (3000 mini)
				//jeedom += F("&FREERAM=");
				//jeedom += freeRam();
			}
			break;
		#endif
		#if (UseDS18x20 == 1)
		case 'b': // DS18x20
			if (PinNextSend[i]<millis() and ProbeNextSend<millis())
			{
				jeedom += '&';
				jeedom += i;
				jeedom += '=';
				jeedom += read_DSx(i); // DS18x20
				PinNextSend[i]=millis()+300000;	// Delai 60s entre chaque mesures pour eviter trop d'envois
				ProbeNextSend=millis()+10000; // Permet de laisser du temps pour les commandes 'action', probabilite de blocage moins grande idem^^
			}
			break;
		#endif
		#if (UseTeleInfo == 1)
		case 'j': // teleinfoRX
			if (PinNextSend[i]<millis() || NextRefresh<millis())
			{
				#if (DEBUGtoSERIAL == 1)
					Serial.print(F("\nTeleinfoRX ("));
					Serial.print(i);
					Serial.print(F(") : "));
				#endif
				char recu = 0;
				int cntChar=0;
				timeout = millis()+2000;	// 2s
				while (recu != 0x02 and timeout>millis())
				{
					if (teleinfo.available()) recu = teleinfo.read() & 0x7F;
/* 					#if (DEBUGtoSERIAL == 1)
						Serial.print(recu);
					#endif	 */
				}
				jeedom += F("&ADCO=");
				timeout = millis()+2000;	// 2s
				while (timeout>millis())
				{
					if (teleinfo.available())
					{
						recu = teleinfo.read() & 0x7F;
/* 						#if (DEBUGtoSERIAL == 1)
							Serial.print(recu);
						#endif */
						cntChar++;
						if (cntChar > 280) break;
						if (recu == 0) break;
						if (recu == 0x04) break; // EOT
						if (recu == 0x03) break; // permet d'eviter ce caractere dans la chaine envoyée (economise du code pour le traiter)
						if (recu == 0x0A) continue; 			// Debut de groupe
						if (recu == 0x0D)
						{
							jeedom += ';';	// Fin de groupe
							continue;
						}
						if (recu<33)
						{
							jeedom += '_';
						}
						else jeedom += recu;
					}
				}
				#if (DEBUGtoSERIAL == 1)
					Serial.println(F("/finRX"));
				#endif
				PinNextSend[i]=millis()+30000;	// Delai 30s entre chaque mesures pour eviter trop d'envois
			}
			break;
		#endif
		#if (UseBMP180 == 1)
		case 'r': // BMP085/180
			if (PinNextSend[i]<millis())
			{
				jeedom += '&';
				jeedom += i;
				jeedom += '=';
				jeedom += bmp.readTemperature();
				jeedom += '&';
				jeedom += i + 1000;
				jeedom += '=';
				jeedom += bmp.readPressure();
				PinNextSend[i] = millis() + 60000;	// Delai 60s entre chaque mesures pour eviter trop d'envois
			}
			break;
		#endif

		}
	}
	if (NextRefresh<millis())
	{
		NextRefresh=millis()+60000;	// Refresh auto toutes les 60s
		if (RepByJeedom) // sert a verifier que jeedom a bien repondu a la demande dans Load_eeprom
		{
			jeedom += F("&ASK=1"); // Sinon on redemande
		}
	}

	#if (UserSketch == 1)
		UserLoop(); // Appel de votre loop() permanent
		// if (NextRefresh<millis()) UserLoop(); // Appel de votre loop() toutes les 60s
	#endif

/* 	#if (UseLCD16x2 == 1 || UseLCD16x2 == 2)
		lcd.setCursor(0,1);
		lcd.print(jeedom);
	#endif */

	if (jeedom != "") SendToJeedom();
}
//// User Loop + Action
#if (UserSketch == 1)
	void UserLoop()
	{
		// Votre loop()
		// pour envoyer une valeur a jeedom, il suffit de remplir la variable jeedom comme cela :
		// jeedom += '&';
		// jeedom += u;	// avec u = numero de la pin "info" dans l'equipement jeedom - info pin number
		// jeedom += '=';
		// jeedom += info; // la valeur a envoyer - info value to send
		//
		// Ex:
		// jeedom += '&';
		// jeedom += 500;	// Etat pin 500
		// jeedom += '=';
		// jeedom += '1'; 	// '0' ou '1'
		//
		// jeedom += '&';
		// jeedom += 504;	// pin 504
		// jeedom += '=';
		// jeedom += millis(); 	// valeur numerique
		//
		// jeedom += '&';
		// jeedom += 506;	// pin 506
		// jeedom += '=';
		// jeedom += "Jeedouino%20speaking%20to%20Jeedom...";	 // valeur string

		// /!\ attention de ne pas mettre de code bloquant (avec trop de "delays") - max time 2s
	}
	void UserAction()
	{
		// Ens cas d'une reception d'une commande user action depuis jeedom
		// c[0]='U' & c[n]='R')
		//
		// c[1] = c[1]-'0';	==5 (user pin start at 500)
		// c[2] = c[2]-'0';
		// c[3] = c[3]-'0';
		// pin_id = 100 * int(c[1]) + 10 * int(c[2]) + int(c[3]); 	// pin action number
		//
		// c[4] to c[n-1] 	// pin action value
		//
		// Ex:
		// U5000R -> U 500 0 R = binary 0 pin 500
		// U5001R -> U 500 1 R = binary 1 pin 500
		// U502128R -> U 502 128 R = Slider Value 128 pin 502
		// U507[Jeedom] Message|Ceci est un testR -> U 507 [Jeedom] Message | Ceci est un test R = Message pin 507

		// /!\ attention de ne pas mettre de code bloquant (avec trop de "delays") - max time 2s
	}
#endif

// FONCTIONS

void SendToJeedom()
{
	EthernetClient JEEDOMclient = server.available();
	#if (DEBUGtoSERIAL == 1)
		Serial.print(F("\nSending: "));
		Serial.println(jeedom);
		Serial.print(F("To eqLogic: "));
		Serial.println(eqLogic);
	#endif
	int J=JEEDOMclient.connect(IP_JEEDOM, 80);
	if (J)
	{
		JEEDOMclient.print(F("GET /plugins/jeedouino/core/php/Callback.php?BoardEQ="));
		JEEDOMclient.print(eqLogic);
		JEEDOMclient.print(jeedom);
		JEEDOMclient.println(F(" HTTP/1.1"));
		JEEDOMclient.print(F("Host: "));
		JEEDOMclient.print(IP_JEEDOM[0]);
		JEEDOMclient.print('.');
		JEEDOMclient.print(IP_JEEDOM[1]);
		JEEDOMclient.print('.');
		JEEDOMclient.print(IP_JEEDOM[2]);
		JEEDOMclient.print('.');
		JEEDOMclient.println(IP_JEEDOM[3]);
		delay(111);
		JEEDOMclient.println(F("Connection: close"));
		JEEDOMclient.println();
		delay(111);
		JEEDOMclient.stop();
	#if (DEBUGtoSERIAL == 1)
		Serial.print(F("At IP: "));
		Serial.print(IP_JEEDOM[0]);
		Serial.print('.');
		Serial.print(IP_JEEDOM[1]);
		Serial.print('.');
		Serial.print(IP_JEEDOM[2]);
		Serial.print('.');
		Serial.println(IP_JEEDOM[3]);
	#endif

		UIPEFailTime = millis();
		UIPEFailCount = 0;
	}
	else
	{
		JEEDOMclient.stop();
		UIPEFailCount++;
	#if (DEBUGtoSERIAL == 1)
		Serial.print(F("connection failed : "));
		Serial.println(J);
		Serial.print(F("UIPEFailCount : "));
		Serial.println(UIPEFailCount);
	#endif
		if (UIPEFailCount>10 and millis()>UIPEFailTime+60000)
		{
			#if (DEBUGtoSERIAL == 1)
				Serial.println(F("Waiting 10s & reboot if wdg"));
			#endif
			delay(10000); // tentative soft pour laisser le temps a la lib de se resaisir
			#if (UseWatchdog == 1)
				wdt_enable(WDTO_15MS); // try reboot
			#endif
			delay(20000); // tentative soft pour laisser le temps a la lib de se resaisir
			JEEDOMclient.stop();
			Ethernet.begin(mac, IP_ARDUINO);
			server.begin();
			UIPEFailTime = millis()+60000;
			delay(999);
		}
	}
	jeedom="";
	delay(444);
	//JEEDOMclient.stop();
}

void Set_OutputPin(int i)
{
	TempoPinHIGH[i]=0;
	TempoPinLOW[i]=0;

	switch (Status_pins[i])
	{
		#if (UseServo == 1)
		case 'x': 
			pinTempo = 100 * int(c[3]) + 10 * int(c[4]) + int(c[5]);
			myServo[i].write(pinTempo);
			delay(15);
			break;
		#endif
		case 'o': // output			 // S131S pin 13 set to 1 (ou S130S pin 13 set to 0)
		case 'l': // low_relais	// S13S pin 13 set to 0
		case 'h': // high_relais	// S13S pin 13 set to 1
			if (c[3]==0)
			{
				PinWriteLOW(i);
			}
			else
			{
				PinWriteHIGH(i);
			}
			break;

		case 's': // switch			// S13 pin 13 set to 1 si 0 sinon set to 0 si 1
			if (swtch[i]==1)
			{
				PinWriteLOW(i);
			}
			else
			{
				PinWriteHIGH(i);
			}
			break;

		//
		// ON VERIFIE SI UNE TEMPORISATION EST DEMANDEE SUR UNE DES SORTIES
		// On essai d'etre sur une precision de 0.1s mais ca peut fluctuer en fonction de la charge cpu
		// Testé seulement sur mega2560
		//
		case 'u': // output_pulse // Tempo ON : S1309999S : pin 13 set to 0 during 999.9 seconds then set to 1 (S1319999 : set to 1 then to 0)
			pinTempo=10000*int(c[4])+1000*int(c[5])+100*int(c[6])+10*int(c[7])+int(c[8]);
			// pinTempo est donc en dixieme de seconde
			pinTempo = pinTempo*100+millis(); // temps apres lequel la pin doit retourner dans l'autre etat.

			// Peut buguer quand millis() arrive vers 50jours si une tempo est en cours pendant la remise a zero de millis().
			// Risque faible si les tempo sont de l'ordre de la seconde (impulsions sur relais par ex.).
			if (c[3]==0)
			{
				TempoPinHIGH[i]=pinTempo;
				PinWriteLOW(i);
			}
			else if (c[3]==1)
			{
				TempoPinLOW[i]=pinTempo;
				PinWriteHIGH(i);
			}
			break;

		case 'v': // low_pulse		// Tempo ON : S139999S : pin 13 set to 0 during 999.9 seconds then set to 1
			if (c[3]==0)
			{
				pinTempo=10000*int(c[4])+1000*int(c[5])+100*int(c[6])+10*int(c[7])+int(c[8]);
				// pinTempo est donc en dixieme de seconde
				pinTempo = pinTempo*100+millis();	 // temps apres lequel la pin doit retourner dans l'autre etat.

				TempoPinHIGH[i]=pinTempo;
				PinWriteLOW(i);
			}
			else
			{
				PinWriteHIGH(i);
			}
			break;

		case 'w': // high_pulse	 // Tempo ON : S139999S : pin 13 set to 1 during 999.9 seconds then set to 0
			if (c[3]==0)
			{
				PinWriteLOW(i);
			}
			else
			{
				pinTempo=10000*int(c[4])+1000*int(c[5])+100*int(c[6])+10*int(c[7])+int(c[8]);
				// pinTempo est donc en dixieme de seconde
				pinTempo = pinTempo*100+millis();	 // temps apres lequel la pin doit retourner dans l'autre etat.

				TempoPinLOW[i]=pinTempo;
				PinWriteHIGH(i);
			}
			break;

		case 'm': // pwm_output
			pinTempo=100*int(c[3])+10*int(c[4])+int(c[5]);	// the duty cycle: between 0 (always off) and 255 (always on).
			analogWrite(i, pinTempo);
			break;
	}
}

void Load_EEPROM(int k)
{
	// on recupere le BootMode
	BootMode=EEPROM.read(14);
	// Recuperation de l'eqLogic
	eqLogic = "";
	n=EEPROM.read(15);				// Recuperation de la longueur du eqLogic
	if (n>0)				// bug probable si eqLogic_id<10 dans jeedom
	{
		for (int i = 1; i < n; i++)
		{
			eqLogic += EEPROM.read(15+i);
		}
	}
	// Recuperation de l'IP
	IP_JEEDOM[0]=EEPROM.read(26);
	IP_JEEDOM[1]=EEPROM.read(27);
	IP_JEEDOM[2]=EEPROM.read(28);
	IP_JEEDOM[3]=EEPROM.read(29);

	// on met en place le mode des pins
	jeedom="";
	byte y=1;
	#if (UseTeleInfo == 1)
		teleinfoRX = 0;
		teleinfoTX = 0;
	#endif
	#if (DEBUGtoSERIAL == 1)
		Serial.println(F("Conf. Pins:"));
		for (int i = 0; i < NB_TOTALPIN; i++) Serial.print((char)EEPROM.read(30+i));
		Serial.println();
	#endif
	for (int i = 2; i < NB_TOTALPIN; i++)
	{
		Status_pins[i] = EEPROM.read(30+i); // Etats des pins

		// INITIALISATION DES TABLEAUX DE TEMPO SORTIES
		TempoPinHIGH[i] = 0;
		TempoPinLOW[i] = 0;
		//
		switch (Status_pins[i])
		{
			case 'i': // input
			case 'a': // analog_input
			case 'n':		// BP_input_pulldown
				pinMode(i, INPUT);
				break;
			#if (UseTeleInfo == 1)
			case 'j':		// teleinfoRX pin
				teleinfoRX = i;
				pinMode(i, INPUT);
				break;
			case 'k':		// teleinfoTX pin
				teleinfoTX = i;
				pinMode(i, OUTPUT);
				break;
			#endif
			#if (UseDHT == 1)
			case 'd': // DHT11
				myDHT[i] = new DHT(i, 11);	// DHT11
				PinNextSend[i]=millis()+300000;
				break;
			case 'e': // DHT21
				myDHT[i] = new DHT(i, 21);	// DHT21
				PinNextSend[i]=millis()+300000;
				break;
			case 'f': // DHT 22
				myDHT[i] = new DHT(i, 22);	// DHT22
				PinNextSend[i]=millis()+300000;
				break;
			#endif
			#if (UseDS18x20 == 1)
			case 'b': // DS18x20
				PinNextSend[i]=millis()+300000;
				break;
			#endif
			#if (UseServo == 1)
			case 'x': 
				myServo[i].attach(i);
				break;
			#endif
			case 't':		// trigger pin
				pinMode(i, OUTPUT);
				digitalWrite(i, LOW);
				break;
			case 'z':		// echo pin
				pinMode(i, INPUT);
				break;
			case 'p':		 // input_pullup
			case 'g':		 // pwm_input
			case 'q':		// BP_input_pullup
					pinMode(i, INPUT_PULLUP); // pour eviter les parasites en lecture, mais inverse l'etat de l'entree : HIGH = input open, LOW = input closed
					// Arduino Doc : An internal 20K-ohm resistor is pulled to 5V.
				swtch[i]=0; 	// init pour pwm_input
				OLDPinValue[i]=1;
				PinNextSend[i]=millis();
					break;
			case 'c':		 // compteur_pullup
					pinMode(i, INPUT_PULLUP); // pour eviter les parasites en lecture, mais inverse l'etat de l'entree : HIGH = input open, LOW = input closed
					// Arduino Doc : An internal 20K-ohm resistor is pulled to 5V.
					if (k)
					{
						jeedom += F("&CPT_"); // On demande à Jeedom de renvoyer la dernière valeur connue pour la pin i
						jeedom += i;
						jeedom += '=';
						jeedom += i;
					}
					break;
			case 'o': // output
			case 's': // switch
			case 'l': // low_relais
			case 'h': // high_relais
			case 'u': // output_pulse
			case 'v': // low_pulse
			case 'w': // high_pulse
				pinMode(i, OUTPUT);
				// restauration de l'etat des pins DIGITAL OUT au demarrage
			 if (k)
			 {
				switch (BootMode)
				{
					case 0:
						// On laisse tel quel
						break;
					case 1:
						PinWriteLOW(i);
						break;
					case 2:
						PinWriteHIGH(i);
						break;
					case 3:
						PinWriteHIGH(i);
						// On demande a Jeedom d'envoyer la valeur des pins
						if (y)
						{
							jeedom += F("&ASK=1");
							y=0;
							RepByJeedom=1; // sert a verifier que jeedom a bien repondu a la demande
						}
						break;
					case 4:
						if (EEPROM.read(110+i) == 0) PinWriteLOW(i);
						else PinWriteHIGH(i);
						break;
					case 5:
						PinWriteLOW(i);
						// On demande a Jeedom d'envoyer la valeur des pins
						if (y)
						{
							jeedom += F("&ASK=1");
							y=0;
							RepByJeedom=1; // sert a verifier que jeedom a bien repondu a la demande
						}
						break;
					}
			 }
				// fin restauration

				break;

			case 'm': // pwm_output
				pinMode(i, OUTPUT);
				break;
		}
	}
	#if (UseTeleInfo == 1)
		if (teleinfoRX != 0)
		{
				#if (DEBUGtoSERIAL == 1)
			Serial.print(F("\nteleinfoRX:"));
			Serial.println(teleinfoRX);
			Serial.print(F("\nteleinfoTX:"));
			Serial.println(teleinfoTX);
			#endif
			//SoftwareSerial teleinfo(teleinfoRX, teleinfoTX);
		}
	#endif
	if (jeedom!="") SendToJeedom();
}
void PinWriteHIGH(long p)
{
	digitalWrite(p, HIGH);
	swtch[p]=1;
	jeedom += '&';
	jeedom += p;
	jeedom += F("=1");
	// Si bootmode=4 sauvegarde de l'etat de la pin (en sortie) - !!! Dangereux pour l'eeprom à long terme !!!
	if (BootMode==4) EEPROM.update(110+p, 1);
	#if (DEBUGtoSERIAL == 1)
		Serial.print(F("SetPin "));
		Serial.print(p);
		Serial.println(F(" to 1"));
	#endif
}
void PinWriteLOW(long p)
{
	digitalWrite(p, LOW);
	swtch[p]=0;
	jeedom += '&';
	jeedom += p;
	jeedom += F("=0");
	// Si bootmode=4 sauvegarde de l'etat de la pin (en sortie) - !!! Dangereux pour l'eeprom à long terme !!!
	if (BootMode==4) EEPROM.update(110+p, 0);
	#if (DEBUGtoSERIAL == 1)
		Serial.print(F("SetPin "));
		Serial.print(p);
		Serial.println(F(" to 0"));
	#endif
}

void Init_EEPROM()
{
	// Un marqueur
	EEPROM.update(13, 'J');	 // JEEDOUINO

	// BootMode choisi au demarrage de l'arduino
	// 0 = Pas de sauvegarde - Toutes les pins sorties non modifi�es au d�marrage.
	// 1 = Pas de sauvegarde - Toutes les pins sorties mises � LOW au d�marrage.
	// 2 = Pas de sauvegarde - Toutes les pins sorties mises � HIGH au d�marrage.
	// 3 = Sauvegarde sur JEEDOM - Toutes les pins sorties mises suivant leur sauvegarde dans Jeedom. Jeedom requis, sinon pins mises � OFF.
	// 4 = Sauvegarde sur EEPROM- Toutes les pins sorties mises suivant leur sauvegarde dans l\'EEPROM. Autonome, mais dur�e de vie de l\'eeprom fortement r�duite.
	EEPROM.update(14, 2);
	BootMode=2;

	// Initialisation par default
	for (int i = 30; i < 200; i++)
	{
		EEPROM.update(i, 1);	// Valeur des pins OUT au 1er demarrage ( mes relais sont actis a 0, donc je met 1 pour eviter de les actionner au 1er boot)
	}
	EEPROM.update(26, IP_JEEDOM[0]);					// Sauvegarde de l' IP
	EEPROM.update(27, IP_JEEDOM[1]);
	EEPROM.update(28, IP_JEEDOM[2]);
	EEPROM.update(29, IP_JEEDOM[3]);

	eqLogic = F("40");										// Sauvegarde de eqLogic pour 1er boot apres 1er flashage
	EEPROM.update(15, 3);					// Sauvegarde de la longueur du eqLogic
	for (int i = 1; i < 3; i++)
	{
		EEPROM.update(15+i, eqLogic[i-1]-'0'); 				// Sauvegarde de l' eqLogic
	}

	// fin initialisation
}
//int freeRam ()
//{
//	extern int __heap_start, *__brkval;
//	int v;
//	return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
//}
#if (UseDS18x20 == 1)
int read_DSx(int pinD)
{
	byte present = 0;
	byte type_s;
	byte data[12];
	byte addr[8];
	OneWire ds(pinD);

	if ( !ds.search(addr))
	{
		ds.reset_search();
	#if (DEBUGtoSERIAL == 1)
		Serial.println(F("ds not found..."));
	#endif
		delay(250);
		return 0;
	}

	if (OneWire::crc8(addr, 7) != addr[7]) //Check if there is no errors on transmission
	{
		#if (DEBUGtoSERIAL == 1)
		Serial.println(F("CRC invalide..."));
		#endif
		return 0;
	}

	// the first ROM byte indicates which chip
	switch (addr[0])
	{
		case 0x10:
	#if (DEBUGtoSERIAL == 1)
		 Serial.println(F(" Chip = DS18S20")); // or old DS1820
	#endif
		 type_s = 1;
		 break;
		case 0x28:
	#if (DEBUGtoSERIAL == 1)
		 Serial.println(F(" Chip = DS18B20"));
	#endif
		 type_s = 0;
		 break;
		case 0x22:
	#if (DEBUGtoSERIAL == 1)
		 Serial.println(F(" Chip = DS1822"));
	#endif
		 type_s = 0;
		 break;
		default:
	#if (DEBUGtoSERIAL == 1)
		 Serial.println(F("Device is not a DS18x20 family device."));
	#endif
		 return 0;
	}

	ds.reset();
	ds.select(addr);
	ds.write(0x44,1);			 // start conversion, with parasite power on at the end
	delay(800);
	present = ds.reset();
	ds.select(addr);
	ds.write(0xBE);			 // Read Scratchpad
	byte ii;
	for ( ii = 0; ii < 9; ii++)
	{				 // we need 9 bytes
		data[ii] = ds.read();
	}

	// convert the data to actual temperature

	unsigned int raw = (data[1] << 8) | data[0];
	if (type_s)
	{
		raw = raw << 3; // 9 bit resolution default
		if (data[7] == 0x10)
		{
			// count remain gives full 12 bit resolution
			raw = (raw & 0xFFF0) + 12 - data[6];
		}
	}
	else
	{
		byte cfg = (data[4] & 0x60);
		if (cfg == 0x00) raw = raw << 3;	// 9 bit resolution, 93.75 ms
		else if (cfg == 0x20) raw = raw << 2; // 10 bit res, 187.5 ms
		else if (cfg == 0x40) raw = raw << 1; // 11 bit res, 375 ms

	}
	#if (DEBUGtoSERIAL == 1)
	Serial.println(raw/16);
	#endif
	return raw;
}
#endif

#if (UseWS2811 == 1)
// Code below is from https://github.com/adafruit/Adafruit_NeoPixel/blob/master/examples/buttoncycler/buttoncycler.ino
// More info at https://github.com/adafruit/Adafruit_NeoPixel
void startShow(int i) {
	switch(i){
		case 0: colorWipe(strip.Color(0, 0, 0), 50);		// Black/off
						break;
		case 1: colorWipe(strip.Color(255, 0, 0), 50);	// Red
						break;
		case 2: colorWipe(strip.Color(0, 255, 0), 50);	// Green
						break;
		case 3: colorWipe(strip.Color(0, 0, 255), 50);	// Blue
						break;
		case 4: colorWipe(strip.Color(255, 255, 255), 50);	// White
						break;
		case 5: colorWipe(strip.Color(255, 255, 0), 50);	// Magenta
						break;
		case 6: colorWipe(strip.Color(255, 0, 255), 50);	// Yellow
						break;
		case 7: colorWipe(strip.Color(0, 255, 255), 50);	// Cyan
						break;

		case 8: theaterChase(strip.Color(127, 0, 0), 50); // Red
						break;
		case 9: theaterChase(strip.Color(0, 127, 0), 50); // Green
						break;
		case 10: theaterChase(strip.Color(0, 0, 127), 50); // Blue
						break;
		case 11: theaterChase(strip.Color(127, 127, 127), 50); // White
						break;
		case 12: theaterChase(strip.Color(127, 127, 0), 50); // Magenta
						break;
		case 13: theaterChase(strip.Color(127, 0, 127), 50); // Yellow
						break;
		case 14: theaterChase(strip.Color(0, 127, 127), 50); // Cyan
						break;
						
		case 15: rainbow(20);
						break;
		case 16: rainbowCycle(20);
						break;
		case 17: theaterChaseRainbow(50);
						break;
	}
}

// Fill the dots one after the other with a color
void colorWipe(uint32_t c, uint8_t wait) {
	for(uint16_t i=0; i<strip.numPixels(); i++) {
		strip.setPixelColor(i, c);
		strip.show();
		delay(wait);
	}
}

void rainbow(uint8_t wait) {
	uint16_t i, j;

	for(j=0; j<256; j++) {
		for(i=0; i<strip.numPixels(); i++) {
			strip.setPixelColor(i, Wheel((i+j) & 255));
		}
		strip.show();
		delay(wait);
	}
}

// Slightly different, this makes the rainbow equally distributed throughout
void rainbowCycle(uint8_t wait) {
	uint16_t i, j;

	for(j=0; j<256*5; j++) { // 5 cycles of all colors on wheel
		for(i=0; i< strip.numPixels(); i++) {
			strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
		}
		strip.show();
		delay(wait);
	}
}

//Theatre-style crawling lights.
void theaterChase(uint32_t c, uint8_t wait) {
	for (int j=0; j<10; j++) {	//do 10 cycles of chasing
		for (int q=0; q < 3; q++) {
			for (int i=0; i < strip.numPixels(); i=i+3) {
				strip.setPixelColor(i+q, c);		//turn every third pixel on
			}
			strip.show();

			delay(wait);

			for (int i=0; i < strip.numPixels(); i=i+3) {
				strip.setPixelColor(i+q, 0);				//turn every third pixel off
			}
		}
	}
}

//Theatre-style crawling lights with rainbow effect
void theaterChaseRainbow(uint8_t wait) {
	for (int j=0; j < 256; j++) {		 // cycle all 256 colors in the wheel
		for (int q=0; q < 3; q++) {
			for (int i=0; i < strip.numPixels(); i=i+3) {
				strip.setPixelColor(i+q, Wheel( (i+j) % 255));		//turn every third pixel on
			}
			strip.show();

			delay(wait);

			for (int i=0; i < strip.numPixels(); i=i+3) {
				strip.setPixelColor(i+q, 0);				//turn every third pixel off
			}
		}
	}
}

// Input a value 0 to 255 to get a color value.
// The colours are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) {
	WheelPos = 255 - WheelPos;
	if(WheelPos < 85) {
		return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
	}
	if(WheelPos < 170) {
		WheelPos -= 85;
		return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
	}
	WheelPos -= 170;
	return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}
#endif

ksin
Timide
Messages : 85
Inscription : 22 mai 2017, 13:09
Localisation : Lyon

Re: [Plugin Tiers][Sujet Principal] Jeedouino

Message par ksin » 29 mars 2018, 16:21

Bonjour,

Je complète mon précédent message. J'ai réussi finalement à faire fonctionner ce plugin sur une VM d'un ESXi (Debian 9), en particulier la lecture d'une sonde DS18B20.
Par contre, je bloque totalement pour celle d'un DHT22, alors tout fonctionne avec le sketch "habituel" sur l'Arduino.
Quelqu'un aurait-il une piste de solution ?

Merci d'avance
Jeedom 3.3.30 sur Debian 9.4
NUC7I5BNK avec ESXi 6.7

Avatar de l’utilisateur
Kermitlagrenouille
Actif
Messages : 1770
Inscription : 07 juin 2017, 20:46
Localisation : Alsace

Re: [Plugin Tiers][Sujet Principal] Jeedouino

Message par Kermitlagrenouille » 30 mars 2018, 09:28

Bon, j’ai juste réussi l’inclusion dans la cuisine...
:lol:
Bon week-end à tous :mrgreen:

B8D2492A-B709-4E68-80BE-B96364F796E1.jpeg
B8D2492A-B709-4E68-80BE-B96364F796E1.jpeg (311 Kio) Consulté 819 fois
Domotique Atlantique Concept depuis 1998 et toujours à la recherche d’autre utilisateur de ce système
Fan d'Apple & Homebridge

hatoupix
Timide
Messages : 33
Inscription : 30 mars 2018, 07:16

Re: [Plugin Tiers][Sujet Principal] Jeedouino

Message par hatoupix » 30 mars 2018, 23:26

Bonjour à tous,

J'ai installer ce plug-in, mais je n'arrive pas à "comprendre" comment visualiser le retour de mes ds18b20 (près d'une dizaine) qui sont reliés directement sur le raspberry ... j'ai bien dans la config, cliqué sur "RPi.GPIO Installation" et sur "Correction droits DS18B20" ...

Merci pour votre aide !

jxduquesne
Timide
Messages : 1
Inscription : 01 avr. 2018, 22:20

Re: [Plugin Tiers][Sujet Principal] Jeedouino

Message par jxduquesne » 01 avr. 2018, 22:43

Bonjour à tous,

J'ai bien compris le principe du plugin. C'est tout ce dont j'ai besoin, merci à son créateur.

Après une multitude de tests, beaucoup de lecture, pas mal de prise de tête... J'ai quelques questions :

1) Utilisation avec un Arduino Ethernet : OK ! Sauf que j'envoie des "salves" de changements d'état ==> j'avais des ratés avant de mettre une pause de 4 secondes entre chaque changement.

2) J'ai beaucoup plus de difficultés en voulant piloter un R.Pi distant. Je souhaite changer l'état des GPIO du R.Pi distant depuis mon Jeedom principal (qui vit sur un R.Pi aussi). Je n'ai pas trouvé de tuto qui déroule ce cas là de A à Z, alors je vous sollicite :

Ce que je fais :
- même version de Jeedom et de Jeedouino de part et d'autre
- sur le Jeedom distant, dans Jeedouino, je crée un équipement "Local" avec l'IP du Jeedom distant et un port loin des ports par défaut (8012)
- sur le Jeedom distant, sur l'équipement "Local", je paramètre une des pin en "Sortie mise à Low (HIGH générée aussi). Le démon démarre, je peux piloter depuis le Jeedom distant, en local, donc.

- sur le Jeedom principal, dans Jeedouino, je crée un équipement "rpi_distant", avec l'IP du R.Pi distant et 8012 comme port.
- sur le Jeedom principal, sur l"équipement "rpi_distant", je paramètre la pin de manière identique à ce que j'ai écrit plus haut.

Si je laisse le démon lancé sur le R.Pi distant, lancer celui qui correspond à "rpi_distant" sur le Jeedom principal fait planter (je pense) le démon sur le R.Pi distant.
Si j'arrête le démon sur le R.Pi distant, lancer sur le principal me fait tomber sur des logs 111 connection refused.

Ce qui fonctionne à moitié :
- démarrer le démon "local" sur le R.Pi distant
- ne pas le démarrer sur le Jeedom principal

==> dans ce cas, je parviens à piloter les GPIO, mais je n'ai pas le retour d'état. Et dans santé, je n'ai pas de "date de dernière connexion".

J'ai oublié de dire : tout est à jour à l'heure où je vous parle : Jeedom 3.1.7 et Jeedouino du 2018-02-09

Voilà, j'espère avoir assez détaillé. Je fais certainement quelque chose de travers, mais je ne sais pas quoi.

J'imagine qu'il n'est pas normal que le démon le démarre pas sur le Jeedom principal
Pareil pour le retour d'état KO

J'avais réussi à contourner en utilisant Jeelink, mais bon, c'est pas l'idée, normalement !

Merci d'avance pour votre temps et votre aide.

Avatar de l’utilisateur
revlys
Timide
Messages : 327
Inscription : 05 mai 2015, 17:10
Localisation : Gard

Re: [Plugin Tiers][Sujet Principal] Jeedouino

Message par revlys » 02 avr. 2018, 11:09

Bonjour à tous,

@jxduquesne, merci pour tous les détails.
- Alors oui, il peut y avoir des ratés lors d'envois trop rapprochés, souvent dus a des conflits entre l'envoi de la commande et le retour d'info sur l’état. La pause est une bonne solution.
- Pour la gestion à distance entre 2 jeedoms rpi, il faut désormais utiliser jeelink depuis la v3 (ils ont supprimé la classe qui permettait cela).
Le plugin maintient cette possibilité pour ceux qui sont encore en jeedom v2 pour l'instant mais ce n'est pas pérenne.

@hatoupix, As-tu créé un équipement ? As-tu configurés les pins de cet équipement ? As-tu lu la doc ?

@Kermitlagrenouille :lol: j'en veux une ;)

@ksin, peut-être un problème de saturation mémoire de l'arduino. C'est quel modèle ? Essaye avec un mega si possible.

@arthux,
arduino ethernet (directement intégré sur la carte)
Je ne connais pas, as-tu un lien ? Il y a peut-être un besoin spécifique à cette carte.
Si il n'y a rien après le "To eqlogic:" (il devrait y avoir l'id de l’équipement Jeedom), c'est soit un problème de manque de mémoire, soit un oubli de sauver l’équipement après avoir démarré l'arduino.

@glaurence, il faut laisser les pins SDA et SCL sur inutilisées dans la configuration des pins et en utiliser une autre pour avoir la proposition d'affichage sur lcd.
Attention à bien vérifier que le lcd est compatible avec la lib LiquidCrystal, sinon il faudra adapter le sketch en conséquence.

@arnaud.r, chez moi, 0.5s, ça fonctionne, mais je suis sur un mega qui est plus rapide qu'un uno. A savoir que plus le sketch est chargé en fonctions, sondes par ex, plus le traitement des tempo en sera impacté.

@JeedAlf, Non, ce n'est pas normal. Comme tu l'as vu dans le sketch, tu dois recevoir les valeurs avec 2 chiffres après la virgule.
Il est possible que cela soit lié a ton problème précédent, à savoir une limite en mémoire disponible.
Essaye avec un mega si tu en as un.
Si tu as un peu de temps, essaye avec une vielle version de l'ide pour flasher (https://www.arduino.cc/download_handler ... indows.zip), je ne garantie rien.

Bonne journée.

JeedAlf
Timide
Messages : 25
Inscription : 16 févr. 2018, 08:51

Re: [Plugin Tiers][Sujet Principal] Jeedouino

Message par JeedAlf » 02 avr. 2018, 11:41

Bonjour revlys,

Merci pour la réponse, maintenant que je sais que ce n'est pas normal je vais creuser.
Normalement du coté de l'Arduino, maintenant tout va bien, avec le DHCP désactivé (adresse IP en dur) je ne suis plus du tout en limite de mémoire.
Avec la console en mode série, je vois bien les valeurs, donc c'est soit au tout dernier moment lors de l'envoi (mais je ne vois pas pourquoi ça affecterait des chiffres après la virgule) ou alors en réception et traitement coté Jeedom.

A+

JeedAlf

hatoupix
Timide
Messages : 33
Inscription : 30 mars 2018, 07:16

Re: [Plugin Tiers][Sujet Principal] Jeedouino

Message par hatoupix » 02 avr. 2018, 18:45

revlys a écrit :
02 avr. 2018, 11:09
...
@hatoupix, As-tu créé un équipement ? As-tu configurés les pins de cet équipement ? As-tu lu la doc ?
...
Je me concentre (pour le moment uniquement) sur la téléinfo !

Oui j'ai bien créé un équipement, et configuré les pins ! et off course pour la doc ... mais j'ai du louper un truc :oops:

du coup j'ai mis la connextion usb entre l'arduino et le raspberry
coté arduino, j'ai bien téléchargé le sketch, (j'ai également AVANT testé avec un autre sketch que ma téléinfo retournait bien quelque chose :mrgreen:

mais je n'ai aucun retour ... et coté log c'est le grand vide !

ai-je bien mis le bon port usb ?

Image

Merci

hatoupix
Timide
Messages : 33
Inscription : 30 mars 2018, 07:16

Re: [Plugin Tiers][Sujet Principal] Jeedouino

Message par hatoupix » 04 avr. 2018, 11:39

je n'arrive toujours pas à communiquer avec mon arduino ...
a priori j'ai le bon port, mais j'ai dans les logs l'erreur : Réponse : 111 - Connection refused
j'ai aussi installé le plugin "teleinfo" ...

voici mes logs juste après redémarrage du deamon :

Code : Tout sélectionner

[2018-04-04 11:36:03][DEBUG] : Appel démon ArduinoUsb sur port :1a86 USB2.0-Serial ( /dev/ttyUSB0 ) - Baudrate : 115200
[2018-04-04 11:36:03][DEBUG] : Cmd Appel démon : sudo nice -n 19 /usr/bin/python /var/www/html/plugins/jeedouino/ressources/jeedouinoUSB_8.py 8080 /dev/ttyUSB0 8 192.168.0.45 80 . 115200 5
[2018-04-04 11:36:06][DEBUG] : EqLogicForStart :["8"] ( Ajouté: 8 )
[2018-04-04 11:36:06][DEBUG] : Le démon USB est en cours de démarrage.  -
[2018-04-04 11:36:12][DEBUG] : Essai 1 - Envoi de la dernière configuration connue des pins eqID ( 8 ) PinMode : USB=C.......bj...........C
[2018-04-04 11:36:12][DEBUG] : (Normal si Re/Start/Stop demandé) Erreur de connection au démon USB ( Teleinfo2 - EqID 8 ) sur 192.168.0.45:8080 - Réponse : 111 - Connection refused
[2018-04-04 11:36:12][DEBUG] : Erreur d'envoi de la configuration des pins sur l'équipement 8 ( Teleinfo2 ) - Réponse :111 - Connection refused
[2018-04-04 11:36:14][DEBUG] : Essai 2 - Envoi de la dernière configuration connue des pins eqID ( 8 ) PinMode : USB=C.......bj...........C
Starting Net
Starting Usb
Jeedouino daemon waiting...
[2018-04-04 11:36:14][Demon USB] Requete : ['USB', 'C.......bj...........C']
[2018-04-04 11:36:14][Demon USB] Arduino_message : C.......bj...........C
[2018-04-04 11:36:17][Demon USB] Reponse brute recue :
[2018-04-04 11:36:17][Demon USB] >>Reponse a la requete : EXITOK
[2018-04-04 11:36:17][Demon USB] Reponse filtree :
[2018-04-04 11:36:19][DEBUG] : Réponse du Démon USB :EXITOK
[2018-04-04 11:36:19][DEBUG] : Erreur d'envoi de la configuration des pins sur l'équipement 8 ( Teleinfo2 ) - Réponse :EXITOK
[2018-04-04 11:36:39][DEBUG] : PING ( EqID:8 ) Démon USB en marche ??? Envoi d'un PING...
[2018-04-04 11:36:39][DEBUG] : (Normal si Re/Start/Stop demandé) Erreur de connection au démon USB ( Teleinfo2 - EqID 8 ) sur 192.168.0.45:8080 - Réponse : 111 - Connection refused

frenchclem
Timide
Messages : 136
Inscription : 19 août 2015, 17:18
Localisation : sarthe

Re: [Plugin Tiers][Sujet Principal] Jeedouino

Message par frenchclem » 04 avr. 2018, 13:18

Salut @revlys,

Comme @glou, je tente l'install de JeedouinoExt sur un RPi qui héberge deja un os Max2Play qui fonctionne sous Apache.
As tu eu l'occaz de te pencher sur le problème depuis les posts de @glou ?

J'ai jeté un petit coup d'oeil dans JeedouinoExt.sh
Si j'ai bien compris tu commences par désactivé Apache2 ... et puis tu fais une install Ngnix.
donc si je comprends bien, une fois l'installation des dépendances Jeedouino Apache ne fonctionnera plus, du coup Max2play non plus ?!

Je veux juste être sur que si je commences à trifouiller (simplement hein :) !! sans tout ré-écrire car j'en suis bien incapable :lol: :lol: ) Jeedouino et Max2play vont pouvoir fonctionner en parallèle

Pouvoir faire tourner les deux en même temps ca serait bigrement intéressant pour contrôler la squeeze box et plus via des petits boutons connecté sur le RPi

Merci pour le boulot.
Nuc Intel - ESXI - VM Jeedom - IPX800 - Xiaomi - Zwave - RFLink

ksin
Timide
Messages : 85
Inscription : 22 mai 2017, 13:09
Localisation : Lyon

Re: [Plugin Tiers][Sujet Principal] Jeedouino

Message par ksin » 07 avr. 2018, 21:31

@revlys,

J'ai redémarré la VM et cela fonctionne parfaitement
Merci pour ce plugin très efficient.
Une dernière question, j'utilise jeelink pour monitorer les démons des processus principaux. Est-il possible par ce biais de monitorer le(s) demon(s) de Jeeduino ?

Merci de tes retours
Jeedom 3.3.30 sur Debian 9.4
NUC7I5BNK avec ESXi 6.7

glaurence
Timide
Messages : 28
Inscription : 01 sept. 2017, 16:18

Re: [Plugin Tiers][Sujet Principal] Jeedouino

Message par glaurence » 09 avr. 2018, 19:34

UP...
glaurence a écrit :
27 mars 2018, 22:44
Bonjour,

malgré mes efforts et mes recherches, je ne parviens pas à interfacer Jeedouino avec un écran LCD I2C via arduino UNO.
J'ai lu dans cette section, plusieurs questions de ce type qui sont restées sans réponse malheureusement.

J'ai bien paramétré "#define UseLCD16x2 2" dans le sketch...
Pourriez-vous cependant me confirmer que le plugin supporte l'I2C sur arduino svp ?

Dans la page affectation des pins, pour les pins A4 (SDA) et A5 (SCL), le menu déroulant ne propose pas d'action affichage LCD.

Merci pour votre petit coup de pouce !

tetenfer
Timide
Messages : 21
Inscription : 09 nov. 2014, 21:17

Re: [Plugin Tiers][Sujet Principal] Jeedouino

Message par tetenfer » 10 avr. 2018, 12:31

Bonjour,

deux question rapide:

1: j'utilise des nodemcu donc en wifi , et j'ai les SSID des "nodemcu" qui apparaisse dans les recherche wifi(tablette, telephone...) (ESP_451, ESP_452..etc) y a t'il un moyen de les cacher ou de les désactiver dans le sketch ?

2: donc je voudrait utilise un autre nodemcu pour une carte 8 relais, mais voila j'ai des pin qui réagisse bizarrement exemple la D3 qui fonctionne biens en mode "sortie mise a LOW" mais refuse de fonctionner en mode "sortie mise a LOW avec temporisation", et certaine PIN Bloque la reaction du nodemcu si je les bascule en "...avec temporisation" .
tester sur plusieurs nodemcu different.
---- la question: on sont le D11 et D12 sinon j'aurais pas suffisamment de pin pour géré 8 relais.

Cordialament.

Avatar de l’utilisateur
bravan
Timide
Messages : 202
Inscription : 30 janv. 2015, 21:25
Localisation : Dijon

Re: [Plugin Tiers][Sujet Principal] Jeedouino

Message par bravan » 14 avr. 2018, 09:00

Jeedom 3.2.9 sur Pi3
RFXcom - GCE Téléinformation USB - Jeedouino - Xiaomi - BLEA

tetenfer
Timide
Messages : 21
Inscription : 09 nov. 2014, 21:17

Re: [Plugin Tiers][Sujet Principal] Jeedouino

Message par tetenfer » 16 avr. 2018, 10:50

bravan a écrit :
14 avr. 2018, 09:00
Salut,

1 : viewtopic.php?f=133&t=14056&p=501018#p500977
salut,

merci pour l'info mais après vérification cette option étais déjà dans le sketch, mais ne fonctionne pas chez moi?

Code : Tout sélectionner

// SETUP

void setup()
{
	EEPROM.begin(512);
	jeedom.reserve(512);
	Message.reserve(16);
	inString.reserve(4);
	#if (DEBUGtoSERIAL == 1)
		Serial.begin(115200); // Init du Port serie/USB
		Serial.println();
		Serial.println();
		Serial.setTimeout(5); // Timeout 5ms
		Serial.println(F("JEEDOUINO IS HERE."));
		Serial.print(F("Connecting to "));
		Serial.println(ssid);
	#endif
	if (EEPROM.read(13) != 'J') Init_EEPROM();

	#if (NODHCP == 1)
		WiFi.config(IP_ARDUINO, GATEWAY, SUBNET);
	#endif

	WiFi.enableAP(0);
	WiFi.begin(ssid, password);

	while (WiFi.status() != WL_CONNECTED)
	{
		delay(500);
		#if (DEBUGtoSERIAL == 1)
ou j'ai rater un truc …?

Répondre

Revenir vers « [Catégorie] Protocoles domotiques »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 8 invités