オレゴンサイエンティフィックWMR500気象観測所からのデータのダウンロード

サイトに窓の外の実際の天気が必要であると判断したら。これは、インターネットに接続されたある種の気象観測所が必要であることを意味します。安価な。Davis Vantage Pro2 Plusのようなものを10万ルーブル以上使用し、それに接続するために別のコンピューターを保持することでさえ(mail.ruの場合のように)、予算と複雑さの両方の観点から望んでいませんでした。







選択は、安価でかなり新鮮な気象観測所Oregon ScientificWMR500に当てはまりました。私はそれをレビューしません、あなたはあなた自身でインターネットを検索することができます。彼女は温度、湿度、圧力、風速、風向を測定できれば十分です。理論的には、空気の質とUV放射のレベルについても認識していますが、対応する追加のセンサーが販売されていることはわかりませんでした。予算の価格はそれが機能した方法でした。彼女自身がWi-Fi経由でクラウドにデータを送信します。データアクセスは、モバイルアプリケーションでも、Webからでも利用できますが、少し奇妙です。実際、これについては説明します。



Webパーツにアクセスするには、モバイルアプリケーションで作成されたアカウントが必要です。実際、接続に使用するWi-Fiに関するステーションの構成は、ステーション自体の一時的なアクセスポイントに最初に接続するときのアプリケーションでのみ発生します。ここではすべてが指示に従って行われ、複雑なことは何もありません。その結果、アプリケーションで追加されたデバイスを取得します。そのIDはさらに必要になります。







Webインターフェイスはhttp://web-wmr500.idtlive.com/にあります。







入力すると、[表示]ボタンをクリックして平均的な美しさのグラフを表示したり、選択した期間のデータをXLS形式でエクスポートしたりできます([エクスポート]ボタン)。グラフに湿度を表示することは機能しますが、湿度データは温度データと一緒にエクスポートされるため、エクスポートは機能しません。これは奇妙な状況です。リクエストを見ると、データをjsonに返すチャートの特定のapiがあることがわかります。これは、すでに良好です。あなたは牛を奪うことができます!







たとえば、1日あたりの温度に関する一連のデータを「奪う」ことができます。リクエストはweb-wmr500.idtlive.com/index/api.show/index.htmlに送信され、パラメータが設定されます(例としてPHPのパラメータ配列を示します)。



$request = [
	'type'		=> 'temperature',
	'unit'		=> '°C',
	'id'		=> 'id--',
	'channel'	=> '---',
	'start'		=> "'2020-07-20T00:00:00Z'",
	'end'		=> "'2020-07-21T00:00:00Z'",
];


日付は一重引用符で、TimeZoneなしのISO8601形式で必要です。チャネル番号(チャネル)-センサーユニットが接続されているチャネルに応じて、1、2、または3。タイプごとの要求データは、要求されたデータの実際のタイプ(タイプ)と測定単位(単位)が異なります。



利用可能なすべてのタイプとユニット:



temperature – °C  °F
humidity – %
rain – mm/h  inch/h
wind – m/s, knots, kph, mph
pressure – mbar,hPa,mmHg,inHg


悪い点の1つは、api.showを使用すると、指定したパラメーターのデータしか取得できないことです。たとえば、風向や露点を見つけることはできませんが、統計情報はたくさんあります。私はしたいと思います。そしてここでEXPORTは私たちを助けます。同じパラメータを使用し



て、アドレスweb-wmr500.idtlive.com/index/api.export/index.htmlに最初のリクエストを行います。それに応じて、野生のどこかのサーバーが静的XLSファイルを生成し、それにリンクを提供します。その後はいつでもダウンロードできます(サーバーで2018年の他の人のファイルを見ましたが、フォルダーはインデックス作成用に開かれています)。ファイルにはすでにはるかに多くの情報があります。むしろ、すべてがそこで利用可能です。







しかし、これには長所と短所もあります。さらに、必要な期間のデータを取得できます。マイナス-このデータは15分間隔でWebパーツに送信されます。天気をデータベースに保存するのにも便利です。ステーションが起動した瞬間からすべてのデータを一度にダウンロードできます。ただし、最新の情報をより頻繁に、またはより速く受信したい場合は、より高度な調査を行う必要があります。



私は「びっくり」して、アプリケーションのトラフィックを傍受することにしました。アプリケーションはほぼ瞬時にデータを受信します。むしろ、ステーションから「直接」データを受信し、センサーユニットから受信した最新のデータを提供します。また、15秒に1回センサーユニットをポーリングします。



MQTTプロトコルを介したアプリケーションはAmazonインスタンスのどこかに移動し(アドレス35.161.38.128はトラフィックの傍受、cough-coughによって取得されました)、ランダムなトピックIDを持つトピックにサブスクライブし、ステーションのトピックに送信します(彼女自身はwi-fiとそこにのみMQTTを介して接続されているため、Webパーツは、明らかに、MQTTブローカーから同じデータを定期的に受信します)。また、php + curlを使用してWebパーツからデータを取得した場合(好きなものを使用できます)、1つの接続内で非同期が必要になります。すぐにそしてひざまずいて、私はnode.jsを使用することだけを考えました。 mqttモジュールが必要になります。



私の場合、execを介してphpに「プル」するのは単なるコンソールスクリプトです。



#!/usr/bin/node

var mqtt  = require('mqtt');
var md5   = require('md5');

String.prototype.insert = function (index, string) {
  if (index > 0)
   return this.substring(0, index) + string + this.substring(index, this.length);
  else
    return string + this;
};

var host       = 'mqtt.idtlive.com';
var your_mail  = 'your_account_mail@somehost.com'; // see in app, registered account
var clientId   = 'Android_' + your_mail;
var deviceId   = 'your-device-id'; // see in app connected device section, something like F9987D92-E180-64DE-A202-D43AAD0D5784
var channelId  = 1; // channel beetwen station & external sensors block

var timeInMs   = Date.now();
var uniqTopic  = md5(timeInMs).toUpperCase().insert(8,'-').insert(13,'-').insert(18,'-').insert(23,'-');

var client = mqtt.connect( {
  host : host,
  port : 1883,
  cliendId : clientId
});

client.on('connect', function() {
  client.subscribe('enno/out/json/'+uniqTopic,
    function(err) {
      if (!err) {
        client.publish('enno/out/json/'+deviceId, '{"command":"getChannel'+channelId+'Status","id":"'+uniqTopic+'"}');
      } else {
        console.log('connect error');
      }
    })
});

client.on('message', function(topic, message) {
  console.log(message.toString())
  client.end()
});


Webパーツ(JSON)、エクスポート(Excel)、またはMQTT(JSON)からのデータを解析する方法については説明しません。ここでは、好きなように処理できます。



それで全部です。誰かが突然助けてくれたら、私はただ嬉しいです。



PS> Update、スクリプトコードがコーミングされ、ランダムMQTTトピックの生成が追加され、アプリケーションからの作業をシミュレートし、ここにも投稿されます



All Articles