emonHub Default Configuration

Default configuration files

The default emonhub configuration file shipped with the emonSD-10Nov22 image can be found here: https://github.com/openenergymonitor/emonhub/blob/master/conf/default.emonhub.conf

The previous default emonhub configuration file installed on emonPi systems can be found here: https://github.com/openenergymonitor/emonhub/blob/master/conf/emonpi.default.emonhub.conf

The default interfacers employed are

  • EmonPi2: EmonHubOEMInterfacer - serial data over ttyAMA0, e.g emonPi CT data

  • USB0: EmonHubOEMInterfacer - serial data over ttyUSB0, e.g emonTx4 connected via USB

  • SPI: EmonHubRFM69LPLInterfacer - emonPi2 or rfm69spi radio receiver

  • DS18B20 EmonHubDS18B20Interfacer - reads temperature data from connected DS18B20 temperature sensors on the emonPi2

  • MQTT: EmonHubRFM69LPLInterfacer - publish data from above via MQTT

  • emoncmsorg: EmonHubEmoncmsHTTPInterfacer - publish data from above via HTTP

[[EmonPi2]]

The [[EmonPi2]] interfacer section contains the settings to read data via GPIO internal serial port /dev/ttyAMA0 from an attached emonPi v1 or v2. Note that serial baud rated differ for different hardware:

  • RFM12Pi: 9600

  • RFM69Pi: 38400

  • emonPi v1: 38400

  • emonPi v2: 115200

[[EmonPi2]]
    Type = EmonHubOEMInterfacer
    [[[init_settings]]]
        com_port = /dev/ttyAMA0
        com_baud = 38400
    [[[runtimesettings]]]
        pubchannels = ToEmonCMS,
        subchannels = ToRFM12,

[[USB0]]

This interfacer is present to enable reading of data from an EmonTx4 connected to the emonPi/emonBase via USB. This interfacer can be left in place even if no devices are connected via USB serial.

[[USB0]]
    Type = EmonHubOEMInterfacer
    [[[init_settings]]]
        com_port = /dev/ttyUSB0
        com_baud = 115200
    [[[runtimesettings]]]
        pubchannels = ToEmonCMS,
        subchannels = ToRFM12,
        nodename = emonTx4

EmonHub can handle wildcard USB devices e.g any device on a ttyUSB:

com_port = /dev/ttyUSB*

It’s also possible to specify a VID / PID of a USB device and emonHub will search for that device e.g here’s an example of an MBUS reader

[[MBUS]]
    Type = EmonHubMBUSInterfacer
    [[[init_settings]]]
        device_vid = 1659
        device_pid = 9123
        baud = 2400
    [[[runtimesettings]]]
        pubchannels = ToEmonCMS,
        read_interval = 10
        validate_checksum = False
        nodename = heatpump
        [[[[meters]]]]
            [[[[[heatmeter]]]]]
                address = 1
                type = standard

For other USB emonHub examples see forum thread

[[SPI]]

This interfacer is used to read from a SPI connected RFM69 radio module. This may be on the emonPi2 board or on the rfm69spi board.

rfm69spi configuration:

[[SPI]]
    Type = EmonHubRFM69LPLInterfacer
    [[[init_settings]]]
        nodeid = 5
        networkID = 210
    [[[runtimesettings]]]
        pubchannels = ToEmonCMS,

emonPi2 configuration (resetPin = 24 and selPin = 16)

[[SPI]]
    Type = EmonHubRFM69LPLInterfacer
    [[[init_settings]]]
        nodeid = 5
        networkID = 210
        resetPin = 24
        selPin = 16
    [[[runtimesettings]]]
        pubchannels = ToEmonCMS,

[[DS18B20]]

This interfacer is used to read from DS18B20 temperature sensors directly and is used on the emonPi2 to read from temperature sensors plugged into the temperature input terminals on the side of the unit.

The temperature sensor data pin is connected to RaspberryPi GPIO17 and this pin is configured in /boot/config.txt.

[[DS18B20]]
    Type = EmonHubDS18B20Interfacer
    [[[init_settings]]]
    [[[runtimesettings]]]
        pubchannels = ToEmonCMS,
        read_interval = 10
        nodename = sensors
        # ids = 28-000008e2db06, 28-000009770529, 28-0000096a49b4
        # names = ambient, cyl_bot, cyl_top

[[MQTT]]

Emonhub supports publishing to MQTT topics using the EmonHubMqttInterfacer. The default configuration looks like this:

[[MQTT]]
    Type = EmonHubMqttInterfacer
    [[[init_settings]]]
        mqtt_host = 127.0.0.1
        mqtt_port = 1883
        mqtt_user = emonpi
        mqtt_passwd = emonpimqtt2016
    
    [[[runtimesettings]]]
        pubchannels = ToRFM12,
        subchannels = ToEmonCMS,
        
        # emonhub/rx/10/values format
        # Use with emoncms Nodes module
        node_format_enable = 0
        node_format_basetopic = emonhub/
        
        # emon/emontx/power1 format - use with Emoncms MQTT input
        # http://github.com/emoncms/emoncms/blob/master/docs/RaspberryPi/MQTT.md
        nodevar_format_enable = 1
        nodevar_format_basetopic = emon/
        
        # Single JSON payload published  - use with Emoncms MQTT
        node_JSON_enable = 0
        node_JSON_basetopic = emon/

There are three different MQTT topic message formats to choose from:

  • Node variable format - enabled by default

  • Node only format - disabled by default

  • JSON format - disabled by default

1. Node variable format (standard)

(default base topic is emon)

    topic: basetopic/emontx/power1
    payload: 100

The ‘Node variable format’ is the current default format. It’s a more generic MQTT publishing format that can more easily be used by external applications such as NodeRED, OpenHab and HomeAssistant. This format is also used with the emoncms emoncms_mqtt.service to bring data into emoncms.

2. Node only format (disabled by default)

(default base topic is emonhub)

    topic: basetopic/rx/10/values
    payload: 100,200,300

3. JSON format (disabled by default)

This forat exports the data as a single JSOn string with key:value pairs. The timestamp is automatically added and used for the input time to emoncms. The RSSI is added if available (RF in use).

(default base topic is emon)

topic: basetopic/<noeid>
payload: {"key1":value1, "key2":value2, .... "time":<timestamp>, "rssi":<rssi>}

[[emoncmsorg]]

The EmonHubEmoncmsHTTPInterfacer configuration that is used for sending data to emoncms.org (or any instance of emoncms). If you wish to use emoncms.org the only change to make here is to replace the blank apikey with your write apikey from emoncms.org found on the user account page.

[[emoncmsorg]]
    Type = EmonHubEmoncmsHTTPInterfacer
    [[[init_settings]]]
    [[[runtimesettings]]]
        pubchannels = ToRFM12,
        subchannels = ToEmonCMS,
        url = https://emoncms.org
        apikey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
        senddata = 1     # Enable sending data to Emoncms.org
        sendnames = 1    # Send full input names (compression will be automatically enabled)
        interval = 30    # Bulk send interval to Emoncms.org in seconds
  • senddata: Enable the sending of data.

  • sendnames: Send input names (this also automatically enables compression).

  • interval: Data upload interval in seconds. Increase this to reduce bandwidth, 30s is a minimum value to provide responsive data on the target server, to reduce bandwidth we would recommend using 300-900s.

Posting to multiple emoncms servers

You can create more than one of these sections to send data to multiple emoncms instances. For example, if you wanted to send to an emoncms running at emoncms.example.com (or on a local LAN) you would add the following underneath the emoncmsorg section described above:

[[emoncmsexample]]
    Type = EmonHubEmoncmsHTTPInterfacer
    [[[init_settings]]]
    [[[runtimesettings]]]
        pubchannels = ToRFM12,
        subchannels = ToEmonCMS,
        url = https://emoncms.example
        apikey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
        senddata = 1     # Enable sending data to Emoncms.org
        sendnames = 1    # Send full input names (compression will be automatically enabled)
        interval = 30    # Bulk send interval to Emoncms.org in seconds

This time, the API key will be the API key from your account at emoncms.example.com.