summaryrefslogtreecommitdiff
path: root/README.md
blob: b98b605d2698b18b7c6fe0bdecb6081c82dc7f06 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# CO₂ Monitor

This repository contains NodeMCU Lua source code for an [MH-Z19 based CO₂ monitor](https://finalrewind.org/projects/co2-monitor-mhz19-ssd1306/).
It shows the current CO₂ concentration and MH-Z19 temperature on a 128×32 SSD1306 OLED and makes them available to Home Assistant via MQTT.
It can also publish readings to InfluxDB.

## Features

* Display for CO₂ and temperature
* Home Assistant integration via MQTT
* Optional logging to InfluxDB
* Powered via USB

## Components

* Processor: ESP8266
* CO₂ sensor: MH-Z19
* Display: 128×32 OLED via SSD1306 (128×64 also supported with some changes)

## Flashing

This repository contains a NodeMCU build that provides the required modules.
You can flash it using e.g. esptool:

```bash
esptool write_flash 0x00000 firmware/nodemcu-release-13-modules-2022-04-17-19-03-07-integer.bin
```

After flashing, the firmware will need a few seconds to initialize the
filesystem. You can use that time to create `config.lua` (see below) and then
flash the Python code, e.g. using nodemcu-uploader:

```bash
ext/nodemcu-uploader/nodemcu-uploader.py upload *.lua
```

Afterwards, you can check whether everything works using the serial connection,
e.g.

```bash
pyserial-miniterm --dtr 0 --rts 0 /dev/ttyUSB0 115200
```

You may need to adjust the `/dev/tty` device name.

## Configuration

WiFi, Home Assistant, and InfluxDB configuration is read from `src/config.lua`.
You will need the following entries.

### WiFi

Assuming ESSID "foo" and PSK "bar".
WPA2 Enterprise is not supported.
Leave out the `psk` for open WiFi.

```lua
station_cfg = {ssid = "foo", pwd = "bar"}
```

### MQTT

The only configurable entity is the hostname of the MQTT broker. The ESP8266
will register itself as `homeassistant/sensor/esp8266_XXXXXX` with the last six
digits representing its WiFi MAC address.

```lua
mqtt_host = "mqtt.example.org"
```

### InfluxDB

These settings are optional. Specify a URL and attributes in order to enable
InfluxDB publishing. For instance, if measurements should be stored as
`mh_z19,location=lounge` in the `sensors` database on
`https://influxdb.example.org`, the configuration is as follows.

```lua
influx_url = 'https://influxdb.example.org/write?db=sensors'
influx_attr = ',location=lounge'
```

You can also use the `esp8266_XXXXXX` device id here, like so:

```lua
influx_url = 'https://influxdb.example.org/write?db=sensors'
influx_attr = ',location=' .. device_id
```

Optionally, you can set `influx_header` to an HTTP header that is passed as
part of the POST request to InfluxDB.

## Images

![](https://finalrewind.org/projects/co2-monitor-mhz19-ssd1306/media/preview.jpg)

## Resources

Mirrors of this repository are maintained at the following locations:

* [Chaosdorf](https://chaosdorf.de/git/derf/co2-monitor-mhz19-ssd1306)
* [git.finalrewind.org](https://git.finalrewind.org/co2-monitor-mhz19-ssd1306/)
* [GitHub](https://github.com/derf/co2-monitor-mhz19-ssd1306)