UniPing RS-485に基づくWebベースの電子温度計

ご存じのように、身体の表現型は遺伝子型と環境の影響下で形成されます。 私のプロジェクトの1つは、小麦の遺伝子型、表現型、環境の関係を分析するWheatPGEシステムです。 夏には、植物が畑で栽培されます。 シーズン終了後、植物が生えた場所で正確な気象データにアクセスしたかったのです。 これらのデータは、それらを植物の遺伝子型およびさまざまな表現型特性と比較し、さまざまな統計分析を行うために必要です。



生物学者が働く分野は、アクセスできる建物から少し離れた場所にあり、機器を設置してインターネットを使用することができます。



この図は、センサーの設置場所を赤い点で示しています。 核物理学研究所の冷却噴水、カラシク店、植物が栽培されている畑などの主なアトラクションも注目されました。 これらはすべてノボシビルスクアカデムゴロドクにあります。



センサー設置場所



デバイス選択



タスクは、環境パラメーターを読み取り、イーサネット経由でデータを送信できるデバイスを見つけることでした。 同時に、実験や思考の時間はほとんどありませんでした。 2週間後、播種が始まり、この時点ですべてが機能するはずでした。 eBayでは、約100ドルの価値がある膨大な数の安価な中国製デバイスを販売しており、pywwsのようなプロジェクトでは、そのようなデバイスからデータを読み取ることができます。 ただし、eBayからの発送には時間がかかります。 結局、私たちが望むものを手に入れるということは事実ではありません。 その間、 NetPingデバイスに関する肯定的なフィードバックの記事に出会いました 。 一般に、彼らはセキュリティおよび管理システム用のデバイスに特化していますが、とりわけ、温度および湿度センサーを製造しています。 彼らに注文することにしました。



注文と説明UniPing RS-485



さまざまなセンサー、温度および湿度センサー自体、4メートルセンサー用の延長ケーブルからデータを読み取るデバイスが注文されました。



私たちの目的では、RS-485とRS-232は完全に同一です。 RS-485の選択は、在庫があるためです。

RS-485

写真のUniPing RS-485。 納入範囲:デバイス、電源アダプター、嵌合コネクター、接触センサー用アダプター。 湿度センサーは接点ではありません。 熱センサーです。 ここにそのような奇妙な論理があります。 したがって、接触センサー用のアダプターは使用されません。



UniPing RS-485は、1つの湿度センサーと4つの温度センサーを接続できます。 複数のセンサーを接続するには、NetPing接続ボードを使用することをお勧めします。そうしないと、すべて自分ではんだ付けする必要があります。 これは配送に含まれておらず、個別に注文されます。



湿度センサーを使用すると、相対湿度の値をパーセントで取得できます。 また、湿度センサーを使用すると、温度を測定できます。 湿度の測定精度+ -4.5%。 温度測定の精度は0.5Cです。



湿度センサー



温度センサーは湿度センサーよりも安価です:352。 防水ハウジングと176r。 いつものように。



湿度センサーの接続



湿度センサーを接続するには、DHS-44コネクターの対応物を使用します。 以下は配線図です。

カラーループ 連絡先番号DHS-44
黄色 28
緑色 32
23
24


DHS-44Mの番号付け(番号はコネクタ自体とその相互部分に示されています)



DHS-44M



ドキュメントには、2 m以上の長いループの場合、接点28と24の間に10 Kの抵抗を追加することをお勧めしています。しかし、これを行う必要はありませんでした。 5メートルのループを使用していますが、それなしではすべてが正常に機能します。



カスタマーサポートとのコミュニケーション



デバイスの電源をオンにしようとすると、最初で唯一の問題が明らかになりました。 デバイスの電源がオンになりませんでした。 診断では、電源が機能していないことが示されました。 NetPingのサポートを書きました。 彼は私たちが何をするか尋ねました。 彼らは、モスクワで彼らに遊びのないユニットを持って来て、彼らを取り替えることを提案した。 私はそのようなオプションは私には受け入れられないと反対しました。 彼らは壊れたブロックをメールで送ることを提案し、それをチェックし、問題があれば新しいブロックを送ります。 同時に、私の費用で往復輸送! 繰り返しになりますが、同時に送料はユニット自体のコストよりも何倍も高いことに反対しました。 その後、彼らは譲歩しました:彼らは私が自分の費用で作業ユニットではなく彼らに送ることを提案しましたが、彼らは私自身の費用で私に新しいものを送るでしょう。 その後、私はサポートに感謝し、ラジオ店に行き、まったく同じ特性を持つユニットと250ルーブル用のコネクタを見つけました。 ラッキー。



この短いストーリーの要約は次のとおりです。NetPingは、製品を顧客に出荷する前にテストしません。 彼はそれをオンにしようともしていません! サポートに関する苦情はありません-彼らは単に会社の経営陣のインストールを実行します。 しかし、それは完全に異なる可能性があります、 ここに素晴らしい例があります。



デバイスのセットアップ



UniPing RS-485には、設定を編集するための組み込みのWebインターフェイスがあります。 そこで、ネットワーク設定と管理者パスワードを変更します。 ネットワーク設定は静的にのみ設定できます。 どのセンサーがデバイスに接続されているかをすぐに確認し、それらが機能することを確認できます。 これでセットアップは完了です。



センサーからデータを読み取る



NetPingデバイスはSNMP v1をサポートしています。 SNMP v1を介したデータの取得は、OIDと呼ばれるデバイス内の特別なアドレスの読み取りに限定されます。 湿度と温度の値を取得するには、これらのパラメーターに対応するOIDを知る必要があります。 デバイスでサポートされているすべてのOIDのリストは、MIDファイルから読み取ることができます。 実際、MIDファイルはファームウェアであり、むしろその説明です。 デバイスメーカーのウェブサイトからダウンロードできます。 MIDファイルを操作するには、iReasoning MIB Browserプログラムを使用しました-無料です。 その助けにより、必要なOIDが取得されました。 SNMP経由でデータを受信し、MySQLデータベースに書き込むperlスクリプトを用意します。 このスクリプトは、1時間ごとに実行されるcronに配置されます。



#!/usr/bin/perl use strict; use warnings; use DBI; use Net::SNMP; #     my $database_login = 'login'; my $database_passwd = 'password'; my $database_name = 'db_name'; #    my $dbh = DBI -> connect("DBI:mysql:$database_name;host=localhost;", $database_login, $database_passwd) || die $DBI::errstr; #    my $snmp_host = '172.25.13.5'; # IP  hostname my $snmp_community = 'SWITCH'; # SNMP Community # my $snmp_oid_temperature = '.1.3.6.1.4.1.25728.8400.2.4.0'; # OID   #  my $snmp_oid_humidity = '.1.3.6.1.4.1.25728.8400.2.2.0'; # OID   #    #  -varbindlist      OID' #  $result     : OID =>  my $snmp_session = Net::SNMP->session( -hostname => $snmp_host, -community => $snmp_community, -version => 1, #     ) or die "can't connect"; my $result = $snmp_session->get_request(-varbindlist => [$snmp_oid_temperature,$snmp_oid_humidity]) or die "can't execute request\n"; #   print "$result->{$snmp_oid_temperature}\n$result->{$snmp_oid_humidity}\n"; #     $dbh -> do("INSERT INTO netping1 SET temperature=\"$result->{$snmp_oid_temperature}\", humidity=\"$result->{$snmp_oid_humidity}\"") || die $DBI::errstr;
      
      







API



データベースデータにアクセスするために、JSON形式でデータを返す簡単なAPIが実装されました。 データは2次元配列として返され、時間の増加順にソートされます。 このような2つの要素の配列の例:



 [[ 1338541272000, #       12, #  53 #  ], [ 1338544861000, #       14, #  49 #  ]]
      
      







以下が利用可能になりました。



 http://wheatdb.org/weather/json/now -     http://wheatdb.org/weather/json/1 -       http://wheatdb.org/weather/json/3 -      3  http://wheatdb.org/weather/json/7 -       http://wheatdb.org/weather/json/30 -      30  http://wheatdb.org/weather/json/0 -      
      
      







Webインターフェース



実装されたWebインターフェースはこちらから入手できます 。 habroeffectの場合、スクリーンショットも提供します。



Webインターフェース



インターフェイスには、湿度、温度の現在の値、およびこれらの値の変化のグラフが表示されます。 プロットには、HighStockライブラリを使用しましたが、非営利的な使用は無料です。 既に実装されているAPIを考えると、クライアント側のコードは非常に単純に見えます。



 <script type="text/javascript" src="http://wheatdb.org/static/js/stock/highstock.js"></script> <script type="text/javascript" src="http://wheatdb.org/static/js/stock/modules/exporting.js"></script> <script type="text/javascript"> $(document).ready(function() { $.getJSON("http://wheatdb.org/weather/json/3",{}, function(data){ // split the data set var t = [], h = [], dataLength = data.length; for (i = 0; i < dataLength; i++) { t.push([ data[i][0], // date data[i][1] // temperature ]); h.push([ data[i][0], // date data[i][2] // humidity ]) } // Create the chart window.chart = new Highcharts.StockChart({ chart : { renderTo : 'container' }, rangeSelector : { selected : 1 }, title : { text : '' }, yAxis: [{ title: { text: 'Temperature' }, height: 150, lineWidth: 2 }, { title: { text: 'Humidity' }, top: 220, height: 150, offset: 0, lineWidth: 2 }], series : [{ name : 'Temperature', type : 'area', data : t, marker : { enabled : true, radius : 3 }, shadow : true, tooltip : { valueDecimals : 0 }, fillColor : { linearGradient : { x1: 0, y1: 0, x2: 0, y2: 1 }, stops : [[0, Highcharts.getOptions().colors[0]], [1, 'rgba(0,0,0,0)']] } } , { name : 'Humidity', type : 'area', data : h, marker : { enabled : true, radius : 3 }, shadow : true, tooltip : { valueDecimals : 0 }, fillColor : { linearGradient : { x1: 0, y1: 0, x2: 0, y2: 1 }, stops : [[0, Highcharts.getOptions().colors[1]], [1, 'rgba(0,0,0,0)']] }, yAxis: 1 }] }); }); }); </script> <div id="container" style="height: 500px; min-width: 500px"></div>
      
      







結論



システムは約1か月稼働しています。 誤動作は検出されず、データは正しく読み取られます。 一般に、選択したデバイスはタスクへの適用可能性を示しています。 コメントで環境データを自動的に受信した経験を共有していただければ幸いです。 特にワイヤレスソリューションに興味があります。



All Articles