جدول المحتويات:

Home Assistant Geiger Counter Integration: 8 خطوات
Home Assistant Geiger Counter Integration: 8 خطوات

فيديو: Home Assistant Geiger Counter Integration: 8 خطوات

فيديو: Home Assistant Geiger Counter Integration: 8 خطوات
فيديو: Nuclear Famine: A Billion People & a Planet at Risk with Dr. Andrew Kanter, M.D., M.P.H. 2024, يوليو
Anonim
Image
Image
مبدأ العمل
مبدأ العمل

في هذا البرنامج التعليمي ، سأوضح كيف يمكنك إضافة مستشعرات مخصصة إلى HASS (مساعد منزلي) بشكل أكثر تحديدًا عداد جيجر ولكن العملية مماثلة لأجهزة الاستشعار الأخرى أيضًا.

سنستخدم لوحة NodeMCU وعداد جيجر القائم على اردوينو ومساعد منزلي مثبت بالفعل.

سيعتمد التكامل على خادم MQTT (عام أو خاص) وسأخذك خطوة بخطوة مع هذا.

في حال كنت لا تعرف ما هو المساعد المنزلي ، يرجى زيارة صفحتهم https://www.home-assistant.io/. إنها منصة أتمتة منزلية معروفة جيدًا وتتم صيانتها جيدًا وقابلة للتخصيص بدرجة كبيرة.

سوف تتعلم عن:

- التكوين المتقدم لـ Home Assistant

- NodeMCU (لوحة التطوير) وكيفية برمجتها باستخدام Arduino IDE

- OTA (عبر الهواء التحديثات) باستخدام Arduino IDE للوحة NodeMCU

- كيفية توصيل جهاز تسلسلي بـ NodeMCU

- تثبيت خادم MQTT يدويًا على نظام Linux (اختياري)

الافتراضات الأساسية:

- لديك Home Assistant قيد التشغيل

- أنت تعرف القليل عن الإلكترونيات

- لديك Arduino IDE مثبتًا

الخطوة 1: الأجزاء والأدوات

القطع:

1. مجلس NodeMCU

2. الخبز

3. أسلاك جوبر ذكر و ذكر و أنثى

3. USB إلى كابل USB الصغير

4. اردوينو عداد جيجر مع واجهة تسلسلية

(ابحث في Ebay عن "arduino geiger couter")

5. مادة مشعة (اختياري عينة اختبار صغيرة)

أدوات:

1. Arduino IDE

2. تثبيت مساعد المنزل

الخطوة الثانية: مبدأ العمل

هدفنا هو أن نظهر على HomeAssistat (HASS) القراءات من عداد جيجر. من ناحية ، لدينا خادم HASS يعمل في مكان ما ، قد يكون raspberry pi أو أي جهاز آخر ، وعلى الجانب الآخر لدينا عداد جيجر.

يحتوي عداد جيجر على منفذ تسلسلي ، وسيكون أحد الحلول هو إرفاق المنفذ التسلسلي مباشرةً بـ RaspberryPi الذي يعمل عليه HASS.

بعض الأسباب التي قد تجعل الفكرة غير جيدة:

- لا توجد مساحة فعلية هناك

- لدينا بعض الأجهزة الأخرى على المنفذ التسلسلي

- نريد إرفاق مستشعر بيئي يجب وضعه في الخارج بدلاً من عداد جيجر

حسنًا ، سنستكشف إمكانية أخرى لإجراء الاتصال عبر WIFI:

يدعم HASS قراءة بيانات المستشعر وعرض أنه من خلال خادم MQTT ، فإن هذا النوع من الخادم عبارة عن اتصال خفيف الوزن للأجهزة الصغيرة يقوم أحد الأجهزة بنشر رسالة حول "موضوع" ويستمع الآخر إلى هذا الموضوع لتلقي الرسالة. لذلك سوف يستمع HASS ، ونحن بحاجة إلى شيء ينشر الرسالة.

يعرف المستشعر الخاص بنا فقط التحدث عبر الخط التسلسلي ، لذلك سنستخدم لوحة يمكنها قراءة سطر تسلسلي ويمكنها الاتصال عبر WIFI والتحدث إلى خادم MQTT. لوحة رخيصة تقوم بذلك هي NodeMCU.

يمكن برمجة NodeMCU باستخدام Arduino IDE. الرسم بسيط للغاية ، يقوم بما يلي:

- يتصل بشبكة WIFI

- يحافظ على اتصال MQTT بالخادم ويعيد محاولة الاتصال عند الفشل أو قطع الاتصال

- يستمع إلى البيانات التسلسلية الواردة على شكل سلسلة من الأعداد الصحيحة

- بمجرد وصول عدد صحيح يرسله عبر MQTT إلى موضوع معين

الخطوة 3: قم بتجميع الجهاز

قم بتجميع الجهاز
قم بتجميع الجهاز

سنستخدم الألواح والأسلاك بحيث يكون الأمر بسيطًا إلى حد ما ، ولدينا بضع خطوات:

- ضع NodeMCU على اللوح

- قم بتوصيل أنبوب جيجر بعداد جيجر (احترس من القطبية)

- VIN يذهب إلى عداد جيجر +

- GND يذهب إلى عداد جيجر -

- ينتقل NodeMCU D7 (دبوس 13) إلى geiger TX

- ينتقل NodeMCU D8 (دبوس 15) إلى geiger RX

- تشغيل NodeMCU من خلال micro USB من الكمبيوتر

الخطوة 4: قم بتحميل الكود

قم بتحميل الكود
قم بتحميل الكود
قم بتحميل الكود
قم بتحميل الكود
قم بتحميل الكود
قم بتحميل الكود
قم بتحميل الكود
قم بتحميل الكود

سنستخدم Arduino IDE وسنتأكد من تثبيت لوحة NodeMCU وتثبيت مكتبة Adafruit_MQTT.

1. استنساخ مستودع جيثب: https://github.com/danionescu0/arduino وانسخ الرسم التخطيطي من المشاريع / HASSGeigerIntegration إلى موقع دفتر رسم اردوينو الخاص بك

2. افتح Arduino IDE وقم بتثبيت NodeMCU

- انتقل إلى ملف -> التفضيلات ، في عناوين URL الإضافية لمدير اللوحات ، أضف https://arduino.esp8266.com/stable/package_esp8266com_index.json إذا كان لديك بالفعل شيء هناك ضع غيبوبة في المقدمة وانقر فوق موافق

- من Tools -> Board -> Board Manager اكتب "nodemcu" وحدد الإدخال esp8266 بواسطة ESP8266 Community ، واضغط على تثبيت

3. قم بتثبيت Adafruit_MQTT

- انتقل إلى الأدوات -> إدارة المكتبات -> ابحث عن "Adafruit_MQTT" وقم بتثبيت "مكتبة Arduino MQTT"

4. قم بتوصيل كبل USB بجهاز الكمبيوتر الخاص بك وقم بتكوين اللوحة:

- انتقل إلى Tools -> Board -> حدد NodeMcu 1.0

- الأدوات -> المنفذ -> منفذ USB الخاص بك

- اترك الإعدادات الأخرى دون تغيير

4. في المخطط ، قم بتغيير بيانات اعتماد WIFI لتتطابق مع بيانات اعتمادك:

#define STASSID "ssid" // استبدل بـ WIFI SSID الخاص بك

#define STAPSK "pass" // استبدل بكلمة مرور WIFI

5. قم بتحميل الرسم التخطيطي إلى لوحك وبعد التحميل أعد ضبط اللوحة من الزر

6. افتح الشاشة التسلسلية ، إذا سارت الأمور على ما يرام ، سترى بعض الإخراج مثل هذا:

تمهيد

عنوان IP: 192.168.1.168 تمكين OTA الاتصال بـ MQTT… MQTT متصل! {"إشعاع": 0.03}..

الخطوة 5: تكوين HomeAssistant

تكوين HomeAssistant
تكوين HomeAssistant
تكوين HomeAssistant
تكوين HomeAssistant

سنفترض أن لديك مساعد منزلي يعمل. على نظامي لدي HASSOS الإصدار 3.12 على RaspberryPi. إذا كان إصدارك من المساعد المنزلي قديمًا جدًا أو جديدًا جدًا ، فقد تختلف بعض الميزات. يعمل هذا البرنامج التعليمي بالتأكيد مع إصدار 3.12.

إذا لم يكن لديك Home Assistant مثبتًا لديك ، فراجع دليل التثبيت الرسمي الخاص به:

قبل التقدم في التثبيت ، تأكد من توصيل NodeMCU ونشر البيانات.

حسنًا ، لدينا سلسلة من الخطوات هنا أيضًا للتهيئة:

1. قم بتثبيت "محرر الملفات" إذا لم يكن موجودًا في القائمة ، فإليك البرنامج التعليمي الرسمي:

2. قم بتحرير ملف "/config/configuration.yaml" وأضف ما يلي واحفظه

- قسم mqtt إذا لم يكن لديك بالفعل

mqtt:

الوسيط: broker.hivemq.com discovery: true discovery_prefix: ha

- قسم الحساسات

المستشعر:

- النظام الأساسي: اسم mqtt: "الإشعاع" state_topic: "ha / radiation" unit_of_measurement: 'uSv' unique_id: "الإشعاع" value_template: "{{value_json.radiation}}"

3. من التكوين -> عناصر تحكم الخادم: اضغط على "التحقق من التكوين" وفحص ملف تهيئة yaml بحثًا عن الأخطاء ، ثم اضغط على "إعادة التشغيل" وانتظر حتى يتم إعادة تشغيله

4. من نظرة عامة -> قائمة الزاوية اليمنى العليا -> تكوين واجهة المستخدم -> اضغط على زر + من أسفل اليمين

5. حدد "مستشعر" من القائمة -> في حقل "الكيان" ابحث عن "sensor.radiation" ، في حقل الاسم اكتب "Radiation" وانقر فوق "موافق" ، يجب أن يكون في الصفحة الرئيسية الآن

الخطوة 6: تكوين خادم MQTT الخاص بك [اختياري]

دعونا نناقش قليلا عن MQTT

“MQTT هو بروتوكول نقل الرسائل لنشر / الاشتراك في خادم العميل. إنه خفيف الوزن ومفتوح وبسيط ومصمم بحيث يكون سهل التنفيذ. تجعل هذه الخصائص مثالية للاستخدام في العديد من المواقف ، بما في ذلك البيئات المقيدة مثل الاتصال في سياقات من آلة إلى آلة (M2M) وإنترنت الأشياء (IoT) التي تتطلب بصمة رمز صغيرة و / أو عرض النطاق الترددي للشبكة أعلى سعر."

اقتباس من مواصفات MQTT 3.1.1 الرسمية.

لذلك يمكننا في الأساس نشر رسالة في مكان ما من جانب وعلى الجانب الآخر يمكننا الاستماع إلى تلك الرسائل والقيام بشيء ما باستخدام البيانات. دعم MQTT "المواضيع" ، الموضوعات هي السلاسل التي يستخدمها الوسيط لتصفية الرسائل لكل عميل ، لذلك إذا نشرنا رسالة إلى موضوع "الإشعاع / الإشعاع" ، يجب على المستمع الاشتراك في نفس الموضوع للحصول على الرسائل التي نرسلها.

إليك برنامج تعليمي رائع حول MQTT بالتفصيل:

استخدام خادم الخلية المجاني هناك بعض العيوب مثل:

- سيتلقى أي شخص يستمع إلى موضوعك رسائلك

- إذا انخفض أو تطلب الدفع لاحقًا ، فلن تتمكن من استخدامه (ما لم تدفع)

- إذا كان أي شخص ينشر رسائل على نفس الموضوع ، فستتلقى رسائله أيضًا ، فقد ينشر رسائل غير متوافقة ويكسر الرسوم البيانية HASS الخاصة بك

باستخدام خادم خاص

إذا كنت لا ترغب في استخدام الخادم المجاني العام ، فلديك خيار خادم خاص. سنقوم بتثبيت Mosquitto MQTT على خادم ubuntu / Debian مثل raspberry pi أو الكمبيوتر.

Mosquitto هو خادم يقوم بتنفيذ بروتوكول MQTT وهو مجاني.

لتثبيته ، قم بتسجيل الدخول إلى raspnerry pi أو خادم آخر قائم على دبيان وقم بتشغيل:

sudo apt التحديث

sudo apt install -y mosquitto mosquitto-clients sudo systemctl تمكين mosquitto.service

سيؤدي هذا إلى تحديث المستودع وتثبيت خادم البعوض والعميل وتمكينه من تشغيل الخدمة عند بدء التشغيل

للحصول على خادم IP ، قم بتنفيذ ما يلي:

اسم المضيف -أنا

وسيخرج شيئًا مثل:

192.168.1.52 172.17.0.1 172.18.0.1

إذن عنوان IP الخاص بي هو 192.168.1.52 ، في الأوامر أدناه ، استبدله بـ IP الخاص بك

يمكنك اختبار خادم MQTT عن طريق نشر رسالة واستلامها باستخدام أداة وحدة التحكم ، حيث يجب فتح هاتين المحطتين ، أحدهما يستمع لرسالة ، أحدهما سينشر الرسالة.

أولاً ، في المحطة ، قم بتشغيل هذا الأمر للاستماع إلى رسالة حول "/ some-topic"

mosquitto_sub -h 192.168.1.52 -t / بعض-موضوع

افتح طرفية أخرى وانشر رسالة على هذا الموضوع:

mosquitto_pub -h 192.168.1.52 -t / some-topic -m '{"humidity": 74.0}'

سترى في المحطة الأولى "{" humidity ": 74.0}" مطبوعًا.

انتباه خاص:

- يفترض هذا الإعداد أن HASS و Mosquitto و NodeMCU متصلون بنفس شبكة WIFI ولا توجد قواعد جدار حماية ويمكنهم التواصل بحرية

- لا يحتوي خادم Mosquitt MQTT على اسم مستخدم / كلمة مرور ، إذا كنت تريد إعداد بيانات الاعتماد ، فتحقق من ذلك: https://www.steves-internet-guide.com/mqtt-username-password-example/ كما ستحتاج إلى التهيئة بيانات الاعتماد في Home Assistant وفي رسم اردوينو

الخطوة 7: OTA (تحديثات عبر الهواء) لـ NodeMCU

تعني التحديثات عبر الهواء أنه يمكن وميض لوحة التطوير لاسلكيًا دون الحاجة إلى كابل مادي.

يدعم Arduino IDE هذه الوظيفة لسلسلة ESP8266 وبعض اللوحات الأخرى:

- يتطلب فلاش أولي فوق كابل USB

- ينشئ منفذًا افتراضيًا عبر WIFI ويكون مرئيًا فقط من Arduino IDE

- لا تتوفر معلومات تصحيح تسلسلي

- يدعم الحماية بكلمة مرور

لتمكين OTA في رسم ESP8266 ، قم أولاً بتضمين المكتبة:

# تضمين "ArduinoOTA.h"

حدد أيضًا ثابت كلمة مرور الرسم هذا:

#define SKETCHPASS "some_password"

أضف السطور التالية في قسم الإعداد:

بينما (WiFi.waitForConnectResult ()! = WL_CONNECTED) {

Serial.println ("فشل الاتصال! إعادة التشغيل …")؛ تأخير (5000) ؛ ESP.restart () ، } ArduinoOTA.setPassword (SKETCHPASS) ؛ ArduinoOTA.onStart ( () {String type؛ if (ArduinoOTA.getCommand () == U_FLASH) {type = "sketch"؛} else {// U_FS type = "filesystem"؛} Serial.println ("ابدأ التحديث "+ type) ؛}) ؛ ArduinoOTA.onEnd ( () {Serial.println ("\ nEnd") ؛})؛ ArduinoOTA.onProgress ( (التقدم غير الموقعة ، إجمالي عدد الصفحات غير الموقعة) {Serial.printf ("التقدم:٪ u ٪٪ / r" ، (التقدم / (إجمالي / 100))) ؛}) ؛ ArduinoOTA.onError ( (خطأ ota_error_t) {Serial.printf ("خطأ [٪ u]:" ، خطأ) ؛ إذا (خطأ == OTA_AUTH_ERROR) {Serial.println ("فشل المصادقة") ؛} وإلا إذا (خطأ == OTA_BEGIN_ERROR) {Serial.println ("فشلت البداية") ؛} وإلا إذا (خطأ == OTA_CONNECT_ERROR) {Serial.println ("فشل الاتصال") ؛} وإلا إذا (خطأ == OTA_RECEIVE_ERROR) {Serial.println (" فشل الاستلام ") ؛} وإلا إذا (خطأ == OTA_END_ERROR) {Serial.println (" فشل النهاية ") ؛}}) ؛ ArduinoOTA.begin () ، Serial.print ("عنوان IP:") ؛ Serial.println (WiFi.localIP ()) ؛

وفي قسم الحلقة ، أضف هذا السطر:

ArduinoOTA.handle () ؛

بعد تحميل الكود الأولي الخاص بك بعد بدء تشغيل اللوحة ، يجب أن ترى في Arduino IDE في الأدوات-> قسم المنفذ نوعان من المنافذ:

المنافذ التسلسلية: / dev / ttyUSB0 (على سبيل المثال)

منافذ الشبكة: esp8266-xxxxx at 192.168.1.xxx

الآن يمكنك تحديد منفذ الشبكة وتحميل جهاز التحكم عن بعد للرسم ، سيُطلب منك كلمة مرور الرسم (التي حددتها بشكل ثابت أعلاه)

الخطوة الثامنة: الاستنتاجات ، العمل المستقبلي

يمكن تعديل هذا البرنامج التعليمي بسهولة لإرسال بيانات حول أنواع أخرى من أجهزة الاستشعار:

- إذا كان المستشعر الخاص بك مدعومًا بشكل مباشر من NodeMCU من خلال مكتبة ، ما عليك سوى تجميع البيانات من المستشعر ودفعها مباشرةً عبر MQTT

- إذا كانت مكتبة المستشعرات لا تعمل مع NodeMCU ولكنها مخصصة فقط لـ Arduino ، فقم بتحميل الكود الخاص بك إلى arduino ، وقم بإخراج القيمة من خلال السطر التسلسلي وقراءتها في NodeMCU ودفعها (تمامًا كما فعلنا مع عداد جيجر)

يمكننا حتى تعديله لإرسال البيانات من أجهزة استشعار متعددة مثل:

- قم بتوصيل أجهزة الاستشعار الخاصة بك بـ NodeMCU

- بيانات الاستطلاع من كل جهاز استشعار

- لكل مستشعر نشر البيانات في موضوع مختلف

- في HASS ، حدد أجهزة استشعار متعددة (كما فعلنا مع geiger) التي ستستمع إلى مواضيع مختلفة

موصى به: