Блок для сервиса IFTTT

Создаем свой блок. Вопросы, помощь знатоков.
Ответить
Аватара пользователя
vlaks
Рядовой
Сообщения: 46
Зарегистрирован: 08.09.2015{, 07:42}
Репутация: 0
Откуда: Сургут

Блок для сервиса IFTTT

#1

Сообщение vlaks » 11.12.2019{, 19:11}

Добрый день. Кто сможет осилить пользовательский блок для отправки webhook на IFTTT

Вот пример в как это работает ARDUINO TO IFTTT

Код: Выделить всё

#include "ESP8266.h" // для работы с esp8266
#include <SoftwareSerial.h> // чтобы добавить больше пинов UART 
#include <math.h> // чтобы высчитать логарифм

#define SSID        "Arduino" // имя вашего wi-fi
#define PASSWORD    "12345678" // пароль вашего wi-fi
#define LIGHT_PIN     A0 //  пин подключения фоторезистора
 
SoftwareSerial mySerial(4, 5); // пины подключения по UART
ESP8266 wifi(mySerial); // говорим esp8266, что она будет работать через пины UART
int reading = 9; // пин, который считывает значение с кнопки `  
boolean  currentButton = 0 ; // настоящее значение кнопки
boolean but = 0; // прошлое значение кнопки
String maker_ID = "kYVzddd-4SGWuUGQzhxtAPwwBbcssddZ8lJfaYss8ffaAnib7mIk4eGX8Z"; // ваш ключ от сайта dweet.io
 
void setup() {
  Serial.begin(9600); // открываем serial соединение
  if (wifi.joinAP(SSID, PASSWORD)) { // если мы подключились к нашей сети
    Serial.println("Press the button"); //пишем в мониторе порта, чтобы нажали на кнопку
  } else {
    Serial.println("Wi-Fi connection error"); //в случае, если мы не подключимся к сети, нам выдадут ошибку
  }
}

float Light () // функция, которая возвращает значение света в люксах
{
  float r_light = 10.0/(1023.0/analogRead(LIGHT_PIN) - 1.0);
  float light = 10.0*pow(14.0/r_light, 1.6);
  return (light);
}

boolean Button( boolean got ) // функция, которая принимает предыдущее значение нажатия кнопки и отправляет текущие значение
{
  boolean current = digitalRead(reading);
  if( !got == current)
    {
      delay(10);
      current = digitalRead(reading);
    }
    return(current);
 }
 
void loop() {
  
 currentButton = Button(but);// находм состояние кнопки
  if (currentButton == 1 && but ==0) // если кнопка была нажата и отжата
  {
      String value1 = String(Light ());// создаем строковую переменную нашего света
      sendTwitter (value1);// отправляем ее
      Serial.println("Data sent"); //пишим. что данные отправлены
    }
  but = currentButton; //запоминаем текущее состояние кнопки
}
 
void sendTwitter( String value1) 
{
  if (wifi.createTCP("maker.ifttt.com", 80)) { // если нам удалось создать TCP соединение
    String request = "GET /trigger/Message/with/key/" + maker_ID + 
    "?value1=" + value1 + " HTTP/1.1\r\n"; // создаем переменную request  в виде строки (заполняем GET-запрос)
    request += "Host: maker.ifttt.com\r\n\r\n"; // закрываем GET-запрос в строке
    wifi.send(request.c_str(), request.length()); // отправляем данные в массиве (строка с-стиля) и общее количество байтов
    wifi.releaseTCP(); // закрываем TCP соеденение 
  }
  else 
  {
    Serial.println("create tcp error"); // в случае, если мы не создали TCP соеденение, нам выдадут ошибку
  }
}

fsergei70
Капитан
Сообщения: 786
Зарегистрирован: 17.11.2015{, 20:36}
Репутация: 54
Имя: Сергей

Блок для сервиса IFTTT

#2

Сообщение fsergei70 » 11.12.2019{, 19:52}

А у вас этот код компилируется?

Аватара пользователя
vlaks
Рядовой
Сообщения: 46
Зарегистрирован: 08.09.2015{, 07:42}
Репутация: 0
Откуда: Сургут

Блок для сервиса IFTTT

#3

Сообщение vlaks » 11.12.2019{, 20:16}

Даже не пробовал... надо библиотеки ставить что в примере описаны....
Или это вопрос с подвохом?

Отправлено спустя 19 минут 24 секунды:
Вот ещё пример как люди это описывают: https://forum.arduino.cc/index.php?topic=598650.0


Код: Выделить всё

#include <ESP8266WiFi.h>
#include <arduino.h>




int inputVal = 0;


const char* myKey = ""; // your maker key here
const char* ssid = ""; // your router ssid here
const char* password = ""; // your router password here
const char* host = "maker.ifttt.com";





bool connectedToWiFI = false;
volatile int flag = false;
const char* PIN_state = "Closed";


void PINStatus() {
  PIN_state = "Open"; 
  flag = true;
}

const int sharp = A0;

// Variables will change:
int buttonPushCounter = 0;   // counter for the number of button presses
int buttonState = 0;         // current state of the button
bool lastcurrentState = false;     // previous state of the button

void setup() {
 
 
  // initialize the button pin as a input:
  pinMode(sharp, INPUT);
  // initialize the LED as an output:

  // initialize serial communication:
  Serial.begin(9600);
  delay(200);
   
  WiFi.begin(ssid, password);
   
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
    }
 
  Serial.println("test");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
   
}





void loop() {
 
 
  Serial.print("connecting to ");
  Serial.println(host);
         
  WiFiClient client;
  const int httpPort = 80;
     
  if (!client.connect(host, httpPort)) {
  Serial.println("connection failed");
  }   
  //return;
  buttonState = analogRead(sharp);
 
  bool currentState = false;
 
 
 
    if (currentState != lastcurrentState) {
      // if the state has changed, increment the counter
      if (buttonState <= 800) {
        // door closed
        currentState = false;
        buttonPushCounter++;
        Serial.println("closed");
        String url = "/trigger/garage_door/with/key/";
        url += myKey;
        Serial.print("Requesting URL: ");
        Serial.println(url);
        client.print(String("POST ") + url + " HTTP/1.1\r\n" + "Host: " + "maker.ifttt.com" + "\r\n" + "Content-Type: application/x-www-form-urlencoded\r\n" + "Content-Length: 13\r\n\r\n" + "value1=" + "Closed" + "\r\n");
       
      } else if (buttonState >= 800) {
        // if the current state is LOW then the button went from on to off:
        currentState = true;
        Serial.println("open");
        String url = "/trigger/garage_door/with/key/";
        url += myKey;
        Serial.print("Requesting URL: ");
        Serial.println(url);
        client.print(String("POST ") + url + " HTTP/1.1\r\n" + "Host: " + "maker.ifttt.com" + "\r\n" + "Content-Type: application/x-www-form-urlencoded\r\n" + "Content-Length: 13\r\n\r\n" + "value1=" + "Open" + "\r\n");
      }
      // Delay a little bit to avoid bouncing
      delay(50);
    }
    // save the current state as the last state, for next time through the loop
    lastcurrentState = currentState;
  }
Отправлено спустя 7 минут 17 секунд:
НУ и ещё пример..

Для отправки данных на сервис IFTTT составляется GET-запрос, состоящий
из адреса одного из полей канала и самого пересылаемого значения. Составление
GET-запроса на примере подсистемы предотвращения затопления, представлено
на рисунке 28.

Код: Выделить всё

void requestURL_IFTTT(const char * host, uint8_t port, int read_water, int read_dirPin)
{
 //Подключаемся к домену и порту
 if (!client.connect(host, port))
 {
 return;
 }
 // Создаем URI запроса
 String url = "/trigger/";
 url += eventName;
 url += "/with/key/";
 url += key;
 url += "?value1=";
 url += String(read_water);
 url += "&value2=";
 url += String(read_dirPin);
 // Отправляем запрос на сервер
 client.print(String("GET ") + url + " HTTP/1.1\r\n" +
 "Host: " + host + "\r\n" +
 "Connection: close\r\n\r\n");
 int timeout = millis() + 5000;
 // Проверяем продолжительность ожидания ответа
 while (client.available() == 0)
 {
 if (timeout - millis() < 0)
 {
 client.stop();
 return;
 }
 }
}

Ответить

Вернуться в «Разработка пользовательских блоков»