Hola, estoy intentando enviar las temperaturas de unos termometros ds18b20 a través de una Rasberry, para ello tengo dos funciones, una me saca el código del sensor y la otra con el código del sensor me saca la temperatura, funcionan las dos perfectamente, pero después a la hora de mandar la información a thinger.io me da error, he estado buscando información pero teniendo raspberry como cliente, no he encontrado mucha, copio el códio a ver si alguien me puede ayudar. gracias, un saludo.
#include "thinger/thinger.h"
#include <iostream>
#include <dirent.h>
#include <vector>
#include <string>
#include <stdio.h>
#include <cstdio>
#define USER_ID "usuario"
#define DEVICE_ID "rasberry1"
#define DEVICE_CREDENTIAL "password"
using namespace std;
vector<string> termometros;
float min_temp=-30;
float max_temp=20;
void busca_termometros()
{
DIR * directorio;
struct dirent * elemento;
string elem, ruta="";
string rutaTermometros="/sys/bus/w1/devices/";
if (directorio = opendir(rutaTermometros.c_str()))
{
while (elemento = readdir(directorio))
{
elem = elemento->d_name;
// if (elem != "." && elem != "..") cout << elem << endl;
if (elem.substr(0,2)=="28"){
// ruta="/sys/bus/w1/devices/"+elem+"/w1_slave";
termometros.push_back(elem);
//cout << ruta << endl;
//cout << elem << endl;
}
}
}
closedir(directorio);
}
float get_temperaturaf (string ruta_termometro){
//pasamos el estring de ruta_termometro a un char*
std::string sf = "3.14";
char* char_ruta_termometro = new char[ruta_termometro.size()+1];
std::copy(ruta_termometro.begin(), ruta_termometro.end(), char_ruta_termometro);
char_ruta_termometro[ruta_termometro.size()] = '\0';
float num_temperatura=0, posicion=0;
string str_temperatura="", temporal="";
FILE * archivo;
archivo = fopen(char_ruta_termometro, "r");
char linea[255];
while(fgets(linea, sizeof(linea), archivo)){
temporal=linea;
posicion = temporal.find_last_of("t=");
}
fclose(archivo);
sf=temporal.substr(posicion+1,4);
// sf=str_temperatura;
float float_temperatura = std::stof(sf);
float temperatura_real;
temperatura_real= float_temperatura/100;
return temperatura_real;
}
int main(int argc, char *argv[])
{
thinger_device thing(USER_ID, DEVICE_ID, DEVICE_CREDENTIAL);
string ruta_termometro;
busca_termometros();
for (int i=0; i<termometros.size(); i++){
ruta_termometro="/sys/bus/w1/devices/"+termometros[i]+"/w1_slave";
thing[termometros[i]] = [](pson& in, pson& out){
out["temperatura"] = get_temperaturaf(ruta_termometro);
};
// cout << "La temperatura del termometro " <<termometros[i] <<"es: " << get_temperaturaf(ruta_termometro) << endl;
}
thing.start();
return 0;
}