# AXA remote 2.0 bedienen / klimaat regeling deel 2

**URL:** <https://community.homey.app/t/axa-remote-2-0-bedienen-klimaat-regeling-deel-2/47167>\
**Category:** Flows\
**Tags:** flow\
**Created:** [May 7, 2021, 9:56am UTC](https://community.homey.app/t/axa-remote-2-0-bedienen-klimaat-regeling-deel-2/47167 "2021-05-07T09:56:08Z")\
**Posts on this page:** 1\
**Showing post:** 58

<div class="post-metadata">

**Author:** ![Driesk](https://sea1.discourse-cdn.com/flex025/user_avatar/community.homey.app/driesk/32/10666_2.png) [@Driesk](https://community.homey.app/u/Driesk)\
**Post date:** [April 5, 2023, 8:19pm UTC](https://community.homey.app/t/axa-remote-2-0-bedienen-klimaat-regeling-deel-2/47167/58 "2023-04-05T20:19:26Z")

</div>

Inmiddels heb ik de code een stuk robuuster gemaakt.  
-Hostname wordt direct aangepast aan de topicname om deze beter te kunnen herkennen op je netwerk  
-Code toegevoegd die elke 5 minuten de mqtt verbinding controleert en evt hersteld.  
-Er waren nog wat schoonheidsfoutjes bij het doorgeven van de status die zijn nu opgelost.  
-Er is nu de mogelijkheid om een MQTT inlognaam en wachtwoord op te geven.  
-Aansturing linbus converter gaat nu via softwareserial waardoor je via usb makkelijk kunt meelezen wat er gebeurd en evt debuggen.  
**LET OP linbus converter nu aansluiten op D1 en D2 (ipv rx en tx)**

```auto
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <SoftwareSerial.h>
#include <Ticker.h>

// Definieer de gegevens voor toegang tot het Wi-Fi netwerk
const char* ssid = "your_SSID";
const char* password = "your_Password";

// Definieer de MQTT-server waar de ESP8266 mee verbinding maakt
const char* mqtt_server = "192.168.1.13"; //IP adres server/broker/homey
const int mqtt_port = 1883; //Port server/broker
const char* TOPIC_NAME = "axaremote_n"; //Topic name voor elke axa remote 2.0 een andere topic name opgeven.
const char* mqttUser = "your_mqttusername"; 
const char* mqttPass = "your_mqttpassword";

// Initialiseer WiFiClient en PubSubClient

WiFiClient espClient;
PubSubClient client(espClient);
SoftwareSerial softSerial(5, 4); // RX = D1, TX = D2 Verbind deze pinnen met de linbus converter

Ticker ticker; //declareert een object van de klasse Ticker, genaamd ticker
static char buffer[80]; // Definieer een buffer van 80 bytes (dit is proefondervindelijk bepaald kan vast mooier)

void setup() 
{

  // Initialiseer seriële communicatie via usb poort en voor linbus controller
  Serial.begin(115200); //Initialiseer serial port via usb
  softSerial.begin(19200, SWSERIAL_8N2); // Initialiseer software serial port voor linbus

  // Maak verbinding met Wi-Fi
  WiFi.hostname(TOPIC_NAME);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) 
  {
    delay(500);
    Serial.println("Connecting to WiFi..");
  }
  ticker.attach(300, checkMQTTConnection); // Controleer elke n seconde of er nog een verbinding is met de MQTT-server

  MQTTsetup();
}

//functie op de verbinding op te zetten met de MQTT broker
void MQTTsetup()
{
  client.setServer(mqtt_server, mqtt_port);
  client.setCallback(MQTTcallback);
  while (!client.connected()) 
  {
    Serial.println("Connecting to MQTT...");
    //if (client.connect(TOPIC_NAME)) // gebruik deze regel als er geen mqtt inlog en password gebruikt worden
    if (client.connect(TOPIC_NAME, mqttUser, mqttPass)) 
    {
      Serial.println("connected");
    }
    else
    {
      Serial.print("failed with state ");
      Serial.println(client.state());
      delay(2000);
    }
  }

  client.subscribe((String(TOPIC_NAME) + "/commands").c_str()); // Abonneer op het eerder gedefineerde topic 
}

// functie controleert elke 5 min de verbinding met de wi-fi en de mqtt broker
void checkMQTTConnection() {
  if (!client.connected()) { 
    Serial.println("verbinding MQTT server verbroken.. opnieuw connecteren");  
    WiFi.disconnect(); // verbreek huidige Wi-Fi verbinding
    delay(1000);
    WiFi.begin(ssid, password); // maak opnieuw verbinding met Wi-Fi
    while (WiFi.status() != WL_CONNECTED) {
      delay(500);
      Serial.println("Connecting to WiFi..");
    }
    MQTTsetup();
  }
  else { 
    Serial.println("verbinding MQTT server is in orde");
  }
}

// Deze functie wordt aangeroepen wanneer er een MQTT-bericht binnenkomt op het gespecificeerde topic
void MQTTcallback(char* topic, byte* payload, unsigned int length)
{
  Serial.print("Bericht ontvangen op topic: ");
  Serial.print(topic);
  Serial.print("Bericht: ");

  String message;
  for (int i = 0; i < length; i++)
  {
  message = message + (char)payload[i];
  }
  Serial.println(message);
  if (message == "open")
  {
  open_axa();
  }
  else if (message == "stop")
  {
  stop_axa();
  }
  else if (message == "close")
  {
  close_axa();
  }
  else if (message == "status")
  {
  status_axa();
  }
}

// Deze functie verwerkt binnenkomende MQTT-berichten
void loop(){
client.loop();
}

void open_axa() {
  softSerial.println("\r");
  delay(10);
  softSerial.print("O");
  delay(10);
  softSerial.print("P");
  delay(10);
  softSerial.print("E");
  delay(10);
  softSerial.print("N");
  delay(10);
  softSerial.println("\r");
}

void close_axa() {
  softSerial.println("\r");
  delay(10);
  softSerial.print("C");
  delay(10);
  softSerial.print("L");
  delay(10);
  softSerial.print("O");
  delay(10);
  softSerial.print("S");
  delay(10);
  softSerial.print("E");
  delay(10);
  softSerial.println("\r");
}

void stop_axa() {
  softSerial.println("\r");
  delay(10);
  softSerial.print("S");
  delay(10);
  softSerial.print("T");
  delay(10);
  softSerial.print("O");
  delay(10);
  softSerial.print("P");
  delay(10);
  softSerial.println("\r");
}

void status_axa() {
  softSerial.println("\r");
  delay(10); //100
  softSerial.print("S");
  delay(10);
  softSerial.print("T");
  delay(10);
  softSerial.print("A");
  delay(10);
  softSerial.print("T");
  delay(10);
  softSerial.print("U");
  delay(10);
  softSerial.print("S");
  delay(10);
  softSerial.println("\r");
  //static char buffer[80]; // Definieer een buffer van 80 bytes (dit is proefondervindelijk bepaald kan vast mooier)
  delay(20); //om te voorkomen dat eerste keer uitlezen status mislukt
  int count = 0;
  while (softSerial.available() && count < 79) { // Lees inkomende data totdat de buffer vol is
    buffer[count++] = softSerial.read();
  }
  buffer[count] = '\0'; // Voeg een nul-terminator toe om de string af te sluiten
  
  if (count > 0) {
    // Controleer of de string "Unloced" of "Strong Locked" bevat en publiceer de status via client.publish
    String res = String(buffer);
    Serial.println(buffer);//print de volledige buffer 
    if (res.indexOf("Strong Locked") != -1) {
      //client.publish(TOPIC_NAME"/state", "locked");
      client.publish(((String(TOPIC_NAME) + "/state").c_str()),"locked");
    } else if (res.indexOf("UnLocked") != -1) {
      //client.publish(TOPIC_NAME"/state", "opened");
        client.publish(((String(TOPIC_NAME) + "/state").c_str()),"opened");
    }
    else{
      //client.publish(TOPIC_NAME"/state", "state unknown");
        client.publish(((String(TOPIC_NAME) + "/state").c_str()),"unknown");
    }
  }
}

```

---

_[View the full topic](https://community.homey.app/t/axa-remote-2-0-bedienen-klimaat-regeling-deel-2/47167)._
