תוכן עניינים:

ניטור בית DIY עם RaspberryPi ו- Cloud4Rpi: 5 שלבים
ניטור בית DIY עם RaspberryPi ו- Cloud4Rpi: 5 שלבים

וִידֵאוֹ: ניטור בית DIY עם RaspberryPi ו- Cloud4Rpi: 5 שלבים

וִידֵאוֹ: ניטור בית DIY עם RaspberryPi ו- Cloud4Rpi: 5 שלבים
וִידֵאוֹ: Мини ПК на Intel N100 - AC8-N, мощная безвентиляторная платформа, установка Home Assistant OS 2024, נוֹבֶמבֶּר
Anonim
ניטור בית DIY עם RaspberryPi ו- Cloud4Rpi
ניטור בית DIY עם RaspberryPi ו- Cloud4Rpi

בסוף שבוע חורפי אחד הלכתי לבית הכפרי שלי, וגיליתי שקר שם מאוד. משהו קרה עם חשמל ומפסק RCD כיבה אותו, וגם החימום נכבה. היה לי מזל שהגעתי לשם, אחרת תוך מספר ימים הכל היה קפוא וזה רע מאוד לצינורות ולרדיאטורים.

היו לי כמה פטל פטל בסביבה וחיישן תרמי, אז חשבתי - למה שלא אכין מכשיר ניטור פשוט? ההוראות להלן מניחות שיש לך Raspberry Pi עם הגדרת Raspbian וחיבור לרשת. במקרה שלי מדובר ב- Raspberry Pi B+ עם Raspbian (2018–06–27-raspbian-stretch-lite).

שלב 1: ניטור טמפרטורה

ניטור טמפרטורות
ניטור טמפרטורות
ניטור טמפרטורות
ניטור טמפרטורות

כיצד לחבר חיישן טמפרטורה DS18B20? פשוט חפש בגוגל כיצד לעשות זאת ותראה הרבה תמונות כמו זו:

במקרה שלי היו לי חוטים שחורים, צהובים ואדומים. השחור טחון, עובר לפין הארקה, האדום הוא כוח - עובר ל -3.3 וולט, והצהוב הוא נתונים - צריך לעבור לפין GPIO4, כאשר נגד 4.7 kOm מחובר בין נתונים לחשמל. שים לב, אתה יכול לחבר מספר חיישנים במקביל (הם דיגיטליים ויש להם כתובות שונות), אתה צריך רק נגד אחד. לאחר חיבור החיישן שלך, עליך להפעיל את 1Wire ב- raspi-config:

sudo raspi-config

עבור אל 5 אפשרויות ממשק, הפעל את P7 1-Wire והפעל מחדש.

לאחר מכן תוכל לבדוק אם אתה יכול לראות את החיישן:

sudo modprobe w1-gpiosudo modprobe w1-thermls/sys/bus/w1/התקנים/

אתה אמור לראות משהו כזה:

pi@vcontrol: ~ $ ls/sys/bus/w1/devices/28–00044eae2dff w1_bus_master1

28–00044eae2dff הוא חיישן הטמפרטורה שלנו.

החומרה מוכנה. עכשיו אני צריך להגדיר את חלק הניטור. אני צריך משהו שיראה לי את הנתונים ויודיע לי אם המכשיר מנותק לזמן מה או שאין חשמל או שהטמפרטורה נמוכה. ברור שזה לא יכול להיות פטל פאי עצמו, צריך להיות שרת או שירות כלשהו באינטרנט שעוקב אחר המכשיר שלי.

אני יכול ליצור שרת פשוט, לקבל אירוח ולהגדיר את הכל, אבל בכנות, אני לא רוצה. למרבה המזל, מישהו כבר חשב על זה ויצר cloud4rpi.io - לוח בקרה בענן עבור המכשיר שלך.

שלב 2: הגדרת Cloud4Rpi.io

הגדרת Cloud4Rpi.io
הגדרת Cloud4Rpi.io

Cloud4Rpi מספק שירות המאפשר למכשיר שלך לשלוח ולקבל נתונים באמצעות פרוטוקולי MQTT או HTTP. יש להם ספריית לקוחות עבור Python, אז אני אשתמש ב- Python.

דוגמאות לפייתון המצורפות לשירות Cloud4Rpi כבר מכילות קוד לחיישן טמפ 'DS18B20.

אז הלכתי ל- https://cloud4rpi.io, יצרתי חשבון והוספתי שם מכשיר חדש. לדף המכשיר יש אסימון - מחרוזת שמזהה את המכשיר, ואשר יש לציין אותו בתוכנית ששולחת נתונים.

ראשית, תמיד כדאי לעדכן מנהל חבילות ולשדרג חבילות (שימו לב: זה יכול לקחת שעות אם לא שדרגתם זמן מה):

sudo apt-get update && sudo apt-get upgrade

לאחר מכן, התקן את git, Python ומנהל החבילות שלה Pip:

sudo apt-get install git python python-pip

לאחר מכן, התקן את ספריית פייתון cloud4rpi:

sudo pip התקן cloud4rpi

לבסוף, אני מוכן לכתוב את תוכנית הבקרה שלי. אני מתחיל מדוגמא הזמינה ב

שיבוט git https://github.com/cloud4rpi/cloud4rpi-raspberrypi… cloud4rpicd cloud4rpi

קובץ התוכנית העיקרי הוא control.py - אני צריך לשנות אותו לצרכי. ראשית, ערוך את התוכנית והדבק אסימון:

sudo nano control.py

מצא שורה DEVICE_TOKEN = '…'] וציין שם אסימון להתקן. אחרי זה אני יכול פשוט להריץ את התוכנית: זה עובד ומדווח על טמפרטורה במשתנה RoomTemp:

sudo python control.py

הוא פועל ומדווח על טמפרטורה במשתנה RoomTemp.

שים לב שהוא מגלה את כל החיישנים onewire ds18b20

ds_sensors = ds18b20. DS18B20.find_all ()

ומשתמש בחיישן הראשון שנמצא:

RoomTemp ': {' type ':' numeric ',' bind ': ds_sensors [0] if ds_sensors else None}

אוקיי, זה היה קל, כי לתוכנית המדגם יש כל מה שנדרש לעבודה עם חיישן ds18b20 ב- Raspberry Pi. עכשיו אני צריך למצוא את הדרך לדווח על מצב החשמל.

שלב 3: ניטור UPS

ניטור UPS
ניטור UPS

הדבר הבא שאני רוצה לפקח הוא מצב UPS, כך שאם תהיה הפסקת חשמל, אדע על כך לפני שהכל יתנתק.

יש לי UPS APC עם בקרת USB, אז חיפשתי במהירות בגוגל וגיליתי שאני צריך apcupsd. https://www.anites.com/2013/09/monitoring-ups.html… ניסיתי כמה פעמים להתקין אותו באמצעות apt-get, וזה לא עבד לי מסיבות שונות. אני אראה כיצד להתקין אותו מהמקורות.

wget https://sourceforge.net/projects/apcupsd/files/ap…tar xvf apcupsd-3.14.14.tar.gz cd apcupsd-3.14.14./configure-אפשר usb sudo לעשות sudo לבצע התקנה

לאחר מכן אני עורך את apcupsd.conf כדי להתחבר ל- UPS שלי באמצעות usb.

sudo nano /etc/apcupsd/apcupsd.conf# #UPSCABLE usb usb smart usb ##UPSTYPE apcsmart #DEVICE/dev/ttyS0 UPSTYPE usb DEVICE

עכשיו אני יכול לחבר כבל USB מ- UPS ל- RaspberryPi ולבדוק אם יימצא UPS.

sudo apctest

זה לא אמור לתת לך הודעות שגיאה.

כעת יש להפעיל שירות apcupsd של sevice:

sudo systemctl התחל apcupsd

כדי לשאול לגבי מצב UPS אני יכול להשתמש בפקודת סטטוס:

מצב sudo /etc/init.d/apcupsd

וזה יפיק משהו כזה:

APC: 001, 035, 0855 תאריך: 2018-10-14 16:55:30 +0300 HOSTNAME: vcontrol גרסה: 3.14.14 (31 במאי 2016) debian UPSNAME: vcontrol כבל: נהג כבל USB: USB UPS Driver UPSMODE: Stand Alone STARTTIME: 2018-10-14 16:54:28 +0300 דגם: סטטוס Back-UPS XS 650CI: LINEV מקוון: 238.0 וולט LOADPCT: 0.0 אחוז BCHARGE: 100.0 אחוז TIMELEFT: 293.3 דקות MBATTCHG: 5 אחוז מינימום: 3 דקות מקסימום: 0 שניות SENSE: בינוני LOTRANS: 140.0 וולט HITRANS: 300.0 וולט ALARMDEL: 30 שניות BATTV: 14.2 וולט LASTXFER: ללא העברות מאז הטורן NUMXFERS: 0 TONBATT: 0 שניות CUMONBATT: 0 שניות XOFFBATT: N/A STATFLAG: 0x0T00008: 0x0T00008: 0X0: 2014-06-10 NOMINV: 230 וולט NOMBATTV: 12.0 וולט NOMPOWER: 390 וואט תוכנה: 892. R3. I USB FW: R3 END APC: 2018-10-14 16:55:38 +0300

אני צריך סטטוס - שהוא השורה "STATUS:".

ספריית Cloud4rpi מכילה מודול 'rpy.py' המחזיר פרמטרים של מערכת Raspberry Pi כגון שם מארח או טמפרטורת מעבד. מכיוון שכל אותם מצלמות הן תוצאות של הפעלת כמה פקודות ופלט ניתוח, היא מכילה גם פונקציית 'parse_output' שימושית שעושה בדיוק מה שאני צריך. כך ניתן לקבל את סטטוס ה- UPS שלי:

def ups_status (): result = rpi.parse_output (r'STATUS / s+: / s+(S+) ', [' /etc/init.d/apcupsd ',' status ']) אם התוצאה: תוצאה תוצאה אחרת: החזרה 'לא ידוע'

כדי לשלוח סטטוס זה ל- cloud4rpi, עלי להכריז על משתנה UPSStatus ולאגד אותו לפונקציית ups_status שלי: כעת אוכל להריץ את התוכנית שלי:

משתנים = {'RoomTemp': {'type': 'numeric', 'bind': ds_sensors [0]}, 'UPSStatus': {'type': 'string', 'bind': ups_status}}

ואני יכול מיד לראות את המשתנה שלי בדף המכשיר cloud4rpi.

שלב 4: הכנה ל"ייצור"

מתכוננים ל"ייצור "
מתכוננים ל"ייצור "

הכל עובד, ועכשיו אני צריך להכין את המכשיר למצב ללא השגחה.

ראשית, אני הולך להתאים את מרווחי הזמן. מרווח הסקרים מגדיר את התדירות שבה התוכנית בודקת טמפרטורה ומצב UPS - הגדר אותה לשנייה אחת.

התוצאות נשלחות לענן כל 5 דקות, ומידע אבחוני - כל שעה.

# קבועים DATA_SENDING_INTERVAL = 300 # שניות DIAG_SENDING_INTERVAL = 3600 # שניות POLL_INTERVAL = שנייה אחת #

כאשר סטטוס UPS משתנה - אני לא רוצה שהמכשיר שלי יחכה 5 דקות ואני שולח נתונים באופן מיידי. אז שיניתי מעט את הלולאה הראשית וזה נראה כך:

data_timer = 0diag_timer = 0 prevUPS = 'ONLINE' בעוד True: newUPS = ups_status () אם (data_timer <= 0) או (newUPS! = prevUPS): device.publish_data () data_timer = DATA_SENDING_INTERVAL prevUPS = newUPS אם 0: device.publish_diag () diag_timer = DIAG_SENDING_INTERVAL שינה (POLL_INTERVAL) diag_timer -= POLL_INTERVAL data_timer -= POLL_INTERVAL

בדיקה: הפעל סקריפט:

sudo python control.py

ואני יכול לצפות בסטטוס UPS בדף המכשיר שלי.

אם אני מכבה את כוח UPS, הסטטוס משתנה תוך מספר שניות, אז הכל עובד. עכשיו אני צריך להפעיל את apcupsd ואת שליטה שלי על הפעלת המערכת. שירות Apcupsd ישן וכדי להתחיל אותו ב- raspbian מודרני, עלי לשנות את הקובץ /etc/init.d/apcupsd על ידי הוספת שורות אלה במקום כלשהו למעלה:

### BEGIN INIT INFO # מספק: apcupsd # Required-Start: $ all # Required-Stop: # Default-Start: 2 3 4 5 # Default-Stop: # Short-Description: APC UPS daemon… ### END INIT מידע#

לאחר מכן הפעל את השירות:

sudo systemctl אפשר apcupsd

לאחר מכן התחל את השירות:

sudo systemctl התחל apcupsd

כעת יופעל apcupsd בהפעלת המערכת.

כדי להתקין את control.py כשירות, השתמשתי בתסריט service_install.sh המצורף:

sudo bash service_install.sh ~/cloud4rpi/control.py

עכשיו השירות מתחיל והוא צריך לשרוד אתחול מחדש.

שלב 5: הגדרת לוח הבקרה

הגדרת לוח בקרה
הגדרת לוח בקרה

Cloud4rpi מאפשר לי להגדיר לוח בקרה למכשיר שלי. אתה יכול להוסיף "ווידג'טים" ולאגד אותם למשתני מכשירים.

המכשיר שלי מספק שני משתנים לקריאה בלבד - RoomTemp ו- UPSStatus:

משתנים = {'RoomTemp': {'type': 'numeric', 'bind': ds_sensors [0]}, 'UPSStatus': {'type': 'string', 'bind': ups_status}}

הוספתי 3 ווידג'טים - מספר עבור RoomTemp, טקסט עבור UPSStatus ותרשים עבור RoomTemp.

אני יכול להגדיר התראות, כך שאני מקבל דוא ל כשהטמפרטורה היא מחוץ לטווח שצוין, UPS יצא למצב לא מקוון או שהמכשיר עצמו לא שולח נתונים כשצריך. עכשיו אני יכול להיות בטוח שהבית הכפרי שלי בסדר, ואני יכול לקבל הודעה. כשמשהו לא בסדר, כדי שאוכל להתקשר לשכנים ולבקש מהם לבדוק מה קורה. להלן הקוד האמיתי של control.py.

מוּמלָץ: