# Panasonic Comfort Cloud integration

**URL:** <https://community.openhab.org/t/panasonic-comfort-cloud-integration/65085>\
**Category:** 3rd Party\
**Tags:** openhab2, panasonic, comfortcloud\
**Created:** [January 21, 2019, 8:34pm UTC](https://community.openhab.org/t/panasonic-comfort-cloud-integration/65085 "2019-01-21T20:34:24Z")\
**Posts on this page:** 1\
**Showing post:** 13

<div class="post-metadata">

**Author:** ![YogiBB](https://community.openhab.org/letter_avatar_proxy/v4/letter/y/71e660/32.png) [@YogiBB](https://community.openhab.org/u/YogiBB)\
**Post date:** [April 27, 2019, 6:33pm UTC](https://community.openhab.org/t/panasonic-comfort-cloud-integration/65085/13 "2019-04-27T18:33:27Z")

</div>

@fcela Good point. There is also no way how to control nanoe via mobile app. So maybe that’s the reason.

@lefi Sure, but keep in mind, that I’m just learning openhab and python, so my solution is not optimal. But it works for me for now. Once I’ll have some free time, I would like to look at it again.  
Python:

```
import pcomfortcloud
import sys

###### Update
import requests

headers = {
    'Content-Type': 'text/plain',
    'Accept': 'application/json',
}
#######

t_power = {
    'Power.Off': "OFF",
    'Power.On': "ON"
}
t_power_set = {
    'OFF': pcomfortcloud.constants.Power.Off,
    'ON': pcomfortcloud.constants.Power.On
}
t_mode = {
    "OperationMode.Auto": "Auto",
    "OperationMode.Dry": "Dry",
    "OperationMode.Cool": "Cool",
    "OperationMode.Heat": "Heat"
}
t_mode_set = {
    "Auto": pcomfortcloud.constants.OperationMode.Auto,
    "Dry": pcomfortcloud.constants.OperationMode.Dry,
    "Cool": pcomfortcloud.constants.OperationMode.Cool,
    "Heat": pcomfortcloud.constants.OperationMode.Heat 
}
t_eco = {
    "EcoMode.Auto": "Auto",
    "EcoMode.Powerful": "Powerful",
    "EcoMode.Quiet": "Quiet"
}
t_eco_set = {
    "Auto": pcomfortcloud.constants.EcoMode.Auto,
    "Powerful": pcomfortcloud.constants.EcoMode.Powerful,
    "Quiet": pcomfortcloud.constants.EcoMode.Quiet 
}
t_fanSpeed = {
    "FanSpeed.Auto": "Auto",
    "FanSpeed.Low": "Low",
    "FanSpeed.LowMid": "LowMid",
    "FanSpeed.Mid": "Mid",
    "FanSpeed.HighMid": "HighMid",
    "FanSpeed.High": "High",
}
t_fanSpeed_set = {
    "Auto": pcomfortcloud.constants.FanSpeed.Auto,
    "Low": pcomfortcloud.constants.FanSpeed.Low,
    "LowMid": pcomfortcloud.constants.FanSpeed.LowMid,
    "Mid": pcomfortcloud.constants.FanSpeed.Mid,
    "HighMid": pcomfortcloud.constants.FanSpeed.HighMid,
    "High": pcomfortcloud.constants.FanSpeed.High,
}
t_airSwingVertical = {
    "AirSwingUD.Auto": "Auto",
    "AirSwingUD.Up": "Up",
    "AirSwingUD.Down": "Down",
    "AirSwingUD.Mid": "Mid",
    "AirSwingUD.UpMid": "UpMid",
    "AirSwingUD.DownMid": "DownMid"
}
t_airSwingVertical_set = {
    "Auto": pcomfortcloud.constants.AirSwingUD.Auto,
    "Up": pcomfortcloud.constants.AirSwingUD.Up,
	"Down": pcomfortcloud.constants.AirSwingUD.Down,
    "Mid": pcomfortcloud.constants.AirSwingUD.Mid,
    "UpMid": pcomfortcloud.constants.AirSwingUD.UpMid,
    "DownMid": pcomfortcloud.constants.AirSwingUD.DownMid
}
t_airSwingHorizontal = {
    "AirSwingLR.Auto": "Auto",
    "AirSwingLR.Left": "Left",
	"AirSwingLR.Right": "Right",
	"AirSwingLR.Mid": "Mid",
	"AirSwingLR.RightMid": "RightMid",
	"AirSwingLR.LeftMid": "LeftMid"
}
t_airSwingHorizontal_set = {
    "Auto": pcomfortcloud.constants.AirSwingLR.Auto,
    "Left": pcomfortcloud.constants.AirSwingLR.Left,
	"Right": pcomfortcloud.constants.AirSwingLR.Right,
	"Mid": pcomfortcloud.constants.AirSwingLR.Mid,
	"RightMid": pcomfortcloud.constants.AirSwingLR.RightMid,
	"LeftMid": pcomfortcloud.constants.AirSwingLR.LeftMid
}

session = pcomfortcloud.Session('XXX@gmail.com', 'XXX', tokenFileName='~/.panasonic-token', raw=False, verifySsl=False)
session.login()

devices = session.get_devices()
status = session.get_device(devices[0]['id'])
action = sys.argv[1]
if len(sys.argv) == 2:
	print(action)
else :
	s_power = sys.argv[2]
	s_mode = sys.argv[3]
	s_ecomode = sys.argv[4]
	s_temperature = sys.argv[5]
	s_fanspeed = sys.argv[6]
	s_airswingvertical = sys.argv[7]
	s_airswinghorizontal = sys.argv[8]

if action == "set":
	session.set_device(devices[0]['id'], 
		power = t_power_set[s_power],
		temperature = s_temperature,
		mode = t_mode_set[s_mode],
		eco = t_eco_set[s_ecomode],
		fanSpeed = t_fanSpeed_set[s_fanspeed],
		airSwingVertical = t_airSwingVertical_set[s_airswingvertical],
		airSwingHorizontal = t_airSwingHorizontal_set[s_airswinghorizontal]
	)
else:
	##response = requests.put('http://myhome:8080/rest/items/Airconditioner_EcoNavi/state', headers=headers, data=econavi)
	response = requests.put('http://myhome:8080/rest/items/Airconditioner_Power/state', headers=headers, data=t_power[str(status["parameters"]["power"])])
	response = requests.put('http://myhome:8080/rest/items/Airconditioner_Sitemap/state', headers=headers, data=t_power[str(status["parameters"]["power"])])
	response = requests.put('http://myhome:8080/rest/items/Airconditioner_Mode/state', headers=headers, data=t_mode[str(status["parameters"]["mode"])])
	response = requests.put('http://myhome:8080/rest/items/Airconditioner_EcoMode/state', headers=headers, data=t_eco[str(status["parameters"]["eco"])])
	response = requests.put('http://myhome:8080/rest/items/Airconditioner_Temperature/state', headers=headers, data=str(status["parameters"]["temperature"]))
	response = requests.put('http://myhome:8080/rest/items/Airconditioner_FanSpeed/state', headers=headers, data=t_fanSpeed[str(status["parameters"]["fanSpeed"])])
	response = requests.put('http://myhome:8080/rest/items/Airconditioner_AirSwingVertical/state', headers=headers, data=t_airSwingVertical[str(status["parameters"]["airSwingVertical"])])
	response = requests.put('http://myhome:8080/rest/items/Airconditioner_AirSwingHorizontal/state', headers=headers, data=t_airSwingHorizontal[str(status["parameters"]["airSwingHorizontal"])])

```

Rule:

```
rule "AirConditioner Status Update"
when
    Time cron "0 0/30 * * * ?"
then
    executeCommandLine('sudo python /home/openhabian/.local/lib/python2.7/site-packages/airconditioner.py "state"', 2000)
end

rule "AirConditioner Manual Status Update"
when
    Item Airconditioner_Update changed to ON
then
    executeCommandLine('sudo python /home/openhabian/.local/lib/python2.7/site-packages/airconditioner.py "status"', 2000)
end

rule "AirConditioner Status"
when
    Item Airconditioner_Power received update
then
    sendCommand(Airconditioner_Update, OFF)
end

rule "AirConditioner Set"
when
    Item Airconditioner_Auto changed or
    Item Airconditioner_Power changed or
    Item Airconditioner_Mode changed or
    Item Airconditioner_EcoNavi changed or
    Item Airconditioner_EcoMode changed or
    Item Airconditioner_Temperature changed or
    Item Airconditioner_FanSpeed changed or
    Item Airconditioner_AirSwingVertical changed or
    Item Airconditioner_AirSwingHorizontal changed
then
	logInfo("AirConditioner Set", '/home/openhabian/.local/lib/python2.7/site-packages/airconditioner.py "set" "' + Airconditioner_Power.state.toString + '" "' + Airconditioner_Mode.state.toString + '" "' + Airconditioner_EcoMode.state.toString + '" "' + Airconditioner_Temperature.state + '" "' + Airconditioner_FanSpeed.state.toString + '" "' + Airconditioner_AirSwingVertical.state.toString + '" "' + Airconditioner_AirSwingHorizontal.state.toString + '"')
	executeCommandLine('sudo python /home/openhabian/.local/lib/python2.7/site-packages/airconditioner.py "set" "' + Airconditioner_Power.state.toString + '" "' + Airconditioner_Mode.state.toString + '" "' + Airconditioner_EcoMode.state.toString + '" "' + Airconditioner_Temperature.state + '" "' + Airconditioner_FanSpeed.state.toString + '" "' + Airconditioner_AirSwingVertical.state.toString + '" "' + Airconditioner_AirSwingHorizontal.state.toString + '"', 2000)
    if (Airconditioner_Power.state == OFF){
        sendCommand(Airconditioner_Status, "OFF")
        sendCommand(Airconditioner_GoogleHomeMode, "off")
    } else {
        postUpdate(Airconditioner_Status, Airconditioner_Mode.state)
        switch Airconditioner_Mode.state {
            case "Auto": {
                sendCommand(Airconditioner_GoogleHomeMode, "heatcool")
            }
            case "Cool": {
                sendCommand(Airconditioner_GoogleHomeMode, "cool")
            }
            case "Heat": {
                sendCommand(Airconditioner_GoogleHomeMode, "heat")
            }
            case "Dry": {
                sendCommand(Airconditioner_GoogleHomeMode, "dry")
            }
        }
    }
end

```

Items:

```
Switch Airconditioner_Update "Airconditioner Status" <switch> (gAirconditioner)
Switch Airconditioner_Auto "Airconditioner Auto" <switch> (gAirconditioner)
Number Airconditioner_Auto_InsideTemp "Airconditioner Max Inside Temperature Limit" <temperature> (gAirconditioner)
Number Airconditioner_Auto_OutsideTemp "Airconditioner Min Outside Temperature Limit" <temperature> (gAirconditioner)
Switch Airconditioner_Power "Airconditioner Power" <climate> (gAirconditioner)
String Airconditioner_Mode "Airconditioner Mode" <text> (gAirconditioner)
String Airconditioner_GoogleHomeMode "Airconditioner Google Home [%s]" <climate> (gAirconditioner) ["homekit:HeatingCoolingMode"]
String Airconditioner_Status "Airconditioner [%s]" <climate> (gAirconditioner)
Switch Airconditioner_EcoNavi "Airconditioner EcoNavi" <motion> (gAirconditioner)
String Airconditioner_EcoMode "Airconditioner EcoMode" <fan> (gAirconditioner)
Number Airconditioner_Temperature "Airconditioner Temperature" <temperature> (gAirconditioner) ["TargetTemperature"]
String Airconditioner_FanSpeed "Airconditioner Fan Speed" <fan> (gAirconditioner)
String Airconditioner_AirSwingVertical "Airconditioner Air Swing Vertical" <movecontrol> (gAirconditioner)
String Airconditioner_AirSwingHorizontal "Airconditioner Air Swing Horizontal" <movecontrol> (gAirconditioner)
Number Airconditioner_TADO_Temperature "Airconditioner Tado Temperature [%.1f]" <temperature> (gAirconditioner) ["CurrentTemperature"] {channel="tado:zone:6fc099d4:1:currentTemperature"}
DateTime	Airconditioner_LastUpdate "Airconditioner Last update [%1$ta %1$tR]" <time>

```

---

_[View the full topic](https://community.openhab.org/t/panasonic-comfort-cloud-integration/65085)._
