Topic: JS API sensor control
hello developers can anybody replay sensor control examples in JS API. for example i need get ignation message. thanks
hello developers can anybody replay sensor control examples in JS API. for example i need get ignation message. thanks
Example of creating engine ignition sensor:
var sensor = {
id: 0, //id
n: "sensor1", //name
t: "engine operation", // type
d: "engine ignition sensor", // description
m: "On/Off", // unit of measure
p: "adc1", // parameter
f: 0, // flags
c: "", // config (any object)
vt: 0, // validation type
vs: 0, // validation sensor ID
tbl: // sensor calculation table
[{x: 0, a: 0, b: 0} {x: 13, a: 0, b: 1}] //if adc1 < 13 V engine is off
};
unit.updateSensor(sensor, qx.lang.Function.bind(function(code, result) {
if (code)
alert("error");
else
alert("sensor updated");
}, this));
Getting values of all unit sensors:
var sensors = unit.getSensors();
for (var i in sensors) { //if(sensors[i].t == "engine operation") - if you want to work only with engine ignition sensors
if (!sensors[i])
continue;
var value = this.get_sensor_value(unit, sensors[i]);
alert("name: " + sensors[i].n + " value: " + value);
}
get_sensor_value: function(unit, sensor) {
if (!sensor || !unit)
return "N/A";
var msg = unit.getLastMessage();
var res = unit.calculateSensorValue(sensor, msg);
if (res != -348201.3876) // constant of invalid value
return res;
return "N/A";
}
Thanks, i'll try it... But it was very helpful answer!
My Code is:
var ign = unit.getSensors(); ign = ign[1].t;
var val = unit.calculateSensorValue(ign, msg);
console.log(val);
output is -348201.3876 how i can know engine is off or on? thanks.
This is constant of "out of range value".
Out of range values
If a value received is out of range (the bounds are indicated in sensor properties), then the phrase Out of range is displayed as formatted value. To exclude such rows, flag the option Skip out of range values in the report template.
http://docs.gurtam.com/en/hosting/user/ … nge_values and comment #2 in code
thanks kopa for answer but can you replay me example how to get engine on or off? i can't understand what is out of range.
get_sensor_value(unit, sensor) {
if (!sensor || !unit)
return "N/A";
var msg = unit.getLastMessage();
var res = unit.calculateSensorValue(sensor, msg);
if (res != -348201.3876) // constant of invalid value
return res;
return "N/A";
}
var value = get_sensor_value(unit, sensor);
if (parseFloat(value))
value = "on";
else
value = "off";
it is not so useful if there isn't needfull parameter in last message. in such way you can request another message
i try that code like this:
var ign = unit.getSensors(); ign = ign[1].t;
var res = unit.calculateSensorValue(ign, msg);
if (parseFloat(res))
value = "on";
else
value = "off";
console.log(value);
but it always returns ON.. it always parses float and its answer is on? i dont understand how it must work if all units returns -348201.3876 that value. what i do wrong?
You miss one more check:
if (res != -348201.3876 && parseFloat(res))
value = "on";
else
value = "off";
-348201.3876 - is a constant of invalid value
its not works now all units shows me OFF do you know why?
-348201.3876 means that msg not contains param which needs to calculate sensor value. On the monitoring site that value looks as "Unknown".
итак, значит если посмотреть на хостинге, то у 70 процентов всех подключенных у нас объектов на данный момент включенно зажигание, но приэтом не нашлось не одного устройства, которое через этот код
var ign = unit.getSensors(); ign = ign[1].t;
var res = unit.calculateSensorValue(ign, msg);
if (res != -348201.3876 && parseFloat(res))
value = "on";
else
value = "off";
console.log(value);
показало бы зажигание открытым. В чем проблема?
specifically for ignition sensor the values are:
0 - off
-348201.3876 - no parameter to calculate sensor value
any other float - on
это я понимаю, но проблема в том, что этот код возращает -348201.3876 от всех устройств в независимости открыто у него зажигание или нет... При это не думайте что в посленем сообщение не передается параметр зажигания, в каждом сообщении всех типов устройств передается значение или ign = 1/0 или в параметре in1 или in2, но это все не так важно.
По идее указывая на хостинге в настройках сенсора, тип сенсора "датчик зажигания", что датчиком зажигания будет такой-то параметр, должно же быть воможным достать эту информацию обратно через SDK...
Почему запрашивая параметр датчика зажигания этим кодом:
var ign = unit.getSensors(); ign = ign[1].t;
var res = unit.calculateSensorValue(ign, msg);
if (res != -348201.3876 && parseFloat(res))
value = "on";
else
value = "off";
console.log(value);
в ответ мы получаем -348201.3876? Ведь это должно означать, что Wialon не знает открыто ли зажигание у объектов или нет, но как видно на хостинге, у большенства оно сейчас открыто.
Помогите, пожалуйста...
Выйдите с сайта мониторинга и войдите заново, все значения датчиков будут отображаться по последнему сообщению, по мере прихода сообщений они будут обновляться и если в каком-то сообщении не удастся рассчитать значение датчика, то будет отображаться последнее известное валидное значение. Воспользуйтесь таблицой "Трассировка датчика" по всем сообщениям в отчетах для внесения ясности в каких сообщениях какие значения датчика имели место. http://docs.gurtam.com/ru/hosting/user/ … es/tracing
ребята, не издевайтесь, причем тут это?!
Я говорю о том что не могу достать значение датчика зажигания через SDK, что это вообще за ответ?
unitedsecurity
у вас в сообщении msg есть параметр, который нужен для расчета значения датчика и функция calculateSensorValue возвращает значение -348201.3876?
Сайт мониторинга работает через тот же SDK что и Вы...
Oooky guys i now look at this screen shot for console log and please replay me why WHY why and again why all units gives me this -348201.3876 number ^^ oky?
thanks...
calculateSensorValue(Object sensor, currMsg?, prevMsg?) http://docs.gurtam.com/api/hosting/#wia … UnitSensor
typeof ign=ign1[1].n != Object
maybe ign=ign1[1]
thanks kopa now it works.
как ни странно возвращаю тему.
Пытаюсь получить таким образом значение датчика уровня топлива в литрах
и приходит константное значение о неправильных параметрах
Можно получить рабочий пример ? на текущий день