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ówDefinicje liczników to pliki JSON z globalnym obiektem JSON, który ma właściwości i podobiekty. 'rtype' określa typ operacji odczytu: 0 = Modbus, 1 = HTTP/JSON, 2 = MQTT/JSON. 'mtype' określa typ urządzenia: 0 = Inne urządzenie, 1 = Miernik, 2 = Falownik, 4 = Akumulator.
Liczby można podawać w systemie dziesiętnym lub szesnastkowym z prefiksem 0x. Dozwolone są również komentarze jednowierszowe z użyciem //.
Zalecamy sprawdzenie plików definicji za pomocą walidatora JSON5, np. tego walidatora J SON5 Zdecydowanie należy przeczytać rozdział Formuły, aby zrozumieć, które wartości mogą być używane w formułach w poniższym odnośniku.
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.
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.
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.
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.
Obiekt nosi nazwę zmiennej wymienionej powyżej i ma następujące właściwości: fixed: String ze stałą wartością.
Przydatne, jeśli na przykład nie można określić żadnej wartości, np. dla type_designation lub voltage. expr: String, zmienna nie jest odczytywana, ale obliczana jako formuła. type: Jeśli nie fixed lub expr, typ zmiennej: int16, uint16, int32, uint32, float, int64, string. Jest to ważne dla Modbus, aby odczytywać rejestry w prawidłowym formacie. uint16 i uint32 to typy, które mogą akceptować tylko liczby dodatnie.
W przypadku JSON/HTTP zwykle można użyć float. resolution: float, odczytana wartość jest mnożona przez "resolution". Wartości napięcia muszą być w woltach, prądu w miliamperach, mocy w watach, energii w watogodzinach (Wh).
Przy ujemnej "rozdzielczości" można odwrócić wartość, jeśli ma przeciwny znak. once: bool (true lub false), jeśli true, wartość jest odczytywana tylko raz podczas inicjalizacji urządzenia, w przeciwnym razie okresowo. address: number (Modbus) lub string (HTTP/JSON), numer rejestru Modbus lub adres URL HTTP wartości do odczytania. query:
String, w przypadku HTTP JSON specyfikacja w języku zapytań Charging Managera, za pomocą której znajduje on wartość do odczytania w odpowiedzi JSON. order: String, w przypadku Modbus kolejność bajtów, "hl" lub "lh", w której znajduje się wartość. length: number, w przypadku Modbus długość łańcucha w rejestrach. W przypadku zmiennych "version" i "firmware_version", "length" służy do przekształcania wersji numerycznych w ciągi z kropkami. Dozwolone są wartości 2 lub 4 dla 'length', co skutkuje formatami wersji a.b i a.b.c.d. Przy 'length' 2 i typie 'int16' lub 'uint16', Charging Manager oddziela niski i wysoki bajt kropką, przy 'int32' lub 'uint32' niski i wysoki wyraz, przy 'int64' niski i wysoki dword. W przypadku "lenth" 4 i "int32" lub "uint32" Menedżer ładowania dzieli wartość na 4 bajty oddzielone kropką.
W przypadku "int64" odpowiednio 4 słowa. regex: String. Jeśli określono wyrażenie regularne, odpowiedź licznika nie musi być w formacie JSON. Jako wynik oceniane jest całe dopasowanie wyrażenia regularnego lub pierwsza grupa. Używaj tego tylko wtedy, gdy urządzenie nie zwraca JSON.
Oto lista funkcji naszych wyrażeń regularnych: dowolny znak: . nazwane klasy:
\d \s \w \D \S \W klasy anonimowe: [a-z0-9_], [^0-9], [^\d] grupy z alternatywami: (ab|cd|ef) grupy nieprzechwycone: (?:ab|cd) (zachłanne) raz lub brak: a?, a????
(zachłanny) wiele lub żaden: a*, a*?
(greedy) raz lub więcej: a+, a+? początek ciągu: ^ koniec ciągu: $
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..
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.
Obecnie w wyrażeniach wyszukiwania "query" można używać nazw członków oraz operatorów "." i "[]", przykłady:
test | Element o nazwie "test" |
nazwa1.nazwa2 | Element 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}].value | Wybierz 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ść'. |
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:
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.
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:[email protected]
. Jeśli nazwa użytkownika lub hasło zawiera znak "@", należy go zastąpić znakiem "%40".