使用Raspberry Pi和Bluemix预测天气

在构建具有令人难以置信的潜力的设备时,IBM Bluemix和Raspberry Pi是完美的结合。 在本系列中,我们一直在探索这种潜力,并逐步建立起Raspberry Pi可以做什么。 在第一篇文章中,我们探讨了如何将Raspberry Pi与IBM Bluemix,IBM Watson和Node-RED连接起来 ;在第二篇文章中,我们通过IBM Watson的文本到语音为Raspberry Pi发出了声音 。 如果您还没有阅读这些内容,建议您先阅读一下,然后再回到这里! 在本文中,我们将使Pi能够告诉我们该地区的天气预报。

Raspberry Pi和IBM Bluemix Adventures第三部分

SitePoint / PatCat的艺术作品,徽标权利:IBM和Raspberry Pi Foundation

这个示例可以与上一个示例完全独立,但是它将使用相同的节点来实现文本到语音功能-因此,您需要保持不变!

将Weather Company数据服务添加到Bluemix

为了给您带来一些非常有价值的天气结果,IBM的员工确实购买了The Weather Company。 这意味着您现在可以访问所有这些全球数据,预测等! 那里很多。 要将其添加到您的IBM Bluemix设置中,请回到Bluemix Services页面并输入“ weather”以过滤您的选项,并找到“ IBM Bluemix的Weather Company Data”服务:

在Bluemix中查找天气服务

供我们测试的初始计划是免费计划。 它具有以下限制:

Weather Company Data Free计划使您每分钟最多可以对每个Weathermix帐户最多拨打10次The Weather Company,最多可以进行10,000个API调用。

在弹出的选项中,将您的空间保留为“ dev”(如果这是您在其他教程中一直在使用的空间),请将该服务保持未绑定状态,以便您可以在其他应用程序中重用该服务,如果需要,请重命名该服务就像(我保持原样)一样,将凭据保留不变,然后单击“创建”!

在Bluemix中创建我们的气象服务

为了能够从Node-RED(或实际上在任何地方)使用此服务,我们需要我们的凭证来证明我们是要求它的凭证。 转到“服务凭证”页面,并将用户名和密码详细信息复制到安全的地方:

复制我们的气象服务凭证

在Node-RED中访问我们的天气数据

打开与之前教程相同的流程(如果您是从头开始的,那么您将能够遵循这些步骤中的大多数步骤,只是知道您需要回到第2部分了解有关如何操作的详细信息做文字转语音位)。

我们将一个新的功能节点拖到我们的流程中,将其放在另一个流程的下面(如果需要,您可以为此创建一个全新的流程):

拖入新的功能节点

将该函数命名为“ hourlyWeatherURL”,或任何您想要的名称。 然后输入以下JavaScript代码:

msg.url = 'https://twcservice.mybluemix.net:443/api/weather/v1/geocode/{latitude}/{longitude}/forecast/hourly/48hour.json?units=m&language=en-US';
return msg;

您会注意到需要在此处自定义两个位置。 在{latitude}{longitude}字段中添加您自己的纬度和经度。 如果您不确定城市的价值, NASA会提供一个漂亮的经纬度查找器 。 对于我的城市悉尼,它看起来像这样:

msg.url = 'https://twcservice.mybluemix.net:443/api/weather/v1/geocode/-33.8671417236/151.2071075439/forecast/hourly/48hour.json?units=m&language=en-US';
return msg;

如果您更喜欢Farenheit而不是Celsius,也可以更改units变量。 units=m用于公制(摄氏度), units=e用于英制(华氏)。 当我们在澳大利亚使用摄氏温度时,我使用的是units=m

全部放入后,单击“完成”:

创建我们的新功能

接下来,我们希望能够使用在第一个节点中设置的URL向天气数据服务发出HTTP请求。 为此,我们将“ http request”节点拖动到:

拖动新的http请求节点

然后,我们双击它以打开其设置并执行以下操作:

  • 勾选“使用基本身份验证”-我们需要它包含我们先前复制的用户名和密码。
  • 从前面添加上述用户名和密码。
  • 选择“已解析的JSON对象”作为我们的返回值-这样,我们将收到一个JSON对象,可以在以下节点中对其进行进一步过滤。
  • 随便命名,我选择“ retrieveWeather”。
  • 点击“完成”!

设置我们的http请求节点

为了从第一个节点引入URL,我们必须记住将其连接到“ http request”节点:

将我们的http请求模块连接到我们的功能

然后,拖入“调试”节点并将其连接到末端。 这将使我们查看正在通过什么数据的日志,以检查其是否正常工作:

拖入调试节点并将其连接

最后,我们需要一种启动整个过程的方法。 为此,请拖动一个新的“注入”节点并将其连接到起点:

在开始处添加一个注入节点

现在我们准备对其进行测试! 点击“部署”:

单击部署进行测试

为了运行我们的流程,我们需要在“注入”节点上单击带有标签“时间戳”的小方形按钮。 这将运行我们的天气请求,并在调试选项卡中显示数据:

开始使用调试节点运行流程

优秀的! 一切都应该如我们所愿。

返回的msg.payload包含一系列有关未来几个小时的预测。 我们采用数组中的第一项来获取当前时间。 msg.payload看起来有点像这样:

{
  "metadata": {
    ...
  },
  "forecasts": [
    {
      "class": "fod_long_range_hourly",
      "expire_time_gmt": 1472786395,
      "fcst_valid": 1472785200,
      "fcst_valid_local": "2016-09-02T13:00:00+1000",
      "num": 1,
      "day_ind": "D",
      "temp": 16,
      "dewpt": 14,
      "hi": 16,
      "wc": 16,
      "feels_like": 16,
      "icon_extd": 1200,
      "wxman": "wx2500",
      "icon_code": 12,
      "dow": "Friday",
      "phrase_12char": "Rain",
      "phrase_22char": "Rain",
      "phrase_32char": "Rain",
      "subphrase_pt1": "Rain",
      "subphrase_pt2": "",
      "subphrase_pt3": "",
      "pop": 93,
      "precip_type": "rain",
      "qpf": 0.96,
      "snow_qpf": 0.0,
      "rh": 92,
      "wspd": 8,
      "wdir": 17,
      "wdir_cardinal": "NNE",
      "gust": null,
      "clds": 100,
      "vis": 6.0,
      "mslp": 1006.8,
      "uv_index_raw": 0.83,
      "uv_index": 1,
      "uv_warning": 0,
      "uv_desc": "Low",
      "golf_index": 2,
      "golf_category": "Very Poor",
      "severity": 1
    },
    ... (the next hours go here)

现在,让我们超越基本的调试日志,让我们的Pi通过它先前学习的语音能力来告诉我们这些数据!

提醒我们的Pi如何说话

为了使我们的Pi说话,就像本系列上一篇文章中的CPU温度一样,我们只需要复制该教程中的最后七个节点即可。 您可以通过拖动并全部选中它们,然后按Ctrl + C(在Windows中)或Cmd + C(在Mac中)来复制它们:

从我们之前的教程中选择并复制语音节点

使用Ctrl + V(在Windows上)或Cmd + V(在Mac上)粘贴它们,并将它们整齐地放置在我们的新天气流下。 重命名第一个函数“ Weather Text”,并将其连接到我们的“ retrieveWeather”节点,以便它也从该节点获取输出:

将节点重命名为Weather Text

然后双击“天气文本”功能。 在此范围内,我们可以设置我们希望Pi所说的内容。 首先,将以下JavaScript代码放入其中:

msg.payload = "The current temperature is " + 
              msg.payload.forecasts[0].temp +
              " degrees celsius";
return msg;

这将告诉我们的Pi,我们希望将输出结构化为返回“当前温度为X摄氏度” (如果您使用的是华氏温度,请随时在此处进行更改)。

现在,如果您希望Pi继续告诉您它的CPU温度,您可以跳过此特定步骤,但是我个人觉得天气更有趣,并且不想再听到有关它的CPU的信息。 如果您和我一样,请从另一个流中双击较旧的“时间戳”节点。 取消重复设置,然后取消选中“是否在启动时注入一次?”。 这样,仅当我们单击并告诉它运行时,该流程才会运行。 然后点击“完成”:

删除重复片段并注入其他流程一次以停止其运行

现在,我们可以将天气流设置为自动运行。 双击新的“时间戳”节点,并将其设置为根据需要重复执行一次(我每30分钟选择一次)。 点击“开始时注入一次?” 这样,当您部署流程时,它也会自动运行。 然后照常单击“完成”:

将我们的另一个节点设置为每30分钟重复一次

部署这些更改后,我们会很好地对我们说出当前温度的自动通知!

部署完成版

我们还能做什么?

想知道该服务还有哪些其他数据? 您可以在Weather Company Data For IBM Bluemix API页面上找到weather API可以提供的所有可能性。 在此示例中,我们使用“按地理编码的每小时48小时预报” API。 为了使我们的示例更高级,让我们添加一个小时是否会下雨的数据(下一个小时只是返回数组中的第二个值)

msg.payload = "The current temperature is " + 
              msg.payload.forecasts[0].temp +
              " degrees celsius. " +
              "There is a " +
              msg.payload.forecasts[1].pop + 
              " percent chance of " +
              msg.payload.forecasts[1].precip_type +
              " in an hour.";
return msg;

我们甚至可以更进一步,添加有关温度(当您添加湿度和风时)实际上是否会达到该温度的信息。 API有一个用于此的字段,我们可以这样访问它:

var tempToSay = msg.payload.forecasts[0].temp != msg.payload.forecasts[0].feels_like ? 
        "The current temperature is " + msg.payload.forecasts[0].temp + 
        " degrees celsius, but it will feel more like " + 
        msg.payload.forecasts[0].feels_like + ". " : 
        "The current temperature is " + msg.payload.forecasts[0].temp + 
        " degrees celsius. ";

msg.payload = tempToSay +
              "There is a " +
              msg.payload.forecasts[1].pop + 
              " percent chance of " +
              msg.payload.forecasts[1].precip_type +
              " in an hour.";
return msg;

基本上,如果上面的代码与msg.payload.forecasts[0].temp值不同,则上面的代码仅提及msg.payload.forecasts[0].feels_like值。

结论

有了它,我们有了Raspberry Pi,它可以通过各种方式告诉我们天气预报。 从风数据到积雪,那里还有更多的信息! 甚至还有一个值代表打高尔夫球的天气状况,这似乎很奇怪。 力量就在您手中!

如果您渴望通过Bluemix为Raspberry Pi提供更多功能,那就不用担心! 随着我们继续探索Bluemix平台的更多可能性,本系列中会有更多内容。 我非常喜欢这个过程,并在这里抱有很大的愿望!

您是否已使用Bluemix和Raspberry Pi构建了令人兴奋的东西? 还是您有想要使用Bluemix制作的东西,而我们希望涵盖其中? 在评论中留言!

From: https://www.sitepoint.com/forecasting-weather-with-ibm-watson-bluemix-raspberry-pi/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值