Zoll-Jalousien verwalten wir günstig

Zurück im Sommer, als die helle Sonne schien, war ich es leid, den Knopf zum Schließen / Öffnen der Jalousien im Büro wie in diesem GIF zu drehen, und die Idee kam, sie zu automatisieren.



Bevor ich die Jalousien von Leroy Merlin kaufte, hatte ich die Idee, elektrische Vorhänge anzubringen, aber der Preis für sie war vor einigen Jahren, als ich eine Wahl traf, ziemlich beissend. Aufgrund der Höhe und Breite des Fensters stellte sich heraus, dass die Größe der Vorhänge nicht dem Standard entsprach, was auch die Kosten erhöhte.



Das Ergebnis meines Projekts zur Automatisierung von Jalousien von Leroy Merlin


Danach vergingen ein paar Jahre und nachdem die Anzahl der „intelligenten“ Dinge im Büro, die auf Home Assistant basierten, wieder zugenommen hatte, kam ich wieder auf die Idee, Jalousien zu automatisieren.


Die Überwachungsoptionen funktionierten nicht. Alle Jalousieautomationsprojekte, die ich gesehen habe, betrafen Zwei-Zoll-Jalousien, während fast alle Jalousien, die in der Russischen Föderation verkauft werden, ein Zoll breit sind.



Automatisierte Jalousien an einem Bürofenster


1. Die Wahl des Motors und des Steuermikrocontrollers


Zunächst war nicht klar, wo ich überhaupt anfangen sollte. Für die Automatisierung verwendeten andere Projekte häufig den 28BYJ-48-Schrittmotor für ungefähr 130 Rubel pro Stück (in China). Ich hatte keine Frage zum Controller, da ich fast überall LOLIN (WEMOS) D1 mini verwende .



Converted- und Standard-Jalousien: Draufsicht


2. Firmware für den ESP8266-Mikrocontroller des chinesischen Herstellers Espressif Systems


Im nächsten Schritt - der Firmware - wollte ich mich nicht mit komplexer Codierung befassen , und das übliche Tasmota gab keine vorgefertigten Optionen an. Dann traf ich mich mit ESPHome - Firmware, die nativ und ohne MQTT von Home Assistant unterstützt wird.



Converted und Standard Jalousien: Seitenansicht


Ein schöner Vorteil von ESPHome war, dass es eine Komponente für die Arbeit mit Schrittmotoren enthält , die wiederum den Betrieb mit dem ULN2003-Chip unterstützt, mit dem eine Last mit erheblicher Leistung gesteuert werden kann, einschließlich elektromagnetischer Relais, Gleichstrommotoren, Magnetventile in Steuerkreisen verschiedener Schrittmotoren Motoren.



Redid Jalousien: Seitenansicht


Da ich Hass.io verwende , habe ich die einfachste Option zum Kompilieren der Firmware verwendet - ESPHome Hass.io Add-On .
Es gibt drei Jalousien am Fenster und drei Mikrocontroller werden erhalten. Hier ist die resultierende Firmware:
Nach dem Testen stellte ich fest, dass für das korrekte Öffnen / Schließen der Jalousien für jede Jalousie eine andere Anzahl von Schritten eingestellt werden muss.



window_1.yaml
substitutions: devicename: window_1 upper_devicename: Window 1 esphome: name: $devicename platform: ESP8266 board: d1_mini wifi: ssid: "xxx" password: "xxx" # Enable fallback hotspot (captive portal) in case wifi connection fails ap: ssid: "Window 1 Fallback Hotspot" password: "xxx" captive_portal: # web_server: # port: 80 # css_url: http://192.168.15.10:8123/local/webserver-v1.min.css # js_url: http://192.168.15.10:8123/local/webserver-v1.min.js # Enable Home Assistant API api: services: - service: control_stepper variables: target: int then: - stepper.set_target: id: my_stepper target: !lambda 'return target;' # Enable OTA Access ota: # Enable verbose logging over serial logger: # physical connection stepper: - platform: uln2003 id: my_stepper pin_a: D0 pin_b: D5 pin_c: D6 pin_d: D7 max_speed: 250 steps/s sleep_when_done: true acceleration: inf deceleration: inf i2c: cover: - platform: template name: "Zhaliuzi 1" id: window1 device_class: blind open_action: - stepper.report_position: id: my_stepper position: 0 - stepper.set_target: id: my_stepper target: -1550 close_action: - stepper.report_position: id: my_stepper position: 0 - stepper.set_target: id: my_stepper target: 1550 stop_action: - stepper.set_target: id: my_stepper target: !lambda return id(my_stepper).current_position; optimistic: true assumed_state: true sensor: - platform: bh1750 name: "Osveshchennost u okna" address: 0x23 update_interval: 40s # General device data - platform: uptime id: uptime_sec - platform: wifi_signal name: ${upper_devicename} WiFi Signal id: wifis_signal update_interval: 900s text_sensor: - platform: template name: ${upper_devicename} Uptime lambda: |- int seconds = (id(uptime_sec).state); int days = seconds / (24 * 3600); seconds = seconds % (24 * 3600); int hours = seconds / 3600; seconds = seconds % 3600; int minutes = seconds / 60; seconds = seconds % 60; return { (String(days) +"d " + String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() }; icon: mdi:clock-start update_interval: 113s - platform: template name: ${upper_devicename} Wifi Strength icon: "mdi:wifi" lambda: |- if (id(wifis_signal).state > -50 ) { return {"Excellent"}; } else if (id(wifis_signal).state > -60) { return {"Good"}; } else if (id(wifis_signal).state > -70) { return {"Fair"}; } else if (id(wifis_signal).state < -70) { return {"Weak"}; } else { return {"None"}; } update_interval: 900s - platform: version name: ${upper_devicename} Version - platform: template name: ${upper_devicename} MAC Address lambda: 'return {WiFi.macAddress().c_str()};' icon: mdi:fingerprint update_interval: 1d switch: - platform: restart name: ${upper_devicename} Restart 

window_2.yaml
 substitutions: devicename: window_2 upper_devicename: Window 2 esphome: name: $devicename platform: ESP8266 board: d1_mini wifi: ssid: "xxx" password: "xxx" # Enable fallback hotspot (captive portal) in case wifi connection fails ap: ssid: "Window 2 Fallback Hotspot" password: "xxx" captive_portal: # web_server: # port: 80 # css_url: http://192.168.15.10:8123/local/webserver-v1.min.css # js_url: http://192.168.15.10:8123/local/webserver-v1.min.js # Enable Home Assistant API api: services: - service: control_stepper variables: target: int then: - stepper.set_target: id: my_stepper target: !lambda 'return target;' # Enable OTA Access ota: # Enable verbose logging over serial logger: # physical connection stepper: - platform: uln2003 id: my_stepper pin_a: D0 pin_b: D5 pin_c: D6 pin_d: D7 max_speed: 250 steps/s sleep_when_done: true acceleration: inf deceleration: inf cover: - platform: template name: "Zhaliuzi 2" id: window2 device_class: blind open_action: - stepper.report_position: id: my_stepper position: 0 - stepper.set_target: id: my_stepper target: -1800 close_action: - stepper.report_position: id: my_stepper position: 0 - stepper.set_target: id: my_stepper target: 1800 stop_action: - stepper.set_target: id: my_stepper target: !lambda return id(my_stepper).current_position; optimistic: true assumed_state: true # General device data sensor: - platform: uptime id: uptime_sec - platform: wifi_signal name: ${upper_devicename} WiFi Signal id: wifis_signal update_interval: 900s text_sensor: - platform: template name: ${upper_devicename} Uptime lambda: |- int seconds = (id(uptime_sec).state); int days = seconds / (24 * 3600); seconds = seconds % (24 * 3600); int hours = seconds / 3600; seconds = seconds % 3600; int minutes = seconds / 60; seconds = seconds % 60; return { (String(days) +"d " + String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() }; icon: mdi:clock-start update_interval: 113s - platform: template name: ${upper_devicename} Wifi Strength icon: "mdi:wifi" lambda: |- if (id(wifis_signal).state > -50 ) { return {"Excellent"}; } else if (id(wifis_signal).state > -60) { return {"Good"}; } else if (id(wifis_signal).state > -70) { return {"Fair"}; } else if (id(wifis_signal).state < -70) { return {"Weak"}; } else { return {"None"}; } update_interval: 900s - platform: version name: ${upper_devicename} Version - platform: template name: ${upper_devicename} MAC Address lambda: 'return {WiFi.macAddress().c_str()};' icon: mdi:fingerprint update_interval: 1d switch: - platform: restart name: ${upper_devicename} Restart 

window_3.yaml
 substitutions: devicename: window_3 upper_devicename: Window 3 esphome: name: $devicename platform: ESP8266 board: d1_mini wifi: ssid: "xxx" password: "xxx" # Enable fallback hotspot (captive portal) in case wifi connection fails ap: ssid: "Window 3 Fallback Hotspot" password: "xxx" captive_portal: # web_server: # port: 80 # css_url: http://192.168.15.10:8123/local/webserver-v1.min.css # js_url: http://192.168.15.10:8123/local/webserver-v1.min.js # Enable Home Assistant API api: services: - service: control_stepper variables: target: int then: - stepper.set_target: id: my_stepper target: !lambda 'return target;' # Enable OTA Access ota: # Enable verbose logging over serial logger: # physical connection stepper: - platform: uln2003 id: my_stepper pin_a: D0 pin_b: D5 pin_c: D6 pin_d: D7 max_speed: 250 steps/s sleep_when_done: true acceleration: inf deceleration: inf cover: - platform: template name: "Zhaliuzi 3" id: window3 device_class: blind open_action: - stepper.report_position: id: my_stepper position: 0 - stepper.set_target: id: my_stepper target: -1600 close_action: - stepper.report_position: id: my_stepper position: 0 - stepper.set_target: id: my_stepper target: 1600 stop_action: - stepper.set_target: id: my_stepper target: !lambda return id(my_stepper).current_position; optimistic: true assumed_state: true # General device data sensor: - platform: uptime id: uptime_sec - platform: wifi_signal name: ${upper_devicename} WiFi Signal id: wifis_signal update_interval: 900s text_sensor: - platform: template name: ${upper_devicename} Uptime lambda: |- int seconds = (id(uptime_sec).state); int days = seconds / (24 * 3600); seconds = seconds % (24 * 3600); int hours = seconds / 3600; seconds = seconds % 3600; int minutes = seconds / 60; seconds = seconds % 60; return { (String(days) +"d " + String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() }; icon: mdi:clock-start update_interval: 113s - platform: template name: ${upper_devicename} Wifi Strength icon: "mdi:wifi" lambda: |- if (id(wifis_signal).state > -50 ) { return {"Excellent"}; } else if (id(wifis_signal).state > -60) { return {"Good"}; } else if (id(wifis_signal).state > -70) { return {"Fair"}; } else if (id(wifis_signal).state < -70) { return {"Weak"}; } else { return {"None"}; } update_interval: 900s - platform: version name: ${upper_devicename} Version - platform: template name: ${upper_devicename} MAC Address lambda: 'return {WiFi.macAddress().c_str()};' icon: mdi:fingerprint update_interval: 1d switch: - platform: restart name: ${upper_devicename} Restart 

3. Den Antrieb in die Jalousien einbauen


Der Schrittmotor passte nicht vollständig in die Jalousien, aber da sie in meinem Fall nicht gegen die Wand gedrückt wurden, war es möglich, einen Teil des Motors von der Rückseite der Jalousien in den Schlitz zu bewegen.



Elektrische Jalousien von Leroy Merlin


4. Installation der Struktur auf dem Fenster


Da die Jalousien bereits von den Bauherren installiert wurden, konnte ich neben dem Fenster nur eine Box mit Mikrocontrollern und einem Netzteil installieren. Die Stromversorgung ist nicht die leistungsstärkste, da die Schrittmotoren in Reihe geschaltet werden - zuerst zuerst, dann zweitens, dann drittens. Die Gesamtlaufzeit beträgt ca. 20 Sekunden.



Box mit drei ESP8266 und Netzteil an der Bürowand


5. Regeln zur Automatisierung des Schließens von Jalousien aus dem Home Assistant


Wenn eine bestimmte Schwelle überschritten wird, drehen sich die Jalousien um 90 Grad und dann entsprechend zurück.


automations.yaml
 - alias: Covers OPEN trigger: - platform: numeric_state entity_id: sensor.osveshchennost_u_okna above: 0 below: 2500 condition: - condition: state entity_id: cover.zhaliuzi_3 state: 'closed' - condition: state entity_id: cover.zhaliuzi_2 state: 'closed' - condition: state entity_id: cover.zhaliuzi_1 state: 'closed' action: - service: cover.open_cover data: entity_id: cover.zhaliuzi_3 - delay: '00:00:06' - service: cover.open_cover data: entity_id: cover.zhaliuzi_2 - delay: '00:00:06' - service: cover.open_cover data: entity_id: cover.zhaliuzi_1 - alias: Covers CLOSE trigger: - platform: numeric_state entity_id: sensor.osveshchennost_u_okna above: 2501 below: 50000 condition: - condition: state entity_id: cover.zhaliuzi_3 state: 'open' - condition: state entity_id: cover.zhaliuzi_2 state: 'open' - condition: state entity_id: cover.zhaliuzi_1 state: 'open' action: - service: cover.close_cover data: entity_id: cover.zhaliuzi_3 - delay: '00:00:06' - service: cover.close_cover data: entity_id: cover.zhaliuzi_2 - delay: '00:00:06' - service: cover.close_cover data: entity_id: cover.zhaliuzi_1 

Zusammenfassung


Hier ist ein Projekt zur Automatisierung von Jalousien, das nur zeitaufwendig ist, aber die Komponenten selbst kostengünstig sind. Das Projekt hat bestimmte Vorteile. Der wichtigste Vorteil: Billigkeit.
Es gibt aber auch Nachteile - ESP8266 kennt nie die aktuelle Position der Jalousien. Wenn zum Beispiel die Welle rollt, müssen Sie sie manchmal manuell in die Ausgangsposition bringen, indem Sie eine Taste in der Benutzeroberfläche des Home Assistant drücken.


PS Bereits nach Abschluss der Arbeiten wurde mir mitgeteilt, dass es spezielle Verbindungsmuffen gibt, mit denen Sie die Motorwelle und die Jalousiewelle fest verbinden können. Auf diese Weise wird vermieden, dass die Spirale in meinem aktuellen Fall aufgrund einer unzureichenden Befestigung des Verbindungsrohrs auftreten kann.

Weitere Details finden Sie auf GitHub .


Gepostet von: Mikhail Shardin ,
17. Dezember 2019

Source: https://habr.com/ru/post/de480690/


All Articles