mirror of
https://github.com/bwssytems/ha-bridge.git
synced 2025-12-19 16:41:53 +00:00
Merge pull request #836 from bjoernrennfanz/feature/HomeWizardIntegration
Add support for cheap HomeWizard SmartPlugs (Smartwares Smarthome Controller)
This commit is contained in:
@@ -358,7 +358,7 @@ The Add/Edit tab will show you the fields to fill in for the above in a form, wh
|
|||||||
The format of the item can be the default HTTP request which executes the URLs formatted as `http://<your stuff here>` as a GET. Other options to this are to select the HTTP Verb and add the data type and add a body that is passed with the request. Secure https is supported as well, just use `https://<your secure call here>`. When using POST and PUT, you have the ability to specify the body that will be sent with the request as well as the application type for the http call.
|
The format of the item can be the default HTTP request which executes the URLs formatted as `http://<your stuff here>` as a GET. Other options to this are to select the HTTP Verb and add the data type and add a body that is passed with the request. Secure https is supported as well, just use `https://<your secure call here>`. When using POST and PUT, you have the ability to specify the body that will be sent with the request as well as the application type for the http call.
|
||||||
|
|
||||||
The valid device types are: "custom", "veraDevice", "veraScene", "harmonyActivity", "harmonyButton", "nestHomeAway", "nestThermoSet", "hueDevice", "halDevice",
|
The valid device types are: "custom", "veraDevice", "veraScene", "harmonyActivity", "harmonyButton", "nestHomeAway", "nestThermoSet", "hueDevice", "halDevice",
|
||||||
"halButton", "halHome", "halThermoSet", "mqttMessage", "cmdDevice", "hassDevice", "tcpDevice", "udpDevice", "httpDevice", "domoticzDevice", "somfyDevice"
|
"halButton", "halHome", "halThermoSet", "mqttMessage", "cmdDevice", "hassDevice", "homewizardDevice", "tcpDevice", "udpDevice", "httpDevice", "domoticzDevice", "somfyDevice"
|
||||||
|
|
||||||
Filter Ip example:
|
Filter Ip example:
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -209,6 +209,7 @@ public class BridgeSettings extends BackupHandler {
|
|||||||
theBridgeSettings.setHassconfigured(theBridgeSettings.isValidHass());
|
theBridgeSettings.setHassconfigured(theBridgeSettings.isValidHass());
|
||||||
theBridgeSettings.setDomoticzconfigured(theBridgeSettings.isValidDomoticz());
|
theBridgeSettings.setDomoticzconfigured(theBridgeSettings.isValidDomoticz());
|
||||||
theBridgeSettings.setSomfyconfigured(theBridgeSettings.isValidSomfy());
|
theBridgeSettings.setSomfyconfigured(theBridgeSettings.isValidSomfy());
|
||||||
|
theBridgeSettings.setHomeWizardConfigured(theBridgeSettings.isValidHomeWizard());
|
||||||
// Lifx is either configured or not, so it does not need an update.
|
// Lifx is either configured or not, so it does not need an update.
|
||||||
if(serverPortOverride != null)
|
if(serverPortOverride != null)
|
||||||
theBridgeSettings.setServerPort(serverPortOverride);
|
theBridgeSettings.setServerPort(serverPortOverride);
|
||||||
|
|||||||
@@ -93,7 +93,9 @@ public class BridgeSettingsDescriptor {
|
|||||||
@SerializedName("securityData")
|
@SerializedName("securityData")
|
||||||
@Expose
|
@Expose
|
||||||
private String securityData;
|
private String securityData;
|
||||||
|
@SerializedName("homewizardaddress")
|
||||||
|
@Expose
|
||||||
|
private IpList homewizardaddress;
|
||||||
|
|
||||||
private boolean settingsChanged;
|
private boolean settingsChanged;
|
||||||
private boolean veraconfigured;
|
private boolean veraconfigured;
|
||||||
@@ -107,6 +109,7 @@ public class BridgeSettingsDescriptor {
|
|||||||
private boolean domoticzconfigured;
|
private boolean domoticzconfigured;
|
||||||
private boolean somfyconfigured;
|
private boolean somfyconfigured;
|
||||||
private boolean lifxconfigured;
|
private boolean lifxconfigured;
|
||||||
|
private boolean homewizardconfigured;
|
||||||
|
|
||||||
// Deprecated settings
|
// Deprecated settings
|
||||||
private String haltoken;
|
private String haltoken;
|
||||||
@@ -127,7 +130,7 @@ public class BridgeSettingsDescriptor {
|
|||||||
this.mqttconfigured = false;
|
this.mqttconfigured = false;
|
||||||
this.hassconfigured = false;
|
this.hassconfigured = false;
|
||||||
this.domoticzconfigured = false;
|
this.domoticzconfigured = false;
|
||||||
this.somfyconfigured = false;
|
this.homewizardconfigured = false;
|
||||||
this.lifxconfigured = false;
|
this.lifxconfigured = false;
|
||||||
this.farenheit = true;
|
this.farenheit = true;
|
||||||
this.securityData = null;
|
this.securityData = null;
|
||||||
@@ -188,6 +191,9 @@ public class BridgeSettingsDescriptor {
|
|||||||
public IpList getSomfyAddress() {
|
public IpList getSomfyAddress() {
|
||||||
return somfyaddress;
|
return somfyaddress;
|
||||||
}
|
}
|
||||||
|
public IpList getHomeWizardAddress() {
|
||||||
|
return homewizardaddress;
|
||||||
|
}
|
||||||
public void setVeraAddress(IpList veraAddress) {
|
public void setVeraAddress(IpList veraAddress) {
|
||||||
this.veraaddress = veraAddress;
|
this.veraaddress = veraAddress;
|
||||||
}
|
}
|
||||||
@@ -197,6 +203,9 @@ public class BridgeSettingsDescriptor {
|
|||||||
public void setSomfyAddress(IpList somfyAddress) {
|
public void setSomfyAddress(IpList somfyAddress) {
|
||||||
this.somfyaddress = somfyAddress;
|
this.somfyaddress = somfyAddress;
|
||||||
}
|
}
|
||||||
|
public void setHomeWizardAddress(IpList homewizardaddress) {
|
||||||
|
this.homewizardaddress = homewizardaddress;
|
||||||
|
}
|
||||||
public IpList getHarmonyAddress() {
|
public IpList getHarmonyAddress() {
|
||||||
return harmonyaddress;
|
return harmonyaddress;
|
||||||
}
|
}
|
||||||
@@ -236,6 +245,9 @@ public class BridgeSettingsDescriptor {
|
|||||||
public boolean isSomfyconfigured() {
|
public boolean isSomfyconfigured() {
|
||||||
return somfyconfigured;
|
return somfyconfigured;
|
||||||
}
|
}
|
||||||
|
public boolean isHomeWizardConfigured() {
|
||||||
|
return homewizardconfigured;
|
||||||
|
}
|
||||||
public void setVeraconfigured(boolean veraconfigured) {
|
public void setVeraconfigured(boolean veraconfigured) {
|
||||||
this.veraconfigured = veraconfigured;
|
this.veraconfigured = veraconfigured;
|
||||||
}
|
}
|
||||||
@@ -245,6 +257,9 @@ public class BridgeSettingsDescriptor {
|
|||||||
public void setSomfyconfigured(boolean somfyconfigured) {
|
public void setSomfyconfigured(boolean somfyconfigured) {
|
||||||
this.somfyconfigured = somfyconfigured;
|
this.somfyconfigured = somfyconfigured;
|
||||||
}
|
}
|
||||||
|
public void setHomeWizardConfigured(boolean homewizardconfigured) {
|
||||||
|
this.homewizardconfigured = homewizardconfigured;
|
||||||
|
}
|
||||||
public boolean isHarmonyconfigured() {
|
public boolean isHarmonyconfigured() {
|
||||||
return harmonyconfigured;
|
return harmonyconfigured;
|
||||||
}
|
}
|
||||||
@@ -492,4 +507,14 @@ public class BridgeSettingsDescriptor {
|
|||||||
this.setSettingsChanged(true);
|
this.setSettingsChanged(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public Boolean isValidHomeWizard() {
|
||||||
|
if(this.getHomeWizardAddress() == null || this.getHomeWizardAddress().getDevices().size() <= 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
List<NamedIP> devicesList = this.getHomeWizardAddress().getDevices();
|
||||||
|
if(devicesList.get(0).getIp().contains(Configuration.DEFAULT_ADDRESS))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ public class DeviceMapTypes {
|
|||||||
public final static String[] EXEC_DEVICE_COMPAT = { "exec", "Execute Script/Program"};
|
public final static String[] EXEC_DEVICE_COMPAT = { "exec", "Execute Script/Program"};
|
||||||
public final static String[] CMD_DEVICE = { "cmdDevice", "Execute Command/Script/Program"};
|
public final static String[] CMD_DEVICE = { "cmdDevice", "Execute Command/Script/Program"};
|
||||||
public final static String[] HASS_DEVICE = { "hassDevice", "HomeAssistant Device"};
|
public final static String[] HASS_DEVICE = { "hassDevice", "HomeAssistant Device"};
|
||||||
|
public final static String[] HOMEWIZARD_DEVICE = { "homewizardDevice", "HomeWizard Device"};
|
||||||
public final static String[] TCP_DEVICE = { "tcpDevice", "TCP Device"};
|
public final static String[] TCP_DEVICE = { "tcpDevice", "TCP Device"};
|
||||||
public final static String[] TCP_DEVICE_COMPAT = { "TCP", "TCP Device"};
|
public final static String[] TCP_DEVICE_COMPAT = { "TCP", "TCP Device"};
|
||||||
public final static String[] UDP_DEVICE = { "udpDevice", "UDP Device"};
|
public final static String[] UDP_DEVICE = { "udpDevice", "UDP Device"};
|
||||||
@@ -48,6 +49,7 @@ public class DeviceMapTypes {
|
|||||||
deviceMapTypes.add(HARMONY_ACTIVITY);
|
deviceMapTypes.add(HARMONY_ACTIVITY);
|
||||||
deviceMapTypes.add(HARMONY_BUTTON);
|
deviceMapTypes.add(HARMONY_BUTTON);
|
||||||
deviceMapTypes.add(HASS_DEVICE);
|
deviceMapTypes.add(HASS_DEVICE);
|
||||||
|
deviceMapTypes.add(HOMEWIZARD_DEVICE);
|
||||||
deviceMapTypes.add(HTTP_DEVICE);
|
deviceMapTypes.add(HTTP_DEVICE);
|
||||||
deviceMapTypes.add(HUE_DEVICE);
|
deviceMapTypes.add(HUE_DEVICE);
|
||||||
deviceMapTypes.add(LIFX_DEVICE);
|
deviceMapTypes.add(LIFX_DEVICE);
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import com.bwssystems.HABridge.plugins.exec.CommandHome;
|
|||||||
import com.bwssystems.HABridge.plugins.hal.HalHome;
|
import com.bwssystems.HABridge.plugins.hal.HalHome;
|
||||||
import com.bwssystems.HABridge.plugins.harmony.HarmonyHome;
|
import com.bwssystems.HABridge.plugins.harmony.HarmonyHome;
|
||||||
import com.bwssystems.HABridge.plugins.hass.HassHome;
|
import com.bwssystems.HABridge.plugins.hass.HassHome;
|
||||||
|
import com.bwssystems.HABridge.plugins.homewizard.HomeWizardHome;
|
||||||
import com.bwssystems.HABridge.plugins.http.HTTPHome;
|
import com.bwssystems.HABridge.plugins.http.HTTPHome;
|
||||||
import com.bwssystems.HABridge.plugins.hue.HueHome;
|
import com.bwssystems.HABridge.plugins.hue.HueHome;
|
||||||
import com.bwssystems.HABridge.plugins.lifx.LifxHome;
|
import com.bwssystems.HABridge.plugins.lifx.LifxHome;
|
||||||
@@ -68,6 +69,10 @@ public class HomeManager {
|
|||||||
aHome = new HassHome(bridgeSettings);
|
aHome = new HassHome(bridgeSettings);
|
||||||
resourceList.put(DeviceMapTypes.HASS_DEVICE[DeviceMapTypes.typeIndex], aHome);
|
resourceList.put(DeviceMapTypes.HASS_DEVICE[DeviceMapTypes.typeIndex], aHome);
|
||||||
homeList.put(DeviceMapTypes.HASS_DEVICE[DeviceMapTypes.typeIndex], aHome);
|
homeList.put(DeviceMapTypes.HASS_DEVICE[DeviceMapTypes.typeIndex], aHome);
|
||||||
|
// Setup the HomeWizard configuration if available
|
||||||
|
aHome = new HomeWizardHome(bridgeSettings);
|
||||||
|
resourceList.put(DeviceMapTypes.HOMEWIZARD_DEVICE[DeviceMapTypes.typeIndex], aHome);
|
||||||
|
homeList.put(DeviceMapTypes.HOMEWIZARD_DEVICE[DeviceMapTypes.typeIndex], aHome);
|
||||||
//setup the command execution Home
|
//setup the command execution Home
|
||||||
aHome = new CommandHome(bridgeSettings);
|
aHome = new CommandHome(bridgeSettings);
|
||||||
homeList.put(DeviceMapTypes.EXEC_DEVICE_COMPAT[DeviceMapTypes.typeIndex], aHome);
|
homeList.put(DeviceMapTypes.EXEC_DEVICE_COMPAT[DeviceMapTypes.typeIndex], aHome);
|
||||||
@@ -96,7 +101,7 @@ public class HomeManager {
|
|||||||
aHome = new FibaroHome(bridgeSettings);
|
aHome = new FibaroHome(bridgeSettings);
|
||||||
resourceList.put(DeviceMapTypes.FIBARO_DEVICE[DeviceMapTypes.typeIndex], aHome);
|
resourceList.put(DeviceMapTypes.FIBARO_DEVICE[DeviceMapTypes.typeIndex], aHome);
|
||||||
resourceList.put(DeviceMapTypes.FIBARO_SCENE[DeviceMapTypes.typeIndex], aHome);
|
resourceList.put(DeviceMapTypes.FIBARO_SCENE[DeviceMapTypes.typeIndex], aHome);
|
||||||
//setup the Domoticz configuration if available
|
//setup the Domoticz configuration if available
|
||||||
aHome = new DomoticzHome(bridgeSettings);
|
aHome = new DomoticzHome(bridgeSettings);
|
||||||
homeList.put(DeviceMapTypes.DOMOTICZ_DEVICE[DeviceMapTypes.typeIndex], aHome);
|
homeList.put(DeviceMapTypes.DOMOTICZ_DEVICE[DeviceMapTypes.typeIndex], aHome);
|
||||||
resourceList.put(DeviceMapTypes.DOMOTICZ_DEVICE[DeviceMapTypes.typeIndex], aHome);
|
resourceList.put(DeviceMapTypes.DOMOTICZ_DEVICE[DeviceMapTypes.typeIndex], aHome);
|
||||||
|
|||||||
@@ -291,6 +291,12 @@ public class DeviceResource {
|
|||||||
return homeManager.findResource(DeviceMapTypes.HASS_DEVICE[DeviceMapTypes.typeIndex]).getItems(DeviceMapTypes.HASS_DEVICE[DeviceMapTypes.typeIndex]);
|
return homeManager.findResource(DeviceMapTypes.HASS_DEVICE[DeviceMapTypes.typeIndex]).getItems(DeviceMapTypes.HASS_DEVICE[DeviceMapTypes.typeIndex]);
|
||||||
}, new JsonTransformer());
|
}, new JsonTransformer());
|
||||||
|
|
||||||
|
get (API_CONTEXT + "/homewizard/devices", "application/json", (request, response) -> {
|
||||||
|
log.debug("Get HomeWizard Clients");
|
||||||
|
response.status(HttpStatus.SC_OK);
|
||||||
|
return homeManager.findResource(DeviceMapTypes.HOMEWIZARD_DEVICE[DeviceMapTypes.typeIndex]).getItems(DeviceMapTypes.HOMEWIZARD_DEVICE[DeviceMapTypes.typeIndex]);
|
||||||
|
}, new JsonTransformer());
|
||||||
|
|
||||||
get (API_CONTEXT + "/domoticz/devices", "application/json", (request, response) -> {
|
get (API_CONTEXT + "/domoticz/devices", "application/json", (request, response) -> {
|
||||||
log.debug("Get Domoticz Clients");
|
log.debug("Get Domoticz Clients");
|
||||||
response.status(HttpStatus.SC_OK);
|
response.status(HttpStatus.SC_OK);
|
||||||
|
|||||||
@@ -0,0 +1,150 @@
|
|||||||
|
package com.bwssystems.HABridge.plugins.homewizard;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import com.bwssystems.HABridge.BridgeSettings;
|
||||||
|
import com.bwssystems.HABridge.DeviceMapTypes;
|
||||||
|
import com.bwssystems.HABridge.Home;
|
||||||
|
import com.bwssystems.HABridge.NamedIP;
|
||||||
|
import com.bwssystems.HABridge.api.CallItem;
|
||||||
|
import com.bwssystems.HABridge.dao.DeviceDescriptor;
|
||||||
|
import com.bwssystems.HABridge.hue.ColorData;
|
||||||
|
import com.bwssystems.HABridge.hue.MultiCommandUtil;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Control HomeWizard devices over HomeWizard Cloud
|
||||||
|
*
|
||||||
|
* @author Björn Rennfanz (bjoern@fam-rennfanz.de)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class HomeWizardHome implements Home {
|
||||||
|
|
||||||
|
private static final Logger log = LoggerFactory.getLogger(HomeWizardHome.class);
|
||||||
|
|
||||||
|
private Map<String, HomeWizzardSmartPlugInfo> plugGateways;
|
||||||
|
private Boolean validHomeWizard;
|
||||||
|
private boolean closed;
|
||||||
|
|
||||||
|
public HomeWizardHome(BridgeSettings bridgeSettings) {
|
||||||
|
super();
|
||||||
|
closed = true;
|
||||||
|
createHome(bridgeSettings);
|
||||||
|
closed = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String deviceHandler(CallItem anItem, MultiCommandUtil aMultiUtil, String lightId, int intensity,
|
||||||
|
Integer targetBri, Integer targetBriInc, ColorData colorData, DeviceDescriptor device, String body) {
|
||||||
|
|
||||||
|
String responseString = null;
|
||||||
|
if (!validHomeWizard) {
|
||||||
|
|
||||||
|
log.warn("Should not get here, no HomeWizard smart plug available");
|
||||||
|
responseString = "[{\"error\":{\"type\": 6, \"address\": \"/lights/" + lightId
|
||||||
|
+ "\",\"description\": \"Should not get here, no HomeWizard smart plug available\", \"parameter\": \"/lights/"
|
||||||
|
+ lightId + "state\"}}]";
|
||||||
|
} else {
|
||||||
|
|
||||||
|
if (anItem.getType() != null && anItem.getType().trim().equalsIgnoreCase(DeviceMapTypes.HOMEWIZARD_DEVICE[DeviceMapTypes.typeIndex])) {
|
||||||
|
|
||||||
|
log.debug("Executing HUE api request to change activity to HomeWizard smart plug: " + anItem.getItem().toString());
|
||||||
|
String jsonToPost = anItem.getItem().toString();
|
||||||
|
|
||||||
|
HomeWizzardSmartPlugInfo homeWizzardHandler = getHomeWizzardHandler(device.getTargetDevice());
|
||||||
|
if(homeWizzardHandler == null) {
|
||||||
|
log.warn("Should not get here, no HomeWizard smart plug configured");
|
||||||
|
responseString = "[{\"error\":{\"type\": 6, \"address\": \"/lights/" + lightId
|
||||||
|
+ "\",\"description\": \"Should not get here, no HomeWizard smart plug configured\", \"parameter\": \"/lights/"
|
||||||
|
+ lightId + "state\"}}]";
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
homeWizzardHandler.execApply(jsonToPost);
|
||||||
|
} catch (Exception e) {
|
||||||
|
|
||||||
|
log.warn("Error posting request to HomeWizard smart plug");
|
||||||
|
responseString = "[{\"error\":{\"type\": 6, \"address\": \"/lights/" + lightId
|
||||||
|
+ "\",\"description\": \"Error posting request to HomeWizard smart plug\", \"parameter\": \"/lights/" + lightId + "state\"}}]";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return responseString;
|
||||||
|
}
|
||||||
|
|
||||||
|
public HomeWizzardSmartPlugInfo getHomeWizzardHandler(String plugName) {
|
||||||
|
return plugGateways.get(plugName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<HomeWizardSmartPlugDevice> getDevices() {
|
||||||
|
|
||||||
|
log.debug("consolidating devices for plug gateways");
|
||||||
|
Iterator<String> keys = plugGateways.keySet().iterator();
|
||||||
|
ArrayList<HomeWizardSmartPlugDevice> deviceList = new ArrayList<>();
|
||||||
|
|
||||||
|
while(keys.hasNext())
|
||||||
|
{
|
||||||
|
String key = keys.next();
|
||||||
|
for(HomeWizardSmartPlugDevice device : plugGateways.get(key).getDevices())
|
||||||
|
deviceList.add(device);
|
||||||
|
}
|
||||||
|
|
||||||
|
return deviceList;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getItems(String type) {
|
||||||
|
|
||||||
|
if (validHomeWizard)
|
||||||
|
{
|
||||||
|
if (type.equalsIgnoreCase(DeviceMapTypes.HOMEWIZARD_DEVICE[DeviceMapTypes.typeIndex]))
|
||||||
|
{
|
||||||
|
return getDevices();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Home createHome(BridgeSettings bridgeSettings) {
|
||||||
|
|
||||||
|
validHomeWizard = bridgeSettings.getBridgeSettingsDescriptor().isValidHomeWizard();
|
||||||
|
log.info("HomeWizard Home created. " + (validHomeWizard ? "" : "No HomeWizard gateways configured."));
|
||||||
|
|
||||||
|
if (validHomeWizard)
|
||||||
|
{
|
||||||
|
plugGateways = new HashMap<>();
|
||||||
|
Iterator<NamedIP> gatewaysList = bridgeSettings.getBridgeSettingsDescriptor().getHomeWizardAddress().getDevices().iterator();
|
||||||
|
|
||||||
|
while(gatewaysList.hasNext()) {
|
||||||
|
|
||||||
|
NamedIP gateway = gatewaysList.next();
|
||||||
|
plugGateways.put(gateway.getName(), new HomeWizzardSmartPlugInfo(gateway, gateway.getName()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void closeHome() {
|
||||||
|
|
||||||
|
log.debug("Closing Home.");
|
||||||
|
if(closed) {
|
||||||
|
|
||||||
|
log.debug("Home is already closed....");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
plugGateways = null;
|
||||||
|
closed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
package com.bwssystems.HABridge.plugins.homewizard;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Control HomeWizard devices over HomeWizard Cloud
|
||||||
|
*
|
||||||
|
* @author Björn Rennfanz (bjoern@fam-rennfanz.de)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class HomeWizardSmartPlugDevice {
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
private String gateway;
|
||||||
|
private String id;
|
||||||
|
private String typeName;
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getGateway() {
|
||||||
|
return gateway;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGateway(String gateway) {
|
||||||
|
this.gateway = gateway;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(String id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTypeName() {
|
||||||
|
return this.typeName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTypeName(String typeName) {
|
||||||
|
this.typeName = typeName;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,242 @@
|
|||||||
|
package com.bwssystems.HABridge.plugins.homewizard;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.net.HttpURLConnection;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.apache.commons.codec.binary.Base64;
|
||||||
|
import org.apache.commons.codec.digest.DigestUtils;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import com.bwssystems.HABridge.NamedIP;
|
||||||
|
import com.bwssystems.HABridge.plugins.homewizard.json.Device;
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
|
||||||
|
import us.monoid.json.JSONException;
|
||||||
|
import us.monoid.json.JSONObject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Control HomeWizard devices over HomeWizard Cloud
|
||||||
|
*
|
||||||
|
* @author Björn Rennfanz (bjoern@fam-rennfanz.de)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class HomeWizzardSmartPlugInfo {
|
||||||
|
|
||||||
|
private static final Logger log = LoggerFactory.getLogger(HomeWizardHome.class);
|
||||||
|
|
||||||
|
private static final String HOMEWIZARD_LOGIN_URL = "https://cloud.homewizard.com/account/login";
|
||||||
|
private static final String HOMEWIZARD_API_URL = "https://plug.homewizard.com/plugs";
|
||||||
|
private static final String EMPTY_STRING = "";
|
||||||
|
|
||||||
|
private final String cloudAuth;
|
||||||
|
private final Gson gson;
|
||||||
|
|
||||||
|
private String cloudSessionId;
|
||||||
|
private String cloudPlugName;
|
||||||
|
private String cloudPlugId;
|
||||||
|
|
||||||
|
public HomeWizzardSmartPlugInfo(NamedIP gateway, String name) {
|
||||||
|
|
||||||
|
super();
|
||||||
|
|
||||||
|
cloudAuth = "Basic " + new String(Base64.encodeBase64((gateway.getUsername() + ":" + DigestUtils.sha1Hex(gateway.getPassword())).getBytes()));
|
||||||
|
cloudPlugName = name;
|
||||||
|
gson = new Gson();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean login()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
URL url = new URL(HOMEWIZARD_LOGIN_URL);
|
||||||
|
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
||||||
|
connection.setRequestMethod("GET");
|
||||||
|
connection.setRequestProperty("Authorization", cloudAuth);
|
||||||
|
connection.setRequestProperty("Content-Type", "application/json;charset=utf-8");
|
||||||
|
connection.connect();
|
||||||
|
|
||||||
|
BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
|
||||||
|
StringBuilder buffer = new StringBuilder();
|
||||||
|
String line;
|
||||||
|
|
||||||
|
while((line = br.readLine()) != null)
|
||||||
|
{
|
||||||
|
buffer.append(line).append("\n");
|
||||||
|
}
|
||||||
|
br.close();
|
||||||
|
|
||||||
|
// Get session id from result JSON
|
||||||
|
JSONObject json = new JSONObject(buffer.toString());
|
||||||
|
cloudSessionId = json.get("session").toString();
|
||||||
|
}
|
||||||
|
catch(IOException | JSONException e)
|
||||||
|
{
|
||||||
|
log.warn("Error while login to cloud service ", e);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String requestJson(String request)
|
||||||
|
{
|
||||||
|
String result = null;
|
||||||
|
|
||||||
|
// Check login was successful
|
||||||
|
if (login()) {
|
||||||
|
|
||||||
|
// Request JSON from Cloud service
|
||||||
|
try
|
||||||
|
{
|
||||||
|
URL url = new URL(HOMEWIZARD_API_URL + request);
|
||||||
|
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
||||||
|
|
||||||
|
connection.setRequestMethod("GET");
|
||||||
|
connection.setRequestProperty("X-Session-Token", cloudSessionId);
|
||||||
|
connection.setRequestProperty("Content-Type", "application/json;charset=utf-8");
|
||||||
|
connection.connect();
|
||||||
|
|
||||||
|
BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
|
||||||
|
StringBuilder buffer = new StringBuilder();
|
||||||
|
String line;
|
||||||
|
|
||||||
|
while((line = br.readLine()) != null)
|
||||||
|
{
|
||||||
|
buffer.append(line).append("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
br.close();
|
||||||
|
|
||||||
|
result = buffer.toString();
|
||||||
|
result = StringUtils.strip(result, "[]");
|
||||||
|
}
|
||||||
|
catch(IOException e)
|
||||||
|
{
|
||||||
|
log.warn("Error while get json request: {} ", request, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean sendAction(String request, String action)
|
||||||
|
{
|
||||||
|
boolean result = true;
|
||||||
|
|
||||||
|
// Check login was successful
|
||||||
|
if (login()) {
|
||||||
|
|
||||||
|
// Post action into Cloud service
|
||||||
|
try
|
||||||
|
{
|
||||||
|
URL url = new URL(HOMEWIZARD_API_URL + request);
|
||||||
|
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
||||||
|
|
||||||
|
JsonObject actionJson = new JsonObject();
|
||||||
|
actionJson.addProperty("action", StringUtils.capitalize(action));
|
||||||
|
|
||||||
|
connection.setRequestMethod("POST");
|
||||||
|
connection.setDoOutput(true);
|
||||||
|
connection.setRequestProperty("X-Session-Token", cloudSessionId);
|
||||||
|
connection.setRequestProperty("Content-Type", "application/json; charset=utf-8");
|
||||||
|
|
||||||
|
OutputStream os = connection.getOutputStream();
|
||||||
|
os.write(actionJson.toString().getBytes("UTF-8"));
|
||||||
|
os.close();
|
||||||
|
|
||||||
|
BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
|
||||||
|
StringBuilder buffer = new StringBuilder();
|
||||||
|
String line;
|
||||||
|
|
||||||
|
while((line = br.readLine()) != null)
|
||||||
|
{
|
||||||
|
buffer.append(line).append("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
br.close();
|
||||||
|
connection.disconnect();
|
||||||
|
|
||||||
|
// Check if request was Ok
|
||||||
|
if (!buffer.toString().contains("Success"))
|
||||||
|
{
|
||||||
|
result = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch(IOException e)
|
||||||
|
{
|
||||||
|
log.warn("Error while post json action: {} ", request, e);
|
||||||
|
result = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<HomeWizardSmartPlugDevice> getDevices()
|
||||||
|
{
|
||||||
|
List<HomeWizardSmartPlugDevice> homewizardDevices = new ArrayList<>();
|
||||||
|
try {
|
||||||
|
|
||||||
|
String result = requestJson(EMPTY_STRING);
|
||||||
|
JSONObject resultJson = new JSONObject(result);
|
||||||
|
cloudPlugId = resultJson.getString("id");
|
||||||
|
|
||||||
|
String all_devices_json = resultJson.get("devices").toString();
|
||||||
|
Device[] devices = gson.fromJson(all_devices_json, Device[].class);
|
||||||
|
|
||||||
|
// Fix names from JSON
|
||||||
|
for (Device device : devices) {
|
||||||
|
device.setTypeName(StringUtils.capitalize(device.getTypeName().replace("_", " ")));
|
||||||
|
homewizardDevices.add(mapDeviceToHomeWizardSmartPlugDevice(device));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch(JSONException e) {
|
||||||
|
log.warn("Error while get devices from cloud service ", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
log.info("Found: " + homewizardDevices.size() + " devices");
|
||||||
|
return homewizardDevices;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void execApply(String jsonToPost) throws JSONException, IOException {
|
||||||
|
|
||||||
|
// Extract
|
||||||
|
JSONObject resultJson = new JSONObject(jsonToPost);
|
||||||
|
String deviceId = resultJson.getString("deviceid");
|
||||||
|
String action = resultJson.getString("action");
|
||||||
|
|
||||||
|
// Check if we have an plug id stored
|
||||||
|
if (StringUtils.isBlank(cloudPlugId)) {
|
||||||
|
getDevices();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Send request to HomeWizard cloud
|
||||||
|
if (!sendAction("/" + cloudPlugId + "/devices/" + deviceId + "/action", action))
|
||||||
|
{
|
||||||
|
throw new IOException("Send action to HomeWizard Cloud failed.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected HomeWizardSmartPlugDevice mapDeviceToHomeWizardSmartPlugDevice(Device device) {
|
||||||
|
HomeWizardSmartPlugDevice homewizardDevice = new HomeWizardSmartPlugDevice();
|
||||||
|
homewizardDevice.setId(device.getId());
|
||||||
|
homewizardDevice.setGateway(cloudPlugName);
|
||||||
|
homewizardDevice.setName(device.getName());
|
||||||
|
homewizardDevice.setTypeName(device.getTypeName());
|
||||||
|
|
||||||
|
return homewizardDevice;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
package com.bwssystems.HABridge.plugins.homewizard.json;
|
||||||
|
|
||||||
|
import com.google.gson.annotations.Expose;
|
||||||
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Control HomeWizard devices over HomeWizard Cloud
|
||||||
|
*
|
||||||
|
* @author Björn Rennfanz (bjoern@fam-rennfanz.de)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class Device {
|
||||||
|
|
||||||
|
@SerializedName("id")
|
||||||
|
@Expose
|
||||||
|
private String id;
|
||||||
|
|
||||||
|
@SerializedName("name")
|
||||||
|
@Expose
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
@SerializedName("typeName")
|
||||||
|
@Expose
|
||||||
|
private String typeName;
|
||||||
|
|
||||||
|
public String getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(String id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTypeName() {
|
||||||
|
return this.typeName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTypeName(String typeName) {
|
||||||
|
this.typeName = typeName;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -63,6 +63,10 @@ app.config (function ($locationProvider, $routeProvider) {
|
|||||||
templateUrl: 'views/hassdevice.html',
|
templateUrl: 'views/hassdevice.html',
|
||||||
controller: 'HassController',
|
controller: 'HassController',
|
||||||
requiresAuthentication: true
|
requiresAuthentication: true
|
||||||
|
}).when ('/homewizarddevices', {
|
||||||
|
templateUrl: 'views/homewizarddevice.html',
|
||||||
|
controller: 'HomeWizardController',
|
||||||
|
requiresAuthentication: true
|
||||||
}).when ('/domoticzdevices', {
|
}).when ('/domoticzdevices', {
|
||||||
templateUrl: 'views/domoticzdevice.html',
|
templateUrl: 'views/domoticzdevice.html',
|
||||||
controller: 'DomoticzController',
|
controller: 'DomoticzController',
|
||||||
@@ -143,7 +147,7 @@ app.service ('bridgeService', function ($rootScope, $http, $base64, $location, n
|
|||||||
this.state = {base: "./api/devices", bridgelocation: ".", systemsbase: "./system", huebase: "./api", configs: [], backups: [], devices: [], device: {},
|
this.state = {base: "./api/devices", bridgelocation: ".", systemsbase: "./system", huebase: "./api", configs: [], backups: [], devices: [], device: {},
|
||||||
mapandid: [], type: "", settings: [], myToastMsg: [], logMsgs: [], loggerInfo: [], mapTypes: [], olddevicename: "", logShowAll: false,
|
mapandid: [], type: "", settings: [], myToastMsg: [], logMsgs: [], loggerInfo: [], mapTypes: [], olddevicename: "", logShowAll: false,
|
||||||
isInControl: false, showVera: false, showFibaro: false, showHarmony: false, showNest: false, showHue: false, showHal: false, showMqtt: false, showHass: false,
|
isInControl: false, showVera: false, showFibaro: false, showHarmony: false, showNest: false, showHue: false, showHal: false, showMqtt: false, showHass: false,
|
||||||
showDomoticz: false, showSomfy: false, showLifx: false, habridgeversion: {}, viewDevId: "", queueDevId: "", securityInfo: {}, filterDevicesByIpAddress: null,
|
showHomeWizard: false, showDomoticz: false, showSomfy: false, showLifx: false, habridgeversion: {}, viewDevId: "", queueDevId: "", securityInfo: {}, filterDevicesByIpAddress: null,
|
||||||
filterDevicesOnlyFiltered: false, filterDeviceType: null};
|
filterDevicesOnlyFiltered: false, filterDeviceType: null};
|
||||||
|
|
||||||
this.displayWarn = function(errorTitle, error) {
|
this.displayWarn = function(errorTitle, error) {
|
||||||
@@ -504,11 +508,16 @@ app.service ('bridgeService', function ($rootScope, $http, $base64, $location, n
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.updateShowHass = function () {
|
this.updateShowHomeWizard = function () {
|
||||||
this.state.showHass = self.state.settings.hassconfigured;
|
this.state.showHomeWizard = self.state.settings.homewizardconfigured;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.updateShowHass = function () {
|
||||||
|
this.state.showHass = self.state.settings.hassconfigured;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
this.updateShowDomoticz = function () {
|
this.updateShowDomoticz = function () {
|
||||||
this.state.showDomoticz = self.state.settings.domoticzconfigured;
|
this.state.showDomoticz = self.state.settings.domoticzconfigured;
|
||||||
return;
|
return;
|
||||||
@@ -536,6 +545,7 @@ app.service ('bridgeService', function ($rootScope, $http, $base64, $location, n
|
|||||||
self.updateShowHal();
|
self.updateShowHal();
|
||||||
self.updateShowMqtt();
|
self.updateShowMqtt();
|
||||||
self.updateShowHass();
|
self.updateShowHass();
|
||||||
|
self.updateShowHomeWizard();
|
||||||
self.updateShowDomoticz();
|
self.updateShowDomoticz();
|
||||||
self.updateShowSomfy();
|
self.updateShowSomfy();
|
||||||
self.updateShowLifx();
|
self.updateShowLifx();
|
||||||
@@ -781,6 +791,22 @@ app.service ('bridgeService', function ($rootScope, $http, $base64, $location, n
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
this.viewHomeWizardDevices = function () {
|
||||||
|
if (!this.state.showHomeWizard)
|
||||||
|
return;
|
||||||
|
return $http.get(this.state.base + "/homewizard/devices").then(
|
||||||
|
function (response) {
|
||||||
|
self.state.homewizarddevices = response.data;
|
||||||
|
},
|
||||||
|
function (error) {
|
||||||
|
if (error.status === 401)
|
||||||
|
$rootScope.$broadcast('securityReinit', 'done');
|
||||||
|
else
|
||||||
|
self.displayWarn("Get HomeWizard Devices Error: ", error);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
this.viewDomoticzDevices = function () {
|
this.viewDomoticzDevices = function () {
|
||||||
if (!this.state.showDomoticz)
|
if (!this.state.showDomoticz)
|
||||||
return;
|
return;
|
||||||
@@ -1468,6 +1494,24 @@ app.controller ('SystemController', function ($scope, $location, bridgeService,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
$scope.addHomeWizardtoSettings = function (newhomewizardname, newhomewizardip, newhomewizardusername, newhomewizardpassword) {
|
||||||
|
if($scope.bridge.settings.homewizardaddress === undefined || $scope.bridge.settings.homewizardaddress === null) {
|
||||||
|
$scope.bridge.settings.homewizardaddress = { devices: [] };
|
||||||
|
}
|
||||||
|
var newhomewizard = { name: newhomewizardname, ip: newhomewizardip, username: newhomewizardusername, password: newhomewizardpassword }
|
||||||
|
$scope.bridge.settings.homewizardaddress.devices.push(newhomewizard);
|
||||||
|
$scope.newhomewizardname = null;
|
||||||
|
$scope.newhomewizardip = null;
|
||||||
|
$scope.newhomewizardusername = null;
|
||||||
|
$scope.newhomewizardpassword = null;
|
||||||
|
};
|
||||||
|
$scope.removeHomeWizardtoSettings = function (homewizardname, homewizardip) {
|
||||||
|
for(var i = $scope.bridge.settings.homewizardaddress.devices.length - 1; i >= 0; i--) {
|
||||||
|
if($scope.bridge.settings.homewizardaddress.devices[i].name === homewizardname && $scope.bridge.settings.homewizardaddress.devices[i].ip === homewizardip) {
|
||||||
|
$scope.bridge.settings.homewizardaddress.devices.splice(i, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
$scope.addDomoticztoSettings = function (newdomoticzname, newdomoticzip, newdomoticzport, newdomoticzusername, newdomoticzpassword) {
|
$scope.addDomoticztoSettings = function (newdomoticzname, newdomoticzip, newdomoticzport, newdomoticzusername, newdomoticzpassword) {
|
||||||
if($scope.bridge.settings.domoticzaddress === undefined || $scope.bridge.settings.domoticzaddress === null) {
|
if($scope.bridge.settings.domoticzaddress === undefined || $scope.bridge.settings.domoticzaddress === null) {
|
||||||
$scope.bridge.settings.domoticzaddress = { devices: [] };
|
$scope.bridge.settings.domoticzaddress = { devices: [] };
|
||||||
@@ -2894,6 +2938,132 @@ app.controller('HassController', function ($scope, $location, bridgeService, ngD
|
|||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
app.controller('HomeWizardController', function ($scope, $location, bridgeService, ngDialog) {
|
||||||
|
$scope.bridge = bridgeService.state;
|
||||||
|
$scope.device = bridgeService.state.device;
|
||||||
|
$scope.device_dim_control = "";
|
||||||
|
$scope.bulk = { devices: [] };
|
||||||
|
$scope.selectAll = false;
|
||||||
|
bridgeService.viewHomeWizardDevices();
|
||||||
|
$scope.imgButtonsUrl = "glyphicon glyphicon-plus";
|
||||||
|
$scope.buttonsVisible = false;
|
||||||
|
|
||||||
|
$scope.clearDevice = function () {
|
||||||
|
bridgeService.clearDevice();
|
||||||
|
$scope.device = bridgeService.state.device;
|
||||||
|
};
|
||||||
|
|
||||||
|
$scope.buildDeviceUrls = function (homewizarddevice, buildonly) {
|
||||||
|
|
||||||
|
dimpayload = "{\"deviceid\":\"" + homewizarddevice.id + "\",\"action\":\"on\"}";
|
||||||
|
onpayload = "{\"deviceid\":\"" + homewizarddevice.id + "\",\"action\":\"on\"}";
|
||||||
|
offpayload = "{\"deviceid\":\"" + homewizarddevice.id + "\",\"action\":\"off\"}";
|
||||||
|
|
||||||
|
bridgeService.buildUrls(onpayload, dimpayload, offpayload, null, true, homewizarddevice.id ,homewizarddevice.name, homewizarddevice.gateway, null, "homewizardDevice", null, null);
|
||||||
|
$scope.device = bridgeService.state.device;
|
||||||
|
|
||||||
|
if (!buildonly) {
|
||||||
|
bridgeService.editNewDevice($scope.device);
|
||||||
|
$location.path('/editdevice');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$scope.bulkAddDevices = function() {
|
||||||
|
var devicesList = [];
|
||||||
|
$scope.clearDevice();
|
||||||
|
for(var i = 0; i < $scope.bulk.devices.length; i++) {
|
||||||
|
for(var x = 0; x < bridgeService.state.homewizarddevices.length; x++) {
|
||||||
|
if(bridgeService.state.homewizarddevices[x].id === $scope.bulk.devices[i]) {
|
||||||
|
$scope.buildDeviceUrls(bridgeService.state.homewizarddevices[x],true);
|
||||||
|
devicesList[i] = {
|
||||||
|
name: $scope.device.name,
|
||||||
|
mapId: $scope.device.mapId,
|
||||||
|
mapType: $scope.device.mapType,
|
||||||
|
deviceType: $scope.device.deviceType,
|
||||||
|
targetDevice: $scope.device.targetDevice,
|
||||||
|
onUrl: $scope.device.onUrl,
|
||||||
|
dimUrl: $scope.device.dimUrl,
|
||||||
|
offUrl: $scope.device.offUrl,
|
||||||
|
colorUrl: $scope.device.colorUrl,
|
||||||
|
headers: $scope.device.headers,
|
||||||
|
httpVerb: $scope.device.httpVerb,
|
||||||
|
contentType: $scope.device.contentType,
|
||||||
|
contentBody: $scope.device.contentBody,
|
||||||
|
contentBodyDim: $scope.device.contentBodyDim,
|
||||||
|
contentBodyOff: $scope.device.contentBodyOff
|
||||||
|
};
|
||||||
|
$scope.clearDevice();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
bridgeService.bulkAddDevice(devicesList).then(
|
||||||
|
function () {
|
||||||
|
$scope.clearDevice();
|
||||||
|
bridgeService.viewDevices();
|
||||||
|
bridgeService.viewHalDevices();
|
||||||
|
},
|
||||||
|
function (error) {
|
||||||
|
bridgeService.displayWarn("Error adding HomeWizard devices in bulk.", error)
|
||||||
|
}
|
||||||
|
);
|
||||||
|
$scope.bulk = { devices: [] };
|
||||||
|
$scope.selectAll = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
$scope.toggleSelection = function toggleSelection(deviceId) {
|
||||||
|
var idx = $scope.bulk.devices.indexOf(deviceId);
|
||||||
|
|
||||||
|
// is currently selected
|
||||||
|
if (idx > -1) {
|
||||||
|
$scope.bulk.devices.splice(idx, 1);
|
||||||
|
if($scope.bulk.devices.length === 0 && $scope.selectAll)
|
||||||
|
$scope.selectAll = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// is newly selected
|
||||||
|
else {
|
||||||
|
$scope.bulk.devices.push(deviceId);
|
||||||
|
$scope.selectAll = true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$scope.toggleSelectAll = function toggleSelectAll() {
|
||||||
|
if($scope.selectAll) {
|
||||||
|
$scope.selectAll = false;
|
||||||
|
$scope.bulk = { devices: [] };
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$scope.selectAll = true;
|
||||||
|
for(var x = 0; x < bridgeService.state.homewizarddevices.length; x++) {
|
||||||
|
if($scope.bulk.devices.indexOf(bridgeService.state.homewizarddevices[x]) < 0)
|
||||||
|
$scope.bulk.devices.push(bridgeService.state.homewizarddevices[x].devicename);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$scope.toggleButtons = function () {
|
||||||
|
$scope.buttonsVisible = !$scope.buttonsVisible;
|
||||||
|
if($scope.buttonsVisible)
|
||||||
|
$scope.imgButtonsUrl = "glyphicon glyphicon-minus";
|
||||||
|
else
|
||||||
|
$scope.imgButtonsUrl = "glyphicon glyphicon-plus";
|
||||||
|
};
|
||||||
|
|
||||||
|
$scope.deleteDevice = function (device) {
|
||||||
|
$scope.bridge.device = device;
|
||||||
|
ngDialog.open({
|
||||||
|
template: 'deleteDialog',
|
||||||
|
controller: 'DeleteDialogCtrl',
|
||||||
|
className: 'ngdialog-theme-default'
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
$scope.editDevice = function (device) {
|
||||||
|
bridgeService.editDevice(device);
|
||||||
|
$location.path('/editdevice');
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
app.controller('DomoticzController', function ($scope, $location, bridgeService, ngDialog) {
|
app.controller('DomoticzController', function ($scope, $location, bridgeService, ngDialog) {
|
||||||
$scope.bridge = bridgeService.state;
|
$scope.bridge = bridgeService.state;
|
||||||
$scope.device = bridgeService.state.device;
|
$scope.device = bridgeService.state.device;
|
||||||
@@ -3705,6 +3875,20 @@ app.filter('configuredSomfyDevices', function (bridgeService) {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
app.filter('configuredHomeWizardDevices', function (bridgeService) {
|
||||||
|
return function(input) {
|
||||||
|
var out = [];
|
||||||
|
if(input === undefined || input === null || input.length === undefined)
|
||||||
|
return out;
|
||||||
|
for (var i = 0; i < input.length; i++) {
|
||||||
|
if(bridgeService.deviceContainsType(input[i], "homewizardDevice")){
|
||||||
|
out.push(input[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
app.filter('filterDevicesByRequester', function () {
|
app.filter('filterDevicesByRequester', function () {
|
||||||
return function(input,search,mustContain,deviceType) {
|
return function(input,search,mustContain,deviceType) {
|
||||||
var out = [];
|
var out = [];
|
||||||
|
|||||||
@@ -23,6 +23,7 @@
|
|||||||
href="#!/haldevices">HAL Devices</a></li>
|
href="#!/haldevices">HAL Devices</a></li>
|
||||||
<li ng-if="bridge.showMqtt" role="presentation"><a href="#!/mqttmessages">MQTT Messages</a></li>
|
<li ng-if="bridge.showMqtt" role="presentation"><a href="#!/mqttmessages">MQTT Messages</a></li>
|
||||||
<li ng-if="bridge.showHass" role="presentation"><a href="#!/hassdevices">HomeAssistant Devices</a></li>
|
<li ng-if="bridge.showHass" role="presentation"><a href="#!/hassdevices">HomeAssistant Devices</a></li>
|
||||||
|
<li ng-if="bridge.showHomeWizard" role="presentation"><a href="#!/homewizarddevices">HomeWizard Devices</a></li>
|
||||||
<li ng-if="bridge.showDomoticz" role="presentation"><a href="#!/domoticzdevices">Domoticz Devices</a></li>
|
<li ng-if="bridge.showDomoticz" role="presentation"><a href="#!/domoticzdevices">Domoticz Devices</a></li>
|
||||||
<li ng-if="bridge.showSomfy" role="presentation"><a href="#!/somfydevices">Somfy Devices</a></li>
|
<li ng-if="bridge.showSomfy" role="presentation"><a href="#!/somfydevices">Somfy Devices</a></li>
|
||||||
<li ng-if="bridge.showLifx" role="presentation"><a href="#!/lifxdevices">LIFX Devices</a></li>
|
<li ng-if="bridge.showLifx" role="presentation"><a href="#!/lifxdevices">LIFX Devices</a></li>
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
Devices</a></li>
|
Devices</a></li>
|
||||||
<li ng-if="bridge.showMqtt" role="presentation"><a href="#!/mqttmessages">MQTT Messages</a></li>
|
<li ng-if="bridge.showMqtt" role="presentation"><a href="#!/mqttmessages">MQTT Messages</a></li>
|
||||||
<li ng-if="bridge.showHass" role="presentation"><a href="#!/hassdevices">HomeAssistant Devices</a></li>
|
<li ng-if="bridge.showHass" role="presentation"><a href="#!/hassdevices">HomeAssistant Devices</a></li>
|
||||||
|
<li ng-if="bridge.showHomeWizard" role="presentation"><a href="#!/homewizarddevices">HomeWizard Devices</a></li>
|
||||||
<li role="presentation" class="active"><a href="#!/domoticzdevices">Domoticz Devices</a></li>
|
<li role="presentation" class="active"><a href="#!/domoticzdevices">Domoticz Devices</a></li>
|
||||||
<li ng-if="bridge.showSomfy" role="presentation"><a href="#!/somfydevices">Somfy Devices</a></li>
|
<li ng-if="bridge.showSomfy" role="presentation"><a href="#!/somfydevices">Somfy Devices</a></li>
|
||||||
<li ng-if="bridge.showLifx" role="presentation"><a href="#!/lifxdevices">LIFX Devices</a></li>
|
<li ng-if="bridge.showLifx" role="presentation"><a href="#!/lifxdevices">LIFX Devices</a></li>
|
||||||
|
|||||||
@@ -23,6 +23,7 @@
|
|||||||
href="#!/mqttmessages">MQTT Messages</a></li>
|
href="#!/mqttmessages">MQTT Messages</a></li>
|
||||||
<li ng-if="bridge.showHass" role="presentation"><a
|
<li ng-if="bridge.showHass" role="presentation"><a
|
||||||
href="#!/hassdevices">HomeAssistant Devices</a></li>
|
href="#!/hassdevices">HomeAssistant Devices</a></li>
|
||||||
|
<li ng-if="bridge.showHomeWizard" role="presentation"><a href="#!/homewizarddevices">HomeWizard Devices</a></li>
|
||||||
<li ng-if="bridge.showDomoticz" role="presentation"><a href="#!/domoticzdevices">Domoticz Devices</a></li>
|
<li ng-if="bridge.showDomoticz" role="presentation"><a href="#!/domoticzdevices">Domoticz Devices</a></li>
|
||||||
<li ng-if="bridge.showSomfy" role="presentation"><a href="#!/somfydevices">Somfy Devices</a></li>
|
<li ng-if="bridge.showSomfy" role="presentation"><a href="#!/somfydevices">Somfy Devices</a></li>
|
||||||
<li ng-if="bridge.showLifx" role="presentation"><a href="#!/lifxdevices">LIFX Devices</a></li>
|
<li ng-if="bridge.showLifx" role="presentation"><a href="#!/lifxdevices">LIFX Devices</a></li>
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
href="#!/haldevices">HAL Devices</a></li>
|
href="#!/haldevices">HAL Devices</a></li>
|
||||||
<li ng-if="bridge.showMqtt" role="presentation"><a href="#!/mqttmessages">MQTT Messages</a></li>
|
<li ng-if="bridge.showMqtt" role="presentation"><a href="#!/mqttmessages">MQTT Messages</a></li>
|
||||||
<li ng-if="bridge.showHass" role="presentation"><a href="#!/hassdevices">HomeAssistant Devices</a></li>
|
<li ng-if="bridge.showHass" role="presentation"><a href="#!/hassdevices">HomeAssistant Devices</a></li>
|
||||||
|
<li ng-if="bridge.showHomeWizard" role="presentation"><a href="#!/homewizarddevices">HomeWizard Devices</a></li>
|
||||||
<li ng-if="bridge.showDomoticz" role="presentation"><a href="#!/domoticzdevices">Domoticz Devices</a></li>
|
<li ng-if="bridge.showDomoticz" role="presentation"><a href="#!/domoticzdevices">Domoticz Devices</a></li>
|
||||||
<li ng-if="bridge.showSomfy" role="presentation"><a href="#!/somfydevices">Somfy Devices</a></li>
|
<li ng-if="bridge.showSomfy" role="presentation"><a href="#!/somfydevices">Somfy Devices</a></li>
|
||||||
<li ng-if="bridge.showLifx" role="presentation"><a href="#!/lifxdevices">LIFX Devices</a></li>
|
<li ng-if="bridge.showLifx" role="presentation"><a href="#!/lifxdevices">LIFX Devices</a></li>
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
href="#!/haldevices">HAL Devices</a></li>
|
href="#!/haldevices">HAL Devices</a></li>
|
||||||
<li ng-if="bridge.showMqtt" role="presentation"><a href="#!/mqttmessages">MQTT Messages</a></li>
|
<li ng-if="bridge.showMqtt" role="presentation"><a href="#!/mqttmessages">MQTT Messages</a></li>
|
||||||
<li ng-if="bridge.showHass" role="presentation"><a href="#!/hassdevices">HomeAssistant Devices</a></li>
|
<li ng-if="bridge.showHass" role="presentation"><a href="#!/hassdevices">HomeAssistant Devices</a></li>
|
||||||
|
<li ng-if="bridge.showHomeWizard" role="presentation"><a href="#!/homewizarddevices">HomeWizard Devices</a></li>
|
||||||
<li ng-if="bridge.showDomoticz" role="presentation"><a href="#!/domoticzdevices">Domoticz Devices</a></li>
|
<li ng-if="bridge.showDomoticz" role="presentation"><a href="#!/domoticzdevices">Domoticz Devices</a></li>
|
||||||
<li ng-if="bridge.showSomfy" role="presentation"><a href="#!/somfydevices">Somfy Devices</a></li>
|
<li ng-if="bridge.showSomfy" role="presentation"><a href="#!/somfydevices">Somfy Devices</a></li>
|
||||||
<li ng-if="bridge.showLifx" role="presentation"><a href="#!/lifxdevices">LIFX Devices</a></li>
|
<li ng-if="bridge.showLifx" role="presentation"><a href="#!/lifxdevices">LIFX Devices</a></li>
|
||||||
|
|||||||
@@ -20,6 +20,7 @@
|
|||||||
Devices</a></li>
|
Devices</a></li>
|
||||||
<li ng-if="bridge.showMqtt" role="presentation"><a href="#!/mqttmessages">MQTT Messages</a></li>
|
<li ng-if="bridge.showMqtt" role="presentation"><a href="#!/mqttmessages">MQTT Messages</a></li>
|
||||||
<li ng-if="bridge.showHass" role="presentation"><a href="#!/hassdevices">HomeAssistant Devices</a></li>
|
<li ng-if="bridge.showHass" role="presentation"><a href="#!/hassdevices">HomeAssistant Devices</a></li>
|
||||||
|
<li ng-if="bridge.showHomeWizard" role="presentation"><a href="#!/homewizarddevices">HomeWizard Devices</a></li>
|
||||||
<li ng-if="bridge.showDomoticz" role="presentation"><a href="#!/domoticzdevices">Domoticz Devices</a></li>
|
<li ng-if="bridge.showDomoticz" role="presentation"><a href="#!/domoticzdevices">Domoticz Devices</a></li>
|
||||||
<li ng-if="bridge.showSomfy" role="presentation"><a href="#!/somfydevices">Somfy Devices</a></li>
|
<li ng-if="bridge.showSomfy" role="presentation"><a href="#!/somfydevices">Somfy Devices</a></li>
|
||||||
<li ng-if="bridge.showLifx" role="presentation"><a href="#!/lifxdevices">LIFX Devices</a></li>
|
<li ng-if="bridge.showLifx" role="presentation"><a href="#!/lifxdevices">LIFX Devices</a></li>
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
href="#!/haldevices">HAL Devices</a></li>
|
href="#!/haldevices">HAL Devices</a></li>
|
||||||
<li ng-if="bridge.showMqtt" role="presentation"><a href="#!/mqttmessages">MQTT Messages</a></li>
|
<li ng-if="bridge.showMqtt" role="presentation"><a href="#!/mqttmessages">MQTT Messages</a></li>
|
||||||
<li ng-if="bridge.showHass" role="presentation"><a href="#!/hassdevices">HomeAssistant Devices</a></li>
|
<li ng-if="bridge.showHass" role="presentation"><a href="#!/hassdevices">HomeAssistant Devices</a></li>
|
||||||
|
<li ng-if="bridge.showHomeWizard" role="presentation"><a href="#!/homewizarddevices">HomeWizard Devices</a></li>
|
||||||
<li ng-if="bridge.showDomoticz" role="presentation"><a href="#!/domoticzdevices">Domoticz Devices</a></li>
|
<li ng-if="bridge.showDomoticz" role="presentation"><a href="#!/domoticzdevices">Domoticz Devices</a></li>
|
||||||
<li ng-if="bridge.showSomfy" role="presentation"><a href="#!/somfydevices">Somfy Devices</a></li>
|
<li ng-if="bridge.showSomfy" role="presentation"><a href="#!/somfydevices">Somfy Devices</a></li>
|
||||||
<li ng-if="bridge.showLifx" role="presentation"><a href="#!/lifxdevices">LIFX Devices</a></li>
|
<li ng-if="bridge.showLifx" role="presentation"><a href="#!/lifxdevices">LIFX Devices</a></li>
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
href="#!/haldevices">HAL Devices</a></li>
|
href="#!/haldevices">HAL Devices</a></li>
|
||||||
<li ng-if="bridge.showMqtt" role="presentation"><a href="#!/mqttmessages">MQTT Messages</a></li>
|
<li ng-if="bridge.showMqtt" role="presentation"><a href="#!/mqttmessages">MQTT Messages</a></li>
|
||||||
<li ng-if="bridge.showHass" role="presentation"><a href="#!/hassdevices">HomeAssistant Devices</a></li>
|
<li ng-if="bridge.showHass" role="presentation"><a href="#!/hassdevices">HomeAssistant Devices</a></li>
|
||||||
|
<li ng-if="bridge.showHomeWizard" role="presentation"><a href="#!/homewizarddevices">HomeWizard Devices</a></li>
|
||||||
<li ng-if="bridge.showDomoticz" role="presentation"><a href="#!/domoticzdevices">Domoticz Devices</a></li>
|
<li ng-if="bridge.showDomoticz" role="presentation"><a href="#!/domoticzdevices">Domoticz Devices</a></li>
|
||||||
<li ng-if="bridge.showSomfy" role="presentation"><a href="#!/somfydevices">Somfy Devices</a></li>
|
<li ng-if="bridge.showSomfy" role="presentation"><a href="#!/somfydevices">Somfy Devices</a></li>
|
||||||
<li ng-if="bridge.showLifx" role="presentation"><a href="#!/lifxdevices">LIFX Devices</a></li>
|
<li ng-if="bridge.showLifx" role="presentation"><a href="#!/lifxdevices">LIFX Devices</a></li>
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
href="#!/huedevices">Hue Devices</a></li>
|
href="#!/huedevices">Hue Devices</a></li>
|
||||||
<li ng-if="bridge.showHal" role="presentation"><a href="#!/haldevices">HAL
|
<li ng-if="bridge.showHal" role="presentation"><a href="#!/haldevices">HAL
|
||||||
Devices</a></li>
|
Devices</a></li>
|
||||||
|
<li ng-if="bridge.showHomeWizard" role="presentation"><a href="#!/homewizarddevices">HomeWizard Devices</a></li>
|
||||||
<li ng-if="bridge.showMqtt" role="presentation"><a href="#!/mqttmessages">MQTT Messages</a></li>
|
<li ng-if="bridge.showMqtt" role="presentation"><a href="#!/mqttmessages">MQTT Messages</a></li>
|
||||||
<li role="presentation" class="active"><a href="#!/hassdevices">HomeAssistant Devices</a></li>
|
<li role="presentation" class="active"><a href="#!/hassdevices">HomeAssistant Devices</a></li>
|
||||||
<li ng-if="bridge.showDomoticz" role="presentation"><a href="#!/domoticzdevices">Domoticz Devices</a></li>
|
<li ng-if="bridge.showDomoticz" role="presentation"><a href="#!/domoticzdevices">Domoticz Devices</a></li>
|
||||||
|
|||||||
127
src/main/resources/public/views/homewizarddevice.html
Normal file
127
src/main/resources/public/views/homewizarddevice.html
Normal file
@@ -0,0 +1,127 @@
|
|||||||
|
<ul class="nav nav-pills" role="tablist">
|
||||||
|
<li role="presentation"><a href="#!/">Bridge Devices</a></li>
|
||||||
|
<li role="presentation"><a href="#!/system">Bridge Control</a></li>
|
||||||
|
<li role="presentation"><a href="#!/logs">Logs</a></li>
|
||||||
|
<li ng-if="bridge.showVera" role="presentation"><a href="#!/veradevices">Vera Devices</a></li>
|
||||||
|
<li ng-if="bridge.showVera" role="presentation"><a href="#!/verascenes">Vera Scenes</a></li>
|
||||||
|
<li ng-if="bridge.showFibaro" role="presentation"><a href="#!/fibarodevices">Fibaro Devices</a></li>
|
||||||
|
<li ng-if="bridge.showFibaro" role="presentation"><a href="#!/fibaroscenes">Fibaro Scenes</a></li>
|
||||||
|
<li ng-if="bridge.showHarmony" role="presentation"><a href="#!/harmonyactivities">Harmony Activities</a></li>
|
||||||
|
<li ng-if="bridge.showHarmony" role="presentation"><a href="#!/harmonydevices">Harmony Devices</a></li>
|
||||||
|
<li ng-if="bridge.showNest" role="presentation"><a href="#!/nest">Nest</a></li>
|
||||||
|
<li ng-if="bridge.showHue" role="presentation"><a href="#!/huedevices">Hue Devices</a></li>
|
||||||
|
<li ng-if="bridge.showHal" role="presentation"><a href="#!/haldevices">HAL Devices</a></li>
|
||||||
|
<li ng-if="bridge.showMqtt" role="presentation"><a href="#!/mqttmessages">MQTT Messages</a></li>
|
||||||
|
<li ng-if="bridge.showHass" role="presentation"><a href="#!/hassdevices">HomeAssistant Devices</a></li>
|
||||||
|
<li ng-if="bridge.showHomeWizard" role="presentation"><a href="#!/homewizarddevices">HomeWizard Devices</a></li>
|
||||||
|
<li ng-if="bridge.showDomoticz" role="presentation"><a href="#!/domoticzdevices">Domoticz Devices</a></li>
|
||||||
|
<li ng-if="bridge.showSomfy" role="presentation" class="active"><a href="#!/homewizarddevices">Somfy Devices</a></li>
|
||||||
|
<li role="presentation"><a href="#!/editdevice">Add/Edit</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-heading">
|
||||||
|
<h2 class="panel-title">HomeWizard Device List
|
||||||
|
({{bridge.homewizarddevices.length}})</h2>
|
||||||
|
</div>
|
||||||
|
<div class="panel-body">
|
||||||
|
<p class="text-muted">For any HomeWizard Device, use the build action buttons
|
||||||
|
to generate the item addition information into the ha-bridge device
|
||||||
|
and this will put you into the edit screen. Then
|
||||||
|
you can modify the name to anything you want that will be the keyword
|
||||||
|
for the Echo or Google Home. Also, you can go back to any helper tab and click a build
|
||||||
|
action button to add another item for a multi-command. After you are
|
||||||
|
done in the edit tab, click the 'Add Bridge Device' to finish that selection
|
||||||
|
setup. The 'Already Configured HomeWizard Devices' list below will show
|
||||||
|
what is already setup for your HomeWizard Gateway.</p>
|
||||||
|
<p>Use the check boxes by the names to use the bulk addition
|
||||||
|
feature. Select your items, then click
|
||||||
|
bulk add below. Your items will be added with the name of the device from the HomeWizard Cloud.</p>
|
||||||
|
</div>
|
||||||
|
<scrollable-table watch="bridge.homewizarddevices">
|
||||||
|
<table class="table table-bordered table-striped table-hover">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Row</th>
|
||||||
|
<th sortable-header col="name"><span><input type="checkbox" name="selectAll"
|
||||||
|
value="{{selectAll}}"
|
||||||
|
ng-checked="selectAll"
|
||||||
|
ng-click="toggleSelectAll()"> Name</span></th>
|
||||||
|
<th sortable-header col="id" comparator-fn="comparatorUniqueId">Id</th>
|
||||||
|
<th sortable-header col="type">Type</th>
|
||||||
|
<th>Build Actions</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tr
|
||||||
|
ng-repeat="homewizarddevice in bridge.homewizarddevices">
|
||||||
|
<td>{{$index+1}}</td>
|
||||||
|
<td><input type="checkbox" name="bulk.devices[]"
|
||||||
|
value="{{homewizarddevice.id}}"
|
||||||
|
ng-checked="bulk.devices.indexOf(homewizarddevice.id) > -1"
|
||||||
|
ng-click="toggleSelection(homewizarddevice.id)">
|
||||||
|
{{homewizarddevice.name}}</td>
|
||||||
|
<td>{{homewizarddevice.id}}</td>
|
||||||
|
<td>{{homewizarddevice.typeName}}</td>
|
||||||
|
<td>
|
||||||
|
<!--TODO - taken device_dim_control out of here since not yet used-->
|
||||||
|
<button class="btn btn-success" type="submit"
|
||||||
|
ng-click="buildDeviceUrls(homewizarddevice, false)">Build Item</button>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</scrollable-table>
|
||||||
|
<div class="panel-footer">
|
||||||
|
<button class="btn btn-success" type="submit"
|
||||||
|
ng-click="bulkAddDevices()">Bulk Add
|
||||||
|
({{bulk.devices.length}})</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-heading">
|
||||||
|
<h2 class="panel-title">
|
||||||
|
Already Configured HomeWizard Devices <a ng-click="toggleButtons()"><span
|
||||||
|
class={{imgButtonsUrl}} aria-hidden="true"></span></a>
|
||||||
|
</h2>
|
||||||
|
</div>
|
||||||
|
<div ng-if="buttonsVisible" class="panel-body">
|
||||||
|
<scrollable-table watch="bridge.devices">
|
||||||
|
<table class="table table-bordered table-striped table-hover">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Row</th>
|
||||||
|
<th sortable-header col="name">Name</th>
|
||||||
|
<th sortable-header col="targetDevice">HomeWizard Gateway</th>
|
||||||
|
<th>Map Id</th>
|
||||||
|
<th>Actions</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tr
|
||||||
|
ng-repeat="device in bridge.devices |configuredHomeWizardDevices">
|
||||||
|
<td>{{$index+1}}</td>
|
||||||
|
<td>{{device.name}}</td>
|
||||||
|
<td>{{device.targetDevice}}</td>
|
||||||
|
<td>{{device.mapId}}</td>
|
||||||
|
<td>
|
||||||
|
<p>
|
||||||
|
<button class="btn btn-warning" type="submit"
|
||||||
|
ng-click="editDevice(device)">Edit</button>
|
||||||
|
<button class="btn btn-danger" type="submit"
|
||||||
|
ng-click="deleteDevice(device)">Delete</button>
|
||||||
|
</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</scrollable-table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script type="text/ng-template" id="deleteMapandIdDialog">
|
||||||
|
<div class="ngdialog-message">
|
||||||
|
<h2>Device Map and Id?</h2>
|
||||||
|
<p>{{mapandid.mapType}} with {{mapandid.id}}</p>
|
||||||
|
<p>Are you Sure?</p>
|
||||||
|
</div>
|
||||||
|
<div class="ngdialog-buttons mt">
|
||||||
|
<button type="button" class="ngdialog-button ngdialog-button-error" ng-click="deleteMapandId(mapandid)">Delete</button>
|
||||||
|
</div>
|
||||||
|
</script>
|
||||||
@@ -21,6 +21,7 @@
|
|||||||
href="#!/haldevices">HAL Devices</a></li>
|
href="#!/haldevices">HAL Devices</a></li>
|
||||||
<li ng-if="bridge.showMqtt" role="presentation"><a href="#!/mqttmessages">MQTT Messages</a></li>
|
<li ng-if="bridge.showMqtt" role="presentation"><a href="#!/mqttmessages">MQTT Messages</a></li>
|
||||||
<li ng-if="bridge.showHass" role="presentation"><a href="#!/hassdevices">HomeAssistant Devices</a></li>
|
<li ng-if="bridge.showHass" role="presentation"><a href="#!/hassdevices">HomeAssistant Devices</a></li>
|
||||||
|
<li ng-if="bridge.showHomeWizard" role="presentation"><a href="#!/homewizarddevices">HomeWizard Devices</a></li>
|
||||||
<li ng-if="bridge.showDomoticz" role="presentation"><a href="#!/domoticzdevices">Domoticz Devices</a></li>
|
<li ng-if="bridge.showDomoticz" role="presentation"><a href="#!/domoticzdevices">Domoticz Devices</a></li>
|
||||||
<li ng-if="bridge.showSomfy" role="presentation"><a href="#!/somfydevices">Somfy Devices</a></li>
|
<li ng-if="bridge.showSomfy" role="presentation"><a href="#!/somfydevices">Somfy Devices</a></li>
|
||||||
<li ng-if="bridge.showLifx" role="presentation"><a href="#!/lifxdevices">LIFX Devices</a></li>
|
<li ng-if="bridge.showLifx" role="presentation"><a href="#!/lifxdevices">LIFX Devices</a></li>
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
<li ng-if="bridge.showHal" role="presentation"><a href="#!/haldevices">HAL Devices</a></li>
|
<li ng-if="bridge.showHal" role="presentation"><a href="#!/haldevices">HAL Devices</a></li>
|
||||||
<li ng-if="bridge.showMqtt" role="presentation"><a href="#!/mqttmessages">MQTT Messages</a></li>
|
<li ng-if="bridge.showMqtt" role="presentation"><a href="#!/mqttmessages">MQTT Messages</a></li>
|
||||||
<li ng-if="bridge.showHass" role="presentation"><a href="#!/hassdevices">HomeAssistant Devices</a></li>
|
<li ng-if="bridge.showHass" role="presentation"><a href="#!/hassdevices">HomeAssistant Devices</a></li>
|
||||||
|
<li ng-if="bridge.showHomeWizard" role="presentation"><a href="#!/homewizarddevices">HomeWizard Devices</a></li>
|
||||||
<li ng-if="bridge.showDomoticz" role="presentation"><a href="#!/domoticzdevices">Domoticz Devices</a></li>
|
<li ng-if="bridge.showDomoticz" role="presentation"><a href="#!/domoticzdevices">Domoticz Devices</a></li>
|
||||||
<li ng-if="bridge.showSomfy" role="presentation"><a href="#!/somfydevices">Somfy Devices</a></li>
|
<li ng-if="bridge.showSomfy" role="presentation"><a href="#!/somfydevices">Somfy Devices</a></li>
|
||||||
<li role="presentation" class="active"><a href="#!/lifxdevices">LIFX Devices</a></li>
|
<li role="presentation" class="active"><a href="#!/lifxdevices">LIFX Devices</a></li>
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
href="#!/haldevices">HAL Devices</a></li>
|
href="#!/haldevices">HAL Devices</a></li>
|
||||||
<li ng-if="bridge.showMqtt" role="presentation"><a href="#!/mqttmessages">MQTT Messages</a></li>
|
<li ng-if="bridge.showMqtt" role="presentation"><a href="#!/mqttmessages">MQTT Messages</a></li>
|
||||||
<li ng-if="bridge.showHass" role="presentation"><a href="#!/hassdevices">HomeAssistant Devices</a></li>
|
<li ng-if="bridge.showHass" role="presentation"><a href="#!/hassdevices">HomeAssistant Devices</a></li>
|
||||||
|
<li ng-if="bridge.showHomeWizard" role="presentation"><a href="#!/homewizarddevices">HomeWizard Devices</a></li>
|
||||||
<li ng-if="bridge.showDomoticz" role="presentation"><a href="#!/domoticzdevices">Domoticz Devices</a></li>
|
<li ng-if="bridge.showDomoticz" role="presentation"><a href="#!/domoticzdevices">Domoticz Devices</a></li>
|
||||||
<li ng-if="bridge.showSomfy" role="presentation"><a href="#!/somfydevices">Somfy Devices</a></li>
|
<li ng-if="bridge.showSomfy" role="presentation"><a href="#!/somfydevices">Somfy Devices</a></li>
|
||||||
<li ng-if="bridge.showLifx" role="presentation"><a href="#!/lifxdevices">LIFX Devices</a></li>
|
<li ng-if="bridge.showLifx" role="presentation"><a href="#!/lifxdevices">LIFX Devices</a></li>
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
<li ng-if="bridge.showHal" role="presentation"><a href="#!/haldevices">HAL Devices</a></li>
|
<li ng-if="bridge.showHal" role="presentation"><a href="#!/haldevices">HAL Devices</a></li>
|
||||||
<li role="presentation" class="active"><a href="#!/mqttmessages">MQTT Messages</a></li>
|
<li role="presentation" class="active"><a href="#!/mqttmessages">MQTT Messages</a></li>
|
||||||
<li ng-if="bridge.showHass" role="presentation"><a href="#!/hassdevices">HomeAssistant Devices</a></li>
|
<li ng-if="bridge.showHass" role="presentation"><a href="#!/hassdevices">HomeAssistant Devices</a></li>
|
||||||
|
<li ng-if="bridge.showHomeWizard" role="presentation"><a href="#!/homewizarddevices">HomeWizard Devices</a></li>
|
||||||
<li ng-if="bridge.showDomoticz" role="presentation"><a href="#!/domoticzdevices">Domoticz Devices</a></li>
|
<li ng-if="bridge.showDomoticz" role="presentation"><a href="#!/domoticzdevices">Domoticz Devices</a></li>
|
||||||
<li ng-if="bridge.showSomfy" role="presentation"><a href="#!/somfydevices">Somfy Devices</a></li>
|
<li ng-if="bridge.showSomfy" role="presentation"><a href="#!/somfydevices">Somfy Devices</a></li>
|
||||||
<li ng-if="bridge.showLifx" role="presentation"><a href="#!/lifxdevices">LIFX Devices</a></li>
|
<li ng-if="bridge.showLifx" role="presentation"><a href="#!/lifxdevices">LIFX Devices</a></li>
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
href="#!/haldevices">HAL Devices</a></li>
|
href="#!/haldevices">HAL Devices</a></li>
|
||||||
<li ng-if="bridge.showMqtt" role="presentation"><a href="#!/mqttmessages">MQTT Messages</a></li>
|
<li ng-if="bridge.showMqtt" role="presentation"><a href="#!/mqttmessages">MQTT Messages</a></li>
|
||||||
<li ng-if="bridge.showHass" role="presentation"><a href="#!/hassdevices">HomeAssistant Devices</a></li>
|
<li ng-if="bridge.showHass" role="presentation"><a href="#!/hassdevices">HomeAssistant Devices</a></li>
|
||||||
|
<li ng-if="bridge.showHomeWizard" role="presentation"><a href="#!/homewizarddevices">HomeWizard Devices</a></li>
|
||||||
<li ng-if="bridge.showDomoticz" role="presentation"><a href="#!/domoticzdevices">Domoticz Devices</a></li>
|
<li ng-if="bridge.showDomoticz" role="presentation"><a href="#!/domoticzdevices">Domoticz Devices</a></li>
|
||||||
<li ng-if="bridge.showSomfy" role="presentation"><a href="#!/somfydevices">Somfy Devices</a></li>
|
<li ng-if="bridge.showSomfy" role="presentation"><a href="#!/somfydevices">Somfy Devices</a></li>
|
||||||
<li ng-if="bridge.showLifx" role="presentation"><a href="#!/lifxdevices">LIFX Devices</a></li>
|
<li ng-if="bridge.showLifx" role="presentation"><a href="#!/lifxdevices">LIFX Devices</a></li>
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
href="#!/haldevices">HAL Devices</a></li>
|
href="#!/haldevices">HAL Devices</a></li>
|
||||||
<li ng-if="bridge.showMqtt" role="presentation"><a href="#!/mqttmessages">MQTT Messages</a></li>
|
<li ng-if="bridge.showMqtt" role="presentation"><a href="#!/mqttmessages">MQTT Messages</a></li>
|
||||||
<li ng-if="bridge.showHass" role="presentation"><a href="#!/hassdevices">HomeAssistant Devices</a></li>
|
<li ng-if="bridge.showHass" role="presentation"><a href="#!/hassdevices">HomeAssistant Devices</a></li>
|
||||||
|
<li ng-if="bridge.showHomeWizard" role="presentation"><a href="#!/homewizarddevices">HomeWizard Devices</a></li>
|
||||||
<li ng-if="bridge.showDomoticz" role="presentation"><a href="#!/domoticzdevices">Domoticz Devices</a></li>
|
<li ng-if="bridge.showDomoticz" role="presentation"><a href="#!/domoticzdevices">Domoticz Devices</a></li>
|
||||||
<li ng-if="bridge.showSomfy" role="presentation" class="active"><a href="#!/somfydevices">Somfy Devices</a></li>
|
<li ng-if="bridge.showSomfy" role="presentation" class="active"><a href="#!/somfydevices">Somfy Devices</a></li>
|
||||||
<li role="presentation"><a href="#!/editdevice">Add/Edit</a></li>
|
<li role="presentation"><a href="#!/editdevice">Add/Edit</a></li>
|
||||||
|
|||||||
@@ -22,6 +22,7 @@
|
|||||||
href="#!/haldevices">HAL Devices</a></li>
|
href="#!/haldevices">HAL Devices</a></li>
|
||||||
<li ng-if="bridge.showMqtt" role="presentation"><a href="#!/mqttmessages">MQTT Messages</a></li>
|
<li ng-if="bridge.showMqtt" role="presentation"><a href="#!/mqttmessages">MQTT Messages</a></li>
|
||||||
<li ng-if="bridge.showHass" role="presentation"><a href="#!/hassdevices">HomeAssistant Devices</a></li>
|
<li ng-if="bridge.showHass" role="presentation"><a href="#!/hassdevices">HomeAssistant Devices</a></li>
|
||||||
|
<li ng-if="bridge.showHomeWizard" role="presentation"><a href="#!/homewizarddevices">HomeWizard Devices</a></li>
|
||||||
<li ng-if="bridge.showDomoticz" role="presentation"><a href="#!/domoticzdevices">Domoticz Devices</a></li>
|
<li ng-if="bridge.showDomoticz" role="presentation"><a href="#!/domoticzdevices">Domoticz Devices</a></li>
|
||||||
<li ng-if="bridge.showSomfy" role="presentation"><a href="#!/somfydevices">Somfy Devices</a></li>
|
<li ng-if="bridge.showSomfy" role="presentation"><a href="#!/somfydevices">Somfy Devices</a></li>
|
||||||
<li ng-if="bridge.showLifx" role="presentation"><a href="#!/lifxdevices">LIFX Devices</a></li>
|
<li ng-if="bridge.showLifx" role="presentation"><a href="#!/lifxdevices">LIFX Devices</a></li>
|
||||||
@@ -417,6 +418,53 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</table></td>
|
</table></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>HomeWizard Gateways</td>
|
||||||
|
<td><table
|
||||||
|
class="table table-bordered table-striped table-hover">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>IP</th>
|
||||||
|
<th>Username</th>
|
||||||
|
<th>Password</th>
|
||||||
|
<th>Manage</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tr ng-repeat="homewizard in bridge.settings.homewizardaddress.devices">
|
||||||
|
<td><input id="bridge-settings-next-homewizard-name"
|
||||||
|
class="form-control" type="text" ng-model="homewizard.name"
|
||||||
|
placeholder="A HomeWizard Gateway"></td>
|
||||||
|
<td><input id="bridge-settings-next-homewizard-ip"
|
||||||
|
class="form-control" type="text" ng-model="homewizard.ip"
|
||||||
|
placeholder="http://www.homewizard.nl"></td>
|
||||||
|
<td><input id="bridge-settings-next-homewizard-username"
|
||||||
|
class="form-control" type="text" ng-model="homewizard.username"
|
||||||
|
placeholder="HomeWizard username"></td>
|
||||||
|
<td><input id="bridge-settings-next-homewizard-password"
|
||||||
|
class="form-control" type="password" ng-model="homewizard.password"
|
||||||
|
placeholder="HomeWizard password"></td>
|
||||||
|
<td><button class="btn btn-danger" type="submit"
|
||||||
|
ng-click="removeHomeWizardtoSettings(homewizard.name, homewizard.ip)">Del</button></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><input id="bridge-settings-new-homewizard-name"
|
||||||
|
class="form-control" type="text" ng-model="newhomewizardname"
|
||||||
|
placeholder="A HomeWizard Gateway"></td>
|
||||||
|
<td><input id="bridge-settings-new-homewizard-ip"
|
||||||
|
class="form-control" type="text" ng-model="newhomewizardip"
|
||||||
|
placeholder="http://www.homewizard.nl"></td>
|
||||||
|
<td><input id="bridge-settings-new-homewizard-username"
|
||||||
|
class="form-control" type="text" ng-model="newhomewizardusername"
|
||||||
|
placeholder="HomeWizard username"></td>
|
||||||
|
<td><input id="bridge-settings-new-homewizard-password"
|
||||||
|
class="form-control" type="password" ng-model="newhomewizardpassword"
|
||||||
|
placeholder="HomeWizard password"></td>
|
||||||
|
<td><button class="btn btn-success" type="submit"
|
||||||
|
ng-click="addHomeWizardtoSettings(newhomewizardname, newhomewizardip, newhomewizardusername, newhomewizardpassword)">Add</button></td>
|
||||||
|
</tr>
|
||||||
|
</table></td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Domoticz Names and IP Addresses</td>
|
<td>Domoticz Names and IP Addresses</td>
|
||||||
<td><table
|
<td><table
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
href="#!/haldevices">HAL Devices</a></li>
|
href="#!/haldevices">HAL Devices</a></li>
|
||||||
<li ng-if="bridge.showMqtt" role="presentation"><a href="#!/mqttmessages">MQTT Messages</a></li>
|
<li ng-if="bridge.showMqtt" role="presentation"><a href="#!/mqttmessages">MQTT Messages</a></li>
|
||||||
<li ng-if="bridge.showHass" role="presentation"><a href="#!/hassdevices">HomeAssistant Devices</a></li>
|
<li ng-if="bridge.showHass" role="presentation"><a href="#!/hassdevices">HomeAssistant Devices</a></li>
|
||||||
|
<li ng-if="bridge.showHomeWizard" role="presentation"><a href="#!/homewizarddevices">HomeWizard Devices</a></li>
|
||||||
<li ng-if="bridge.showDomoticz" role="presentation"><a href="#!/domoticzdevices">Domoticz Devices</a></li>
|
<li ng-if="bridge.showDomoticz" role="presentation"><a href="#!/domoticzdevices">Domoticz Devices</a></li>
|
||||||
<li ng-if="bridge.showSomfy" role="presentation"><a href="#!/somfydevices">Somfy Devices</a></li>
|
<li ng-if="bridge.showSomfy" role="presentation"><a href="#!/somfydevices">Somfy Devices</a></li>
|
||||||
<li ng-if="bridge.showLifx" role="presentation"><a href="#!/lifxdevices">LIFX Devices</a></li>
|
<li ng-if="bridge.showLifx" role="presentation"><a href="#!/lifxdevices">LIFX Devices</a></li>
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
href="#!/haldevices">HAL Devices</a></li>
|
href="#!/haldevices">HAL Devices</a></li>
|
||||||
<li ng-if="bridge.showMqtt" role="presentation"><a href="#!/mqttmessages">MQTT Messages</a></li>
|
<li ng-if="bridge.showMqtt" role="presentation"><a href="#!/mqttmessages">MQTT Messages</a></li>
|
||||||
<li ng-if="bridge.showHass" role="presentation"><a href="#!/hassdevices">HomeAssistant Devices</a></li>
|
<li ng-if="bridge.showHass" role="presentation"><a href="#!/hassdevices">HomeAssistant Devices</a></li>
|
||||||
|
<li ng-if="bridge.showHomeWizard" role="presentation"><a href="#!/homewizarddevices">HomeWizard Devices</a></li>
|
||||||
<li ng-if="bridge.showDomoticz" role="presentation"><a href="#!/domoticzdevices">Domoticz Devices</a></li>
|
<li ng-if="bridge.showDomoticz" role="presentation"><a href="#!/domoticzdevices">Domoticz Devices</a></li>
|
||||||
<li ng-if="bridge.showSomfy" role="presentation"><a href="#!/somfydevices">Somfy Devices</a></li>
|
<li ng-if="bridge.showSomfy" role="presentation"><a href="#!/somfydevices">Somfy Devices</a></li>
|
||||||
<li ng-if="bridge.showLifx" role="presentation"><a href="#!/lifxdevices">LIFX Devices</a></li>
|
<li ng-if="bridge.showLifx" role="presentation"><a href="#!/lifxdevices">LIFX Devices</a></li>
|
||||||
|
|||||||
Reference in New Issue
Block a user