HomeLink ermöglicht es, beim ankommen zu Hause automatisch eine Aktion, wie das öffnen des Garagentors auszuführen. Zusätzlich sind auch andere Dinge möglich, wie das Einschalten von Beleuchtung, oder das Freischalten der Ladestation. Was genau passieren soll möchte ich mit meiner „Smarten“ Hausautomatisierung steuern.

 

model 3 - interior dashboard - head onFoto: Tesla

Ich verwende innerhalb des Hauses verschiedene Systeme. Die Virtualisierung und Steuerung übernimmt bei mir ein  Loxone Miniserver. Sämtliche mir wichtigen Komponenten sind über den KNX-Bus verdrahtet angeschlossen, und teilweise auch autonom ohne vorhandene Loxone betriebsfähig. Weniger wichtige Systeme sind über das Funksystem von Loxone eingebunden. Nicht Systemrelevante „Spielereien“ werden bei mir über Arduinos oder auch Homematic Komponenten eingebunden. Die Kommunikation mit den Arduinos erfolgt über WLAN. Es ist recht einfach diese ins WLAN zu bringen, und z.B. Temperaturdaten oder andere Informationen senden zu lassen. Ich nutze dazu normalerweise die http-Schnittstelle zu Loxone, so daß die Geräte ihre Daten einfach an meinen Miniserver  senden können.

Ich habe mich hier entschieden, die HomeLink Funktion über einen Arduino zu benutzen. Dazu habe ich einen Arduino und ein RF Modul benutzt.

Als Modul bietet sich der ESP8266 mit integriertem WLAN an.

Als Empfänger habe ich das hier genommen:

Es müssen lediglich 3 Kontakte angeschlossen werden.Fertig verdrahtet sieht das dann so aus

E36420FD-5BEB-4AB1-AF98-ED56AE666DB9.jpeg

Ich habe dem Teil nun beigebracht bei erhalt eines bestimmten Funksignals dies meinem Miniserver  mitzuteilen.

Am Server ist dazu ein Virtueller Eingang anzulegen.

vi1

Dieser Virtuelle Eingang kann dann problemlos via http-Request angesprochen werden.

Hier ein kleiner Beispielcode:

#include <ESPiLight.h>
#include <Arduino.h>

#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>

#include <ESP8266HTTPClient.h>

#define RECEIVER_PIN D4  // any intterupt able pin
#define TRANSMITTER_PIN -1

const char* ssid = "xxxxxxxxxx";
const char* password = "xxxxxxxxxxx";

const String ip = "192.168.178.xx";
const String loxuser = "xxxxxxx";
const String loxpass = "xxxxxx";

bool Log = false;

const String recprotocol1 = "arctech_switch_old";
const String recmessage1 = "{\"id\":2,\"unit\":0,\"state\":\"on\"}";

ESPiLight rf(TRANSMITTER_PIN);  // use -1 to disable transmitter

// callback function. It is called on successfully received and parsed rc signal
void rfCallback(const String &protocol, const String &message, int status,
                size_t repeats, const String &deviceID) {

  if (Log) {
    Serial.print(protocol);  // protocoll used to parse
    Serial.print("][");
    Serial.print(deviceID);  // value of id key in json message
    Serial.print("] (");
    Serial.print(status);  // status of message, depending on repeat, either:
    // FIRST   - first message of this protocoll within the last 0.5 s
    // INVALID - message repeat is not equal to the previous message
    // VALID   - message is equal to the previous message
    // KNOWN   - repeat of a already valid message
    Serial.print(") ");
    Serial.print(message);  // message in json format
    Serial.println();
  }
  // check if message is valid and process it
  if (status == VALID) {

    if (protocol == recprotocol1)
    {
      if (message == recmessage1)
      {
        HTTPClient http;  //Declare an object of class HTTPClient

        http.begin("http://"+loxuser+":" + loxpass + "@" + ip + "/dev/sps/io/VI45/on"); 
        int httpCode = http.GET();                                                                  //Send the request

        if (httpCode > 0) { //Check the returning code

          String payload = http.getString();   //Get the request response payload
          Serial.println(payload);                     //Print the response payload
        }
      }
    }

  }
}

void setup() {
  Serial.begin(115200);
  // set callback funktion

  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());

  // Use WiFiClientSecure class to create TLS connection
  WiFiClient client;

  rf.setCallback(rfCallback);
  // inittilize receiver
  rf.initReceiver(RECEIVER_PIN);
  Serial.print("hallo");
}

void loop() {
  // process input queue and may fire calllback
  rf.loop();
  delay(10);
}

 

Möglich soll sein, daß aus dem Fahrzeug via HomeLink ein Signal gesendet wird, und dieses dann auf meine Hausautomatisierung (Loxone)  weitergegeben wird.

Loxone eignet sich durch die sehr gute Virtualisierung und die vielen Schnittstellen (u.a. KNX, OneWire und HTTP) perfekt für alle Arten der Automatisierung:

Und falls man die Steuerung nicht „Automatisch“ haben möchte: Der Safari-Browser des Tesla Model 3 kann natürlich die Webpage des Miniserver auch von unterwegs öffnen:

lox

6 Gedanken zu „HomeLink mit Arduino – Tesla Model 3

  1. Marvin

    Hallo,
    ich habe Loxone, Tesla und nun die Teile die hier benötigt werden.
    Gibt es irgendwo eine Beschreibung wie ich den Arduino passend programmiere?
    Die Zusammenfassung hier ist dann doch sehr einfach gehalten..

    Like

    Antwort
    1. M@rcusSchumacher.de Autor

      Du musst eigentlich nur die Arduino SDK installieren, und damit kannst Du dann das Programm aufspielen.

      Like

      Antwort
  2. Andy777

    Hat jemand die Kommunikation zur Wallbox entschlüsselt ?
    da sollte man ja auch den Ladestand des Autos herauslesen können…

    Like

    Antwort
    1. M@rcusSchumacher.de Autor

      Bei AC über Typ 2 geht das leider nicht. Da wird zwischen Auto und Ladestation nur über analoge Pegelwerte kommuniziert. Wobei ich noch nicht rausgefunden habe wie eine Wallbox erkennt ob ein Tesla oder was anderes dranhängt. Das machen einige Destination Charger ja.

      Like

      Antwort

Hinterlasse einen Kommentar