sansal54
1/21/2017 - 7:01 PM

InfluxDb Example with Modbus Room Thermostat in Python

InfluxDb Example with Modbus Room Thermostat in Python

import os
import sys
import time
import datetime
import minimalmodbus
from influxdb import InfluxDBClient

minimalmodbus.CLOSE_PORT_AFTER_EACH_CALL=True

PORT_NAME           = 'com7'
SLAVE1_ADDRESS       = 1
SLAVE2_ADDRESS       = 2
SLAVE3_ADDRESS       = 3
BAUDRATE            = 9600 # baud (pretty much bits/s).
TIMEOUT             = 2 # seconds.
STOPBITS            = 1
PARITY              = 'N'
MODE                = minimalmodbus.MODE_RTU

instrument1 = minimalmodbus.Instrument(PORT_NAME, SLAVE3_ADDRESS, MODE)
instrument1.serial.baudrate = BAUDRATE
instrument1.serial.timeout = TIMEOUT
instrument1.serial.stopbits = STOPBITS
instrument1.serial.parity = PARITY
instrument1.serial.xonxoff = False
instrument1.serial.rtscts = False
instrument1.serial.dsrdtr = False
instrument1.debug = False
instrument1.precalculate_read_size = True


influx_host = 'localhost'
port = 8086
dbname = "environment"
user = "root"
password = "root"

# Generates the necessary payload to post
# temperature data into the InfluxDB
def get_data_points(temperature):

    iso = time.ctime()
    json_body = [
            {
                "measurement": "ambient_celcius",
                "tags": {"host": influx_host},
                "time": iso,
                "fields": {
                    "value": temperature,
                    }
                }

            ]
    return json_body


# Defines the interval on which the capture logic
# will occur
capture_interval = 5.0 # Every 5 seconds

# InfluxDB instance
client = InfluxDBClient(influx_host, port, user, password, dbname)
client.create_database(dbname)


# Read, Report, Repeat
while 1:
    temp = instrument1.read_register(40005)
    print temp
    temperature_data = get_data_points(temp)
    client.write_points(temperature_data)
    time.sleep(capture_interval)