2021-02-01 05:59:33 +00:00
|
|
|
# Homematic IP
|
|
|
|
import homematicip
|
|
|
|
from homematicip.home import Home
|
2021-12-20 18:59:44 +00:00
|
|
|
from homematicip.device import ShutterContact, WallMountedThermostatPro
|
2021-02-01 05:59:33 +00:00
|
|
|
# Import MQTT client.
|
|
|
|
import paho.mqtt.client as paho
|
|
|
|
|
|
|
|
# MQTT credentials
|
|
|
|
# mqtt_username = 'homeassistant' # MQTT client username
|
|
|
|
# mqtt_password = '3355' # MQTT client password
|
2021-12-20 20:53:56 +00:00
|
|
|
client_id = 'homematicip-pi' # unique client_id
|
2021-12-20 18:59:44 +00:00
|
|
|
mqtt_broker = "raspberrypi" # broker address, usually your HASS IP address
|
2021-02-01 05:59:33 +00:00
|
|
|
|
|
|
|
# create the MQTT client
|
2021-12-20 19:08:47 +00:00
|
|
|
client = paho.Client(client_id, protocol=paho.MQTTv31) # * set a random string (max 23 chars)
|
2021-02-01 05:59:33 +00:00
|
|
|
|
|
|
|
# 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)
|
|
|
|
|
|
|
|
|
2021-12-20 18:59:44 +00:00
|
|
|
def write_shutter(room, device):
|
|
|
|
print(room, " ", device.label, " ", device.lastStatusUpdate, " ", device.windowState)
|
|
|
|
# print(device)
|
2021-02-01 05:59:33 +00:00
|
|
|
|
|
|
|
|
2021-12-20 18:59:44 +00:00
|
|
|
def write_wallmountedthermostatpro(room, device):
|
|
|
|
topic = 'weathersensors/' + room
|
2021-02-01 05:59:33 +00:00
|
|
|
|
2021-12-20 18:59:44 +00:00
|
|
|
client.publish(topic + "/time", "" + str(device.lastStatusUpdate))
|
|
|
|
client.publish(topic + "/actualTemperature", "" + str(device.actualTemperature))
|
|
|
|
client.publish(topic + "/setPointTemperature", "" + str(device.setPointTemperature))
|
|
|
|
client.publish(topic + "/humidity", "" + str(device.humidity))
|
2021-10-19 14:36:45 +00:00
|
|
|
client.publish(topic + "/availability", "ON")
|
2021-02-01 05:59:33 +00:00
|
|
|
|
2021-12-20 18:59:44 +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-02-01 05:59:33 +00:00
|
|
|
|
2021-12-20 18:39:17 +00:00
|
|
|
def heating_profile(group):
|
2021-12-20 20:51:45 +00:00
|
|
|
print("Room: " + group.label)
|
|
|
|
room = group.label
|
|
|
|
topic = 'weathersensors/' + room
|
|
|
|
|
2021-12-20 18:39:17 +00:00
|
|
|
print("Active Heating Profile: " + group.activeProfile.name)
|
|
|
|
for profile in group.profiles:
|
|
|
|
if profile.name != "":
|
2021-12-20 20:51:45 +00:00
|
|
|
client.publish(topic + "/availability", "ON")
|
|
|
|
client.publish(topic + "/activeProfile", group.activeProfile.name)
|
2021-12-20 22:10:18 +00:00
|
|
|
client.publish(topic + "/heatingProfiles/" + profile.index, profile.name)
|
2021-12-20 20:51:45 +00:00
|
|
|
print(profile.index + ": " + profile.name)
|
|
|
|
|
2021-12-25 08:31:24 +00:00
|
|
|
if profile.name == "Normal":
|
2021-12-20 20:53:56 +00:00
|
|
|
# print("Profile Index" + profile.index)
|
|
|
|
# print(group)
|
2021-12-20 18:39:17 +00:00
|
|
|
group.set_active_profile(profile.index)
|
|
|
|
|
2021-12-20 18:59:44 +00:00
|
|
|
|
2021-02-01 05:59:33 +00:00
|
|
|
def main():
|
|
|
|
global home
|
|
|
|
home.get_current_state()
|
|
|
|
for group in home.groups:
|
2021-12-20 20:53:56 +00:00
|
|
|
if group.groupType == "HEATING":
|
2021-12-20 20:51:45 +00:00
|
|
|
heating_profile(group)
|
2021-12-20 18:59:44 +00:00
|
|
|
if group.groupType == "META":
|
2021-02-01 05:59:33 +00:00
|
|
|
for device in group.devices:
|
2021-12-20 18:59:44 +00:00
|
|
|
if isinstance(device, ShutterContact):
|
|
|
|
write_shutter(group.label, device)
|
|
|
|
elif isinstance(device, WallMountedThermostatPro):
|
|
|
|
write_wallmountedthermostatpro(group.label, device)
|
|
|
|
|
2021-02-01 05:59:33 +00:00
|
|
|
|
|
|
|
if __name__ == "__main__":
|
2021-10-19 14:36:45 +00:00
|
|
|
main()
|