AXA Remote 2.0 raamopener bedienen vanuit Domoticz

AXA Remote Controller

Al eens eerder geprobeerd om met een breadboard, linbus chip, wemos d1 mini en wat dupont kabeltjes om mijn Axa Remote 2.0 raamopeners vanuit Domoticz te kunnen bedienen. Na diverse pogingen en configuraties en even zoveel mislukkingen het project maar gestopt. Kreeg het gewoon niet werkend.

Heb nu besloten om het wat “professioneler” op te pakken en een PCB er voor te laten maken zodat alle componenten netjes vast gesoldeerd kunnen worden. Als basis hiervoor heb ik een schema van “Galagaking” gebruikt welke je op github kunt vinden: https://github.com/galagaking/espaxa

Onderdelenlijst

AantalOnderdeelTe bestellen bijKosten
1Wemos D1 miniwww.aliexpress.com€ 2,75
1MCP2003-E/Phttps://nl.rs-online.com/web/p/products/7154542/€ 1,48
18-voudige IC fittingReichelt.nl€ 0,25
1RJ12 6P6C PCB connectorwww.aliexpress.com1,66 (10 stuks)
11K weerstandwww.aliexpress.com2,09 (100 stuks)
24,7K weerstandwww.aliexpress.com2,09 (100 stuks)
222K weerstandwww.aliexpress.com2,09 (100 stuks)
247uF condensatorwww.aliexpress.com0,76 (20 stuks)
1220uf condensatorwww.aliexpress.com0,76 (20 stuks)
1MT3608 step-up convertertinytronics.nl2,00
1HLK-10M05 AC-DC Power moduletinytronics.nl7,00
1ApparaatsnoerUit rommeldoos
12-pair terminal blockwww.aliexpress.com0,78 (10 stuks)
38-pin header malewww.aliexpress.com2,54 (10 male en 10 female 40-pins)
28-pin header female
1PCBwww.pcbgogo.com13,86 (5 stuks)

Benodigdheden

  • Soldeerbout + tin

Stap 1. PCB ontworpen

Op basis van het schema van Galagaking heb ik in Autodesk Eagle (CAD software voor het ontwerpen van PCB’s) mijn eigen versie ontworpen. Verschillen tussen mijn versie en die van Galagaking zijn dat ik de BMP280 temperatuur sensor heb weggelaten, deze was toch al optioneel en had ik functioneel gezien niet nodig. Verder heb ik male pin headers toegevoegd om de Wemos D1 mini eventueel eenvoudig te vervangen als deze onverhoopt stuk zou gaan. Tot slot heb ik een terminal block toegevoegd waarop ik het netsnoer kan vastschroeven.

Mijn schema ziet er dan als volgt uit:

Vervolgens dit schema m.b.v. Eagle vertaald naar een PCB layout:

Om er vervolgens bij een PCB fabrikant PCB’s van te kunnen laten maken moet je de PBC layout omzetten naar Gerber files. Ook daar voorziet Eagle gelukkig in.

Bovenstaande bestanden zijn allemaal te downloaden:

FileDownload link
ESP-AXA schemahttps://drive.google.com/file/d/17iCXOf9cLjG3Lpdgb4l2OiBh3aCuGRlI/view?usp=sharing
ESP-AXA board layouthttps://drive.google.com/file/d/1wCj4GhY7TiSYAlz64zEiAJRm_esP_vcL/view?usp=sharing
Gerber fileshttps://drive.google.com/file/d/1lJNUNVePfZpi6XMxlKLSYAB-virB7SNv/view?usp=sharing

Stap 2. PCB’s besteld bij pbcgogo.com

De PCB’s besteld via de menuoptie “PCB Instant Quote”->”PCB Manufactoring Calculator” met de volgende instellingen:

In de volgende stap de Gerber files (gezipt) geuploaded. De gerber files worden automatisch gereviewed waarna je vervolgens de bestelling kunt afronden en betalen. Om de kosten laag te houden heb ik gekozen voor verzending via China Post. Tevens de andere onderdelen, voor zover ik ze niet op voorraad had, besteld bij Aliexpress&TinyTronics.nl.

Dit is het resultaat:

Ziet er professioneel uit toch. Paar kleine punten ter verbetering:

  • De gaatjes voor de weerstanden zitten wel heel dicht op elkaar, bij het maken van een volgend ontwerp iets bredere layout kiezen.
  • Daarentegen zijn de gaatjes voor de condensators weer heel wijd van elkaar geplaatst, bij het maken van een volgende ontwerp iets smallere layout kiezen.
  • Bij condensator C3 is een type-foutje er in geslopen, moet zijn 220nF.

Stap 3. Raamopener toevoegen aan Domoticz

Kies binnen Domoticz voor Instellingen->Hardware en selecteer bij de plugin Virtuele sensoren voor de optie Maak virtuele sensoren . Het volgende scherm verschijnt:

Geef het device een zinvolle naam, en kies voor Sensor Type : Keuzeschakelaar. Het virtuele device wordt aangemaakt. Kies nu voor Schakelaars en zoek het net aangemaakte device op, waarschijnlijk staat die helemaal onderaan.

Klik op Aanpassen , het volgende scherm verschijnt:

Vul hier de volgende (niet default) waarden in:

AttribuutWaardeToelichting
NaamZinvolle naam
Schakelaar TypeSelectorBiedt een meerkeuze optie
Schakelaar IcoonKies een betekenisvol icoonZie https://www.domoticz.com/wiki/Custom_icons_for_webinterface
Keuzeniveaus10 Open
20 Stop
30 Close
AXA Remote commando s
Selectie acties10 http://<hostname>/open
20 http://<hostname>/stop
30 http://<hostname>/close
URL s van AXA Remote commando s, vul voor hostname de door jou gekozen hostname in (zie ook de volgende stap).

In mijn geval ziet het er dan zo uit:

En de schakelaar:

Noteer de IDX van je device, die heb je nodig in de volgende stap.

Stap 4. Arduino sketch op de Wemos D1 mini installeren

In afwachting van de onderdelen kan wel alvast de Wemos D1 mini van firmware worden voorzien. Helaas kan ik hiervoor niet de EspHome oplossing van Galagaking hergebruiken, deze werkt namelijk alleen samen met HomeAssistant, en niet met Domoticz. Gelukkig vond ik op internet een Arduino sketch die van je Wemos D1 mini een webserver maakt en /open, /close en /stop als http commando’s accepteert. Het originele script vind je hier: https://www.letscontrolit.com/forum/viewtopic.php?t=2245. Ik heb dit script enigszins aangepast zodat het ook het http commando /status ondersteund, en de status van de raamopener terug gecommuniceerd kan worden naar je Domoticz device. Hieronder het aangepaste script:

/*
* Author: Syds Post
* www.sydspost.nl
* version 1.0
*
* This sketch reads a command through a http connection
* depending on the text received it will send open, stop, close or status
* commands to the Esp8266. the ESP8266 is connected to the Axa Remote 2.0 electric window opener
* incase of status it will actualisize the current state of the Domoticz device defined by IDX
* at the linux command curl -d "" http://<hostname>/status to your crontab file to check the
* status with a certain interval, for example */5 * * * * curl -d "" http://<hostname>/status
* for a refresh of the status every 5 minutes
*/

#include <ESP8266WiFi.h>
#include <WiFiClient.h> 
#include <ESP8266HTTPClient.h>
#include <ESP8266mDNS.h>
#include "arduino_secrets.h"
#include "config.h"

int Debug = 0;                           // 1: Debug on, 0: Debug off
char ssid[] = SECRET_SSID;
char pass[] = SECRET_PASS;

// Create an instance of the server
// specify the port to listen on as an argument
WiFiServer server(80);

// Start HttpClient
HTTPClient http;

void setup() {
  Serial.begin(19200,SERIAL_8N1);
  delay(10);
  // Connect to WiFi network
  WiFi.mode(WIFI_STA);
  WiFi.hostname(sHostname.c_str());
  WiFi.setHostname(sHostname.c_str());
  WiFi.begin(ssid, pass);
  if (!MDNS.begin(sHostname.c_str()) && Debug == 1) {
    Serial.println("Error setting up MDNS responder!");
  }
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
  }
  // Start the server
  server.begin();
  
}

void loop() {

  // Check if a client has connected
  WiFiClient client = server.available();
  if (!client) {
    return;
  }

  // Wait until the client sends some data
  while(!client.available()){
    delay(1);
  }

  // Read the first line of the request
  String req = client.readStringUntil('\r');
  client.flush();

  // Match the request
  int val;
  if (req.indexOf("/open") != -1)
    open_axa();
  else if (req.indexOf("/close") != -1)
    close_axa();
  else if (req.indexOf("/stop") != -1)
    stop_axa();
  else if (req.indexOf("/status") != -1)
    status_axa();
  else {
    Serial.println("invalid request");
    client.stop();
    return;
  }
}

void open_axa() {
  Serial.print("O");
  delay(20);
  Serial.print("P");
  delay(20);
  Serial.print("E");
  delay(20);
  Serial.print("N");
  delay(20);
  Serial.println("\r");
  delay(2000);
}

void close_axa() {
  Serial.print("C");
  delay(20);
  Serial.print("L");
  delay(20);
  Serial.print("O");
  delay(20);
  Serial.print("S");
  delay(20);
  Serial.print("E");
  delay(20);
  Serial.println("\r");
  delay(2000);
}

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

void status_axa() {

  Serial.print("S");
  delay(20);
  Serial.print("T");
  delay(20);
  Serial.print("A");
  delay(20);
  Serial.print("T");
  delay(20);
  Serial.print("U");
  delay(20);
  Serial.print("S");
  delay(20);
  Serial.println("\r");
  String res = Serial.readStringUntil('\r');
  if (res == "OPEN") {
    url = url + "/json.htm?type=command&param=udevice&idx=" + IDX + "&nvalue=0&svalue=0";
  }
  else if (res == "CLOSE") {
    url = url + "/json.htm?type=command&param=udevice&idx=" + IDX + "&nvalue=1&svalue=100";
  }  
  if (Debug == 1) {Serial.println(url);}

  WiFiClient client;
  http.begin(client, url.c_str());
  http.addHeader("Content-Type", "text/plain");

  int httpResponseCode = http.GET();

  if (httpResponseCode>0 && Debug == 1){
    String response = http.getString();   
 
    Serial.println(httpResponseCode);
    Serial.println(response);          
 
  }
  else if (Debug == 1) {
 
    Serial.print("Error on sending PUT Request: ");
    Serial.println(httpResponseCode);
 
  }
 
  http.end();
}

De SSID en het WiFi password kun je kwijt in de file arduino_secrets.sh, verander deze naar jou situatie:

#define SECRET_PASS "<jou WiFi password>"
#define SECRET_SSID "<jou SSID>"

De variabelen zijn opgenomen in een aparte config.h file, verander deze naar jou situatie. Vul bij IDX de IDX van jou device in uit de vorige stap en compileer en upload vervolgens de 3 files naar je Wemos D1 mini.

// Config.h
// Change values according to your situation
//

String sHostname = "<jou gewenste hostname>";   // DNS hostname
String IDX = "<IDX van jou raamopener>";                       // IDX of Domoticz device
String url = "<hostname en poortnummer van jou Domoticz server"; // hostname:port of  Domoticz server

Heb je nog nooit eerder een Wemos D1 Mini met Arduino IDE geflashed, voer dan eerst de stappen in deze instructie uit: https://averagemaker.com/2018/03/wemos-d1-mini-setup.html

De Axa Remote sketch is afhankelijk van de volgende bibliotheken:

  • ESP8266WiFi.h
  • WiFiClient.h
  • ESP8266HTTPClient.h
  • ESP8266mDNS.h

Installeer deze bibliotheken, voor zover je dat nog niet gedaan hebt, via de optie Manage Libraries.

Open nu drie tabbladen in Arduino IDE, geef ze de filenamen AXA Remote 2.0.ino, arduino_secret.h en config.h en kopieer hier bovenstaande C++ programmacode. Pas de variabelen en WiFi codes aan in arduino_secret.h en config.h. Sluit de Wemos D1 Mini middels een USB kabel aan op je laptop. En kies binnen Arduino IDE voor Sketch->Upload.

Testen:

Kies binnen Arduino IDE voor Serial monitor. Open een browser window en open de url http://<hostname of ip-address van jou Wemos D1 mini>/open, in mijn geval bijv. http://raamopener_links.sydspost.nl/open

Als het goed is reageert de Wemos D1 mini in de Serial monitor van Arduino IDE met het commando OPEN. Op dezelfde wijze kun je ook /stop en /close testen. Nadat we in de volgende stap de verschillende componenten op de AXA Remote printplaat hebben gesoldeerd kunnen het /status commando testen.

Stap 5. AXA Remote printplaat van componenten voorzien

We beginnen uiteraard met de kale printplaat en de verschillende componenten:

Eerst solderen we hier de weerstanden R1, R2, R3, R4 en R6 op, en de consensatoren C1, C2 en C3. Even op een rijtje:

  • R1: 22K Ohm weerstand
  • R2: 22K Ohm weerstand
  • R3: 4.7K Ohm weerstand
  • R4: 1K Ohm weerstand
  • R6: 4.7K Ohm weerstand
  • C1: 47uF ELCO
  • C2: 47uF ELCO
  • C3: 220nF keramische condensator

Tussenresultaat:

22K weerstanden moesten nog binnenkomen

Daarna zijn de headers en IC fitting aan de beurt, even op een rij:

  • U2: 8-voudige IC fitting
  • SV3 en SV4: 8 voudige male header
  • U$1: 1 voudige male header op IN + en -, en OUT + en –

Tussenresultaat:

Daarna voeding, step-up converter en terminal voor de 230v aansluiting. Op een rij:

  • U$2: 2 voudige terminal
  • U$1: MT3608 Step-up converter
  • HLK10M05: HLK10M05

Let op dat je de step-up converter op de juiste wijze plaatst, dus VIN+ en VIN- op IN+ en IN-, VOUT+ en VOUT- op OUT+ en OUT-.

En tot slot de RJ12 connector en de Wemos D1 mini. Wacht nog even met MCP2003-E/P in de IC fitting te plaatsen, eerst gaan we step-up converter nog instellen zodat deze 8v afgeeft. Let erop dat je de Wemos D1 mini op de juiste wijze op de headers plaatst, dus met de USB-aansluiting naar de rand van de printplaat toe. Sluit een apparaatsnoer aan op de terminal, rechts de fase, links neutraal en pak een heel klein platte schroevendraaier.

<<Let op, wees voorzichtig, 230v kan levensgevaarlijk zijn !!>> Stop de stekker in het stopcontact en meet met een multimeter de voltage tussen de OUT+ en OUT- van de step-up converter. Draai het kleine schroefje op de Bones 3288 potentiometer van de step-up converter naar links of naar rechts totdat je een voltage van 8v meet.

Plaats nu de MCP2003-E/P in de IC fitting, let er goed op dat de uitholling in de bovenkant van de IC overeenstemt met de uitholling in de IC fitting. Het eindresultaat ziet er dan als volgt uit:

<foto nog toevoegen>

Stap 6. Casing voor de ESP-AXA printen

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *