गर्मियों में, जब चमकदार सूरज चमक रहा था, तो मैं इस gif पर कार्यालय में शटर के शटर / शटर घुंडी को मोड़कर थक गया था और उन्हें स्वचालित करने के लिए विचार आया था।

लेरॉय मर्लिन से अंधा खरीदने से पहले, मुझे इलेक्ट्रिक पर्दे लगाने का विचार था, लेकिन उनके लिए कई साल पहले कीमत, जब मैंने एक विकल्प बनाया था, बहुत सुंदर था। इसके अलावा, खिड़की की ऊंचाई और चौड़ाई के कारण, पर्दे का आकार गैर-मानक निकला, जिससे लागत में भी वृद्धि हुई।
लेरॉय मर्लिन से अंधा के स्वचालन के लिए मेरी परियोजना का परिणाम है
उसके बाद, कुछ साल बीत गए और होम असिस्टेंट पर आधारित कार्यालय में "स्मार्ट" चीजों की संख्या बढ़ने के बाद, मैं अंधा कर देने वाले विचारों पर लौट आया।
निगरानी के विकल्प काम नहीं कर रहे थे। मैंने देखा कि सभी नेत्रहीन स्वचालन परियोजनाएं दो इंच अंधा के लिए थीं, जबकि रूसी संघ में बेची जाने वाली लगभग सभी अंधा एक इंच चौड़ी हैं।

एक कार्यालय की खिड़की पर स्वचालित अंधा कर रही है
1. मोटर और नियंत्रण माइक्रोकंट्रोलर की पसंद
पहले यह स्पष्ट नहीं था कि कहां से शुरू करें। स्वचालन के लिए, अन्य परियोजनाओं में अक्सर लगभग 130 रूबल एप्लाइस (चीन में) के लिए 28BYJ-48 स्टेपर मोटर का उपयोग किया जाता है । मेरे पास नियंत्रक नियंत्रक के साथ कोई प्रश्न नहीं है, क्योंकि मैं लगभग हर जगह LOLIN (WEMOS) D1 मिनी का उपयोग करता हूं ।

परिवर्तित और मानक अंधा: शीर्ष दृश्य
2. चीनी निर्माता एस्प्रेसिफ सिस्टम्स के ईएसपी 8266 माइक्रोकंट्रोलर के लिए फर्मवेयर
अगले चरण में - फर्मवेयर, मैं जटिल कोडिंग से परेशान नहीं करना चाहता था, और सामान्य तौर पर टसमोटा ने तैयार किए गए विकल्प नहीं दिए। फिर मैं ESPHome के साथ मिला - फर्मवेयर जो मूल रूप से और गृह सहायक द्वारा समर्थित MQTT के बिना है।

परिवर्तित और मानक अंधा: साइड व्यू
ESPHome का एक अच्छा बोनस यह था कि इसमें स्टेपर मोटर्स के साथ काम करने के लिए एक घटक है , जो उलान 200 चिप के साथ ऑपरेशन का समर्थन करता है, जिसका उपयोग विभिन्न स्टेपर मोटर्स के नियंत्रण सर्किट में विद्युत चुम्बकीय रिले, डीसी मोटर्स, सोलिडोइड वाल्व सहित महत्वपूर्ण शक्ति के भार को नियंत्रित करने के लिए किया जा सकता है। इंजन।

रीड ब्लाइंड्स: साइड व्यू
चूंकि मैं Hass.io का उपयोग करता हूं , इसलिए मैंने फर्मवेयर के लिए संकलन करने के लिए सबसे आसान विकल्प का उपयोग किया - ESPHome Hass.io एड-ऑन ।
खिड़की पर तीन अंधा होते हैं और तीन माइक्रोकंट्रोलर प्राप्त होते हैं। यहाँ परिणामी फर्मवेयर हैं:
परीक्षण के बाद, मैंने पाया कि, अंधा के सही उद्घाटन / समापन के लिए, प्रत्येक अंधे के लिए अलग-अलग संख्याओं को निर्धारित करना आवश्यक है।

window_1.yamlsubstitutions: 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. अंधा में ड्राइव स्थापित करना
स्टेपर मोटर पूरी तरह से अंधा में फिट नहीं हुई, लेकिन चूंकि मेरे मामले में उन्हें दीवार के खिलाफ दबाया नहीं गया था, इसलिए अंधा के पीछे से स्लॉट में मोटर का हिस्सा स्थानांतरित करना संभव था।

इलेक्ट्रिक विंडो लेरॉय मर्लिन से मिलती है
4. खिड़की पर संरचना की स्थापना
चूंकि अंधा पहले से ही बिल्डरों द्वारा स्थापित किया गया था, मैं केवल माइक्रोकंट्रोलर के साथ एक बॉक्स स्थापित कर सकता हूं और खिड़की के बगल में एक बिजली की आपूर्ति कर सकता हूं। बिजली की आपूर्ति सबसे शक्तिशाली नहीं है, क्योंकि स्टेपर मोटर्स को श्रृंखला में स्विच किया जाता है - पहला पहले, फिर दूसरा, फिर तीसरा। कुल रन समय लगभग 20 सेकंड है।

तीन ESP8266 के साथ बॉक्स और कार्यालय की दीवार पर बिजली की आपूर्ति
5. गृह सहायक से अंधा के समापन को स्वचालित करने के नियम
जब एक निश्चित सीमा पार हो जाती है, तो अंधा 90 डिग्री घूमता है और फिर उसी के अनुसार वापस लौटता है।
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
परिणाम
यहां अंधा के स्वचालन के लिए एक परियोजना है, जिसमें केवल समय लेने वाली की आवश्यकता होती है, लेकिन घटक स्वयं सस्ती हैं। परियोजना के कुछ फायदे हैं। सबसे महत्वपूर्ण लाभ: सस्तापन।
लेकिन इसके नुकसान भी हैं - ESP8266 अंधा की वर्तमान स्थिति को कभी नहीं जानता है। कभी-कभी, जब, उदाहरण के लिए, शाफ्ट स्क्रॉल करता है, तो आपको होम सहायक इंटरफ़ेस में एक बटन दबाकर इसे मैन्युअल रूप से अपनी प्रारंभिक स्थिति में समायोजित करना होगा।
पीएस पहले से ही काम खत्म करने के बाद, उन्होंने मुझे बताया कि विशेष कनेक्टिंग स्लीव्स हैं जो आपको मोटर शाफ्ट और अंधा शाफ्ट को सख्ती से कनेक्ट करने की अनुमति देगा। यह कनेक्टिंग ट्यूब के अपर्याप्त बन्धन के कारण मेरे वर्तमान मामले में होने वाले स्क्रॉल से बच जाएगा।
आगे का विवरण GitHub पर पाया जा सकता है ।
पोस्ट करनेवाले: मिखाइल शार्दिन ,
17 दिसंबर 2019