সুচিপত্র:

আপনার এনার্জি বিল মনিটর: 4 টি ধাপ
আপনার এনার্জি বিল মনিটর: 4 টি ধাপ

ভিডিও: আপনার এনার্জি বিল মনিটর: 4 টি ধাপ

ভিডিও: আপনার এনার্জি বিল মনিটর: 4 টি ধাপ
ভিডিও: ▶️কী কারনে বিদ্যুৎ বিল বেশি আসে কেন? 2024, জুলাই
Anonim
আপনার এনার্জি বিল মনিটর
আপনার এনার্জি বিল মনিটর

এই প্রকল্প সম্পর্কে

আপনি যদি সত্যিই আপনার বাড়ি স্মার্ট করতে চান, তাহলে আপনি সম্ভবত আপনার মাসিক বিল (যেমন শক্তি, গ্যাস, ইত্যাদি) থেকে শুরু করতে চান। যেমন কেউ বলেন, গুড ফর প্ল্যানেট, দ্য ওয়ালেট এবং দ্য বটম লাইন। ওপেন-সোর্স হার্ডওয়্যার হল বাড়ির পরিবেশে স্থায়িত্ব অর্জনের আমাদের উপায়! এই ধারণাটি আমাদের একটি সহজ এবং নিরাপদ সমাধান তৈরি করতে এনেছে, যে কোনও হোম অটোমেশন সফ্টওয়্যারের সাথে একীভূত করা সহজ কারণ এটি MQTT এর উপর ডেটা প্রকাশ করে (আমাদের ক্ষেত্রে আমরা আপনাকে দেখাব কিভাবে এটিকে হোম অ্যাসিস্ট্যান্টে সংহত করতে হয়)।

ওভারভিউ

বৈদ্যুতিক শক্তির ব্যবহার পরিমাপ করার জন্য, আমরা ফাইন্ডার এনার্জি মিটার ব্যবহার করতে বেছে নিয়েছি, যেহেতু এটি ডিআইএন রেল ব্যবহারের জন্য ডিজাইন করা হয়েছে এবং আমাদের বাড়ির মূল মন্ত্রিসভায় পুরোপুরি ফিট করে। এই পণ্য সম্পর্কে চমৎকার জিনিস হল যে এটি একটি RS485 Modbus ইন্টারফেস, একটি শিল্প মান যোগাযোগ প্রোটোকল যা একটি Arduino সঙ্গে কথা বলা সত্যিই সহজ করে তোলে। আসলে, Arduino প্রোটোকল ডিকোড করার জন্য একটি অফিসিয়াল ieldাল, MKR485 এবং দুটি লাইব্রেরি প্রকাশ করেছে। মূল বোর্ড হিসাবে, আমরা আরডুইনো এমকেআর ওয়াইফাই 1010 বেছে নিয়েছি, যেহেতু এটি এমকেআর ফর্ম ফ্যাক্টর ভাগ করে এবং ওয়াইফাই সংযোগ রয়েছে।

সেটআপ সতর্কতা! আপনার বাড়ির বৈদ্যুতিক ব্যবস্থা নিয়ে কাজ করার বিষয়ে আপনার দেশের নিয়মগুলি পরীক্ষা করুন এবং অত্যন্ত সতর্ক থাকুন কারণ এটি মারাত্মক হতে পারে! আপনি যদি জানেন না কিভাবে, একজন ইলেকট্রিশিয়ানকে কল করুন। প্রথম ধাপ হল আপনার বৈদ্যুতিক মন্ত্রিসভায় মিটার স্থাপন করা। আপনি একটি নিরাপদ পরিবেশে কাজ করছেন তা নিশ্চিত করার জন্য, আপনার সিস্টেমের সামনে বৈদ্যুতিক টার্মিনাল থেকে বিদ্যুৎ বন্ধ করুন এবং মাল্টিমিটার দিয়ে দুবার পরীক্ষা করুন যে টার্মিনালের মধ্যে কোন ভোল্টেজ নেই। তারপর আপনার মন্ত্রিসভার ভিতরে শক্তির মিটার রাখুন এবং প্রধান ব্রেকার থেকে মিটারের ইনপুটে লাইভ এবং নিরপেক্ষ তারগুলি সংযুক্ত করুন, রঙ কনভেনশন ব্যবহার করতে ভুলবেন না (ইইউতে বসবাসের জন্য নিরপেক্ষ এবং বাদামী/কালো/ধূসর)। আউটপুটটি বাকি সিস্টেমের সাথে সংযুক্ত থাকতে হবে।

প্রধান ভোল্টেজ সংযোগ। উপরের তারগুলি ইনপুট, তারের বাইরে তারগুলি আউটপুট।

ধাপ 1: যন্ত্রাংশ প্রয়োজন

যন্ত্রাংশ প্রয়োজন
যন্ত্রাংশ প্রয়োজন

ধাপ 2: সফ্টওয়্যার প্রয়োজন

সফ্টওয়্যার প্রয়োজন
সফ্টওয়্যার প্রয়োজন

সফটওয়্যার

আপনার কম্পিউটার চালু করুন এবং আপনার IDE খুলুন। আপনি Arduino IDE বা Arduino Create Editor ব্যবহার করতে পারেন। কোড নিম্নলিখিত অনুরোধ পূরণ করছে: Modbus যোগাযোগ, ওয়াইফাই ব্যবস্থাপনা MQTT প্রোটোকল Modbus হল এবং শিল্প সেন্সর এবং মেশিনের জন্য ওপেন সোর্স প্রোটোকল। Arduino টক Modbus করতে, আমরা Arduino Modbus লাইব্রেরি ব্যবহার করতে যাচ্ছি। এই লাইব্রেরি সমস্ত হ্যান্ডলারকে প্যাক করে এবং যে কোনও মডবাস ডিভাইসকে খুব দ্রুত হুকিং করে। যেহেতু আমরা রেজিস্টার পড়তে যাচ্ছি, মিটারের ডেটশীট অনুসরণ করে, আমরা ফাংশন কোড, রেজিস্টারের ঠিকানা এবং কথায় রেজিস্টারের আকারের মতো আমাদের প্রয়োজনীয় সমস্ত তথ্য পেতে পারি। কিন্তু এটা পরিষ্কার করার জন্য, আসুন আমরা ব্যাখ্যা করি কিভাবে Modbus কাজ করে: Modbus বার্তাগুলি একটি সাধারণ কাঠামো অনুসরণ করে: 01 03 04 00 16 00 02 25 C7 0x01 ডিভাইসের ঠিকানা 0x03 হল ফাংশন কোড যা ডিভাইসকে বলে যদি আমরা ডেটা পড়তে বা লিখতে চাই *, এই ক্ষেত্রে, বাইট কাউন্ট 00 16 এর জন্য 0x04 হোল্ডিং রেজিস্টার পড়ুন - আমরা 4 বাইট রেজিস্টার ঠিকানা (00 16) পাঠাই যা ডিভাইসকে বলে যে আমরা 00 02 কি পড়তে চাই - তারপর শব্দটির মধ্যে রেজিস্টারের আকার (00 02) (প্রতিটি শব্দ 2 বাইট দীর্ঘ) শেষ 4 বাইট হল CRC কোড। এই কোডটি পূর্ববর্তী বাইটের উপর একটি গণিত ফাংশন থেকে উৎপন্ন হয়, এটি নিশ্চিত করে যে বার্তাটি সঠিকভাবে প্রাপ্ত হয়েছে।

হোম অ্যাসিস্ট্যান্ট ইন্টিগ্রেশন হোম অ্যাসিস্ট্যান্টে মিটার যোগ করা বেশ সহজবোধ্য। ধরে নিন আপনার একটি MQTT ব্রোকার কনফিগার করা আছে (এখানে নির্দেশিকা রয়েছে), আপনাকে যা করতে হবে তা হল configuration.yaml ফাইলের অধীনে নতুন সংজ্ঞা যুক্ত করা। সেন্সর: - প্ল্যাটফর্ম: mqtt নাম: "মেইন ভোল্টেজ" স্টেট_টপিক: "এনার্জি/মেইন/ভোল্টেজ" unit_of_measurement: "V" এখানে আপনাকে পরিমাপের নাম, MQTT টপিক পড়তে হবে এবং পরিমাণের পরিমাপ ইউনিট রাখতে হবে। ফাইলটি সংরক্ষণ করুন, কনফিগারেশন চেক করুন এবং হোম অ্যাসিস্ট্যান্ট পুনরায় লোড করুন, এখন পরিমাপগুলি প্রধান পৃষ্ঠায় উপস্থিত হবে।

হোম সহকারী খরচ প্যানেল বর্তমান রিডিং দেখাচ্ছে

হোম অ্যাসিস্ট্যান্ট গ্রাফ তৈরির যত্ন নেবে এবং আপনার রিডিং দ্বারা ট্রিগার করা প্রক্রিয়াগুলিকে স্বয়ংক্রিয় করবে। এই টিউটোরিয়ালটি শেষ হয়েছে, এখন বৈশিষ্ট্যগুলি যোগ করা এবং আপনার নিজের উদ্দেশ্যে এটি কাস্টমাইজ করা আপনার উপর নির্ভর করে!

ধাপ 3: একত্রিত করুন

একত্রিত করা
একত্রিত করা
একত্রিত করা
একত্রিত করা

সম্পন্ন? RS485 সংযোগে স্ক্রু করার সময় এসেছে! আমরা মাটির সাথে টুইস্টেড সিঙ্গেল পেয়ার ক্যাবল ব্যবহার করব, সাধারণত ফোন লাইনের জন্য ব্যবহৃত হয়। এই তারের সাহায্যে আপনি একটি দীর্ঘ দূরত্ব (1.2 কিমি) অতিক্রম করতে পারেন। যাইহোক, আমরা মন্ত্রিসভা থেকে বেরিয়ে আসার জন্য আরডুইনোকে একটি অ্যাক্সেসযোগ্য স্থানে রাখার জন্য যথেষ্ট সময় ধরে কেবল একটি তার ব্যবহার করি।

ফাইন্ডার RS485 সংযোগ

RS485 ইন্টারফেস তার টার্মিনাল A, B এবং COM এর নাম দেয়। একটি সাধারণ ডি-ফ্যাক্টো স্ট্যান্ডার্ড হল TX+/RX+ অথবা D+ এর বিকল্প হিসেবে B (MARK এর জন্য উচ্চ অর্থাত্ নিষ্ক্রিয়), TX-/RX- অথবা D- এর বিকল্প হিসেবে A (মার্কের জন্য কম অর্থাৎ নিষ্ক্রিয়) এর বিকল্প হিসাবে MKR ieldাল এছাড়াও পূর্ণ ডুপ্লেক্স সমর্থন করে, আপনি Y এবং Z এর দুটি অন্য টার্মিনাল দেখতে পাবেন। এখানে আমরা তারের অন্য প্রান্তে স্ক্রু করতে যাচ্ছি যেহেতু আমরা ডেটশীট থেকে জানি যে অর্ধ-দ্বৈত যোগাযোগ শুধুমাত্র Y এবং Z টার্মিনালে হয়। COM টার্মিনাল ISOGND এর সাথে সংযুক্ত থাকতে হবে। যেহেতু আমরা একটি অর্ধ-দ্বৈত সংযোগ ব্যবহার করি এবং যেহেতু ক্যাবলিং পিয়ার-টু-পিয়ার হয়, তাই আমাদের সেটআপ মেলাতে আমাদের MKR485 ieldালের সুইচ সেট আপ করতে হবে: আমরা অর্ধেক (2 থেকে বন্ধ) এবং YZ (3 থেকে 3) চালু); প্রথমটি কোন ব্যাপার না। সমাপ্তি হ'ল দুটি ডেটা টার্মিনালকে সংযুক্ত করার একটি প্রতিরোধ, হস্তক্ষেপকে স্যাঁতসেঁতে করার জন্য।

এই হল. এখন আপনি মন্ত্রিসভা বন্ধ করতে পারেন এবং সফ্টওয়্যার দিকে মনোনিবেশ করতে পারেন!

ধাপ 4: কোড

কোড
কোড

#অন্তর্ভুক্ত

#অন্তর্ভুক্ত #অন্তর্ভুক্ত #অন্তর্ভুক্ত #// আপনার ওয়াইফাই শংসাপত্র const char ssid = "**********"; const char pass = "**********";

ওয়াইফাই ক্লায়েন্ট নেট; MQTTC ক্লায়েন্ট ক্লায়েন্ট; স্বাক্ষরবিহীন দীর্ঘ হার = 60000; // ms স্বাক্ষরবিহীন দীর্ঘ lastMillis = 0 এ ডিফল্ট রিফ্রেশ হার;

// সংযোগ ফাংশন অকার্যকর সংযোগ () {Serial.print ("চেকিং ওয়াইফাই …"); while (WiFi.status ()! = WL_CONNECTED) {Serial.print ("।"); বিলম্ব (1000); } সিরিয়াল.প্রিন্ট ("con n সংযোগ …"); while (! client.connect ("device_name", "user_name", "user_pw")) {// আপনার সেটআপ সিরিয়াল.প্রিন্ট ("।") মেলে পরিবর্তন বিলম্ব (1000); } Serial.println ("con n সংযুক্ত!"); client.subscribe ("শক্তি/প্রধান/রিফ্রেশেট"); // রিফ্রেশ রেট দূর থেকে সেট করার বিষয়} // mqtt কলব্যাক ফাংশন ভয়েড মেসেজ রিসিভ (স্ট্রিং এবং টপিক, স্ট্রিং এবং পেলোড) {সিরিয়াল.প্রিন্টলন ("ইনকামিং:" + টপিক + " -" + প্লেলোড); যদি (বিষয় == "শক্তি/প্রধান/রিফ্রেশেট") {// রিফ্রেশ হার হ্যান্ডলার হার = 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); }}

অকার্যকর লুপ () {client.loop (); if (! client.connected ()) {// check network connection connect (); } // রিফ্রেশ শেষ হওয়ার পরে একটি বার্তা প্রকাশ করুন (নন -ব্লকিং রুটিন) যদি (মিলিস () - শেষমিলিস> হার) {শেষমিলিস = মিলিস (); // সমস্ত পঠিত কলগুলি ভাসা ভোল্ট = readVoltage () করুন; বিলম্ব (100); float amp = readCurrent (); বিলম্ব (100); ডবল ওয়াট = ReadPower (); বিলম্ব (100); float hz = readFreq (); বিলম্ব (100); ডবল wh = readEnergy (); // সংশ্লিষ্ট বিষয়ের অধীনে ফলাফল প্রকাশ করুন client.publish ("শক্তি/প্রধান/ভোল্টেজ", স্ট্রিং (ভোল্ট, 3)); client.publish ("শক্তি/প্রধান/বর্তমান", স্ট্রিং (amp, 3)); client.publish ("শক্তি/প্রধান/শক্তি", স্ট্রিং (ওয়াট, 3)); client.publish ("শক্তি/প্রধান/ফ্রিকোয়েন্সি", স্ট্রিং (hz, 3)); client.publish ("শক্তি/প্রধান/শক্তি", স্ট্রিং (wh, 3)); Serial.print (স্ট্রিং (ভোল্ট, 3)+"V"+স্ট্রিং (amp, 3)+"A"+স্ট্রিং (ওয়াট, 3)+"W"); Serial.println (স্ট্রিং (hz, 3)+"Hz"+স্ট্রিং (wh, 3)+"kWh"); বিলম্ব (100); }}

/ * ফাইন্ডার এনার্জি মিটার রেজিস্টার পড়ার ফাংশন * * কোড বোঝার জন্য modbus প্রোটোকল ম্যানুয়াল পরীক্ষা করুন ভোল্ট = 0। যদি (! ModbusRTUClient.requestFrom (0x1, HOLDING_REGISTERS, 0x000C, 2)) Serial.println (ModbusRTUClient.lastError ()); // ত্রুটি হ্যান্ডলার} অন্য {uint16_t word1 = ModbusRTUClient.read (); // বাফার থেকে তথ্য পড়ুন uint16_t word2 = ModbusRTUClient.read (); uint32_t millivolt = word1 << 16 | শব্দ 2; // বিট ম্যাথ ভোল্ট = মিলিভোল্ট/1000.0; } রিটার্ন ভোল্ট; } float readCurrent () {float ampere = 0.; যদি (! Serial.println (ModbusRTUClient.lastError ()); } অন্যথায় {uint16_t word1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); int32_t milliamp = word1 << 16 | শব্দ 2; অ্যাম্পিয়ার = মিলিয়াম/1000.0; } অ্যাম্পিয়ার ফিরিয়ে দিন; }

ডবল রিড পাওয়ার () {ডাবল ওয়াট = 0। যদি (! 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

প্রস্তাবিত: