我正在研究家庭自动化系统的数据记录器。当某个状态发生变化时,它会在一个密钥=>中定期从HA控制器接收数据。价值形式。我想把它转储到MySQL数据库中。
当HA控制器发送此数据时,它不包含对象的每个属性。示例如下所示:
初次回归
stdClass Object
(
[name] => Washing Machine
[altid] => 10
[id] => 31
[category] => 3
[subcategory] => 0
[room] => 2
[parent] => 1
[status] => 1
[light] => 30
[kwh] => 30.2700
[state] => -1
[comment] =>
[watts] => 108.5
)
增量更新
stdClass Object
(
[altid] => 10
[id] => 31
[subcategory] => 0
[room] => 2
[parent] => 1
[status] => 1
[light] => 30
[kwh] => 30.2700
[state] => -1
[comment] =>
[watts] => 96.7
)
如您所见,后来的更新不包含对象的名称或类别。对于其他对象类,可能缺少其他属性。
我的问题是记录此数据的最佳方法是什么,以便我可以运行查询以在单个时间点检索每个属性的状态?某种果味查询可能会创建一个视图?
感谢您的帮助
答案 0 :(得分:0)
由于它始终为您提供ID(希望如此),您可以在事件进入时查找缺少的属性,并在保存之前填充缺少信息的记录。您需要从以前的事件中进行选择,或者在某些主类别和名称表中创建已经创建的设备定义。
另一种方法是不关心缺少指标并在UI /图表/报告阶段处理这些问题。您可以构建一个知道ID 31是洗衣机的UI,随后可以随时绘制所有属性。用户界面可以通过查看以前的值或选择以0表示图表来继续绘制任何不存在的值。
这样做,构建一个可以在任何时间点识别任何值的单个查询会很棘手,因为它必须及时向后扫描,直到找到一个值。但是,再次,在图形意义上,它确实不重要,因为您希望日期范围足够大以容纳缺失值。
您也可以将数据保存到时间序列数据库(如涌入数据库)而不是关系数据库中。
答案 1 :(得分:0)
我最终在另一个SO帖子中找到了解决方案:MySQL: Get Last Distinct Set of Records
smdrager的最佳答案就是我所使用的。表中只有几行和数千行之间的速度似乎没有区别。