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 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، میتوانید 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" بنابراین منجر به ذخیره پارامترها نمی شود.
اگر cFos Charging Manager در حالت «مدیریت بار» نیست، بلکه در حالت «مانیتورینگ» است، میتوانید با استفاده از MQTT کنترل تمام Wallboxها را خودتان به دست بگیرید. این به طور خاص برای دیوارهای cFos Power Brain که به عنوان برده در حالت "مشاهده" کار می کنند، صدق می کند. برای انجام این کار، باید گزینه «فعال کردن کنترل دیوار باکس» را در زیر MQTT در تنظیمات مدیر شارژ علامت بزنید. سپس مدیر شارژ cFos به مبحث MQTT cfos_mqtt/ctl
گوش می دهد و منتظر پیام هایی با یک شی JSON است. این شی دارای اشیاء فرعی به عنوان ویژگی با شناسه دستگاه به عنوان نام است. اشیاء فرعی به این شکل هستند: {"cur": c، "ena": b، "wke": b، "phs": p}، که در آن c جریان شارژ در mA است و b می تواند درست یا نادرست باشد. . "ena": false شارژ را در wallbox غیرفعال می کند، "wke": true سعی می کند دستور "auto wake up" را به wallbox ارسال کند (در حال حاضر فقط با wallbox های cFos Power Brain امکان پذیر است). p می تواند 1 یا 3 باشد تا بین شارژ 1 فاز و 3 فاز جابجا شود. همچنین میتوانید «cur»، «ena»، «wke» و «phs» را حذف کنید تا فقط عملکردهای کنترلی خاصی را انجام دهید. مثال:{"E1":
{cur: 8000, ena: true, wke: true},
"E2":
{cur: 10000, phs: 3}}
جریان شارژ وال باکس با شناسه دستگاه را روی 8 آمپر تنظیم می کند، شارژ را فعال می کند و سعی می کند ماشین را بیدار کند. علاوه بر این، جریان شارژ Wallbox E2 روی 10 آمپر تنظیم شده و به شارژ 3 فاز تغییر می کند.
میتوانید URL کارگزار MQTT را برای انتقال ورودیهای گزارش در گزارش سیستم در زیر «پیکربندی» مشخص کنید. سپس مدیر شارژ cFos همه ورودیهای گزارش را تحت عنوان cfos_mqtt/log
منتشر میکند. این به شما امکان می دهد تا از راه دور گزارش ها را برای نظارت بر مدیر شارژ ارزیابی کنید. همچنین میتوانید URL کارگزار MQTT را برای ورودیهای گزارش تراکنش در زیر «پیکربندی» مشخص کنید. سپس تمام تراکنش های بارگذاری تحت عنوان cfos_mqtt/ta_log
می شوند. این اجازه می دهد تا داده های صورتحساب تراکنش های شارژ از راه دور ارزیابی شوند و پشتیبان گیری از تراکنش های شارژ در سیستم دیگری ایجاد شود. تراکنش شارژ با وصل شدن کانکتور شارژ شروع می شود و با قطع شدن آن پایان می یابد.
می توانید شمارنده های سفارشی را با استفاده از 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} باشد. متغیرهای شمارنده مختلف می توانند موضوعات مختلفی داشته باشند و به محض انتشار پیام تحت عنوان مربوطه به روز می شوند.