Hulp bij AJAX security koppelen aan Homey mbv Arduino Homeyduino

Hoi goedemiddag,

Ik heb mijzelf in het diepen gegooid na het lezen van: Bitbucket

Ik heb een AJAX alarmsysteem en ben net als vele andere al lange tijd aan het wachten tot er een mooie Homey integratie komt. Helaas is hiervoor nog geen plug and play integratie voor.

Nu kwam ik een manier tegen om Ajax te koppelen aan homey doormiddel van Arduino.
Ik heb een D1 mini en de Ajax remote control met elkaar verbonden.

Arduino is voor mij compleet nieuw. Ik heb met wat Copy Past werk inmiddels het een en ander uitgevogeld. Helaas nog niet werkend. De Wemos D1 is gekoppeld aan het netwerk maar ik krijg het niet voor elkaar om deze nu te koppelen met de Homeyduino app in Homey.

Hopelijk willen jullie met mij meekijken en bijsturen waar nodig.
Onderstaand de code die in de D1 staat
Hiermee krijg ik de melding: Compilation error: redefinition of ‘void setup()’:

#include <ESP8266WiFi.h>
#include <PubSubClient.h>

#define  PANIC   6
#define  DISARM  7
#define  ARM     1
#define  NIGHT   2

WiFiClient   espClient;
PubSubClient mqtt(espClient);
const char* ssid     = "VERBORGEN";
const char* password = "VERBORGENi";
const char* host     = "YOUR_MQTT_HOST";

void setup() {
  Serial.begin(115200);
  //built in led on because it looks good
  pinMode(LED_BUILTIN, OUTPUT);

  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print('.');
    delay(500);
  }
  mqtt.setServer(host, 1883);
  mqtt.setCallback(callback);
}

void reconnect() {
  while (!mqtt.connected()) {
    Serial.print("Attempting MQTT connection...");
    String clientId = "ESP8266Client-";
    clientId += String(random(0xffff), HEX);
    if (mqtt.connect(clientId.c_str())) {
      mqtt.subscribe("ajax/alarm");
    } else {
      Serial.print("failed, rc=");
      Serial.print(mqtt.state());
      Serial.println(" try again in 5 seconds");
      delay(5000);
    }
  }
  Serial.println("MQTT Connected.");
}

void loop() {
  if (!mqtt.connected()) {
    reconnect();
  }
  mqtt.loop();
}


void callback(
  char* topic,
  byte* payload,
  unsigned int length
) {
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");
  String msg = "";
  for (int i = 0; i < length; i++) {
    Serial.print((char)payload[i]);
    msg = msg+(char)payload[i];
  }

  if (strcmp(topic, "ajax/alarm") == 0 && msg == "panic") {
    pressButton(PANIC);
  } else if (strcmp(topic, "ajax/alarm") == 0 && msg == "disarm") {
    pressButton(DISARM);
  } else if (strcmp(topic, "ajax/alarm") == 0 && msg == "arm") {
    pressButton(ARM);
  } else if (strcmp(topic, "ajax/alarm") == 0 && msg == "night") {
    pressButton(NIGHT);
  }
}

void pressButton(int buttonId) {
  pinMode(buttonId, OUTPUT);
  digitalWrite(buttonId, LOW);
  delay(300);
  pinMode(buttonId, INPUT);
  Serial.println("SENT SIGNAL");
}
#include <SPI.h>
#include <Ethernet2.h>
#include <EthernetUdp2.h>
#include <Homey.h>

byte mac[] = { 0x48, 0x6F, 0x6D, 0x65, 0x79, 0x00 };
const char* name = "example";

void setup() {
  Ethernet.begin(mac);
  Homey.begin(name);
}

void loop() {
  Homey.loop();
}

Ik vermoed dat de error betekent dat je void setup() meer dan 1x hebt gebruikt:

Misschien werkt dit:
Verplaats de twee laatste entry’s onder de 1e void setup() vermelding:

void setup() {
  Serial.begin(115200);
  //built in led on because it looks good
  pinMode(LED_BUILTIN, OUTPUT);

  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print('.');
    delay(500);
  }
  mqtt.setServer(host, 1883);
  mqtt.setCallback(callback);
  Ethernet.begin(mac);
  Homey.begin(name);
}

Maar de wifi entry zou onder void wifi() moeten staan,
zie dit voorbeeld voor een temp.sensor:

/* 
  * Example project: 
  * NodeMCU board connected to a DHT11 temperature and humidity sensor 
  * 
  */ 
  
 #include <ESP8266WiFi.h> 
 #include <WiFiClient.h> 
 #include <Homey.h> 
 #include <SimpleDHT.h> 
  
 #define PIN_DHT D5 
  
 SimpleDHT11 dht11; 
  
 unsigned long previousMillis = 0; 
 const unsigned long interval = 10000; //Interval in milliseconds 
  
 void wifi() { 
   if (WiFi.status() != WL_CONNECTED) { 
     WiFi.begin("<SSID>", "<PASSWORD>"); 
     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("Connected to WiFi! ("); 
       Serial.print(WiFi.localIP()); 
       Serial.println(")"); 
     } 
   } 
 } 
  
 void setup() { 
   Serial.begin(115200); 
   Homey.begin("DHT11 sensor"); 
   Homey.setClass("sensor"); 
   Homey.addCapability("measure_humidity"); 
   Homey.addCapability("measure_temperature"); 
 } 
  
 void loop() { 
   wifi(); 
   Homey.loop(); 
   unsigned long currentMillis = millis(); 
   if(currentMillis - previousMillis > interval) { 
     previousMillis = currentMillis; 
     updateSensor(); 
   } 
 } 
  
 void updateSensor() { 
   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); 
 }

https://github.com/athombv/homey-arduino-library/blob/master/examples/Example%20projects/dht11/dht11-esp8266/dht11-esp8266.ino

.
Dit zijn ook leuke apps:

Niet alleen een dubbele setup() functie, maar ook een dubbele loop(). Je hebt zo te zien gewoon 2 examples aan elkaar geknoopt (#include wordt meestal helemaal bovenin de module gedaan, ook als je de inhoud van de ingesloten files nog niet meteen nodig hebt).

Bedankt voor jullie meedenken @peter_kawa en @Joost_Else ! Dat wordt erg gewaardeerd.
Ik heb jullie adviezen opgevolgd. Herlaas stuit ik op het volgende: Compilation error: statement cannot resolve address of overloaded function. Dit gaat om de regels
Ethernet.begin; (84:F3:EB:17:D1:62);
Homey.begin(Homey Pro van Mark);

Ik heb ook geprobeerd om het met de app ESPHome voor elkaar te krijgen. Ook hier loop ik tegen een foutmelding aan: connect ECONNREFUSED 192.168.68.83:6053
Ik heb hier het Ip adres van de ESP8266 ingevoerd en het poort nummer wat hier standaard staat ingevuld.

Ik zou dit zo graag werkend willen krijgen. Hopelijk kunnen jullie mij helpen? Alvast bedankt!

#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <SPI.h>
#include <Ethernet2.h>
#include <EthernetUdp2.h>
#include <Homey.h>

#define  PANIC   6
#define  DISARM  7
#define  ARM     1
#define  NIGHT   2 

WiFiClient   espClient;
PubSubClient mqtt(espClient);
const char* ssid     = "~~~~***";
const char* password = "***";
const char* host     = "YOUR_MQTT_HOST";

void setup() {
  Serial.begin(115200);
  //built in led on because it looks good
  pinMode(LED_BUILTIN, OUTPUT);

  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print('.');
    delay(500);
  }
  mqtt.setServer(host, 1883);
  mqtt.setCallback(callback);
  Ethernet.begin; (84:F3:EB:17:D1:62);
  Homey.begin(Homey Pro van Mark);
}

void reconnect() {
  while (!mqtt.connected()) {
    Serial.print("Attempting MQTT connection...");
    String clientId = "ESP8266Client-";
    clientId += String(random(0xffff), HEX);
    if (mqtt.connect(clientId.c_str())) {
      mqtt.subscribe("ajax/alarm");
    } else {
      Serial.print("failed, rc=");
      Serial.print(mqtt.state());
      Serial.println(" try again in 5 seconds");
      delay(5000);
    }
  }
  Serial.println("MQTT Connected.");
}

void loop() {
  if (!mqtt.connected()) {
    reconnect();
  }
  mqtt.loop();
}


void callback(
  char* topic,
  byte* payload,
  unsigned int length
) {
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");
  String msg = "";
  for (int i = 0; i < length; i++) {
    Serial.print((char)payload[i]);
    msg = msg+(char)payload[i];
  }

  if (strcmp(topic, "ajax/alarm") == 0 && msg == "panic") {
    pressButton(PANIC);
  } else if (strcmp(topic, "ajax/alarm") == 0 && msg == "disarm") {
    pressButton(DISARM);
  } else if (strcmp(topic, "ajax/alarm") == 0 && msg == "arm") {
    pressButton(ARM);
  } else if (strcmp(topic, "ajax/alarm") == 0 && msg == "night") {
    pressButton(NIGHT);
  }
}

void pressButton(int buttonId) {
  pinMode(buttonId, OUTPUT);
  digitalWrite(buttonId, LOW);
  delay(300);
  pinMode(buttonId, INPUT);
  Serial.println("SENT SIGNAL");
}
byte mac[] = { 0x48, 0x6F, 0x6D, 0x65, 0x79, 0x00 };
const char* name = "example";

Graag gedaan.
Heb je deze voorbeelden al gezien?

Heb zelf nog geen zin/tijd gehad om met Homey en ESP te spelen, ik heb ze aan HomeAssistant hangen, maar da’s weer met wat andere code :upside_down_face:

Home assistant had ik ooit ook draaien maar dat liep door het ontbreken van kennis van programmering helaas zo nu en dan vast. Dus vandaar de vereenvoudiging met Homey.

Ik zag de voorbeelden van projecten. Ik doe blijkbaar iets verkeerd met het mac adres. In dit voorbeeld zie is: byte mac = { 0x58, 0x6F, 0x6D, 0x63, 0x29, 0x00 }; Ik heb hier een andere opbouw van het mac adres ingevoerd. (84:F3:EB:17:D1:62) Zou dit een probleem kunnen zijn?:

My duckduckgo.com brought me here :wink:

https://forum.arduino.cc/t/how-to-locate-byte-mac-and-myip-from-unique-number-on-ethernet-sheild/223820/2