#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# Plugin installation:
# wget https://pasternok.org/sources/tuya_temp_hum.py?raw -O /etc/munin/plugins/tuya_temp_hum
# chmod +x /etc/munin/plugins/tuya_temp_hum
#
# Do not forget to configure periodic data retrieval from Tuya platform.
# A sample script is available at https://pasternok.org/sources/tuya_temp_hum_update.py

### config
DEVICES = [
    {
        "name": "T & H Sensor 1",
        "path": "/tmp/sensors/tuya_temp_hum_sensor1.tmp",
    },
    {
        "name": "T & H Sensor 2",
        "path": "/tmp/sensors/tuya_temp_hum_sensor2.tmp",
    },
]

### code - do not change anything below here
__author__ = "Damian Pasternok <my_forename at pasternok.org>"
__version__ = "0.1.0"
__date__ = "2025/01/29"
__copyright__ = "Copyright (C) 2025 Damian Pasternok"
__license__ = "GPL"

import argparse
import json


class Tuya:
    def __init__(self):
        self.data = list()

        for device in DEVICES:
            with open(device.get("path")) as fh:
                device_object = device
                device_object["data"] = json.load(fh)
                self.data.append(device_object)


class Munin(Tuya):
    def __init__(self):
        pass

    def config(self):
        super(Munin, self).__init__()

        out = """graph_title Tuya WiFi Temperature & Humidity sensors
graph_scale no
graph_category smarthome
graph_vlabel environment conditions
"""
        for i, device in enumerate(self.data):
            for param in (("temperature", "C"), ("humidity", "%")):
                out += f"""{param[0]}{i}.label {self.data[i].get("name") or f"Generic T & H Sensor #{i}"} {param[0]} [{param[1]}]\n"""

        return out.rstrip()

    def data(self):
        super(Munin, self).__init__()

        out = ""

        for i, device in enumerate(self.data):
            for param in (("temperature", 0, 10), ("humidity", 1, 1)):
                out += f"""{param[0]}{i}.value {self.data[i].get("data").get("result")[param[1]].get("value") / param[2]}\n"""

        return out.rstrip()


def main():
    munin = Munin()

    parser = argparse.ArgumentParser(description="Tuya WiFi Temperature & Humidity Sensors Munin Plugin.")
    parser.add_argument("config", help="print graph configuration", nargs="?")
    args = parser.parse_args()

    if args.config == "config":
        print(munin.config())
    elif not args.config:
        print(munin.data())
    else:
        parser.print_help()


if __name__ == "__main__":
    main()