Ajuda interruptor touch home assistant

Boas, eu estou a usar um bõtão touch e nao consegui por a ligar e desligar a lampada atraves desse botão.
Não consegui por a comunicar o botão touch com o homeassistant.

quero saber como ponho o botão touch a desligar e a ligar lampada, e como configuro o botão
para comunicar com homeassistant

o botão é do género que esta neste video https://www.youtube.com/watch?v=OyY4ymv6db0

já estas a usar MQTT?

Tambem estou com problema parecido! Já configurei o mqtt via Adafruit.io, funciona perfeitamente com IFTTT e Google Assistente, porém não consigo vincular o touch heltec.

1 Like

que código estás a usar?

Olá Bruno! Como vai?
Então, desculpe a demora para postar meu código, muita correria aqui. Estou automatizando minha residencia com equipamentos de baixo custo como hobbie. Porém não estou usando o BH OnOfre e sim um módulo rele juntamente com o ESP8266. Segue o link do módulo. ( https://pt.aliexpress.com/item/32840806183.html?spm=a2g0o.productlist.0.0.5c04569e2KjakC&algo_pvid=af8792ab-6fcb-458c-b2d2-2af2b1c3a9cd&algo_expid=af8792ab-6fcb-458c-b2d2-2af2b1c3a9cd-19&btsid=390948ef-880a-4070-85ac-6526d9177c44&ws_ab_test=searchweb0_0,searchweb201602_1,searchweb201603_55 ).
Consegui realizar toda a integração do módulo, adafruit io, ifttt e google assistente, tudo funciona perfeitamente. Então resolvi adicionar o módulo Touch Heltec, o mesmo que você usa nos seus vídeos.
O pino 0 do ESP8266 controla o acionamento do relé, então fiz uma solda no pino 2 para ligar o sinal do sensor touch. Não sei mas o que fazer para solucionar o problema.

#include <ESP8266WiFi.h>
#include “Adafruit_MQTT.h”
#include “Adafruit_MQTT_Client.h”

#define Relay1 0 //Define relé 1 no GPIO 0

#define sensorTouch 2
//int estadoAtual = 0;

#define WLAN_SSID “XXXXXX” // SSID Rede
#define WLAN_PASS “XXXXXX” // Password

/************************* Adafruit.io Setup *********************************/

#define AIO_SERVER “io.adafruit.com
#define AIO_SERVERPORT 1883 // usar 8883 para SSL
#define AIO_USERNAME “xxxxxx” // Substituir com usuário IO Adafruit
#define AIO_KEY “xxxxxxxxxxxxxxxxxxxxxxxx” // Subustituir com a Auth Key do projeto

/************ Global State (you don’t need to change this!) ******************/

// Create an ESP8266 WiFiClient class to connect to the MQTT server.
WiFiClient client;
// or… use WiFiFlientSecure for SSL
//WiFiClientSecure client;

// Setup the MQTT client class by passing in the WiFi client and MQTT server and login details.
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);

/****************************** Feeds ***************************************/

// Setup a feed called ‘onoff’ for subscribing to changes.
Adafruit_MQTT_Subscribe Lamp1 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME"/feeds/Lamp1"); // FeedName in my case i called it Lamp
Adafruit_MQTT_Subscribe AllLamp = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME “/feeds/AllLamp”);

void MQTT_connect();

void setup() {

pinMode(Relay1, OUTPUT);
digitalWrite(Relay1, HIGH);

pinMode(sensorTouch, INPUT); //DECLARA O PINO COMO ENTRADA

WiFi.begin(WLAN_SSID, WLAN_PASS);
while (WiFi.status() != WL_CONNECTED) {
delay(500);

// Setup MQTT subscription for onoff feed.
mqtt.subscribe(&Lamp1);
mqtt.subscribe(&AllLamp);
}

void handleInterrupt() {
Serial.println(“toogle”);
if(digitalRead(LIGHT)){
turnOff();
}else{
turnOn();
}
}

attachInterrupt(digitalPinToInterrupt(sensorTouch), handleInterrupt, CHANGE);

}

void loop() {

MQTT_connect();

Adafruit_MQTT_Subscribe *subscription;
while ((subscription = mqtt.readSubscription(20000))) {

if (subscription == &Lamp1) {
  int Lamp1_State = atoi((char *)Lamp1.lastread);
  digitalWrite(Relay1, Lamp1_State);

}

if (subscription == &AllLamp) {
  int AllLamp_State = atoi((char *)AllLamp.lastread);
  digitalWrite(Relay1, AllLamp_State);
  }

}

/* estadoAtual = digitalRead(sensorTouch); //VARIÁVEL RECEBE LEITURA DO SENSOR
delay(100);
if (estadoAtual == HIGH){ //SE ESTADO DO MÓDULO RELÉ FOR IGUAL A HIGH, FAZ
digitalWrite(Relay1, 1); //DESLIGA O MÓDULO RELÉ
} else { //SENÃO, FAZ
digitalWrite(Relay1, 0); //LIGA O MÓDULO RELÉ
}*/
}

void MQTT_connect() {
int8_t ret;

// Stop if already connected.
if (mqtt.connected()) {
return;
}

Serial.print("Connecting to MQTT… ");

uint8_t retries = 3;

while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connected
mqtt.disconnect();
delay(5000); // wait 5 seconds
retries–;
if (retries == 0) {
// basically die and wait for WDT to reset me
while (1);
}
}
}