Wirenboard

Получить данные геолокации

cat /dev/ttyMOD2

Функция whenChanged для массива топиков

whenChanged: ["VInputs/DI1_CommonFault", "VInputs/DI2_VoltageStatus"] ,cat /dev/ttyMOD2

Работа с виртуальной сетвеой картовй GSM

wb-gsm restart_if_broken
ifup usb0
ifconfig

Принципы написания правил JS

https://github.com/wirenboard/wb-rules

Скетч рабочий 20230601 17:53

trackMqtt("/devices/flapController/controls/itemStrtDgu", function(message){
  if(message.value=="1")
  {
    dev['flapController/itemStrtDguStr'] = 'true';
  }
  else if(message.value=="0")
  {
    dev['flapController/itemStrtDguStr'] = 'false';
  }
});

trackMqtt("/devices/flapController/controls/itemManStrtLght", function(message){
  if(message.value=="1")
  {
    dev['flapController/itemManStrtLghtStr'] = 'true';
  }
  else if(message.value=="0")
  {
    dev['flapController/itemManStrtLghtStr'] = 'false';
  }
});

trackMqtt("/devices/flapController/controls/itemAutoStrtLght", function(message){
  if(message.value=="1")
  {
    dev['flapController/itemAutoStrtLghtStr'] = 'true';
  }
  else if(message.value=="0")
  {
    dev['flapController/itemAutoStrtLghtStr'] = 'false';
  }
});


var idFlapTimer = null; //идентификатор таймера заслонки для управления им
var FLAP_TIMEOUT_S = 3;  //допустимое время открытия заслонки, с

defineVirtualDevice('flapController', {
  title: 'Flap controller',

  cells: {
    itemStrtDgu: {
      type: 'switch',
      value: false,
      readonly: false
    },
    itemStrtDguStr: {
      type: 'text',
      value: 'false',
      readonly: true
    },

    itemAutoStrtLght: {
      type: 'switch',
      value: false,
      readonly: false
    },
    itemAutoStrtLghtStr: {
      type: 'text',
      value: 'false',
      readonly: true
    },

    itemManStrtLght: {
      type: 'switch',
      value: false,
      readonly: false
    },
    itemManStrtLghtStr: {
      type: 'text',
      value: 'false',
      readonly: true
    },

    itemState: {
      type: 'text',
      value: 'close',
      readonly: true
    },
  }
});

function startFlapTimer() {
  return setTimeout(function () {
    dev['flapController/itemState'] = 'fault';
    dev[AI_TST] = 18;
  }, FLAP_TIMEOUT_S * 1000);
}

defineRule({
  whenChanged: 'flapController/itemStrtDguStr',
  then: function (neValue) {
    if (dev['flapController/itemStrtDguStr'] == 'true') {
        dev['flapController/itemState'] = 'true';
      }
    if (dev['flapController/itemStrtDguStr'] == 'false') {
        dev['flapController/itemState'] = 'false';
        idFlapTimer = startFlapTimer();
      }
    }
  }
);

defineRule({
  whenChanged: 'flapController/itemManStrtLghtStr',
  then: function (neValue) {
    if (dev['flapController/itemManStrtLghtStr'] == 'true') {
        dev['wb-gpio/EXT2_R3A1'] = true;
      }
    if (dev['flapController/itemManStrtLghtStr'] == 'false') {
        dev['wb-gpio/EXT2_R3A1'] = false;
      }
    }
  }
);

Скетч рабочий 20230602 14:38

var itemAlrmLvl = 'wb-gpio/EXT1_IN1'
var itemAutoModeDgu = 'wb-gpio/EXT1_IN6'
var itemStrtLamp = 'wb-gpio/EXT2_R3A1'
var itemTempOut = 'wb-mai6_191/IN 3 P Temperature'

var idInitTimer = null; //идентификатор таймера
var idStrtTimer = null; //идентификатор таймера
var idPwrTimer = null; //идентификатор таймера

var INIT_TIMEOUT_S = 2;  //время инициализации, с
var STRT_TIMEOUT_S = 2;  //время запуска стартера, с
var PWR_TIMEOUT_S = 2;  //время ожидания готовности, с

trackMqtt("/devices/flapController/controls/itemStrtDgu", function(message){
  if(message.value=="1")
  {
    dev['flapController/itemStrtDguStr'] = true;
  }
  else if(message.value=="0")
  {
    dev['flapController/itemStrtDguStr'] = false;
  }
});

trackMqtt("/devices/flapController/controls/itemManStrtLght", function(message){
  if(message.value=="1")
  {
    dev['flapController/itemManStrtLghtStr'] = true;
  }
  else if(message.value=="0")
  {
    dev['flapController/itemManStrtLghtStr'] = false;
  }
});

trackMqtt("/devices/flapController/controls/itemAutoStrtLght", function(message){
  if(message.value=="1")
  {
    dev['flapController/itemAutoStrtLghtStr'] = true;
  }
  else if(message.value=="0")
  {
    dev['flapController/itemAutoStrtLghtStr'] = false;
  }
});

defineVirtualDevice('flapController', {
  title: 'Flap controller',

  cells: {
    itemStrtDgu: {
      type: 'switch',
      value: false,
      readonly: false
    },
    itemStrtDguStr: {
      type: 'switch',
      value: false,
      readonly: false
     },

    itemAutoStrtLght: {
      type: 'switch',
      value: false,
      readonly: false
    },
    itemAutoStrtLghtStr: {
      type: 'switch',
      value: false,
      readonly: false
     },

    itemManStrtLght: {
      type: 'switch',
      value: false,
      readonly: false
    },
    itemManStrtLghtStr: {
      type: 'switch',
      value: false,
      readonly: false
     },

    itemState: {
      type: 'text',
      value: 'Отключен',
      readonly: true
    },
     itemSeason: {
      type: 'text',
      value: 'Зима',
      readonly: true
    },
  }
});

function startInitTimer() {
  return setTimeout(function () {
    dev['flapController/itemState'] = 'Запуск стартера';
    idStrtTimer = startStrtTimer();
  }, INIT_TIMEOUT_S * 1000);
}

function startStrtTimer() {
  return setTimeout(function () {
    dev['flapController/itemState'] = 'Ожидание разрешения на пуск нагрузки';
    idPwrTimer = startPwrTimer();
  }, STRT_TIMEOUT_S * 1000);
}

function startPwrTimer() {
  return setTimeout(function () {
    dev['flapController/itemState'] = 'Готовность';
  }, PWR_TIMEOUT_S * 1000);
}

defineRule({
  whenChanged: ['flapController/itemStrtDguStr', itemAlrmLvl, itemAutoModeDgu],
  then: function() { 
      if (dev[itemAutoModeDgu] == true) { //! инвертировать
          dev['flapController/itemState'] = 'Нет авто';
          clearTimeout(idInitTimer);
          clearTimeout(idStrtTimer);
          clearTimeout(idPwrTimer);
        }
      else if (dev[itemAlrmLvl] == true) {
          dev['flapController/itemState'] = 'Авария';
          clearTimeout(idInitTimer);
          clearTimeout(idStrtTimer);
          clearTimeout(idPwrTimer);   
        }   
      else{
        if (dev['flapController/itemStrtDguStr'] == true) {
            dev['flapController/itemState'] = 'Инициализация';
            idInitTimer = startInitTimer();
          }
        if (dev['flapController/itemStrtDguStr'] == false) {
            dev['flapController/itemState'] = 'Отключен';
            clearTimeout(idInitTimer);
            clearTimeout(idStrtTimer);
            clearTimeout(idPwrTimer);
          }
      }
    }
  }
);

defineRule({
  whenChanged: ['flapController/itemManStrtLghtStr', 'flapController/itemAutoStrtLghtStr', 'flapController/itemState'],
  then: function() {
    if (dev['flapController/itemState'] == 'Готовность'){
      if (dev['flapController/itemAutoStrtLghtStr'] == true){    
        if (dev['flapController/itemManStrtLghtStr'] == true) {
            dev[itemStrtLamp] = true;
          }
        if (dev['flapController/itemManStrtLghtStr'] == false) {
            dev[itemStrtLamp] = false;
          }
        }
      if (dev['flapController/itemAutoStrtLghtStr'] == false){    
        dev[itemStrtLamp] = false;      
        }
      }
    else{
     dev[itemStrtLamp] = false; 
    }
    }
  }
);

defineRule({
  whenChanged: itemTempOut,
  then: function() {
        if (dev[itemTempOut] > 29) {
            dev['flapController/itemSeason'] = 'Лето';
          }
        if (dev[itemTempOut] < 27) {
            dev['flapController/itemSeason'] = 'Зима';
          }
        }
    }
);

Скет 20230605 10:14

var itemAlrmLvl = 'wb-gpio/EXT1_IN1'
var itemRunGen = 'wb-gpio/EXT1_IN2'
var itemRunPwr = 'wb-gpio/EXT1_IN3'
var itemHeatSha = 'wb-gpio/EXT1_IN4'
var itemHeatDgu = 'wb-gpio/EXT1_IN5'
var itemAutoModeDgu = 'wb-gpio/EXT1_IN6'

var itemStrtDgu = 'wb-gpio/EXT2_R3A1'
var itemLnchDgu = 'wb-gpio/EXT2_R3A2'
var itemStrtLamp = 'wb-gpio/EXT2_R3A3'
var itemHeatDgu = 'wb-gpio/EXT2_R3A4'

var itemLvlGas = 'wb-mai6_191/IN 1 P Resistance'
var itemBrht = 'wb-mai6_191/IN 2 P Resistance'
var itemTempOut = 'wb-mai6_191/IN 3 P Temperature'

var idInitTimer = null; //идентификатор таймера
var idStrtTimer = null; //идентификатор таймера
var idPwrTimer = null; //идентификатор таймера
var idPreheatTimer = null; //идентификатор таймера

var INIT_TIMEOUT_S = 2;  //время инициализации, с
var STRT_TIMEOUT_S = 6;  //время запуска стартера, с
var PWR_TIMEOUT_S = 2;  //время ожидания готовности, с
var PREHEAT_TIMEOUT_S = 4;  //время ожидания готовности, с

trackMqtt("/devices/flapController/controls/itemStrtDgu", function(message){
  if(message.value=="1")
  {
    dev['flapController/itemStrtDguStr'] = true;
  }
  else if(message.value=="0")
  {
    dev['flapController/itemStrtDguStr'] = false;
  }
});

trackMqtt("/devices/flapController/controls/itemManStrtLght", function(message){
  if(message.value=="1")
  {
    dev['flapController/itemManStrtLghtStr'] = true;
  }
  else if(message.value=="0")
  {
    dev['flapController/itemManStrtLghtStr'] = false;
  }
});

trackMqtt("/devices/flapController/controls/itemAutoStrtLght", function(message){
  if(message.value=="1")
  {
    dev['flapController/itemAutoStrtLghtStr'] = true;
  }
  else if(message.value=="0")
  {
    dev['flapController/itemAutoStrtLghtStr'] = false;
  }
});


defineVirtualDevice('flapController', {
  title: 'Flap controller',

  cells: {
    itemStrtDgu: {
      type: 'switch',
      value: false,
      readonly: false
    },
    itemStrtDguStr: {
      type: 'switch',
      value: false,
      readonly: false
     },

    itemAutoStrtLght: {
      type: 'switch',
      value: false,
      readonly: false
    },
    itemAutoStrtLghtStr: {
      type: 'switch',
      value: false,
      readonly: false
     },

    itemManStrtLght: {
      type: 'switch',
      value: false,
      readonly: false
    },
    itemManStrtLghtStr: {
      type: 'switch',
      value: false,
      readonly: false
     },

    itemState: {
      type: 'text',
      value: 'Отключен',
      readonly: true
    },
     itemSeason: {
      type: 'text',
      value: 'Зима',
      readonly: true
    },
  }
});

function startInitTimer() {
  return setTimeout(function () {
    if (dev['flapController/itemSeason'] == 'Зима') {
      dev['flapController/itemState'] = 'Прогрев картера';
      idPreheatTimer = startPreheatTimer();      
    }
    if (dev['flapController/itemSeason'] == 'Лето') { 
      dev['flapController/itemState'] = 'Запуск стартера';
      idStrtTimer = startStrtTimer();
    }
  }, INIT_TIMEOUT_S * 1000);
}

function startStrtTimer() {
  return setTimeout(function () {
    dev['flapController/itemState'] = 'Авария';
  }, STRT_TIMEOUT_S * 1000);
}

function startPwrTimer() {
  return setTimeout(function () {
    dev['flapController/itemState'] = 'Готовность';
  }, PWR_TIMEOUT_S * 1000);
}

function startPreheatTimer() {
  return setTimeout(function () {
    dev['flapController/itemState'] = 'Запуск стартера';
    idStrtTimer = startStrtTimer();
  }, PREHEAT_TIMEOUT_S * 1000);
}

defineRule({
  whenChanged: ['flapController/itemStrtDguStr', itemAlrmLvl, itemAutoModeDgu],
  then: function() { 
      if (dev[itemAutoModeDgu] == true) { //! инвертировать
          dev['flapController/itemState'] = 'Нет авто';
          clearTimeout(idInitTimer);
          clearTimeout(idStrtTimer);
          clearTimeout(idPwrTimer);
        }
      else if (dev[itemAlrmLvl] == true) {
          dev['flapController/itemState'] = 'Авария';
          clearTimeout(idInitTimer);
          clearTimeout(idStrtTimer);
          clearTimeout(idPwrTimer);   
        }   
      else{
        if ((dev['flapController/itemStrtDguStr'] == true) && !(dev['flapController/itemState'] == 'Авария')) {
            dev['flapController/itemState'] = 'Инициализация';
             idInitTimer = startInitTimer();
          }
        if (dev['flapController/itemStrtDguStr'] == false) {
            dev['flapController/itemState'] = 'Отключен';
            clearTimeout(idInitTimer);
            clearTimeout(idStrtTimer);
            clearTimeout(idPwrTimer);
          }
      }
    }
  }
);

defineRule({
  whenChanged: ['flapController/itemManStrtLghtStr', 'flapController/itemAutoStrtLghtStr', 'flapController/itemState'],
  then: function() {
    if (dev['flapController/itemState'] == 'Готовность'){
      if (dev['flapController/itemAutoStrtLghtStr'] == true){    
        if (dev['flapController/itemManStrtLghtStr'] == true) {
            dev[itemStrtLamp] = true;
          }
        if (dev['flapController/itemManStrtLghtStr'] == false) {
            dev[itemStrtLamp] = false;
          }
        }
      if (dev['flapController/itemAutoStrtLghtStr'] == false){    
        dev[itemStrtLamp] = false;      
        }
      }
    else{
     dev[itemStrtLamp] = false; 
    }
    }
  }
);

defineRule({
  whenChanged: itemTempOut,
  then: function() {
        if (dev[itemTempOut] > 29) {
            dev['flapController/itemSeason'] = 'Лето';
          }
        if (dev[itemTempOut] < 27) {
            dev['flapController/itemSeason'] = 'Зима';
          }
        }
    }
);

defineRule({
  whenChanged: itemRunGen,
  then: function() {
        if ((dev[itemRunGen] == true) && (dev['flapController/itemState'] == 'Запуск стартера') && (dev[itemAutoModeDgu] == false)) { //инвертировать
            clearTimeout(idStrtTimer);
            dev['flapController/itemState'] = 'Ожидание разрешения на пуск нагрузки';
            idPwrTimer = startPwrTimer();
          }
        if ((dev[itemRunGen] == false) && ((dev['flapController/itemState'] == 'Готовность') || (dev['flapController/itemState'] == 'Ожидание разрешения на пуск нагрузки'))) {
            dev['flapController/itemState'] = 'Авария';
            clearTimeout(idInitTimer);
            clearTimeout(idStrtTimer);
            clearTimeout(idPwrTimer);
          }   
        }
    }
);

Скетч рабочего модального окна

Не удалось изменить размер всплывающего окна

- component: oh-button
  config:
    text: "Подрбонее"  
    bgColor: blue
    style:
      margin: 15px  
      left: 0%
      top: 0%
      border-radius: 12px
      font-size: 16px
      color: white
    action: sheet
    actionModal: widget:dgu_full_widget        
    actionModalConfig:
      itemPower: =props.itemPower
      itemCurrent: =props.itemCurrent
      itemEnergy: =props.itemEnergy
      itemVoltage: =props.itemVoltage
      itemLvlGas: =props.itemLvlGas

Скетч 20230607 16:04

var itemAlrmLvl = 'wb-gpio/EXT1_IN1'
var itemRunGen = 'wb-gpio/EXT1_IN2'
var itemRunPwr = 'wb-gpio/EXT1_IN3'
var itemHeatSha = 'wb-gpio/EXT1_IN4'
var itemHeatDgu = 'wb-gpio/EXT1_IN5'
var itemAutoModeDgu = 'wb-gpio/EXT1_IN6'

var itemStrtDgu = 'wb-gpio/EXT2_R3A1'
var itemLnchDgu = 'wb-gpio/EXT2_R3A2'
var itemStrtLamp = 'wb-gpio/EXT2_R3A3'
var itemHeatDgu = 'wb-gpio/EXT2_R3A4'

var itemLvlGas = 'wb-mai6_191/IN 1 P Resistance'
var itemBrht = 'wb-mai6_191/IN 2 P Resistance'
var itemTempOut = 'wb-mai6_191/IN 3 P Temperature'

var idInitTimer = null; //идентификатор таймера
var idStrtTimer = null; //идентификатор таймера
var idPwrTimer = null; //идентификатор таймера
var idPreheatTimer = null; //идентификатор таймера

var INIT_TIMEOUT_S = 2;  //время инициализации, с
var STRT_TIMEOUT_S = 6;  //время запуска стартера, с
var PWR_TIMEOUT_S = 2;  //время ожидания готовности, с
var PREHEAT_TIMEOUT_S = 4;  //время ожидания готовности, с

var locVolGasTank = 50;  //объем топливного бака, л 

trackMqtt("/devices/flapController/controls/itemStrtDgu", function(message){
  if(message.value=="1")
  {
    dev['flapController/itemStrtDguStr'] = true;
  }
  else if(message.value=="0")
  {
    dev['flapController/itemStrtDguStr'] = false;
  }
});

trackMqtt("/devices/flapController/controls/itemManStrtLght", function(message){
  if(message.value=="1")
  {
    dev['flapController/itemManStrtLghtStr'] = true;
  }
  else if(message.value=="0")
  {
    dev['flapController/itemManStrtLghtStr'] = false;
  }
});

trackMqtt("/devices/flapController/controls/itemAutoStrtLght", function(message){
  if(message.value=="1")
  {
    dev['flapController/itemAutoStrtLghtStr'] = true;
  }
  else if(message.value=="0")
  {
    dev['flapController/itemAutoStrtLghtStr'] = false;
  }
});


defineVirtualDevice('flapController', {
  title: 'Flap controller',

  cells: {
    itemStrtDgu: {
      type: 'switch',
      value: false,
      readonly: false
    },
    itemStrtDguStr: {
      type: 'switch',
      value: false,
      readonly: false
     },


```
itemAutoStrtLght: {
  type: 'switch',
  value: false,
  readonly: false
},
itemAutoStrtLghtStr: {
  type: 'switch',
  value: false,
  readonly: false
 },

itemManStrtLght: {
  type: 'switch',
  value: false,
  readonly: false
},
itemManStrtLghtStr: {
  type: 'switch',
  value: false,
  readonly: false
 },

itemState: {
  type: 'text',
  value: 'Отключен',
  readonly: true
},
 itemSeason: {
  type: 'text',
  value: 'Зима',
  readonly: true
},
 itemVolLitr: {
  type: 'text',
  value: '0.0',
  readonly: true
},
 itemVolPerc: {
  type: 'text',
  value: '0.0',
  readonly: true
},
```

  }
});

function startInitTimer() {
  return setTimeout(function () {
    if (dev['flapController/itemSeason'] == 'Зима') {
      dev['flapController/itemState'] = 'Прогрев картера';
      idPreheatTimer = startPreheatTimer();      
    }
    if (dev['flapController/itemSeason'] == 'Лето') { 
      dev['flapController/itemState'] = 'Запуск стартера';
      idStrtTimer = startStrtTimer();
    }
  }, INIT_TIMEOUT_S * 1000);
}

function startStrtTimer() {
  return setTimeout(function () {
    dev['flapController/itemState'] = 'Авария';
  }, STRT_TIMEOUT_S * 1000);
}

function startPwrTimer() {
  return setTimeout(function () {
    dev['flapController/itemState'] = 'Готовность';
  }, PWR_TIMEOUT_S * 1000);
}

function startPreheatTimer() {
  return setTimeout(function () {
    dev['flapController/itemState'] = 'Запуск стартера';
    idStrtTimer = startStrtTimer();
  }, PREHEAT_TIMEOUT_S * 1000);
}

defineRule({
  whenChanged: ['flapController/itemStrtDguStr', itemAlrmLvl, itemAutoModeDgu],
  then: function() { 
      if (dev[itemAutoModeDgu] == true) { //! инвертировать
          dev['flapController/itemState'] = 'Нет авто';
        }
      else if (dev[itemAlrmLvl] == true) {
          dev['flapController/itemState'] = 'Авария';
        }   
      else{
        if ((dev['flapController/itemStrtDguStr'] == true) && !(dev['flapController/itemState'] == 'Авария')) {
            dev['flapController/itemState'] = 'Инициализация';
             idInitTimer = startInitTimer();
          }
        if (dev['flapController/itemStrtDguStr'] == false) {
            dev['flapController/itemState'] = 'Отключен';
          }
      }
    }
  }
);

defineRule({
  whenChanged: ['flapController/itemManStrtLghtStr', 'flapController/itemAutoStrtLghtStr', 'flapController/itemState'],
  then: function() {
    if (dev['flapController/itemState'] == 'Готовность'){
      if (dev['flapController/itemAutoStrtLghtStr'] == true){    
        if (dev['flapController/itemManStrtLghtStr'] == true) {
            dev[itemStrtLamp] = true;
          }
        if (dev['flapController/itemManStrtLghtStr'] == false) {
            dev[itemStrtLamp] = false;
          }
        }
      }
    else{
     dev[itemStrtLamp] = false; 
    }
    }
  }
);

defineRule({
  whenChanged: itemTempOut,
  then: function() {
        if (dev[itemTempOut] > 29) {
            dev['flapController/itemSeason'] = 'Лето';
          }
        if (dev[itemTempOut] < 27) {
            dev['flapController/itemSeason'] = 'Зима';
          }
        }
    }
);

defineRule({
  whenChanged: itemRunGen,
  then: function() {
        if ((dev[itemRunGen] == true) && (dev['flapController/itemState'] == 'Запуск стартера') && (dev[itemAutoModeDgu] == false)) { //инвертировать
            clearTimeout(idStrtTimer);
            dev['flapController/itemState'] = 'Ожидание разрешения на пуск нагрузки';
            idPwrTimer = startPwrTimer();
          }
        if ((dev[itemRunGen] == false) && ((dev['flapController/itemState'] == 'Готовность') || (dev['flapController/itemState'] == 'Ожидание разрешения на пуск нагрузки'))) {
            dev['flapController/itemState'] = 'Авария';
          }   
        }
    }
);

defineRule({
  whenChanged: 'flapController/itemState',
  then: function() {
        if ((dev['flapController/itemState'] == 'Отключен') || (dev['flapController/itemState'] == 'Нет авто') || (dev['flapController/itemState'] == 'Авария')) {
            dev[itemStrtDgu] = false;
            dev[itemLnchDgu] = false;
            dev[itemStrtLamp] = false;
            dev[itemHeatDgu] = false;
            clearTimeout(idInitTimer);
            clearTimeout(idStrtTimer);
            clearTimeout(idPwrTimer);
            clearTimeout(idPreheatTimer);
        }
        else if (dev['flapController/itemState'] == 'Инициализация') {
            dev[itemStrtDgu] = true;
            dev[itemLnchDgu] = false;
            dev[itemStrtLamp] = false;
            dev[itemHeatDgu] = false;
        }
        else if (dev['flapController/itemState'] == 'Прогрев картера') {
            dev[itemStrtDgu] = true;
            dev[itemLnchDgu] = false;
            dev[itemStrtLamp] = false;
            dev[itemHeatDgu] = true;
        }
        else if (dev['flapController/itemState'] == 'Запуск стартера') {
            dev[itemStrtDgu] = true;
            dev[itemLnchDgu] = true;
            dev[itemStrtLamp] = false;
            dev[itemHeatDgu] = false;
        }
        else if (dev['flapController/itemState'] == 'Ожидание разрешения на пуск нагрузки') {
            dev[itemStrtDgu] = true;
            dev[itemLnchDgu] = false;
            dev[itemStrtLamp] = false;
            dev[itemHeatDgu] = false;
        }
        else if (dev['flapController/itemState'] == 'Готовность') {
            dev[itemStrtDgu] = true;
            dev[itemLnchDgu] = false;
            dev[itemHeatDgu] = false;
        }
      }
    }
);

defineRule({
  whenChanged: [itemBrht, 'flapController/itemAutoStrtLghtStr'],
  then: function() {
        if ((dev['flapController/itemAutoStrtLghtStr'] == false) && (dev['flapController/itemState'] == 'Готовность')) {
          if (dev[itemBrht] > 5000) {
              dev[itemStrtLamp] = true;
            }
          if (dev[itemBrht] < 2000) {
              dev[itemStrtLamp] = false;
            }
        }
      }
    }
);

defineRule({
  whenChanged: itemLvlGas,
  then: function() {
      dev['flapController/itemVolLitr'] = String(Math.round((dev[itemLvlGas] / (350 - 0)) * locVolGasTank * 10) / 10);
      dev['flapController/itemVolPerc'] = String(Math.round((100 / (350 - 0)) * dev[itemLvlGas]));
    }
  }
);