Skip to main content

Ein wirklich nützliches Feature ist die Steuerung der Zentralverriegelung über meine Smart Camper App. Das eröffnet viele neue Möglichkeiten.

  • Wenn jemand zu Besuch kommt man aber noch nicht am Camper ist, kann man den Besuch schonmal hineinlassen.
  • Wenn ich nur einen Fahrzeugschlüssel habe, können alle anderen mit der App das Auto öffnen und schließen.

Dazu habe ich mich zunächst in den Karosserie-CAN vom Ducato eingeklinkt. Beim Öffnen und Verschließen ist der CAN-Bus sehr aktiv. Über einige Sekunden werden viele Daten von den verschiedensten Geräten gesendet. Leider ist es nicht möglich, über ein Datenpaket auf dem Karosserie-CAN die Zentralverriegelung anzusteuern. Ich habe mir angeschaut wie meine Alarmanlage (Thitronik Wipro) das macht und dabei gesehen, dass diese 2 weitere Pins (Pin 53 blau/gelb und Pin 27 grau/weiß am grünen Stecker am Steuergerät) anzapft, um die Zentralverriegelung zu schalten. Leider bin ich aus dem Signal nicht wirklich schlau geworden, da es sich nicht um ein mir bekanntes Protokoll handelt. (Falls jemand hierzu Informationen hat, würde ich mich freuen, wenn er sie mit mir teilt). Meinen Exkurs mit dem Karosserie-CAN beschreibe ich demnächst in einem anderen Artikel.

Da es mein Ziel war die Zentralverriegelung zu steuern, ich aus dem Signal aber nicht schlau wurde, brauchte ich eine andere Lösung. Ich habe mich entschlossen einfach über meine Alarmanlage (Thitronik Wipro) zu gehen, diese kann ja die Zentralverriegelung schalten. Hier habe ich vor einiger Zeit das Thitronik Bluetooth Modul nachgerüstet. Da ich mich spätestes seit meinen Versuchen mit dem Votronic Bluetooth Modul mit Bluetooth Low Energy auskenne, müsste es doch ein Leichtes sein, mit einem Mikrocontroller eine Verbindung herzustellen und damit die Zentralverriegelung zu schalten.

Erforschen der Bluetooth-Verbindung zum Thitronik Bluetooth-Modul

Ich habe das gleiche Vorgehen wie beim Votronic Bluetooth Connector gewählt und einfach mit der Android App NRF Connect die BLE Verbindung getrackt. Es gibt einen Service (UUID: 20546869-7472-6f6e-696b-20476d624820) mit 3 Charakteristika. 2 davon senden etwas und über einen kann ich der Wipro Befehle senden. Über die Bluetooth Logs meines Mobiltelefons (lassen sich in Android, über Bluetooth logs aufzeichnen) konnte ich herausfinden, dass man mit den Befehlen „”:WMw04Lock78″“ und “:WMw06Unlock61”  über die Charakteristik UUID: 54686974-726f-6e69-6b20-4354524c2020 die Zentralverriegelung schalten kann.

Einbindung in mein Smart Camper System

Die Hardware ist dieselbe wie beim Votronic Artikel, ich habe einfach die Software etwas angepasst, sodass sich der ESP32 Microcontroller mit der Wipro verbindet und die Befehle zum Öffnen und Schließen der Zentralverriegelung sendet. Um Strom zu sparen, befindet sich der ESP32 eigentlich immer im Deep-Sleep-Modus. Nur wenn ich die Zentralverriegelung schalten will, wecke ich ihn über ein Funkmodul auf, dass in mein Smart-Camper System eingebunden ist. Sobald er erwacht, prüft der Microcontroller, was er machen soll. Von den 8 Schaltausgängen des Homematic Schaltmoduls dient einer zum Wecken und die anderen 7 um spezielle Aufgaben zu erledigen. Ich benutze 2 Kanäle um das Fahrzeug zu öffnen oder zu schließen. Die Sicherheit ist dabei gewährleistet, da das WLAN, die Funkverbindung und die Bluetooth Low Energy Verbindung gesichert sind.

Fazit

Ich hätte die Zentralverriegelung zwar lieber direkt als indirekt über die Thitronik Wipro angesteuert, aber dafür fehlte mir leider die Information über das richtige Signal. Das Ergebnis ist fast dasselbe, außer, dass ich einen kurzen Zeitversatz von ca. 2 Sekunden habe, die der Microcontroller braucht, um sich mit der Wipro zu verbinden. Damit kann ich aber erstmal leben. Es ist auf jeden Fall um Welten besser als diese SMS-Lösung, die von Thitronik über den Pro-finder angeboten wird.

Das Ganze wird natürlich wieder in meine App eingebunden, mit der ich mittlerweile schon eine beachtliche Zahl an Funktionen steuern kann. Den Quellcode stelle ich hier wie immer für interessierte Bastler zur Verfügung. Beim ersten Connect muss der Thitronik Bluetooth Connector durch drücken der einzigen Taste für ca. 5 Sekunden in den Bonding-Modus versetzt werden. Im Code müsst ihr natürlich die MAC-Adresse eures Bluetooth Moduls eintragen, die ihr über die App NFR Connect findet.

Viel Spaß beim Nachbasteln!

Und nochmal die Bitte: Falls jemand Information zur Steuerung der Ducato Zentralverriegelung hat (ich meine nicht die Taste im Armaturenbrett, diese wird nämlich beim echten Verriegeln mit dem Schlüssel deaktiviert und ist auch schon in meinen Smart-Camper integriert), würde ich mich sehr freuen, wenn ihr diese Information mit mir teilt!

#include <Arduino.h>
#include "BLEDevice.h"
#include <ESP32CAN.h>
#include <driver/rtc_io.h>

//BLE
#define Thitronik_BLE_MAC "80:1f:12:be:32:6c"  // Adresse über nRF Connect App finden
uint32_t PIN = 0000 ;             // Bonding Passwort

// Service und Characteristic des Thitronik Bluetooth Connectors
static BLEUUID Thitronik_serviceUUID("20546869-7472-6f6e-696b-20476d624820");
static BLEUUID Thitronik_Antwort_charUUID("54686974-726f-6e69-6b20-524553502020");
static BLEUUID Thitronik_Befehl_charUUID("54686974-726f-6e69-6b20-4354524c2020"); 

//BLE
static BLEAddress *pServerAddress;
BLEClient*  pClient;
static BLERemoteCharacteristic* pRemoteCharacteristic_Thitronik_Befehl;
static BLERemoteCharacteristic* pRemoteCharacteristic_Thitronik_Antwort;


///////////////////////////////////////////////////////////////////////////////////
/////////////////////////            SETUP          ///////////////////////////////
///////////////////////////////////////////////////////////////////////////////////

//GPIOs konfigurieren
void Setup_GPIO(){
 
      // Pins sind mit dem Homematic 8-Kanal-Empfangsmodul verbunden
      pinMode(GPIO_NUM_33, INPUT_PULLUP);
      pinMode(GPIO_NUM_25, INPUT_PULLUP);
      pinMode(GPIO_NUM_26, INPUT_PULLUP);
      pinMode(GPIO_NUM_27, INPUT_PULLUP);
      pinMode(GPIO_NUM_14, INPUT_PULLUP);
      pinMode(GPIO_NUM_12, INPUT_PULLUP);
      pinMode(GPIO_NUM_13, INPUT_PULLUP);
    
      //WakeupPin Homematic
      pinMode(GPIO_NUM_32, INPUT_PULLUP);
      esp_sleep_enable_ext0_wakeup(GPIO_NUM_32, LOW);
      rtc_gpio_pullup_en(GPIO_NUM_32);    
}

//BLE Thitronik Setup
bool Setup_Thitronik(){
  PIN = 0000;
  BLEDevice::init("");
  pServerAddress = new BLEAddress(Thitronik_BLE_MAC);
  return connect_To_Thitronik_Server(*pServerAddress);
}

void setup() {
  Serial.begin(115200);
  Setup_GPIO();
}

void loop()
{
  if(digitalRead(GPIO_NUM_32)==0){
        Serial.println("HomeMatic Weckruf");
        //Unlock Zentralverriegelung
        if(digitalRead(GPIO_NUM_25)==0){
          if(Setup_Thitronik()== true){        
            // Send: :WMw06Unlock61
            if (pRemoteCharacteristic_Thitronik_Befehl != nullptr) {
              pRemoteCharacteristic_Thitronik_Befehl->writeValue(":WMw06Unlock61", true);
              Serial.println("Send: :WMw06Unlock61"); 
            }
          }
        }
        //Lock Zentralverriegelung
        if(digitalRead(GPIO_NUM_26)==0){
          if(Setup_Thitronik()== true){        
            // Send: :WMw04Lock78
            if (pRemoteCharacteristic_Thitronik_Befehl != nullptr) {
              pRemoteCharacteristic_Thitronik_Befehl->writeValue(":WMw04Lock78", true);
              Serial.println("Send: :WMw04Lock78"); 
            }
          }
        }
        //Aktuell Unbenutzt
        if(digitalRead(GPIO_NUM_33)==0){}
        if(digitalRead(GPIO_NUM_27)==0){}
        if(digitalRead(GPIO_NUM_14)==0){Serial.println("GPIO_NUM_14");}
        if(digitalRead(GPIO_NUM_12)==0){Serial.println("GPIO_NUM_12");}
        if(digitalRead(GPIO_NUM_13)==0){Serial.println("GPIO_NUM_13");}
  }
  Serial.println("ich gehen schlafen!!");
  esp_deep_sleep_start();
}


///////////////////////////////////////////////////////////////////////////////////
/////////////////////////             BLE           ///////////////////////////////
///////////////////////////////////////////////////////////////////////////////////

// Security Callback für Login
class MySecurity : public BLESecurityCallbacks {
  bool onConfirmPIN(uint32_t pin){
    return false;
  }
  uint32_t onPassKeyRequest(){
        ESP_LOGI(LOG_TAG, "PassKeyRequest");
    return PIN;
  }
  void onPassKeyNotify(uint32_t pass_key){
        ESP_LOGI(LOG_TAG, "On passkey Notify number:%d", pass_key);
  }
  bool onSecurityRequest(){
      ESP_LOGI(LOG_TAG, "On Security Request");
    return true;
  }
  void onAuthenticationComplete(esp_ble_auth_cmpl_t cmpl){
    ESP_LOGI(LOG_TAG, "Starting BLE work!");
    if(cmpl.success){
      uint16_t length;
      esp_ble_gap_get_whitelist_size(&length);
      ESP_LOGD(LOG_TAG, "size: %d", length);
    }
  }
};

// Verbinde mit Thitronik BLE Server.
bool connect_To_Thitronik_Server(BLEAddress pAddress)
{
  Serial.print("Verbinde Thitronik: ");
  Serial.println(pAddress.toString().c_str());
 
  //BLEDevice::setEncryptionLevel(ESP_BLE_SEC_ENCRYPT );
  BLEDevice::setEncryptionLevel(ESP_BLE_SEC_ENCRYPT );
  BLEDevice::setSecurityCallbacks(new MySecurity());
 
  BLESecurity *pSecurity = new BLESecurity();
  pSecurity->setAuthenticationMode(ESP_LE_AUTH_REQ_SC_BOND); //
  pSecurity->setCapability(ESP_IO_CAP_OUT);
  pSecurity->setRespEncryptionKey(ESP_BLE_ENC_KEY_MASK | ESP_BLE_ID_KEY_MASK);
  pClient = BLEDevice::createClient();

  if ( pClient->connect(pAddress) ) {
          Serial.println("Thitronik BLE Verbunden");
          delay(100);
          BLERemoteService* pRemoteService = pClient->getService(Thitronik_serviceUUID);
          if (pRemoteService == nullptr)
          {
            Serial.print("Service UUID nicht gefunden: ");
            Serial.println(Thitronik_serviceUUID.toString().c_str());
            return false;
          }
          else{
            //Characteristic für Befehl an Thitronik
            pRemoteCharacteristic_Thitronik_Befehl = pRemoteService->getCharacteristic(Thitronik_Befehl_charUUID);
            if (pRemoteCharacteristic_Thitronik_Befehl == nullptr) {
              Serial.print("Characteristic UUID nicht gefunden: ");
              Serial.println(Thitronik_Befehl_charUUID.toString().c_str());
              return false;
            }
            //Characteristik für Callback von Thitronik
            pRemoteCharacteristic_Thitronik_Antwort = pRemoteService->getCharacteristic(Thitronik_Antwort_charUUID);
            if (pRemoteCharacteristic_Thitronik_Antwort == nullptr) {
              Serial.print("Characteristic UUID nicht gefunden: ");
              Serial.println(Thitronik_Antwort_charUUID.toString().c_str());
              return false;
            }
            // Read the value of the characteristic.
            if(pRemoteCharacteristic_Thitronik_Antwort->canRead()) {
              std::string value = pRemoteCharacteristic_Thitronik_Antwort->readValue();
              Serial.println(value.c_str());
            }
          }
        
  }
  else{
      Serial.println("Thitronik BLE nicht Verbunden");
  }
  return true;
}

Danke, dass ihr unseren Blogartikel gelesen habt! Wir freuen uns auf eure Kommentare und euer Feedback.

Unten geht es weiter mit ähnlichen Blogartikeln, außerdem findet ihr die Möglichkeit, euch zu unserem Newsletter anzumelden sowie den Verweis zu unseren Produkten in unserem Webshop.

Dankeschön und Happy Camping,

Sonja & Matthias

Hier könnt ihr euch zu unserem Newsletter anmelden.

Wir schreiben unser Community in unregelmäßigen Abständen, sobald wir neue, spannende Blogartikel posten.
Außerdem schicken wir euch exklusive Rabatte für unseren Webshop. Wir freuen uns, mit euch in Kontakt zu bleiben!

Ihr wollt keine spannenden Artikel verpassen?

* indicates required

Besucht unseren Webshop

Gadgets von Campern für Camper. Unsere eigenen Produkte!

11 Comments

  • Manuel sagt:

    Hallo Matthias,
    erstmal Hut ab, was du alles schon umgesetzt hast! Ich möchte ebenfalls mit einem ESP32 auf die WiPro zugreifen um Alarme zu erkennen (sollte einfach machbar sein über den Ausgang für die Zusatzsirene, habe das aber noch nicht getestet). Nebenbei wäre es natürlich schön, auch gleich die ZV anzusteuern (direkt, ich habe kein BT Vernetzungsmodul). Hast du unterdessen herausgefunden, was man auf den Pins 53/27 für ein Signal zum Öffnen/Schliessen anlegen muss? Hast du das Signal mal mit einem KO aufgezeichnet? Oder ist es womöglich nur ein negativer Impuls wie beim Warnblinker?
    Gruss, Manuel

    • Matthias Harzheim sagt:

      Leider habe ich das Signal nicht gefunden. Wenn ich den Kopf drücke sehe ich da eine Art pwm Signal. Ich habe das aber nicht weiterverfolgt, da ich dann einfach BT genommen habe. Wenn du das rausfindest, würdest du bestimmt einigen helfen, wenn du es hier teilst. Ich überwache übrigens auch den Alarmausgang mit meiner Homematic.

      • Manuel sagt:

        Auf dem Pin 53 ist tatsächlich eine Art PWM Signal, dessen Funktion ich allerdings auch nicht wirklich verstehe. Möglicherweise steuert es das Blinkmuster der LED im Armaturenbrett.
        Die Impulse für Öffnen/Schliessen habe ich aber herausgefunden (gilt für meinen Ducato X290 BJ 2016):
        Pin 53/blau-gelb: kurzer Impuls <2V = alles schliessen vorne+hinten, kurzer Impuls zwischen 2V und 8V = öffnen vorne
        (die WiPro erzeugt zum Schliessen einen 0V-Impuls von ca. 900ms dauer. Zum Öffnen erzeugt sie ein PWM-Signal mit 50% Duty-Cycle, was durchschnittlich etwa 6V entspricht)
        Pin 27/grau-weiss: kurzer Impuls <2V = abwechselnd öffnen/schliessen hinten, allerdings nur wenn vorne (Pin 53) geöffnet ist, sonst inaktiv.
        Zum Schliessen aller Türen (vorn+hinten) reicht somit ein 0V-Impuls auf Pin 53.
        Zum Öffnen aller Türen (vorne+hinten) braucht es zunächst einen Impuls von ca. 6V auf Pin 53, gefolgt von einem 0V-Impuls auf Pin 27. Diese Sequenz wird auch von der WiPro so gemacht.
        Das Öffnen funktioniert auch dann, wenn zuvor per Fernbedienung verschlossen wurde und die Taste im Armaturenbrett deaktiviert ist.
        Meine Erkenntnisse decken sich ungefähr mit den Aussagen hier: https://www.mikrocontroller.net/topic/449029
        Leider wird die WiPro nicht gleichzeitig scharf/unscharf geschaltet. Müsste man dafür entsprechende CAN-Messages erzeugen? Oder wie würde man die WiPro ohne Fernbedienung scharf stellen?

        • Matthias Harzheim sagt:

          Hi Manuel,
          lies dazu mal meinen Artikel zum Ducato CAN. Ich vermute du musst auf CAN-ID: 0x02294000 die Nachricht: 00 00 00 00 00 80 00 00 senden. Diese Nachricht kommt vom Schlüsselempfänger, wenn du die Taste zusperren drückst. Wahrscheinlich erwartet die WiPro dieses Signal. Wahrscheinlich ist es aber eher eine Kombination, sonst könnte man ja einfach was auf den CAN legen um die Wipro zu deaktivieren. Vielleicht wartet die Wipro auf das von dir geschrieben Signal und hört dann auf den CAN, der beim Schließen auch aktiv ist und prüft ob die Türe geschlossen sind. Das Signal wird immer von den Türen gesendet, sobald sich auf dem CAN was tut. Die Wipro darf ja nicht angehen, wenn die Türen noch offen sind, dann schließt nämlich auch das Auto nicht. Versuchs Mal mit der Schließennachricht die ich oben geschrieben habe, zusammen mit dem schießen Signal auf den Pins. Ich vermute das ist die Lösung.

          Gerne Rückmeldung wenn es so ist und danke für die Info mit dem Öffnen und schließen Signal, das hilft bestimmt einigen weiter.

          Grüße,

          Matthias

        • Remo sagt:

          Hallo Manuel
          Ich habe einen Ducato 2021er Modell und möchte eigentlich nicht extra eine Alarmanlage installieren, sondern nur mit einem ESP32 die ZV steuern. Hast du deine Infos oben bereits umgesetzt und wenn ja, hast du noch weitere Informationen zur Umsetzung.
          Wenn das einfach auf einem ESP zu realisieren ist, steht RFID oder MQTT nichts mehr im Weg.

          • Manuel sagt:

            Hallo Remo
            Meine etwas späte Antwort: habe dies bisher nicht speziell weiterverfolgt. Nach meinem Verständnis müsste die Umsetzung aber relativ einfach machbar sein. Zur Trennung des ESP und Fahrzeugelektrik würde ich zwei Optokoppler nehmen. Einer zum Schalten nach 0V und einer mit Spannungsteiler nach 6V. Diese dann entsprechend durch GPIO des ESP ansteuern.
            Gruss Manuel (manux@gmx.net)

  • Michael sagt:

    Hallo,
    haben Sie eine Info für mich, wie ich die Daten aus der WiPro auslesen/loggen kann?
    Ich kann mich zwar mit nRF connect per bluetooth mit der WiPro verbinden, kann dann aber nicht mit einem zweiten Gerät verbunden sein um über die Thitronik-App Befehle abzusetzen.
    Ich würde mich für die Ein und Aus Befehle interessieren.
    Meine UUID sind alle identisch wie bei Ihnen.

    Vielen Dank im Voraus.

    • Matthias Harzheim sagt:

      Ich glaube ich habe mit nRF Connect aufgezeichnet und die Befehle mit dem selben Handy gesendet. Kann aber auch sein, dass ich auf einem anderen Handy die gleichen UUIDs gehostet habe und dann mich mit meinem Handy verbunden habe. Eins von beiden war glaub ich die Lösung. Sorry, ich hätte da so viel ausprobiert, dass ich mir nicht mehr sicher bin, was dann zum Ziel geführt hat.

  • Gabriel K. sagt:

    Hallo Zusammen, vielen dank für die Infos.
    ich bin der vom https://www.mikrocontroller.net/topic/449029
    Mittlerweile lese ich über eine Siemens Logo die Blinker aus und je nach Dauer/Anzahl schliesse oder öffne ich die Stellmotoren direkt mit dem Logo.
    Leider säuft die Logo die Batterie regelrecht leer. Daher würde ich gerne auf eine ESP32 Lösung umsatteln, am liebsten wie schon beschrieben direkt ESP – Canbus – Wipro um das Konzept möglichst einfach zu halten.
    Es wäre echt hilfreich, wenn die Wipro zwei Kontakte hätte die man auf Low oder High ziehen könnte je nach Schliessen oder Öffnen. -träumen darf man ja…
    Falls jemand irgendeine Idee hat probiere ich sie gerne aus.
    Die hier präsentierte mit dem BLE ist keine schlechte aber halt auch sehr umständlich – danke an der Ersteller!

    • Matthias Harzheim sagt:

      Hallo Gabriel,

      ich verbinde mich nur über Bluetooth mit der Wipro, weil das schon eingebaut war und ich so ohne Kabel einfach die ZV steuern kann. Wenn du das BLE-Ding nicht hast kannst du bestimmt die Wipro auch über das Protokoll, das der BLE Adapter mit der Wipro spricht steuern. Ich glaube mich zu erinnern es handelt sich um RS485. Aber bedeutet auch etwas Reverse engineering.

      • Gabriel K. sagt:

        Das hatte ich mir schon gedacht, als ich mir dein Blog durchlas. Mal schauen ob ich sowas hinbekomme. Offenlegen tun sie das sicher nicht… 🙂
        Ich habe trotzdem versucht and Thitronik eine Nachricht zu senden um sie darauf aufmerksam zu machen, dass es Leute gibt, die eine einfache Schnittstelle zum Bedienen der Alarmanlage wünschen.

Leave a Reply