Skip to content

Commit 2005b17

Browse files
committed
introduce fixes to use system channel when available
Signed-off-by: Laurent Arnal <laurent@clae.net>
1 parent a893dac commit 2005b17

3 files changed

Lines changed: 76 additions & 11 deletions

File tree

bundles/org.openhab.binding.smartthings/src/main/java/org/openhab/binding/smartthings/internal/discovery/SmartThingsDiscoveryService.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,33 @@ public void doScan(Boolean addDevice) throws SmartThingsException {
100100
}
101101
}
102102

103+
// registerDevice(
104+
// "{\"deviceId\":\"69c8f08f-5250-45f9-8c30-ff80be1e0ffe\",\"name\":\"[TV] Samsung 7 Series
105+
// (43)\",\"label\":\"Samsung TV\",\"manufacturerName\":\"Samsung
106+
// Electronics\",\"presentationId\":\"VD-STV_2018_K\",\"deviceManufacturerCode\":\"Samsung
107+
// Electronics\",\"deviceTypeName\":\"Samsung OCF
108+
// TV\",\"locationId\":\"1fc347a7-2269-4a3d-99af-155bba810a5f\",\"ownerId\":\"4a5da4a0-1cdc-103c-4ac1-be6d7175cead\",\"roomId\":\"cf568f88-c453-4d86-a3d4-97d038f0d6aa\",\"createTime\":\"2020-01-03T20:24:48Z\",\"type\":\"OCF\",\"restrictionTier\":0,\"executionContext\":\"CLOUD\",\"profile\":{\"id\":\"d2c56b57-56fa-3f30-9bb5-ae86a5b53d1f\"},\"components\":[{\"id\":\"main\",\"label\":\"main\",\"capabilities\":[{\"id\":\"ocf\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"switch\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"audioVolume\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"audioMute\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"tvChannel\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"mediaInputSource\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"mediaPlayback\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"mediaTrackControl\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"custom.error\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"custom.picturemode\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"custom.soundmode\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"custom.accessibility\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"custom.launchapp\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"custom.recording\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"custom.tvsearch\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"custom.disabledCapabilities\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"samsungvd.ambient\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"samsungvd.ambientContent\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"samsungvd.ambient18\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"samsungvd.mediaInputSource\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"refresh\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"execute\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"samsungvd.firmwareVersion\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"samsungvd.supportsPowerOnByOcf\",\"version\":\"1\",\"ephemeral\":false}],\"categories\":[{\"name\":\"Television\",\"categoryType\":\"manufacturer\"}]}],\"ocf\":{\"ocfDeviceType\":\"oic.d.tv\",\"name\":\"[TV]
109+
// Samsung 7 Series
110+
// (43)\",\"specVersion\":\"core.1.1.0\",\"verticalDomainSpecVersion\":\"res.1.1.0,sh.1.1.0\",\"manufacturerName\":\"Samsung
111+
// Electronics\",\"modelNumber\":\"UE43RU7099UXZG\",\"platformVersion\":\"Tizen
112+
// 5.0\",\"platformOS\":\"4.1.10\",\"hwVersion\":\"0-0\",\"firmwareVersion\":\"T-MSLDEUC-1360.9\",\"vendorId\":\"VD-STV_2018_K\",\"lastSignupTime\":\"2020-01-03T20:24:45.405Z\",\"transferCandidate\":false,\"additionalAuthCodeRequired\":false}}",
113+
// addDevice);
114+
registerDevice(
115+
"{\"deviceId\":\"8ae00f5a-1b0f-50c2-3fda-b5c11c01af44\",\"name\":\"Samsung The Frame\",\"label\":\"Samsung The Frame\",\"manufacturerName\":\"Samsung Electronics\",\"presentationId\":\"VD-STV_2018_K\",\"deviceManufacturerCode\":\"Samsung Electronics\",\"deviceTypeName\":\"Samsung OCF TV\",\"locationId\":\"1fc347a7-2269-4a3d-99af-155bba810a5f\",\"ownerId\":\"4a5da4a0-1cdc-103c-4ac1-be6d7175cead\",\"roomId\":\"9320b5b3-54f6-471e-b468-acf3b9d6533f\",\"createTime\":\"2022-10-01T17:49:14.622Z\",\"type\":\"OCF\",\"restrictionTier\":0,\"executionContext\":\"CLOUD\",\"profile\":{\"id\":\"361d5322-a827-3e41-9269-ed5129830ad3\"},\"components\":[{\"id\":\"main\",\"label\":\"main\",\"capabilities\":[{\"id\":\"ocf\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"switch\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"audioVolume\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"audioMute\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"tvChannel\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"mediaInputSource\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"mediaPlayback\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"mediaTrackControl\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"custom.error\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"custom.picturemode\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"custom.soundmode\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"custom.accessibility\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"custom.launchapp\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"custom.recording\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"custom.tvsearch\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"custom.disabledCapabilities\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"samsungvd.remoteControl\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"samsungvd.ambient\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"samsungvd.ambientContent\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"samsungvd.ambient18\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"samsungvd.mediaInputSource\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"samsungvd.deviceCategory\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"refresh\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"execute\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"samsungvd.firmwareVersion\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"samsungvd.supportsPowerOnByOcf\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"sec.diagnosticsInformation\",\"version\":\"1\",\"ephemeral\":false}],\"categories\":[{\"name\":\"Television\",\"categoryType\":\"manufacturer\"}]}],\"ocf\":{\"ocfDeviceType\":\"oic.d.tv\",\"name\":\"Samsung The Frame\",\"specVersion\":\"core.1.1.0\",\"verticalDomainSpecVersion\":\"res.1.1.0,sh.1.1.0\",\"manufacturerName\":\"Samsung Electronics\",\"modelNumber\":\"GQ65LS03TAUXZG\",\"platformVersion\":\"5.5\",\"platformOS\":\"Tizen\",\"hwVersion\":\"\",\"firmwareVersion\":\"T-NKMDEUC-2700.6\",\"vendorId\":\"VD-STV_2018_K\",\"lastSignupTime\":\"2022-10-01T17:49:10.010857Z\",\"transferCandidate\":false,\"additionalAuthCodeRequired\":false}}",
116+
addDevice);
117+
// registerDevice(
118+
// "{\"deviceId\":\"11d06d49-c67a-839b-9d40-a9858a08d394\",\"name\":\"Samsung Room
119+
// A/C\",\"label\":\"Raumklimaanlage\",\"manufacturerName\":\"Samsung
120+
// Electronics\",\"presentationId\":\"DA-AC-RAC-000003\",\"deviceManufacturerCode\":\"Samsung
121+
// Electronics\",\"deviceTypeName\":\"Samsung OCF Air
122+
// Conditioner\",\"locationId\":\"1fc347a7-2269-4a3d-99af-155bba810a5f\",\"ownerId\":\"4a5da4a0-1cdc-103c-4ac1-be6d7175cead\",\"roomId\":\"2e6d55a6-c805-404f-a467-bc3c3a4a12ed\",\"createTime\":\"2021-07-09T07:14:11.397Z\",\"type\":\"OCF\",\"restrictionTier\":0,\"executionContext\":\"CLOUD\",\"profile\":{\"id\":\"bb4a6df4-6e0f-303a-ac35-445ea78a41fe\"},\"components\":[{\"id\":\"main\",\"label\":\"main\",\"capabilities\":[{\"id\":\"ocf\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"switch\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"airConditionerMode\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"airConditionerFanMode\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"fanOscillationMode\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"temperatureMeasurement\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"thermostatCoolingSetpoint\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"relativeHumidityMeasurement\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"airQualitySensor\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"odorSensor\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"dustSensor\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"veryFineDustSensor\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"audioVolume\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"remoteControlStatus\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"powerConsumptionReport\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"demandResponseLoadControl\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"refresh\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"execute\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"custom.spiMode\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"custom.thermostatSetpointControl\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"custom.airConditionerOptionalMode\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"custom.airConditionerTropicalNightMode\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"custom.autoCleaningMode\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"custom.deviceReportStateConfiguration\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"custom.energyType\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"custom.dustFilter\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"custom.veryFineDustFilter\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"custom.deodorFilter\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"custom.electricHepaFilter\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"custom.doNotDisturbMode\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"custom.periodicSensing\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"custom.airConditionerOdorController\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"custom.ocfResourceVersion\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"custom.disabledCapabilities\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"samsungce.alwaysOnSensing\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"samsungce.deviceIdentification\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"samsungce.dustFilterAlarm\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"samsungce.driverVersion\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"samsungce.softwareUpdate\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"samsungce.softwareVersion\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"samsungce.selfCheck\",\"version\":\"1\",\"ephemeral\":false},{\"id\":\"samsungce.individualControlLock\",\"version\":\"1\",\"ephemeral\":false}],\"categories\":[{\"name\":\"AirConditioner\",\"categoryType\":\"manufacturer\"}]}],\"ocf\":{\"ocfDeviceType\":\"oic.d.airconditioner\",\"name\":\"Samsung
123+
// Room
124+
// A/C\",\"specVersion\":\"core.1.1.0\",\"verticalDomainSpecVersion\":\"res.1.1.0,sh.1.1.0\",\"manufacturerName\":\"Samsung
125+
// Electronics\",\"modelNumber\":\"ARTIK051_PRAC_20K|10217841|60010519001411010200001000000000\",\"platformVersion\":\"DAWIT
126+
// 2.0\",\"platformOS\":\"TizenRT 1.0 +
127+
// IPv6\",\"hwVersion\":\"ARTIK051\",\"firmwareVersion\":\"ARTIK051_PRAC_20K_11230313\",\"vendorId\":\"DA-AC-RAC-000003\",\"lastSignupTime\":\"2021-07-09T07:14:03.997292Z\",\"transferCandidate\":false,\"additionalAuthCodeRequired\":false}}",
128+
// addDevice);
129+
103130
logger.trace("End Discovery");
104131
}
105132

bundles/org.openhab.binding.smartthings/src/main/java/org/openhab/binding/smartthings/internal/handler/SmartThingsBridgeChannelDefinitions.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
import org.openhab.core.semantics.SemanticTag;
2121
import org.openhab.core.semantics.model.DefaultSemanticTags.Point;
2222
import org.openhab.core.semantics.model.DefaultSemanticTags.Property;
23+
import org.openhab.core.thing.DefaultSystemChannelTypeProvider;
24+
import org.openhab.core.thing.type.ChannelTypeUID;
2325

2426
/**
2527
* Configuration data for SmartThings
@@ -35,10 +37,17 @@ public class SmartThingsBridgeChannelDefinitions {
3537

3638
public class ChannelProperty {
3739
private String channelType;
40+
private @Nullable ChannelTypeUID systemChannelTypeUid;
3841
private @Nullable String uOm;
3942
private @Nullable SemanticTag semanticPoint;
4043
private @Nullable SemanticTag semanticProperty;
4144

45+
public ChannelProperty(ChannelTypeUID channelTypeUid) {
46+
this.channelType = "";
47+
this.systemChannelTypeUid = channelTypeUid;
48+
this.uOm = null;
49+
}
50+
4251
public ChannelProperty(String openhabChannelType) {
4352
this.channelType = openhabChannelType;
4453
this.uOm = null;
@@ -68,6 +77,10 @@ public String getChannelType() {
6877
return this.channelType;
6978
}
7079

80+
public @Nullable ChannelTypeUID getSystemChannelTypeUid() {
81+
return this.systemChannelTypeUid;
82+
}
83+
7184
public @Nullable String getUoM() {
7285
return this.uOm;
7386
}
@@ -94,6 +107,19 @@ public String getChannelType() {
94107
}
95108

96109
public SmartThingsBridgeChannelDefinitions() {
110+
111+
// ============================
112+
// = audioMute
113+
// ============================
114+
channelProperties.put("audioMute#mute",
115+
new ChannelProperty(DefaultSystemChannelTypeProvider.SYSTEM_CHANNEL_TYPE_UID_MUTE));
116+
117+
// ============================
118+
// = audioVolume
119+
// ============================
120+
channelProperties.put("audioVolume#volume",
121+
new ChannelProperty(DefaultSystemChannelTypeProvider.SYSTEM_CHANNEL_TYPE_UID_VOLUME));
122+
97123
// ============================
98124
// = battery
99125
// ============================

bundles/org.openhab.binding.smartthings/src/main/java/org/openhab/binding/smartthings/internal/type/SmartThingsTypeRegistryImpl.java

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,10 @@ private void generateChannelTypeForProp(SmartThingsCapability capa, String key,
256256
return;
257257
}
258258

259+
if (channelProp.getSystemChannelTypeUid() != null) {
260+
return;
261+
}
262+
259263
String label = capa.name;
260264

261265
String channelTypeName = getChannelTypeName(capa, key, subKey);
@@ -509,6 +513,8 @@ private void addChannels(String deviceCategory, String deviceType, List<ChannelG
509513

510514
Hashtable<String, SmartThingsProperty> subPropList = prop.properties;
511515

516+
ChannelProperty channelProp = getChannelProperty(capa, attrKey, attr, prop);
517+
512518
if ("object".equals(propType) && subPropList != null) {
513519
for (String subPropKey : subPropList.keySet()) {
514520
Map<String, String> props = new Hashtable<String, String>();
@@ -551,20 +557,26 @@ private void addChannels(String deviceCategory, String deviceType, List<ChannelG
551557
} else {
552558
Map<String, String> props = new Hashtable<String, String>();
553559

560+
ChannelTypeUID channelTypeUID = null;
554561
String channelName = getChannelName(attrKey);
555-
String channelTypeName = capa.id.replace(".", "_") + "_" + channelName;
556562
final String fChannelName = channelName;
557563

558-
logger.trace("addChannels: channelTypeName: {}", channelTypeName);
559-
ChannelTypeUID channelTypeUID = UidUtils.generateChannelTypeUID(channelTypeName);
564+
if (channelProp != null && channelProp.getSystemChannelTypeUid() != null) {
565+
channelTypeUID = channelProp.getSystemChannelTypeUid();
566+
} else {
567+
String channelTypeName = capa.id.replace(".", "_") + "_" + channelName;
568+
logger.trace("addChannels: channelTypeName: {}", channelTypeName);
569+
channelTypeUID = UidUtils.generateChannelTypeUID(channelTypeName);
560570

561-
ChannelType channelType = null;
562-
if (lcChannelTypeProvider != null) {
563-
channelType = lcChannelTypeProvider.getInternalChannelType(channelTypeUID);
564-
}
571+
ChannelType channelType = null;
572+
if (lcChannelTypeProvider != null) {
573+
channelType = lcChannelTypeProvider.getInternalChannelType(channelTypeUID);
574+
}
565575

566-
if (channelType == null) {
567-
logger.warn("Can't find channelType for {}", channelTypeUID);
576+
if (channelType == null) {
577+
logger.warn("Can't find channelType for {}", channelTypeUID);
578+
return;
579+
}
568580
}
569581

570582
props.put(SmartThingsBindingConstants.COMPONENT, componentId);
@@ -574,8 +586,8 @@ private void addChannels(String deviceCategory, String deviceType, List<ChannelG
574586
ChannelDefinition channelDef = null;
575587

576588
// capa.commands
577-
if (channelType != null) {
578-
channelDef = new ChannelDefinitionBuilder(channelName, channelType.getUID())
589+
if (channelTypeUID != null) {
590+
channelDef = new ChannelDefinitionBuilder(channelName, channelTypeUID)
579591
.withLabel(StringUtils.capitalize(channelName)).withProperties(props).build();
580592

581593
Optional<ChannelDefinition> previous = channelDefinitions.stream()

0 commit comments

Comments
 (0)