WirenBoard Rules SMS

В движке правил напрочь отсутсвуют средства обработки принятых СМС.
Попытался получать сам, но нужно слишком много писать в движке правил.

var regex = /Размещение\s(\d+).+\n.+\nSMSC number\s+:\s+"([+\d]+)"\nОтправленные\s:\s(.+)(?:\n.+)*\n\n(.+)\n\n/gm;
runShellCommand("gammu geteachsms", {captureOutput: true,exitCallback: function(exitCode, capturedOutput){
	var m;
	var sms = {};
	while ((m = regex.exec(capturedOutput)) !== null) {
		sms[m[1]]={num:m[2],date:m[3],text:m[4]};
	}
	log(JSON.stringify(sms));
}});

Но это лишь получает все СМС.
Хочется что-то вроде:

defineRule("SMSReciver", {
    smsRecivedFrom: "+7950*",
    then: function(date, number, text) {
        log("[{}] Получено СМС от Абонента Теле2 {} >>>{}<<<",date,number,text);
    }
});

Чтобы СМС сами получались и отправлялись на обработку скриптам - хотябы через тот-же gammu-smsd

Очень нужный функционал - многим помог бы реализовать управление через СМС и мне бы помог сделать шлюз СМС->МЭК 60870-5-104. Я кончно могу пинать через получение всех СМС в крон - но это очень не оптимально. Проще когда gammu-smsd при получении будет передавать данные в движок правил. Через запись топиков MQTT возможно, но придется использовать структуру данных.

Здравствуйте! Посмотрите, пожалуйста, схожие темы. Возможно информация вам поможет.

1 лайк

Это конечно все хорошо, но я думал про “esengine.go”. Скрипт из smsd просто пишет в статичный топик mqtt данные(json), когда получил смс. Можно пойти по аналогиии whenCanged - топик статичный, но обработчики разные. При получении проходимся по всем правилам и исполняем подходящие.
Но сам я не силен в GO - в целом принцип работы понимаю, но что-то дописать в существующий код уже проблематично.