Æüµ/2020-6-20
¼¼Æâ¤ÎCO2Ç»ÅÙ¤¬¸«¤¿¤¤
¡¡
Ãí°Õ
¡¡°Ê²¼¤Îµ»ö¤Ïµ»½ÑŪ¤Ë¤Ï¤Û¤È¤ó¤ÉÌò¤ËΩ¤¿¤Ê¤¤¡£Çϼ¯¤ÊÉÔÃí°Õ¤¬¾·¤¯´ÖÈ´¤±¤ÊÅÌÏ«¤Ë½¼¤Á¤¿¼ºÇÔÃ̤Ǥ¢¤ë¡£
¡¡
LaMetric Time
¡¡¿ôǯÁ°¤ËÇã¤Ã¤¿LaMetric Time¤Ë¡¢¤¤¤í¤ó¤Ê¾ðÊó¤òɽ¼¨¤·¤Æ³Ú¤·¤ó¤Ç¤¤¤ë¡£
¡¡ÀµÄ¾¡¢¼ÂÍÑÀ¤Ë¤Ï˳¤·¤¤µ¤¤â¤¹¤ë¤¬¡¢¤Þ¤¢¡¢Æø¤ä¤«¤·¤È¤¤¤¦¤³¤È¤Ç¡£
¡¡É½¼¨¤·¤Æ¤¤¤ë¤Î¤Ï¡¢½ç¤Ë¡¢
- »þ¹ï
- ÆüÉÕ ÍËÆü
- ¶á½ê¤Î¥¢¥á¥À¥¹¤Î¾ðÊó
- µ¤²¹
- Å·µ¤¡Ê¥¢¥¤¥³¥ó¤ÇÀ²/ÆÞ/±«¤òÀڤ괹¤¨¡Ë¤È¹ß¿åÎÌ
- É÷®
- Nature Remo¤ÎÆ⢥»¥ó¥µ¡¼¤ÎÃÍ
- ¼¼²¹
- ¼¾ÅÙ
¡¡ºÇ¶áÉô²°¤ËäƤâ¤ëµ¡²ñ¤¬Áý¤¨¡¢°ÊÁ°¤Ë¤âÁý¤·¤Æ¼¼Æâ´Ä¶¤òµ¤¤Ë¤¹¤ë¤è¤¦¤Ë¤Ê¤Ã¤¿¤Î¤À¤¬¡¢¤³¤ì¤Þ¤¿²¿Ç¯¤âÁ°¤ËÇã¤Ã¤¿Withings¤ÎÂνŷ×WS-50¡¢
¤³¤¤¤Ä¤ËCO2Ç»ÅÙ¥»¥ó¥µ¡¼¤¬Æ⢤µ¤ì¤Æ¤¤¤ë¤³¤È¤ò»×¤¤½Ð¤·¤¿¡£¼ê»ý¤Á¤ÎWithings¤Îµ¡´ï¤Î¾ðÊ󤬱ÜÍ÷¤Ç¤¤ë¥µ¥¤¥È¤«¤é¤â¡¢°Ê²¼¤Î¤è¤¦¤ËCO2Ç»Å٤Υ°¥é¥Õ¤¬³Îǧ¤Ç¤¤ë¡£
¡¡
¡¡¤³¤ÎCO2Ç»ÅÙ¤òLaMetric Time¤Ëɽ¼¨¤·¤¿¤¤¡ª
¡¡
¡¡¼¼Æâ¤ÎCO2Ç»ÅÙ¤¬1000ppm¤ò±Û¤¨¤ë¤È¡¢¿Í¤Ï̲µ¤¤ò³Ð¤¨ºî¶È¸úΨ¤¬Â礤¯²¼¤¬¤ë¤È¤¤¤¦¡£
¡¡¥°¥é¥Õ¤ò¸«¤ë¤ÈCO2Ç»ÅÙ¤Ï30ʬ¤Ë°ìÅÙ¬Äꤵ¤ì¤Æ¤¤¤ë¤è¤¦¤Ê¤Î¤Ç¡¢¤³¤ì¤òLaMetric Time¤Ë¾ï»þɽ¼¨¤·¡¢¤µ¤é¤Ë1000ppm¤ò±Û¤¨¤¿¤éÀÖ¤¯É½¼¨¤¹¤ë¤Ê¤É¤·¤Æ´¹µ¤¤ò¤¦¤Ê¤¬¤¹¡£¤½¤¦¤¤¤¦»ÅÁȤߤò¹½ÃÛ¤·¤¿¤¤¤È¹Í¤¨¤¿¡£
¡¡
Withings API(OAUTH 2.0)
¡¡¥°¥°¤Ã¤Æ¤ß¤ë¤È¡¢Withings¤¬µ¡´ï¤Î¾ðÊó¤ò¼è¤ì¤ëAPI¤òÄ󶡤·¤Æ¤¤¤ë¤³¤È¤¬¤ï¤«¤Ã¤¿¡£
¡¡»È¤¤Êý¤Ï¡¢°Ê²¼¤Î¥µ¥¤¥È¤Ç¾ÜºÙ¤ËÀâÌÀ¤µ¤ì¤Æ¤¤¤ë¡£
¡¡¾åµ¤Î¥Ú¡¼¥¸¤Î¼ê½ç¤É¤ª¤ê¿Ê¤á¤Æ¡¢WS-50¤Î¾ðÊó¤ò¼è¤ë¤³¤È¤ËÀ®¸ù¤·¤¿¡£
¡¡¤·¤«¤·¡¢³Î¤«¤ËÂνŤʤ󤫤ξðÊó¤Ï¼è¤ì¤ë¤ó¤À¤¬¡¢CO2Ç»Å٤μè¤êÊý¤¬¤ï¤«¤é¤Ê¤¤¡£
¡¡»ö¤³¤³¤Ë»ê¤ê¤è¤¦¤ä¤¯µ¤¤Å¤¤¤¿¤Î¤À¤¬¡¢¼è¤ì¤ë¾ðÊó¤ÎÃæ¤ËCO2Ç»ÅÙ¤¬¤Ê¤¤¤Î¤Ç¤¢¤ë¡ª Withings API¤Î²òÀ⥵¥¤¥È¤Î¤³¤Á¤é¤Î¥Ú¡¼¥¸¤Ë·Ç¤²¤é¤ì¤Æ¤¤¤ë¡¢¼è¤ì¤ë¾ðÊó°ìÍ÷¤Îɽ¤ò¤è¤¯¤è¤¯¸«¤Æ¤ß¤ë¤È¡¢CO2Ç»Å٤ιàÌܤϤʤ¤¡£
¡¡¤Ê¤ª¡¢¤É¤Î¤ß¤ÁCO2Ç»Å٤ξðÊ󤬼è¤ì¤Ê¤¤¤Î¤Ç¡¢»ä¤Ë¤È¤Ã¤Æ¤Ï¤É¤¦¤Ç¤â¤¤¤¤¤Î¤À¤¬¡¢¤³¤ÎAPI¤ò»È¤¦¤Ë¤Ï¥¢¥¯¥»¥¹¥È¡¼¥¯¥ó¤¬É¬Íפǡ¢¤³¤ì¤¬30ʬ¤Ç´ü¸Â¤¬ÀÚ¤ì¤Æ¤·¤Þ¤¤¡¢¤½¤Î¤¿¤Ó¤ËºÆȯ¹Ô¤¹¤ëɬÍפ¬¤¢¤ë¡£¤³¤ì¤¬²¿µ¤¤ËÌÌÅݤ¯¤µ¤¯¤Æ¤«¤Ê¤ê»È¤¤¤Ë¤¯¤¤¡£
¡¡
Withings WS-50 Scale Syncer - Temperature & CO2
¡¡¤¢¤¤é¤á¤¤ì¤º¤Ë¤Ê¤ª¤â¥°¥°¤Ã¤Æ¤¤¤ë¤È¡¢¤Þ¤µ¤Ë»ä¤ÎÍÑÅӤˤФäÁ¤ê¤È»×¤¨¤ë¥Ú¡¼¥¸¤ò¸«¤Ä¤±¤¿¡£
¡¡¾åµ¤Î¥Ú¡¼¥¸¤Ç¤Ï¡¢Withings WS-50 Scale Syncer - Temperature & CO2¤È¤¤¤¦¡¢Withings¤ÎÈó¸ø¼°¤ÊAPI¤ò»È¤Ã¤ÆWS-50¤Îµ¤²¹¤ÈCO2Ç»Å٤Υ»¥ó¥µ¡¼¤ÎÃͤò¼è¤ê¡¢Domoticz¤È¤¤¤¦OSS¤Î¥Û¡¼¥à¥ª¡¼¥È¥á¡¼¥·¥ç¥ó¥·¥¹¥Æ¥à¤ÈÏ¢·È¤µ¤»¤ë¥Ä¡¼¥ë¤ò¤½¤Î¤Þ¤ÞήÍѤ·¤Æ¤¤¤ë¤Î¤À¤¬¡¢¤³¤Á¤È¤éWS-50¤Î¥Ç¡¼¥¿¤µ¤¨¼è¤ì¤ì¤Ð¤½¤ì¤Ç¤¤¤¤¤Î¤Ç¡¢¤³¤Î¥Ä¡¼¥ë¤ò½ñ¤´¹¤¨¤ë¤³¤È¤Ë¤·¤¿¡£
#!/usr/bin/env python3 # -*- coding: utf-8 -*- from datetime import datetime import sys import time import hashlib import requests TMPID = 12 CO2ID = 35 NOW = int(time.time()) PDAY = NOW - (60 * 60 * 24) HEADER = {'user-agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36'} URL_BASE = "https://scalews.withings.net/cgi-bin" URL_AUTH = URL_BASE + "/auth?action=login&appliver=3000201&apppfm=android&appname=wiscaleNG&callctx=foreground" URL_ASSO = URL_BASE + "/association?action=getbyaccountid&enrich=t&appliver=3000201&apppfm=android&appname=wiscaleNG&callctx=foreground&sessionid=" URL_USAGE = "https://goo.gl/z6NNlH" def authenticate_withings(username, password): global pem try: import certifi pem = certifi.old_where() except Exception: pem = True requests.head(URL_USAGE, timeout=3, headers=HEADER, allow_redirects=True, verify=pem) payload = {'email': username, 'hash': hashlib.md5(password.encode('utf-8')).hexdigest(), 'duration': '900'} response = requests.post(URL_AUTH, data=payload) iddata = response.json() sessionkey = iddata['body']['sessionid'] response = requests.get(URL_ASSO + sessionkey) iddata = response.json() deviceid = iddata['body']['associations'][0]['deviceid'] return deviceid, sessionkey def download_data(deviceid, sessionkey, mtype, lastdate): payload = '/v2/measure?action=getmeashf&deviceid=' + str(deviceid) + '&meastype=' + str(mtype) + '&startdate=' + str(lastdate) + '&enddate=' + str(NOW) + \ '&appliver=3000201&apppfm=android&appname=wiscaleNG&callctx=foreground&sessionid=' + str(sessionkey) try: response = requests.get(URL_BASE + payload) except Exception: sys.exit("[-] Data download failed, exiting" + "\n") dataset = response.json() return dataset def main(): username = 'mail@address' password = 'password' deviceid, sessionkey = authenticate_withings(username, password) co2data = download_data(deviceid, sessionkey, CO2ID, PDAY) for item in sorted(co2data['body']['series'][0]['data'], key=lambda x:x['date'], reverse=True): dt = datetime.fromtimestamp(item['date']) print(f"date:{dt}, co2:{item['value']}") return if __name__ == "__main__": main()
¡¡¾åµ¤Î¥¹¥¯¥ê¥×¥È¤Ç¤Ï¥Ç¥Ð¥Ã¥°ÍѤˡ¢Â¬ÄêÆü»þ¤È¤½¤Î»þ¤ÎCO2Ç»ÅÙ¤ò°ì¹Ô¤Ë¡¢°ìÆüʬ¤ò¿·¤·¤¤½ç¤Ëɽ¼¨¤·¤Æ¤¤¤ë¡£
date:2020-06-20 13:30:13, co2:509 date:2020-06-20 13:00:12, co2:519 date:2020-06-20 12:30:13, co2:506 date:2020-06-20 12:00:12, co2:497 date:2020-06-20 11:30:13, co2:509 ¡Ä¡Ä
¡¡Åö½é¤Ï¤³¤Î¬ÄêÆü»þ¤ò¡¢¼è¤ì¤¿¥Ç¡¼¥¿¤½¤Î¤Þ¤Þ¤Îunixtime¤Çɽ¼¨¤·¤Æ¤¤¤¿¤¿¤á¡¢¤Ê¤«¤Ê¤«µ¤¤Å¤«¤Ê¤«¤Ã¤¿¤Î¤À¤¬¡¢¤³¤Î¥¹¥¯¥ê¥×¥È¤ò¼Â¹Ô¤·¤Æ¤â¡¢ºÇ¿·¤Î¥Ç¡¼¥¿¤È¤·¤Æ¼è¤ì¤ë¤Î¤Ï¡¢¼Â¹Ô»þ¤Î²¿»þ´Ö¤âÁ°¤Î¤â¤Î¤À¤Ã¤¿¤Î¤Ç¤¢¤ë¡£
¡¡¤³¤ì¤Ï°ìÂΤʤ¼¤Ê¤Î¤«¡©
¡¡»ö¤³¤³¤Ë»ê¤ê¤è¤¦¤ä¤¯µ¤¤Å¤¤¤¿¤Î¤À¤¬¡¢Á°½Ò¤Î¡ÖWithings WS-50¤ò»È¤Ã¤ÆCO2Ç»ÅÙ¤òCloudWatch¥á¥È¥ê¥¯¥¹¤ËÊݸ¤¹¤ë¡×¤Î¥Ú¡¼¥¸¤Ë¡¢¤½¤ì¤âËÁƬÉôʬ¤Ë¤·¤Ã¤«¤ê¤È¡¢°Ê²¼¤Î¤è¤¦¤Ë½ñ¤¤¤Æ¤¢¤ë¡£
¤¿¤À¤·¡¢WS-50¤Î¾ì¹ç¥»¥ó¥µ¾ðÊó¤ÎÁ÷¿®¤¬°Ê²¼¤Î2¥Ñ¥¿¡¼¥ó¤·¤«¤Ê¤¤¤¿¤á¡¢¥ê¥¢¥ë¥¿¥¤¥à¤ÇCO2Ç»ÅÙ¤ò¼èÆÀ¤¹¤ë¤³¤È¤Ï¤Ç¤¤Ê¤¤¡£ ¡¦1Æü°ì²ó¤É¤³¤«¤Î¥¿¥¤¥ß¥ó¥°¤Ç´Ä¶¥»¥ó¥µ¾ðÊó¡ÊCO2Ç»ÅÙ¡¢²¹Å١ˤòÁ÷¿® ¡¦ÂνŤò¬¤Ã¤¿¥¿¥¤¥ß¥ó¥°¤Ç´Ä¶¥»¥ó¥µ¾ðÊó¤âÁ÷¿® ¤Ê¤ª¡¢CO2Ç»ÅÙ¾ðÊó¤Ï30ʬ¤ª¤¤ËµÏ¿¤µ¤ì¤Æ¤¤¤ë¡£
¡¡¤Ä¤Þ¤ê¡¢CO2Ç»Å٤άÄ꼫ÂΤÏ30ʬËè¤Ë¹Ô¤ï¤ì¤Æ¤¤¤ë¤Î¤À¤¬¡¢¤½¤ì¤¬¥¦¥§¥Ö¾å¤Ë¥¢¥Ã¥×¥í¡¼¥É¤µ¤ì¤ë¤Î¤ÏÂνŬÄê»þ¤«°ìÆü°ìÅ٤Τɤ³¤«¤Î¥¿¥¤¥ß¥ó¥°¤Î¤ß¡£¤¤¤¯¤é¾ðÊó¤ò¼è¤ê¤Ë¹Ô¤Ã¤Æ¤â¡¢¼è¤ì¤ë¾ðÊ󤬹¹¿·¤µ¤ì¤ë¤Î¤Ï°ìÆü°ìÅÙ¤À¤±¡£¾åµ¥¹¥¯¥ê¥×¥È¤Çɽ¼¨¤µ¤ì¤ë¤Î¤Ï¡¢Á°²ó¤Î¹¹¿·»þ¤Î¾ðÊ󤬺ǿ·¤Ë¤Ê¤ë¤ï¤±¤Ç¡¢¤½¤ì¤¬¥¹¥¯¥ê¥×¥È¼Â¹Ô»þ¤Î²¿»þ´Ö¤âÁ°¤À¤Ã¤¿¤Î¤Ç¤¢¤ë¡£
¡¡·ë¶É¡¢WS-50Æ⢤ÎCO2Ç»ÅÙ¥»¥ó¥µ¡¼¤Ï¡¢»ä¤¬ÁÛÄꤷ¤¿ÍÑÅӤǤϻȤ¨¤Ê¤¤¤È¤¤¤¦¤³¤È¤¬¤ï¤«¤Ã¤¿¡£
¡¡
MH-Z19
¡¡¤½¤ì¤Ç¤â¤¢¤¤é¤á¤¤ì¤Ê¤¤»ä¤¬¤É¤¦¤·¤¿¤«¤È¤¤¤¦¤È¡¢Banggood.com¤Ç°Ê²¼¤ÎCO2Ç»ÅÙ¥»¥ó¥µ¡¼MH-Z19¤òȯÃí¤·¤Æ¤·¤Þ¤Ã¤¿¡£
¡¡¤Ê¤¼Amazon¤Ç¤Ï¤Ê¤¯Banggood¤ÇÇã¤Ã¤¿¤«¤È¤¤¤¦¤È¡¢Banggood¤ÎÊý¤¬ÃÍÃʤâ°Â¤¯Ç¼´ü¤âû¤«¤Ã¤¿¤«¤é¡£¤½¤ì¤Ç¤âǼ´ü¤Ï10Æü¤«¤é30Æü¸å¡£ÃÍÃʤÏÁ÷ÎÁ¹þ¤ß¤Ç2529±ß¡£
¡¡CO2Ç»ÅÙ¥»¥ó¥µ¡¼¤¬ÆϤ¯º¢¤Þ¤Ç¡¢¤³¤Î¾ðÇ®¤¬¼º¤ï¤ì¤Æ¤¤¤Ê¤±¤ì¤ÐÎɤ¤¤¬¡£
´ØÏ¢¥Ú¡¼¥¸