Wrong last value of network connected node [solved]

Started by Lukapple, April 05, 2021, 02:21:22 AM

Lukapple

I've a network connected node, that pool data from my weather station using API, using this approach:

api.getStationsData(function(err, devices) {
            //temperature data
            var fakeSerialMsg = '['+nodeRightNow._id+']'+' C:'+devices[0].modules[0].dashboard_data.Temperature;
            processSerialData(fakeSerialMsg); 
            //rain data
            fakeSerialMsg = '['+nodeRightNow._id+']'+' R:'+devices[0].modules[1].dashboard_data.Rain;
            processSerialData(fakeSerialMsg);


Everything worked fine, until I added the additional call of processSerialData to get to get the rain data.
And now it shows the wrong temperature info in the "Last value" field. Any idea why?



Felix


Lukapple

It was minus X.

It looks like it's somehow stuck at 4.4, but the values on the graph are correct.
Another example:


And the "refresh time" is also stuck. It looks like something went wrong yesterday when I added the Rain data.
Maybe I should try to delete the old measures?

Felix

My guess is you're probably overriding something.
Ensure you don't have any duplicate metric definitions.
Otherwise I can't tell just by looking at photos, it will take some debugging of whatever code you added or modified.

Lukapple

Here is some more info what exactly I do.

I added this event which triggers every 10 minutes
weatherStationPoll: {
  label:'Netatmo : temperature/rain Poll',
  icon:'fa-heartbeat',
  descr:'Poll temperature/rain from Netatmo outdoor module',
  nextSchedule: function(nodeAtScheduleTime) { return 10*60*1000; }, //runs every 10 min
  scheduledExecute: function(nodeAtScheduleTime) {
    db.findOne({ _id : nodeAtScheduleTime._id }, function (err, nodeRightNow) {
      if (nodeRightNow)
      {
        var netatmo = require('netatmo');
        var auth = {
          "client_id": "removed",
          "client_secret": "removed",
          "username": "removed",
          "password": "removed",
        };
        var api = new netatmo(auth);
        // Get Stations Data
        // See docs: https://dev.netatmo.com/dev/resources/technical/reference/weatherstation/getstationsdata
         api.getStationsData(function(err, devices) {
           var fakeSerialMsg = '['+nodeRightNow._id+']'+' C:'+devices[0].modules[0].dashboard_data.Temperature;
           processSerialData(fakeSerialMsg); 
           //rain data
           fakeSerialMsg = '['+nodeRightNow._id+']'+' R:'+devices[0].modules[1].dashboard_data.Rain;
           processSerialData(fakeSerialMsg);
         });          
      }
    });
  },
},


and this additional metrics for Rain data:
exports.metrics = {
  R : { name:'Rain', regexp:/\R:([\d\.]+)\b/i, pin:1, graph:1},
}


I've checked the console logs and if you check the first line, there is correct temperature "C:3.4", but in the second line with the rain data, there is also temperature data, but with old value "4.4"

[04-04-21_23:21:39.710] [INFO]   [201] DB-Updated: processSerialData('[201] C:3.4',undefined):entry={"_id":201,"updated":1617571299679,"type":"WeatherMote","label":"Temperatura/dež dvorišče","descr":"Netatmo zunanji senzor","metrics":{"C":{"label":"C","value":3.4,"unit":"°","updated":1617571299679,"pin":1610044205214,"graph":1}},"events":{"weatherStationPoll":{"enabled":1,"executeDateTime":"2021-04-04T21:31:28.113Z"},"messageAirTempToDMD":{"enabled":1},"messageToOOK1":{"enabled":1}}}
[04-04-21_23:21:39.769] [INFO]   [201] DB-Updated: processSerialData('[201] R:0',undefined)  :entry={"_id":201,"updated":1617571299691,"type":"WeatherMote","label":"Temperatura/dež dvorišče","descr":"Netatmo zunanji senzor","metrics":{"C":{"label":"C","value":4.4,"unit":"°","updated":1617568735368,"pin":1610044205214,"graph":1},"Rain":{"label":"Rain","value":0,"updated":1617571299691,"pin":1,"graph":1}},"events":{"weatherStationPoll":{"enabled":1,"executeDateTime":"2021-04-04T21:31:28.113Z"},"messageAirTempToDMD":{"enabled":1},"messageToOOK1":{"enabled":1}}}


And here is the example contents from API Response, "modules" array:

[
  {
    _id: 'removed',
    type: 'NAModule1',
    module_name: 'Dvorišče',
    last_setup: 1573229405,
    data_type: [ 'Temperature', 'Humidity' ],
    battery_percent: 64,
    reachable: true,
    firmware: 50,
    last_message: 1617637983,
    last_seen: 1617637971,
    rf_status: 62,
    battery_vp: 5348,
    dashboard_data: {
      time_utc: 1617637971,
      Temperature: 12.8,
      Humidity: 48,
      min_temp: -0.5,
      max_temp: 15.1,
      date_max_temp: 1617628896,
      date_min_temp: 1617598391,
      temp_trend: 'down'
    }
  },
  {
    _id: 'removed',
    type: 'NAModule3',
    module_name: 'Smart Rain Gauge',
    last_setup: 1617370670,
    data_type: [ 'Rain' ],
    battery_percent: 100,
    reachable: true,
    firmware: 12,
    last_message: 1617637984,
    last_seen: 1617637984,
    rf_status: 83,
    battery_vp: 6278,
    dashboard_data: {
      time_utc: 1617637984,
      Rain: 0.101,
      sum_rain_1: 0.202,
      sum_rain_24: 0.2
    }
  }
]


Am I doing something wrong in that weatherStationPoll event?

Felix

Looks ok at first glance.
BTW You could call processSerialData a single time instead of twice - ie concatenate the metrics in a single message.

Lukapple

Thanks for the hint. Not I'm not sure what's the correct format for merging those data together. Should the data be comma separated?

Felix

It has to be space separated:

TOKEN:VALUE TOKEN2:VALUE2 TOKEN3

Lukapple

That worked perfectly. Temperature is now properly displayed. Thanks Felix! :)