توجه: مدیر شارژ 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 ، در msec: طول مکث قبل از دسترسی 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 برای ولتاژ 1.3 محاسبه کند. لازم نیست همه متغیرها را مشخص کنید. مدیر شارژ cFos سعی می کند مقادیر را از متغیرهای موجود محاسبه کند.
import_wh، export_wh: مدیر شارژ از این متغیرها برای نمایش import_wh و export_wh استفاده میکند. برای مترهای یک طرفه (مثلاً اینورترها) همیشه باید فقط import_wh را تعریف کنید. Export_wh باید فقط برای مترهای دو طرفه (مانند کنتورهای ذخیره یا مصرف شبکه) تعریف شود.
soc: در صورت موجود بودن، وضعیت شارژ یک واحد ذخیره سازی باتری در اینجا به درصد در کاشی نمایش داده می شود.
علاوه بر این، می توانید متغیرهای اضافی را با نام های مختلف تعریف کنید که با استفاده از فرمول ها با هر به روز رسانی خوانده یا محاسبه می شوند. اگر متغیرهایی را تعریف کنید که با "CM" شروع می شوند. start، به عنوان مثال CM._set_price، مقادیر تخصیص داده شده در متغیرهای مدیر شارژ جهانی ذخیره می شوند (به زیر مراجعه کنید) و بر این اساس می توان آنها را جویا شد.
متغیرهایی با *: اگر متغیرهایی را تعریف کنید که با "*" شروع میشوند، این متغیرها در UI در کاشی متر تحت اطلاعات گسترده نمایش داده میشوند، به عنوان مثال دمای یک باتری.
توجه: فقط اعداد و حروف az و AZ می توانند به عنوان نام متغیر استفاده شوند.
نام شی از نام متغیر ذکر شده در بالا گرفته شده و دارای ویژگی های زیر است:
fixed: رشته ای با مقدار ثابت. برای مثال، زمانی مفید است که هیچ مقداری را نمی توان تعیین کرد، به عنوان مثال برای type_designation یا ولتاژ.
expr: رشته. متغیر خوانده نمی شود، بلکه به عنوان یک فرمول ارزیابی می شود.
type: اگر ثابت نیست یا expr، نوع متغیر: int16, uint16, int32, uint32, float, int64, string برای Modbus مهم است که رجیسترها را با فرمت صحیح بخواند. uint16 و uint32 انواعی هستند که فقط می توانند اعداد مثبت را بپذیرند. با JSON/HTTP معمولاً می توانید از float استفاده کنید.
وضوح: شناور مقدار خوانده شده در 'رزولوشن' ضرب می شود. مقادیر ولتاژ باید بر حسب ولت، جریان بر حسب میلی آمپر، توان بر حسب وات و انرژی بر حسب وات ساعت (وات ساعت) باشد. با «رزولوشن» منفی، اگر مقداری دارای علامت مخالف باشد، میتوانید معکوس کنید.
یک بار: bool (درست یا نادرست). اگر درست باشد، زمانی که دستگاه مقداردهی اولیه می شود، مقدار فقط یک بار خوانده می شود، در غیر این صورت به صورت دوره ای.
آدرس: شماره (Modbus) یا رشته (HTTP/JSON). شماره ثبت Modbus یا URL HTTP مقداری که باید خوانده شود.
پرس و جو: رشته برای HTTP JSON، اطلاعاتی در زبان جستجوی مدیر شارژ که با آن مقدار را پیدا میکند تا در پاسخ JSON خوانده شود.
سفارش: رشته برای Modbus، ترتیب بایت، یا "hl" یا "lh"، که در آن مقدار موجود است. طول: تعداد با 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، Query Language برای یافتن مقدار در پاسخ.
با هر بهروزرسانی، مدیر شارژ cFos همه ورودیهای تعریفشده به این روش را میخواند و بیتها را به صورت داخلی در آرایهای قرار میدهد که سپس میتوان در فرمولهای Input1..InputN جستجو کرد.
مدیر شارژ می تواند تا 32 خروجی را در هر دستگاه تغییر دهد. خروجی ها در "خروجی ها" به عنوان یک آرایه JSON از اشیاء خروجی تعریف می شوند. اگر وضعیت خروجی مربوطه تغییر کرده باشد، تمام خروجی ها در پایان هر چرخه به روز رسانی سوئیچ می شوند.
برای هر خروجی باید ویژگی های زیر را در شی خروجی تعریف کنید:
آدرس: URL HTTP با روش HTTP اختیاری، به عنوان مثال GET//}. برای تنظیم رجیسترهای Modbus، می توانید از CFos Charging Manager HTTP API استفاده کنید. مدیر شارژ دسترسی های مناسب به لوکال هاست را شناسایی می کند و درخواست را به کنترل کننده داخلی هدایت می کند، بنابراین مانند دسترسی های HTTP API خارجی نیازی به مجوز ندارید. اگر URL پس از همه جایگزینی خالی باشد، هیچ خروجی تنظیم نمی شود. برای مثال، تنها در صورتی میتوانید خروجیها را تغییر دهید که متغیرهای خاصی وجود داشته باشند (به فرمولها مراجعه کنید: تابع () exists). همچنین می توانید ${address} و ${id} را در آدرس مشخص کنید. این آدرس دستگاه فعلی و شناسه Modbus است که در تنظیمات تنظیم شده است. 'address' و 'id' در درجه اول برای استفاده از Modbus API استفاده می شود (به زیر مراجعه کنید).
بدنه: بدنه HTTP اختیاری برای POST یا PUT.
در URL و بدنه میتوانید از فرمولهای ${expr} استفاده کنید که به متغیرهای مدیر شارژ جهانی یا متر مربوطه اشاره میکنند. فرمول "expr" هنگام تنظیم خروجی ارزیابی می شود و در متن URL یا بدنه جایگزین می شود. در مثال بالا، اگر http://www.example.com?output1=1 خروجی را تنظیم کند و http://www.example.com?output1=0 آن را پاک کند، می توانید یک متغیر 'var1' تعریف کرده و آن را تنظیم کنید. به دلخواه روی 1 یا 0 را تنظیم کنید. همچنین میتوانید مقادیر عددی را برای کنترل عملکرد حافظه در ثباتهای Modbus که قبلاً در یک متغیر با استفاده از یک فرمول ذخیره کردهاید، بنویسید.
اگر به جای ارسال یک مقدار عددی، باید بسته به فرمول، متنی را در URL با متن دیگری جایگزین کنید، مانند سوکتهای WLAN Shelly، میتوانید آن را به این صورت بنویسید: ${if expr`text1`text2}. "آپوستروف" یک بک تیک است (کد اسکی 96). اگر 'expr' != 0، text1 استفاده می شود، در غیر این صورت text2 استفاده می شود. برای سوکت WLAN Shelly، URL به این صورت است: 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 شناسه دستگاه یک جعبه دیواری یا متری هستند که در مدیر شارژ تنظیم شده است. 'member' یک متغیر "سفارشی" است که در دستگاه مربوطه ذخیره می شود. برخی از متغیرها می توانند معنای خاصی داشته باشند: برای KEBA "out1" یک خروجی سوئیچینگ است، برای ABB B23 متر "out1" و "out2" خروجی های سوئیچینگ هستند (در مدل هایی که این را پشتیبانی می کنند). 1 خروجی را تغییر می دهد و 0 دوباره آن را خاموش می کند.
اگر دستگاههایی دارید که باید تحت شرایط خاصی روشن شوند، اما باید مدتی کار کنند (مثلاً ماشین لباسشویی، ماشین ظرفشویی)، میتوانید متغیر را به عنوان "ماشه" نیز تعریف کنید. سپس فرمول متغیر شرطی است که متغیر را 1 قرار می دهد. پس از یک زمان قابل تنظیم، سپس به 0 تنظیم مجدد می شود. یک "شرایط راه اندازی مجدد" اجازه می دهد تا زمانی که شرط برقرار است، زمان تا زمان خاموش شدن (یعنی تنظیم متغیر روی 0) دوباره و دوباره تمدید شود.
توجه: فقط اعداد و حروف az و AZ می توانند به عنوان نام متغیر استفاده شوند.
برای اهداف آزمایشی، میتوانید متغیرهای مدیر شارژ و متر، به عنوان مثال قیمتهای فعلی آواتار را نمایش دهید:
در پیکربندی مدیر شارژ، میتوانید خروجیهای سراسری را همانطور که در بالا در تعریف متر در زیر «خروجیها» توضیح داده شد، پیکربندی کنید. اگر وضعیت آنها تغییر کرده باشد، اینها در پایان هر چرخه به روز رسانی تنظیم می شوند. اگر میخواهید خروجیهای سوئیچینگ را در دستگاههای تعریفشده توسط کاربر کنترل کنید، قرارداد بالا توصیه میشود (به متغیرهای مدیر شارژ مراجعه کنید): متغیرهایی را با نامهای «out1»، «out2» و غیره در شمارنده تعریفشده توسط کاربر تنظیم میکنید و تنظیم میکنید. خروجی ها در شمارنده تعریف شده توسط کاربر بسته به مقدار این متغیر، خروجی را تغییر می دهند.
API Modbus مدیر شارژ برای کنترل دستگاههای Modbus که دارای هر آدرس Modbus RTU یا TCP هستند (قابل دسترسی توسط مدیر شارژ) استفاده میشود. به عنوان آدرس Modbus RTU، COMx,bd,8,p,s را وارد کنید، مانند پیکربندی هر دستگاه، که در آن 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: number: مقداری که باید در رجیستر نوشته شود. هنگام خواندن حذف کنید.
نوع: 'w' 16bit (پیش فرض)، d = 32bit، f = float، q = 64bit، s = رشته.
cnt: number: حداکثر طول رشته در رجیسترها، برای انواع دیگر حذف یا روی 1 تنظیم می شود.
مرتبه: رشته: ترتیب بایت، یا "hl" یا "lh".
توجه: اگر «متر» شما عمدتاً برای اهداف کنترلی استفاده میشود، میتوانید گزینه «مخفی کردن دستگاه» را در تنظیمات این کاشی علامت بزنید تا این دستگاه در صفحه شروع ظاهر نشود.
توجه: برخی از مترهای خوانده شده از طریق HTTP به نام کاربری/رمز عبور به عنوان مجوز نیاز دارند. می توانید این را در آدرس دسترسی HTTP مشخص کنید، به عنوان مثال با http://username:password@192.168.2.111
. اگر نام کاربری یا رمز عبور شما حاوی "@" است، باید آن را با "%40" جایگزین کنید.