Hola estoy empezando un proyecto con IoT Central, no se si alguien me pueda recomendar algunos sitios donde pueda ver ejemplos de como enviar telemetría, ya consulte la documentación de microsoft y no lo encontre.
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes MenúCita de: rub'n en 19 Abril 2021, 13:21 PM
dog, create otro metodo con la anotacion @PutMapping para exponer tu endpoint de manera sincrona con RestTemplate, ella actua en otra capa de abstraccion sin tocar el low level api con HttpURLConnection a mano...
Para consumirla usa un cliente estilo HttpClient de Java 11 que es ahora nativo, OKHttpClient, retrofit etc. y te ahorras mas dolor de cabeza, mas facil de depurar etc.
Cita de: ryhuso en 19 Abril 2021, 13:05 PMel save si lo ejecuta bien
no arroja ningún error, pero se que no se ejecuta por que en la pagina web donde tiene que aparecer el dispositivo creado no existe.
Probando el método solo si me crea lo que quiero pero al ejecutarlo desde el controller creo que viene el problema, no se si tengo que configurar algo o mandar la petición de otro modo.
Cita de: rub'n en 19 Abril 2021, 12:56 PMno arroja ningún error, pero se que no se ejecuta por que en la pagina web donde tiene que aparecer el dispositivo creado no existe.
Entiendo que el save lo esta haciendo bien... o no?
manda el log que arroja este metodo peticionHttpPut()
Cita de: rub'n en 19 Abril 2021, 12:48 PMlo que pasa es que si ejecuto post me pone un id aleatorio por eso uso el put para poner el que yo quiero
Pienso que lo mejor seria que crearas otro metodo con la anotacion @PutMapping, logrando que tengas cada metodo para una unica operacion (PUT, POST, GET...
Aqui usas un POST para hacer un save a la misma vez que quieres tambien actualizar un item.
@PostMapping("/dispositivos")
@ResponseStatus(code = HttpStatus.CREATED)
public ResponseEntity<?> crear(@Valid @RequestBody Dispositivo dispositivo, BindingResult result) throws Exception {
Dispositivo dispositivonew = null;
Map<String, Object> response = new HashMap<>();
if (result.hasErrors()) {
List<String> errors = result.getFieldErrors().stream()
.map(err -> "El campo '" + err.getField() + "' " + err.getDefaultMessage())
.collect(Collectors.toList());
response.put("errors", errors);
return new ResponseEntity<Map<String, Object>>(response, HttpStatus.BAD_REQUEST);
}
try {
peticionHttpPut(dispositivo);
dispositivonew = dispositivoService.save(dispositivo);
} catch (DataAccessException e) {
response.put("mensaje", "Error realizar al insertar en la base de datos!");
response.put("error", e.getMessage().concat(": ").concat(e.getMostSpecificCause().getMessage()));
return new ResponseEntity<Map<String, Object>>(response, HttpStatus.INTERNAL_SERVER_ERROR);
}
response.put("mensaje", "El Dispositivo ha sido creado con éxito!");
response.put("dispositivo", dispositivonew);
return new ResponseEntity<Map<String, Object>>(response, HttpStatus.CREATED);
}
public void peticionHttpPut(Dispositivo dispositivo) throws Exception {
URL url = new URL("https://hu3-gp9yw4dci7.azureiotcentral.com/api/preview/devices/"
+ dispositivo.getIdentificadorDispositivo());
HttpURLConnection conexion = (HttpURLConnection) url.openConnection();
conexion.setRequestMethod("PUT");
conexion.setDoOutput(true);
conexion.addRequestProperty("Authorization",
"SharedAccessSignature sr=a8b19977-9c37-4e01-bc86-f5990544bcb8&sig=gaSLKfM9MUo6Fsx9XVjY%3D&skn=admin&se=1650104456226");
conexion.setRequestProperty("Content-Type", "application/json");
String nombre = dispositivo.getNombre();
String instanceOf = "dtmi:modelDefinition:a2zj2t:b6dfy";
Map<String, Object> map = new HashMap<>();
map.put("displayName", nombre);
map.put("instanceOf", instanceOf);
map.put("simulated", false);
map.put("approved", true);
JSONObject json = new JSONObject(map);
String jsonInputString = json.toString();
try (OutputStream os = conexion.getOutputStream()) {
byte[] input = jsonInputString.getBytes("utf-8");
os.write(input, 0, input.length);
}
}