Dökümantasyon

Kullanıcı tanımlı sayaçlar

Not: cFos Şarj Yöneticisi, SunSpec kullanan çoğu solar inverteri okuyabilir ("SunSpec Solar Inverter / Meter" cihaz tipi). Bu durumda, kendi sayaç tanımınızı oluşturmanıza gerek yoktur.

CFos Charging Manager, standart repertuarda bulunmayan sayaçları desteklemek için kendi sayaç tanımlarınızı oluşturmanıza olanak tanır. Şu anda üç tip bulunmaktadır: Modbus sayaçları, HTTP/JSON sayaçları ve MQTT/JSON sayaçları. Bu sayaçlar için tanım dosyaları çok benzerdir. Modbus sayaçları verilerini Modbus aracılığıyla belirli kayıtlardan okurken, HTTP/JSON sayaçları verilerini HTTP isteği yoluyla alır ve yanıt olarak JSON olarak okur. MQTT/JSON sayaçları için cFos Charging Manager, MQTT konularına abone olur ve konu altında yayınlanan mesajları JSON olarak okur. CFos Charging Manager okuma için küçük bir "Query Language" kullanır. İşte cFos Şarj Yöneticisindeki MQTT yeteneklerinin dokümantasyonu.

Akım ve voltaj gibi önceden tanımlanmış bir dizi değişkene ek olarak, kullanıcı tanımlı sayaçlar bilinmeyen, kullanıcı tanımlı değişkenleri de okuyabilir, girişleri sorgulayabilir ve çıkışları ayarlayabilir. Değişkenlerin okunması ve çıkışların ayarlanması formüllerin analiz edilmesini sağlar. Aşağıda açıklanan Şarj Yöneticisi değişkenleri ve global Şarj Yöneticisi çıkışları ile birlikte bu güçlü bir özelliktir ve hatta belirli ev otomasyonu görevlerine ve akü depolama üniteleri gibi harici cihazların kontrolüne izin verir. Bununla kontrol görevlerini gerçekleştirirseniz, lütfen bize geri bildirimde bulunun. Müşterilerimizin cFos Şarj Yöneticisi ile neleri kontrol ettikleriyle çok ilgileniyoruz ve bu, Şarj Yöneticisini müşteri ihtiyaçlarına göre daha da geliştirmemize yardımcı oluyor.

İşte Modbus için aktif güç için tek bir kayıt okuyan basit bir örnek tanım. Özel uygulamanız için kayıt numarasını kolayca değiştirebilirsiniz:
Tek bir kayıt için örnek tanım.

Burada Modbus için örnek bir tanım ve HTTP/JSON için bir tanım bulunmaktadır:
Modbus ölçüm cihazı için örnek tanımı indirin
HTTP/JSON ölçer için örnek tanımı indirin

Şarj Yöneticisi zaten bu tür birkaç dosya ile birlikte gelir, ancak "Sistem yapılandırması" altında kendi dosyalarınızı yükleyebilir ve bunları tekrar silebilirsiniz.
Burada sunduğumuz sayaç tanımlarının çoğunu bulacaksınız:
Verilen sayaç tanımlarını indirin

Eğer kendi sayaç dosyanızı oluşturduysanız ve bu diğer kullanıcılar için de uygun olabilirse, bunu bize sunarsanız çok minnettar oluruz. O zaman bunu Charging Manager'ın gelecekteki sürümleriyle birlikte sunacağız.

Ek sayaçlar için sayaç tanımlarını indirin

Bir tanım dosyasının yapısı:

Sayaç tanımları, özellikleri ve alt nesneleri olan global bir JSON nesnesine sahip JSON dosyalarıdır. 'rtype' okuma işleminin türünü belirler: 0 = Modbus, 1 = HTTP/JSON, 2 = MQTT/JSON. 'mtype' cihaz türünü belirler: 0 = Diğer cihaz, 1 = Sayaç, 2 = İnvertör, 4 = Akü depolama.

Sayıları '0x' önekiyle ondalık veya onaltılık olarak belirtebilirsiniz. '//' kullanarak tek satırlık yorumlara da izin verilir.

Tanım dosyalarınızı bir JSON5 doğrulayıcıdan geçirmenizi öneririz, örneğin bu JSON5 doğrulayıcı Aşağıdaki referansta formüllerde hangi değerlerin kullanılabileceğini anlamak için Formüller bölümünü mutlaka okumuş olmalısınız.

Modbus tanımları aşağıdaki özelliklere sahip bir 'rtu' nesnesine sahiptir:




silence_period, msn cinsinden: Cihazın bir mesajın başlangıcını tanıması için Modbus RTU erişiminden önceki duraklama uzunluğunu belirler. silence_same_slave, true: Duraklama, aynı cihaza birden fazla erişim için de korunur. retries: Cihaz yanıt vermezse yeniden deneme sayısı. rcv_timeout: msn cinsinden: Cihaz yanıt verene kadar erişim başına maksimum bekleme süresi.

Bu genel özellikler Modbus TCP ve RTU için geçerlidir:

modbus_read:

Okuma için Modbus komutunun fonksiyon numarası, genellikle 3 veya 4. modbus_read_max_registers: Bir seferde okunabilecek maksimum kayıt sayısı. modbus_allow_gaps: true = kullanılmayan kayıt alanları bir okuma işleminde okunabilir.

Modbus TCP ve HTTP/JSON için aşağıdaki özelliklere sahip bir 'tcp' nesnesi vardır:


connect_timeout: is msec: TCP bağlantısı için maksimum bekleme süresi. delay_after_connect: in msec: Bağlantı kurulduktan sonra ilk komut gönderilmeden önce duraklama.

Her iki tanım türü de (Modbus ve HTTP/JSON) aşağıdaki ek özelliklere sahiptir:

upd_delay: in msec: Bir cihazın hangi aralıkta okunabileceğini belirler.
Bazı cihazlar çok sık sorgulanırsa aşırı yüklenirler. manufacturer: String, üreticinin adı.


Bu, kutucuğun genişletilmiş bilgilerinde görüntülenir. delay_accumulated: true = Birikmiş değerler (kWh) yalnızca her 3 saniyede bir veya yeterli güç varsa sorgulanır. false = Bu değerler her zaman sorgulanır. ui_addr: URL, web arayüzünü çağırmak için cihaz adresinden farklıysa. reserved: 0 olarak yorumlanan değerleri içeren dizi (cihaz modele bağlı olarak belirli değerleri destekliyorsa kullanışlıdır).

Yukarıda listelenen özellikleri atlarsanız, cFos Charging Manager çoğu durumda iyi çalışan varsayılan değerleri kullanır.

JSON tanımındaki bir sonraki adım, sayacın akım, voltaj vb. değerleri okumak veya hesaplamak için kullandığı değişkenlerin tanımıdır.
Şarj Yöneticisi aşağıdaki değişkenleri tanır: type_designation, version, firmware_version, serial: Bunlar, kutucuğun genişletilmiş bilgilerinde gösterildiği gibi model tanımını oluşturur.
Bunlar sayacı ayarlarken veya sıfırlarken bir kez sorgulanır . voltage_l1..voltage_l3, current_l1..current_l3, power_w, power_var, power_va, power_w_l1..power_w_l3: CFos Şarj Yöneticisi voltaj_l1..l3, işaretli akım_l1..l3, güç_w ve güç_va için bu değerlerden hesaplama yapmaya çalışır. Tüm değişkenleri belirtmek zorunda değilsiniz.
CFos Şarj Yöneticisi değerleri mevcut değişkenlerden hesaplamaya çalışır. import_wh, export_wh: Şarj Yöneticisi import_wh ve export_wh değerlerini görüntülemek için bu değişkenleri kullanır. Tek yönlü sayaçlar (örn. inverterler) için yalnızca import_wh tanımlamalısınız.

Yalnızca çift yönlü sayaçlar için (depolama veya şebeke referans sayaçları gibi) export_wh tanımlanmalıdır. soc: Varsa, bir batarya deposunun şarj durumu burada kutucukta % olarak görüntülenir.
Her güncellemede okunan veya formüller kullanılarak hesaplanan farklı adlara sahip başka değişkenler de tanımlayabilirsiniz. 'CM.' ile başlayan değişkenler tanımlarsanız, örneğin CM._set_price, atanan değerler global Charging Manager değişkenlerinde saklanır (aşağıya bakın) ve buna göre sorgulanabilir.
Ile başlayan değişkenler: '*' ile başlayan değişkenler tanımlarsanız, bunlar kullanıcı arayüzünde sayaç kutucuğunda genişletilmiş bilgiler altında görüntülenir, örneğin bir akü depolama biriminin sıcaklığı.
Not: Değişken adı olarak yalnızca sayılar ve a-z ve A-Z harfleri kullanılabilir.

Bir değişkenin tanımı:


Nesne, yukarıda listelenen değişkenin adından sonra adlandırılır ve aşağıdaki özelliklere sahiptir: fixed: Sabit bir değere sahip dize.
Örneğin type_designation veya voltage için herhangi bir değer belirlenemiyorsa kullanışlıdır. expr: String.
Değişken okunmaz, ancak bir formül olarak değerlendirilir. type: Sabit veya expr değilse, değişkenin türü: int16, uint16, int32, uint32, float, int64, string. Bu, Modbus için kayıtları doğru biçimde okumak açısından önemlidir. uint16 ve uint32 yalnızca pozitif sayıları kabul edebilen türlerdir.
JSON/HTTP ile genellikle float kullanabilirsiniz. çözünürlük: float. Okunan değer 'çözünürlük' ile çarpılır. Voltaj değerleri volt, akım değerleri miliamper, güç değerleri watt, enerji değerleri watt-saat (Wh) cinsinden olmalıdır.
Negatif 'çözünürlük' ile, ters işarete sahipse bir değeri ters çevirebilirsiniz. once: bool (doğru veya yanlış).
Doğru ise, değer cihaz başlatıldığında yalnızca bir kez okunur, aksi takdirde periyodik olarak okunur. adres: sayı (Modbus) veya dize (HTTP/JSON).
Modbus kayıt numarası veya okunacak değerin HTTP URL'si. sorgu: Dize.
HTTP JSON için, Şarj Yöneticisinin JSON yanıtında okunacak değeri bulduğu sorgu dilindeki belirtim. order: String. Modbus için, değerin bulunduğu bayt sırası, "hl" veya "lh". length: sayı. Modbus için, kayıtlardaki bir dizenin uzunluğu; 'version' ve 'firmware_version' değişkenleri için, 'length' sayısal sürümleri noktalı dizelere dönüştürmek için kullanılır. 'length' için 2 veya 4 değerlerine izin verilir, bu da a.b ve a.b.c.d sürüm biçimleriyle sonuçlanır. 'length' 2 ve 'int16' veya 'uint16' tipi ile, Şarj Yöneticisi düşük ve yüksek baytı bir nokta ile, 'int32' veya 'uint32' düşük ve yüksek word ile, 'int64' düşük ve yüksek dword ile ayırır. 'lenth' 4 ve 'int32' veya 'uint32' için, Ücretlendirme Yöneticisi değeri bir nokta ile ayrılmış 4 bayta böler.
'int64' için buna uygun olarak 4 kelime. regex: String. Düzenli bir ifade belirtilirse, sayaç yanıtının JSON'da olması gerekmez. Ya düzenli ifadenin tüm eşleşmesi ya da ilk grup sonuç olarak değerlendirilir. Lütfen bunu yalnızca cihaz JSON döndürmüyorsa kullanın.

İşte düzenli ifadelerimizin özelliklerinin listesi: any char: . named classes:



\d \s \w \D \S \W anonim sınıflar: [a-z0-9_], [^0-9], [^\d] alternatifli gruplar: (ab|cd|ef) yakalanmamış gruplar: (?:ab|cd) (açgözlü) bir kez veya hiçbiri: a?, a???
(açgözlü) çok ya da hiç: a*, a*?


(açgözlü) bir veya daha fazla: a+, a+? dize başı: ^ dize sonu: $

Girdilerin tanımı:

Şarj Yöneticisi, çeşitli kayıtlardan veya JSON öğelerinden cihaz başına 32 adede kadar giriş değeri talep edebilir. "Girişler" özelliği bir JSON dizisidir.
Her bir girdi için aşağıdaki özellikleri tanımlamanız gerekir: address: Adres (Modbus kaydı veya URL).
sayım:
Bu istekle okunan giriş bitlerinin sayısı. query: HTTP/JSON için, yanıttaki değeri bulmak için sorgu dili.

CFos Şarj Yöneticisi, her güncellemede bu şekilde tanımlanan tüm girişleri okur ve bitleri dahili olarak bir dizide depolar, daha sonra formüllerde sorgulanabilir, Input1..InputN.

Çıktıların tanımı:

Şarj Yöneticisi cihaz başına 32 adede kadar çıkışı değiştirebilir. Çıkışlar, çıkış nesnelerinin bir JSON dizisi olarak "çıkışlar" içinde tanımlanır. İlgili çıkışın durumu değişmişse, tüm çıkışlar her güncelleme döngüsünün sonunda değiştirilir.

Her çıkış için çıkış nesnesinde aşağıdaki özellikleri tanımlamanız gerekir: adres: isteğe bağlı HTTP yöntemi ile HTTP URL'si, örneğin GET http://www.example.com?output1=${var1}. Modbus kayıtlarını ayarlamak için cFos Şarj Yöneticisinin HTTP API'sini kullanabilirsiniz. Şarj Yöneticisi localhost üzerindeki uygun erişimleri tanır ve talebi dahili işleyiciye yönlendirir, böylece harici HTTP API erişimlerinde olduğu gibi yetkilendirmeye ihtiyacınız olmaz. Tüm değiştirmelerden sonra URL boşsa, hiçbir çıktı ayarlanmaz. Örneğin, yalnızca belirli değişkenler mevcutsa çıktıları değiştirebilirsiniz (bkz. formüller: exists() işlevi). Ayrıca adreste ${adres} ve ${id} belirtebilirsiniz. Bu, ayarlarda tanımlandığı şekliyle geçerli cihaz adresi ve Modbus ID'sidir.
'adres' ve 'id' esas olarak Modbus API'sini kullanmak için kullanılır (aşağıya bakın). body: POST veya PUT için isteğe bağlı HTTP gövdesi.
URL'de ve gövdede, global şarj yöneticisi değişkenlerine veya ilgili sayaçtan referans veren formüller kullanmak için ${expr} kullanabilirsiniz. 'expr' formülü, çıktı ayarlandığında değerlendirilir ve URL veya gövde metninde değiştirilir. Yukarıdaki örnekte, http://www.example.com?output1=1 çıktıyı ayarlar ve http://www.example.com?output1=0 onu silerse, bir 'var1' değişkeni tanımlayabilir ve gerektiği gibi 1 veya 0 olarak ayarlayabilirsiniz. Bu şekilde, daha önce bir formül kullanarak bir değişkende sakladığınız Modbus kayıtlarındaki bellek performansını kontrol etmek için sayısal değerler de yazabilirsiniz.
Sayısal bir değer geçmek yerine, formüle bağlı olarak URL'deki bir metni başka bir metinle değiştirmeniz gerekiyorsa, örneğin Shelly WLAN soketleri için, bunu şu şekilde yazabilirsiniz: ${if expr`text1`text2}. "Kesme işareti" bir backtick'tir (ASCII kodu 96). Eğer 'expr' != 0 ise, metin1 kullanılır, aksi takdirde metin2. Shelly WLAN soketi için URL şu şekilde görünür, örneğin: http://<ip-addr>/relay/0?turn=${if expr`on`off}, yani expr != 0 ise, Şarj Yöneticisi http://<ip-addr>/relay/0?turn=on, aksi takdirde http://<ip-addr>/relay/0?turn=off adresini çağırır.

URL olarak göreli bir yol girerseniz, Şarj Yöneticisi ilgili cihaz için yapılandırılmış adresi kullanır. Etki alanı olarak 'localhost' girerseniz, Şarj Yöneticisi üzerinde çalıştığı cihazın adresini alır. Kendi API'sine erişimi tanırsa, tam bir HTTP erişimi yürütmek yerine dahili işleyiciyi kullanır, böylece sayaç tanımında bir kullanıcı adı ve şifre girmeniz gerekmez. '*' ile başlayan bir URL, Şarj Yöneticisinin her zaman tam bir HTTP erişimi gerçekleştirmesine neden olur.

Çıkışları sıfırlayın: Bir "outputs" dizisine ek olarak, "outputs" dizisi gibi yapılandırılmış "resets" adında bir dizi de tanımlayabilirsiniz. Bu, cihaz devre dışı bırakıldığında çıkışların ilk değerlerine sıfırlanmasını sağlar. Bu, cihazı ilk durumuna sıfırlamak için kullanıcı tanımlı değişkenler ve "once": true ile birlikte kullanılabilir.
Çıkışları periyodik olarak yazın: Bazı cihazlar için çıkışlar periyodik olarak yazılmalıdır, aksi takdirde cihaz değerleri "varsayılan" duruma sıfırlayacaktır. Örneğin, Kostal bellek, bellek kontrolü bir süre aktif olarak yazılmadığında varsayılan kurallarına geri döner. Çıkışları periyodik olarak ayarlamak için, adresin önüne #xxx# ekleyebilirsiniz; burada xxx, yazılacak değer aynı kalsa bile çıkışın kaç saniyede bir yeniden yazılacağını gösterir. Örneğin, adres /cnf?cmd=set_cm_vars&name=test&val=42 ise, bu değerin her 30 saniyede bir yazılmasını sağlamak için #30#/cnf?cmd=set_cm_vars&name=test&val=42 kullanabilirsiniz.

Sorgu Dilinin Tanımı:

Şu anda, üye adları ve "." ve "[]" operatörleri "sorgu" arama ifadelerinde kullanılabilir, örnekler:

test"test" adlı öğe
isim1.isim2"name1" alt nesnesinde "name2" adlı öğe
name[idx]"name" nesne öğesinin "idx" öğesi. "idx" bir sayı olabilir, örneğin diziler veya bir dize için
name["u2"]"name" nesne öğesinin "u2" öğesi, "name.u2" öğesine karşılık gelir
name[{"el1": "v1", "el2": 3}].valueNesne gösteriminin koşulunu sağlayan dizi elemanı seçilir ve 'değer' adlı eleman değerlendirilir. Burada örneğin 'isim' dizisinde nesne elemanları olarak 'v1' değerine sahip 'el1' ve 3 değerine sahip 'el2' olan eleman seçilir ve bu nesneden 'değer' elemanının değeri döndürülür.

Global Şarj Yöneticisi değişkenleri:

Ücretlendirme Yöneticisi yapılandırmasında değişkenler oluşturabilirsiniz. Değer olarak sabit bir değer veya bir formül kullanabilirsiniz. Her güncelleme döngüsünün sonunda, Şarj Yöneticisi gerekirse bu değişkenlerin değerini yeniden hesaplar. Daha sonra bunları (belirli) Ücretlendirme Yöneticisi parametrelerinde, ücretlendirme kurallarında veya çıkışları kontrol etmek için kullanabilirsiniz. Ex.member veya Mx.member'ı değişken olarak da yazabilirsiniz. Bu durumda Exve Mx, Şarj Yöneticisinde ayarlanmış bir wallbox veya sayacın cihaz kimliğidir. 'member', ilgili cihaza kaydedilen "kullanıcı tanımlı" bir değişkendir. Bazı değişkenlerin özel bir anlamı olabilir: KEBA için 'out1' bir anahtarlama çıkışıdır, ABB B23 sayaçları için 'out1' ve 'out2' anahtarlama çıkışlarıdır (bunu destekleyen modeller için). Bir 1 çıkışı açar, bir 0 çıkışı tekrar kapatır.

Belirli koşullar altında açılması gereken ancak daha sonra bir süre çalışan cihazlarınız varsa (örn. çamaşır makinesi, bulaşık makinesi), değişkeni bir "tetikleyici" olarak da tanımlayabilirsiniz. O zaman değişkenin formülü, değişkenin 1'e ayarlandığı koşuldur. Ayarlanabilir bir süre sonra tekrar 0'a ayarlanır. Bir "yeniden tetikleme koşulu", koşul yerine getirildiği sürece kapatmaya (yani değişkeni 0'a ayarlamaya) kadar geçen sürenin tekrar tekrar uzatılmasına olanak tanır.

Not: Değişken adı olarak yalnızca sayılar ve a-z ve A-Z harfleri kullanılabilir.

Test amacıyla, şarj yöneticisi ve sayaç değişkenlerini, örneğin güncel Awattar fiyatlarını görüntüleyebilirsiniz:


                        Sayaç değişkenlerinin ekran görüntüsü

Küresel Şarj Yöneticisi Çıktıları:

Şarj Yöneticisi yapılandırmasında, global çıkışları yukarıda 'Çıkışlar' altındaki sayaç tanımında açıklandığı gibi yapılandırabilirsiniz. Bunlar, durumları değişmişse her güncelleme döngüsünün sonunda ayarlanır. Kullanıcı tanımlı cihazlarda anahtarlama çıkışlarını kontrol etmek istiyorsanız, yukarıdaki konvansiyon önerilir (bkz. Şarj Yöneticisi değişkenleri): Kullanıcı tanımlı sayaçta "out1", "out2" vb. adlarla değişkenler ayarlarsınız ve kullanıcı tanımlı sayaçta bu değişkenlerin değerine bağlı olarak çıkışı değiştiren çıkışlar ayarlarsınız.

Şarj Yöneticisinin Global Modbus API'si:

Şarj Yöneticisinin Modbus API'si, herhangi bir Modbus RTU veya TCP adresine sahip Modbus cihazlarını kontrol etmek için kullanılır (Şarj Yöneticisinden erişilebilir). Tek tek cihazların yapılandırmasında olduğu gibi, Modbus RTU için adres olarak COMx,bd,8,p,s girin; burada x COM port numarası, bd baud hızı, p parite ('N', 'E' veya 'O') ve s stop bitlerinin sayısıdır (1 veya 2). Modbus TCP için adres, port numarası da dahil olmak üzere Charging Manager ağındaki cihazın IP adresidir.



Modbus API'sinin URL'si (HTTP GET için) şöyledir: /cnf?cmd=modbus_get veya /cnf?cmd=modbus_set cFos Şarj Yöneticisi aşağıdaki ek sorgu parametrelerini destekler: addr:


Yukarıda belirtilen Modbus RTU veya TCP cihaz adresi. func: Modbus fonksiyon numarası, örneğin 3 veya 4 okumak için, 6 veya 16 yazmak için. id: Modbus cihazının cihaz kimliği. reg: Modbus kayıt numarası.
Değer ondalık veya onaltılık olarak belirtilebilir (0x önekiyle). val: sayı: Kayda yazılacak değer.
Okurken atlayın. type: 'w' 16bit (varsayılan), d = 32bit, f = float, q = 64bit, s = string.

c nt: sayı: Kayıtlardaki dizenin maksimum uzunluğu, diğer türler için atlayın veya 1 olarak ayarlayın. order: String: Bayt sırası, "hl" veya "lh".

Not: 'Sayaç'ınızda öncelikle kontrol görevleri varsa, bu cihazın başlangıç sayfasında görünmemesi için bu kutucuğun ayarlarında 'Cihazı gizle' seçeneğini işaretleyebilirsiniz.

Not: HTTP üzerinden okunan bazı sayaçlar yetkilendirme olarak bir kullanıcı adı/parola gerektirir. Bunu HTTP erişimi için adreste belirtebilirsiniz, örneğin http://username:password@192.168.2.111. Kullanıcı adınız veya parolanız bir "@" içeriyorsa, bunu "%40" ile değiştirmelisiniz.