توجه: مدیر شارژ cFos می تواند اکثر اینورترهای خورشیدی را با استفاده از SunSpec بخواند (نوع دستگاه "SunSpec Solar Inverter / Meter"). در این مورد نیازی نیست که تعریف ضد خود را ایجاد کنید.
مدیر شارژ cFos به شما امکان می دهد تعاریف متری خود را برای پشتیبانی از مترهایی که در مجموعه استاندارد نیستند ایجاد کنید. در حال حاضر سه نوع وجود دارد: شمارنده های Modbus، شمارنده های HTTP/JSON و شمارنده های MQTT/JSON. فایل های تعریف این شمارنده ها بسیار شبیه به هم هستند. Modbus مترها داده های خود را از طریق Modbus از رجیسترهای خاص می خوانند، در حالی که مترهای HTTP/JSON داده های خود را از طریق درخواست HTTP دریافت می کنند و در پاسخ JSON را تجزیه می کنند. برای مترهای MQTT/JSON، مدیر شارژ cFos مشترک موضوعات MQTT می شود و پیام های منتشر شده تحت عنوان JSON را تجزیه می کند. مدیر شارژ cFos از یک "زبان پرس و جو" کوچک برای تجزیه استفاده می کند. در اینجا مستندات قابلیت های MQTT در مدیر شارژ cFos آمده است.
علاوه بر تعدادی از متغیرهای از پیش تعریف شده، مانند جریان و ولتاژ، مترهای تعریف شده توسط کاربر نیز می توانند متغیرهای ناشناخته، تعریف شده توسط کاربر، ورودی های پرس و جو و خروجی های تنظیم شده را بخوانند. خواندن در متغیرها و تنظیم خروجی ها امکان ارزیابی فرمول ها را فراهم می کند. در ترکیب با متغیرهای مدیر شارژ و خروجیهای مدیر شارژ جهانی که در زیر توضیح داده شده است، این یک ویژگی قدرتمند است و حتی برخی از وظایف اتوماسیون خانگی و کنترل دستگاههای خارجی مانند ذخیرهسازی باتری را امکانپذیر میکند. اگر کارهای کنترلی را با این کار اجرا می کنید، لطفاً بازخورد خود را به ما بدهید. ما به آنچه افراد با مدیر شارژ cFos کنترل می کنند بسیار علاقه مندیم و این به ما کمک می کند تا مدیر شارژ را مطابق با نیاز مشتری توسعه دهیم.
در اینجا یک مثال ساده از تعریف Modbus وجود دارد که یک رجیستر توان فعال را می خواند. شما به سادگی می توانید شماره ثبت درخواست خاص خود را تغییر دهید:
تعریف مثال برای یک ثبت واحد.
در اینجا یک مثال تعریف برای Modbus و یک تعریف برای HTTP/JSON آورده شده است:
بارگیری تعریف نمونه برای متر Modbus
بارگیری تعریف نمونه برای HTTP/JSON متر
مدیر شارژ در حال حاضر با چند پرونده از این دست همراه است ، اما شما می توانید پرونده های خود را در بخش "پیکربندی سیستم" بارگذاری کنید و همچنین دوباره آنها را حذف کنید.
در اینجا بخش بزرگی از تعاریف شمارنده ای را که ما ارائه می دهیم پیدا خواهید کرد:
تعاریف کنتور ارائه شده را دانلود کنید
اگر پرونده پیشخوان خود را ایجاد کرده اید و می تواند برای سایر کاربران نیز مرتبط باشد ، بسیار ممنون می شویم اگر آن را در دسترس ما قرار دهید. سپس آن را با نسخه های بعدی Charging Manager تحویل خواهیم داد.
برای شمارنده های بیشتر تعاریف شمارنده را دانلود کنیدتعاریف شمارنده فایلهای JSON با یک شیء جهانی JSON هستند که دارای ویژگیها و اشیاء فرعی است. 'rtype' نوع عملیات خواندن را تعیین می کند: 0 = Modbus، 1 = HTTP/JSON، 2 = MQTT/JSON. 'mtype' نوع دستگاه را تعیین می کند: 0 = دستگاه دیگر، 1 = متر، 2 = اینورتر، 4 = ذخیره سازی باتری.
می توانید اعداد را به صورت اعشاری یا هگز با پیشوند 0x مشخص کنید. نظرات تک خطی با استفاده از // نیز مجاز هستند. توصیه میکنیم فایلهای تعریف خود را از طریق اعتبارسنجی JSON5 اجرا کنید، به عنوان مثال، این اعتبارسنجی JSON5
حتماً فصل فرمول ها را بخوانید تا بفهمید کدام مقادیر را می توان در فرمول ها در مرجع زیر استفاده کرد.
silence_period ، در میلی ثانیه. طول مکث را قبل از دسترسی Modbus RTU تعیین می کند تا دستگاه شروع یک پیام را تشخیص دهد.
silence_same_slave ، true: مکث حتی با دسترسی های متعدد به یک دستگاه حفظ می شود.
تکرار: تعداد دفعات تکرار در صورت عدم پاسخگویی دستگاه.
rcv_timeout: در msec. حداکثر زمان انتظار برای هر دسترسی تا زمانی که دستگاه پاسخ دهد.
modbus_read: شماره تابع دستور خواندن Modbus معمولاً 3 یا 4 است.
modbus_read_max_registers: حداکثر تعداد رجیسترهایی که می توان در یک حرکت خواند.
modbus_allow_gaps: true = مناطق ثبت نشده استفاده نشده ممکن است در عملیات خواندن خوانده شوند.
connect_timeout: msec است. حداکثر زمان انتظار برای اتصال TCP
delay_after_connect: در msec. قبل از ارسال اولین فرمان، پس از برقراری ارتباط، مکث کنید.
upd_delay: در msec. فاصله زمانی را که یک دستگاه می تواند خوانده شود را تعیین می کند. برخی از دستگاهها هنگام نظرسنجی بیش از حد بارگذاری میشوند.
سازنده: رشته، نام سازنده. این در اطلاعات توسعه یافته کاشی نشان داده شده است.
delay_accumulated: true = مقادیر انباشته شده (کیلووات ساعت) فقط هر 3 ثانیه یا زمانی که توان کافی وجود دارد، درخواست می شود. false = این مقادیر همیشه پرس و جو می شوند.
ui_addr: URL، اگر با آدرس دستگاه برای تماس با رابط وب متفاوت باشد.
رزرو شده: آرایه ای با مقادیری که به صورت 0 تفسیر می شوند (مفید است اگر دستگاه از مقادیر خاصی بسته به مدل پشتیبانی می کند).
اگر ویژگی های ذکر شده در بالا را حذف کنید، مدیر شارژ cFos مقادیر پیش فرض را می گیرد که در بیشتر موارد به خوبی کار می کنند.
مرحله بعدی در تعریف JSON، تعریف متغیرهایی است که متر برای خواندن یا محاسبه مقادیر جریان، ولتاژ و غیره استفاده می کند. مدیر شارژ متغیرهای زیر را تشخیص می دهد:
type_designation, version, firmware_version, serial: اینها نام مدل را همانطور که در اطلاعات توسعه یافته کاشی نشان داده شده است تشکیل می دهند. هنگام راهاندازی یا بازنشانی شمارنده، اینها یک بار سؤال میشوند.
voltage_l1..voltage_l3، current_l1..current_l3، power_w، power_var، power_va، power_w_l1..power_w_l3: مدیر شارژ cFos سعی میکند جریان_l1..l3، power_w و power_va امضا شده را برای ولتاژ l1.3 محاسبه کند. لازم نیست همه متغیرها را مشخص کنید. مدیر شارژ cFos سعی می کند مقادیر را از متغیرهای موجود محاسبه کند.
import_wh، export_wh: مدیر شارژ از این متغیرها برای نمایش import_wh و export_wh استفاده میکند. با شمارنده های یک طرفه (مثلاً اینورترها) فقط باید import_wh را تعریف کنید. export_wh فقط باید برای کنتورهای دو طرفه (مانند حافظه یا کنتور برق خریداری شده) تعریف شود.
soc: فوراً در دسترس است، وضعیت شارژ باتری در اینجا به درصد در کاشی نمایش داده می شود.
علاوه بر این، می توانید متغیرهای دیگری را با نام های مختلف تعریف کنید که با هر به روز رسانی خوانده می شوند یا با استفاده از فرمول ها محاسبه می شوند. اگر متغیرهایی را تعریف کنید که از CM استفاده می کنند. شروع، به عنوان مثال CM._set_price، مقادیر اختصاص داده شده در متغیرهای مدیر شارژ جهانی ذخیره می شوند (به زیر مراجعه کنید) و بر این اساس می توان آنها را پرس و جو کرد.
متغیرهای با *: اگر متغیرهایی را تعریف کنید که با * شروع می شوند، این متغیرها در UI در کاشی شمارنده در زیر اطلاعات گسترده نمایش داده می شوند، به عنوان مثال دمای ذخیره سازی باتری.
نام شی از نام متغیر ذکر شده در بالا گرفته شده و دارای ویژگی های زیر است:
fixed: رشته ای با مقدار ثابت. برای مثال، زمانی مفید است که هیچ مقداری را نمی توان تعیین کرد، به عنوان مثال برای type_designation یا ولتاژ.
expr: رشته، متغیر خوانده نمی شود، اما به عنوان یک فرمول ارزیابی می شود.
type: اگر ثابت نیست یا expr، نوع متغیر: int16, uint16, int32, uint32, float, int64, string این برای Modbus مهم است که رجیسترها را با فرمت صحیح بخواند. uint16 و uint32 انواعی هستند که فقط می توانند اعداد مثبت را بپذیرند. با JSON/HTTP معمولاً می توانید از float استفاده کنید.
رزولوشن: شناور، مقدار خوانده شده در 'رزولوشن' ضرب می شود. مقادیر ولتاژ باید بر حسب ولت، جریان بر حسب میلی آمپر، توان بر حسب وات و انرژی بر حسب وات ساعت (وات ساعت) باشد. با «رزولوشن» منفی، اگر مقداری دارای علامت مخالف باشد، میتوانید معکوس کنید.
Once: bool (درست یا نادرست)، اگر درست باشد، مقدار فقط یک بار زمانی که دستگاه مقدار دهی اولیه می شود خوانده می شود، در غیر این صورت به صورت دوره ای.
آدرس: شماره (Modbus) یا رشته (HTTP/JSON)، شماره ثبت Modbus یا URL HTTP مقداری که باید خوانده شود.
query: رشته، برای HTTP JSON، اطلاعاتی در زبان جستجوی مدیر شارژ که با آن مقداری را که باید در پاسخ JSON خوانده شود، پیدا می کند.
order: رشته، برای Modbus ترتیب بایت، یا "hl" یا "lh"، که در آن مقدار موجود است. length: عدد، با Modbus طول یک رشته در ثبات ها. برای متغیرهای 'version' و 'firmware_version'، 'length' برای تبدیل نسخه های عددی به رشته هایی با نقطه استفاده می شود. مقادیر 2 یا 4 برای "طول" مجاز است که سپس فرمت های نسخه ab و abcd را ایجاد می کند. برای «طول» 2 و نوع «int16» یا «uint16»، مدیر شارژ بایت کم و زیاد را با یک نقطه، برای «int32» یا «uint32» کلمه کم و زیاد، برای «int64» کم و زیاد dword جدا می کند. با 'lenth' 4 و 'int32' یا 'uint32'، مدیر شارژ مقدار را به 4 بایت تقسیم می کند که با نقطه از هم جدا شده اند. برای 'int64' 4 کلمه مطابقت دارند.
regex: رشته اگر یک عبارت منظم مشخص شده باشد، پاسخ شمارنده نیازی به JSON نیست. در نتیجه، یا کل تطابق عبارت منظم یا گروه اول ارزیابی می شود. لطفاً فقط در صورتی استفاده کنید که دستگاه JSON را برنگرداند. در اینجا لیستی از ویژگی های عبارات منظم ما آمده است:
هر کاراکتر: .
کلاس های نامگذاری شده: \d \s \w \D \S \W
کلاس های ناشناس: [a-z0-9_]، [^0-9]، [^\d]
گروه هایی با گزینه های جایگزین: (ab|cd|ef)
گروه های غیر اسیر: (?:ab|cd)
(حریص) یک بار یا هیچ: a?, a??
(حریص) زیاد یا هیچ: a*, a*?
(حریص) یک یا چند بار: a+، a+؟
شروع رشته: ^
انتهای رشته: $
مدیر شارژ می تواند حداکثر 32 مقدار ورودی را از رجیسترهای مختلف یا عناصر JSON در هر دستگاه جستجو کند. ویژگی "Inputs" یک آرایه JSON است. برای هر ورودی باید ویژگی های زیر را تعریف کنید:
آدرس: آدرس (رجیستر Modbus یا URL).
count: تعداد بیت های ورودی خوانده شده با این درخواست.
query: برای HTTP/JSON، زبان پرس و جو را برای یافتن مقدار در پاسخ.
با هر بهروزرسانی، مدیر شارژ cFos همه ورودیهای تعریفشده به این روش را میخواند و بیتها را به صورت داخلی در آرایهای قرار میدهد که سپس میتوان در فرمولهای Input1..InputN جستجو کرد.
مدیر شارژ می تواند تا 32 خروجی را در هر دستگاه تغییر دهد. خروجی ها تحت «خروجی ها» به عنوان آرایه JSON از اشیاء خروجی تعریف می شوند. اگر وضعیت خروجی مربوطه تغییر کرده باشد، تمام خروجی ها در پایان هر چرخه به روز رسانی سوئیچ می شوند.
برای هر خروجی باید ویژگی های زیر را در شی خروجی تعریف کنید:
آدرس: URL HTTP با روش HTTP اختیاری، به عنوان مثال GET//}. برای تنظیم رجیسترهای Modbus، می توانید از CFos Charging Manager HTTP API استفاده کنید. مدیر شارژ دسترسی مناسب به لوکال هاست را تشخیص می دهد و درخواست را به کنترل کننده داخلی هدایت می کند تا مانند دسترسی خارجی HTTP API به مجوز نیاز نداشته باشید. اگر URL پس از همه جایگزینی خالی باشد، هیچ خروجی تنظیم نمی شود. برای مثال، تنها در صورتی میتوانید خروجیها را تغییر دهید که متغیرهای خاصی وجود داشته باشند (به فرمولها مراجعه کنید: تابع () exists). همچنین می توانید ${address} و ${id} را در آدرس مشخص کنید. این آدرس دستگاه فعلی و شناسه Modbus است که در تنظیمات تنظیم شده است. آدرس و شناسه در درجه اول برای استفاده از Modbus API استفاده می شود (به زیر مراجعه کنید).
بدنه: بدنه HTTP اختیاری برای POST یا PUT.
در URL و بدنه، میتوانید از فرمولهای ${expr} استفاده کنید که به متغیرهای مدیر شارژ جهانی یا از متر مربوطه اشاره میکنند. فرمول «expr» زمانی ارزیابی میشود که خروجی تنظیم و در متن URL یا بدنه جایگزین شود. در مثال بالا، اگر//خروجی را تنظیم کند و//آن را پاک کند، می توانید یک متغیر 'var1' تعریف کرده و آن را تنظیم کنید. به دلخواه روی 1 یا 0 را تنظیم کنید. به این ترتیب، میتوانید مقادیر عددی را برای کنترل عملکرد حافظه در ثباتهای Modbus که قبلاً در متغیری با استفاده از یک فرمول ذخیره کردهاید، بنویسید.
اگر به جای ارسال یک مقدار عددی در URL، باید بسته به فرمول، متنی را با متن دیگری جایگزین کنید، مانند سوکت های WLAN Shelly، می توانید آن را به این صورت بنویسید: ${if expr`text1`text2}. "آپوستروف" یک بک تیک است (کد اسکی 96). اگر 'expr' != 0، text1 استفاده می شود، در غیر این صورت text2 استفاده می شود. URL یک سوکت WLAN Shelly به این شکل است، به عنوان مثال: http://<ip-addr>/relay/0?turn=${if expr`on`off}، یعنی اگر expr != 0 مدیر شارژ سپس http ://<ip-addr>/relay/0?turn=on on را می خواند، در غیر این صورت http://<ip-addr>/relay/0?turn=off.
اگر یک مسیر نسبی را به عنوان URL وارد کنید، مدیر شارژ از آدرس پیکربندی شده برای دستگاه مربوطه استفاده می کند. اگر "localhost" را به عنوان دامنه وارد کنید، مدیر شارژ آدرس دستگاهی را که روی آن در حال اجرا است می گیرد. اگر دسترسی به API خود را تشخیص دهد، به جای اجرای یک دسترسی کامل HTTP، از کنترل کننده داخلی استفاده می کند، به طوری که شما مجبور نیستید نام کاربری و رمز عبور را در تعریف متر ذخیره کنید. URL که با * شروع می شود باعث می شود مدیر شارژ همیشه دسترسی کامل HTTP را انجام دهد.
بازنشانی خروجی ها: علاوه بر آرایه «خروجی ها»، می توانید آرایه ای به نام «تنظیم مجدد» را نیز تعریف کنید که ساختاری شبیه به آرایه «خروجی ها» دارد. این بدان معنی است که هنگام غیرفعال شدن دستگاه، خروجی ها می توانند به مقادیر اولیه خود بازنشانی شوند. این، در ترکیب با متغیرهای تعریف شده توسط کاربر و "یک بار": درست، به شما امکان می دهد دستگاه را به حالت اولیه بازگردانید.
خروجی ها را به صورت دوره ای بنویسید: در برخی از دستگاه ها، خروجی ها باید به صورت دوره ای نوشته شوند، در غیر این صورت دستگاه مقادیر را به حالت "پیش فرض" بازنشانی می کند. به عنوان مثال، اگر کنترل حافظه برای مدتی به طور فعال نوشته نشده باشد، حافظه Kostal دوباره از قوانین استاندارد خود استفاده می کند. برای تنظیم خروجیها به صورت دورهای، میتوانید آدرس را با #xxx# پیشوند کنید، جایی که xxx مشخص میکند که چند ثانیه خروجی بازنویسی میشود، حتی اگر مقداری که باید نوشته شود ثابت مانده است. به عنوان مثال، اگر آدرس /cnf?cmd=set_cm_vars&name=test&val=42 باشد، میتوانید از #30#/cnf?cmd=set_cm_vars&name=test&val=42 استفاده کنید تا مطمئن شوید که این مقدار هر بار نوشته میشود. 30 ثانیه می شود.
در حال حاضر، نام اعضا و عملگرهای "." را می توان در عبارت جستجوی "پرس و جو" استفاده کرد. و "[]" استفاده می شود، به عنوان مثال:
تست | عنصری به نام "آزمون" |
name1.name2 | عنصری به نام "name2" در شی object کودک "name1" |
نام [idx] | عنصر "idx" عنصر شی "name". "idx" می تواند یک عدد باشد ، برای مثال برای آرایه ها یا یک رشته |
نام ["u2"] | عنصر "u2" عنصر شی "name" مربوط به "name.u2" است |
name[{"el1": "v1"، "el2": 3}].value | عنصر آرایه ای را انتخاب کنید که شرایط نشانه گذاری شی را برآورده کند و عنصری به نام "value" را ارزیابی کنید. در اینجا، برای مثال، عنصری در آرایه «name» انتخاب میشود که دارای عناصر شی «el1» با مقدار «v1» و «el2» با مقدار 3 است و سپس مقدار عنصر «value» از این شی برگردانده میشود. . |
می توانید متغیرهایی را در پیکربندی مدیر شارژ ایجاد کنید. می توانید از یک مقدار ثابت یا یک فرمول به عنوان مقدار استفاده کنید. در پایان هر چرخه به روز رسانی، مدیر شارژ مقدار این متغیر را در صورت لزوم دوباره محاسبه می کند. سپس میتوانید از آنها در (بعضی) پارامترهای مدیر شارژ، قوانین شارژ یا برای کنترل خروجیها استفاده کنید. همچنین می توانید E x.member یا M x.member را به عنوان یک متغیر بنویسید. در اینجا E x و M x شناسه دستگاه یک جعبه دیواری یا متر است که در مدیر شارژ تنظیم شده است. عضو یک متغیر "تعریف شده توسط کاربر" است که در دستگاه مربوطه ذخیره می شود. برخی از متغیرها می توانند معنای خاصی داشته باشند: با KEBA "out1" یک خروجی سوئیچینگ است، با متر ABB B23 "out1" و "out2" خروجی های سوئیچینگ هستند (برای مدل هایی که این را پشتیبانی می کنند). 1 خروجی را تغییر می دهد و 0 دوباره آن را خاموش می کند.
اگر دستگاههایی دارید که باید تحت شرایط خاصی روشن شوند، اما باید مدتی کار کنند (مثلاً ماشین لباسشویی، ماشین ظرفشویی)، میتوانید متغیر را به عنوان "ماشه" نیز تعریف کنید. سپس فرمول متغیر شرطی است که متغیر را 1 قرار می دهد. پس از یک زمان قابل تنظیم، سپس به 0 تنظیم مجدد می شود. یک "شرایط راه اندازی مجدد" اجازه می دهد تا زمانی که شرط برقرار است، زمان تا زمان خاموش شدن (یعنی تنظیم متغیر روی 0) دوباره و دوباره تمدید شود.
برای اهداف آزمایشی، میتوانید متغیرهای مدیر شارژ و متر، به عنوان مثال قیمتهای فعلی آواتار را نمایش دهید:
در پیکربندی مدیر شارژ، میتوانید خروجیهای سراسری را همانطور که در بالا در تعریف متر در زیر «خروجیها» توضیح داده شد، پیکربندی کنید. اگر وضعیت آنها تغییر کرده باشد، اینها در پایان هر چرخه به روز رسانی تنظیم می شوند. اگر میخواهید خروجیهای سوئیچینگ را در دستگاههای تعریفشده توسط کاربر کنترل کنید، قرارداد بالا توصیه میشود (به متغیرهای مدیر شارژ مراجعه کنید): متغیرهایی را با نامهای «out1»، «out2» و غیره در متر تعریفشده توسط کاربر تنظیم کرده و تنظیم میکنید. خروجی ها در متر تعریف شده توسط کاربر که در آن هستند، خروجی را بسته به مقدار این متغیر تغییر دهید.
Modbus API مدیر شارژ برای کنترل دستگاه های Modbus که دارای هر آدرس Modbus RTU یا TCP هستند (که توسط مدیر شارژ قابل دسترسی است) استفاده می شود. COMx,bd,8,p,s را به عنوان آدرس Modbus RTU وارد کنید، مانند پیکربندی هر دستگاه، که در آن x شماره پورت COM، bd نرخ باود، p برابری است ('N', '' E یا O) و s تعداد بیت های توقف (1 یا 2) است. با Modbus TCP، آدرس آدرس IP دستگاه در شبکه مدیر شارژ شامل شماره پورت است.
URL (برای HTTP GET) Modbus API این است:
/cnf?cmd=modbus_get یا /cnf?cmd=modbus_set
مدیر شارژ cFos از پارامترهای پرس و جو اضافی زیر پشتیبانی می کند:
addr: آدرس دستگاه Modbus RTU یا TCP بالا.
تابع: شماره تابع Modbus، به عنوان مثال 3 یا 4 برای خواندن، 6 یا 16 برای نوشتن.
id: شناسه دستگاه دستگاه Modbus.
reg: شماره ثبت Modbus. مقدار را می توان به صورت اعشاری یا هگزا (با پیشوند 0x) مشخص کرد.
val: عدد، مقداری که باید در رجیستر نوشته شود. حذف در هنگام خواندن
نوع: 'w' 16bit (پیش فرض)، d = 32bit، f = float، q = 64bit، s = رشته.
cnt: عدد، حداکثر طول رشته در رجیسترها، برای انواع دیگر حذف کنید یا روی 1 تنظیم کنید.
مرتبه: رشته حاوی ترتیب بایت، یا "hl" یا "lh".
توجه: اگر «متر» شما عمدتاً برای اهداف کنترلی استفاده میشود، میتوانید گزینه «مخفی کردن دستگاه» را در تنظیمات این کاشی علامت بزنید تا این دستگاه در صفحه شروع ظاهر نشود.
توجه: برخی از مترهای خوانده شده از طریق HTTP به نام کاربری/رمز عبور به عنوان مجوز نیاز دارند. می توانید این را در آدرس دسترسی HTTP مشخص کنید، به عنوان مثال با http://username:password@192.168.2.111
. اگر نام کاربری یا رمز عبور شما حاوی "@" است، باید آن را با "%40" جایگزین کنید.