ドキュメント

ユーザー定義カウンタ

: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進数か、接頭辞0xを付けた16進数で指定できる。また、//を使用した1行コメントも可能です。

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

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


silence_same_slave, true: 同じデバイスへの複数のアクセスで、一時停止が観測されます。
retries: デバイスが応答しない場合の再試行回数。
rcv_timeout: msec. デバイスが応答するまでの1アクセスあたりの最大待機時間。

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

modbus_read
modbus_read_max_registers: 一度に読み込めるレジスタの最大数。
modbus_allow_gaps: true = 未使用のレジスタ領域が読み込まれることがあります。

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

connect_timeout: は msec. TCP 接続の最大待機時間。
delay_after_connect: は msec.最初のコマンドを送信する前に、接続が確立された後、一時停止する。

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

upd_delay:ミリ秒単位で、デバイスが読み出される間隔を決定する。
manufacturer: String, メーカー名。これはタイルの拡張情報に表示されます。
delay_accumulated: true = 累積値(kWh)は3秒ごと、または十分な電力がある場合にのみ照会されます。false = これらの値は常に照会されます。
ui_addr: URL、ウェブ・インターフェイスを呼び出すためのデバイス・アドレスと異なる場合。
reserved: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 Charging Managerは、これらからvoltage_l1..l3、符号付きcurrent_l1..l3、 power_w、power_vaの値を計算しようとします。すべての変数を指定する必要はありません。cFos Charging Managerは、既存の変数から値を計算しようとします。
import_wh、export_wh: Charging Managerは、import_whとexport_whを表示するためにこれらの変数を使用します。単方向メーター(インバーターなど)では、常にimport_whのみを定義する必要があります。Export_whは、双方向メーター(貯蔵タンクやグリッド参照メーターなど)に対してのみ定義してください。

soc: 利用可能な場合、バッテリー貯蔵タンクの充電状態がタイルに%で表示されます。
さらに、更新ごとに読み出される、または数式を使用して計算される別の名前の変数を定義できます。例えばCM._set_priceのようにCM.で始まる変数を定義した場合、割り当てられた値はグローバルチャージングマネージャ変数(下記参照)に保存され、それに応じてクエリできます。
で始まる変数で始まる変数を定義すると、UIで拡張情報の下のメーターのタイルに表示されます。

変数の定義。


このオブジェクトは上記の変数名にちなんで命名され、以下のプロパティを持つ: fixed: 固定値を持つ文字列。

例えば、type_designation や voltage のように、値が決定できない場合に有用。 expr: 文字列、変数は読み出されず、数式として評価される。 type: fixed や expr でない場合、変数のタイプ: int16, uint16, int32, uint32, float, int64, string。Modbusでは、レジスタを正しいフォーマットで読み込むために重要です。uint16とuint32は、正の数のみを受け入れることができるタイプです。
JSON/HTTP では、通常 float を使用できます。 resolution: float、読み込まれた値に 'resolution' を掛けます。電圧はボルト単位、電流はミリアンペア単位、電力はワット単位、エネルギーはワット時(Wh)単位でなければなりません。


負の'resolution'では、値が反対の符号を持つ場合、値を反転させることができます。 once: bool (true or false)、trueの場合、値はデバイスが初期化されたときに一度だけ読み込まれます:順序: 文字列、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配列である。各入力に対して以下のプロパティを定義する必要があります。
address: アドレス(Modbus レジスタまたは URL)。
カウントします。この要求で読み出される入力ビットの数。
query。HTTP/JSONの場合、レスポンスに含まれる値を検索するためのクエリ言語。

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

アウトプットの定義

Charging Managerは、デバイスごとに最大32の出力を切り替えることができます。出力は、出力オブジェクトのJSON配列として「outputs」で定義されます。 すべての出力は、それぞれの出力のステータスが変更された場合、各更新サイクルの終了時に切り替わります。
各出力について、出力オブジェクトに以下のプロパティを定義する必要があります。
アドレス:オプションのHTTPメソッドを持つHTTP URL、例:GET http://www.example.com?output1=${var1}.Modbusレジスタを設定するには、cFos Charging ManagerのHTTP APIを使用します。チャージングマネージャーは、localhost上の一致するアクセスを検出し、内部ハンドラーにリクエストをリダイレクトするので、外部HTTP APIアクセスのような認証は必要ではありません。すべての置換後にURLが空である場合、出力は設定されません。例えば、特定の変数が存在する場合にのみ出力を切り替えることができます(数式:exists()関数参照)。アドレスには、さらに${address}と${id}を指定することができます。これは、設定で定義された現在のデバイスアドレスとModbus IDです。アドレスと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レジスタに書き込むことも可能です。
URLに数値を渡す代わりに、シェリーWLANソケットのように数式によってあるテキストを別のテキストに置き換える必要がある場合は、次のように書くことができます: ${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アクセスを実行するようになります。

出力をリセットします:outputs」配列に加えて、「resets」という名前の、「outputs」配列のような構造を持つ配列を定義することもできます。これは、デバイスが非アクティブ化されたときに、出力を初期値に戻すために使用されます。これとユーザー定義変数、"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' の値を返しています。

Global Charging Managerの変数です。

Charging Managerの設定に変数を作成することができます。値として固定値や計算式を使用することができます。各更新サイクルの終了時に、充電マネージャは必要に応じてこれらの変数の値を再計算する。そして、それらを(特定の)チャージングマネージャーのパラメータ、チャージングルール、またはアウトプットの制御に使用することができます。また、Ex.memberやMx.memberを変数として記述することも可能です。ここで、Exと Mxは、充電マネージャに設定された壁掛けボックスやメーターの機器IDです。 memberは、対応する機器に格納される「ユーザー定義」の変数です。変数の中には、特別な意味を持つものがあります。KEBAではout1がスイッチング出力、ABB B23メーターではout1とout2がスイッチング出力です(対応機種のみ)。1で出力が切り替わり、0では再びオフになります。

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

テスト目的で、チャージングマネージャーとメーターの変数(現在のAwattar価格など)を表示できます:


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

Global Charging Managerの出力。

チャージングマネージャーの設定では、上記のカウンタ定義の「出力」で説明したように、グローバル出力を設定することができます。これらは、各更新サイクルの終了時に、状態が変化していれば設定される。ユーザー定義デバイスでスイッチング出力を制御する場合は、上記の規約を推奨します(「充電マネージャ変数」参照)。ユーザー定義カウンターに「out1」「out2」などの名前の変数を設定し、その変数の値によって出力を切り替えるユーザー定義カウンターの出力を設定するのです。

チャージングマネージャーのグローバルModbus API。

充電マネージャのModbus APIは、任意のModbus RTUまたはTCPアドレス(充電マネージャからアクセス可能)を持つModbusデバイスを制御するために使用されます。Modbus RTU の場合、アドレスとして COMx,bd,8,p,s を入力します。ここで x は COM ポート番号、bd はボーレート、p はパリティ('N', 'E' または 'O')、s はストップビット数(1 または 2)で、個々の機器の設定と同じです。Modbus TCPの場合、宛先はポート番号を含むCharging Managerのネットワーク上の機器のIPアドレスとなります。
Modbus API の URL(HTTP GET 用)は次のとおりです:
/cnf?cmd=modbus_get または /cnf?cmd=modbus_set
cFos Charging Manager は次の追加クエリーパラメーターをサポートしています:
addr.addr.id。
func: Modbus ファンクション番号、例:読み取り 3 または 4、書き込み 6 または 16。
id: Modbus デバイスのデバイス ID。
reg: Modbus レジスタ番号。
val: 数値,レジスタに書き込む値。
type: 'w' 16bit (default), d = 32bit, f = float, q = 64bit, s = string.

order: String, バイトオーダー。"hl" または "lh" のどちらか。

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

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