使用Cubi SDR、RTL_433、MQTT和Telegraf将实时数据流式传输到InfluxDB

2020-07-18 02:07:14

我一直对射频世界感兴趣,我们被携带信息的无限不可见的波所包围的事实是耐人寻味的。这些年来发生了很多变化,技术先进,今天你可以很容易地潜入电磁领域,而不需要摆弄堆积如山的设备和烧毁你的口袋。

在这篇文章中,我们将探索使用RTL-SDR从廉价的433.92 Mhz模块读取实时温度和湿度统计数据,并使用Raspberry PI上的RTL_433、MQTT和Telegraf将它们提供给InfluxDB(但任何基于Linux的设备都可以工作)。

SDR的定义是“软件定义的无线电”,它是一种无线电通信系统,它不使用传统上由硬件实现的组件,而是使用软件,从而允许更大的灵活性并降低成本。

RTL-SDR是一个高质量的USB加密狗(但相对便宜,大约25美元),可以用来扫描和接收从500 GHz(我使用的设备是24 MHz)到1.75 GHz的无线电信号。它是由RTL-SDR.com上基于DVB-T电视调谐器加密狗的令人敬畏的家伙们设计和建造的。我订购了这个套件,其中包括两个模块化偶极天线。

几乎任何基于射频的无线温度计/湿度传感器都可能被RTL_433读取。因为我们谈论的是便宜的硬件,你不能真正得到任何保证,检查射频频率可能就足够了-如果它说433.92兆赫,你99%是好的。我用这个作为我的室内传感器,这个作为我的室外,用来监测我的花园土壤湿度水平和室外温度。

我用的是一台RPi4,它满载着Raspbian Buster。

这是一个很棒的SDR免费开源软件。在MacOS上找到一个并不容易,大多数常用的项目都是为Linux和Windows开发的。解码433.92 Mhz信号并不真的需要它,但我想亲自动手看看实况射频,它相当整洁(当然,测试设备是否真正工作!)。

这是一个惊人的项目,可用于解码各种频率(433.92兆赫、868兆赫兹、315兆赫兹、345兆赫和915兆赫ISM频段)的各种基于射频的设备。这是做重活的软件。

非常简单的MQTT服务器和客户端实现,我们将使用它作为RTL_433的输出和Telegraf的输入,以将指标流式传输到远程InfluxDB实例。

用于收集和写入指标的代理。它将订阅我们的MQTT队列,解析指标并将其传输到InfluxDB。

让我们从快速测试我们闪亮的RTL-SDR接收器开始,我在这次测试中使用了两个短小的5 cm偶极伸缩天线,你绝对应该阅读RTL-SDR.com上的帅哥们写的关于使用提供的天线的伟大指南。在某些情况下,所使用的天线对于获得高质量的信号至关重要。对于我们的无线电调频测试,任何天线都可能足够,但如果你想接收137兆赫的气象卫星信号,你必须更具体。

现在您可以将加密狗连接到USB端口,启动Cubi SDR,选择“Generic RTL2832U OEM”并点击“Start”,您可以暂时忽略右侧看到的额外设置。你应该会看到一个漂亮的移动信号热图,你可以通过将鼠标悬停在上面并点击空格键(空格键)来改变中心频率,我选择了一家当地的调频广播电台,它的广播频率是88 Mhz(调频)。

现在您的带宽设置应该设置为200 Khz,您应该会得到一个很好的信号,当您将鼠标悬停在它上面时,频带将“封装”该信号,单击一下,您就应该开始收听收音机了!

让我们通过查看频率并确保那里有设备来准备使用RTL_433。通常它们会在30秒内传输信息,您可以将中心频率更改为433.92 Mhz,然后检查您是否看到数据。在上面视频接近尾声时,当我切换到433.92 Mhz时,您可以看到信号突发。

我假设您有一个运行Raspbian的运行SSH访问的Raspberry PI。我们需要编译RTL-SDR和RTL_433:

#install rtl-SDRmkdir~/sdrsudo apt-get updatesudo apt-get install git-core cmake libusb-1.0-0-dev build-essentialgit clone git://git.osmocom.org/rtl-sdr.git cd rtl-sdr/&;&;mkdir build&;&;cd build/cmake../-DINSTALL_

现在您可以将RTL-SDR加密狗连接到树莓PI,看看是否可以获得一些温度和湿度数据!(如果您还没有测试您的传感器,那么现在就是进行测试的时候了)。运行RTL_433,您应该会获得一些数据,如下面的视频所示。

所以我们得到了实时的传感器数据,这真是太棒了,让我们把所有的东西都流式传输到InfluxDB。您可以开立一个免费的Influx Cloud帐户,我们将配置Telegraf向其流式传输信息,在您打开帐户后,为您的存储桶生成一个API密钥。

我们将使用Eclipse Mosquito作为MQTT服务器,它是MQTT服务器的一个非常轻量级的实现,提供我们将使用的简单的发布/订阅服务。

Sudo apt-get将蚊子安装到蚊子-客户端#启用蚊子服务并检查它是否正在运行sudo systemctl使能蚊子suo系统ctl状态蚊子到。

CURL-SL https://repos.influxdata.com/influxdb.key|sudo APT-KEY ADD-DISRIB_ID=$(LSB_RELEASE-c-s)ECHO";Deb https://repos.influxdata.com/debian${DISRIB_ID}稳定";|TEE/ETC/APT/Soures.list.d/Influxdb.listsudo APT-获取更新udo APT-GET安装Telegraf。

在运行Telegraf服务之前,让我们先进行配置,您可以备份现有的配置并粘贴My/etc/Telegraf/telgraf.conf的内容,如下所示:

Sudo mv/etc/Telegraf/Telegraf.conf/etc/Telegraf/Telegraf.conf.baksudo bash-c&39;cat;lt;eoff>;/etc/Telegraf/Telegraf.conf[代理]间隔=";10s&34;round_Interval=TRUE METRY_BATCH_SIZE=1000METRY_BUFFER_LIMIT=10000集合抖动=";0S&34;同花顺。";debug=false Quiet=false logfile=";";hostname=";";omit_hostname=false[[outputs.fluxdb_v2]]URL=[";change this";]Token=";change this";Organization=";change this";bucket=";change this";[[inputs.mqtt_Consumer]]。TCP://127.0.0.1:1883";]QoS=0 CONNECTION_TIMEOUT=";30S";TOPTIONS=[";RTL_433/#";]client_id=";Telegraf";Persistent_Session=false data_format=";json";EOF';#您现在可以手动运行Telegraf以确保配置正常。#--config/etc/Telegraf/telgraf.conf#如果一切顺利,请继续并重新启动已在运行的服务udo systemctl Restart Telegraf。

您需要从Influx云获取InfluxDB端点URL、令牌、组织名称和存储桶。MQTT使用者设置指定连接到我们的MQTT服务器并侦听RTL_433/#主题,这基本上表示任何前缀为RTL_433/的主题都将被发送到InfluxDB。

最后一部分,只需运行RTL_433和MQTT输出!,以确保一切正常,您可以首先运行一个Moterto订阅客户端,并通过运行monterto_sub-t";RTL_433/#";来监听传入事件,然后启动它(我喜欢使用Screen,请参阅下一个视频):

Rtl_433-C si-F";mqtt://localhost:1883,events=RTL_433[/model][/id]";#您将不会在shell中获得任何数据,因此如果您认为#有些东西不起作用,请启动MONAMTO_SUB并确保您正在获取事件。

使用InfluxDB超出了本文的讨论范围,但是您应该能够获得像这样的时髦图表:

使用RTL-SDR解码RF数据只是冰山一角,我强烈建议您访问RTL-sdr.com查看一些令人惊叹的教程-您可以接收实时气象卫星数据,解码集群无线电系统,并看到宇宙!