@Override public URI getDeviceAssignmentIdentifier(IDeviceAssignment assignment) throws SiteWhereException { return createUri(SITEWHERE_PROTOCOL + "assignment/" + assignment.getToken()); }
@Override public URI getDeviceAssignmentIdentifier(IDeviceAssignment assignment) throws SiteWhereException { return createUri(SITEWHERE_PROTOCOL + "assignment/" + assignment.getToken()); }
@Override public void onDeviceCommandResponseRequest(String hardwareId, String originator, IDeviceCommandResponseCreateRequest request) throws SiteWhereException { IDeviceAssignment assignment = getCurrentAssignment(hardwareId); getDeviceEventManagement().addDeviceCommandResponse(assignment.getToken(), request); }
/** * If an originator was assocaited with the event, create a * {@link IDeviceCommandResponse} that links back to the original * invocation. * * @param originator * @param eventId * @param assignment * @throws SiteWhereException */ protected void handleLinkResponseToInvocation(String originator, String eventId, IDeviceAssignment assignment) throws SiteWhereException { if ((originator != null) && (!originator.isEmpty())) { DeviceCommandResponseCreateRequest response = new DeviceCommandResponseCreateRequest(); response.setOriginatingEventId(originator); response.setResponseEventId(eventId); getDeviceEventManagement().addDeviceCommandResponse(assignment.getToken(), response); } }
@Override public void onDeviceMeasurementsCreateRequest(String hardwareId, String originator, IDeviceMeasurementsCreateRequest request) throws SiteWhereException { IDeviceAssignment assignment = getCurrentAssignment(hardwareId); IDeviceMeasurements measurements = getDeviceEventManagement().addDeviceMeasurements(assignment.getToken(), request); handleLinkResponseToInvocation(originator, measurements.getId(), assignment); }
@Override public void onDeviceLocationCreateRequest(String hardwareId, String originator, IDeviceLocationCreateRequest request) throws SiteWhereException { IDeviceAssignment assignment = getCurrentAssignment(hardwareId); IDeviceLocation location = getDeviceEventManagement().addDeviceLocation(assignment.getToken(), request); handleLinkResponseToInvocation(originator, location.getId(), assignment); }
@Override public void handleDeviceStreamDataRequest(String hardwareId, IDeviceStreamDataCreateRequest request) throws SiteWhereException { IDeviceAssignment assignment = getCurrentAssignment(hardwareId); SiteWhere.getServer().getDeviceEventManagement(getTenant()).addDeviceStreamData(assignment.getToken(), request); }
@Override public void onDeviceAlertCreateRequest(String hardwareId, String originator, IDeviceAlertCreateRequest request) throws SiteWhereException { IDeviceAssignment assignment = getCurrentAssignment(hardwareId); IDeviceAlert alert = getDeviceEventManagement().addDeviceAlert(assignment.getToken(), request); handleLinkResponseToInvocation(originator, alert.getId(), assignment); }
@Override public void onDeviceStateChangeCreateRequest(String hardwareId, String originator, IDeviceStateChangeCreateRequest request) throws SiteWhereException { IDeviceAssignment assignment = getCurrentAssignment(hardwareId); IDeviceStateChange state = getDeviceEventManagement().addDeviceStateChange(assignment.getToken(), request); handleLinkResponseToInvocation(originator, state.getId(), assignment); }
@Override public MqttParameters extractDeliveryParameters(IDeviceNestingContext nesting, IDeviceAssignment assignment, IDeviceCommandExecution execution) throws SiteWhereException { MqttParameters params = new MqttParameters(); Map<String, String> values = new HashMap<>(); values.put("tenant", getTenantEngine().getTenant().getToken()); values.put("device", nesting.getGateway().getToken()); values.put("assignment", assignment.getToken()); String commandTopic = StrSubstitutor.replace(getCommandTopicExpr(), values); params.setCommandTopic(commandTopic); String systemTopic = StrSubstitutor.replace(getSystemTopicExpr(), values); params.setSystemTopic(systemTopic); return params; }
@Override public IDeviceAssignment createDeviceAssignment(IDeviceAssignmentCreateRequest request) throws SiteWhereException { IDeviceAssignment created = super.createDeviceAssignment(request); DeviceStateChangeCreateRequest state = new DeviceStateChangeCreateRequest(StateChangeCategory.Assignment, StateChangeType.Assignment_Created, null, null); SiteWhere.getServer().getDeviceEventManagement(getTenant()).addDeviceStateChange(created.getToken(), state); return created; }
@Override public IDeviceAssignment endDeviceAssignment(String token) throws SiteWhereException { IDeviceAssignment updated = super.endDeviceAssignment(token); DeviceStateChangeCreateRequest state = new DeviceStateChangeCreateRequest(StateChangeCategory.Assignment, StateChangeType.Assignment_Released, null, null); SiteWhere.getServer().getDeviceEventManagement(getTenant()).addDeviceStateChange(updated.getToken(), state); return updated; }
@Override public IDeviceAssignment updateDeviceAssignmentMetadata(String token, IMetadataProvider metadata) throws SiteWhereException { IDeviceAssignment updated = super.updateDeviceAssignmentMetadata(token, metadata); DeviceStateChangeCreateRequest state = new DeviceStateChangeCreateRequest(StateChangeCategory.Assignment, StateChangeType.Assignment_Updated, null, null); SiteWhere.getServer().getDeviceEventManagement(getTenant()).addDeviceStateChange(updated.getToken(), state); return updated; }
/** * Get the event row key bytes. * * @param assignment * @param time * @return * @throws SiteWhereException */ protected static byte[] getEventRowKey(IHBaseContext context, IDeviceAssignment assignment, long time) throws SiteWhereException { byte[] assnKey = context.getDeviceIdManager().getAssignmentKeys().getValue(assignment.getToken()); if (assnKey == null) { throw new SiteWhereSystemException(ErrorCode.InvalidDeviceAssignmentToken, ErrorLevel.ERROR); } return getRowKey(assnKey, time); }
public Builder(IDeviceAssignment api) { request.setToken(api.getToken()); request.setDeviceHardwareId(api.getDeviceHardwareId()); request.setAssetModuleId(api.getAssetModuleId()); request.setAssetId(api.getAssetId()); request.setAssignmentType(api.getAssignmentType()); if (api.getMetadata() != null) { request.setMetadata(new HashMap<String, String>()); request.getMetadata().putAll(api.getMetadata()); } }
@Override public void handleDeviceStreamRequest(String hardwareId, IDeviceStreamCreateRequest request) throws SiteWhereException { IDeviceAssignment assignment = getCurrentAssignment(hardwareId); DeviceStreamAckCommand ack = new DeviceStreamAckCommand(); ack.setStreamId(request.getStreamId()); IDeviceStream existing = SiteWhere.getServer().getDeviceManagement(getTenant()) .getDeviceStream(assignment.getToken(), request.getStreamId()); if (existing != null) { ack.setStatus(DeviceStreamStatus.DeviceStreamExists); } else { try { SiteWhere.getServer().getDeviceManagement(getTenant()).createDeviceStream(assignment.getToken(), request); ack.setStatus(DeviceStreamStatus.DeviceStreamCreated); } catch (SiteWhereException e) { LOGGER.error("Unable to create device stream.", e); ack.setStatus(DeviceStreamStatus.DeviceStreamFailed); } } SiteWhere.getServer().getDeviceCommunication(getTenant()).deliverSystemCommand(hardwareId, ack); }
/** * Common creation logic for all device events. * * @param request * @param assignment * @param target * @throws SiteWhereException */ public static void deviceEventCreateLogic(IDeviceEventCreateRequest request, IDeviceAssignment assignment, DeviceEvent target) throws SiteWhereException { target.setAlternateId(request.getAlternateId()); target.setSiteToken(assignment.getSiteToken()); target.setDeviceAssignmentToken(assignment.getToken()); target.setAssignmentType(assignment.getAssignmentType()); target.setAssetModuleId(assignment.getAssetModuleId()); target.setAssetId(assignment.getAssetId()); if (request.getEventDate() != null) { target.setEventDate(request.getEventDate()); } else { target.setEventDate(new Date()); } target.setReceivedDate(new Date()); MetadataProvider.copy(request.getMetadata(), target); }
/** * Create a device state change event. * * @param context * @param assignment * @param request * @return * @throws SiteWhereException */ public static IDeviceStateChange createDeviceStateChange(IHBaseContext context, IDeviceAssignment assignment, IDeviceStateChangeCreateRequest request) throws SiteWhereException { long time = getEventTime(request); byte[] rowkey = getEventRowKey(context, assignment, time); byte[] qualifier = getQualifier(EventRecordType.StateChange, time, context.getPayloadMarshaler().getEncoding()); // Create a state change and marshal to JSON. DeviceStateChange state = SiteWherePersistence.deviceStateChangeCreateLogic(assignment, request); String id = getEncodedEventId(rowkey, qualifier); state.setId(id); byte[] payload = context.getPayloadMarshaler().encodeDeviceStateChange(state); Put put = new Put(rowkey); put.addColumn(ISiteWhereHBase.FAMILY_ID, qualifier, payload); context.getDeviceEventBuffer().add(put); // Update state if requested. if (request.isUpdateState()) { context.getAssignmentStateManager().addStateChange(assignment.getToken(), state); } return state; }
/** * Create a new device alert entry for an assignment. * * @param context * @param assignment * @param request * @return * @throws SiteWhereException */ public static IDeviceAlert createDeviceAlert(IHBaseContext context, IDeviceAssignment assignment, IDeviceAlertCreateRequest request) throws SiteWhereException { long time = getEventTime(request); byte[] rowkey = getEventRowKey(context, assignment, time); byte[] qualifier = getQualifier(EventRecordType.Alert, time, context.getPayloadMarshaler().getEncoding()); // Create alert and marshal to JSON. DeviceAlert alert = SiteWherePersistence.deviceAlertCreateLogic(assignment, request); String id = getEncodedEventId(rowkey, qualifier); alert.setId(id); byte[] payload = context.getPayloadMarshaler().encodeDeviceAlert(alert); Put put = new Put(rowkey); put.addColumn(ISiteWhereHBase.FAMILY_ID, qualifier, payload); context.getDeviceEventBuffer().add(put); // Update state if requested. if (request.isUpdateState()) { context.getAssignmentStateManager().addAlert(assignment.getToken(), alert); } return alert; }
@Override public void handleSendDeviceStreamDataRequest(String hardwareId, ISendDeviceStreamDataRequest request) throws SiteWhereException { IDeviceAssignment assignment = getCurrentAssignment(hardwareId); IDeviceStreamData data = SiteWhere.getServer().getDeviceEventManagement(getTenant()) .getDeviceStreamData(assignment.getToken(), request.getStreamId(), request.getSequenceNumber()); SendDeviceStreamDataCommand command = new SendDeviceStreamDataCommand(); command.setStreamId(request.getStreamId()); command.setSequenceNumber(request.getSequenceNumber()); command.setHardwareId(hardwareId); if (data != null) { command.setData(data.getData()); } else { command.setData(new byte[0]); } SiteWhere.getServer().getDeviceCommunication(getTenant()).deliverSystemCommand(hardwareId, command); }