ESP8266/Slack> Slack 채널에 메시지 게시 (SSL 인증 실패 버전)

사용 장비
ESP-WROOM-02 ユニバーサル基板実装

ESP8266에서 Slack에 게시하려고합니다.

참고 h tp : // 쿠이타. 코 m / 키요 피코 / ms / 4c525103700f52cb2894
참고 h tp // w w. 이오 t 푹신 st. 코 m / 2016 / 3 / 4 / 에스 8266 - 아 r 즈이 노 - 푸 아테 r
참고 h tp // 냥코 추. 하테나 bぉg. 코m/엔트리/2016/08/14/144918

v0.1



code > WiFi 설정



WifiConfig.h :
자신의 액세스 포인트를 설명하는 파일.
참고: GitHub 등에 체크인하지 마십시오.


static const char *kSsid = "pi-31415-g";
static const char *kPass = "47voyager";

code > Slack 설정



slackConfig.h :
Slack 채널, Incoming WebHooks 등의 구성 파일.

참고: GitHub 등에 체크인하지 마십시오.


static const char *kSlackUrl = "/services/PIPIPI/NAPIER/3141592653589793228";
static const String kSlackChannel = "#amazon_dash";
static const String kSlackUsername = "7of9";

kSlackUrl 에는 Incoming WebHooks URL /services/ 로 시작하는 문자열을 설정한다.

code > 본체



참고의 링크의 코드를 기초로 이하로 했습니다.

esp2866_161230_slack
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include "WifiConfig.h" // for [kSsid],[kPass]
#include "slackConfig.h" // for [kSlackUrl]

/*
 * v0.1 Dec. 31, 2016
 *   Based on:
 *   http://qiita.com/kiyopikko/items/4c525103700f52cb2894
 *   http://www.iotforest.com/2016/3/4/esp8266-arduino-feather-huzzah-using-slack-integration
 * 
 */

static const char *kSlackHost = "hooks.slack.com";
static const int kHttpsPort = 443;

void WiFi_setup()
{
  WiFi.begin(kSsid, kPass);
  while( WiFi.status() != WL_CONNECTED) {
    delay(500); // msec
  }
  Serial.println(WiFi.localIP());
}

void slack_submit()
{
  WiFiClientSecure client;

  // connect
  if (!client.connect(kSlackHost, kHttpsPort)) { 
    Serial.println("slack connection failed");
  } else {
    Serial.println("slack connection: OK");    
  }

  // SSL Certificate finngerprint for the host
  const char* fingerprint = "‎‎‎‎ab f0 5b a9 1a e0 ae 5f ce 32 2e 7c 66 67 49 ec dd 6d 6a 38";
  // verify the signature of the ssl certificate
 if (client.verify(fingerprint, kSlackHost)) {
   Serial.println("ssl cert matches");
 } else {
   Serial.println("ssl cert mismatch");
 }

  // submit
  String message = "test from ESP8266";
  String payload="payload={\"channel\": \"" + kSlackChannel + "\", \"username\": \"" + kSlackUsername 
  + "\", \"text\": \"" + message + "\", \"icon_emoji\": \":ghost:\"}";
  Serial.println(payload.c_str());

  client.print("POST ");
  client.print(kSlackUrl);
  client.println(" HTTP/1.1");
  client.print("Host: ");
  client.println(kSlackHost);
  client.println("User-Agent: ArduinoIoT/1.0");
  client.println("Connection: close");
  client.println("Content-Type: application/x-www-form-urlencoded;");
  client.print("Content-Length: ");
  client.println(payload.length());
  client.println();
  client.println(payload);

  // リクエストを受け取る前に5秒以上は待った方がいいらしい
  delay(7000);

  while(client.available()) {
    String line = client.readStringUntil('\r');
    Serial.println(line);
  }
  client.stop();
}

void setup() {
  Serial.begin(115200);
  Serial.println(""); // to separate line

  WiFi_setup();
  slack_submit();
}

void loop() {
  // put your main code here, to run repeatedly:
}

ESP8266을 시작하면 한 번만 Slack에 게시합니다.

결과

192.168.10.2
slack connection: OK
ssl cert mismatch
payload={"channel": "#amazon_dash", "username": "7of9", "text": "test from ESP8266", "icon_emoji": ":ghost:"}

다음과 같이 게시가 가능했습니다.


ssl cert mismatch 되고 있는 점은 내년의 과제다.

좋은 웹페이지 즐겨찾기