Skip to main content

Reading 1-Wire Sensors into Grafana

FIBER only — FIBER Lite has no 1-Wire hub (see What's Different).

FIBER's eight isolated 1-Wire ports appear in Linux as eight independent bus masters, so a probe on port 3 is visible at a different path than one on port 5. Reading them needs no driver setup and no configuration — the kernel already exposes them.

How the eight ports are wired

The ports are not bit-banged GPIO. They sit behind a DS2482 I2C-to-1-Wire bridge at address 0x18 on bus i2c-10, which the ds2482 kernel module drives. Each physical port gets its own master:

ls /sys/bus/w1/devices/
w1_bus_master1 w1_bus_master2 w1_bus_master3 w1_bus_master4
w1_bus_master5 w1_bus_master6 w1_bus_master7 w1_bus_master8

w1_bus_masterN corresponds to physical port N. The bridge and the ds2482, wire and w1_therm modules are part of the shipped image — there is nothing to install or enable.

Finding which ports have probes

Every detected sensor also appears as a symlink directly under /sys/bus/w1/devices/, named by its family code and unique ROM ID — 28-… is the DS18B20 family:

ls -d /sys/bus/w1/devices/28-*

To see which port each one is on, ask the masters:

for m in /sys/bus/w1/devices/w1_bus_master*; do
echo "$(basename "$m"): $(cat "$m/w1_master_slave_count") -> $(cat "$m/w1_master_slaves" | tr '\n' ' ')"
done
w1_bus_master1: 0 ->
w1_bus_master2: 0 ->
w1_bus_master3: 1 -> 28-00000bc830e0
w1_bus_master4: 0 ->
...

An empty port reports 0 and lists nothing. A port with a sensor that has gone missing keeps its last known ROM ID but stops updating — see Troubleshooting below.

Reading a temperature

Each sensor exposes a temperature file in milli-degrees Celsius:

cat /sys/bus/w1/devices/28-00000bc830e0/temperature
24625

That is 24.625 °C. Divide by 1000.

The raw w1_slave file gives the same value plus the CRC status, which is what you want when diagnosing a flaky probe or long cable:

cat /sys/bus/w1/devices/28-00000bc830e0/w1_slave
8a 01 4b 46 7f ff 06 10 2c : crc=2c YES
8a 01 4b 46 7f ff 06 10 2c t=24625

crc=2c YES means the reading is trustworthy. A NO means the value on the second line is garbage and must be discarded, not averaged in.

note

Reading these files triggers a conversion on the bus, which takes up to ~750 ms per sensor. The FIBER application is already sampling the same probes every 2 seconds, so keep any polling of your own modest — a few seconds between reads is plenty, and it keeps the bus free for the application that drives the alarms.

Getting the readings into Node-RED

A single exec node is enough — no contrib package, no extra dependency. Point it at a small shell command and let Node-RED parse the output.

Use an inject node on a repeating interval → an exec node running:

for d in /sys/bus/w1/devices/28-*; do echo "$(basename $d) $(cat $d/temperature)"; done

then a function node to turn the lines into one message per sensor:

// exec output: one "28-<romid> <milli-degC>" line per sensor
var out = [];
(msg.payload || "").trim().split("\n").forEach(function (line) {
var parts = line.trim().split(/\s+/);
if (parts.length !== 2) { return; }
var milli = parseInt(parts[1], 10);
if (isNaN(milli)) { return; }
out.push({
measurement: "onewire",
tags: { sensor: parts[0] },
fields: { temperature: milli / 1000 }
});
});
return [{ payload: out }];

Feed that into an influxdb batch node and the readings land as a onewire measurement tagged by ROM ID, ready to graph.

tip

Tag by ROM ID, not by port number. The ROM ID is burned into the probe, so a sensor keeps its identity in the database even if someone moves it to another port — which is exactly what you want when comparing a week of history.

Storing and visualizing the readings

Node-RED, InfluxDB and Grafana are part of the same shared stack on both variants — see Install Node-RED, Install InfluxDB and Install Grafana. The flow above therefore writes to InfluxDB on the same device, and Grafana reads it back locally.

A time series of temperature grouped by the sensor tag is the usual starting point for a panel.

note

Check that the stack is present before wiring the flow up:

command -v influxd grafana-server node-red

If those come back empty, the unit is running an image built before they were included. Point the flow at another host that has them — FIBER runs Mosquitto, so publishing the readings to MQTT and subscribing from that machine is the path of least resistance.

Troubleshooting

A port shows 0 slaves. Nothing is detected on that physical port. Check the probe's wiring first — 1-Wire needs data and ground, and a parasitic-power probe also needs a pull-up. The ports are isolated from each other, so a fault on one does not disturb the others.

crc=... NO. The sensor answered but the frame was corrupt. Usually cable length, interference, or a marginal connection. Discard those samples rather than averaging them in.

A sensor disappears after being unplugged. The kernel removes the device node once it stops answering. Code that reads a fixed path must tolerate the file vanishing, not crash on it.