{"id":18315,"date":"2020-04-14T12:17:37","date_gmt":"2020-04-14T03:17:37","guid":{"rendered":"https:\/\/www.skyarch.net\/blog\/?p=18315"},"modified":"2020-04-21T17:12:59","modified_gmt":"2020-04-21T08:12:59","slug":"m5stack%e3%81%a7slack%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e3%82%b9%e3%83%86%e3%83%bc%e3%82%bf%e3%82%b9api%e3%82%92%e5%8f%a9%e3%81%84%e3%81%a6%e3%82%b9%e3%83%86%e3%83%bc%e3%82%bf%e3%82%b9%e3%82%a2","status":"publish","type":"post","link":"https:\/\/www.skyarch.net\/blog\/m5stack%e3%81%a7slack%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e3%82%b9%e3%83%86%e3%83%bc%e3%82%bf%e3%82%b9api%e3%82%92%e5%8f%a9%e3%81%84%e3%81%a6%e3%82%b9%e3%83%86%e3%83%bc%e3%82%bf%e3%82%b9%e3%82%a2\/","title":{"rendered":"M5Stack\u3067Slack\u30ab\u30b9\u30bf\u30e0\u30b9\u30c6\u30fc\u30bf\u30b9\u5909\u66f4API\u3092\u53e9\u3044\u3066\u30b9\u30c6\u30fc\u30bf\u30b9\u3092\u5909\u66f4\u3057\u3066\u307f\u308b"},"content":{"rendered":"<h2>\u306f\u3058\u3081\u306b<\/h2>\n<p>\u524d\u56de\u306e\u8a18\u4e8b\u306e\u7d9a\u304d\u3068\u306a\u308a\u307e\u3059\u3002<br \/>\n<a href=\"https:\/\/www.skyarch.net\/blog\/?p=18253\">https:\/\/www.skyarch.net\/blog\/?p=18253<\/a><\/p>\n<p>\u3053\u306e\u3054\u6642\u4e16\u3067Zoom\u3092\u7e4b\u304e\u3063\u3071\u306a\u3057\u3067\u4f5c\u696d\u3057\u3066\u3044\u308b\u306e\u3067\u3059\u304c\u3001\u96e2\u5e2d\u4e2d\u30fb\u5225MTG\u53c2\u52a0\u4e2d\u306e\u72b6\u6cc1\u3092\u767a\u4fe1\u3059\u308b\u305f\u3081\u3001M5Stack\u3092\u6d3b\u7528\u3057\u3066\u307f\u308b\u4e8b\u306b\u3057\u307e\u3057\u305f\u3002<\/p>\n<p>\u691c\u7d22\u3057\u3066\u307f\u308b\u3068\u3001Slack\u306eLegacyAPIToken\u3092\u5229\u7528\u3057\u305f\u4f8b\u304c\u591a\u3044\u306e\u3067\u3059\u304c<br \/>\n2020\u5e745\u67085\u65e5\u4ee5\u964d\u306b\u306f\u65b0\u898f\u4f5c\u6210\u51fa\u6765\u306a\u304f\u306a\u308b\u3088\u3046\u306a\u306e\u3067\u3001\u3081\u3093\u3069\u3046\u3067\u3059\u304cSlack App\u3092\u4f5c\u6210\u3057\u3066\u5b9f\u65bd\u3057\u3066\u307f\u307e\u3057\u305f\u3002<\/p>\n<p>Legacy Token\u306b\u3064\u3044\u3066<br \/>\n<a href=\"https:\/\/api.slack.com\/legacy\/custom-integrations\/legacy-tokens\">https:\/\/api.slack.com\/legacy\/custom-integrations\/legacy-tokens<\/a><\/p>\n<h3>\u51fa\u6765\u4e0a\u304c\u3063\u305f\u7269<\/h3>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2020\/04\/M5StackSlack.gif\" alt=\"\" width=\"360\" height=\"240\" class=\"aligncenter size-full wp-image-18325\" \/>\n<p>\u4e88\u3081Button\u306b\u5272\u308a\u5f53\u3066\u305f\u6587\u8a00\/emoji\u30a2\u30a4\u30b3\u30f3\u304cSlack\u753b\u9762\u4e0a\u306b\u53cd\u6620\u3055\u308c\u307e\u3059\u3002<br \/>\n\u30b3\u30fc\u30c9\u4e2d\u306e\u4e0b\u8a18\u3068\u306a\u308a\u307e\u3059\u3002<br \/>\n<code>UpdateSlackStatus(\"Working\", \":floppy_disk:\");<\/code><\/p>\n<h2>\u76ee\u6b21<\/h2>\n<ul>\n<li><a href=\"#overview\">\u624b\u9806\u306e\u6982\u8981<\/a><\/li>\n<li><a href=\"#tejun\">\u624b\u9806<\/a><\/li>\n<li><a href=\"#matome\">\u307e\u3068\u3081<\/a><\/li>\n<\/ul>\n<h2 id=\"overview\">\u624b\u9806\u306e\u6982\u8981<\/h2>\n<ol>\n<li>SlackApp\u306e\u4f5c\u6210<\/li>\n<li>Curl\u30b3\u30de\u30f3\u30c9\u3067\u52d5\u4f5c\u78ba\u8a8d<\/li>\n<li>ArduinoJson\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb(ArduinoIDE\u4e0a)<\/li>\n<li>\u30b3\u30fc\u30c9\u7de8\u96c6<\/li>\n<li>\u5b9f\u6a5f\u78ba\u8a8d<\/li>\n<\/ol>\n<h2 id=\"tejun\">\u624b\u9806<\/h2>\n<h3>SlackApp\u306e\u4f5c\u6210<\/h3>\n<p>\u9069\u5f53\u306a\u540d\u524d\u3067SlackApp\u3092\u4f5c\u6210\u3057\u3001\u4e0b\u8a18\u6a29\u9650\u3092\u4e0e\u3048\u307e\u3059\u3002<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2020\/04\/SlackAppSettings01-986x1024.png\" alt=\"\" width=\"728\" height=\"756\" class=\"aligncenter size-large wp-image-18316\" srcset=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2020\/04\/SlackAppSettings01-986x1024.png 986w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2020\/04\/SlackAppSettings01-289x300.png 289w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2020\/04\/SlackAppSettings01-768x797.png 768w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2020\/04\/SlackAppSettings01-728x756.png 728w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2020\/04\/SlackAppSettings01.png 1414w\" sizes=\"auto, (max-width: 728px) 100vw, 728px\" \/><\/p>\n<p>\u3053\u3061\u3089\u306eToken\u3092\u5229\u7528\u3057\u307e\u3059\u3002<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2020\/04\/SlackAppSettings02-1024x506.png\" alt=\"\" width=\"728\" height=\"360\" class=\"aligncenter size-large wp-image-18317\" srcset=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2020\/04\/SlackAppSettings02-1024x506.png 1024w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2020\/04\/SlackAppSettings02-300x148.png 300w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2020\/04\/SlackAppSettings02-768x379.png 768w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2020\/04\/SlackAppSettings02-1536x759.png 1536w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2020\/04\/SlackAppSettings02-728x360.png 728w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2020\/04\/SlackAppSettings02.png 1862w\" sizes=\"auto, (max-width: 728px) 100vw, 728px\" \/><\/p>\n<h3>Curl\u30b3\u30de\u30f3\u30c9\u3067\u52d5\u4f5c\u78ba\u8a8d<\/h3>\n<h4>\u624b\u59cb\u3081\u306bget\u304b\u3089<\/h4>\n<pre>\n$ curl \"https:\/\/slack.com\/api\/users.profile.get\" \\\n>  -H 'Authorization: Bearer [xoxp-\u3067\u59cb\u307e\u308bToken]'\n{\"ok\":true,\"profile\":{\"title\":\"\",\"phone\":\"\",\"skype\":\"\",\"real_name\":\"\\u795e\\u6d25 \\u5d07\\u58eb\",\"real_name_normalized\":\"\\u795e\\u6d25 \\u5d07\\u58eb\",\"display_name\":\"kouzu \\u795e\\u6d25 \\u5d07\\u58eb\",\"display_name_normalized\":\"kouzu \\u795e\\u6d25 \\u5d07\\u58eb\",\"fields\":[],\"status_text\":\"Working\",\"status_emoji\":\":floppy_disk:\",\"status_expiration\":0...\n<\/pre>\n<h4>post\u3057\u3066\u307f\u308b<\/h4>\n<pre>\n$ curl -X POST -H \"Content-type: application\/json; charset=utf-8\" \\\n>  -H 'Authorization: Bearer [xoxp-\u3067\u59cb\u307e\u308bToken]' \\\n>  -d '{\"profile\":{\"status_text\":\"Working\", \"status_emoji\":\":floppy_disk:\", \"status_expiration\":0}}' \\\n>  \"https:\/\/slack.com\/api\/users.profile.set\"\n\n{\"profile\":{\"title\":\"\",\"phone\":\"\",\"skype\":\"\",\"real_name\":\"\\u795e\\u6d25 \\u5d07\\u58eb\",\"real_name_normalized\":\"\\u795e\\u6d25 \\u5d07\\u58eb\",\"display_name\":\"kouzu \\u795e\\u6d25 \\u5d07\\u58eb\",\"display_name_normalized\":\"kouzu \\u795e\\u6d25 \\u5d07\\u58eb\",\"fields\":[],\"status_text\":\"Working\",\"status_emoji\":\":floppy_disk:\",\"status_expiration\":0...\n<\/pre>\n<p>\u3059\u3093\u306a\u308a\u884c\u304d\u307e\u3057\u305f\u3001\u5f8c\u306f\u3053\u308c\u3092M5Stack\u304b\u3089\u53e9\u3051\u3070\u826f\u3055\u305d\u3046\u3067\u3059\u3002<\/p>\n<h3>ArduinoJson\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/h3>\n<p>ArduinoIDE\u3092\u958b\u304d\u3001\u4e0b\u8a18\u30e1\u30cb\u30e5\u30fc\u304b\u3089ArduinoJson\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<br \/>\n\u30b9\u30b1\u30c3\u30c1 > \u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u30a4\u30f3\u30af\u30eb\u30fc\u30c9 > \u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u7ba1\u7406<\/p>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2020\/04\/ArduinoJson-1024x580.png\" alt=\"\" width=\"728\" height=\"412\" class=\"aligncenter size-large wp-image-18323\" srcset=\"https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2020\/04\/ArduinoJson-1024x580.png 1024w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2020\/04\/ArduinoJson-300x170.png 300w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2020\/04\/ArduinoJson-768x435.png 768w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2020\/04\/ArduinoJson-1536x870.png 1536w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2020\/04\/ArduinoJson-240x135.png 240w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2020\/04\/ArduinoJson-728x412.png 728w, https:\/\/www.skyarch.net\/blog\/wp-content\/uploads\/2020\/04\/ArduinoJson.png 1582w\" sizes=\"auto, (max-width: 728px) 100vw, 728px\" \/>\n<h3>\u30b3\u30fc\u30c9\u7de8\u96c6<\/h3>\n<pre>\n#include &lt;Arduino.h&gt;\n#include &lt;ArduinoJson.h&gt;\n#include &lt;WiFi.h&gt;\n#include &lt;WiFiMulti.h&gt;\n#include &lt;HTTPClient.h&gt;\n#include &lt;M5Stack.h&gt;\n\n\/\/ Wifi Settings\n#define WIFI_SSID \"[\u3054\u81ea\u8eab\u306e\u74b0\u5883\u306eWifiSSID]\"\n#define WIFI_PASS \"[\u3054\u81ea\u8eab\u306e\u74b0\u5883\u306eWifiPassowrd]\"\n\/\/ Slack OAuth Access Token\n#define TOKEN \"Bearer [\u3054\u81ea\u8eab\u306eSlackApp\u306exoxp-\u3067\u59cb\u307e\u308bToken]\"\n#define SLACK_ENDPOINT \"https:\/\/slack.com\/api\/users.profile.set\"\n\nconst char* ca = \\ \n\"-----BEGIN CERTIFICATE-----\\n\" \\  \n\"MII...\\n\" \\  \/\/ CA\u306e\u4e2d\u8eab\u306b\u3064\u3044\u3066\u306f\u3001M5Stack\/M5Stick\u306eBasicHTTPClient\u30b9\u30b1\u30c3\u30c1\u7b49\u304b\u3089\u53d6\u5f97\u4e0b\u3055\u3044\n\"-----END CERTIFICATE-----\\n\";\n\nWiFiMulti wifiMulti;\nHTTPClient http;\nchar buffer[255];\n\nvoid InitializeLcd() {\n  \/\/ text print\n  M5.Lcd.fillScreen(BLACK);\n  M5.Lcd.setCursor(0, 10);\n  M5.Lcd.setTextColor(WHITE);\n  M5.Lcd.setTextSize(1);\n  \/\/ Menu\n  M5.Lcd.printf(\"PressA: Working\\n\");\n  M5.Lcd.printf(\"PressB: CoffeeBreak\\n\");\n  M5.Lcd.printf(\"PressC: MTG\\n\");\n}\n\nvoid UpdateSlackStatus(String text, String emoji) {\n  \/\/ CLS\n  InitializeLcd();\n  \n  \/\/ wait for WiFi connection\n  if((wifiMulti.run() == WL_CONNECTED)) {\n\n      HTTPClient http;\n      \/\/HTTPS\n      http.begin(SLACK_ENDPOINT, ca);\n      http.addHeader(\"Content-Type\", \"application\/json\");\n      http.addHeader(\"Authorization\", TOKEN);\n\n      \/\/ create JSON\n      DynamicJsonDocument doc(1024);\n      JsonObject profile = doc.createNestedObject(\"profile\");\n      profile[\"status_text\"] = text;\n      profile[\"status_emoji\"] = emoji;\n      profile[\"status_expiration\"] = \"0\";\n      serializeJson(doc, buffer, sizeof(buffer));\n\n      \/\/ start connection and send HTTP header\n      int httpCode = http.POST((uint8_t*)buffer, strlen(buffer));\n\n      \/\/ httpCode will be negative on error\n      if(httpCode > 0) {\n          \/\/ HTTP header has been send and Server response header has been handled\n          M5.Lcd.printf(\"[HTTP] GET... code: %d\\n\", httpCode);\n          \n          if(httpCode == HTTP_CODE_OK) {\n              String payload = http.getString();\n              M5.Lcd.println(payload);\n          }\n      } else {\n          M5.Lcd.printf(\"[HTTP] GET... failed, error: %s\\n\", http.errorToString(httpCode).c_str());\n      }\n\n      http.end();\n  }\n}\n\n\/\/ the setup routine runs once when M5Stack starts up\nvoid setup() {\n  \/\/ initialize the M5Stack object\n  M5.begin();\n  dacWrite(25, 0); \/\/ Speaker Off\n  InitializeLcd();\n\n  \/*\n    Power chip connected to gpio21, gpio22, I2C device\n    Set battery charging voltage and current\n    If used battery, please call this function in your project\n  *\/\n  M5.Power.begin();\n\n  \/\/ WifiSetup\n  wifiMulti.addAP(WIFI_SSID, WIFI_PASS);\n}\n\n\/\/ the loop routine runs over and over again forever\nvoid loop(){\n  \/\/ update button state\n  M5.update();\n\n  \/\/ Button Pressed\n  if (M5.BtnA.wasReleased()) {\n    M5.Lcd.print('Working');\n    UpdateSlackStatus(\"Working\", \":floppy_disk:\");\n  } else if (M5.BtnB.wasReleased()) {\n    M5.Lcd.print('CoffeeBreak');\n    UpdateSlackStatus(\"CoffeeBreak\", \":java:\");\n  } else if (M5.BtnC.wasReleased()) {\n    M5.Lcd.print('MTG');\n    UpdateSlackStatus(\"Meating\", \":writing_hand:\");\n  }\n}\n<\/pre>\n<p>\u30dc\u30bf\u30f3\u62bc\u4e0b\u30a4\u30d9\u30f3\u30c8\u3092\u5272\u308a\u8fbc\u307f\u3067\u53d6\u308d\u3046\u3068\u8003\u3048\u3066\u304a\u308a\u307e\u3057\u305f\u304c\u3001\u7c21\u6613\u7248\u306b...<\/p>\n<h4>\u53c2\u8003URL<\/h4>\n<p>Slack\u3067\u30e6\u30fc\u30b6\u30fcStatus\u3092\u8a2d\u5b9a\u3059\u308b<br \/>\nUser presence and status<br \/>\n<a href=\"https:\/\/api.slack.com\/docs\/presence-and-status#user_presence\">https:\/\/api.slack.com\/docs\/presence-and-status#user_presence<\/a><\/p>\n<p>users.profile.get<br \/>\n<a href=\"https:\/\/api.slack.com\/methods\/users.profile.get#arg_token\">https:\/\/api.slack.com\/methods\/users.profile.get#arg_token<\/a><\/p>\n<p>M5Stick-C\u3067Json\u3092POST\u3059\u308b<br \/>\n<a href=\"https:\/\/qiita.com\/poruruba\/items\/4bf6a52520e431a8f4a5\">https:\/\/qiita.com\/poruruba\/items\/4bf6a52520e431a8f4a5<\/a><\/p>\n<p>ArduinoJson\u3067NestedObject\u3092\u4f5c\u6210<br \/>\n<a href=\"https:\/\/arduinojson.org\/v6\/api\/jsondocument\/createnestedobject\/\">https:\/\/arduinojson.org\/v6\/api\/jsondocument\/createnestedobject\/<\/a><\/p>\n<h3>\u5b9f\u6a5f\u78ba\u8a8d<\/h3>\n<p>ArduinoIDE\u306b\u3066\u3001\u691c\u8a3c\u21e2\u30de\u30a4\u30b3\u30f3\u30dc\u30fc\u30c9\u3078\u66f8\u304d\u8fbc\u307f\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002<\/p>\n<h2 id=\"matome\">\u307e\u3068\u3081<\/h2>\n<p>\u6b21\u56de\u306fMQTT\u3067AWSIoT\u3068\u304a\u558b\u308a\u3057\u3066\u307f\u305f\u3044\u3068\u8003\u3048\u3066\u304a\u308a\u307e\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u306f\u3058\u3081\u306b \u524d\u56de\u306e\u8a18\u4e8b\u306e\u7d9a\u304d\u3068\u306a\u308a\u307e\u3059\u3002 https:\/\/www.skyarch.net\/blog\/?p=18253 \u3053\u306e\u3054\u6642\u4e16\u3067Zoom\u3092\u7e4b\u304e\u3063\u3071\u306a\u3057\u3067\u4f5c\u696d\u3057\u3066\u3044\u308b\u306e\u3067\u3059\u304c\u3001\u96e2\u5e2d\u4e2d\u30fb\u5225MTG\u53c2\u52a0\u4e2d\u306e\u72b6\u6cc1\u3092\u767a\u4fe1\u3059\u308b\u305f\u3081\u3001M&#8230;<\/p>\n","protected":false},"author":2,"featured_media":18332,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_locale":"ja","_original_post":"https:\/\/www.skyarch.net\/blog\/?p=18315","footnotes":""},"categories":[115],"tags":[],"class_list":{"0":"post-18315","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-iot","8":"ja"},"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.skyarch.net\/blog\/wp-json\/wp\/v2\/posts\/18315","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.skyarch.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.skyarch.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.skyarch.net\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.skyarch.net\/blog\/wp-json\/wp\/v2\/comments?post=18315"}],"version-history":[{"count":19,"href":"https:\/\/www.skyarch.net\/blog\/wp-json\/wp\/v2\/posts\/18315\/revisions"}],"predecessor-version":[{"id":18389,"href":"https:\/\/www.skyarch.net\/blog\/wp-json\/wp\/v2\/posts\/18315\/revisions\/18389"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.skyarch.net\/blog\/wp-json\/wp\/v2\/media\/18332"}],"wp:attachment":[{"href":"https:\/\/www.skyarch.net\/blog\/wp-json\/wp\/v2\/media?parent=18315"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.skyarch.net\/blog\/wp-json\/wp\/v2\/categories?post=18315"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.skyarch.net\/blog\/wp-json\/wp\/v2\/tags?post=18315"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}