
ã©ãããCHASUKEã§ãã
Nature Remo Eã®é»åAPIãå ¬éãããã®ã§ãPythonã§ããŒã¿ååŸã»æŽ»çšããŠã¿ãŸããã
âŒNature Remo Eãšã¯ã
-

ãªã¢ã«ã¿ã€ã ã«é»æ°äœ¿çšéãèŠãããNature Remo Eãã®äœ¿ãæ¹ã»ã¬ãã¥ãŒ!!
Nature Remo Eã¯ãå®¶åºã«ããã¹ããŒãã¡ãŒã¿ãŒãšé£æºããã¢ããªäžã§é»æ°äœ¿çšéããªã¢ã«ã¿ã€ã ã«ç¢ºèªã§ããã¹ããŒãæ©åšã§ãã
ã©ã€ã³ããããšããŠã倪éœå ãè黿± ãã¹ããŒãã¡ãŒã¿ãŒçã®ãšãããæ©åšãšé£æºã§ããæ¬æ ŒçãªãNature Remo Eããšãã¹ããŒãã¡ãŒã¿ãŒãšã®é£æºã®ã¿ã«å¯Ÿå¿ãããNature Remo E liteãããããŸãã
- Nature Remo EïŒ32,780å
- Nature Remo E liteïŒ14,800å
ã©ã¡ãã®ã¢ãã«ã§ããé»åAPIã䜿ã£ãŠãã¹ããŒãã¡ãŒã¿ãŒããæ å ±ãååŸã§ããŸãã
ãšããããšã§æ¬èšäºã§ã¯ãã©ãºãã€ã䜿ã£ããé»åAPIã®äœ¿ãæ¹ã»æŽ»çšãã«ã€ããŠæžããŠã¿ãŸãã
Nature Remo Eãæã£ãŠããåæã«ã¯ãªã£ãŠããŸãããèªå® ã®é»æ°äœ¿çšéãšèº«è¿ãªãã¿ãªã®ã§ãããããããé¢çœãã§ãã
é»åAPIã§ã¹ããŒãã¡ãŒã¿ãŒæ å ±ãååŸããæ¹æ³ãCURLã³ãã³ãã
æå§ãã«curlã³ãã³ããå®è¡ããã¹ããŒãã¡ãŒã¿ãŒããé»åæ å ±ãååŸããŠã¿ãŸãã
åæãšããŠãNature Remo EïŒLiteã¢ãã«ïŒãRemoã¢ããªã«ç»é²ããã¹ããŒãã¡ãŒã¿ãŒã«ç»é²ããŠãããŸãã
âŒäžèšã®æ å ±ãåèã«ãªããŸãã
Remoã®ã¢ã¯ã»ã¹ããŒã¯ã³ãçºè¡ããããã©ãºããªãŒãã€ã®ã¿ãŒããã«ããäžèšãå®è¡ããŸãã
curl -X GET "https://api.nature.global/1/appliances" -H "Authorization: Bearer [ã¢ã¯ã»ã¹ããŒã¯ã³]" > memo.json
å®è¡ãããã£ã¬ã¯ããªé äžã«ãmemo.jsonããåºåãããŸãããããNature Remoã«ç»é²ããŠããå®¶é»äžèЧã«ãªããŸãããã®äžã®äžéšã«ã¹ããŒãã¡ãŒã¿ãŒã®æ å ±ããããŸãã
âŒJsonæŽåœ¢ããŠè¡šç€ºãããšãããªæãã
"smart_meter": {
"echonetlite_properties": [
{
"name": "coefficient",
"epc": 211,
"val": "1",
"updated_at": "2020-05-02T20:28:03Z"
},
{
"name": "cumulative_electric_energy_effective_digits",
"epc": 215,
"val": "6",
"updated_at": "2020-05-02T20:28:03Z"
},
{
"name": "normal_direction_cumulative_electric_energy",
"epc": 224,
"val": "112381",
"updated_at": "2020-05-02T20:28:03Z"
},
{
"name": "cumulative_electric_energy_unit",
"epc": 225,
"val": "1",
"updated_at": "2020-05-02T20:28:03Z"
},
{
"name": "reverse_direction_cumulative_electric_energy",
"epc": 227,
"val": "23",
"updated_at": "2020-05-02T20:28:03Z"
},
{
"name": "measured_instantaneous",
"epc": 231,
"val": "308",
"updated_at": "2020-05-02T20:28:03Z"
}
]
}
äžã®ããã«ãsmart_meterããšããããŒé äžã«ãã¹ããŒãã¡ãŒã¿ãŒã®é»åããŒã¿ãæ ŒçŽãããŠãŸããäžããé çªã«å šéšã§6çš®é¡ãããŸãã
- ä¿æ°
- ç©ç®é»åéæå¹æ¡æ°
- ç©ç®é»åéèšæž¬å€(æ£æ¹å)
- ç©ç®é»åéåäœ
- ç©ç®é»åéèšæž¬å€(éæ¹å)
- ç¬æé»åèšæž¬å€
è£è¶³ãããšããâ¥ç¬æé»åèšæž¬å€ãããªã¢ã«ã¿ã€ã ã®é»å䜿çšéïŒWïŒã衚ããŸããåã®å®¶ã®å Žåãã308wãã§ããã
ã¡ãªã¿ã«ãæé垯ããšã®é»å䜿çšéã®ç©ç®å€ã¯ãâ¢ç©ç®é»åéèšæž¬å€(æ£æ¹å)ãããã以äžã®èšç®åŒã§æ±ããããŸãã
èšç®æ¹æ³
ã(â¥ç©ç®é»åéèšæž¬å€(æ£æ¹å)ã®å¢å é à â ä¿æ°) à 0.1ïŒâ¡ç©ç®é»åéåäœïŒã
äŸãã°ãéå»1æéåã®é»æ°äœ¿çšéãç¥ããããã°ã1æéåãšã®å¢å éã§èšç®ããŸãããŸãããç©ç®é»åéåäœãã¯ã¹ããŒãã¡ãŒã¿ãŒã®çš®é¡ã«ãã£ãŠéãã®ã§ãæ£ç¢ºã«ã¯äžèšããã¥ã¢ã«ãåç §ãã ããã
å ¬åŒïœé»åAPIã®èšç®æ¹æ³ïŒè©³çްïŒ
ãæŠèŠãé»åAPIã§ãã£ãŠã¿ãå 容
ããããååŸããé»åå€ã掻çšããŠãããŸãã
ãã£ãŠã¿ãã®ã¯ãããªæãã
- 黿°äœ¿çšéã®ã°ã©ãå
- 黿°äœ¿çšéã¢ã©ãŒã
黿°äœ¿çšéã®ã°ã©ãå
1åããšã«ååŸããç¬æé»åèšæž¬å€ããIoTããŒã¿å¯èŠåããŒã«ãAmbientãã§ã°ã©ãåããŸããã
âŒç¡æã§äœ¿ããŠããããªã°ã©ãã§å¯èŠåã§ããŸãã

ã°ã©ããèŠãŠããã§ã³ãšäŒžã³ãŠããšãããæ¶è²»é»åã倧ããå®¶é»ã䜿ã£ãã¿ã€ãã³ã°ã§ããã
ã8æãã12æãã17æãã«ã飯ã®ããã«é»åã¬ã³ãžäœ¿ã£ããšããã20æãã«ãã©ã€ã€ãŒäœ¿ã£ããšãæšæž¬ã§ããŸãã
黿°äœ¿çšéã¢ã©ãŒã
ã°ã©ãåã®ã€ãã§ã«ãç¬æé»åèšæž¬å€ãæ¢å®å€ãè¶ ããŠããLINEéç¥ããããä»çµã¿ãã
IFTTT飿ºããŠç°¡åã«ã§ããŸãã

ãã¡ããäœã䜿ããã°ãªãšãåããããªä»çµã¿ã§å¿çšã§ãããã
ãäœãæ¹ãé»åAPIã§ã°ã©ãåã»ã¢ã©ãŒã
1ãã10ãŸã§ã¯æžããªãã®ã§ãäžæãªãšãããããã°ããåãåãããã ããã°ãšã
ãã€ãéãã§ãããæè»œã«ã¹ã¯ãªãããæžããã®ã§ãã©ãºãã€ã«ã€ã³ã¹ããŒã«ãããŠããPython3ã䜿ã£ãŠãŸãã
pi@raspberrypi:~ $ python3 -V Python 3.5.3
ããŒãžã§ã³ã¯ã3.5.3ãã®ããã§ãã
âŒäžèš3ã¹ãããã§å®è£ ããŸãã
- Ambientéä¿¡çšã°ã©ãçæ
- AmbientååŸã»éä¿¡æ©èœå®è£
- ã¢ã©ãŒãæ©èœå®è£
Ambientã§ããŒã¿éä¿¡çšã°ã©ããçæ
ã°ã©ãäœæãšãé£ãããã§ãããIoTããŒã¿å¯èŠåããŒã«ãAmbientããªããç¡æã§ç°¡åã§ããå©çšå¶çŽãããã®ã§ããæ³šæãã ããã
Ambientã®å¶çŽ
- 8ãã£ãã«/ãŠãŒã¶ãŒãŸã§äœæã§ãã
- 1æ¥3000ããŒã¿ãŸã§ç»é²ã§ãã
- ããŒã¿éä¿¡ééã¯5ç§ä»¥äžããã
âŒãµã€ãã«ãã°ã€ã³ããŠããã£ãã«ãäœæããŸãã

ããã«ããããã£ãã«IDããšãã©ã€ãããŒããåŸã§å¿ èŠãªã®ã§ãã¡ã¢ããŠãããŸãããã
âŒãã£ãã«ãéããšãåœç¶äœããªãã®ã§ãããã£ãã«ããšãã°ã©ããã®èšå®ãããŠãããŸãã

âŒãã£ãã«èšå®ã¯ãããªæãã

âŒã°ã©ãèšå®ã¯ãããªæãã

ããã§AmbientåŽã®èšå®ã¯å®äºã§ãããã®ãã£ãã«ã«åããŠé»åããŒã¿ãéããŸãïŒ
Pythonã¹ã¯ãªããã§é»åå€ã®ååŸã»éä¿¡ãå®è£
ãããªæãã§æžããŠã¿ãŸããã
remo_1minut.pyïŒãã®1ïŒ
import requests
import datetime
import ambient
REMOAPI="[Nature API ã¢ã¯ã»ã¹ããŒã¯ã³]"
AMBIENTCHANNELID="[Ambient ãã£ãã«ID]"
WRITEKEY="[Ambient ã©ã€ãããŒID]"
# ã¹ããŒãã¡ãŒã¿ãŒæ
å ±ååŸ
def power_get():
url = 'https://api.nature.global/1/appliances'
headers = {'Authorization': 'Bearer ' + REMOAPI, 'accept':'application/json'}
appliances = requests.get(url, headers=headers).json()
# é»åæ
å ±ãååŸ
list = appliances[3]['smart_meter']['echonetlite_properties']
dict={}
for item in list:
key=item['name']
dict[key]=item['val']
power = int(dict['measured_instantaneous'])
print('Power_Now:' + str(power))
return str(power)
# ããããã¹ã¿ãŒã
if __name__ == '__main__':
print('Start')
# é»åå€ååŸ
power = power_get()
# Ambientã«éä¿¡
am = ambient.Ambient(AMBIENTCHANNELID, WRITEKEY)
r = am.send({'created': datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), 'd1': power})
print('End')
âŒå°ãè£è¶³ãããšã以äžã®éãã
27è¡ç®ïŒåŠçã¹ã¿ãŒã
32è¡ç®ïŒé»åå€ååŸã®åŒã³åºã
13è¡ç®ïŒRemo APIãã³ãŒã«
16è¡ç®ïŒRemoç»é²æ°ã«å¿ããŠå€æŽ
36è¡ç®ïŒAmbientã«ããŒã¿éä¿¡
15,16,17è¡ç®ã®å奿 å ±ã远èšããã°ãäžèšã³ãã³ãã§å®è¡ã§ããŸããåã®ã©ãºãã€ç°å¢ã ãšå®è¡ã³ãã³ãã¯ããããªæãã
python3 /home/pi/Desktop/remo_1minut.py
âŒå®è¡åŸãAmbientã®äœæããã°ã©ããèŠããšãããŒã¿ãåæ ãããŠãã¯ãã§ããäžžã®äžã§ãã

ã¡ã¢
ãã®æãã°ã©ãçš®é¡ããæãç·ãã«ããŠãã®ã§ãç¹ã1ã€ã ãåºãŠããã
ããšã¯ããã®ã¹ã¯ãªããã1忝ã«å®è¡ããŠããã°ãã°ã©ããäœããŸããç°¡åã§ããã
1ååäœã®ã¹ã¯ãªããå®è¡ã¯ãcrontabã䜿ã£ãŠç¹°ãè¿ãå®è¡ããŸããã
âŒã³ãã³ãã§ç·šéããŸãã
pi@raspberrypi:~ $ crontab -e
âŒèšå®å 容ã¯ãããªæãã
*/1 * * * * python3 /home/pi/Desktop/remo_1minut.py > /home/pi/Desktop/output.log 2>&1
ããã§ã1åééã§å®è¡ãããŸãã
äžã®äŸã§ã¯ãã³ã³ãœãŒã«åºåãoutput.logã«åºããŠãŸããããããããšãè§£æããéã«åœ¹ç«ã¡ãŸãã
âŒããšã¯1æ¥ãçµãŠã°ããããªæãã

ã¢ã©ãŒãæ©èœãçã蟌ã
æåŸã«é»å䜿çšéã®éŸå€ãæå®ããŠãã¢ã©ãŒãæ©èœãçã蟌ã¿ãŸããã¢ã©ãŒãã¯ãLINEã«éç¥ãããä»çµã¿ã«ããŸãã
âŒIFTTTåŽã§ã¯ããWebhookâLINEããšãã飿ºãäœããŸãããããæ¹ã¯äžèšã®èšäºãåèã«ãªããŸããåãããšãã£ãŠãŸãã
-

Pythonã䜿ã£ãŠãIFTTTïŒWebhookïŒããåŒã³åºãæ¹æ³
âŒAmbientéä¿¡ããã¹ã¯ãªããã«ãã¢ã©ãŒãæ©èœã远å ããŠããããªã«ãªã£ãã
remo_1minut.pyïŒãã®2ïŒ
import requests
import datetime
import ambient
REMOAPI="[Nature API ã¢ã¯ã»ã¹ããŒã¯ã³]"
AMBIENTCHANNELID="[Ambient ãã£ãã«ID]"
WRITEKEY="[Ambient ã©ã€ãããŒID]"
IFTTTKEY="[IFTTTããŒ]"
WEBHOOKKEY="[IFTTTã®WebhookããŒ]"
LIMIT=[éŸå€ã®ã¯ããæ°]
# ã¹ããŒãã¡ãŒã¿ãŒæ
å ±ååŸ
def power_get():
url = 'https://api.nature.global/1/appliances'
headers = {'Authorization': 'Bearer ' + REMOAPI, 'accept':'application/json'}
appliances = requests.get(url, headers=headers).json()
# é»åæ
å ±ãååŸ
list = appliances[3]['smart_meter']['echonetlite_properties']
dict={}
for item in list:
key=item['name']
dict[key]=item['val']
power = int(dict['measured_instantaneous'])
print('Power_Now:' + str(power))
return str(power)
# IFTTT_Webhook
def ifttt_webhook(power):
if(int(power) > LIMIT):
payload = {"value1": power,
"value2": "",
"value3": "" }
url = "https://maker.ifttt.com/trigger/" + WEBHOOKKEY + "/with/key/" + IFTTTKEY
response = requests.post(url, data=payload)
# ããããã¹ã¿ãŒã
if __name__ == '__main__':
print('Start')
# é»åå€ååŸ
power = power_get()
# Ambientã«éä¿¡
am = ambient.Ambient(AMBIENTCHANNELID, WRITEKEY)
r = am.send({'created': datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), 'd1': power})
# ç°åžžå€ãªãLINEéç¥
ifttt_webhook(power)
print('End')
âŒè£è¶³ãšããŠãäžèšã®éãã
8è¡ç®ïŒIFTTTããŒãéŸå€ã远å
61è¡ç®ïŒé»åå€ãIFTTTå€å®ãž
31è¡ç®ïŒéŸå€ãšæ¯èŒ
36è¡ç®ïŒéŸå€è¶
éãªãIFTTTçºç«
ãšããããã1000wãéŸå€ã«ããŠã¿ãããæŽæ¿¯æ©ãšé»åã¬ã³ãžäœ¿ããšãªãŒããŒãã«ããã©ãŒã¡ã³çšã®ã±ãã«ãã¢ãŠãã§ãããŒã

é»åããŒã¿ã®èŠããåã¯æ¥œããïŒããŸããŸãªæŽ»ç𿹿³ïŒ
Remo APIã䜿ã£ãŠãèªå® ã®é»æ°äœ¿çšéãç°¡åã«ååŸã§ããŸããã
ãã¯ããèªå® ã®é»æ°ç¶æ³ãšçŽçµããã®ã§é¢çœãã§ãããä»ã«ããããããªçšéãããããã§ãã
é»åäŒç€Ÿã®ããŒã¿ãšæ¯èŒ
åãäœãæç¥çã§ã¯ãäžéšé»åãã©ã€ãºãã«ããšããã«ç³ã蟌ãã°ã忥以åã®é»æ°äœ¿çšéãæé垯å¥ã«ãã§ãã¯ã§ããŸãã
âŒãããªå ·åã«ã

âŒç©ç®é»åéèšæž¬å€(æ£æ¹å)ã䜿ã£ãŠãåãã°ã©ããäœãããã ã£ãã®ã§ã詊ããŠã¿ãããã

ã¡ã¢
1æéåã®ç©ç®é»åéèšæž¬å€(æ£æ¹å)ãèŠããŠãããŠã1æéããšã«å·®åãæ±ããŠãAmbientã«éä¿¡ããŠãã ãã§ãã
Siriã·ã§ãŒãã«ãã
Remo Eã®APIã§ãä»ã®é»åå€ãåããããã«ãªã£ãâ¡ïž pic.twitter.com/ZlOlEUJIB7
— CHASUKE@ã¬ãžã§ããããã° (@chasuke__) May 1, 2020
Siriã·ã§ãŒãã«ããããAPIåŒãã§ãããŒã¿ãæ±ããã®ã§ãäœãã«äœ¿ããããã
ã¹ããŒãã¬ãžã§ãããšã®é£æº
ãªããšNature Remoã®é»åéAPIã§ç¬éé»åèšæž¬å€ãååŸã§ããããã«ãªã£ãã®ã§ãé»åéæšç§»ãšåãããŠè¡šç€ºããããã«ããŸããïŒ pic.twitter.com/n2t3HkyExD
— 〠(@2ndknj) May 1, 2020
@2ndknjããããã€ãŒããããŠãããLaMetric Timeã¢ããªãé¢çœãããã¡ããã©ãºãã€ã§åŠçããŠããŒã¿éä¿¡ããŠãã¿ããã§ãã
ã¹ããŒãããã€ã¹ãšã®é£æºãé¢çœããåãLaMetricã€è²·ã£ãŠãã®ã§ãããã¯ç䌌ãããã
-

ããã衚瀺ããæŽèœã§å¯æããã¹ããŒã眮ãæèšãLaMetric Timeãã¬ãã¥ãŒïŒ
æåŸã«
Remo APIã䜿ã£ãŠãã¹ããŒãã¡ãŒã¿ãŒã®æ å ±ãååŸããæ¹æ³ã玹ä»ããŸããã
ã©ãºãã€ãããã°ãç°¡åã«æœåºããŠæŽ»çšã§ããŸãã身è¿ãªããŒã¿ã䜿ããé¢çœãããããŸãã
âŒä»å䜿ã£ããRemo E Liteãã¯ãã¡ã
âŒä»å䜿ã£ãã©ãºãã€4ã¯ãã¡ã
以äžãããã§ã¯ãŸãã
