diff --git a/src/driver/nbiot.be b/src/driver/nbiot.be new file mode 100644 index 0000000000000000000000000000000000000000..085598f1a9492339fe1ac085752dcc7e31369f37 --- /dev/null +++ b/src/driver/nbiot.be @@ -0,0 +1,122 @@ +import string + +class NBIoTDriverState + static var RESET = 1 + static var INIT_COAP = 2 + static var INIT_MQTT = 3 + static var READY = 4 + static var COAP_SET_OPTIONS = 5 + static var COAP_SEND = 6 + static var COAP_RECEIVE = 7 +end + +class NBIoTDriver + var ser + var state + var send_queue + var send_request + var ok_awaiting + var payload_awaiting + var retries + + def init(rx, tx) + self.state = NBIoTDriverState.RESET + self.send_queue = [] + self.send_request = nil + self.ok_awaiting = false + self.retries = 0 + + self.ser = serial(rx, tx, 115200, serial.SERIAL_8N1) + end + + def check_ok() + if self.ok_awaiting + var msg = self.ser.read().asstring() + print(msg) + + if string.find(msg,'OK') >= 0 + self.ok_awaiting = false + + return true + else + if self.retries > 0 + self.retries -= self.retries + end + + return false + end + else + return false + end + end + + def check_ok_or_send(cmd) + if self.check_ok() + return true + else + print('send ' + cmd) + self.ser.write(bytes().fromstring(cmd)) + self.ok_awaiting = true + + return false + end + end + + def check_ready() + var msg = self.ser.read().asstring() + print(msg) + + return string.find(msg,'RDY') >= 0 + end + + def reset() + self.ser.write(bytes().fromstring('AT+QRST=1\r\n')) + print('write AT+QRST') + end + + def every_second() + if self.state == NBIoTDriverState.RESET + if !self.check_ready() + self.reset() + else + self.state = NBIoTDriverState.INIT_COAP + end + elif self.state == NBIoTDriverState.INIT_COAP + if self.check_ok_or_send('AT+QCOAPCREATE=1,0\r\n') + self.state = NBIoTDriverState.COAP_SET_OPTIONS + end + elif self.state == NBIoTDriverState.COAP_SET_OPTIONS + if self.check_ok_or_send('AT+QCOAPOPTION=1,11,\"test\"\r\n') + self.state = NBIoTDriverState.COAP_SEND + end + elif self.state == NBIoTDriverState.COAP_SEND + if self.check_ok_or_send('AT+QCOAPSEND=1,0,\"37.120.174.40\",5683,0\r\n') + self.state = NBIoTDriverState.COAP_RECEIVE + end + elif self.state == NBIoTDriverState.COAP_RECEIVE + var msg = self.ser.read().asstring() + print(msg) + else + print('duuude') + end + end +end + +var nbiot = module('nbiot') + +nbiot.init = def (m) + class nbiot + var _driver + + def init() + print('init') + self._driver = NBIoTDriver(19, 23) + + tasmota.add_driver(self._driver) + end + end + + return nbiot() +end + +return nbiot \ No newline at end of file