@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>