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まで上がる。