সোলার ও এনার্জি মনিটরিংয়ের জন্য ESP32 ফার্মওয়্যার
সোলার মনিটরিং ফিল্ডে কিছু সাধারণ কারণে ব্যর্থ হয়: সূর্য ম্লান হওয়ার ব্রাউনআউট লেখার মাঝপথে flash নষ্ট করে, একটি Modbus CRC ত্রুটি 0V স্ট্রিং হিসেবে লগ হয়, কিংবা ইনভার্টার ফার্মওয়্যার আপডেটে রেজিস্টার ম্যাপ বদলে গেলে আপনার ড্যাশবোর্ড নীরবে থেমে যায়। আমরা এমন ESP32/ESP32-S3 ফার্মওয়্যার লিখি যা প্রতিটি রিডিংকে সন্দেহজনক, প্রতিটি লিংককে অস্থায়ী এবং প্রতিটি পাওয়ার রেইলকে যেকোনো মুহূর্তে পড়ে যাওয়ার মতো ধরে নেয়।
Challenges specific to Energy & Solar
ব্রাউনআউট লেখার মাঝপথে flash নষ্ট করে
মেঘ PV আউটপুট কমিয়ে দিলে এবং কন্ট্রোলার ডিপ করলে ESP32 ঠিক যখন একটি লগ রেকর্ড কমিট করছে তখনই ব্রাউনআউট হয়, ফলে একটি টর্ন রাইট ফাইলসিস্টেমকে অকেজো করে দেয়।
Modbus CRC ত্রুটি বাস্তব শূন্য হিসেবে লগ হয়
ইনভার্টার ও কন্ট্রোলারের মধ্যে নয়েজি RS-485 রানে CRC ব্যর্থতা ঘটে, যা সাদামাটা ফার্মওয়্যার 0A / 0V হিসেবে রেকর্ড করে, মৃত স্ট্রিং দেখায় এবং ভুয়া নাইট-ডিসচার্জ অ্যালার্ম ট্রিগার করে।
ইনভার্টার রেজিস্টার ম্যাপ ফার্মওয়্যারভেদে বদলায়
ভেন্ডররা ইনভার্টার ফার্মওয়্যার রিভিশনের মধ্যে নীরবে হোল্ডিং রেজিস্টার রিম্যাপ করে, ফলে একটি হার্ডকোডেড SoC বা স্ট্যাটাস অ্যাড্রেস কোনো ত্রুটি ফ্ল্যাগ ছাড়াই ভুল স্কেলড মান ফেরত দিতে শুরু করে।
ব্যাটারি SoC রিক্যালিব্রেশন ছাড়া ড্রিফট করে
lead-acid বা LFP ব্যাংকে coulomb-counting সপ্তাহে কয়েক ঘণ্টার ত্রুটি জমায়, যদি না ফার্মওয়্যার কন্ট্রোলারের রিপোর্ট করা float/rest OCV প্লাটোতে SoC পুনঃনির্ধারণ করে।
ব্যাকহল গ্যাপ রাতের টেলিমেট্রি হারায়
cellular বা LoRa-তে থাকা দূরবর্তী সোলার সাইট ঘণ্টার পর ঘণ্টা সংযোগ হারায়, এবং publish-and-forget ফার্মওয়্যার অপারেটরদের রোগনির্ণয়ের জন্য প্রয়োজনীয় ঠিক সেই ব্যাটারি-ক্ষয়ের সময়টিই হারিয়ে ফেলে।
তাপ অ্যারের আগে নোডকে দুর্বল করে
গ্রীষ্মে একটি combiner-box এনক্লোজার 70C ছুঁয়ে যায়, যা ESP32-কে থার্মাল থ্রটল ও ক্লক ড্রিফটে ঠেলে দেয় এবং ঠিক যখন লোড পিকে থাকে তখনই স্যাম্পল টাইমস্ট্যাম্প ও Wi-Fi অ্যাসোসিয়েশন বিকৃত করে।
How GizanTech solves them
- পাওয়ার-লস-সেফ লগিং. ১. wear-leveled LittleFS পার্টিশনে প্রতি-রেকর্ড CRC সহ append-only রিং বাফার এবং সক্রিয় brownout detector (BOD), ফলে একটি টর্ন রাইট বুটের সময় শনাক্ত ও বাতিল হয়, ভলিউম কখনো অকেজো হয় না।
- ভ্যালিডেটেড Modbus RTU অ্যাকুইজিশন. ২. retry-and-quarantine সহ CRC-পরীক্ষিত Modbus RTU রিড: ব্যর্থ ফ্রেম একটি NULL/stale ফ্ল্যাগ দেয়, কখনো বানানো 0 নয়, এবং প্রতি-রেজিস্টার স্কেলিং ফ্যাক্টর কোডে নয়, ভার্সনড কনফিগে থাকে।
- রেজিস্টার-ম্যাপ ভার্সন গার্ডিং. ৩. সংযোগের সময় আমরা একটি ইনভার্টার identity/firmware রেজিস্টার প্রোব করে মিলে যাওয়া register-map প্রোফাইল বেছে নিই, এবং SoC বা স্ট্যাটাস শব্দ নীরবে ভুল পড়ার বদলে অজানা ম্যাপে অ্যালার্ম দিই।
- OCV-অ্যাঙ্করড SoC অনুমান. ৪. float প্লাটোতে rest-voltage (OCV) পুনঃঅ্যাঙ্করিংয়ের সাথে coulomb counting মিলিয়ে, LFP ও lead-acid-এর জন্য কেমিস্ট্রি-নির্দিষ্ট কার্ভসহ, সপ্তাহব্যাপী অযত্নেও SoC ত্রুটি সীমাবদ্ধ রাখি।
- স্টোর-অ্যান্ড-ফরোয়ার্ড ব্যাকহল. ৫. QoS 1 সহ MQTT-তে টাইমস্ট্যাম্পড store-and-forward এবং on-flash ব্যাকলগ, ফলে কয়েক ঘণ্টার cellular/LoRa আউটেজের পর লিংক ফিরলে পুরো রাতের ক্ষয়-কার্ভ রিপ্লে হয়।
- থার্মাল-অ্যাওয়্যার শিডিউলিং ও OTA. ৬. ইন্ডাস্ট্রিয়াল-টেম্প BOM, internal-temp-gated Wi-Fi/TLS কাজ এবং rollback সহ signed A/B OTA, ফলে একটি দূরবর্তী combiner-box নোড নিরাপদে আপডেট হয় এবং কখনো থার্মাল থ্রটলে গিয়ে খারাপ flash-এ ঢোকে না।
| প্যারামিটার | উৎস | স্যাম্পল রেট | সীমার বাইরে নিরাপদ পদক্ষেপ | ডেটা রিটেনশন প্রয়োজন |
|---|---|---|---|---|
| PV স্ট্রিং ভোল্টেজ / কারেন্ট | ADC অ্যানালগ (divider + shunt) বা কন্ট্রোলার Modbus রেজিস্টার | 1 Hz | স্ট্রিংকে faulted হিসেবে ফ্ল্যাগ করো, last-good ধরে রাখো, low/no-yield অ্যালার্ম তোলো; কখনো বানানো 0 লগ কোরো না | 1 s raw রোলিং 48 h, 1 min অ্যাগ্রিগেট 2 yr ডিগ্রেডেশন ট্রেন্ডের জন্য |
| MPPT চার্জ অবস্থা | কন্ট্রোলার Modbus হোল্ডিং রেজিস্টার (bulk/absorb/float/fault enum) | 0.2 Hz | CRC ব্যর্থতা / অজানা enum-এ quarantine করো, আগের অবস্থা রাখো, stuck-bulk-এ অ্যালার্ম দাও | State-change ইভেন্ট 5 yr রাখা হয়; float ট্রানজিশনের পূর্ণ অডিট |
| ব্যাটারি SoC | rest-এ OCV-এর সাথে coulomb count মিলিয়ে; কন্ট্রোলার রেজিস্টার ক্রস-চেক | 0.5 Hz অভ্যন্তরীণ, float-এ পুনঃঅ্যাঙ্কর | 0-100% ক্ল্যাম্প করো, OCV-এর সাপেক্ষে ড্রিফট ব্যান্ড ছাড়ালে ফ্ল্যাগ করো, low-SoC কাটঅফ ল্যাচ করো | 1 min SoC 2 yr; depletion-window ইভেন্ট পূর্ণ রেটে |
| ইনভার্টার স্ট্যাটাস / AC আউটপুট | RS-485-এ ইনভার্টার Modbus RTU (status word, kW, fault code) | 0.2 Hz | Map-version গার্ড; grid/fault বিটে সাথে সাথে অ্যালার্ম দাও ও pre-fault বাফার স্ন্যাপশট করো | Fault কোড + 60 s pre-fault রিং বাফার 5 yr রাখা হয় |
| এনক্লোজার / heatsink তাপমাত্রা | combiner box-এর ভেতরে I2C/1-Wire সেন্সর | 0.1 Hz | >70C হলে নোড ডিউটি সাইকেল derate করো, OTA পিছিয়ে দাও, throttle-এর আগে অ্যালার্ম দাও | 1 min 1 yr থার্মাল-সম্পর্ক বিশ্লেষণের জন্য |
Go deeper
ESP32 Firmware & IoT Development for other industries
Frequently asked questions
আপনারা কোন সোলার চার্জ কন্ট্রোলার ও ইনভার্টার ইন্টিগ্রেট করতে পারেন?
Modbus RTU/TCP বা অ্যানালগ টেলিমেট্রি প্রকাশকারী যেকোনো ডিভাইস: Victron, EPEVER, Morningstar, SMA, Growatt এবং অনুরূপ। আমরা প্রতি মডেলের জন্য একটি ভার্সনড register-map প্রোফাইল তৈরি করি, যাতে রেজিস্টার রিম্যাপ করা ফার্মওয়্যার আপডেট নীরবে মনিটরিং ভেঙে না ফেলে।
ডেডিকেটেড BMS ছাড়া ব্যাটারি SoC কীভাবে নির্ভুল রাখেন?
আমরা LFP ও lead-acid-এর জন্য কেমিস্ট্রি-নির্দিষ্ট কার্ভ ব্যবহার করে rest/float প্লাটোতে open-circuit-voltage পুনঃঅ্যাঙ্করিংয়ের সাথে coulomb counting মিলিয়ে ফেলি। এতে শুধু কারেন্ট ইন্টিগ্রেশন সপ্তাহব্যাপী অযত্ন পরিচালনায় যে সঞ্চিত ড্রিফট জমায়, তা সীমাবদ্ধ থাকে।
দূরবর্তী সাইট সংযোগ হারালে ডেটার কী হয়?
টেলিমেট্রি টাইমস্ট্যাম্প করে একটি flash ব্যাকলগে লেখা হয়, এরপর cellular বা LoRa লিংক ফিরলে MQTT QoS 1-এ রিপ্লে করা হয়। publish ব্যর্থতায় বাদ পড়ার বদলে রাতের ব্যাটারি-ক্ষয়ের পুরো সময়টি সম্পূর্ণ রেজল্যুশনে সংরক্ষিত থাকে।
মেঘলা দিনের ডিপ থেকে ব্রাউনআউট কি লগারকে নষ্ট করবে?
না। আমরা একটি wear-leveled পার্টিশনে append-only, প্রতি-রেকর্ড-CRC রিং বাফার ব্যবহার করি এবং brownout detector সক্রিয় রাখি, ফলে পাওয়ার ডিপে বাধাপ্রাপ্ত লেখা ফাইলসিস্টেম নষ্ট না করে বুটের সময় শনাক্ত ও বাতিল হয়।
দূরবর্তী অযত্ন অ্যারেতে ফার্মওয়্যার কি নিরাপদে আপডেট হতে পারে?
হ্যাঁ। আমরা স্বয়ংক্রিয় rollback সহ signed A/B OTA পাঠাই, এবং আপডেটটি এনক্লোজার তাপমাত্রা ও লিংক স্বাস্থ্যের ওপর গেটেড থাকে, ফলে একটি 70C combiner-box নোড থার্মাল থ্রটল বা দুর্বল সংযোগের সময় কখনো flash করে না।