مستندات

زمینه های کاربردی MQTT

MQTT یک پروتکل اینترنتی با کارگزار پیام مرکزی است. با این کارگزار پیام، شرکت کنندگان می توانند در "موضوعات" خاصی مشترک شوند و در مورد موضوعات پیام ارسال کنند. مدیر شارژ cFos می تواند به پیام ها در مورد موضوعات خاص گوش دهد و بنابراین می تواند از طریق MQTT کنترل شود. همچنین می تواند وضعیت دستگاه هایی را که مدیریت می کند را انتقال دهد. cFos Power Brain Wallbox را نیز می توان از طریق MQTT کنترل کرد و وضعیت آن را انتقال داد. این در هنگام اتصال به یک سیستم اتوماسیون خانگی، برای کنترل صنعتی (M2M) و برای نظارت و ضبط مفید است. همه موضوعات با cfos_mqtt شروع می شوند. اگر می‌خواهید چندین دستگاه cFos MQTT را با یک کارگزار MQTT وصل کنید، موضوع می‌تواند به صورت اختیاری با cfos_mqtt_<Seriennummer>/ شروع شود که تحت پیکربندی قابل تنظیم است. در پیکربندی می‌توانید یک URL برای کارگزار استاندارد MQTT نیز تعیین کنید. URL ها می توانند به صورت اختیاری با mqtt:// و mqtts:// شروع شوند. با mqtts:// مدیر شارژ cFos یا cFos Power Brain Wallbox یک اتصال TLS برقرار می کند. درگاه استاندارد 1883 برای اتصالات رمزگذاری نشده و 8883 برای اتصالات TLS استفاده می شود. با این حال، می توانید یک پورت را نیز در URL مشخص کنید. می‌توانید نام کاربری و رمز عبور را در نشان‌گذاری URL معمولی وارد کنید، به عنوان مثال mqtt://user:password@192.168.2.111. اگر یک کارگزار MQTT را در پیکربندی مدیر شارژ cFos مشخص کنید، می توانید یک کارگزار جداگانه را مشخص کنید یا به سادگی mqtt. سپس از کارگزار پیش فرض ذخیره شده در پیکربندی استفاده می شود.

مدیر شارژ cFos از MQTT 3.1.1 و MQTT 5 پشتیبانی می کند. اگر URL را با mqtt3:// یا mqtt5:// (mqtts3:// و mqtts5:// برای اتصال رمزگذاری شده) شروع کنید، نسخه پروتکل را تعیین می کنید. پیش فرض MQTT 3.1.1 است. با MQTT 5، مدیر شارژ cFos سعی می کند در صورت وجود پیام خطای مربوطه، به MQTT 3.1.1 برگردد. این کار با کارگزاران قدیمی Mosquitto کار می کند، اما نه لزوماً با کارگزاران دیگر.

توجه: از آنجایی که راه‌اندازی MQTT به رمز عبور مدیریت نیاز دارد، مدیر شارژ داده‌ها را بر این اساس مدیریت می‌کند. بنابراین داده هایی عمدا ارسال می شوند که فقط با رمز عبور مدیریت قابل دسترسی هستند.

نکته در مورد کارگزاران MQTT: به لطف Stefan G. (#diebestenuserderwelt) ما توانستیم در برابر کارگزار MQTT که در ioBroker تعبیه شده است آزمایش کنیم. این کارگزار MQTT 3.1.1 (از فوریه 2023) از چندین جنبه مطابق با استاندارد رفتار نمی کند: تلاش های اتصال بی سر و صدا و بدون پیام خطا خاتمه می یابند، بارگذاری بار گاهی در بسته های PUBLISH وجود ندارد، بسته های PUBLISH ظاهراً دو بار ارسال می شوند. (این کار را می توان با تنظیم تنظیمات انجام داد؟). بنابراین این کارگزار برای کنترل Charging Manager API مناسب نیست، زیرا درخواست‌های API ممکن است چندین بار اجرا شوند. حتی اگر ما علاقه مندیم که پیاده سازی MQTT ما تا حد امکان با بسیاری از کارگزاران سازگار باشد، در حال حاضر توصیه می کنیم از Mosquitto برای ioBroker استفاده کنید.

ادغام کنتورها و جعبه های دیواری با استفاده از نوع دستگاه "ورودی HTTP".

به جای تامین این دستگاه ها از طریق HTTP (به HTTP API -> HTTP Counters and Wallboxes مراجعه کنید)، این دستگاه ها همچنین می توانند به MQTT گوش دهند. mqtt یا URL واسطه MQTT را به عنوان آدرس دستگاه وارد کنید. متر یا wallbox مربوطه سپس به موضوع cfos_mqtt/set/<Geräte-ID> گوش می دهد، به عنوان مثال برای یک متر با شناسه دستگاه M1 به cfos_mqtt/set/M1. سپس شمارشگر ورودی HTTP یک رشته JSON را به عنوان پیام انتظار می‌برد، همانطور که در HTTP API در زیر «HTTP Counters and Wallboxes» توضیح داده شده است. بنابراین منبع MQTT شما باید داده ها را در این قالب ارائه دهد. می‌توانید دستگاه‌هایی را که CFos Charging Manager پشتیبانی نمی‌کند، با به‌دست‌آوردن داده‌ها از منبع دیگری (مثلاً یک سیستم اتوماسیون خانگی) و سپس وارد کردن آن‌ها به مدیر شارژ، ادغام کنید.
توجه: اگر فرمت داده های مبدأ متفاوت از آنچه شمارنده HTTP انتظار می رود باشد، می توانید یک شمارنده سفارشی نیز ایجاد کنید. برای MQTT در زیر توضیح داده شده است.

مثال:
شما یک شمارنده ورودی HTTP ایجاد کرده اید و دارای M3 به عنوان شناسه دستگاه است. به عنوان آدرسی که آدرس کارگزار Mosquitto را داده اید، به عنوان مثال mqtt://. اگر دستور زیر را در خط فرمان رایانه ای که Mosquitto دارد وارد کنید:
mosquitto_pub -h localhost -t cfos_mqtt/set/M3 -m '{ "model": "TestModell", "import_wh": 12345, "export_wh": 23456, "voltage": [231, 232, 233], "current": [10001, 10002, 10003] }'
سپس شمارنده باید حاوی مقادیر بالا باشد.

وضعیت دستگاه های مدیر شارژ را منتقل کنید

در پیکربندی مدیر شارژ، می‌توانید URL کارگزار MQTT (یا mqtt برای کارگزار استاندارد) را مشخص کنید، که تحت آن مدیر شارژ، وضعیت همه دستگاه‌ها را تحت عنوان cfos_mqtt/get/dev_info منتشر می‌کند. این را در قالب شناخته شده از HTTP get_dev_info منتقل می کند. این همه مقادیر دستگاه ها را همانطور که در رابط کاربری قابل مشاهده است، به شما می دهد، به عنوان مثال مقادیر عملکرد مترها یا وضعیت دیوارها. اگر می‌خواهید فقط در دستگاه‌های جداگانه مشترک شوید، می‌توانید کادر «انتشار اطلاعات درباره MQTT» را غیرفعال کنید و به جای آن گزینه «انتشار اطلاعات درباره MQTT» را در تنظیمات مربوط به دستگاه‌های جداگانه در «نمایش» علامت بزنید. سپس یک رشته JSON مربوطه برای دستگاه مربوطه تحت عنوان cfos_mqtt/get/<شناسه دستگاه> منتشر می شود. همچنین می‌توانید مشترک همه مقادیر جهانی در موضوع cfos_mqtt/get/params شوید، زیرا آنها با فرمت معروف به HTTP get_dev_info در زیر «params» خروجی می‌شوند.

CFos Charging Manager API را از طریق MQTT کنترل کنید

در پیکربندی مدیر شارژ cFos، می‌توانید URL کارگزار MQTT (یا mqtt برای کارگزار استاندارد) را در زیر «Broker for API access via MQTT» مشخص کنید. اگر این مقدار خالی نباشد، مدیر شارژ cFos مشترک همه موضوعاتی می شود که با cfos_mqtt/api/ شروع می شوند. سپس پیام‌های تحت چنین موضوعی را طوری تفسیر می‌کند که گویی نام موضوع یک URL HTTP است که با /cnf ختم می‌شود؟ شروع می کند و آن را به API HTTP ارسال می کند. سپس مدیر شارژ، پاسخ API HTTP را به صورت JSON تحت عنوان cfos_mqtt/api_res منتشر می کند. شما تقریباً کل API HTTP را از طریق MQTT تحت کنترل خود دارید. استثناها تماس‌های API هستند که پاسخ‌های طولانی JSON را برمی‌گردانند. مثال: cfos_mqtt/api/cmd=set_cm_vars&name=x&val=1 از تابع API set_cm_var برای تنظیم متغیر Charging Manager x روی 1 استفاده می کند. یک پیام زیر cfos_mqtt/api/cmd=enter_rfid&rfid=5678&dev_id=E1 وجود دارد. cfos_mqtt/api/cmd=enter_rfid&rfid=5678&dev_id=E1 RFID 5678 را برای Wallbox با شناسه دستگاه E1 وارد کنید (به توابع RFID توسعه یافته ما نیز مراجعه کنید).
می توانید داده هایی را که از طریق HTTP POST منتقل می شوند در پیام زیر موضوع قرار دهید.

مثال: تغییر دوره ای حداکثر جریان کل موجود برای مدیر شارژ:
کارگزار خود را در تنظیمات کلی Charging Manager در زیر «Broker for API access via MQTT» وارد کنید (یا اگر قرار است از کارگزار پیش‌فرض ذخیره شده در «Configuration» استفاده شود، به سادگی mqtt کنید). سپس با استفاده از MQTT موضوع را منتشر کنید
cfos_mqtt/api/cmd=set_params
یک شی JSON با محتوای زیر:
{"max_total_cur_prc": p}
که در آن p درصدی از حداکثر جریان کل از پیش تعیین شده است که باید گرفته شود.
توجه: برخی از تماس‌های HTTP API منجر به ذخیره تنظیمات توسط مدیر شارژ می‌شود. اگر آن‌ها را زیاد اجرا کنید، فلاش (در cFos Power Brain یا cFos Wallbox Booster) یا کارت SD در Raspberry فرسوده می‌شود. فراخوانی API "set_params" با پارامتر جداگانه "max_total_cur_prc" بنابراین منجر به ذخیره پارامترها نمی شود.

کنترل دیوار باکس ها از طریق MQTT

اگر مدیر شارژ cFos در حالت «مدیریت بار» نیست، بلکه در حالت «مشاهده» است، می‌توانید از MQTT برای کنترل تمام جعبه‌های دیواری خودتان استفاده کنید. این امر به ویژه در مورد جعبه‌های دیواری cFos Power Brain که به عنوان برده در حالت "مشاهده" کار می‌کنند، صدق می‌کند. برای این کار باید در تنظیمات مدیر شارژ در زیر MQTT تیک گزینه «فعال کردن کنترل دیواری باکس» را بزنید. سپس مدیر شارژ cFos به مبحث MQTT cfos_mqtt/ctl گوش می دهد و منتظر پیام هایی با یک شی JSON است. این شی دارای اشیاء فرعی با شناسه دستگاه به عنوان نام به عنوان ویژگی است. اشیاء فرعی مانند این هستند: {"cur": c، "ena": b، "wke": b}، که در آن c جریان شارژ بر حسب mA است و هر b می تواند درست یا نادرست باشد. "ena": false شارژ را در wallbox غیرفعال می کند، "wke": true سعی می کند دستور "auto wake up" را به wallbox ارسال کند (در حال حاضر فقط با wallbox های cFos Power Brain امکان پذیر است). شما همچنین می توانید "cur"، "ena" و "wke" را حذف کنید و فقط عملکردهای کنترلی خاصی را انجام دهید. مثال:
{"E1":
{cur: 8000, ena: true, wke: true},
"E2":
{cur: 10000}}

جریان شارژ جعبه دیواری با شناسه دستگاه را روی 8 آمپر تنظیم می کند، شارژ را فعال می کند و سعی می کند ماشین را بیدار کند. علاوه بر این، جریان شارژ برای Wallbox E2 روی 10 آمپر تنظیم شده است.

ثبت گزارش و تراکنش را از طریق MQTT ارسال کنید

می‌توانید URL کارگزار MQTT را برای انتقال ورودی‌های گزارش در گزارش سیستم در زیر «پیکربندی» مشخص کنید. سپس مدیر شارژ cFos همه ورودی‌های گزارش را تحت عنوان cfos_mqtt/log منتشر می‌کند. این به شما امکان می دهد تا از راه دور گزارش ها را برای نظارت بر مدیر شارژ ارزیابی کنید. همچنین می‌توانید URL کارگزار MQTT را برای ورودی‌های گزارش تراکنش در زیر «پیکربندی» مشخص کنید. سپس تمام تراکنش های بارگذاری تحت عنوان cfos_mqtt/ta_log می شوند. این اجازه می دهد تا داده های صورتحساب تراکنش های شارژ از راه دور ارزیابی شوند و پشتیبان گیری از تراکنش های شارژ در سیستم دیگری ایجاد شود. تراکنش شارژ با وصل شدن کانکتور شارژ شروع می شود و با قطع شدن آن پایان می یابد.

شمارنده های سفارشی با MQTT

می توانید شمارنده های سفارشی را با استفاده از rtype=2 برای MQTT ایجاد کنید. این شمارنده ها مشابه شمارنده های HTTP تعریف می شوند (rtype = 1). با این حال، آدرس‌های اینجا آدرس‌های اینترنتی HTTP نیستند، بلکه موضوعات MQTT هستند. مثال:
"power_w": {
"address": "/test_topic3",
"type": "float",
"query": "power_w"
}

در اینجا شمارنده تعریف‌شده توسط کاربر مشترک موضوع /test_topic3 می‌شود و انتظار دارد یک شی JSON با ویژگی "power_w"، یعنی {"power_w": 1234} باشد. متغیرهای شمارنده مختلف می توانند موضوعات مختلفی داشته باشند و به محض انتشار پیام تحت عنوان مربوطه به روز می شوند.