Правило для включения реле с виртуальной кнопки и подключение сим-карты

Подскажите, пожалуйста, как поправить правило.
Желаемая логика:
Виртуальный переключатель по которому включается реле нагрева теплого пола и далее если переключатель во включенном состоянии, то происходит регулировка включения/выключения реле по температуре.
Никак не могу дописать 3й кусок. Можно ли задавать сразу условие через “if” после имени правила (пробовал, не смог настроить)? Данный вариант через “assoonas”, но полагаю, что и его я неправильно использую. Нужно как-то просматривать условие включен ли переключатель и тогда начинать скрипт управления реле в соответствии с температурой. В консоли ошибки или по синтаксису или по несовместимости assoonas с whenchanged.

defineVirtualDevice(“TP_su2”, {
title: “TP_su2_switch”,//Включение работы теплого пола су2
cells: {
enabled: {
type: “switch”,
value: false,
}
}
});

defineRule(“heater_switch_su2”,{
whenChanged: “TP_su2/enabled”,
then: function (devName, cellName) {
if ( dev[“TP_su2”][“enabled”] == true) {
dev[“wb-mrps6_107”][“K3”] = true;
} else {
dev[“wb-mrps6_107”][“K3”] = false;
}
}
});

defineRule(“heater_control_su2”,{
asSoonAs: function () {
return dev[“TP_su2”][“enabled”] == true;
}, {
whenChanged: “wb-w1/28-00000d6916e2”, //при изменении состояния датчика су2 1-Wire с идентификатором 28-00000d6916e2
then: function (newValue, devName, cellName) {
if ( newValue > 37) { //если температура датчика больше заданной градусов
dev[“wb-mrps6_107”][“K3”] = false; //установи Реле K3 модуля wb-mrps6_107 с адресом 107 в состояние “выключено”
}
if ( newValue < 35) { //если температура датчика меньше заданной градусов
dev[“wb-mrps6_107”][“K3”] = true; //установи Реле K3 модуля wb-mrps6_107 с адресом 107 в состояние “включено”
}
}
}
});

Тут же прошу еще подсказать, что может быть не так с подключением симки и модема. Сам контроллер сейчас в сети по wi-fi. Модуль нужен в основном для отправки аварийных смс и принятия аналогичных команд в ответ. Стоит в первом слоте WB6.7, деньги на симке есть, до этого симка работала в другом устройстве. Модуль WBC-4G, в устройствах добавил.
Подключаюсь по SSH через Putty. По мануалу к WB (раздел GSM/GPRS) пытаюсь настроить. Команда на включение, потом статус и модель показывает.

root@wirenboard-AJE*****:~# cat /proc/device-tree/wirenboard/gsm/type
4g3gedgegprs
root@wirenboard-AJE*****:~# cat /proc/device-tree/wirenboard/gsm/model
a7600x
root@wirenboard-AJE*****:~# cat /proc/device-tree/wirenboard/gsm/status
okay

apt update && apt install wb-configs - команда проходит, правда реакции на нее не вижу

через gammu config зайти могу, все настраиваю,

Далее получаю:
root@wirenboard-AJE*****:~# gammu networkinfo
Error opening device, it doesn’t exist.
root@wirenboard-AJE*****:~# gammu identify
Error opening device, it doesn’t exist.

Через minicom:
root@wirenboard-AJE*****:~# minicom -D /dev/ttyGSM -b 115200 -8 -a off
minicom: cannot open /dev/ttyGSM: No such file or directory

Какие шаги дальше сделать по настройке не могу понять.

Два разных типа условия у правила быть не может
Но перечислять условия одного типа - можно. Например так:

whenChanged: ["wb-modbus-0-0/Battery Voltage","wb-modbus-0-1/Battery Voltage"], //при изменении любого из перечисленных

Отредактировал скрипт так:

//12_13_test_01.js

defineVirtualDevice("TP_su2", {
	title: "TP_su2_switch",//Включение работы теплого пола су2
	cells: {
		enabled: {
		type: "switch",
		value: false
		}
	}
});



defineRule("heater_switch_su2", {
whenChanged: "TP_su2/enabled", // Правило нужно только для явного отключения реле
  then: function (newValue, devName, cellName) { 
      if (!newValue) {
          dev["wb-mrps6_107"]["K3"] = false;
      }
  }
})



defineRule("heater_control_su2", {
whenChanged: "wb-w1/28-00000d6916e2", //при изменении состояния датчика су2 1-Wire с идентификатором 28-00000d6916e2  
then: function (newValue, devName, cellName) {
  if (dev["TP_su2/enabled"]) { //Если переключатель TP_su2/enabled ВКЛЮЧЕН
	if ( newValue > 37) { //если температура датчика больше заданной градусов
		dev["wb-mrps6_107"]["K3"] = false; //установи Реле K3 модуля wb-mrps6_107 с адресом 107 в состояние “выключено”
	}
	if ( newValue < 35) { //если температура датчика меньше заданной градусов
		dev["wb-mrps6_107"]["K3"] = true; //установи Реле K3 модуля wb-mrps6_107 с адресом 107 в состояние “включено”
	}
  }
}
});

Сконфигурирован ли модем?

Какая команда “на включение”?
wb-gsm restart_if_broken?

А зачем? Где-то в документации это написано?

По первому вопросу:
Спасибо, понял чуть больше. Если не трудно, можно пояснить следующие моменты (не понимаю, в примерах не видел и хотел бы больше разобраться)

  1. if (!newValue) {

как это работает? как я понимаю тут логика “при изменении параметра если значение не соответствует новому, тогда выключить реле”. наверняка я что-то не так понимаю. сам код работает, спасибо, дополнил его куском по аналогии
if (newValue) {
dev[“wb-mrps6_107”][“K3”] = true;
}
так как хотел включения нагрева сразу при переключении виртуального выключателя (датчики работают нестабильно/система инерционна/бывают одинаковые значения от датчика в течении получаса). все работает, но я не понимаю как(
2.

if (dev[“TP_su2/enabled”])

тоже не могу понять как это работает, где тут указания на то, что параметр включен?.. разве не должно быть if (dev[“TP_su2”][“enabled”] == true) ?

По второму вопросу:
модем сконфигурирован “Settings → Configs → Hardware Modules
Configuration, выберите Modem slot…” тут вопрос - должен ли он отображаться как устройство во вкладке “Устройства” веб интерфейса?

Да, wb-gsm restart_if_broken

apt update && apt install wb-configs - в настройках gammu того же мануала

Совсем неспецифично, типовая проверка на истину. Вскользь - тут:
https://wirenboard.com/wiki/Wb-jscript#Условия
А подробней:

Ну и там же достаточно подробный учебник.

Нет, не должен.

с помощью Minicom соединяется с модемом?

Спасибо.

Как писал выше, через миником не соединяется.
wb-gsm restart_if_broken и:

могу зайти в настройки gammu через gammu config, вбить все настройки, но далее
root@wirenboard-AJ*****:~# gammu networkinfo
Error opening device, it doesn’t exist.

может я не прав с портом? как можно определить к какой именно порт соответствует модему?

Тааак. А какой релиз ПО на контроллере? Обновите до актуального 2110.

2110

Для модема - /dev/ttyGSM
А что выводит dmesg при выключении-включении модема? выключите модем и выполните

wb-gsm restart_if_broken; dmesg | tail

root@wirenboard-AJE*****:~# wb-gsm off
root@wirenboard-AJE*****:~# wb-gsm restart_if_broken; dmesg | tail
[ 1856.647457] i2c-gpio wbmz2_i2c@0: using lines 19 (SDA) and 18 (SCL)
[ 1972.463390] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /soc/bus@2000000/spba-bus@2000000/serial@2018000/status
[ 1972.477227] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /soc/bus@2000000/spba-bus@2000000/serial@2018000/pinctrl-names
[ 1972.499351] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /soc/bus@2000000/spba-bus@2000000/serial@2018000/pinctrl-0
[ 1972.521859] 2018000.serial: ttymxc6 at MMIO 0x2018000 (irq = 226, base_baud = 5000000) is a IMX
[ 2134.770606] OF: overlay: WARNING: memory leak will occur if overlay removed, property: /soc/bus@2100000/serial@21ec000/status
[50794.572036] fec 2188000.ethernet eth0: Link is Down
[50796.202015] SMSC LAN8710/LAN8720 2188000.ethernet-2:00: attached PHY driver [SMSC LAN8710/LAN8720] (mii_bus:phy_addr=2188000.ethernet-2:00, irq=POLL)
[50842.171214] fec 2188000.ethernet eth0: Link is Up - 100Mbps/Full - flow control rx/tx
[50842.179207] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready

Прямо интересно. И ошибок при включении нет?

DEBUG=true wb-gsm restart_if_broken

Дайте завтра anydesk, гляну.

root@wirenboard-AJE*****:~# DEBUG=true wb-gsm restart_if_broken
DEBUG: gsm_init: Cannot access GSM modem serial port, exiting

может TeamViewer?
нужна консоль? какое время удобно?
дальше тогда в личку отвечу

TeamViewer не работает… Да, можно ssh к контроллеру.

Итак, промежуточное:
релиз 2110

DEBUG: gsm_init: Cannot access GSM modem serial port, exiting

Отрабатывает без ошибок

 wb-hwconf-helper deinit wb67-wbc
[info] Deinitializing wb67-wbc:wbc-4g.

 wb-hwconf-helper init wb67-wbc wbc-4g
[info] Initializing wb67-wbc:wbc-4g.

Но симлинк /dev/ttyGSM не создается.
Если создать вручную

 ln -l /dev/ttymxc7 /dev/ttyGSM

то модем начинает включаться и работать:

DEBUG=enable wb-gsm restart_if_broken
DEBUG: restart_if_broken: Modem switched off, switch it on instead of testing the connection
DEBUG: ensure_on: switching on GSM modem using POWER FET
DEBUG: toggle: toggle GSM modem state using PWRKEY
DEBUG: ensure_on: Waiting for modem to start

root@wirenboard-AJEINQLG:~#

становится доступен и работает.

В общем принудительная замена файлов wb-utils на нормальные и неизмененные - проблему устранила.

Все удалось настроить.
Настраивал оповещения по протечкам на смс и почту.
В итоге проще оказалось с оповещением через правило, чем через alarms в веб-интерфейсе.

Хотел бы обратить внимание на следующие моменты, которые отняли у меня время (может стоит поправить):

  • Модуль уведомлений — Wiren Board в конце приводится Notify.sendSMS(to, text); но не сказано, что значения должны быть в кавычках, также не приводится нужный формат написания номера, а именно через “8”, а не “+7” в начале
  • при создании alarm в ВИ и его последующем удалении, его значение остается в отображении устройства (решается удалением устройства и созданием нового)

А это зависит от сотового опреатора.

Да, записанные топики конечно хранятся в MQTT, тут их либо удалять - или сами удалятся после перезапуска.

Здравствуйте!

Спасибо, что обратили на это внимание . Указал про необходимость кавычек в документации.

Эта тема была автоматически закрыта через 7 дней после последнего ответа. В ней больше нельзя отвечать.