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
- Platine, passend für deine Garagentor-Steuerung
- D1 Mini NodeMcu mit ESP8266
- arduino-projekte empfiehlt die Pro-Variante, die günstigere Variante mit 4MB tuts aber auch. Hab ich so im Einsatz.
- Draht
- Optional: zusätzlicher Optokoppler
- falls der Status des Tors abgefragt werden soll
- Optional: BME680
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!
- Installiere den CH340x-Treiber
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"] }