| APC_MODBUS(8) | NUT Manual | APC_MODBUS(8) |
نام (NAME)
apc_modbus - درایور پروتکل مادباس برای APC Smart-UPS
خلاصه دستور (SYNOPSIS)
apc_modbus -h
apc_modbus -a UPS_NAME [OPTIONS]
سختافزارهای پشتیبانیشده (SUPPORTED HARDWARE)
بهطور کلی این درایور باید برای تمام دستگاههای UPS مادباس APC کار کند. برخی دستگاهها ممکن است اطلاعات بیشتری نسبت به آنچه در حال حاضر پشتیبانی میشود، مانند چند فاز بودن، ارائه دهند. یک قاعده کلی تجربی این است که دستگاههای APC (یا نسخههای سفتافزار) عرضهشده پس از سال ۲۰۱۰، به احتمال بیشتری از استاندارد USB HID، از مادباس پشتیبانی میکنند.
با سختافزارهای زیر آزمایش شده است:
توجه داشته باشید که باید ارتباط مادباس را فعال کنید. در پنل جلویی UPS، به حالت منوی پیشرفته (Advanced Menu) بروید، زیر بخش Configuration گزینه Modbus را فعال کنید.
نکته
این درایور با رابطهای سریال، TCP و USB برای مادباس آزمایش شده است. شایان ذکر است که امروزه پورتهای سریال روی همه دستگاهها در دسترس نیستند؛ پشتیبانی از TCP ممکن است نیازمند خرید یک کارت مدیریت شبکه اضافی باشد؛ و پشتیبانی از USB در حال حاضر نیازمند ساخت غیراستاندارد libmodbus (یک pull request در مخزن بالادستی کتابخانه در زمان انتشار این سند در انتظار است) به عنوان پیشنیاز ساخت NUT به همراه این بخش از پشتیبانی است. برای جزئیات بیشتر (از جمله نحوه ساخت کتابخانه سفارشی و ساخت NUT با آن) لطفاً به NUT PR #2063 مراجعه کنید.
نکته
طبق نسخه کنونی منتشرشده، این درایور از خواندن اطلاعات از UPS پشتیبانی میکند. انتظار میرود پیادهسازی پشتیبانی از نوشتن (تنظیم متغیرهای قابل تغییر یا ارسال دستورات) در نسخههای بعدی ارائه شود. این موضوع میتواند بهویژه بر روتینهای خاموش شدن میزبان تأثیر بگذارد (نبود قابلیت دستور فعال به UPS برای خاموش شدن یا چرخه مجدد توان در پایان کار). به عنوان یک راهکار موقت، در صورت نیاز میتوانید apctest (از پروژه "apcupsd") را همراه با "Test to kill power" در فرآیند مراحل پایانی خاموشسازی سیستم ادغام کنید.
آرگومانهای اضافی (EXTRA ARGUMENTS)
این درایور همچنین از تنظیمات اختیاری زیر پشتیبانی میکند:
port = string
نکته
این مقدار میتواند یک مسیر در سیستم فایل دستگاه مانند /dev/usb/hiddev0 باشد، اما استفاده فعلی از API کتابخانه libusb مانع از دانستن و تطبیق بر اساس چنین شناسههایی میشود. همچنین آنها ذاتاً ممکن است غیرقابل اعتماد باشند (وابسته به اتصال مجدد و ترتیب شمارش دستگاهها). در حال حاضر مقدار واقعی نادیده گرفته میشود، اما از نظر ساختاری وجود پیکربندی port همچنان الزامی است.
کنترل چندین واحد UPS بهطور همزمان با اجرای چندین نمونه از این درایور امکانپذیر است، به شرطی که بتوان آنها را با تنظیم ترکیبی از گزینههای vendor، product، vendorid، productid، serial، bus و/یا device که در ادامه شرح داده شدهاند، بهطور یکتا متمایز کرد. برای دستگاهها یا سیستمعاملهایی که اطلاعات کافی ارائه نمیدهند، گزینه allow_duplicates میتواند کاربردی باشد (محدود و پرخطر!).
vendorid = regex, productid = regex, vendor = regex, product = regex, serial = regex
برای یافتن رشتههای مورد نظر جهت تطبیق، اجرای lsusb(8) یا اجرای این درایور NUT را با آرگومان خط فرمان -DD امتحان کنید.
مثالها:
bus = regex
انتخاب یک UPS روی یک گذرگاه (bus) یواسبی خاص یا گروهی از گذرگاهها. آرگومان یک عبارت منظم است که باید با نام گذرگاهی که UPS به آن متصل است مطابقت داشته باشد (مانند bus="002" یا bus="00[2-3]") همانطور که در لینوکس در /sys/bus/usb/devices یا lsusb(8) دیده میشود؛ شامل صفرهای آغازین.
نکته
شمارههای گذرگاه توسط سیستمعامل تضمین نمیشوند که در طول راهاندازیهای مجدد سیستم، بارگذاری مجدد درایور هسته یا اتصال مجدد دستگاه (مانند تغییر وضعیت دستگاههای متصل به هابهای USB) پایدار بمانند.
device = regex
انتخاب یک UPS روی یک دستگاه USB خاص یا گروهی از دستگاهها. آرگومان یک عبارت منظم است که باید با نام دستگاهی که UPS به آن متصل است مطابقت داشته باشد (مانند device="001" یا device="00[1-2]") همانطور که در لینوکس در /sys/bus/usb/devices یا lsusb(8) دیده میشود؛ شامل صفرهای آغازین.
نکته
شمارههای دستگاه توسط سیستمعامل تضمین نمیشوند که در طول راهاندازی مجدد سیستم یا اتصال مجدد دستگاه پایدار بمانند.
busport = regex
در صورت پشتیبانی سختافزار، سیستمعامل و libusb در استقرار مورد نظر، این گزینه باید امکان تعیین شماره پورت فیزیکی روی هاب USB را به جای مقادیر منطقی شمارش device فراهم کند، که این امر به نوبه خود — در طول راهاندازی مجدد یا اتصال مجدد پایداری بیشتری خواهد داشت. این مقدار ممکن است برای مثال در خروجی ساختار درختی USB دستور lsusb -tv روی سیستمهایی که این ابزار را دارند مشاهده شود.
نکته
این گزینه در عمل توسط برخی نسخههای ساختهشده NUT پشتیبانی نمیشود (در این حالت باید با یک هشدار نادیده گرفته شود) و همچنین توسط همه سیستمهایی که NUT میتواند روی آنها اجرا شود پشتیبانی نمیگردد.
allow_duplicates
اگر چندین دستگاه UPS دارید که ممکن است با گزینههای بالا بهطور یکتا شناسایی نشوند (برای مثال تنها VID:PID در آنجا قابل شناسایی باشد)، این فلگ به هر نمونه درایور که روی آن تنظیم شده اجازه میدهد در صورت موجود بودن، اولین تطابق را انتخاب کرده یا به سراغ امتحان مورد دیگر برود.
بهطور معمول مقداردهی اولیه درایور در این مرحله با اعلام خطای "Resource busy" یا خطایی مشابه متوقف میشود، با این فرض که دستگاهی که از جهات دیگر به درستی مطابقت یافته یکتا است — و فرآیند دیگری در حال حاضر آن را مدیریت میکند.
هشدار
این ویژگی ذاتاً غیرقطعی (non-deterministic) است! ارتباط نام نمونه درایور با دستگاه واقعی ممکن است در دفعات مختلف اجرا تغییر کند!
اگر تنها دانستن اینکه حداقل یکی از دستگاههای UPS بینام شما آنلاین است برایتان اهمیت دارد، این گزینه میتواند مفید باشد.
اما اگر الزاماً باید بدانید کدام یک است، مفید نخواهد بود!
usb_set_altinterface = bAlternateSetting
usb_config_index, usb_hid_rep_index, usb_hid_desc_index, usb_hid_ep_in, usb_hid_ep_out
به عنوان یک قاعده تجربی برای کشف usb_hid_desc_index ، میتوانید مقادیر بزرگتر wDescriptorLength (تقریباً بیش از ۶۰۰ بایت) را در گزارشهای lsusb یا ابزارهای مشابه مشاهده کنید.
LIBUSB_DEBUG = INTEGER
برای مورد دوم، میتوانید گزینه درایور LIBUSB_DEBUG را تنظیم کنید؛ روش دیگر این است که طبق شیوه کلاسیک متغیر محیطی LIBUSB_DEBUG را پیش از شروع برنامه درایور NUT صادر (export) کنید (میتواند در اسکریپت راهاندازی درایور یا متد سرویس، احتمالاً از طریق nut.conf(5) تنظیم و "export" شود)، با یک مقدار عددی مانند 4 ("تمام پیامها صادر میشوند").
برای جزئیات بیشتر، از جمله مقادیر پشتیبانیشده فعلی برای نسخه کتابخانه شما، برای مثال ببینید:
porttype=value
port=value
baudrate=num
parity=value
databits=num
stopbits=num
slaveid=num
response_timeout_ms=num
اشکالات (BUGS)
پشتیبانی از RTU USB (RTU USB support)
این درایور برای ارتباط با پروتکل مادباس بهطور مشخص از طریق USB (سریال و TCP بخشی از پایهکد مشترک کتابخانه هستند)، به قابلیتهای پیشرفته libmodbus متکی است. در زمان نگارش این متن، پروژه مشترک کتابخانه صرفاً در انتظار ادغام pull request دارای این قابلیت است.
در حال حاضر، اگر توزیع سیستمعامل شما مجموعه قابلیتهای مورد نیاز را ارائه نمیدهد، ممکن است لازم باشد libmodbus اختصاصی خود را بسازید و متعاقباً NUT را در مقابل این کتابخانه مجدداً بسازید، همانطور که در ویکی گیتهاب NUT در نشانی https://github.com/networkupstools/nut/wiki/APC-UPS-with-Modbus-protocol با جزئیات آمده است.
ترتیب مراحل کوتاه ممکن است به صورت زیر باشد:
cd ~/ git clone -b rtu_usb https://github.com/networkupstools/libmodbus cd libmodbus ./autogen.sh ./configure --with-libusb --prefix=/path/to/prefix make install
نکته
cd ~/ git clone https://github.com/networkupstools/nut cd nut ./autogen.sh ./configure --with-drivers=apc_modbus --with-usb --with-modbus \ --with-modbus-includes=-I/path/to/prefix/include/modbus \ --with-modbus-libs="-L/path/to/prefix/lib -lmodbus" make
نکته
دستور ./configure --enable-inplace-runtime میتواند شروع خوبی برای به ارث بردن پیکربندی ساخت از استقرار موجود NUT باشد، همانطور که با جزئیات بیشتر در نشانی https://github.com/networkupstools/nut/wiki/Building-NUT-for-in%E2%80%90place-upgrades-or-non%E2%80%90disruptive-tests توضیح داده شده است.
استفاده از نام میزبان برای UPS NMC (Using host names for UPS NMC)
یک کارت مدیریت شبکه (NMC) در UPS ممکن است یک آدرس IP ثابت/ایستا یا یک آدرس پویا (مثلاً از طریق DHCP) در شبکه شما داشته باشد. به همین دلیل، ممکن است بخواهید یا ناچار باشید از یک سرویس نامگذاری پویا برای دسترسی به UPS استفاده کنید. توجه داشته باشید که این موضوع میتواند بهویژه در هنگام قطعیهای گسترده برق و خاموشسازی سیستمها مشکلساز شود، چرا که ممکن است سرور DHCP/DNS شما پیش از نیاز درایور به تحلیل نام مربوطه از دسترس خارج شده باشد (بهویژه در طول هوکهای مراحل پایانی خاموشسازی، زمانی که یک نمونه جدید از برنامه درایور ممکن است صرفاً برای فرمان خاموش شدن یا چرخه مجدد توان به UPS آغاز به کار کند).
شایسته است اطمینان حاصل کنید کلاینت سرویس نام سیستمعامل شما میتواند نام UPS را برای مدت کافی کش کند، یا از آدرسدهی IP ثابت استفاده نمایید (همچنین برای اطمینان بیشتر، افزودن یک مدخل در /etc/hosts تا در صورت نیاز به پیکربندی مجدد فقط یک نقطه برای ویرایش وجود داشته باشد).
نویسندگان (AUTHORS)
همچنین ببینید (SEE ALSO)
درایور اصلی (The core driver)
منابع اینترنتی (Internet resources)
صفحه اصلی NUT (Network UPS Tools): https://www.networkupstools.org/historic/v2.8.5
| 06/21/2026 | Network UPS Tools 2.8.5 |