use of org.teleal.cling.model.meta.StateVariableTypeDetails in project openhab1-addons by openhab.
the class SonosZonePlayer method updateRunningAlarmProperties.
public boolean updateRunningAlarmProperties() {
if (stateMap != null && isConfigured()) {
Service service = device.findService(new UDAServiceId("AVTransport"));
Action action = service.getAction("GetRunningAlarmProperties");
ActionInvocation invocation = new ActionInvocation(action);
executeActionInvocation(invocation);
// for this property we would like to "compile" a more friendly variable.
// this newly created "variable" is also store in the stateMap
StateVariableValue alarmID = stateMap.get("AlarmID");
StateVariableValue groupID = stateMap.get("GroupID");
StateVariableValue loggedStartTime = stateMap.get("LoggedStartTime");
String newStringValue = null;
if (alarmID != null && loggedStartTime != null) {
newStringValue = alarmID.getValue() + " - " + loggedStartTime.getValue();
} else {
newStringValue = "No running alarm";
}
StateVariable newVariable = new StateVariable("RunningAlarmProperties", new StateVariableTypeDetails(Datatype.Builtin.STRING.getDatatype()));
StateVariableValue newValue = new StateVariableValue(newVariable, newStringValue);
processStateVariableValue(newVariable.getName(), newValue);
return true;
} else {
return false;
}
}
use of org.teleal.cling.model.meta.StateVariableTypeDetails in project openhab1-addons by openhab.
the class SonosZonePlayer method executeActionInvocation.
protected void executeActionInvocation(ActionInvocation invocation) {
if (invocation != null) {
new ActionCallback.Default(invocation, upnpService.getControlPoint()).run();
ActionException anException = invocation.getFailure();
if (anException != null && anException.getMessage() != null) {
logger.warn(anException.getMessage());
}
Map<String, ActionArgumentValue> result = invocation.getOutputMap();
Map<String, StateVariableValue> mapToProcess = new HashMap<String, StateVariableValue>();
if (result != null) {
// only process the variables that have changed value
for (String variable : result.keySet()) {
ActionArgumentValue newArgument = result.get(variable);
StateVariable newVariable = new StateVariable(variable, new StateVariableTypeDetails(newArgument.getDatatype()));
StateVariableValue newValue = new StateVariableValue(newVariable, newArgument.getValue());
if (isUpdatedValue(variable, newValue)) {
mapToProcess.put(variable, newValue);
}
}
stateMap.putAll(mapToProcess);
sonosBinding.processVariableMap(device, mapToProcess);
}
}
}
use of org.teleal.cling.model.meta.StateVariableTypeDetails in project openhab1-addons by openhab.
the class SonosZonePlayer method updateCurrentURIFormatted.
public boolean updateCurrentURIFormatted() {
if (stateMap != null && isConfigured()) {
String currentURI = null;
SonosMetaData currentURIMetaData = null;
SonosMetaData currentTrack = null;
if (!isGroupCoordinator()) {
currentURI = getCoordinator().getCurrentURI();
currentURIMetaData = getCoordinator().getCurrentURIMetadata();
currentTrack = getCoordinator().getTrackMetadata();
} else {
currentURI = getCurrentURI();
currentURIMetaData = getCurrentURIMetadata();
currentTrack = getTrackMetadata();
}
if (currentURI != null) {
String resultString = null;
String artist = null;
String album = null;
String title = null;
if (currentURI.contains("x-sonosapi-stream")) {
// TODO: Get partner ID for openhab.org
String stationID = StringUtils.substringBetween(currentURI, ":s", "?sid");
StateVariable newVariable = new StateVariable("StationID", new StateVariableTypeDetails(Datatype.Builtin.STRING.getDatatype()));
StateVariableValue newValue = new StateVariableValue(newVariable, stationID);
if (this.isUpdatedValue("StationID", newValue) || lastOPMLQuery == null || lastOPMLQuery.plusMinutes(1).isBeforeNow()) {
processStateVariableValue(newVariable.getName(), newValue);
String url = "http://opml.radiotime.com/Describe.ashx?c=nowplaying&id=" + stationID + "&partnerId=IAeIhU42&serial=" + getMACAddress();
String response = HttpUtil.executeUrl("GET", url, SO_TIMEOUT);
// logger.debug("RadioTime Response: {}",response);
lastOPMLQuery = DateTime.now();
List<String> fields = null;
try {
fields = SonosXMLParser.getRadioTimeFromXML(response);
} catch (SAXException e) {
logger.error("Could not parse RadioTime from String {}", response);
}
resultString = new String();
if (fields != null && fields.size() > 1) {
artist = fields.get(0);
title = fields.get(1);
Iterator<String> listIterator = fields.listIterator();
while (listIterator.hasNext()) {
String field = listIterator.next();
resultString = resultString + field;
if (listIterator.hasNext()) {
resultString = resultString + " - ";
}
}
}
} else {
resultString = stateMap.get("CurrentURIFormatted").getValue().toString();
title = stateMap.get("CurrentTitle").getValue().toString();
artist = stateMap.get("CurrentArtist").getValue().toString();
}
} else {
if (currentTrack != null) {
if (currentTrack.getResource().contains("x-rincon-stream")) {
title = currentTrack.getTitle();
album = " ";
artist = " ";
resultString = title;
} else if (!currentTrack.getResource().contains("x-sonosapi-stream")) {
if (currentTrack.getAlbumArtist().equals("")) {
resultString = currentTrack.getCreator() + " - " + currentTrack.getAlbum() + " - " + currentTrack.getTitle();
artist = currentTrack.getCreator();
} else {
resultString = currentTrack.getAlbumArtist() + " - " + currentTrack.getAlbum() + " - " + currentTrack.getTitle();
artist = currentTrack.getAlbumArtist();
}
album = currentTrack.getAlbum();
title = currentTrack.getTitle();
if (album.equals("")) {
album = " ";
}
if (artist.equals("")) {
artist = " ";
}
}
} else {
title = " ";
album = " ";
artist = " ";
resultString = " ";
}
}
StateVariable newVariable = new StateVariable("CurrentURIFormatted", new StateVariableTypeDetails(Datatype.Builtin.STRING.getDatatype()));
StateVariableValue newValue = new StateVariableValue(newVariable, resultString);
processStateVariableValue(newVariable.getName(), newValue);
// update individual variables
newVariable = new StateVariable("CurrentArtist", new StateVariableTypeDetails(Datatype.Builtin.STRING.getDatatype()));
if (artist != null) {
newValue = new StateVariableValue(newVariable, artist);
} else {
newValue = new StateVariableValue(newVariable, " ");
}
processStateVariableValue(newVariable.getName(), newValue);
newVariable = new StateVariable("CurrentTitle", new StateVariableTypeDetails(Datatype.Builtin.STRING.getDatatype()));
if (title != null) {
newValue = new StateVariableValue(newVariable, title);
} else {
newValue = new StateVariableValue(newVariable, " ");
}
processStateVariableValue(newVariable.getName(), newValue);
newVariable = new StateVariable("CurrentAlbum", new StateVariableTypeDetails(Datatype.Builtin.STRING.getDatatype()));
if (album != null) {
newValue = new StateVariableValue(newVariable, album);
} else {
newValue = new StateVariableValue(newVariable, " ");
}
processStateVariableValue(newVariable.getName(), newValue);
return true;
}
}
return false;
}
Aggregations