Skip to content

Protocol Airlink

Manuel edited this page Aug 30, 2026 · 1 revision

Davis AirLink

Setting up Davis AirLink hardware by hand, in weewx.conf.

Generated by tools/build_protocols.py. What each protocol needs is written in that tool; what it is called and what goes into the console comes from the code. Do not edit by hand.

There is a web interface for all of this. It is on by default, and the driver prints its address when WeeWX starts:

INFO user.ultimatepush.driver: The web interface is at
http://1.2.3.4:8080/?token=abcdefg12345

Everything on this page can be done there instead, and one thing is much easier: deciding which reading goes into which database column. See Web interface.

What it is

Davis AirLink air quality sensors

In protocols = auto no, and it does not need to be: naming it under [[polling]] is what switches it on
Named by the name you give the block
Recording from its first answer

The smallest configuration that works

[Station]
    station_type = UltimatePush

[UltimatePush]
    driver = user.ultimatepush.driver
    port = 8000

    [[polling]]
        [[[air]]]
            address = 1.2.3.4
            protocol = airlink
            interval = 60
            role = extra
            channel = 3

There is nothing to identify and nothing to wait for. The driver knows which sensor answered because it knows which address it asked, so the block above is the whole of the station: it is recording from the first answer, with nothing to adopt and nothing to let in. role = extra puts its readings in columns of their own, which is what you want for a sensor whose thermometer is inside its own housing.

What else it takes

An AirLink has nowhere to type a server address into. It is asked rather than pointed, so what this driver needs is its address on your network.

Give it a fixed address in your router. One whose address moves stops being found, and the log is the only place that says so.

Its thermometer is inside the housing and reads above the air outside, though by less than a PurpleAir's. Set the station up as an extra one and that reading goes to a column of its own.

Options of its own

None. Everything that applies to this protocol applies to all of them, and is in Configuration.

Worth knowing

Give the sensor a fixed address in your router, under whatever the router calls a reserved lease. One whose address changes stops being found, and the log is the only place that says so.

Sixty seconds is a sensible interval. The device averages over longer than that anyway, and the readings that matter are the averages.

Set it up as an extra station. Its thermometer is inside the housing and reads above the air outside, by less than a PurpleAir's but by enough to matter. As an extra station it lands in extraTemp, where nothing mistakes it for the air temperature.

Two kinds of particle reading arrive and they are not the same thing. pm_2p5 and its relatives are averages the device worked out; pm_2p5_last is the last raw count from the laser. Both are recorded, in columns of their own, and the averages are what the device is for. pct_pm_data_* says how much of each averaging window actually had data in it: below about 90 the average over it is worth less than it looks.

The readings are Fahrenheit and micrograms per cubic metre, which is what Davis sends and what WeeWX keeps those columns in when it is reading US. Nothing is converted.

No sensor yet? python -m user.ultimatepush --fake-airlink answers like one.

When nothing arrives

Nothing is recorded and the log says the sensor cannot be reached: the address is wrong, or has moved. curl http://1.2.3.4/v1/current_conditions from this machine settles which. It is said once and then the driver stays quiet, so look at the start of the log rather than the end.

Something answers and it is refused. Another Davis device speaks this same API and sends a different shape of reading, a WeatherLink Live in particular. Reading one of those with this catalog would place a handful of names and drop the rest, so it is turned away instead.

The temperature is too high. It is measured inside the housing. See above.

More than one station

This is one station among however many others. Which of them fills outTemp, and where the rest of their readings go, is in Several stations.

Clone this wiki locally