The REST commands and sintaxe of Thinger.io

Where do i get the manual of the REST commands of Thinger.io?
I think that it would be very usefull to the development process.

I thank if someone can help me.

You are totally right! However there is an important lack of time to develop such documentation. I always recommend to debug the console web page (With the Chrome JavaScript console) to see all the HTTP requests issued to the api.thinger.io host, as the console is a full REST client.

The next phases of the project will be:

  • Finish Data Buckets (Next week)

  • Prepare Docker containers for self deployment (End of July)

  • Prepare documentation of all REST calls (August)

If you want to collaborate with the community, you can also collaborate to the documentation, as all the current docs at http://docs.thinger.io is hosted on GitHub Pages :slight_smile:

Sorry I cannot give you much more details right now. However, tell me what kind of control or interaction you want to achieve specifically, so I can help you to get it integrated.

Good Morning Alvaro.

I could add a widget on / off for two leds in this project. What will I need now is to read the temperature of a LM35 on the same project.
This project is purely didactic. However, what interests me is to learn the standard for this type of circuit.

Reading the sensor temperature should be easy, did you tried to use the example given in this post?

You should take attention to this piece of code and modify it accordingly to read the temperature of the LM35 and setting the result to the out value.

thing["LDR"] >> [](pson & out){
    out = (unsigned int) analogRead(A0);
};

Hope it helps! Also you can post your code and I can help you to modify it to read the sensor value.

LM35 is a digital device with an analog frontend that flows between 0 to 5Vdc… ESP8266 adc rate is only from 0 to 1v and I think that it can’t be solved with a resistor. So better use another sensor like Dallas ds18b20 or an i2c

1 Like

Thank you jtrinc26. This information is very useful to me…
Thats why I couldn’t reach real values.

1 Like

Ola Álvaro.

Tenho a impressão que não preciso escrever em inglês, estou correto?
Álvaro, tenho me divertido um bocado trabalhando nessa plataforma. Estou gostando do que estou descobrindo. Entretanto, tem certos recursos que ainda me deixam com dúvida. Enviar e-mail, por exemplo, quando a temperatura ou a umidade ultrapassam determinado limite. Inseri as linhas abaixo no meu código, com cada coisa no seu lugar, é claro. Li como criar um e-mail para endpoint e como inserir o código para postá-lo. Funcionou uma vez somente, e assim mesmo, postando o json.

unsigned long lastCheck = 0;
loop(){
    thing.handle(); // required thing handle
    unsigned long currentTs = millis();
    if(currentTs-lastCheck>=60*60*1000){
        lastCheck = currentTs;
        if(dht.readTemperature()>30){
            thing.call_endpoint("high_temp_email");
        }
    }

O código acima eu tirei da documentação. Aparentemente funcionou. Mas

Aí vai o código completo:

#include <ESP8266WiFi.h>
#include <ThingerWifi.h>
#include "DHT.h"


// #include <SPI.h> //LM35

#define DHTPIN 5
#define DHTTYPE DHT11

#define USERNAME "your_username"
#define DEVICE_ID "your_device"
#define DEVICE_CREDENTIAL "your_credentials"

#define SSID "R4INFO"
#define SSID_PASSWORD "*************"

int garagem = 16;
int tv = 12;
unsigned long lastCheck = 0; // Definicao usada para o Endpoint

ThingerWifi thing(USERNAME, DEVICE_ID, DEVICE_CREDENTIAL);
DHT dht(DHTPIN, DHTTYPE);

void setup() { 
  dht.begin();
  thing.add_wifi(SSID, SSID_PASSWORD);
  
  pinMode(garagem, OUTPUT);
  pinMode(tv, OUTPUT);
  
 // resource output example (i.e. reading a sensor value)
  thing["Umidade"] >> outputValue(dht.readHumidity());
  thing["Temperatura"] >> outputValue(dht.readTemperature());    
  thing["led_1"] << digitalPin(garagem);
  thing["led_2"] << digitalPin(tv);

};

void loop() {
    thing.handle(); // required thing handle
    unsigned long currentTs = millis();
    if(currentTs-lastCheck>=60*60*1000){
        lastCheck = currentTs;
        if(dht.readHumidity()>35){
            thing.call_endpoint("Email_alerta");
        }
    }
}

Como você pode perceber, eu usei o código da documentação para estabelecer 35 % de umidade para disparar um e-mail de alerta. O e-mail eu criei em Endpoints. Porém, não funcionou como eu imaginei. Demora muito até o sistema enviar o e-mail. Fiz várias simulações. É assim mesmo?

Ainda estou no começo, mas vejo muitas possibilidades nessa plataforma.

Grande abraço e muito obrigado pela atenção. Acredito que vamos nos falar muitas vezes mais.
Até.


Como você pode perceber, eu usei o código da documentação para estabelecer 35 % de umidade para disparar um e-mail de alerta. O e-mail eu criei em Endpoints. Porém, não funcionou como eu imaginei. Demora muito até o sistema enviar o e-mail. Fiz várias simulações. É assim mesmo?

Ainda estou no começo, mas vejo muitas possibilidades nessa plataforma.

Grande abraço e muito obrigado pela atenção. Acredito que vamos nos falar muitas vezes mais.
Até.

Alvaro. Bom dia.

Desculpe-me por importuná-lo, mas tenho uma dúvida:
Como codificar a seguinte situação: tenho dois leds, os quais tenho o controle sobre eles através do dashboard (liga/desliga). Também tenho um DHT11 medindo temperatura e umidade. Também devidamente exibidos no dashboard. Bem, como eu faço para instruir o sistema para acender um desses leds quando a temperatura ou a umidade atingir um determinado ponto. Por exemplo, a temperatura chegou a 30°C, então ativar o led_1. Eu tentei usar o código da documentação, mas não saiu como eu esperava. Usei o código abaixo:

thing["led"] << [](pson& in){
  digitalWrite(10, in ? HIGH : LOW);
};

Mas não funcionou (do jeito que eu esperava).

Você pode me dar uma força nessa questão?

Desde já te agradeço.

Forte abraço.

Ricardo W. Teixeira

I know that one! jajaja
You could include that thermostat funcionality in a thinger resource if you want to change the breack value or the hysteresis ussing a callback… but you will have to introduce it in another rutine and call this sometimes from loop, because Thinger resources only execute when an open web session of the device exists (in the API or in a dashboard).

int lastCheck, BreackTemp;

 void setup(){
        thing["thermostate"] << inputValue(BreackTemp);
 }

void loop() {
   thing.handle();
  
   if(lastCheck == millis()-10000){  //execute each 10 seconds

     if (dht.readTemperature()>BreackTemp){
         digitalWrite(13, HIGH);
     }else{
         digitalWrite(13,LOW);
     }
     lastCheck = millis();
  }

}

But, if you only want to put on/off the leds when the temperature or the humidity reach a value, why don´t you make it directly in the loop()?

void loop() {
   thing.handle();

   if (dht.readTemperature()>BreackTemp){
        digitalWrite(13, HIGH);
   }else{
       digitalWrite(13,LOW);
   }
}

Hi jtrinc26.

I think that it is exactly what I need… thank you so much…
I go for hands-on now …
tks

1 Like

Rwteixeira, be carefull I was talking with Alvaro about a bug in the first example code… now its correct.