Homey Community Forum

Esp8266 met 4 relais

Ik ben nieuw met het coderen van een esp8266.
Ik ben wat aan het proberen met 4 relais.
Nou vroeg ik me af of het eigenlijk wel mogelijk is wat is wil :sweat_smile:
Ik zou graag mijn badkamer fan aan willen sturen in snelheid met 3 relais dus 3 standen, maar is het mogelijk om in homey een 3 standen schakelaar te maken of een dimmer die dan de 3 relais te schakelen bij
0-33% relais 1
34-66% relais 2
67-100% relais 3
En dan met de voorwaarden dat als 1 aangestuurd van uit homey dat de andere 2 uit gaan.
Kan ik die programmeren in de esp8266 of moet ik met 4 losse relais/ schakelaars in homey dit ineen flow maken?

Ik heb het homeyduino relay voorbeeld code gezien maar kan is daar zo 3 relais bij zetten?

Heeft misschien iemand daar voorbeeld codes van?

En is het eventueel ook mogelijk om daar dan nog een temp sensor aan te hangen en die apart in homey als apparaat toe te voegen.

Ik zou het in de ESP8266 code doen: de dim waarde uitlezen en al naar gelang de waarde (die van 0 tot 1 loopt) de verschillende relais schakelen. Zo “ziet” Homey slechts één apparaat, dus dan hoef je in flows ook niet ingewikkeld te doen.

Temperatuursensor kun je toevoegen maar niet als apart apparaat. Het wordt dan in feite één apparaat dat kan dimmen én een temperatuurswaarde heeft.

Oké dat zou perfect wezen.
3 relais in een dimmer, 1 relais als schakelaar en een temperatuur meting.
Dit kan dan via de homey app homeyduino?

Ik heb nog nooit zoiets zelf gemaakt, dus 100% zeker weten doe ik het niet, maar ik zie geen reden waarom het niet zou kunnen werken met Homeyduino.

Misschien kan je hier iets uit halen

Zoek op dit forum eens op ESP8266.

Die had ik ook al gevonden maar als ik de codes lees zie ik er nog weinig logica in hoe ik daar zo iets aan kan toevoegen :sweat_smile:
Staat er ook ergens beschreven welke code deel wat doen?

Had deze ook al bekeken Homeyduino relay maar zie niet hoe ik van beide 1 maak :smile:

Of is hier misschien ook iemand die mij op weg kan helpen met het schrijven van de code of kan vertellen hoe ik dit kan doen.

Zelf maken is natuurlijk het leukst, kijk eens op Randomnerdtutorials, daar staan veel voorbeelden met uitleg, probeer daarmee wat ervaring op te doen en door te krijgen hoe zo’n programma in elkaar zit. Dan kun je daarna het HomeyDuino programma naar je eigen wensen aanpassen. Je mag natuurlijk altijd hulp vragen voor problemen die je daarbij tegen komt, maar deze weg is leuker dan dat iemand een compleet werkend iets voor je schrijft.

Zelf maken is ook zeker leuker.
Ik zal daar eens gaan kijken op de site, bedankt voor de tip.

Het schijven van de code is gelukt en werkt goed. Met dank aan @JPe4619

Heb nu een 4 relais module een DS18B20 temperatuur sensor en een DHT11 sensor aan de Nodemcu ESP8266 gemaakt.
3 van de 4 relais werken met een dimmer van 0 tot 1
relais 4 is aan uit
DS18B20 temperatuur sensor heb ik als dB waarde ingevoerd omdat 2 temperatuur sensoren niet wil in homey.?
en de DHT11 sensor maar die heb ik nog niet aangesloten.

De Code

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <Homey.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <SimpleDHT.h>

#define PIN_RELAY_1 D0
#define PIN_RELAY_2 D1
#define PIN_RELAY_3 D2
#define PIN_RELAY_4 D3
#define PIN_DHT D4
#define ONE_WIRE_BUS D5

OneWire oneWire(ONE_WIRE_BUS);
SimpleDHT11 dht11;
DallasTemperature sensors(&oneWire);

float Celcius=0;
float Fahrenheit=0;
float ledBrightness = 0;

void wifi() {
if (WiFi.status() != WL_CONNECTED) {
WiFi.begin(“WIFI”, “Wachtwoord”);
uint8_t timeout = 30;
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
if (timeout<1) break;
}
if (WiFi.status() == WL_CONNECTED) {
//Print IP address
Serial.print(“Verbonden met WiFi! (”);
Serial.print(WiFi.localIP());
Serial.println(")");
}
}
}

bool state = false;
unsigned long previousMillis = 0;
const unsigned long interval = 100; //Interval in milliseconds

void setup(void){
Serial.begin(115200); // indien niet werkt, veranderen in 9600

pinMode(PIN_RELAY_1, OUTPUT); //Set relay pin to output
digitalWrite(PIN_RELAY_1, HIGH); //Turn output on
pinMode(PIN_RELAY_2, OUTPUT); //Set relay pin to output
digitalWrite(PIN_RELAY_2, HIGH); //Turn output on
pinMode(PIN_RELAY_3, OUTPUT); //Set relay pin to output
digitalWrite(PIN_RELAY_3, HIGH); //Turn output on
pinMode(PIN_RELAY_4, OUTPUT); //Set relay pin to output
digitalWrite(PIN_RELAY_4, HIGH); //Turn output on

Homey.begin(“Bk_ESP8266”);
Homey.setClass(“sensor”);
Homey.addCapability(“measure_noise”); // DS18B20 temp measure_luminance
Homey.addCapability(“measure_humidity”); // DHT11
Homey.addCapability(“measure_temperature”);// DHT11

Homey.setClass(“light”);
Homey.addCapability(“dim”, setLightDim); //number 0.00 - 1.00

Homey.setClass(“socket”);
Homey.addCapability(“onoff”, setState);
Homey.addAction(“output”, setState);
Homey.addCondition(“state”, getState);
}

void loop(void) //temp
{
wifi();
Homey.loop();
// unsigned long currentMillis = millis();
sensors.requestTemperatures();
Celcius=sensors.getTempCByIndex(0);
Fahrenheit=sensors.toFahrenheit(Celcius);
Serial.print(Celcius);
Serial.print (" C ");
Homey.setCapabilityValue(“measure_noise”, (int) Celcius);
delay(1000);
}
void setState() {
state = Homey.value.toInt();
applyState();
}

void applyState() { //Relay4
digitalWrite(PIN_RELAY_4, !state);
Serial.println("applyState(): new state is " + String(state));
Homey.setCapabilityValue(“onoff”, state);
Homey.trigger(“state”, state);
}

void updateSensor() { // DHT11
byte temperature = 0;
byte humidity = 0;
int err = SimpleDHTErrSuccess;
if ((err = dht11.read(PIN_DHT, &temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
Serial.print(“Read DHT11 failed, err=”); Serial.println(err);
return;
}

Serial.print((int)temperature); Serial.print(" *C, “);
Serial.print((int)humidity); Serial.println(” H");

Homey.setCapabilityValue(“measure_temperature”, (int) temperature);
Homey.setCapabilityValue(“measure_humidity”, (int) humidity);
}

void getState() {
Serial.println("getState(): state is " + String(state));
return Homey.returnResult(state);
}

void setLightDim( void ) {
float ledBrightness = Homey.value.toFloat(); //number 0.00 - 1.00
Serial.print (String (ledBrightness));

if (ledBrightness > 0.66 ) { activate_R3();}
else if (ledBrightness > 0.33 ) {activate_R2();}
else if (ledBrightness > 0.02 ) {activate_R1();}
else {activate_R0();}
}

void activate_R0() {
digitalWrite(PIN_RELAY_1, HIGH);
digitalWrite(PIN_RELAY_2, HIGH);
digitalWrite(PIN_RELAY_3, HIGH);
}

void activate_R1() {
digitalWrite(PIN_RELAY_1, LOW);
digitalWrite(PIN_RELAY_2, HIGH);
digitalWrite(PIN_RELAY_3, HIGH);
}

void activate_R2() {
digitalWrite(PIN_RELAY_1, HIGH);
digitalWrite(PIN_RELAY_2, LOW);
digitalWrite(PIN_RELAY_3, HIGH);
}

void activate_R3() {
digitalWrite(PIN_RELAY_1, HIGH);
digitalWrite(PIN_RELAY_2, HIGH);
digitalWrite(PIN_RELAY_3, LOW);
}

Werkt perfect alleen jammer van de temperatuur in dB maar dat gaat om de waarde.

https://www.youtube.com/watch?v=mTQ33byq6u8

1 Like

Dat kan Homey wel, maar dan moet je “sub-capabilities” gebruiken. Dus bijvoorbeeld measure_temperature.sensor1 en measure_temperature.sensor2. Ik weet alleen niet of Homeyduino dat wel ondersteunt.

Dan zou dat tussen de " tekens" moeten?

Homey.addCapability("measure_temperature.sensor1");
Homey.addCapability("measure_temperature.sensor2");

Top gaan we proberen.

Helaas wordt niet herkend, geeft nu geen enkele weer in de app.

Dat vreesde ik al, Homeyduino ondersteunt sub-capabilities dus niet :frowning: