kafka接收mqtt数据
去年11月,我们买了一辆电动汽车,这引起了一个有趣的问题:我们什么时候应该充电? 我担心汽车充电所用的排放量最低,所以这是一个具体的问题:在任何给定时间,每千瓦时的二氧化碳排放率是多少?白天是什么时候最低?
查找数据
我住在纽约州。 我们约80%的电力来自州内发电,主要来自天然气,水坝(其中大部分来自尼亚加拉大瀑布),核能以及一些风能,太阳能和其他化石燃料。 整个系统由纽约独立系统运营商 (NYISO)管理, 纽约独立系统运营商是一个非营利性机构,其成立目的是平衡发电机,消费者和监管机构的需求,以使纽约保持正常运转。
很多公开数据可供公众使用。 这包括报告整个州每五分钟间隔消耗什么燃料来发电。 这些文件以CSV文件的形式发布在公共档案馆中,并全天更新。 如果您知道来自不同种类燃料的兆瓦数,则可以合理估算任何给定时间排放的二氧化碳量。在构建用于收集和处理开放数据的工具时,我们应该始终保持友善,以免使这些系统过载。 与其将所有人一直发送到他们的存档服务来下载文件,我们可以做得更好。 我们可以创建一个开销很小的事件流,人们可以订阅并随时获取更新。 我们可以使用MQTT做到这一点。 我的项目( ny-power.org )的目标是包含在Home Assistant项目中,该项目是一个拥有数十万用户的开源家庭自动化平台。 如果所有这些用户一直都在访问此CSV服务器,则NYISO可能需要限制对其的访问。
什么是MQTT?
MQTT是一种发布/订阅(pubsub)有线协议,其设计考虑了小型设备。 Pubsub系统的工作就像消息总线一样。 您将消息发送到主题,任何订阅该主题的软件都将获得消息的副本。 作为发送者,您永远不会真正知道谁在听。 您只需将信息提供给一组主题,然后聆听您可能关心的其他任何主题。 就像参加派对并听有趣的对话一样。
这可以使应用程序效率极高。 客户订阅的主题很窄,只接收他们正在寻找的信息。 这样既节省了处理时间,又节省了网络带宽。
作为一种开放标准,MQTT具有许多客户端和服务器的开源实现。 您可以想象到每种语言的客户端库,甚至可以嵌入到Arduino中的用于建立传感器网络的库。 有许多服务器可供选择。 我要去的是Eclipse的Mosquitto服务器,它很小,是用C编写的,可以处理成千上万的订户而不会费力。
为什么我喜欢MQTT
在过去的二十年中,我们为软件应用程序提出了经过验证的真实模型,以提出服务问题。 我还有电子邮件吗? 当前天气如何? 我现在应该买这东西吗? 这种“询问/接收”模式在很多时候都有效。 但是,在充满数据的世界中,我们还需要其他模式。 MQTT pubsub模型功能强大,可以将大量数据发布到系统中。 客户端可以订阅少量数据,并在收到数据后立即接收更新。
MQTT还具有其他有趣的功能,例如“最后遗嘱”消息,这使得可以区分由于没有相关数据而导致的静默和由于数据收集器崩溃而导致的静默。 MQTT还保留了消息,这些消息在客户端首次连接时将有关主题的最后一条消息提供给客户端。 这对于主题更新缓慢非常有用。
在与Home Assistant项目一起工作时,我发现此消息总线模型对于异构系统非常有效。 如果您进入物联网领域,那么您将很快在任何地方都遇到MQTT。
我们的第一个MQTT流
NYSO的CSV文件之一是实时燃料混合。 每五分钟更新一次该时间段内的燃料来源和发电量(兆瓦)。
CSV文件如下所示:
时标 | 时区 | 燃料类别 | 兆瓦 |
---|---|---|---|
05/09/2018 00:05:00 | 美东时间 | 双燃料 | 1400 |
05/09/2018 00:05:00 | 美东时间 | 天然气 | 2144 |
05/09/2018 00:05:00 | 美东时间 | 核 | 4114 |
05/09/2018 00:05:00 | 美东时间 | 其他化石燃料 | 4 |
05/09/2018 00:05:00 | 美东时间 | 其他可再生能源 | 226 |
05/09/2018 00:05:00 | 美东时间 | 风 | 41 |
05/09/2018 00:05:00 | 美东时间 | 水电 | 3229 |
05/09/2018 00:10:00 | 美东时间 | 双燃料 | 1307 |
05/09/2018 00:10:00 | 美东时间 | 天然气 | 2092年 |
05/09/2018 00:10:00 | 美东时间 | 核 | 4115 |
05/09/2018 00:10:00 | 美东时间 | 其他化石燃料 | 4 |
05/09/2018 00:10:00 | 美东时间 | 其他可再生能源 | 224 |
05/09/2018 00:10:00 | 美东时间 | 风 | 40 |
05/09/2018 00:10:00 | 美东时间 | 水电 | 3166 |
该表中唯一奇怪的是双燃料类别。 纽约的大多数天然气厂还可以燃烧其他化石燃料来发电。 在冬季寒冷期间,天然气供应受到限制,其用于家庭供暖的优先级高于发电。 这种情况发生的频率足够低,我们可以将双重燃料视为天然气(用于我们的计算)。
该文件全天更新。 我创建了一个简单的数据泵,该泵每分钟轮询一次文件并查找更新。 它将所有新条目发布到MQTT服务器上