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

צג חשבון האנרגיה שלך: 4 שלבים
צג חשבון האנרגיה שלך: 4 שלבים

וִידֵאוֹ: צג חשבון האנרגיה שלך: 4 שלבים

וִידֵאוֹ: צג חשבון האנרגיה שלך: 4 שלבים
וִידֵאוֹ: ככה זה כשיש לך חברה רוסיה 2024, יולי
Anonim
צג חשבון האנרגיה שלך
צג חשבון האנרגיה שלך

אודות הפרוייקט הזה

אם אתה באמת רוצה להפוך את הבית שלך לחכם יותר, סביר להניח שתרצה להתחיל מהחשבונות החודשיים שלך (כלומר אנרגיה, גז וכו '…). כמו שאומרים, טוב לפלנט, הארנק והשורה התחתונה. חומרת קוד פתוח היא הדרך שלנו להגיע לקיימות בסביבה הביתית! רעיון זה הביא אותנו לבנות פתרון פשוט ומאובטח, קל לשילוב עם כל תוכנת אוטומציה ביתית מכיוון שהוא חושף נתונים על MQTT (במקרה שלנו נראה לך כיצד לשלב אותו ב- Home Assistant).

סקירה כללית

על מנת למדוד את צריכת האנרגיה החשמלית, בחרנו להשתמש במד האנרגיה של Finder, מכיוון שהוא מיועד לשימוש במעקה DIN ומתאים בצורה מושלמת לארון הראשי של ביתנו. הדבר המגניב במוצר זה הוא שיש לו ממשק Modbus RS485, פרוטוקול תקשורת סטנדרטי תעשייתי שהופך את הדיבור עם Arduino לקל מאוד. למעשה, ארדואינו הוציא מגן רשמי, MKR485 ושתי ספריות לפענוח הפרוטוקול. בתור לוח האם בחרנו ב- Arduino MKR WiFi 1010 מכיוון שהוא חולק את גורם הטופס של MKR ויש לו קישוריות WiFi.

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

חיבורי מתח עיקריים. חוטים למעלה הם קלט, חוטים מעבר הם יציאות.

שלב 1: יש צורך בחלקים

דרושים חלקים
דרושים חלקים

שלב 2: נדרשת תוכנה

התוכנה צריכה
התוכנה צריכה

תוֹכנָה

הפעל את המחשב ופתח את ה- IDE שלך. אתה יכול להשתמש ב- Arduino IDE או ב- Arduino Create Editor. הקוד עונה על הבקשות הבאות: תקשורת מודבוס, ניהול WiFi פרוטוקול MQTT מודבוס הוא ופרוטוקול קוד פתוח לחיישנים ומכונות תעשייתיות. כדי לגרום לארדואינו לדבר על מודבוס, אנו הולכים להשתמש בספריית Modbus של Arduino. ספרייה זו אורזה את כל המטפלים וגורמת לחיבור כל מכשיר מודבוס ממש מהר. מכיוון שאנו הולכים לקרוא רשמים, בהתאם לגליון הנתונים של המונה, אנו יכולים למצוא את כל המידע הדרוש לנו כמו קודי פונקציות, כתובת הרשם וגודל הרשם במילים. אבל כדי להבהיר את זה, הבה נסביר כיצד Modbus פועל: הודעות Modbus פועלות במבנה פשוט: 01 03 04 00 16 00 02 25 C7 0x01 האם כתובת המכשיר 0x03 היא קוד הפונקציה שאומר למכשיר אם ברצוננו לקרוא או לכתוב נתונים *, במקרה זה, קרא את אוגרי ההחזקה 0x04 עבור ספירת הבתים 00 16 - אנו שולחים 4 בתים של כתובת רישום (00 16) המספרים למכשיר את מה שברצוננו לקרוא 00 02- ואז את גודל הרשם (00 02) במילים (כל מילה באורך 2 בתים) 4 הבייטים האחרונים הם קוד CRC. קוד זה נוצר מפונקציית מתמטיקה על פני בתים קודמים, הדבר מבטיח שההודעה התקבלה כראוי.

שילוב המונה ל- Home Assistant הוא די פשוט. בהנחה שיש לך מוגדר מתווך MQTT (להלן המדריך), כל שעליך לעשות הוא להוסיף הגדרות חדשות מתחת לקובץ config.yaml. חיישן: - פלטפורמה: שם mqtt: "מתח ראשי" state_topic: יחידת_אנרגיה/מתח/מדידה: "V" כאן עליך לשים את שם המדידה, את נושא MQTT לקרוא ואת יחידת המדידה של הכמות. שמור את הקובץ, בדוק את התצורה וטען מחדש את עוזר הבית, כעת המדידות יופיעו בדף הראשי.

לוח הצריכה של Home Assistant המציג את הקריאות הנוכחיות

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

שלב 3: הרכבה

להרכיב
להרכיב
להרכיב
להרכיב

בוצע? הגיע הזמן לדפוק את חיבור RS485! נשתמש בכבל זוג יחיד מעוות עם הקרקע, המשמש בדרך כלל לקווי טלפון. בעזרת כבל זה תוכלו לשדר למרחקים ארוכים (1.2 ק מ). עם זאת, אנו פשוט משתמשים בכבל מספיק זמן כדי לצאת מהארון ולמקם את הארדואינו במקום נגיש.

חיבור Finder RS485

ממשק RS485 שם את מסופי A, B ו- COM. תקן נפוץ דה-פקטו הוא השימוש ב- TX+/RX+ או D+ כחלופה ל- B (גבוהה ל- MARK כלומר בטלה), TX-/RX- או D- כחלופה ל- A (נמוכה ל- MARK כלומר ללא סרק) מאז מגן MKR תומך גם ב- Full Duplex, תראה שני מסופים אחרים, Y ו- Z. כאן אנו הולכים לדפוק את הקצה השני של הכבל מכיוון שאנו יודעים מתוך גליון הנתונים שתקשורת חצי דופלקס מתרחשת רק במסופי Y ו- Z. יש לחבר את מסוף ה- COM ל- ISOGND. מכיוון שאנו משתמשים בחיבור חצי דופלקס ומאחר והכבלים הם peer-to-peer, עלינו להגדיר את המתגים במגן MKR485 כך שיתאימו להתקנה שלנו: הגדרנו HALF (2 לכיבוי) וסיום ב- YZ (3 עד עַל); הראשון לא משנה. הסיום הוא התנגדות המחברת בין שני מסופי הנתונים, לעיכוב הפרעות.

זהו זה. עכשיו אתה יכול לסגור את הארון ולהתמקד בצד התוכנה!

שלב 4: קוד

קוד
קוד

#לִכלוֹל

#include #include #include // אישורי ה- wifi שלך const char ssid = "**********"; const char pass = "**********";

רשת WiFiClient; לקוח MQTTClient; תעריף ארוך לא חתום = 60000; // קצב רענון ברירת מחדל ב- ms unsigned long lastMillis = 0;

// connect function void connect () {Serial.print ("בודק wifi …"); בעוד (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); עיכוב (1000); } Serial.print ("\ n מתחבר …"); while (! client.connect ("device_name", "user_name", "user_pw")) {// שנה להתאים את ההגדרה שלך Serial.print ("."); עיכוב (1000); } Serial.println ("\ n מחובר!"); client.subscribe ("אנרגיה/ראשי/רענון"); // נושא להגדרת קצב רענון מרחוק} // mqtt קבלת פונקציית התקשרות חוזרת הודעה חללה מתקבלת (מחרוזת ונושא, מחרוזת וטעינה) {Serial.println ("נכנס:" + נושא + " -" + מטען); if (topic == "energy/main/refresh") {// rate rate rate handler = payload.toInt ()*1000; Serial.println ("תעריף חדש"+מחרוזת (תעריף)); }}

הגדרת חלל () {Serial.begin (115200); WiFi.begin (ssid, pass); בעוד (! סדרתי); client.begin ("broker_ip", net); // שנה להתאים את ההגדרה שלך client.onMessage (messageReceived); // הפעל את לקוח Modbus RTU אם (! ModbusRTUClient.begin (9600)) {Serial.println ("נכשלה הפעלת לקוח Modbus RTU!"); בעוד (1); }}

לולאת void () {client.loop (); אם (! client.connected ()) {// לבדוק חיבור רשת להתחבר (); } // פרסם הודעה לאחר שחלף הרענון (שגרה שאינה חוסמת) if (millis () - lastMillis> rate) {lastMillis = millis (); // להפוך את כל קריאות הקריאה לצוף volt = readVoltage (); עיכוב (100); מגבר צף = readCurrent (); עיכוב (100); וואט כפול = readPower (); עיכוב (100); float hz = readFreq (); עיכוב (100); wh כפול = readEnergy (); // לפרסם תוצאות תחת נושאים קשורים client.publish ("energy/main/voltage", String (volt, 3)); client.publish ("אנרגיה/עיקרית/זרם", מחרוזת (מגבר, 3)); client.publish ("אנרגיה/ראשית/כוח", מחרוזת (וואט, 3)); client.publish ("אנרגיה/ראשי/תדר", מחרוזת (hz, 3)); client.publish ("energy/main/energy", מחרוזת (wh, 3)); Serial.print (מחרוזת (וולט, 3)+"V"+מחרוזת (מגבר, 3)+"A"+מחרוזת (וואט, 3)+"W"); Serial.println (מחרוזת (hz, 3)+"Hz"+מחרוזת (wh, 3)+"kWh"); עיכוב (100); }}

/ * פונקציות לקריאת רישומי מד האנרגיה של Finder * * בדוק במדריך הפרוטוקול של modbus כדי להבין את הקוד * https://gfinder.findernet.com/public/attachments/7E/EN/PRT_Modbus_7E_64_68_78_86EN.pdf */float readVoltage () {float וולט = 0.; if (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x000C, 2)) {// בצע את השיחה לרשם Serial.print ("נכשל קריאת מתח!"); Serial.println (ModbusRTUClient.lastError ()); // מטפל בשגיאות} אחר {uint16_t word1 = ModbusRTUClient.read (); // לקרוא נתונים מהמאגר uint16_t word2 = ModbusRTUClient.read (); uint32_t millivolt = word1 << 16 | word2; // וולט במתמטיקה ביט = מיליוולט/1000.0; } וולט החזרה; } float readCurrent () {float ampere = 0.; if (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0016, 2)) {Serial.print ("נכשל קריאת הנוכחי!"); Serial.println (ModbusRTUClient.lastError ()); } אחר {uint16_t word1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); int32_t milliamp = word1 << 16 | word2; אמפר = מיליאמפר/1000.0; } להחזיר אמפר; }

קריאה כפולה () {כפולה וואט = 0.; if (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0025, 3)) {Serial.print ("נכשל קריאת כוח!"); Serial.println (ModbusRTUClient.lastError ()); } אחר {uint16_t word1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); uint16_t word3 = ModbusRTUClient.read (); uint64_t מיליוואט; אם (word1 >> 7 == 0) {milliwatt = word1

מוּמלָץ: