diff --git a/src/driver/nbiot.be b/src/driver/nbiot.be index 353e5f057f93472e1e92d133a1429cf69294760f..a8de0633b21911298342fd2c24d944631385b0a3 100644 --- a/src/driver/nbiot.be +++ b/src/driver/nbiot.be @@ -235,7 +235,9 @@ class NBIoTResetProcedure : NBIoTProcedure def execute() if self.cmd_in_process == nil self.cmd_in_process = self.cmd_reset - elif self.cmd_in_process == self.cmd_reset && self.read_rsp_contains_expected_rsp_or_send() + end + + if self.cmd_in_process == self.cmd_reset && self.read_rsp_contains_expected_rsp_or_send() self.cmd_in_process = self.cmd_at elif self.cmd_in_process == self.cmd_at self.done = self.read_rsp_contains_expected_rsp_or_send() @@ -259,7 +261,9 @@ class NBIoTEnablePSMProcedure : NBIoTProcedure def execute() if self.cmd_in_process == nil self.cmd_in_process = self.cmd_register - elif self.cmd_in_process == self.cmd_register && self.read_rsp_contains_expected_rsp_or_send() + end + + if self.cmd_in_process == self.cmd_register && self.read_rsp_contains_expected_rsp_or_send() self.cmd_in_process = self.cmd_enable_psm elif self.cmd_in_process == self.cmd_enable_psm && self.read_rsp_contains_expected_rsp_or_send() self.cmd_in_process = self.cmd_enable_sleep @@ -287,7 +291,9 @@ class NBIoTDisablePSMProcedure : NBIoTProcedure def execute() if self.cmd_in_process == nil self.cmd_in_process = self.cmd_register - elif self.cmd_in_process == self.cmd_register && self.read_rsp_contains_expected_rsp_or_send() + end + + if self.cmd_in_process == self.cmd_register && self.read_rsp_contains_expected_rsp_or_send() self.cmd_in_process = self.cmd_disable_psm elif self.cmd_in_process == self.cmd_disable_psm && self.read_rsp_contains_expected_rsp_or_send() self.cmd_in_process = self.cmd_disable_sleep @@ -305,18 +311,20 @@ class NBIoTMQTTConnectProcedure : NBIoTProcedure super(self).init(ser, request) var cmd = 'AT+QMTOPEN=0,\"%s\",%s\r\n' - self.cmd_open = NBIoTCommand(string.format(cmd, self.request.host, str(self.request.port)), '+QMTOPEN: 0,0', 10) + self.cmd_open = NBIoTCommand(string.format(cmd, self.request.host, str(self.request.port)), '+QMTOPEN: 0,0', 15) cmd = 'AT+QMTCONN=0,\"%s\",\"%s\",\"%s\"\r\n' self.cmd_conn = NBIoTCommand(string.format(cmd, self.request.client, self.request.username, self.request.password), '+QMTCONN: 0,0,0', - 10) + 15) end def execute() if self.cmd_in_process == nil self.cmd_in_process = self.cmd_open - elif self.cmd_in_process == self.cmd_open && self.read_rsp_contains_expected_rsp_or_send() + end + + if self.cmd_in_process == self.cmd_open && self.read_rsp_contains_expected_rsp_or_send() self.cmd_in_process = self.cmd_conn elif self.cmd_in_process == self.cmd_conn self.done = self.read_rsp_contains_expected_rsp_or_send() @@ -342,7 +350,9 @@ class NBIoTMQTTPublishProcedure : NBIoTProcedure def execute() if self.cmd_in_process == nil self.cmd_in_process = self.cmd_conn - elif self.cmd_in_process == self.cmd_conn && self.read_rsp_contains_expected_rsp_or_send() + end + + if self.cmd_in_process == self.cmd_conn && self.read_rsp_contains_expected_rsp_or_send() self.cmd_in_process = self.cmd_pub elif self.cmd_in_process == self.cmd_pub self.done = self.read_rsp_contains_expected_rsp_or_send() @@ -490,10 +500,22 @@ class NBIoTDriver self.state = state end - def set_psm_pin(value) - tasmota.log(string.format('NBT: Setting PSM_EINT pin to %i', value), 2) + def set_psm_pin_high() + tasmota.log(string.format('NBT: Setting PSM_EINT pin to %i', 1), 2) - gpio.digital_write(self.psm_eint, value) + gpio.digital_write(self.psm_eint, 1) + end + + def set_psm_pin_low() + tasmota.log(string.format('NBT: Setting PSM_EINT pin to %i', 0), 2) + + gpio.digital_write(self.psm_eint, 0) + end + + def wake_up() + self.set_psm_pin_low() + + tasmota.set_timer(150, /-> self.set_psm_pin_high()) end def every_second() @@ -502,8 +524,10 @@ class NBIoTDriver self.next_state(NBIoTDriverState.INIT) end elif self.state == NBIoTDriverState.INIT - self.set_psm_pin(1) + self.set_psm_pin_high() self.next_state(NBIoTDriverState.RESET) + + tasmota.set_timer(150, /-> self.wake_up()) elif self.state == NBIoTDriverState.RESET if self.procedure == nil self.start_procedure(NBIoTResetProcedure(self.ser)) @@ -558,6 +582,7 @@ class NBIoTDriver if procedure != nil self.start_procedure(procedure) self.next_state(NBIoTDriverState.BUSY) + self.procedure.execute() end end elif self.state == NBIoTDriverState.BUSY @@ -577,7 +602,7 @@ class NBIoTDriver if self.psm_disabled self.next_state(NBIoTDriverState.READY) else - self.set_psm_pin(0) + self.set_psm_pin_low() self.next_state(NBIoTDriverState.PSM) end else @@ -599,11 +624,17 @@ var nbiot = module('nbiot') nbiot.init = def (m) class nbiot var _driver + var _started def init() self._driver = NBIoTDriver(18, 23, 16) + self._started = false + end - tasmota.add_driver(self._driver) + def start() + if !self._started + tasmota.add_driver(self._driver) + end end def enable_power_save_mode(callback)