Search in sources :

Example 1 with StateVariableTypeDetails

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;
    }
}
Also used : Action(org.teleal.cling.model.meta.Action) StateVariableValue(org.teleal.cling.model.state.StateVariableValue) StateVariable(org.teleal.cling.model.meta.StateVariable) ActionInvocation(org.teleal.cling.model.action.ActionInvocation) StateVariableTypeDetails(org.teleal.cling.model.meta.StateVariableTypeDetails) Service(org.teleal.cling.model.meta.Service) UpnpService(org.teleal.cling.UpnpService) UDAServiceId(org.teleal.cling.model.types.UDAServiceId)

Example 2 with StateVariableTypeDetails

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);
        }
    }
}
Also used : StateVariableValue(org.teleal.cling.model.state.StateVariableValue) ActionCallback(org.teleal.cling.controlpoint.ActionCallback) HashMap(java.util.HashMap) StateVariable(org.teleal.cling.model.meta.StateVariable) StateVariableTypeDetails(org.teleal.cling.model.meta.StateVariableTypeDetails) ActionException(org.teleal.cling.model.action.ActionException) ActionArgumentValue(org.teleal.cling.model.action.ActionArgumentValue)

Example 3 with StateVariableTypeDetails

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;
}
Also used : StateVariableValue(org.teleal.cling.model.state.StateVariableValue) StateVariable(org.teleal.cling.model.meta.StateVariable) StateVariableTypeDetails(org.teleal.cling.model.meta.StateVariableTypeDetails) SAXException(org.xml.sax.SAXException)

Aggregations

StateVariable (org.teleal.cling.model.meta.StateVariable)3 StateVariableTypeDetails (org.teleal.cling.model.meta.StateVariableTypeDetails)3 StateVariableValue (org.teleal.cling.model.state.StateVariableValue)3 HashMap (java.util.HashMap)1 UpnpService (org.teleal.cling.UpnpService)1 ActionCallback (org.teleal.cling.controlpoint.ActionCallback)1 ActionArgumentValue (org.teleal.cling.model.action.ActionArgumentValue)1 ActionException (org.teleal.cling.model.action.ActionException)1 ActionInvocation (org.teleal.cling.model.action.ActionInvocation)1 Action (org.teleal.cling.model.meta.Action)1 Service (org.teleal.cling.model.meta.Service)1 UDAServiceId (org.teleal.cling.model.types.UDAServiceId)1 SAXException (org.xml.sax.SAXException)1