Startseite » Garagentor-Steuerung mit Hörmann ProMatic und OpenHAB

Garagentor-Steuerung mit Hörmann ProMatic und OpenHAB

Wie kannst du deine ProMatic-Garagentor-Steuerung in dein OpenHAB einbinden?

Ich baue dabei auf den Beitrag von arduino-projekte.info auf und baue das kurz mit ESPHome nach. Der Vorteil ist, dass sich mit ESPHome auch für Laien schnell Veränderungen einarbeiten lassen, die Dokumentation wesentlich übersichtlicher wird und das Projekt auch schnell für andere SmartHome-Zentralen angepasst werden kann. In meinem Fall erstmal nach MQTT.

Der Hardware-technische Aufbau ist der Gleiche wie der auf arduino-projekte.info.

Hardware

Verdrahtung

Wie in arduino-projekte.info beschrieben, musst du zuerst die Klemmen-Belegung deiner Garagentorsteuerung bestimmen. Diese ist in der Bedienungsanleitung dokumentiert. Die werden wie auf der Platine beschrieben verbunden.

Den ESP8266 verlötest du am besten mit den langen Buchsenleisten kopfüber, sodass es einfach auf die Platine gesteckt werden kann, aber auch noch mit weiteren Pins von oben verbunden werden kann.

Einen BME680 schließe ich an D7 (SCL) und D8 (SDA) an und lasse ihn aus dem Gehäuse hängen um die Umgebungsdaten gleich auch zu messen.

Software

1) Vor oder nach dem Zusammenbau will der ESP8266 mit Software betankt werden. Mit ESPHome geht das sehr einfach, wenn du das erstmalig in Betrieb genommen hast. Python gibt es nicht nur für Linux, sondern auch für Windows. Hast du kein Linux auf deinem Rechner, willst es aber verwenden, kannst du das auch innerhalb einer VirtualBox laufen lassen. Ich habe es auch geschafft, mit Portable Python von Windows aus ESPHome zu verwenden.

1.1)Hinweis: Unter Ubuntu 22.04 wird der ESP nicht automatisch korrekt erkannt. Hier sind vorher noch zwei Handgriffe nötig:

  • btltty entfernen
sudo apt remove brltty #removes brltty, do not remove if you need this because of blindness!

oder benutze ein früheres Ubuntu.

Für Windows und normalerweise auch unter anderen Ubuntu-Versionen lässt sich der ESP recht einfach provisionieren ohne 1.1)

2) Schließe deinen ESP8266 an deinen Rechner an und provisioniere ihn mit web.esphome.io.

3) Und verwende folgende ESPHome-Konfiguration:
(nachdem du name, wifi und mqtt auf dein Netz angepasst hast)
Um zu verhindern, dass das Tor geöffnet wird, wenn der ESP8266 bootet, werden die PINs auf „inverted“ gesetzt

#**************************************************************
#* SmartHome ESP8266 Garagentor-Steuerung
#**************************************************************
#* ESP -- Sensor
#* 
#*  TX1 -- 
#*  RX0 -- 
#*  D1  -- Klemme 23 (S2)
#*  D2  -- Klemme 21 (S1)
#*  D3  -- [Free to use] [3V3-Level]
#*  D4  -- Tür-zu-Klemme
#*  GND -- GND
#*  5V  -- 5V
#*  
#*  RST -- 
#*  A0  -- [Free to use] [3V3-Level]
#*  D0  -- [Free to use] [3V3-Level]
#*  D5  -- [Free to use, with interrupt]
#*  D6  -- [Free to use] [3V3-Level]
#*  D7  -- SCL
#*  D8  -- SDA
#*  3V3 -- 
#*  
#*  Fensterkontakte Anschließen:
#*  1 Pin auf 5V, der andere auf den Dx-Eingang
#*
#**************************************************************/



esphome:
  name: arduino-s06

esp8266:
  board: d1_mini

# Enable logging
logger:

web_server:
  port: 80

# Enable Home Assistant API
#api:
#  password: ""

ota:
  password: ""

wifi:
  ssid: "XXXXXXXX"
  password: "XXXXXXXX"
  domain: ".local"
  reboot_timeout: 2min
  fast_connect: true
  power_save_mode: light
 
mqtt:
  broker: XXXXXX
  username: XXXXXX
  password: XXXXXX
  birth_message:
    topic: undef/undef/undef/undef/undef/Arduino_56/hello
    payload: online
  topic_prefix: undef/undef/undef/undef/undef/Arduino_56

#https://esphome.io/components/i2c.html
i2c:
  id: i2c_main
  scl: D7
  sda: D8
  scan: true
  frequency: 20kHz

binary_sensor:
  #Digital Pins
  - platform: gpio
    pin: D4
    id: d4
    name: "D4"
    
sensor:
  - platform: bme280
    i2c_id: i2c_main
    temperature:
      name: "BME-T"
      id: bme_t
      oversampling: 8x
      filters:
        - filter_out: NaN
      internal: true
    pressure:
      name: "BME_P"
      id: bme_p
      oversampling: 8x
      filters:
        - filter_out: NaN
      internal: true
    humidity:
      name: "BME_H"
      id: bme_h
      oversampling: 8x
      filters:
        - filter_out: NaN
      internal: true
    address: 0x76
    update_interval: 10s
  - platform: template
    name: "Absolute Humidity"
    id: absolute_humidity
    lambda: |-
      const float mw = 18.01534;    // molar mass of water g/mol
      const float r = 8.31447215;   // Universal gas constant J/mol/K
      return (6.112 * powf(2.718281828, (17.67 * id(bme_t).state) /
        (id(bme_t).state + 243.5)) * id(bme_h).state * mw) /
        ((273.15 + id(bme_t).state) * r); // in grams/m^3
    accuracy_decimals: 2
    update_interval: 10s
    icon: 'mdi:water'
    unit_of_measurement: 'g/m³'
    filters:
      - filter_out: NaN
    internal: true
  - platform: template
    name: "Dew Point"
    id: dew_point
    lambda: |-
      return (243.5*(log(id(bme_h).state/100)+((17.67*id(bme_t).state)/
      (243.5+id(bme_t).state)))/(17.67-log(id(bme_h).state/100)-
      ((17.67*id(bme_t).state)/(243.5+id(bme_t).state))));
    unit_of_measurement: °C
    accuracy_decimals: 2
    update_interval: 10s
    icon: 'mdi:thermometer-alert'
    filters:
      - filter_out: NaN
    internal: true

switch:
  - platform: gpio
    pin: D2
    inverted: True
    restore_mode: RESTORE_DEFAULT_ON
    name: "Garage Door S1"
    id: garage_door_switch_s1
    on_turn_off:
      then:
        - delay: 0.1s
        - switch.turn_on: garage_door_switch_s1
  - platform: gpio
    pin: D1
    inverted: True
    restore_mode: RESTORE_DEFAULT_ON
    name: "Garage Door S2"
    id: garage_door_switch_s2
    on_turn_off:
      then:
        - delay: 0.1s
        - switch.turn_on: garage_door_switch_s2
  - platform: restart
    name: "Restart"
    
button:
  - platform: restart
    name: "Restart"
    

Einbindung in OpenHAB

Thing mittels mqtt-Binding anlegen:

Bridge mqtt:broker:myMosquitto "Mosquitto" [ host="XXXX", port=1883, secure=false, clientID="OpenHAB_pi", username="XXXXXX", password="XXXXXX" ] {}

	Thing mqtt:topic:myMosquitto:Arduino_56			"Arduino Garagentor"	(mqtt:broker:myMosquitto)	{
		Channels:
			Type switch : s1					[ stateTopic="+/+/+/+/+/Arduino_56/switch/garage_door_s1/state", commandTopic="undef/undef/undef/undef/undef/Arduino_56/switch/garage_door_s1/command", on="OFF", off="ON" ]
			Type switch : s2					[ stateTopic="+/+/+/+/+/Arduino_56/switch/garage_door_s2/state", commandTopic="undef/undef/undef/undef/undef/Arduino_56/switch/garage_door_s2/command", on="OFF", off="ON" ]
			Type switch : restart				[ commandTopic="undef/undef/undef/undef/undef/Arduino_56/switch/restart/command", on="OFF", off="ON" ]
	}

Warum verwende ich „secure=false“, warum hat mein MQTT keine verschlüsselte Verbindung? Ich sichere mein WLAN und biete auch für meine Freunde und Besucher nur ein Gast-WLAN an. Da mein privates WLAN-Netz nach aktuellem Stand der Technik gesichert ist, übertrage ich MQTT innerhalb der Verbindung unverschlüsselt.

Dazugehörige Items:
(Auch hier halte ich mich strikt an meine gesetzte Struktur, daher nochmal die ig-Gruppe darüber)

Group	igArduino56				(sgGarage)["Sensor"]
Switch	Arduino56_SwitchS1	"Garagentor" 	(igArduino56)		{ channel="mqtt:topic:myMosquitto:Arduino_56:s1", expire="1s,command=OFF", alexa="Door.Mode" [capabilityNames="Garagentor", supportedModes="ON=@Value.Open,OFF=@Value.Close", actionMappings="Close=ON,Open=ON,Lower=ON,Raise=ON"] }

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Seite verwendet Akismet, um Spam zu reduzieren. Erfahre, wie deine Kommentardaten verarbeitet werden..

Translate »