2021-02-01 05:59:33 +00:00
import json
import sys
import os
# Homematic IP
import homematicip
from homematicip . home import Home
from homematicip . device import ShutterContact , HeatingThermostat , PlugableSwitchMeasuring , WallMountedThermostatPro
2021-12-20 18:39:17 +00:00
from homematicip . group import HeatingCoolingProfile , HeatingGroup
2021-02-01 05:59:33 +00:00
# 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
2021-12-20 18:39:17 +00:00
# Homematic IP
2021-02-01 05:59:33 +00:00
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 ) )
2021-10-19 14:36:45 +00:00
client . publish ( topic + " /availability " , " ON " )
2021-02-01 05:59:33 +00:00
print ( { " Room " : room , " Device Name " : device . label , " Last Status Update " : device . lastStatusUpdate , " Actual Temperature " : device . actualTemperature , " Set Point Temperature " : device . setPointTemperature , " Humidity " : device . humidity } )
2021-12-20 18:39:17 +00:00
def heating_profile ( group ) :
#heatingGroup=homematicip.group.HeatingGroup(group)
#heatingGroup.__init__(home)
print ( " Heating Profiles " )
print ( " Group Label: " + group . label )
print ( " Group Type: " + group . groupType )
print ( " Active Heating Profile: " + group . activeProfile . name )
for profile in group . profiles :
if profile . name != " " :
print ( " Group Profile Name: " + profile . name )
#print("Profile ID: " + profile.id)
#print("Profile Index: " + profile.index)
if profile . name == " Home Office " :
print ( " Profile Index " + profile . index )
print ( group )
heatingGroup = HeatingGroup ( group )
# print(heatingGroup.profiles[0])
group . set_active_profile ( profile . index )
2021-02-01 05:59:33 +00:00
def main ( ) :
global home
home . get_current_state ( )
for group in home . groups :
2021-12-20 18:39:17 +00:00
# if group.groupType=="HEATING":
# heating_profile(group)
2021-02-01 05:59:33 +00:00
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__ " :
2021-10-19 14:36:45 +00:00
main ( )