प्रविष्टि
एक स्मार्ट घर के लिए समाधान चुनने की प्रक्रिया में, मैं उन बॉक्सिंग समाधानों को बायपास करने की कोशिश करता हूं जिनके लिए बाहरी बादलों के साथ संचार की आवश्यकता होती है या उनके स्वयं के अनुप्रयोग होते हैं, विशेष रूप से समाधान सीधे डिवाइस से कनेक्ट होने की क्षमता के बिना। सभी उपलब्ध मीट्रिक एक इंटरफ़ेस - ज़ैबिक्स पर कम हो जाती हैं, जहां एक हितधारक चेतावनी प्रणाली का आयोजन किया जाता है। नियंत्रण knobs स्थानीय रूप से स्थित वेब इंटरफ़ेस में कार्यान्वित किए जाते हैं।
पिछले लेख:
एक भाग (1wire तापमान, अप, पानी का मीटर ...)
भाग दो (जाल, gidrolock, दबाव सेंसर ...)
इस लेख में हल किए गए कार्य
- ज़ैबिक्स अलर्ट के साथ स्केलेबल, लचीला पानी रिसाव संरक्षण
- 433mhz पर अन्य उपकरण: घंटी, दरवाजा खुला, आदि।
- हम एमक्यूटीटी में 1वायर को धक्का देते हैं
रिसाव संरक्षण प्रणाली
सिस्टम आवश्यकताएँ:
- घर के चारों ओर बहुत सारे सेंसर बिखरे हुए हैं (मेरे मामले में - विभिन्न स्थानों में 6 टुकड़े)
- सेंसर पर कोई तार नहीं
- रिसाव का पता लगाने पर त्वरित बंद
- zabbix में सभी वर्तमान स्थिति की जानकारी। अलर्ट है
सिस्टम संरचना
- रास्पबेरी पीआई
- RTL2832U USB ट्यूनर
- लीक सेंसर 433mhz
- ट्रंक को बंद करने के लिए नेटपिंग + गिडरलॉक क्रेन (पिछले लेख देखें)
लोहे के बारे में
पिछले एक लेख में, मैंने नेटिंग का उपयोग करके पानी की आपूर्ति बंद करने के समाधान का वर्णन किया। मेरे पास इस समाधान के लिए एक वायर्ड सेंसर है। यह सुविधाजनक है अगर सभी बिंदु जहां रिसाव हो सकता है, लगभग एक ही स्थान पर हो। मेरे मामले में, हाइविंग के प्रवेश द्वार पर सीधे जाल लगाया जाता है और उसी स्थान पर इलेक्ट्रो-मैकेनिकल गिड्रोलॉक क्रेन को नियंत्रित करता है (पिछले लेख देखें)। सभी बिंदुओं पर बिखरे जाल + गिडार्लोक + वायर्ड सेंसर महंगा और बोझिल है। इसके अलावा, मुझे अब घर के चारों ओर नए तारों को खींचने का अवसर नहीं मिला है। बिजली के क्रेन में सॉकेट्स और साँस लेना एक बहुत ही समाधान है। अपेक्षित समाधान - हम स्थानों पर फैले रेडियो सेंसर से संकेतों के आधार पर सामान्य राजमार्ग के ओवरलैप का उपयोग करते हैं।
इंटरनेट पर क्या मिला - तैयार सिस्टम से विभिन्न रेडियो सेंसर का एक गुच्छा। कुछ को अलग से खरीदा जा सकता है, मैंने सेंसर के लिए नियंत्रक नहीं खरीदा, ताकि सर्किट में अतिरिक्त तत्वों का उत्पादन न हो।
मैं 433mhz कैसे पकड़ सकता हूं? यह पता चला है - एक विशिष्ट चिपसेट पर एक टीवी ट्यूनर। और अब वह एक पैसे के लायक है (मैंने 300r के लिए Avito पर लिया) इस तरह से:

मैंने 12dbi पर इसके लिए एक अलग एंटीना का आदेश दिया, क्योंकि वर्तमान में पूरे घर को कवर नहीं किया गया था।
चूंकि मैंने सर्किट के नियंत्रण घटकों को कम करने की कोशिश की, इसलिए ओपनरट के साथ अपने होम राउटर में ट्यूनर को कसने की इच्छा थी, जो अब तक 1वायर, मोडबस, वाईफाई सेंसर / प्रोटोकॉल के लिए स्मार्ट होम समाधान का मूल था, लेकिन, दुर्भाग्य से, मैंने इसके कुछ संसाधनों को समाप्त कर दिया ( आवश्यक सॉफ्टवेयर समाप्त होने के लिए अंतर्निहित फ्लैश ड्राइव पर स्थान, प्रोसेसर कुछ के साथ लोड होता है - नेटवर्क के साथ पहले से ही समस्याएं होंगी, और हमारे पास ऑनलाइन देखने के लिए 4k है :), + यूएसबी पर लटकाए गए पहले से ही बहुत सारी चीजें हैं, जो डेटा संग्रह की स्थिरता को प्रभावित करती हैं)। स्मार्ट होम की कार्यक्षमता को धीरे-धीरे एक बाहरी डिवाइस पर स्थानांतरित करने का निर्णय लिया गया था - रार्बेरी पी (पहले संस्करणों में से एक हाथ में था)।
सॉफ्टवेयर के बारे में
विंडोज़ के साथ एक डेस्कटॉप कंप्यूटर पर एसडीआर-शार्प टीवी ट्यूनर के साथ खेलने के बाद (अन्य लोगों के रेडियो और विमान वार्ता को पकड़ने की कोशिश करते हुए), मैंने यह देखना शुरू किया कि क्या सेंसर खुद "सीटी" देखते हैं। हाँ, यह पूरी तरह से देखता है:

रास्पबेरी सेटिंग
मैंने देशी रास्पियन चुना। मैंने मैक / लिनक्स के तहत यूएसबी फ्लैश ड्राइव पर अंतिम छवि लिखी:
sudo dd if=2019-07-10-raspbian-buster-lite.img of=/dev/disk2 bs=1048576 conv=sync
बूट, संजाल विन्यस्त करें और ssh।
अगला - रास्पबेरी पैकेज rtl-sdr, rtl_433 पर डालें:
sudo apt-get install cmake build-essential python-pip libusb-1.0-0-dev libusb-1.0 python-numpy git git clone https://github.com/merbanan/rtl_433.git cd rtl_433/ mkdir build cd build cmake .. make make install
rtl_433 में अंतर्निहित प्रोटोकॉल हैं जो 433mhz रेंज में संचालित विभिन्न उपकरणों से डेटा को डिक्रिप्ट करते हैं।
हम rtl_433 शुरू करते हैं
rtl_433 -f 433.9e6
हम पानी में सेंसर को कम करते हैं और पोषित करते हैं:
time : 2019-09-17 15:04:39 model : Smoke detector GS 558 id : 16919 unit : 1 learn : 0 Raw Code : c842e1
स्मोक डिटेक्टर? ठीक है, चलो इन सेंसरों से अलर्ट पर गीत "पानी पर धुआँ" डालें ... :)
लेकिन गंभीरता से - हमारे पास प्रत्येक सेंसर की आईडी है, जिसके अनुसार भविष्य में हम समझेंगे कि वास्तव में हमारे पास कहां रिसाव है (और हम किसी भी मामले में बंद हो जाएंगे)।
लीकेज सेंसर के बारे में



सॉफ़्टवेयर के हिस्से को स्थापित करने के बाद, मैंने देखा कि एलिएक्सप्रेस (बाएं फ़ोटो) के साथ सेंसर पानी में संपर्क में आने पर एक ही संकेत भेजते हैं। इसके अलावा एक भी संकेत अगर पानी संपर्कों को बंद कर देता है। यह मुझे किसी भी तरह से सूट नहीं करता है (अपेक्षित व्यवहार: लगातार सेंसर सिग्नल भेजता है जब सेंसर पानी में हो जाता है, क्योंकि एक भी सिग्नल खो सकता है)। यदि आप एक तार के साथ संपर्कों को बंद करते हैं तो एक समान व्यवहार मनाया जाता है। लेकिन क्या अजीब है - अलार्म हर 2-3 सेकंड में होता है, यदि आप अपने हाथों (त्वचा) के साथ संपर्क बंद करते हैं। यहां मुझे अभी भी दो धारणाएं हैं: या तो चीनी ने प्रतिरोध माप के साथ खराब कर दिया है, या सेंसर के पास ऑपरेशन के कुछ अन्य तरीके हैं, जिसमें वे किसी भी तरह से अलग व्यवहार करते हैं (उदाहरण के लिए, एक नियंत्रक के साथ रखा), या अन्य आवृत्तियां हैं (जब तक मुझे नहीं मिला )।
वैसे, टिप्पणियों में लिखें, हो सकता है कि किसी ने इन सेंसर के साथ काम किया हो, क्या उन्हें किसी तरह लगातार लीक के बारे में संकेत भेजने के लिए "सिखाया" जा सकता है?मैंने इन सेंसर को एक तरफ रख दिया, शस्त्रागार में माणिक (दाएं फोटो) से एक और लेरॉय: गाल SHW-1005 (मध्य फोटो) खरीदा गया था।
रूबेटेक सेंसर का व्यवहार पूरी तरह से अप्रत्याशित लग रहा था (अप्रत्याशित प्रतिक्रिया "पानी देखता है / नहीं देखता है")।
लेकिन इस कदम पर लेरॉय से सेंसर ने वही दिखाया जो मुझे चाहिए था: पानी है - मैं इसे हवा पर स्पैम करता हूं, कोई पानी नहीं है - मैं चुप हूं। इसका एकमात्र माइनस अन्य सेंसरों की तुलना में कार्रवाई का एक छोटा त्रिज्या है। लेकिन रिसीवर के लिए अधिक संवेदनशील एंटीना खरीदने से समस्या हल हो गई थी।
MQTT
Zabbix को rtl_433 आउटपुट कैसे भेजें? एजेंट को खिलाओ? प्रक्रिया का विश्लेषण करने के लिए zabbix_sender को भेजें? शायद syslog के माध्यम से?
यहाँ आपको याद रखने की ज़रूरत है कि मेरा ज़ेबिक्स बादलों में कहीं है। और निश्चित रूप से इसके ट्रिगर की मदद से पानी को अवरुद्ध करना आवश्यक नहीं है। घर का फर्श तब तक भर जाएगा जब तक कि वह निर्णय नहीं ले लेता (यदि उपलब्ध हो)।
अच्छी खबर यह है कि rtl_433 MQTT पर सूचना भेज सकता है। बॉक्स से बाहर। उसी समय, ब्रोकर को json फॉर्मेट में ब्रोकर के पास डेटा भेजा जाता है।
तो आप की जरूरत है:
- एक स्थानीय मच्छर दलाल रखें (इसे रास्पबेरी पर करें)।
- वांछित विषय के साथ ब्रोकर में जानकारी को मर्ज करें, ताकि बाद में इसे पार्स किया जा सके।
- रास्पबेरी पर स्थानीय स्तर पर ब्रोकर से कनेक्ट करें और नेटिंग के लिए कमांड भेजें
- ब्रोकर को उस जगह से कनेक्ट करें जहां ज़ैबिक्स पर पुनर्निर्देशन होगा (मेरे मामले में ज़ैबिक्स सर्वर भी एक एमक्यूटीटी क्लाइंट है)
स्थापना-सेटअप मच्छर एमक्यूटीटी:
apt-get install mosquitto mosquitto-clients systemctl enable mosquitto systemctl start mosquitto
हम उपकरण आईडी को इंगित करने वाले ब्रोकर को सूचना भेजते हैं:
rtl_433 -f 433.88e6 -F mqtt://127.0.0.1,events=/433/[id]
Mqtt क्लाइंट में हमें निम्नलिखित जैसा कुछ मिलेगा:
mosquitto_sub -h 127.0.0.1 -t '#' ( ) /433/16919 {"time":"2019-09-18 11:55:29","model":"Smoke detector GS 558","id":16919,"unit":1,"learn":0,"code":"c842e1"}
ब्रोकर से कनेक्ट करने के लिए स्क्रिप्ट और नेटिंग के लिए कमांड भेजें
मैंने एक सरल MQTT स्क्रिप्ट क्लाइंट को स्केच किया जो आपको कॉन्फ़िगरेशन में निर्दिष्ट विषय दिखाई देने पर विषय से जुड़ी स्क्रिप्ट को चलाने की अनुमति देता है। इस प्रकार, जब एक निश्चित सेंसर चालू हो जाता है और इसके बारे में जानकारी वायु पर दिखाई देती है (उदाहरण के लिए, / 433/16919), तो आप कुछ कार्रवाई कर सकते हैं (जाल लगाने के मामले में, क्रेन को बंद करने के लिए एक अनुरोध भेजें, पिछला लेख देखें)। स्क्रिप्ट का एक लिंक लेख के अंत में है।
ज़ेबिक्स में पुनर्निर्देशन
मैंने रेडीमेड मक़्त-ज़बाबिक्स समाधान का उपयोग किया। अपने स्तर पर, हम समझते हैं कि किस आइटम में मूल्य भेजना है (आईडी द्वारा)।
Keys.cfg में, निर्दिष्ट करें:
/433/16919,mqtt.ventilation.waterleak::hostname
जहाँ होस्टनाम Zabbix में आइटम ट्रम्प प्रकार के साथ होस्ट नाम है।
महत्वपूर्ण !!! सेटिंग्स में होस्ट नाम स्क्रिप्ट में भेजे जाने वाले नाम के अनुरूप होना चाहिए, आइटम का प्रकार (डेटा तत्व) भेजे जाने वाले डेटा के लिए उपयुक्त होना चाहिए (उदाहरण के लिए, json - पाठ के लिए), अन्यथा आप त्रुटियों को पकड़ लेंगे
2019-09-18 14:29:48,749 Got response from Zabbix: {u'info': u'processed: 0; failed: 1; total: 1; seconds spent: 0.000055', u'response': u'success'}
इसके अलावा, zabbix से अधिक डिबग (और क्यों विफल) हासिल करना मुश्किल है।
हम /etc/mqtt-zabbix/mqtt-zabbix.cfg (ip mqtt ब्रोकर और zabbix सर्वर का पता निर्दिष्ट करें) कॉन्फ़िगर करते हैं।
433 से और क्या जुड़ना है?
हाँ, कुछ भी! :)मौसम स्टेशन सेंसर
वायरलेस लीकेज सेंसर के साथ छेड़छाड़ करते हुए, मैंने गलती से एक मौसम स्टेशन से बाहरी सेंसर से सिग्नल पकड़ा। ऐसा लग रहा था:
time : 2019-09-19 10:48:54 Protocol : 56 model : TFA pool temperature sensor Id : 182 Channel : 3 Temperature: 19.3 C Modulation: ASK Freq : 433.9 MHz RSSI : -0.1 dB SNR : 35.0 dB Noise : -35.2 dB time : 2019-09-20 10:57:29 Protocol : 12 brand : OS model : THN132N House Code: 4 Channel : 3 Battery : OK Celsius : 20.00 C Modulation: ASK Freq : 432.9 MHz RSSI : -0.2 dB SNR : 31.5 dB Noise : -31.7 dB
इस प्रकार, बोनस ज़ैबिक्स में प्रदर्शन के साथ हवा के ऊपर बिंदुओं के तापमान की निगरानी करने की क्षमता थी। बस कुछ कमरों में मैं केबल नहीं फैला सकता।
दर्वाज़ी की घंटी
बहुत सारी रेडियो कॉल एक ही फ्रीक्वेंसी रेंज ~ 433mhz में काम करती हैं। इस प्रकार, हम कॉल बटन को दबाने से रोक सकते हैं (कॉल स्वयं होना आवश्यक भी नहीं है, बस बटन पर्याप्त है)। क्यों? उदाहरण के लिए, एसएमएस / टेलीग्राम / जो कुछ भी हो या कैमरे से छवि को मॉनिटर पर प्रदर्शित करना हो, के लिए अतिरिक्त अधिसूचना कॉन्फ़िगर करना।
मैंने एक कॉल खरीदी: एवोलॉजी क्यूए-688-ई आरयू।
कॉल बटन देखने के लिए rtl_433 बटन के लिए, आपको "परीक्षण" प्रोटोकॉल को सक्रिय करने की आवश्यकता है, उदाहरण के लिए "जी" विकल्प के साथ चलकर या एक विशिष्ट अतिरिक्त प्रोटोकॉल निर्दिष्ट करके, उसी समय हम प्रोटोकॉल और आवृत्ति के बारे में जानकारी का आउटपुट जोड़ देंगे:
rtl_433 -f 433.9e6 -G -M protocol -M level -F mqtt://127.0.0.1,events=/433/[id] &
MQTT में जाओ:
{"time":"2019-09-30 10:57:00","protocol":72,"model":"RF-tech","id":0,"battery":"LOW","temperature_C":0,"button":0,"mod":"ASK","freq":433.84822,"rssi":-3.5981,"snr":33.77488,"noise":-37.373}
यहाँ आप id = 0 देख सकते हैं। उसी समय, मेरे पास आरएफ-टेक के रूप में पहचाने जाने वाले कई उपकरण थे। इन सभी में आईडी बराबर थी। परिणामस्वरूप, ज़ैबिक्स के सभी उपकरणों को एक आइटम के रूप में प्रदर्शित किया जाता है। यह ठीक से भेद करना संभव है कि किस उपकरण ने काम किया, केवल आवृत्ति द्वारा।
हम आवृत्ति को एक अलग आश्रित मद में खींचते हैं: mqtt.outside.doorbell.freq, JSON के साथ $ .freq (zabbix 4 वें संस्करण से ऐसा कर सकते हैं) पर प्रीप्रोज़ कर रहे हैं।
इस आइटम पर, अभिव्यक्ति के साथ ट्रिगर करें:
{HOME_PI:mqtt.outside.doorbell.freq.last()}>433.8 and {HOME_PI:mqtt.outside.doorbell.freq.last()}<433.81 and {HOME_PI:mqtt.outside.doorbell.freq.nodata(30)}=0
यानी अगर अचानक सामान्य आइटम mqtt.outside.doorbell.freq (nodata) में एक मूल्य दिखाई देता है और आवृत्ति 433.8 और 433.81 के बीच निर्दिष्ट सीमा में है, तो हम यह निष्कर्ष निकाल सकते हैं कि वे हमें बुला रहे हैं (और उदाहरण के लिए, एसएमएस को कॉल की नकल करने के लिए)।
डोर / विंडो सेंसर्स
मेरे पास रूबेक से एक प्रवेश सेंसर है। निम्नलिखित भेजता है:
{"time":"2019-09-30 14:11:28","protocol":86,"model":"Smoke detector GS 558","id":12262,"unit":16,"learn":0,"code":"e5fcd0","mod":"ASK","freq":433.85021,"rssi":-3.99241,"snr":33.38058,"noise":-37.373} : {"time":"2019-09-30 14:11:28","protocol":68,"model":"Kerui Security","id":46074,"cmd":7,"state":"close","mod":"ASK","freq":433.85021,"rssi":-3.99241,"snr":33.38058,"noise":-37.373} : {"time":"2019-09-30 14:11:21","protocol":68,"model":"Kerui Security","id":46074,"cmd":14,"state":"open","mod":"ASK","freq":433.85005,"rssi":-11.0148,"snr":25.1088,"noise":-36.1236}
जैसे ही आखिरी रेडियो सेंसर को zabbix में जोड़ा गया, मैं MQTT पर सब कुछ फिर से करना चाहता था। सुविधाजनक कैटलॉगिंग, आप विषय-आह और प्लेसमेंट और उपकरणों के प्रकार निर्धारित कर सकते हैं। आपको सभी घटनाओं का सामान्य प्रसारण मिलता है।
1वायर टू एमक्यूटीटी
मैं चाहता हूं कि सब कुछ एमक्यूटीटी में हो, कम से कम उसी तरह के कार्यान्वयन के लिए। मैं घटनाओं का एक सामान्य "ईथर" और इन घटनाओं की प्रतिक्रिया में एक सामान्य दृष्टिकोण प्राप्त करना चाहता हूं। बेशक, ज़ैबिक्स प्रतिक्रिया की समस्या को हल करता है, और मैं इस पर अलर्ट छोड़ देता हूं। लेकिन मैं प्रबंधन को और अधिक हल्का बनाना चाहता हूं, प्रणाली और "ईथर" के करीब।
1वायर नेटवर्क से MQTT में सेंसर रिले के लिए तैयार-किए गए समाधान मौजूद हैं, लेकिन उन्होंने मुझे सूट नहीं किया। नोड पर तैयार समाधान या तो उनके पीछे निर्भरता का एक गुच्छा ले जाते हैं, या पूरे रास्पबेरी प्रोसेसर को खा जाते हैं। Google खोज में शीर्ष 10 से कुछ समाधान लेखकों द्वारा छोड़ दिए गए हैं, कुछ केवल तापमान सेंसर द्वारा समर्थित हैं। Gpio इंटरफ़ेस के माध्यम से जानकारी एकत्र करने वाले गेटवे का एक वर्ग भी है। यह सब मुझे शोभा नहीं देता था।
मेरे पास / mnt / 1wire में 1wire उपकरणों के साथ एक माउंटेड छद्म फाइल सिस्टम है, जहां से मैं सभी आवश्यक जानकारी प्राप्त करना चाहता हूं। ऐसा करने के लिए, बैश पर एक सरल एक-लाइन बनाने के लिए पर्याप्त है, प्रत्येक सेंसर के लिए मच्छर_पब के माध्यम से डेटा भेजना। हालांकि, इन लिपियों को लॉन्च करने (ऊपर से, कुछ प्रकार के डेमॉन में ड्राइव करने के लिए) पर सवाल उठता है?), डेटा की सामान्य प्रस्तुति (एक ही जसन प्राप्त करना), एक नया सेंसर जोड़ना, आदि जैसे ही आगे विचार विकसित हुआ, अधिक बैसाखी का जन्म हुआ। इस कार्य के लिए एक और उल्लू के लिए एक गेटवे लिखना आसान हो गया है।
एक कॉन्फ़िगरेशन फ़ाइल है जिसमें हमें सेंसर की आईडी और फ्यूज से उन फाइलों को दर्ज करना होगा जिन्हें हम mqtt पर प्रकाशित करना चाहते हैं।
Mqtt में आउटपुट निम्न json है:
/1wire/28.0425260a0000 {"type": "DS18B20", "temperature": "30"} /1wire/28.bf16270a0000 {"type": "DS18B20", "temperature": "7.9375"} /1wire/26.da2f71010000 {"temperature": "25.2812", "IAD": "1", "CA": "0", "VAD": "0.91", "VDD": "4.59", "type": "DS2438"} /1wire/28.48b3010b0000 {"type": "DS18B20", "temperature": "40.5625"} /1wire/1d.6a9306000000 {"type": "DS2423", "counter.B": "9", "counter.A": "9219"} /1wire/28.61cc260a0000 {"type": "DS18B20", "temperature": "12.5"}
ऑटोरन में जोड़ें, मतदान अंतराल सेट करें। समस्या हल हो गई है।
संदर्भ
github.com/merbanan/rtl_433 - रेडियो प्रोटोकॉल डिकोड करने का एक उपकरण
github.com/kylegordon/mqtt-zabbix - Zabbix पर MQTT
github.com/unlo/1wire2mqtt - MQTT, MQTT क्लाइंट में 1wire जो आपको विषय के प्रकट होने पर स्क्रिप्ट चलाने की अनुमति देता है