مستشعر الحركة والتنبيه وتسجيل الفيديو في Home Assistant على Raspberry pi

أريد أن أتحدث عن تجربتي الصغيرة في العمل مع مساعد المنزل (المشار إليها فيما يلي باسم HA) في Raspberry pi وعن توصيل وظيفة تسجيل الفيديو ومستشعر الحركة ، وبالتالي وظيفة أمن المنزل لاستقبال الصور عن طريق البريد في حالة حدوث عملية "أمان".

بالطبع ، أحد الأسباب هو الرغبة في أن نفهم من تعليقاتك أن ما فعلته "خطأ" بعد كل شيء ، تنفيذ هذا السيناريو.

هناك ثلاث طرق لتكوين الوظائف المذكورة أعلاه: "بدون مشاكل" و "قصيرة" و "مستقلة". في الحالة الأولى ، قمت بتنزيل الصورة النهائية من الموقع https://ViaMyBox.com/downloadpageبالنسبة لـ Raspberry pi ، يمكنك أن ترى كيف يبدو كل شيء في النموذج الذي تم تكوينه بالفعل. في الحالة الثانية ، يمكنك تنزيل ملف zip من موقع الويب أو من مشروع github ، وتثبيت وتثبيت صورة HA docker من خلال الأداة المساعدة (sudo via-setup.sh) لمعرفة كيفية تكوين كل شيء. وأخيرًا ، الطريقة الثالثة هي إعداد "كل شيء بطريقتك الخاصة": خذ شيئًا مفيدًا من الموقع أو بوابة المشروع ، أو من هذا البرنامج التعليمي. روابط لكل شيء في نهاية المقال.

افترض أن لديك بالفعل مساعد منزلي يعمل (HA). في هذه المقالة ، سننظر فقط في جوانب تكوين تكوينات yaml ووصف تسلسل القواعد والشروط التي تؤدي إلى إجراء معين ، في حالتنا ، اتصال "أمن المنزل" والبرنامج النصي الذي يبدأ في التقاط الصور في غضون 5 ثوانٍ بعد تشغيل مستشعر الحركة. ونتيجة لذلك ، يرسل مساعد المنزل الصور التي تم التقاطها عن طريق البريد. أنا لست متخصصًا في yaml أو في إنشاء تكوينات لـ Home Assistant ، ولكن باتباع أمثلة العمل ، حصلت على تكوين عامل أريد مشاركته.

جميع الملفات التي سنشير إليها ، سأضعها في نهاية المقالة لمراجعة أكثر ملاءمة. لن أتعامل هنا مع عمل مخطوطات لتسجيل الفيديو في باش أو بيثون في هذا المثال. مساعد المنزل فقط. ولكن إذا كان لديك أسئلة - ويلكوم!

في النهاية ، يبدو كل شيء مثل هذا بالنسبة لي (تم تمييزه باللون الأحمر الذي سننظر فيه في المقالة):





أستخدم Raspberry pi كمنصة. و طريقي إلى ملفات التكوين هو / usr / share / hassio / homeassistant /. قد يختلف المسار إلى ملفات التكوين عن المسار الخاص بي. في ذلك الوقت ، كان لدي مساعد المنزل 0.101.3. سنكون مهتمين بملفات التكوين في هذا الدليل: config.yaml و automation.yaml.

بعد كل تغيير لهذه الملفات ، من المهم أن تتذكر أنه سيكون من الضروري التحقق من التكوين بعد التغييرات التي أجريناها لأية أخطاء حدثت فيه. يتم ذلك في علامة التبويب لوحة تحكم Home Assistant -> التكوين -> عناصر تحكم الخادم -> التحقق من التكوين. وبعد ذلك ، في نفس المكان ، نقوم بإعادة تحميل الأتمتة وإعادة تحميل البرامج النصية ، إذا كان التحقق ناجحًا. وفي حالة الشك ، - تقوم إدارة الخادم بإعادة التشغيل في نفس علامة التبويب بتحديث التكوين بدقة.

جهاز استشعار الحركة HC-SR501 متصل بناقل Raspberry pi GPIO. من الضروري توصيل أسلاك الاتصال الثلاثة بشكل صحيح بـ GPIO ، ويمكننا استخدام المستشعر الخاص بنا في العمل. يحتوي المستشعر على ثلاث جهات اتصال: power gcc (+) ، صفر gnd (-) ، جهة اتصال التحكم (البيانات). بعد قراءة وصف GPIO ، قمت بتوصيلهم بتوت العليق على النحو التالي. لقد قمت بتوصيل hc-sr501 بموصل GPIO: pin # 2 - 5.5vvcc؛ دبوس # 26 (الصف 13) - اتصال البيانات و دبوس # 6 - gnd (-) من المستشعر.

أستخدم إما كاميرا USB أو كاميرا csi بالتزامن مع mjpg-streamer كمصدر للصورة. كيفية تثبيت وتكوين mjpg-streamer على Raspberry pi ، لن نفكر هنا. أمثلة على التثبيت السريع على الإنترنت كثيرًا. ومع ذلك ، أود أن أقول إنني أستخدم البيانات من هذا المشروعيتم وصف تركيب هذه الوحدة أيضًا بالتفصيل هناك. أو استخدم أي طريقة مناسبة لك لالتقاط الصور ومقاطع الفيديو. بعد كل شيء ، ما هو برنامج bash لربط HA ، في نهاية المطاف ، متروك لك.

سنقوم الآن بوصف المستشعر في التكوين. yaml ، على سبيل المثال ، من خلال سطر الأوامر:

sudo nano /usr/share/hassio/homeassistant/configuration.yaml

على الرغم من أن استخدام notepad ++ مع winscp قد يكون أكثر ملاءمة ...

نحن نصف تسلسل إعدادات HC-SR501 مثل هذا:

binary_sensor:
  - platform: rpi_gpio
    #name: HC-SR501
    ports:
      7: Sensor HC-SR501
    invert_logic: false

وتجدر الإشارة إلى أن الشيء المهم هنا هو الإعدادات في الخطوط التي تصف الاتصال بجهات اتصال التحكم (البيانات) الخاصة بأجهزة الاستشعار: pin # 7

المنافذ:

7: Sensor HC-SR501

يحتوي Home Assistant على أداة مدمجة لتنشيط وظيفة أمن المنزل. سنصف ذلك في config.yaml ، باستخدام الوصف: www.home-assistant.io/integrations/manual

alarm_control_panel:
  - platform: manual
    name: Home Alarm
    pending_time: 60
     delay time 40
     triggered:
    pending_time: 0
    code: 1234

يعني هذا الإعداد أن لدينا 60 ثانية لمغادرة المنزل (بعد هذا الوقت سيتم تشغيل المنبه) ، و 40 ثانية لإيقاف تشغيله (بكلمة مرور 1234) عند العودة إلى المنزل. لسبب ما ، تغادر دائمًا لفترة أطول من قدومك.)

الآن سنصف آلية تشغيل الصور وإيقاف تشغيلها من خلال تشغيل مستشعر الحركة في التكوين لدينا. yaml (المزيد عن التبديل - يمكن العثور على منصة Command_line هنا ):

 - platform: command_line
   switches:
      start_stop_motion_rec_timelapse:
        friendly_name: 'Record motion timelapse video'
        command_on: 'curl http://localhost/start_mjpgstrm.php  && curl http://localhost//rec-motion-mjpg.php'
        command_off: 'curl http://localhost/stop_mjpgstrm.php && curl http://localhost/rec-motion-mjpg-stop.php'


قمنا هنا بربط الأمر Enable Command_on و Command_off off بالأوامر النصية التي تتحكم في تسجيل الكاميرا. في هذه الحالة ، عندما يتم تنفيذ الأمر Command_on ، يتم تنفيذ سكريبتين على التوالي. سيؤدي ذلك إلى تشغيل ملف mjpg-streamer وتشغيل تسجيل مستشعر الحركة. الوصول إلى نصوص bash يمر عبر ملف php لموقع العمل على Raspberry pi. للقيام بذلك ، قمت بتكوين nginx والوصول إلى الويب ، وعند الوصول من خلال المتصفح في النموذج http: // <ip address of Raspberry pi> /start_mjpgstrm.php ، يجب تنفيذ برنامج php النصي الخاص بنا. ينفذ هذا النص البرمجي mjpg-streamer في هذه الحالة.

لا نعتبر تكوين الوصول إلى الويب في هذه المقالة. بالتأكيد ، هذا ليس أمانًا ، ولكن نظرًا لأن لدي HA على عامل الميناء ، فقد واجهت حقيقة أن لدي بيئة عامل ميناء معزولة و "العالم الخارجي" لنظام التشغيل الذي يمكنني رؤيته من خلال الاتصال بموقعي من خلال php. ربما هناك مجموعة من الحلول الجيدة من عامل الميناء أو معلمي HA. الكتابة ، سيكون من المثير للاهتمام معرفة!

سأترك قائمة بهذه النصوص تحت المقالة ، لن نتطرق إليها. في هذه المقالة ، أرغب في تتبع فقط تكوين تسلسل الإجراءات في مساعد المنزل.

يتم وضع كل هذا في كائن start_stop_motion_rec_timelapse. سيكون مفتاح التبديل البصري الذي سنتحكم به في تسجيل الصور عند تشغيل مستشعر الحركة.



يمكننا تصور هذه الكائنات التي أنشأناها في علامة التبويب Home Assistant -> Overwiew ، وتبديل تنشيط وضع تكوين تكوين واجهة المستخدم في الزاوية اليمنى العليا.



أعد تشغيل HA في المتصفح في علامة التبويب "التكوين -> التحكم في الخادم" لالتقاط config.yaml.

بعد ذلك ، حدد علامة زائد صفراء في أسفل نافذة المتصفح ، وانقر على بطاقة الكيانات وأرفق الكائنات التي تم إنشاؤها لدينا بالخرائط.



بالنسبة لمستشعرنا ، حدد بطاقة المستشعر. ستبدو كما يلي:



كما ترى في الصورة ، في الحقل الثاني من الكيان ، يكون التبديل أعلاه هو: switch.start_stop_motion_rec_timelapse.

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

حسنًا ، وبالتالي ، خريطة لوحة الإنذار:



هناك نقطة أخرى مثيرة للاهتمام. أستخدم مساعد المنزل كحاوية عامل ميناء. في هذا الصدد ، سيكون المسار إلى نصنا مختلفًا عن المسار الحقيقي إلى ملف البرنامج النصي. بعد كل شيء ، يكون هيكل الملف داخل الحاوية ظاهريًا ومرتبطًا ببنية الملف الحقيقية من خلال أحجام أرصفة محمولة. يبدو أن هذا: المسار داخل الحاوية: / config / scripts / Path داخل نظام التشغيل: / usr / share / hassio / homeassiatnt / scripts. لذا انظر إلى إعدادات الحاوية الخاصة بك ، وكيف يتم تكوين هذه المجلدات في حقل Binds. إذا كان لديك HA هناك.

sudo docker inspect homeassistant|less

عندما يتم تشغيل مستشعر الحركة ، في الوقت الذي يتم فيه تشغيل المنبه: أريد ، بالإضافة إلى حقيقة أننا نبدأ التصوير السريع (لقطات اللقطة) ، سوف أتلقى تحذيرًا عبر البريد وصورة. لقد توازنت العمليات. في الصورة الأولى ، يحدث التسجيل (لقطات اللقطة) في غضون بضع ثوانٍ بعد تشغيل المستشعر. للقيام بذلك ، أقوم بتشغيل mjpg- streamer curl localhost / start_mjpgstrm.php ، وابدأ php: surl http: //localhost/rec-motion-mjpg.php . وهو بدوره يدير النص البرمجي لـ python mov.py. جميع الملفات والروابط الموصوفة في نهاية المقالة حسب المرجع. ويأخذ نص نصي آخر لـ TakeSnapshotWebcam.sh لقطة ، والتي أرسلها في بريد إلكتروني. أصف هذه النصوص في تكويننا. yaml مثل هذا:

shell_command:
#      
  take_snapshot_webcam: '/config/scripts/takeSnapshotWebcam.sh'
#  mjpg-streamer 
  start_mgpg_streamer: 'curl http://localhost/start_mjpgstrm.php'
# mjpg-streamer
  stop_mgpg_streamer: 'curl http://localhost/stop_mjpgstrm.php'
#      5 
  start_motion_rec: 'curl http://localhost/rec-motion-mjpg.php'
# 
  stop_motion_rec: 'curl http://localhost/rec-motion-mjpg-stop.php'

هناك ، في config.yaml ، نصف كائننا البريدي:

notify:
  - name: ha_sendmail
    platform: smtp
#    gmail
    server: smtp.gmail.com
    port: 587
    timeout: 15
#  
    sender: user@gmail.com
    encryption: starttls
    username: user@gmail.com
    password: passwd
#  (       ,    )
    recipient:
      - user@gmail.com
    sender_name: My Home Assistant

نقطة مهمة! لكي يقوم HA بتوصيل وإرسال الرسائل (حقل المرسل) ، يجب أن نسمح لـ gmail باستخدام هذا المربع لخدمة HA الخاصة بنا. كيفية القيام بذلك هو الرابط هنا: myaccount.google.com/lesssecureapps

وبعد ذلك ، نصف آلية الأتمتة نفسها عند تشغيل منبه home_alarm في automation.yaml:

#   (alias) “  ,   ”
- alias: 'Trigger alarm while armed away'
#alias ,     “on”
  trigger: 
    - platform: state
      entity_id: binary_sensor.sensor_hc_sr501
      to: 'on'
# ,         “armed away”
  condition:
    - condition: state
      entity_id: alarm_control_panel.home_alarm
      state: armed_away
#     
  action:
# mjpg-streamer ( )
    - service: shell_command.start_mgpg_streamer
# ,   
    - service: shell_command.start_motion_rec
#    “  ”   HA   “ ”
    - service: alarm_control_panel.alarm_trigger
      entity_id: alarm_control_panel.home_alarm

مجموعة الشروط والإجراءات التالية هي إرسال رسالة وحدة التحكم عند تعطيل "الأمان" وإيقاف البرامج النصية لتسجيل الحركة لدينا:

- alias: 'Send notification when alarm is Disarmed'
  trigger:
    - platform: state
      entity_id: alarm_control_panel.home_alarm
      to: 'disarmed'
  action:
    - service: shell_command.stop_mgpg_streamer
    - service: shell_command.stop_motion_rec
    - service: persistent_notification.create
      data:
       message: The alarm is Disarmed at {{ states('sensor.date_time') }}"

وأخيرًا ، المجموعة الثالثة - نرسل رسالة تحتوي على صورة:

- alias: 'Send notification when alarm triggered'
  trigger: 
   - platform: state
     entity_id: alarm_control_panel.home_alarm
     to: 'triggered'
  action:
    - service: persistent_notification.create
      data:
       message: Notification when alarm triggered. Motion sensor HC-SR501 detected.
    - delay:
       seconds: 4
#     
    - service: script.webcam_snapshot
#      configuration.yaml: notify.ha_sendmail
    - service: notify.ha_sendmail
      data:
        title: 'Intruder alert'
        message: '{{now().strftime("%H:%M %Y-%m-%d")}}:Notification when alarm triggered. Motion sensor HC-SR501 detected.'
        data:
           images:
#      script.webcam_snapshot  
              - /config/camera/snapshot.jpg

تذكر أن تخطيط الخط مهم في ملفات yaml ، وأن أحرف المسافة قبل الأوامر تلعب دورًا مهمًا في تكوين كتل التعليمات البرمجية ، وهيكلها. تحقق من جميع التغييرات على yaml الخاص بك من خلال تكوين Home Assistant (HA) -> Server Controls -> Check Config.

يبدو أن كل شيء على ما يرام ، ويتحول شكل Raspberry pi إلى أنيق ... إذا لم يكن البرق عالقًا!)

هنا - أتمتة العمل HA ، قم بإعداده بيديك! تأكد من أن تكتب لي رأيك في هذا!

وإذا كنت لا تزال تقرأ حتى النهاية ، فأنا أقدم الروابط الموعودة:

https://viamybox.com/downloadpage

https://github.com/viatc/viamybox

ملفات التكوين الموضحة هنا:
automation.yaml ، config.yaml ، takeSnapshotWebcam. sh ، rec-motion-mjpg.php ، mov.py

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


All Articles