ドキュメント

ユーザー定義カウンタ

:cFos充電マネージャは、SunSpec(デバイスタイプ「SunSpec Solar Inverter / Meter」)を使用して、ほとんどのソーラーインバータを読み出すことができます。この場合、独自のメーター定義を作成する必要はありません。

cFosチャージングマネージャーでは、標準レパートリーにはないメーターをサポートするために、独自のメーター定義を作成することができます。現在、3つのタイプがあります:Modbusカウンター、HTTP/JSONカウンター、MQTT/JSONカウンターです。これらのカウンターの定義ファイルは非常に似ています。ModbusカウンターはModbus経由で特定のレジスタからデータを読み込み、HTTP/JSONカウンターはHTTPリクエストでデータを取得し、レスポンスでJSONで読み込む。MQTT/JSON メーターの場合、cFos Charging Manager は MQTT トピックを購読し、トピックの下で公開されたメッセージを JSON として読み取ります。cFosチャージングマネージャーは、読み取りに小さな "クエリー言語 "を使用します。cFos Charging ManagerのMQTT機能のドキュメントはこちらです。

電流や電圧などの定義済み変数に加えて、ユーザー定義カウンターは、未知のユーザー定義変数の読み込み、入力の問い合わせ、出力の設定も可能です。変数の読み込みと出力の設定により、数式を分析することができます。後述のチャージング・マネージャー変数とグローバル・チャージング・マネージャー出力との組み合わせで、これは強力な機能であり、特定のホーム・オートメーション・タスクやバッテリー貯蔵ユニットのような外部デバイスの制御さえも可能にします。この機能を使って制御タスクを実現された方は、ぜひフィードバックをお寄せください。私たちは、お客様がcFosチャージングマネージャーでどのような制御を行っているかに大変興味があり、お客様のニーズに応じてチャージングマネージャーをさらに開発するのに役立ちます。

ここでは、アクティブ・パワーの単一レジスタを読み取るModbusの定義例を簡単に紹介します。特定のアプリケーションのために、レジスタ番号を簡単に変更することができます。
単一レジスタの定義例.

以下は、Modbusの定義例とHTTP/JSONの定義例です。
Modbusメーター用サンプル定義のダウンロード
HTTP/JSONメーターの定義例ダウンロード

チャージングマネージャーには、このようなファイルがすでにいくつか付属していますが、「システム設定」で独自のファイルをアップロードしたり、また削除することも可能です。
ここでは、当社が提供するメーターの定義のほとんどをご紹介しています。
付属のカウンタ定義書のダウンロード

もし、あなたが独自のカウンターファイルを作成し、それが他のユーザーに関連する可能性がある場合、私たちはそれを利用可能にすることができれば非常に感謝します。そうすれば、将来のチャージングマネージャーのバージョンで、それを提供することができます。

追加メーター用のメーター定義のダウンロード

定義ファイルの構造。

カウンタ定義は、プロパティとサブオブジェクトを持つグローバル JSON オブジェクトを持つ JSON ファイルです。rtype' は読み取り操作のタイプを決定します:0 = Modbus、1 = HTTP/JSON、2 = MQTT/JSON。mtype' はデバイス・タイプを決定します: 0 = その他のデバイス、1 = メーター、2 = インバーター、4 = バッテリー蓄電池。

数値は10進数または16進数で指定でき、接頭辞に'0x'を使用する。また、'//'を使用した1行コメントも可能です。

定義ファイルをJSON5バリデーターに通すことをお勧めします(例:このJSON5バリデーター)。以下のリファレンスの数式で使用できる値を理解するには、「数式」の章を必ず読んでおく必要があります。

Modbusの定義は、以下のプロパティを持つオブジェクト'rtu'を持ちます。




silence_period, in msec: デバイスがメッセージの開始を認識できるように、Modbus RTU アクセスの前の一時停止長を決定します。

これらのグローバルプロパティは、Modbus TCP および RTU に適用されます。

modbus_read

modbus_read_m ax_registers: 一度にリードできるレジスタの最大数modbus_ allow_gaps: true = 未使用のレジスタ領域がリード操作でリードされる。

Modbus TCP と HTTP/JSON については、以下のプロパティを持つオブジェクト 'tcp' が存在します。


connect_timeout: is msec: TCPコネクションの最大待ち時間。delay_after_ connect: in msec: コネクション確立後、最初のコマンドを送信するまでの休止時間。

いずれの定義タイプ(Modbus、HTTP/JSON)にも、以下のプロパティが追加されています。

upd_delay: msec単位: デバイスが読み出される間隔を決定する。manufacturer:文字列、製造者名。タイルの拡張情報に表示される。


これはタイルの拡張情報に表示されます。 delay _accumulated: true = 累積値(kWh)は3秒ごと、または十分な電力がある場合にのみ照会されます:0として解釈される値を含む配列(デバイスがモデルによって特定の値をサポートしている場合に便利)。

上記のプロパティを省略した場合、cFos Charging Managerはデフォルト値を使用します。

JSON 定義の次のステップは、メーターが電流、電圧などの値を読み取ったり計算したりするために使用する変数の定義です。
Charging Manager は、以下の変数を認識します:type_designation、version、firmware_version、serial: これらは、タイルの拡張情報に表示されるモデル指定を形成します。
電圧_l1...電圧_l3、電流_l1...電流_l3、power_w、power_var、power_va、power_w_l1...power_w_l3:cFosチャージング・マネージャは、電圧_l1.l3、符号付き電流_l1.l3、power_wおよびpower_vaについて、これらの値から計算を試みます。すべての変数を指定する必要はありません。import_wh、export_wh: Charging Managerは、import_whとexport_whを表示するためにこれらの変数を使用します。単方向メーター(インバーターなど)の場合、import_whだけを定義する必要があります。

双方向メーター(蓄電池やグリッド参照メーターなど)の場合のみ、export_wh を定義する必要があります。 soc: 利用可能な場合、蓄電池の充電状態は、タイル内の%でここに表示されます。
更新ごとに読み出されたり、計算式を使って計算されたりする、別の名前の変数を定義することもできます。例えばCM._set_priceのように'CM.'で始まる変数を定義した場合、割り当てられた値はグローバルなCharging Manager変数(下記参照)に保存され、それに応じて問い合わせることができます。
持つ変数:で始まる変数を定義した場合、これらはUIでメータータイルの拡張情報の下に表示されます。
:変数名として使用できるのは、数字とアルファベットa-z、A-Zのみである。

変数の定義。


このオブジェクトは、上記の変数名にちなんで命名され、以下のプロパティを持つ: fixed: 固定値を持つ文字列。
例えば、type_designationやvoltageのように値が決定できない場合に有用。
type: fixed または expr でない場合、変数のタイプ: int16, uint16, int32, uint32, float, int64, string。これは、Modbusでレジスタを正しいフォーマットで読み込むために重要です。uint16とuint32は、正の数のみを受け入れることができるタイプです。
JSON/HTTP では、通常 float を使用できます。読み取った値に「resolution」を乗じた値。電圧はボルト単位、電流はミリアンペア単位、電力はワット単位、エネルギーはワット時(Wh)単位でなければなりません。
負の'resolution'を使うと、値の符号が逆であれば反転させることができる。
trueの場合、値はデバイスが初期化された時に一度だけ読み込まれ、そうでない場合は定期的に読み込まれます。 address: 数値(Modbus)または文字列(HTTP/JSON)。
読み込まれる値の Modbus レジスタ番号または HTTP URL:文字列。
HTTP JSONの場合、チャージング・マネージャがJSONレスポンスで読み込む値を見つけるクエリ言語での指定。Modbusの場合、値が存在するバイト順("hl "または "lh")。変数 'version' と 'firmware_version' では、'length' は数値のバージョンをドットのある文字列に変換するために使用されます。length' には 2 か 4 の値を指定することができ、a.b、a.b.c.d というバージョン・フォーマットになります。長さ'が2で、'int16'または'uint16'の場合、チャージングマネージャーはロー バイトとハイバイトをドットで区切り、'int32'または'uint32'のロー ワードとハイワード、'int64'のローワードとハイワードで区切る。lenth' 4と'int32'または'uint32'の場合、チャージングマネージャは値をドットで区 切られた4バイトに分割する。
re gex: 文字列。正規表現が指定された場合、カウンタ応答はJSONである必要はありません。正規表現のマッチ全体、または最初のグループのいずれかが結果として評価される。デバイスがJSONを返さない場合にのみ使用してください。

正規表現の機能一覧は以下の通りです:



\匿名クラス: [a-z0-9_], [^0-9], [^0d]選択肢を持つグループ: (ab|cd|ef)選択 肢を持たないグループ: (?:ab|cd) (greedy) once or none: a??, a???
?(貪欲な) 多いか少ないか: a*, a*
?

(貪欲な) 1回以上: a+, a+?文字列の先頭: ^文字列の末尾: $。

インプットの定義

チャージング・マネージャーは、様々なレジスタまたはJSON要素から、デバイスごとに最大32の入力値を要求できる。Inputs "プロパティは JSON 配列です。
各入力に以下のプロパティを定義する必要があります。
count
count: このリクエストで読み込まれる入力ビットの数:HTTP/JSON の場合、レスポンス内の値を見つけるためのクエリ言語。

cFosチャージングマネージャーは、更新ごとにこの方法で定義されたすべての入力を読み込み、ビットを配列に内部保存します。

アウトプットの定義

チャージング・マネージャーは、デバイスごとに最大32の出力を切り替えることができる。出力は、出力オブジェクトのJSON配列として「outputs」で定義される。 各出力のステータスが変更された場合、各更新サイクルの終了時にすべての出力が切り替わります。

各出力の出力オブジェクトに以下のプロパティを定義する必要があります: address: HTTP URL(オプションの HTTP メソッド付き)、例: GET http://www.example.com?output1=${var1}.Modbusレジスタを設定するには、cFosチャージング・マネージャのHTTP APIを使用します。チャージング・マネージャーはlocalhost上の適切なアクセスを認識し、リクエストを内部ハンドラーにリダイレクトします。すべての置換後にURLが空の場合、出力は設定されません。たとえば、特定の変数が存在する場合にのみ出力を切り替えることができます (数式: exists() 関数を参照)。アドレスに${address}と${id}を指定することもできます。これは設定で定義された現在のデバイス・アドレスと Modbus ID です。
address'と'id'は主にModbus API(下記参照)を使用するために使用されます。 body: POSTまたはPUTのためのオプションのHTTPボディ。
URLとボディでは、${expr}を使用して、グローバル・チャージ・マネージャ変数または各カウンタを参照する数式を使用できます。式'expr'は、出力が設定されたときに評価され、URLまたはボディのテキストに置き換えられます。上記の例で、http://www.example.com?output1=1 が出力を設定し、http://www.example.com?output1=0 がそれを削除する場合、変数 'var1' を定義し、必要に応じてそれを 1 または 0 に設定することができます。このように、Modbus レジスタのメモリ性能を制御するために、数式を使用して変数に格納した数値を書き込むこともできます。
数値を渡す代わりに、例えば Shelly WLAN ソケットのように、URL のテキストを数式によって別のテキストに置き換える必要がある場合、次のように書くことができます: ${if expr`text1`text2}.アポストロフィ」はバックスティック(ASCIIコード96)です。expr' != 0 ならば text1 が使われ、そうでなければ text2 が使われる。シェリーWLANソケットの場合、URLは次のようになります: http://<ip-addr>/relay/0?turn=${if expr`on`off}、すなわち、expr != 0の場合、チャージングマネージャーはhttp://<ip-addr>/relay/0?turn=onを呼び出し、そうでなければhttp://<ip-addr>/relay/0?turn=offを呼び出します。

URLとして相対パスを入力した場合、充電マネージャはそれぞれのデバイスに設定されたアドレスを使用します。ドメインとして'localhost'を入力した場合、チャージングマネージャーは実行中のデバイスのアドレスを使用します。独自のAPIへのアクセスを認識した場合、カウンタ定義にユーザー名とパスワードを入力する必要がないように、完全なHTTPアクセスを実行する代わりに内部ハンドラを使用します。で始まるURLは、常に完全なHTTPアクセスを実行します。

出力のリセット:outsputs "配列に加えて、"outsputs "配列のような構造を持つ "resets "という名前の配列を定義することもできます。これにより、デバイスが非アクティブになったときに、出力を初期値にリセットすることができる。これは、ユーザー定義変数や "once": trueと組み合わせて使用することで、デバイスを初期状態にリセットすることができます。
出力を定期的に書き込む:デバイスによっては、出力を定期的に書き込む必要があります。例えば、Kostalメモリは、メモリ・コントロールがしばらくの間アクティブに書き込まれなかった場合、デフォルト・ルールに戻ります。定期的に出力を設定するには、アドレスの前に #xxx# を付けます。ここで xxx は、書き込む値が変わらない場合でも、何秒後に出力が書き換わるかを示します。例えば、アドレスが/cnf?cmd=set_cm_vars&name=test&val=42の場合、#30#/cnf?cmd=set_cm_vars&name=test&val=42を使うことで、この値が30秒ごとに書き換わるようにすることができます。

クエリー言語の定義:

現在、「query」検索式で使用できるのは、メンバー名と演算子「.」「[]」です。

テストtestという名前の要素
名前1.名前2子オブジェクト "name1 "の "name2 "という要素
name[idx]オブジェクト要素 "name "の要素 "idx "を指定する。"idx "は、例えば配列の場合は数値、文字列の場合は
name["u2"]オブジェクト要素 "name "の要素 "u2"、"name.u2 "に対応する。
name[{"el1": "v1", "el2": 3}].valueオブジェクト記法の条件を満たす配列要素を選択し、'value' という名前の要素を評価する。ここでは、例えば配列 'name' において、値 'v1' を持つ 'el1' と値 3 を持つ 'el2' をオブジェクト要素として持つ要素を選択し、このオブジェクトから要素 'value' の値を返しています。

グローバルチャージングマネージャーの変数:

チャージングマネージャーの設定で変数を作成できます。値として固定値または数式を使用できます。各更新サイクルの終わりに、Charging Managerは必要に応じてこれらの変数の値を再計算します。その後、(特定の)チャージングマネージャパラメータ、チャージングルール、または出力を制御するために、これらを使用することができます。Ex.memberまたはMx.memberを変数として記述することもできます。この場合、Exと Mxは、チャージングマネージャーで設定されたウォールボックスまたはメーターのデバイスIDです。member」は、対応するデバイスに保存される「ユーザー定義」変数です。変数の中には特別な意味を持つものもある:KEBA の場合、'out1' はスイッチング出力であり、ABB B23 メーターの場合、'out1' と 'out2' はスイッチング出力である(これをサポートするモデルの場合)。1'で出力が切り替わり、'0'で再びオフになります。

特定の条件下でスイッチを入れなければならないが、その後しばらく稼働する家電製品(洗濯機、食器洗い機など)がある場合、変数を「トリガー」として定義することも可能です。この場合、変数の式は、変数が1に設定される条件となります。調整可能な時間の後、それは再び0に設定されます。再トリガー条件」は、条件が満たされる限り、スイッチオフ(変数を0にすること)までの時間を何度でも延長することができます。

:変数名として使用できるのは、数字とアルファベットa-z、A-Zのみである。

テスト目的で、充電マネージャーとメーターの変数、例えば現在のAwattar価格を表示することができます:


                        カウンター変数のスクリーンショット表示

Global Charging Managerの出力。

チャージング・マネージャのコンフィギュレーションでは、上記のカウンタ定義の「出力」で説明したように、グローバル出力をコンフィギュレーションすることができます。これらのステータスが変更された場合、各更新サイクルの終了時に設定されます。ユーザー定義デバイスのスイッチング出力を制御したい場合は、上記の規約を推奨します(Charging Manager変数を参照):ユーザ定義カウンタに "out1"、"out2" などの名前の変数を設定し、ユーザ定義カウンタにこれらの変数の値に応じて出力を切り替える出力を設定します。

充電マネージャのグローバル Modbus API:

充電マネージャのModbus APIは、Modbus RTUまたはTCPアドレス(充電マネージャからアクセス可能)を持つModbusデバイスを制御するために使用されます。ここで x は COM ポート番号、bd はボーレート、p はパリティ('N'、'E'または'O')、s はストップビット数(1 または 2)です。Modbus TCPの場合、addresseはポート番号を含むCharging Managerネットワーク内のデバイスのIPアドレスです。



Modbus API の URL(HTTP GET)は次のとおりです:/cnf?cmd=modbus_get または /cnf?cmd=modbus_set cFos Charging Manager は次の追加クエリ・パラメータをサポートしています: add r


func: Modbusファンクション番号、例:読み込み3または4、書き込み6または16 id: ModbusデバイスのデバイスID reg: Modbusレジスタ番号。
値は 10 進数または 16 進数(接頭辞 0x)で指定できます。 val: number: レジスタに書き込まれる値。
type: 'w' 16bit(デフォルト)、d = 32bit、f = float、q = 64bit、s = string。

cnt: 数値: レジスタに書き込む文字列の最大長。

:「カウンター」に主にコントロールタスクがある場合、このタイルの設定で「デバイスを隠す」オプションにチェックを入れると、このデバイスがスタートページに表示されなくなります。

:HTTP経由で読み取られるいくつかのメーターは、認証としてユーザー名/パスワードが必要です。HTTPアクセス時のアドレスで、http://username:password@192.168.2.111 などで指定できます。ユーザー名やパスワードに"@"が含まれている場合は、"%40 "に置き換えてください。