Skip to content

Commit b2e7065

Browse files
authored
Merge pull request #75 from matchews/codex/extend-relayconfig-and-modify-discovery-service
Add valve actuator discovery
2 parents be34dcb + 1cc1724 commit b2e7065

8 files changed

Lines changed: 108 additions & 2 deletions

File tree

bundles/org.openhab.binding.haywardomnilogiclocal/src/main/java/org/openhab/binding/haywardomnilogiclocal/internal/HaywardBindingConstants.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public class HaywardBindingConstants {
3838
public static final ThingTypeUID THING_TYPE_HEATER = new ThingTypeUID(BINDING_ID, "heater");
3939
public static final ThingTypeUID THING_TYPE_PUMP = new ThingTypeUID(BINDING_ID, "pump");
4040
public static final ThingTypeUID THING_TYPE_RELAY = new ThingTypeUID(BINDING_ID, "relay");
41+
public static final ThingTypeUID THING_TYPE_VALVEACTUATOR = new ThingTypeUID(BINDING_ID, "valveActuator");
4142
public static final ThingTypeUID THING_TYPE_SENSOR = new ThingTypeUID(BINDING_ID, "sensor");
4243
public static final ThingTypeUID THING_TYPE_VIRTUALHEATER = new ThingTypeUID(BINDING_ID, "virtualHeater");
4344

@@ -48,7 +49,8 @@ public class HaywardBindingConstants {
4849
HaywardBindingConstants.THING_TYPE_CHLORINATOR, HaywardBindingConstants.THING_TYPE_COLORLOGIC,
4950
HaywardBindingConstants.THING_TYPE_FILTER, HaywardBindingConstants.THING_TYPE_HEATER,
5051
HaywardBindingConstants.THING_TYPE_PUMP, HaywardBindingConstants.THING_TYPE_RELAY,
51-
HaywardBindingConstants.THING_TYPE_SENSOR, HaywardBindingConstants.THING_TYPE_VIRTUALHEATER);
52+
HaywardBindingConstants.THING_TYPE_SENSOR, HaywardBindingConstants.THING_TYPE_VALVEACTUATOR,
53+
HaywardBindingConstants.THING_TYPE_VIRTUALHEATER);
5254

5355
// List of all Channel ids (bridge)
5456
// No Channels

bundles/org.openhab.binding.haywardomnilogiclocal/src/main/java/org/openhab/binding/haywardomnilogiclocal/internal/HaywardHandlerFactory.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import org.openhab.binding.haywardomnilogiclocal.internal.handler.HaywardHeaterHandler;
3131
import org.openhab.binding.haywardomnilogiclocal.internal.handler.HaywardPumpHandler;
3232
import org.openhab.binding.haywardomnilogiclocal.internal.handler.HaywardRelayHandler;
33+
import org.openhab.binding.haywardomnilogiclocal.internal.handler.HaywardValveActuatorHandler;
3334
import org.openhab.binding.haywardomnilogiclocal.internal.handler.HaywardVirtualHeaterHandler;
3435
import org.openhab.core.thing.Bridge;
3536
import org.openhab.core.thing.Thing;
@@ -100,6 +101,9 @@ public HaywardHandlerFactory(final @Reference HaywardDynamicStateDescriptionProv
100101
if (thingTypeUID.equals(HaywardBindingConstants.THING_TYPE_RELAY)) {
101102
return new HaywardRelayHandler(thing);
102103
}
104+
if (thingTypeUID.equals(HaywardBindingConstants.THING_TYPE_VALVEACTUATOR)) {
105+
return new HaywardValveActuatorHandler(thing);
106+
}
103107
if (thingTypeUID.equals(HaywardBindingConstants.THING_TYPE_VIRTUALHEATER)) {
104108
return new HaywardVirtualHeaterHandler(thing);
105109
}

bundles/org.openhab.binding.haywardomnilogiclocal/src/main/java/org/openhab/binding/haywardomnilogiclocal/internal/HaywardTypeToRequest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ public enum HaywardTypeToRequest {
3030
HEATER,
3131
PUMP,
3232
RELAY,
33+
VALVEACTUATOR,
3334
SENSOR,
3435
VIRTUALHEATER
3536
}

bundles/org.openhab.binding.haywardomnilogiclocal/src/main/java/org/openhab/binding/haywardomnilogiclocal/internal/config/RelayConfig.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,26 @@ public class RelayConfig {
1919
@XStreamAsAttribute
2020
private @Nullable String name;
2121

22+
@XStreamAlias("Type")
23+
private @Nullable String type;
24+
25+
@XStreamAlias("Function")
26+
private @Nullable String function;
27+
2228
public @Nullable String getSystemId() {
2329
return systemId;
2430
}
2531

2632
public @Nullable String getName() {
2733
return name;
2834
}
35+
36+
public @Nullable String getType() {
37+
return type;
38+
}
39+
40+
public @Nullable String getFunction() {
41+
return function;
42+
}
2943
}
3044

bundles/org.openhab.binding.haywardomnilogiclocal/src/main/java/org/openhab/binding/haywardomnilogiclocal/internal/discovery/HaywardDiscoveryService.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,9 +158,29 @@ public synchronized void mspConfigDiscovery(String xmlResponse) {
158158
}
159159

160160
for (RelayConfig relay : backyard.getRelays()) {
161+
String id = relay.getSystemId();
162+
String relayType = relay.getType();
163+
if ("RLY_VALVE_ACTUATOR".equals(relayType)) {
164+
Map<String, Object> valveProps = new HashMap<>();
165+
valveProps.put(HaywardBindingConstants.PROPERTY_TYPE, HaywardTypeToRequest.VALVEACTUATOR);
166+
if (id != null) {
167+
valveProps.put(HaywardBindingConstants.PROPERTY_SYSTEM_ID, id);
168+
}
169+
valveProps.put(HaywardBindingConstants.PROPERTY_RELAY_TYPE, relayType);
170+
String function = relay.getFunction();
171+
if (function != null) {
172+
valveProps.put(HaywardBindingConstants.PROPERTY_RELAY_FUNCTION, function);
173+
}
174+
String name = relay.getName();
175+
if (name == null) {
176+
name = id != null ? id : "ValveActuator";
177+
}
178+
onDeviceDiscovered(HaywardBindingConstants.THING_TYPE_VALVEACTUATOR, name, valveProps);
179+
continue;
180+
}
181+
161182
Map<String, Object> relayProps = new HashMap<>();
162183
relayProps.put(HaywardBindingConstants.PROPERTY_TYPE, HaywardTypeToRequest.RELAY);
163-
String id = relay.getSystemId();
164184
if (id != null) {
165185
relayProps.put(HaywardBindingConstants.PROPERTY_SYSTEM_ID, id);
166186
}

bundles/org.openhab.binding.haywardomnilogiclocal/src/main/resources/OH-INF/i18n/haywardomnilogic.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ thing-type.haywardomnilogic.filter.label = Filter
1515
thing-type.haywardomnilogic.heater.label = Heater
1616
thing-type.haywardomnilogic.pump.label = Pump
1717
thing-type.haywardomnilogic.relay.label = Relay
18+
thing-type.haywardomnilogic.valveActuator.label = Valve Actuator
1819
thing-type.haywardomnilogic.virtualHeater.label = Virtual Heater
1920

2021
# thing types config
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<thing:thing-descriptions bindingId="haywardomnilogiclocal"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
5+
xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
6+
7+
<thing-type id="valveActuator" listed="false">
8+
<supported-bridge-type-refs>
9+
<bridge-type-ref id="bridge"/>
10+
</supported-bridge-type-refs>
11+
12+
<label>Valve Actuator</label>
13+
<channels>
14+
<channel id="valveActuatorState" typeId="system.power"/>
15+
</channels>
16+
17+
<properties>
18+
<property name="vendor">Hayward</property>
19+
<property name="thingTypeVersion">1</property>
20+
</properties>
21+
<representation-property>systemID</representation-property>
22+
</thing-type>
23+
24+
</thing:thing-descriptions>

bundles/org.openhab.binding.haywardomnilogiclocal/src/test/java/org/openhab/binding/haywardomnilogiclocal/internal/discovery/HaywardDiscoveryServiceTest.java

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
package org.openhab.binding.haywardomnilogiclocal.internal.discovery;
22

33
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
import static org.junit.jupiter.api.Assertions.assertNotNull;
45

56
import java.util.ArrayList;
7+
import java.util.HashMap;
68
import java.util.List;
79
import java.util.Map;
810

911
import org.eclipse.jdt.annotation.NonNullByDefault;
1012
import org.junit.jupiter.api.Test;
1113
import org.openhab.binding.haywardomnilogiclocal.internal.HaywardBindingConstants;
14+
import org.openhab.binding.haywardomnilogiclocal.internal.HaywardTypeToRequest;
1215
import org.openhab.core.thing.ThingTypeUID;
1316

1417
/**
@@ -19,10 +22,12 @@ public class HaywardDiscoveryServiceTest {
1922

2023
private static class TestDiscoveryService extends HaywardDiscoveryService {
2124
final List<ThingTypeUID> types = new ArrayList<>();
25+
final List<Map<String, Object>> propertyMaps = new ArrayList<>();
2226

2327
@Override
2428
public void onDeviceDiscovered(ThingTypeUID thingType, String label, Map<String, Object> properties) {
2529
types.add(thingType);
30+
propertyMaps.add(new HashMap<>(properties));
2631
}
2732
}
2833

@@ -55,4 +60,39 @@ public void mspConfigDiscoveryCreatesResultsForAllDevices() {
5560
assertEquals(2, service.types.stream().filter(t -> t.equals(HaywardBindingConstants.THING_TYPE_FILTER)).count());
5661
assertEquals(2, service.types.stream().filter(t -> t.equals(HaywardBindingConstants.THING_TYPE_BOW)).count());
5762
}
63+
64+
@Test
65+
public void mspConfigDiscoveryIdentifiesValveActuatorRelays() {
66+
String xml = "" +
67+
"<MspConfig>" +
68+
" <System systemId='SYS'>" +
69+
" <Backyard systemId='BY'>" +
70+
" <Relay systemId='VA1' name='Valve'>" +
71+
" <Type>RLY_VALVE_ACTUATOR</Type>" +
72+
" <Function>POOL_RETURN</Function>" +
73+
" </Relay>" +
74+
" </Backyard>" +
75+
" </System>" +
76+
"</MspConfig>";
77+
78+
TestDiscoveryService service = new TestDiscoveryService();
79+
service.mspConfigDiscovery(xml);
80+
81+
Map<String, Object> valveProps = null;
82+
for (int i = 0; i < service.types.size(); i++) {
83+
if (service.types.get(i).equals(HaywardBindingConstants.THING_TYPE_VALVEACTUATOR)) {
84+
valveProps = service.propertyMaps.get(i);
85+
break;
86+
}
87+
}
88+
89+
assertNotNull(valveProps);
90+
assertEquals(1, service.types.stream().filter(t -> t.equals(HaywardBindingConstants.THING_TYPE_VALVEACTUATOR)).count());
91+
assertEquals(0, service.types.stream().filter(t -> t.equals(HaywardBindingConstants.THING_TYPE_RELAY)).count());
92+
assertEquals(HaywardTypeToRequest.VALVEACTUATOR,
93+
valveProps.get(HaywardBindingConstants.PROPERTY_TYPE));
94+
assertEquals("RLY_VALVE_ACTUATOR", valveProps.get(HaywardBindingConstants.PROPERTY_RELAY_TYPE));
95+
assertEquals("POOL_RETURN", valveProps.get(HaywardBindingConstants.PROPERTY_RELAY_FUNCTION));
96+
assertEquals("VA1", valveProps.get(HaywardBindingConstants.PROPERTY_SYSTEM_ID));
97+
}
5898
}

0 commit comments

Comments
 (0)