Dokumentacja

Liczniki zdefiniowane przez użytkownika

Uwaga: Menedżer ładowania cFos może odczytywać większość inwerterów solarnych przy użyciu SunSpec (typ urządzenia "SunSpec Solar Inverter / Meter"). W tym przypadku nie trzeba tworzyć własnej definicji licznika.

Menedżer opłat cFos umożliwia tworzenie własnych definicji liczników w celu obsługi liczników, które nie znajdują się w standardowym repertuarze. Obecnie istnieją trzy rodzaje: Liczniki Modbus, liczniki HTTP/JSON oraz liczniki MQTT/JSON. Pliki definicji tych liczników są bardzo podobne. Liczniki Modbus odczytują swoje dane poprzez Modbus z określonych rejestrów, natomiast liczniki HTTP/JSON pobierają swoje dane poprzez żądanie HTTP i parsują JSON jako odpowiedź. Dla liczników MQTT/JSON, cFos Charging Manager subskrybuje tematy MQTT i przetwarza wiadomości opublikowane w ramach tematu jako JSON. Do parsowania menedżer ładowania cFos używa małego "języka zapytań". Oto dokumentacja możliwości MQTT w menedżerze ładowania cFos.

Oprócz wielu predefiniowanych zmiennych, takich jak prąd i napięcie, liczniki zdefiniowane przez użytkownika mogą również odczytywać nieznane zmienne zdefiniowane przez użytkownika, odpytywać wejścia i ustawiać wyjścia. Wczytanie zmiennych i ustawienie wyjść pozwala na ocenę formuł. W połączeniu ze zmiennymi Charging Manager i globalnymi wyjściami Charging Manager opisanymi poniżej, jest to potężna funkcja i pozwala nawet na realizację pewnych zadań automatyki domowej oraz sterowanie urządzeniami zewnętrznymi, takimi jak magazyn akumulatorów. Jeśli realizujesz zadania kontrolne z tym związane, prosimy o informację zwrotną. Jesteśmy bardzo zainteresowani tym, co ludzie kontrolują za pomocą cFos Charging Manager i pomaga nam to w dalszym rozwoju Charging Manager zgodnie z potrzebami klientów.

Oto prosta przykładowa definicja dla Modbus, która odczytuje pojedynczy rejestr dla mocy czynnej. Można łatwo zmodyfikować numer rejestru dla konkretnej aplikacji:
Przykładowa definicja dla pojedynczego rejestru.

Oto przykładowa definicja dla Modbus i jedna dla HTTP/JSON:
Pobierz przykładową definicję dla miernika Modbus
Pobierz przykładową definicję dla miernika HTTP/JSON

Charging Manager jest już dostarczany z kilkoma takimi plikami, ale można wgrać własne pliki w "Konfiguracji systemu", a także ponownie je usunąć.
Tutaj znajdziesz większość definicji liczników, które udostępniamy:
Pobierz dostarczone definicje liczników

Jeśli stworzyłeś własny plik licznika i mógłby on być istotny dla innych użytkowników, bylibyśmy bardzo wdzięczni, gdybyś mógł go nam udostępnić. Wtedy dostarczymy go wraz z przyszłymi wersjami Charging Managera.

Pobierz definicje liczników dla dodatkowych liczników

Struktura pliku z definicją:

Definicje mierników to pliki JSON z globalnym obiektem JSON, który ma właściwości i obiekty dziecięce. 'rtype' określa rodzaj operacji odczytu: 0 = Modbus, 1 = HTTP/JSON, 2 = MQTT/JSON. Liczby można podać opcjonalnie w systemie dziesiętnym lub heksadecymalnym z prefiksem 0x. Dodatkowo dozwolone są komentarze jednolinijkowe z użyciem //. Zalecamy uruchomienie plików definicji przez walidator JSON5, np. ten walidator JSON5

Powinieneś zdecydowanie przeczytać rozdział Formuły, aby zrozumieć, jakie wartości mogą być używane w formułach w poniższym odnośniku.

Definicje Modbus posiadają obiekt "rtu" o następujących właściwościach:

silence_period, w msec. określona długość przerwy przed dostępem do Modbus RTU, żeby urządzenie rozpoznało początek komunikatu.
silence_same_slave, true: Przerwa jest obserwowana również przy kilku dostępach do tego samego urządzenia.
retries: Ilość ponawianych prób, jeżeli urządzenie nie odpowiada.
rcv_timeout: w msec. maksymalny czas oczekiwania na dostęp do urządzenia, aż urządzenie odpowie.

Te globalne właściwości dotyczą Modbus TCP i RTU:

modbus_read: Numer funkcji polecenia odczytu Modbus, zazwyczaj 3 lub 4.
modbus_read_max_registers: Maksymalna ilość rejestrów, które mogą być odczytywane jednocześnie.
modbus_allow_gaps: true = Niewykorzystane obszary rejestrów mogą być odczytywane w operacji odczytu.

Dla Modbus TCP i HTTP/JSON istnieje obiekt "tcp" z następującymi właściwościami:

connect_timeout: w msec. maksymalny czas oczekiwania na połączenie TCP.
delay_after_connect: w msec. Wstrzymaj się po nawiązaniu połączenia przed wysłaniem pierwszego polecenia.

Oba typy definicji (Modbus i HTTP/JSON) posiadają następujące dodatkowe właściwości:

upd_delay: w msec. określa interwał, w którym urządzenie może zostać odczytane. Niektóre urządzenia są przeciążone, jeśli są odpytywane zbyt często.
manufacturer: String, nazwa producenta. Jest ona wyświetlana w rozszerzonych informacjach kafelka.
delay_accumulated: true = wartości skumulowane (kWh) są odpytywane tylko co 3 sekundy lub jeśli jest wystarczająca moc. false = wartości te są zawsze odpytywane.
ui_addr: adres URL, jeśli różni się od adresu urządzenia w celu wywołania interfejsu internetowego.
reserved: Tablica z wartościami, które są interpretowane jako 0 (przydatne, jeśli urządzenie obsługuje określone wartości w zależności od modelu).

Jeśli pominiesz właściwości wymienione powyżej, cFos Charging Manager przyjmie wartości domyślne, które działają dobrze w większości przypadków.

W definicji JSON następnym krokiem jest zdefiniowanie zmiennych, których miernik używa do odczytu lub obliczania wartości prądu, napięcia itp. Następujące zmienne są używane przez Charging Manager. Menedżer ładowania zna następujące zmienne:
type_designation, version, firmware_version, serial: Tworzą one nazwę modelu, jak pokazano w rozszerzonych informacjach kafelka. Są one sprawdzane raz podczas konfigurowania lub resetowania miernika.
voltage_l1..voltage_l3, current_l1..current_l3, power_w, power_var, power_va, power_w_l1..power_w_l3: Menedżer ładowania cFos próbuje na ich podstawie obliczyć wartości voltage_l1..l3, signed current_l1..l3, power_w i power_va. Nie trzeba podawać wszystkich zmiennych. Menedżer ładowania cFos próbuje obliczyć wartości na podstawie istniejących zmiennych.
import_wh, export_wh: Menedżer ładowania używa tych zmiennych do wyświetlania import_wh i export_wh. W przypadku liczników jednokierunkowych (np. falowników) należy zawsze definiować tylko import_wh. Export_wh powinien być zdefiniowany tylko dla liczników dwukierunkowych (takich jak zbiorniki magazynowe lub liczniki odniesienia do sieci).

soc: Jeśli jest dostępny, stan naładowania zbiornika akumulatora jest wyświetlany w % w kafelku.
Ponadto można zdefiniować inne zmienne o różnych nazwach, które są odczytywane przy każdej aktualizacji lub obliczane za pomocą formuł. W przypadku zdefiniowania zmiennych rozpoczynających się od CM., np. CM._set_price, przypisane wartości są przechowywane w globalnych zmiennych Charging Manager (patrz poniżej) i mogą być odpowiednio wyszukiwane.
Zmienne z *: W przypadku zdefiniowania zmiennych zaczynających się od *, są one wyświetlane w interfejsie użytkownika w kafelku licznika pod rozszerzonymi informacjami, np. temperatura akumulatora.

Definicja zmiennej:

Obiekt nosi nazwę zmiennej wymienionej powyżej i ma następujące właściwości:
fixed: String ze stałą wartością. Przydatne, jeżeli np. dla type_designation lub voltage nie można określić żadnej wartości.
expr: String, zmienna nie jest odczytywana lecz obliczana jako formuła.
type: Jeżeli nie fixed lub expr, typ zmiennej: int16, int32, float, int64, string. Jest to ważne dla Modbus, aby odczytać rejestry w odpowiednim formacie. Dla JSON/HTTP zazwyczaj można przyjąć float.
resolution: float, odczytana wartość jest mnożona przez 'resolution'. Wartości dla napięć muszą być w woltach, prądów w miliamperach, mocy w watach, energii w watogodzinach (Wh). Przy ujemnej 'rozdzielczości' można odwrócić wartość, jeżeli ma ona przeciwny znak.
once: bool (true lub false), jeżeli true, to wartość jest odczytywana tylko raz przy inicjalizacji urządzenia, w przeciwnym razie okresowo.
address: number (Modbus) lub string (HTTP/JSON), numer rejestru Modbus lub URL HTTP wartości do odczytania.
query: String, dla HTTP JSON specyfikacja w języku zapytań Charging Managera, za pomocą której znajduje on w odpowiedzi JSON wartość do odczytania.
order: String, dla Modbus kolejność bajtów, albo "hl" albo "lh", w której występuje wartość. length: number, dla Modbus długość łańcucha w rejestrach. W przypadku zmiennych "version" i "firmware_version", "length" służy do przekształcenia wersji numerycznych w ciągi z kropkami. Dla 'length' dopuszczalne są wartości 2 lub 4, które dają w efekcie formaty wersji a.b, i a.b.c.d. Dla 'length' 2 i typu 'int16' menedżer ładowania oddziela niski i wysoki bajt kropką, dla int32 niskie i wysokie słowo, dla 'int64' niskie i wysokie dword. Dla 'lenth' 4 i typu 'int32' Menedżer Ładunków dzieli wartość na 4 bajty oddzielone kropką. Dla 'int64' odpowiednio 4 słowa.
regex: String. Jeśli określono wyrażenie regularne, odpowiedź licznika nie musi być w JSON. W rezultacie oceniane jest albo całe dopasowanie wyrażenia regularnego, albo pierwsza grupa. Proszę używać tylko wtedy, gdy urządzenie nie zwraca JSON. Oto lista cech naszych wyrażeń regularnych:
any char: .
named classes: \d \s \w \D \S \W
anonymous classes: [a-z0-9_], [^0-9], [^\d]
groups with alternatives: (ab|cd|ef)
non-captured groups: (?:ab|cd)
(greedy) once or none: a?, a???
(zachłanny ) wiele lub żaden: a*, a*?
(zachłanny) raz lub więcej: a+, a+?
początek ciągu: ^
koniec ciągu: $

Definicja wejść:

Charging Manager może odpytywać do 32 wartości wejściowych z różnych rejestrów lub elementów JSON na urządzenie. Właściwość "Inputs" jest tablicą JSON. Dla każdego wejścia należy zdefiniować następujące właściwości:
adres: Adres (rejestr Modbus lub URL).
liczyć: Liczba bitów wejściowych, które zostaną odczytane tym żądaniem.
query: Dla HTTP/JSON, język zapytań, aby znaleźć wartość w odpowiedzi.

Menedżer Ładunków cFos odczytuje wszystkie tak zdefiniowane wejścia przy każdej aktualizacji i umieszcza bity wewnętrznie w tablicy, którą można następnie odpytywać za pomocą formuł, Wejście1..WejścieN..

Definicja wyjść:

Menedżer ładowania może przełączać do 32 wyjść na urządzenie. Wyjścia są zdefiniowane w "outputs" jako tablica JSON obiektów wyjściowych. Wszystkie wyjścia są przełączane na koniec każdego cyklu aktualizacji, jeśli stan danego wyjścia uległ zmianie.
Dla każdego wyjścia należy zdefiniować następujące właściwości w obiekcie wyjściowym:
address: HTTP URL with optional HTTP method, e.g. GET http://www.example.com?output1=${var1}. Aby ustawić rejestry Modbus, można użyć interfejsu API HTTP cFos Charging Manager. Charging Manager wykrywa pasujące dostępy na localhost i przekierowuje żądanie do wewnętrznej obsługi, więc nie potrzebujesz autoryzacji, jak w przypadku zewnętrznych dostępów HTTP API. Jeśli adres URL jest pusty po wszystkich zamianach, żadne dane wyjściowe nie są ustawiane. Na przykład, można przełączać wyjścia tylko wtedy, gdy istnieją określone zmienne (patrz formuły: funkcja exists()). W adresie można dodatkowo określić ${address} i ${id}. Jest to bieżący adres urządzenia i identyfikator Modbus zdefiniowany w ustawieniach. Adres i identyfikator są używane głównie do korzystania z interfejsu API Modbus (patrz poniżej).
body: Opcjonalna treść HTTP dla POST lub PUT.
W adresie URL i treści można używać formuł ${expr}, które odwołują się do globalnych zmiennych Charging Manager lub z odpowiedniego licznika. Formuła "expr" jest obliczana podczas ustawiania danych wyjściowych i zastępowana w tekście adresu URL lub treści. Jeśli w powyższym przykładzie http://www.example.com?output1=1 ustawia dane wyjściowe, a http://www.example.com?output1=0 je usuwa, można zdefiniować zmienną "var1" i ustawić ją na 1 lub 0 zgodnie z potrzebami. W ten sposób można również zapisywać wartości liczbowe w celu kontrolowania wydajności pamięci w rejestrach Modbus, które zostały wcześniej zapisane w zmiennej za pomocą formuły.
Jeśli zamiast przekazywania wartości liczbowej w adresie URL konieczne jest zastąpienie jednego tekstu innym w zależności od formuły, na przykład w przypadku gniazd Shelly WLAN, można to zapisać w następujący sposób: ${if expr`text1`text2}. 'Apostrof' jest znakiem backtick (kod ASCII 96). Jeśli 'expr' != 0, wstawiany jest tekst1, w przeciwnym razie tekst2. W przypadku gniazda Shelly WLAN adres URL wygląda następująco: http://<ip-addr>/relay/0?turn=${if expr`on`off}, tzn. jeśli expr != 0, Charging Manager wywołuje http://<ip-addr>/relay/0?turn=on, w przeciwnym razie http://<ip-addr>/relay/0?turn=off.

Jeśli jako adres URL zostanie wprowadzona ścieżka względna, Charging Manager przyjmie adres skonfigurowany dla danego urządzenia. Jeśli jako domenę wpiszesz "localhost", Charging Manager przyjmie adres urządzenia, na którym jest uruchomiony. Jeśli wykryje dostęp do własnego interfejsu API, użyje wewnętrznego programu obsługi zamiast wykonywania pełnego dostępu HTTP, dzięki czemu nie trzeba przechowywać nazwy użytkownika i hasła w definicji licznika. Adres URL zaczynający się od * spowoduje, że Charging Manager zawsze wykona pełny dostęp HTTP.

Resetowanie wyjść: Oprócz tablicy "outputs" można również zdefiniować tablicę o nazwie "resets", która ma strukturę podobną do tablicy "outputs". Może być ona używana do resetowania wyjść do ich wartości początkowych, gdy urządzenie jest dezaktywowane. Dzięki temu, w połączeniu ze zmiennymi zdefiniowanymi przez użytkownika i "once": true, można przywrócić urządzenie do stanu początkowego.
Okresowe zapisywanie wyjść: W przypadku niektórych urządzeń wyjścia muszą być zapisywane okresowo, w przeciwnym razie urządzenie resetuje wartości do "domyślnych". Na przykład pamięć Kostal ponownie używa swoich domyślnych reguł, jeśli sterowanie pamięcią nie było aktywnie zapisywane przez jakiś czas. Aby okresowo ustawiać wyjścia, można poprzedzić adres #xxx#, gdzie xxx wskazuje, co ile sekund wyjście jest przepisywane, nawet jeśli wartość do zapisania pozostała taka sama. Na przykład, jeśli adres to /cnf?cmd=set_cm_vars&name=test&val=42, można użyć #30#/cnf?cmd=set_cm_vars&name=test&val=42, aby zapewnić, że wartość ta będzie zapisywana co 30 sekund.

Definicja query langage:

Obecnie w wyrażeniach wyszukiwania "query" można używać nazw członków oraz operatorów "." i "[]", przykłady:

testElement o nazwie "test"
nazwa1.nazwa2Element o nazwie "nazwa2" w obiekcie dziecięcym "nazwa1"
name[idx]Element "idx" elementu obiektu "nazwa". "idx" może być liczbą, np. dla tablic lub ciągiem znaków
name["u2"]Element "u2" elementu obiektu "nazwa", odpowiada "nazwa.u2"
name[{"el1": "v1", "el2": 3}].valueWybierz element tablicy, który spełnia warunek zapisu obiektowego i oceń element o nazwie 'value'. Tutaj na przykład w tablicy 'nazwa' wybierany jest element, który ma jako obiekty elementy 'el1' o wartości 'v1' i 'el2' o wartości 3, a następnie z tego obiektu zwracana jest wartość elementu 'wartość'.

Zmienne Global Charging Manager:

W konfiguracji Charging Manager można tworzyć zmienne. Jako wartość możesz użyć stałej wartości lub formuły. Na koniec każdego cyklu aktualizacji Menedżer ds. ładowania w razie potrzeby ponownie oblicza wartość tych zmiennych. Można je następnie wykorzystać w (niektórych) parametrach Charging Manager, Charging Rules lub do sterowania wyjściami. Możesz również napisać Ex.member lub Mx.member jako zmienne. Tutaj, Exi Mxsą identyfikatorami urządzeń dla wallboxa lub licznika ustawionego w Charging Manager. member jest zmienną "zdefiniowaną przez użytkownika", która jest przechowywana w odpowiednim urządzeniu. Niektóre ze zmiennych mogą mieć specjalne znaczenie: Dla KEBA "out1" jest wyjściem przełączającym, dla liczników ABB B23 "out1" i "out2" są wyjściami przełączającymi (dla modeli, które to obsługują). 1 włącza wyjście, 0 ponownie je wyłącza.

Jeśli masz urządzenia, które muszą być włączone w określonych warunkach, a następnie działają przez pewien czas (np. pralka, zmywarka), możesz również zdefiniować zmienną jako "wyzwalacz". Wtedy formuła zmiennej jest warunkiem, w którym zmienna jest ustawiona na 1. Po upływie określonego czasu zmienna jest ponownie ustawiana na 0. "Warunek ponownego wyzwolenia" umożliwia wielokrotne wydłużanie czasu do wyłączenia (tj. ustawienia zmiennej na 0), o ile warunek jest spełniony.

Do celów testowych można wyświetlić Charging Manager i zmienne licznika, np. bieżące ceny Awattar:


                        Wyświetlanie zrzutu ekranu zmiennych licznika

Global Charging Manager Wyjścia:

W konfiguracji Charging Managera można skonfigurować globalne wyjścia w sposób opisany powyżej w definicji licznika w części "Wyjścia". Są one ustawiane na koniec każdego cyklu aktualizacji, jeśli ich status uległ zmianie. Jeśli chcesz sterować wyjściami przełączającymi w urządzeniach zdefiniowanych przez użytkownika, zalecana jest powyższa konwencja (patrz Zmienne menedżera ładowania): W liczniku zdefiniowanym przez użytkownika ustawiasz zmienne o nazwach "out1", "out2" itd. i ustawiasz wyjścia w liczniku zdefiniowanym przez użytkownika, które przełączają wyjście w zależności od wartości tych zmiennych.

Globalny interfejs API Modbus menedżera ładowania:

Modbus API Menadżera Ładowania służy do sterowania urządzeniami Modbus, które mają dowolny adres Modbus RTU lub TCP (dostępny z Menadżera Ładowania). Dla Modbus RTU jako adres należy wpisać COMx,bd,8,p,s, gdzie x to numer portu COM, bd to prędkość transmisji, p to parzystość ('N', 'E' lub 'O'), a s to liczba bitów stopu (1 lub 2), tak jak w konfiguracji poszczególnych urządzeń. Dla Modbus TCP adresatem jest adres IP urządzenia w sieci Charging Manager wraz z numerem portu.
Adres URL (dla HTTP GET) Modbus API to:
/cnf?cmd=modbus_get lub /cnf?cmd=modbus_set
Menedżer ładowania cFos obsługuje następujące dodatkowe parametry zapytania:
addr: Adres urządzenia Modbus RTU lub TCP wymieniony powyżej.
func: Numer funkcji Modbus, np. dla odczytu 3 lub 4, dla zapisu 6 lub 16.
id: ID urządzenia Modbus.
reg: Numer rejestru Modbus. Wartość można podać w systemie dziesiętnym lub szesnastkowym (z przedrostkiem 0x).
val: liczba, wartość, która ma być zapisana do rejestru. Pominąć przy odczycie.
type: 'w' 16bit (default), d = 32bit, f = float, q = 64bit, s = string.
cnt: liczba, maksymalna długość łańcucha w rejestrach, pominąć dla innych typów lub ustawić na 1.
order: String, kolejność bajtów, albo "hl" albo "lh".

Uwaga: Jeśli Twój "licznik" ma przede wszystkim zadania kontrolne, możesz w ustawieniach tego kafelka zaznaczyć opcję "Ukryj urządzenie", aby to urządzenie nie pojawiało się na stronie startowej.

Uwaga: Niektóre mierniki, które są odczytywane poprzez HTTP, wymagają jako autoryzacji nazwy użytkownika/hasła. Można to określić w adresie dla dostępu HTTP, np. za pomocą http://username:password@192.168.2.111. Jeśli nazwa użytkownika lub hasło zawiera znak "@", należy go zastąpić znakiem "%40".