Děkuju.jbb píše: ↑čtv bře 06, 2025 12:07 am Používám node-red-contrib-modbus- takže generické uzly pro modbus, nikoliv něco specifického pro SA [ty věci co jsou pro SA byly co vím jen pro čtení, nikoliv pro ovládání]. A ten generický uzel pro PV invertory od Victronu bohužel nefunguje - tam by se mělo zadávat číslo výkonu ve W, ale to SA neumí přijmout...
Jinak adresuji SA na jeho IP (tedy je třeba použít pevnou IP, ne DHCP), port 502.
Do hexové hodnoty F001 (decimál 61441) zapisuji číslo 0..100, opovídající procentům výkonu. Následně s odstupem 2 sec zapisuji to samé (ale asi korektnější by bylo psát 1) do hexové hodnoty F100 (decimál 61696), čímž potvrdím tu změnu výkonu. Modbus-write node.
Naopak z F001 je možné i to procento vyčíst - Modbus Getter node.
Já interní Modbus v NR používám pro ostatní zařízení také, jen jsem měl za to, že uzly pro SA budou nějak specifické. Ale mám tam jiný problém a už jsem si uvědomil, proč jsem šel cestou integrace v HA.
Jak jsem psal do SZ potřebuji zapsat hodnotu ve formátu Float32. Ty zadáváš zápisy v Uint16 a int16 pro ty tvé dvě adresy.
Bohužel jsem nepřišel na to, jak zadat formát Float32. Pokud pošlu zápis na adresu pro omezení přetoků (na určitou hodnotu - ne implicitně zakázané či povolené) dojde jiné číslo.
Chci to řešit přes přetoky, protože pak pokud se navýší spotřeba krásně výrobu dle toho reguluje. Tak, jak mě to teď jde přes HA.
Jenže zatím nedokážu zapsat správnou hodnotu.
Dám sem kod z funkce, kterou to dělám. Pokud by někoho něco napdalo sem s tím.
Kód: Vybrat vše
var fc = 6;
var sa = 63234;
var addresses = 1;
var value = 1;
msg.payload = { "value": value, 'fc': fc, 'unitid': 1, 'address': sa, 'quantity': addresses };
return msg;