我正在尝试在AWS上创建以下架构。 AWS architecture
我有3台设备连接到Iot核心:
-温度计
-空调
-Lambda函数
温度计应每5秒钟将温度发送到Core,然后将遥测发送到Kinesis流和Kinesis Analytics。
这是对在60秒窗口内到达的数据进行分组的查询。
查询:
CREATE OR REPLACE STREAM "TEMPSTREAM" (
"avg_temp" BIGINT NOT NULL,
"dateTime" TIMESTAMP,
"sender_id" VARCHAR(64));
CREATE OR REPLACE PUMP "SAMPLEPUMP" AS
INSERT INTO "TEMPSTREAM" ("avg_temp","dateTime","
SELECT STREAM AVG("temperature") as "avg_temp",ROWTIME,"sender"
FROM "SOURCE_SQL_STREAM_001"
GROUP BY "sender",STEP("SOURCE_SQL_STREAM_001".ROWTIME BY INTERVAL '60' SECOND)
having AVG("temperature")>=27;
它产生平均温度,然后将其发送给Lambda函数。
此功能仅连接到IoT Core,并发送有关主题的消息。空调已订阅了相同的主题,等待消息打开或关闭。
几乎所有功能都可以正常工作,问题在于,即使查询每分钟仅产生一个结果,Lambda函数也每分钟会多次接收到一次结果,如下面的屏幕截图所示:
Lambda代码与Kinesis输出模板相同