Skip to content

Commit

Permalink
First Alpha Release
Browse files Browse the repository at this point in the history
  • Loading branch information
kpanchen committed Aug 12, 2022
1 parent 0955b77 commit a2d9964
Show file tree
Hide file tree
Showing 60 changed files with 6,596 additions and 0 deletions.
13 changes: 13 additions & 0 deletions NOTICE
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
This content is produced and maintained by the openHAB project.

* Project home: https://www.openhab.org

== Declared Project Licenses

This program and the accompanying materials are made available under the terms
of the Eclipse Public License 2.0 which is available at
https://www.eclipse.org/legal/epl-2.0/.

== Source Code

https://github.com/openhab/openhab-addons
122 changes: 122 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
# iComfort S30 Binding

_This is an OpenHAB 3 Binding for Lennox iComfort S30/E30/M30 system / thermostat (Note this will not work with older system WiFi)._

## Supported Things

This binding supports two things:<br />
1. Thermostat system (currently under development, only System Away Channels currently supported for the thing)<br />
2. Heating / Cooling Zone (4 zones supported).


## Discovery

(Not available yet, on ToDo list).

## Binding Configuration

No binding configuration is required.

## Thing Configuration

Configuration of the Bridge thing is required:

hostname - IP address or hostname of the thermostate controller on the local network.<br />

Optional parameters:
port - must be set to default 443
protocol - must be set to default https
useSelfSignedCertificate - must be set to default true
refreshInterval - default set to 30 seconds.
initialRefreshDelay - default set to 30 seconds, delay to allow binding to get required data from the system (this is only to avoid errors in the log, possible will be changed in the future)
pumpInterval - default set to 5 seconds, how often to request data from the system.
appID - application connection identifier, if not provided this parameter will be generated on the first execution and will be the same per running binding (Note it is prefereble to keep this ID, in case of reinstall re-use it and provide in textual configuration or GUI. Important: do not include it on the first run, if you do textual configuration copy this from GUI and provide in the .thing file)

```
Bridge icomforts30:thermostat:demothermostat "Demo name" @ "Demo location" [ hostname="192.168.xxx.xxx", appID="mappxxxxxxxxxxxxxxxxxxxxxxxx" ] {}
```

No configuration required for System thing:

```
Thing system s30_system "iComfort S30 System" @ "Demo location"
```

Configuration of Zone thing is required:

id = zone id, number from 0 to 3 (Note: for a single zone system id must be set to 0)

Optional parameter:
name = "Name of the zone" - (Only to identify zone in the GUI)

```
Thing zone s30_zone_0 "iComfort S30 Heating Zone 0" @ "Demo location" [ id = 0, name = "Main Zone" ]
```

## Channels

System thing:

AwayMode - Current away status (Read / Write)<br />

Zone thing:

Temperature - Current zone temperature (Read Only)<br />
Humidity - Current zone humidity (Read Only)<br />
SystemStatus - Current system status (Read Only)<br />
OperationMode - Current operation mode (Read / Write)<br />
FanMode - Current fan mode (Read / Write)<br />
CoolSetPoint - Cool set point for the zone (Read / Write)<br />
HeatSetPoint - Heat set point for the zone (Read / Write)<br />
SetPoint - Heat or Cool set point for the zone in single set point mode (Read / Write)<br />


## Full Example

Thing example:

```
Bridge icomforts30:thermostat:demothermostat "Demo name" @ "Demo location" [ hostname="192.168.xxx.xxx" ] {
Thing system s30_system "iComfort S30 System" @ "Demo location"
Thing zone s30_zone_0 "iComfort S30 Heating Zone 0" @ "Demo location" [ id = 0, name = "Main Zone" ]
}
```

Items example:

```
//Zone items
Number:Temperature iComfortS30HeatingZone_0_Temperature "Temperature [%.1f %unit%]" <temperature> (gWholeHouse, gTemperatureSensors) {channel="icomforts30:zone:knplennoxs30:s30_zone_0:Temperature"}
Number:Dimensionless iComfortS30HeatingZone_0_Humidity "Humidity [%d %unit%]" <humidity> (gWholeHouse, gHumiditySensors) {channel="icomforts30:zone:knplennoxs30:s30_zone_0:Humidity"}
String iComfortS30HeatingZone_0_SystemStatus "System Status [%s]" <heating> (gWholeHouse) {channel="icomforts30:zone:knplennoxs30:s30_zone_0:SystemStatus"}
String iComfortS30HeatingZone_0_OperationMode "Operation Mode [%s]" <heating> (gWholeHouse) {channel="icomforts30:zone:knplennoxs30:s30_zone_0:OperationMode"}
String iComfortS30HeatingZone_0_FanModeStatus "Fan Mode [%s]" <fan> (gWholeHouse) {channel="icomforts30:zone:knplennoxs30:s30_zone_0:FanMode"}
Number:Temperature iComfortS30HeatingZone_0_CoolSetPoint "Cool Set Point [%.1f %unit%]" <temperature> (gWholeHouse) {channel="icomforts30:zone:knplennoxs30:s30_zone_0:CoolSetPoint"}
Number:Temperature iComfortS30HeatingZone_0_HeatSetPoint "Heat Set Point [%.1f %unit%]" <temperature> (gWholeHouse) {channel="icomforts30:zone:knplennoxs30:s30_zone_0:HeatSetPoint"}
```

```
//System items:
String iComfortS30System_AwayModeStatus "Away Mode [%s]" <heating> (gWholeHouse) {channel="icomforts30:system:knplennoxs30:s30_system:AwayMode"}
```

Sitemap example:

```
Text item=iComfortS30HeatingZone_0_Temperature
Text item=iComfortS30HeatingZone_0_Humidity
Text item=iComfortS30HeatingZone_0_SystemStatus
Selection item=iComfortS30HeatingZone_0_OperationMode mappings=[HVAC_OFF=System is idle", HVAC_HEAT="System is heating", HVAC_COOL="System is cooling", WAITING="System is waiting", HVAC_EMERGENCY_HEAT="System is emergency heating", HVAC_HEAT_COOL="System is heating or cooling"]
Switch item=Thermostat_Away_Mode mappings=[AWAY_ON="Away", AWAY_OFF="Not Away"]
Selection item=Thermostat_Fan_Mode mappings=[FAN_AUTO="Auto", FAN_ON="On", FAN_CIRCULATE="Circulate"]
Setpoint item=Thermostat_Cool_Point
Setpoint item=Thermostat_Heat_Point
```

## Foot note!

This binding is based on my previous binding for iComfortWiFi thermostat wich in turn was based on Nest binding and EVO Home binding, all the credits for original code goes to the original authors.<br />
I also used a lot of reversed engineering done by other programmers on Internet and I have to Thank them here!
In particularly Python code created by PeterRager, without his work this wouldn't be possible, all the credits goes to him, his original code available here:
https://github.com/PeteRager/lennoxs30api
17 changes: 17 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<parent>
<groupId>org.openhab.addons.bundles</groupId>
<artifactId>org.openhab.addons.reactor.bundles</artifactId>
<version>3.4.0-SNAPSHOT</version>
</parent>

<artifactId>org.openhab.binding.icomforts30</artifactId>

<name>openHAB Add-ons :: Bundles :: icomforts30 Binding</name>

</project>
9 changes: 9 additions & 0 deletions src/main/feature/feature.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<features name="org.openhab.binding.icomforts30-${project.version}" xmlns="http://karaf.apache.org/xmlns/features/v1.4.0">
<repository>mvn:org.openhab.core.features.karaf/org.openhab.core.features.karaf.openhab-core/${ohc.version}/xml/features</repository>

<feature name="openhab-binding-icomforts30" description="icomforts30 Binding" version="${project.version}">
<feature>openhab-runtime-base</feature>
<bundle start-level="80">mvn:org.openhab.addons.bundles/org.openhab.binding.icomforts30/${project.version}</bundle>
</feature>
</features>
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/**
* Copyright (c) 2010-2022 Contributors to the openHAB project
*
* See the NOTICE file(s) distributed with this work for additional
* information.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*/

package org.openhab.binding.icomforts30.internal;

import java.util.concurrent.TimeoutException;

/**
* Provides an interface for a delegate that can throw a timeout
*
* @author Konstantin Panchenko - Initial contribution
*
*/
public interface RunnableWithTimeout {

public abstract void run() throws TimeoutException;
}
Loading

0 comments on commit a2d9964

Please sign in to comment.