import json
import sys
import os

# Homematic IP
import homematicip
from homematicip.home import Home
from homematicip.device import ShutterContact,HeatingThermostat,PlugableSwitchMeasuring,WallMountedThermostatPro

# Import MQTT client.
import paho.mqtt.publish as publish
import paho.mqtt.client as paho

# MQTT credentials
# mqtt_username  = 'homeassistant' # MQTT client username
# mqtt_password = '3355' # MQTT client password
# client_id = 'temperature' # unique client_id
mqtt_broker = "raspberrypi" # broker address, usually your HASS IP address

# create the MQTT client
global client
client = paho.Client(protocol=paho.MQTTv31)  # * set a random string (max 23 chars)

# client connection
# client.username_pw_set(mqtt_username, mqtt_password)  # MQTT server credentials
client.connect(mqtt_broker, 1883, 60)  # MQTT server address

# Homematic IP 
config = homematicip.find_and_load_config_file()

home = Home()
home.set_auth_token(config.auth_token)
home.init(config.access_point)

def write_shutter(room,device):
        print(room, " ", device.label, " ", device.lastStatusUpdate, " ", device.windowState)
        #print(device)

def write_plugableswitchmeasuring(room,device):
        print(room, " ", device.label, " ", device.lastStatusUpdate, " ", device.currentPowerConsumption, " ", device.energyCounter)

def write_heatingthermostat(room,device):
        print(room, " ", device.label, " ", device.lastStatusUpdate)

def write_wallmountedthermostatpro(room,device):
    global time
    global deviceName
    global actualTemperature
    global setPointTemperature
    global humidity

    time = device.lastStatusUpdate
    deviceName = device.label
    actualTemperature = device.actualTemperature
    setPointTemperature = device.setPointTemperature
    humidity = device.humidity

    topic  = 'weathersensors/'+room

    #print(topic)

    client.publish(topic + "/time", "" + str(time))
    client.publish(topic + "/actualTemperature", "" + str(actualTemperature))
    client.publish(topic + "/setPointTemperature", "" + str(setPointTemperature))
    client.publish(topic + "/humidity", "" + str(humidity))
    client.publish(topic + "/availability", "ON")

    print({"Room":room, "Device Name":device.label, "Last Status Update" : device.lastStatusUpdate, "Actual Temperature":device.actualTemperature, "Set Point Temperature":device.setPointTemperature,"Humidity":device.humidity})

def main():
    global home
    home.get_current_state()
    for group in home.groups:
        if group.groupType=="META":
            for device in group.devices:
                if isinstance(device,ShutterContact):
                    write_shutter(group.label,device)
                elif isinstance(device,HeatingThermostat):
                    write_heatingthermostat(group.label,device)
                elif isinstance(device,PlugableSwitchMeasuring):
                    write_plugableswitchmeasuring(group.label,device)
                elif isinstance(device,WallMountedThermostatPro):
                    write_wallmountedthermostatpro(group.label,device)

if __name__ == "__main__":
    main()