Holger Blume avatar image
Holger Blume asked

how can i emulate a bmv700 with input from a votronic smartshunt


i have a raspi 4 with the large Venus OS image on it and a connected mppt100/30 .

output is a 7inch ips touch panel. This works very well.

Node red is activated and i use this to decode the serial output from a vortronic 400A Shunt so i have now following values in node-red at the moment:

- Voltage from the Board and Starter battery in V

- strength of the electrical current in A

-Battery level of the board battery in %

-size of the Boardbattery in AH

now i would like to send this as input to emulate a bmv7xx to the venus os to show it on the display as a bmv.

has someone a idea , best of would be directly in node-red itself

thanks in advance

2 |3000

Up to 8 attachments (including images) can be used with a maximum of 190.8 MiB each and 286.6 MiB total.

1 Answer
iv4n avatar image
iv4n answered ·

Hello Holger! Did you have any advance or made any discovery on this topic?

2 |3000

Up to 8 attachments (including images) can be used with a maximum of 190.8 MiB each and 286.6 MiB total.

Holger Blume avatar image Holger Blume commented ·
hi, yes it works , my way is to take the converted data in node-red and send it to a small driver over tcp. this driver put it on the dbus and it works well . the better way would be to design a direct driver for that , but i have not the time to spend it in this topic
0 Likes 0 ·
Holger Blume avatar image Holger Blume Holger Blume commented ·

here the code from the node-red function, input is serialconnect , works for the triplecharger from votronic

here a sample of the message for testing:


var checksum = 0
var check = false
var signed = 0

//sync begin of the message
if (msg.payload[1]==202){
ID = msg.payload[1]
//voltage bordbattery U16
u_bord = msg.payload.readUInt16LE(2)
u_bord_mv = u_bord*10
u_bord_v = u_bord_mv/1000

//voltage starterbattery U16
u_start = msg.payload.readUInt16LE(4)
u_start_mv = u_start*10
u_start_v = u_start_mv/1000

if (msg.payload[14] >1)
  signed = 0xFF;
  signed = 0x00;
const buf = Buffer.from([msg.payload[12], msg.payload[13], msg.payload[14], signed]);
current = buf.readInt32LE(0)/1000
//fuel of the battery
fuel = msg.payload[10]
// fuel in AH
batt_ah = msg.payload.readInt16LE(6)
//checksum calculate
for (var i=1;i<15;i++){
checksum = checksum ^ msg.payload[i]
//checksum check
if (checksum == msg.payload[15]){
check = true
msg.payload = {
u_bord_v: u_bord_v,
u_start_v: u_start_v,
batt_ah: batt_ah,
fuel: fuel,
current: current,
checksum_calc: checksum,
cecksum_rx: msg.payload[15],
check: check
if (check === true){
return msg;
0 Likes 0 ·