Usa mbpoll: https://github.com/epsilonrt/mbpoll
Interroga:
./mbpoll 192.168.1.106 -t 4:hex -r 29 -c 2 -1 -a 1
Chiede 40029 e 40030 (ip address).
Come ci sono arrivato:
40029 -> [40],[029] -> [-t 4:hex],[-r 29]
40030 è il successivo, quindi -c 2 per chiedere due registri
Lo slave id è sempre 1.
Per la temperatura esterna:
./mbpoll 192.168.1.106 -t 4:hex -r 133 -c 2 -1 -a 1 | tail -3 | head -2 | awk '{ print $2 }'
Escono due numeri esadecimali, si possono tradurre in float:
uint16_t regs[2] = {0x043D, 0x40D8};
float externalTemperature = *reinterpret_cast<float*>(regs);