Dudas sobre los datos


#1

Buenas tardes a tod@s. Voy entrando en Thinger, que me parece una plataforma excelente, pero tengo algunas dudas sobre la presentación de datos.

Trabajo con Arduino, una ESP8266 y un sensor BME280, que me da los datos de temperatura, humedad y presión. Tengo otra estación meteo independiente, que también me da estos datos, más afinados y fáciles de leer (imagen 1):

Los datos que me da la descarga de data bucket de Thinger, es cómo se muestra en la imagen 2:

1.- En la primera imagen la fecha y las horas, están en columnas diferencias, lo que facilita la lectura y gestión posterior.
Por contra, en los datos del data bucket sobre la fecha y hora, están en una única columna y pegados, lo que entorpece mucho la lectura y dificulta la gestión. Da mucho trabajo la gestión de esta columna, ya que para gestionarla, hay que modificar demasiados parámetros.

Hay manera de que los datos se presenten como en la primera imagen, sin necesidad de manipulaciones posteriores?

2.- Como se ve en la imagen 1, las horas de impresión de datos, se corresponde exactamente a cada 60 minutos, mientras que en la imagen 2, de tanto en tanto imprime datos de una misma hora en diferentes minutos.

Hay manera que los datos los imprima cada 60 minutos, sin repeticiones separadas por minutos?

3.- Los datos de las columnas de humedad y presión los imprime de forma extraña, por ejemplo:
Humedad Thinger: 541.289, cuando la correcta sería 54.1, es decir, presenta tres dígitos + punto + tres dígitos, cuando debería imprimir únicamente dos dígitos + punto + 1 (o 2) dígitos.

Presión Thinger: 101242 + punto + 0, cuando la correcta sería 1012.42, es decir, presenta seis dígitos + punto +cero, cuando debería imprimir únicamente cuatro dígitos + punto + uno (o dos) dígitos.

Desconozco si este tipo de medidas corresponden a la manera anglosajona de exponer estos datos, o se trata de otra cosa. Hay manera de manipular la presentación de estos valores, en alguna función de Thinger para adaptarlos a lo expuesto?

Bueno, pues por el momento estas son la dudas con las que me encuentro. No se si hay, ni donde (si lo hay), algún apartado donde este tipo de “disfunciones” puedan modificarse a gusto del consumidor.

Venga, pues muchas gracias por la atención y la ayuda. Esta plataforma me gusta mucho y, si logro solucionar estos “detallitos”, ya será la bomba.

Salu2 cordiales.


#2

Yo trunco las posiciones decimales en las variables en el microcontrolador y me va bien, es mas eficiente al momento de que no se envían todos los decimales que logra calcular el microcontrolador, solo 2 posiciones o 1 posición de acuerdo a la precisión que se requiera:

Lo hago con la siguiente función:

float round_to_dp( float in_value, int decimal_place )
{
  float multiplier = powf( 10.0f, decimal_place );
  in_value = roundf( in_value * multiplier ) / multiplier;
  return in_value;
}

Donde
in_value es la variable con todos sus decimales
decimal_place es el número de posiciones después de la coma a conservar.

Y la invoco en la variable que deseo truncar, obviamente antes de que se reporte a thinger.

Éxitos.


#3

Gracias por la respuesta, Ega, pero de donde sacas estas instrucciones? En que lugar están? Yo he adaptado el siguiente sketch a mis necesidades (no me deja subir archivos zip, por eso lo cuelgo entero):


#include <ESP8266WiFi.h> //Librería de conexión WiFi del módulo ESP8266
#include <ThingerESP8266.h> //Librería de la plataforma thinger.io

#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>

// Assignar pins ESP8266 a pins arduino_
#define D1 5
#define D2 4
#define D4 2
#define D3 0

// Assignar SPI als pins_
#define BME_SCK D1 //SCL BME280
#define BME_MOSI D2 //SDA BME280
#define BME_CS D3 //SCB BME280
#define BME_MISO D4 //SD0 BME280

#define SEALEVELPRESSURE_HPA (1013.25) //Pressió aproximada. Es pot modificar_

Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); //Programari SPI_

unsigned long delayTime;

//Paràmetres del connexió thinger.io
#define username “XXXXXXX”
#define deviceId “BME280”
#define deviceCredentials “XXXXXxXXXXX”

ThingerESP8266 thing (username, deviceId, deviceCredentials);

//Paràmetres de connexió WiFi_
const char WiFi_ssid[] = “MiFibra-86A4”; //Nom de xarxa WiFi
const char WiFi_password[] = “cJsbN65Q”; //Clau de xarxa WiFi

void setup()
{
Serial.begin (115200); //Obre connexió amb serial
Serial.println (F (“BME280 test”));

bool status;

// Configuració per defecte
status = bme.begin();
if (!status)
{
Serial.println (“No es troba el sensor BME280. Verificar cablejat!”);
while (1);
}

Serial.println ("-- Test predeterminat --");
delayTime = 1000;

Serial.println();

//Inicialització WiFi per comunicar-se amb l’API
thing.add_wifi (WiFi_ssid, WiFi_password);

//Inicializació de la lectura de dades des de l’API
thing[“BME280”] >> [](pson& out)

{
out [“Temperatura”] = bme.readTemperature();
out [“Humitat”] = bme.readHumidity();
out [“Pressió”] = bme.readPressure();
};
}

void loop()
{
thing.handle();
printValues();
delayTime = 1000; //delay(delayTime);
}

void printValues() //Impressió valors a serial
{
Serial.print (“Temperatura = “);
Serial.print (bme.readTemperature() / 1.12); //1(bme.readTemperature());
Serial.println (” *C”);
Serial.print (“Humitat = “);
Serial.print (bme.readHumidity() / 0.85); //2(bme.readHumidity());
Serial.println(” %”);

Serial.print ("Pressió = ");
Serial.print (bme.readPressure() / 100.0F);  //*3*
Serial.println (" hPa");

// Serial.print (“Altura aproximada = “);
// Serial.print (bme.readAltitude(SEALEVELPRESSURE_HPA));
// Serial.println (” m”);

delay (1000);

Serial.println();

}

/*
1 Si es puja l’últim valor (10), el graus marquen menys
2 Si es puja l’últim valor (84), el percentage marca menys
3 Si es puja l’últim valor (9F), la pressió marca menys
*/

No encuentro el lugar de modificación de decimales en mi sketch, máxime teniendo en cuenta que los envía según la imagen 1, y es Thinger el que los presenta de forma tan rara.

Y sobre la repetición de datos en una hora determinada con variación de minutos, entiendo que el ESP8266 envía datos cada x segundos, los mismos que imprime en el serial, y sería Thinger el que grabaría el dato (un solo dato) cada 60 minutos en data bucket, prescindiendo del resto.

La configuración de la gráfica de la temperatura es la siguiente. Es correcta?

Que te parece?

Gracias por la atención y la ayuda.

Salu2 cordiales


#4

Algo como esto debería funcionar

thing[“BME280”] >> [](pson& out)
{
out [“Temperatura”] = float round_to_dp( bme.readTemperature(), 2);
out [“Humitat”] = float round_to_dp( bme.readHumidity(), 2);
out [“Pressió”] = float round_to_dp( bme.readPressure(), 2);
};

Por supuesto debes incluir la función del post previo en el sketch, fuera del loop.

Avisame si no funciona.

Saludos,