Cambiar , por . para decimales en Node-Red (Solucionado)

Todo relacionado con node red
Responder
Juan Ramon
Mensajes: 323
Registrado: Mar Feb 12, 2019 7:52 pm
Ubicación: Alicante

Cambiar , por . para decimales en Node-Red (Solucionado)

Mensaje por Juan Ramon » Jue Feb 27, 2020 9:06 pm

Muy buenas a todos.
Me surge una de mis dudas y me gustaría preguntaros como lo tenéis solucionado.
Con la versión nueva en el servidor he tenido que modificar el envió de temperatura a alexa para que esta me la dicte cuando se la pregunto.
No se si estoy equivocado o no me explico correctamente, pero voy a intentarlo.
El dato de los sensores que se recibe por mqtt es una string, la convierto en numérico de la siguiente manera

Código: Seleccionar todo

var temperatura=Number(msg.payload);
esto me devuelve el valor correcto en numérico.

El problema esta cuando lleva decimales, que redondea y no me envia el valor real.
Para enviar el objeto a alexa si lleva decimales tiene que ser con .

He probado enviando con (inject) una string "19" y "19,5" a las funciones para el envió a alexa lo hace perfecto solo cuando no lleva decimal.
Si envió la string "19" y "19.5" el envió siempre es correcto.

Sabéis si se puede o como poder cambiar la coma por el punto de una forma sencilla?
En la versión antigua para la temperatura enviaba los tres dígitos y en la función de node-Red lo dividía por 10 y funcionaba perfecto.

Muchas gracias.
Juan Ramón.

Avatar de Usuario
Sigmundfreud
Mensajes: 374
Registrado: Mar Feb 12, 2019 8:23 pm
Ubicación: Girona

Re: Cambiar , por . para decimales en Node-Red

Mensaje por Sigmundfreud » Jue Feb 27, 2020 10:12 pm

Buenas juan ramón

Y crear una funcion que lea cada valor del sensor y que si detecta una coma lo cambie por "." Y lo publique?

Puedes usar el metodo replaceAll()

https://www.arduino.cc/en/Tutorial/StringReplace

No sé si es algo así lo que buscas
Una persona que nunca se ha equivocado es porque nunca ha probado nada nuevo
(Albert Einstein)

En mi lista ya hay 5 mkr, 1shield excontrol, 1 extensión, 1 nano iot33, multiples CI...... :lol: :lol: :lol:

Juan Ramon
Mensajes: 323
Registrado: Mar Feb 12, 2019 7:52 pm
Ubicación: Alicante

Re: Cambiar , por . para decimales en Node-Red

Mensaje por Juan Ramon » Vie Feb 28, 2020 8:14 am

Muchas gracias Sigmundfreud
Una de las opciones que tengo en mente es detectar la longitud de la string, si es de 2 caracteres (nº entero) no hacer nada, si es de 4 caracteres (nº con decimales) cambiar carácter 3 y listo.
Estudiare como integrar lo que aportas.
Pero el preguntarlo es por si conocéis algún comando como el Number() que contemplara la coma como separador en lugar del punto.
Juan Ramón.

Peque
Mensajes: 55
Registrado: Sab Nov 02, 2019 5:27 am

Re: Cambiar , por . para decimales en Node-Red

Mensaje por Peque » Vie Feb 28, 2020 10:43 am

Lo mejor es como te comenta Sigmundfreud

Yo todavia no lo he tocado y no meto decimales... me redondea.

Mira asi..

Código: Seleccionar todo

var temperatura=Number(msg.payload.replace(",","."));
O si tienes que hacer una conversion mas.

Código: Seleccionar todo

var t=msg.payload.toString('utf8');
var temperatura=Number(t.replace(",","."));

msg.payload.replace

Juan Ramon
Mensajes: 323
Registrado: Mar Feb 12, 2019 7:52 pm
Ubicación: Alicante

Re: Cambiar , por . para decimales en Node-Red

Mensaje por Juan Ramon » Vie Feb 28, 2020 1:23 pm

Muchas gracias Peque

Código: Seleccionar todo

var temperatura =Number(msg.payload.replace(",","."));
Esto es lo que necesitaba, ademas probado con números negativos por si alguien lo necesita.
No tienes los permisos requeridos para ver los archivos adjuntos a este mensaje.
Juan Ramón.

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado