Nature Remo WebAPIからスマートメータの計測値を取ってきて、AWS IoT CoreにPublishするLambda用ソース
import json
import urllib.request
import boto3
URL = "https://api.nature.global/1/appliances"
TOKEN = "R6mxxxxxxxxxxxxxxxxxxxxxxkis"
TOPIC = "topic_1"
def AWSIoT_publish(topic, message):
client = boto3.client('iot-data')
try:
client.publish(
topic = topic,
payload = message,
qos = 0
)
status = "OK"
except Exception as e:
print(e)
status = "Error"
return status
def lambda_handler(event, context):
# TODO implement
req = urllib.request.Request(URL)
req.add_header('Authorization', 'Bearer ' + TOKEN )
smartmeter_instantaneous = None
with urllib.request.urlopen(req) as response:
if response.status == 200:
appliances = json.loads(response.read().decode())
for property in appliances[0]["smart_meter"]["echonetlite_properties"]:
if property['epc'] == 231:
smartmeter_instantaneous = property
AWSIoT_publish(TOPIC, json.dumps(smartmeter_instantaneous))
break
else:
print(f"Error in connect:{response.status}")
return {
'statusCode': 200,
'body': json.dumps(smartmeter_instantaneous)
}1分周期で実行できるようにCloudWatchのEvent Bridgeを使って1分周期の呼び出しを行う

ESP32ではAWSIoTにSubscribeしてサーボを動かし電力値をメータで表示する(以下は試作のメータ・・・)。瞬時値が500W(4/24 16:45時点)であることを示している。電子レンジ等を使うと1000Wまで上がる。
