تنزيل البيانات من محطة الأرصاد الجوية Oregon Scientific WMR500

بمجرد أن قررنا أن الموقع يحتاج إلى طقسنا الفعلي خارج النافذة. هذا يعني أنك بحاجة إلى نوع من محطات الأرصاد الجوية مع اتصال بالإنترنت. غير مكلف. لأخذ شيء مثل Davis Vantage Pro2 Plus لأكثر من 100 ألف روبل ، وحتى الاحتفاظ بجهاز كمبيوتر منفصل للاتصال به (كما فعلوا في mail.ru ) لم ترغب في ذلك ، سواء من حيث الميزانية أو التعقيد.







وقع الاختيار على محطة أرصاد جوية رخيصة الثمن وجديدة إلى حد ما أوريغون العلمية WMR500. لن أراجعها ، يمكنك البحث في الإنترنت بنفسك. يكفي أن تقيس درجة الحرارة والرطوبة والضغط وسرعة الرياح واتجاهها. من الناحية النظرية ، تعرف أيضًا جودة الهواء ومستوى الأشعة فوق البنفسجية ، لكننا لم نجد المستشعرات الإضافية المقابلة معروضة للبيع. كان سعر الميزانية هو الطريقة التي تعمل بها. هي نفسها ترسل البيانات إلى السحابة عبر Wi-Fi. الوصول إلى البيانات متاح في تطبيقات الهاتف المحمول ، وكذلك من الويب ، ولكنه غريب بعض الشيء. هذا ، في الواقع ، سيتم مناقشته.



للوصول إلى جزء الويب ، تحتاج إلى حساب تم إنشاؤه في تطبيق الأجهزة المحمولة. في الواقع ، فإن تكوين المحطة من حيث استخدام Wi-Fi للاتصال يحدث فقط في التطبيق عند الاتصال في البداية بنقطة وصول مؤقتة للمحطة نفسها. هنا يتم كل شيء حسب التعليمات ولا يوجد شيء معقد. نتيجة لذلك ، نحصل في التطبيق على الجهاز المضاف ، الذي سنحتاج إلى معرفته أكثر.







توجد واجهة الويب على http://web-wmr500.idtlive.com/







بعد إدخاله ، يمكنك عرض مخططات الجمال المتوسط ​​بالنقر فوق الزر إظهار ، وكذلك تصدير البيانات بتنسيق XLS للفترة المحددة (زر تصدير). يجب أن أقول على الفور أن إظهار الرطوبة على الرسم البياني يعمل ، لكن التصدير لا يعمل ، لأن بيانات الرطوبة يتم تصديرها مع بيانات درجة الحرارة. هذا هو الوضع الغريب. بالنظر إلى الطلبات ، يمكنك أن ترى أن هناك واجهة برمجة تطبيقات معينة للمخططات التي ترجع البيانات إلى json ، وهو أمر جيد بالفعل. يمكنك سرقة الأبقار!







على سبيل المثال ، "نسرق" مجموعة من البيانات حول درجة الحرارة يوميًا. سينتقل الطلب إلى 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'",
];


التواريخ مطلوبة بعلامات اقتباس فردية وبتنسيق ISO 8601 بدون المنطقة الزمنية. رقم القناة (القناة) - 1 أو 2 أو 3 ، حسب القناة التي تتصل بها وحدة المستشعر. طلب البيانات حسب الأنواع تختلف في النوع الفعلي للبيانات المطلوبة (النوع) ووحدات القياس (الوحدة).



جميع الأنواع والوحدات المتوفرة:



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


هناك شيء واحد سيء ، من خلال api.show يمكنك الحصول على بيانات عن المعلمات المحددة فقط ، على سبيل المثال ، لا يمكنك معرفة اتجاه الرياح ، أو نقطة الندى ، ولكن هناك الكثير من المعلومات الإحصائية. وأود أن. وهنا سيساعدنا التصدير.



نقوم بتقديم الطلب الأول إلى العنوان web-wmr500.idtlive.com/index/api.export/index.html بنفس المعلمات. استجابةً لذلك ، يقوم الخادم في مكان ما في البرية بإنشاء ملف XLS ثابت ويعطي رابطًا إليه. يمكنك تنزيله بعد ذلك في أي وقت (رأيت ملفات أشخاص آخرين لعام 2018 على الخادم ، المجلد مفتوح للفهرسة). يوجد بالفعل المزيد من المعلومات في الملفات ، أو بالأحرى ، كلها متوفرة هناك.







ولكن هذا أيضًا له إيجابيات وسلبيات. بالإضافة إلى - يمكنك الحصول على البيانات للفترة المطلوبة. ناقص - يتم إرسال هذه البيانات إلى جزء الويب بفاصل زمني مدته 15 دقيقة. إنه مفيد أيضًا لتخزين الطقس في قاعدة البيانات الخاصة بك ، يمكنك تنزيل جميع البيانات مرة واحدة من لحظة بدء تشغيل المحطة وكل ذلك. ولكن إذا كنت ترغب في تلقي معلومات محدثة في كثير من الأحيان أو بشكل أسرع ، فسيتعين عليك إجراء المزيد من الأبحاث المتقدمة.



لقد "شعرت بالذهول" وقررت اعتراض حركة مرور التطبيق ، فهو يتلقى البيانات على الفور تقريبًا. بدلا من ذلك ، فإنه يتلقى البيانات "مباشرة" من المحطة ، مما يعطي أحدث البيانات الواردة من وحدة الاستشعار. ويقوم باستقصاء وحدة الاستشعار كل 15 ثانية.



اتضح أن التطبيق عبر بروتوكول MQTT يذهب إلى مكان ما في مثيل Amazon (تم الحصول على العنوان 35.161.38.128 عن طريق اعتراض حركة المرور والسعال والسعال) ، ويشترك في موضوع مع معرف موضوع عشوائي ، ويرسله إلى موضوع المحطة (هي نفسها عبر wi-fi و إنه متصل فقط عبر MQTT هناك فقط ، جزء الويب ، على ما يبدو ، يتلقى أيضًا بشكل دوري نفس البيانات من وسيط MQTT) مع معرفه أمرًا مثل "عزيزي ، أعطني حالتك ، إجابة في معرف الموضوع". وإذا استخدمت php + curl للحصول على بيانات من جزء الويب (يمكنك استخدام أفضل ما تفضله) ، فحينئذٍ يكون عدم التزامن مطلوبًا ضمن اتصال واحد. بسرعة وعلى ركبتي ، لم أفكر إلا في استخدام 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()
});


لن أخبرك بكيفية تحليل البيانات من جزء الويب (JSON) أو تصديرها (Excel) أو من MQTT (JSON) ، هنا يمكنك التعامل معها كما تريد.



هذا كل شئ. إذا ساعد شخص ما فجأة ، سأكون سعيدًا فقط.



ملاحظة> تحديث ، يتم تمشيط كود البرنامج النصي ، تمت إضافة إنشاء موضوع MQTT عشوائي ، لمحاكاة العمل من التطبيق ، كما تم نشره هنا



All Articles