Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
N
node-software
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
bachelor-project
node-software
Commits
92d621da
Commit
92d621da
authored
Jul 30, 2023
by
Strasser, Andreas
Browse files
Options
Downloads
Patches
Plain Diff
reimplemented mqtt
parent
97d22321
No related branches found
No related tags found
No related merge requests found
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
src/driver/nbiot.be
+144
-79
144 additions, 79 deletions
src/driver/nbiot.be
with
144 additions
and
79 deletions
src/driver/nbiot.be
+
144
−
79
View file @
92d621da
...
...
@@ -6,10 +6,13 @@ import gpio
# ------------------------------------------------------- #
class NBIoTRequestType
static var DEBUG = 0
static var MQTT = 1
static var COAP = 2
static var NTP = 3
static var PSM = 4
static var MQTT_CONN = 1
static var MQTT_PUB = 2
static var MQTT_DISC = 3
static var COAP = 4
static var NTP = 5
static var PSM_ENABLE = 6
static var PSM_DISABLE = 7
end
class NBIoTRequest
...
...
@@ -35,20 +38,29 @@ class NBIoTDebugRequest : NBIoTRequest
end
end
class NBIoTMQTTRequest : NBIoTRequest
class NBIoTMQTT
Connect
Request : NBIoTRequest
var host
var port
var client
var username
var password
var topic
var payload
def init(host, port, username, password,
topic, payload,
callback)
super(self).init(NBIoTRequestType.MQTT, callback)
def init(host, port,
client,
username, password, callback)
super(self).init(NBIoTRequestType.MQTT
_CONN
, callback)
self.host = host
self.port = port
self.client = client
self.username = username
self.password = password
end
end
class NBIoTMQTTPublishRequest : NBIoTRequest
var topic
var payload
def init(topic, payload, callback)
super(self).init(NBIoTRequestType.MQTT_PUB, callback)
self.topic = topic
self.payload = payload
end
...
...
@@ -73,49 +85,6 @@ class NBIoTCOAPRequest : NBIoTRequest
end
end
class NBIoTNTPRequest : NBIoTRequest
def init(callback)
super(self).init(NBIoTRequestType.NTP, callback)
end
end
class NBIoTPSMRequest : NBIoTRequest
var value
def init(value, callback)
super(self).init(NBIoTRequestType.PSM, callback)
self.value = value
end
end
# ------------------------------------------------------- #
# Connections #
# ------------------------------------------------------- #
class NBIoTMQTTConnection
var host
var port
var username
var password
def init(host, port, username, password)
self.host = host
self.port = port
self.username = username
self.password = password
end
def equals(other)
var equal = true
equal = equal && self.host == other.host
equal = equal && self.port == other.port
equal = equal && self.username == other.username
equal = equal && self.password == other.password
return equal
end
end
# ------------------------------------------------------- #
# Procedures #
# ------------------------------------------------------- #
...
...
@@ -265,10 +234,8 @@ 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
if self.read_rsp_contains_expected_rsp_or_send()
elif self.cmd_in_process == self.cmd_reset && self.read_rsp_contains_expected_rsp_or_send()
self.cmd_in_process = self.cmd_at
end
elif self.cmd_in_process == self.cmd_at
self.done = self.read_rsp_contains_expected_rsp_or_send()
end
...
...
@@ -291,20 +258,90 @@ 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
if self.read_rsp_contains_expected_rsp_or_send()
elif self.cmd_in_process == self.cmd_register && self.read_rsp_contains_expected_rsp_or_send()
self.cmd_in_process = self.cmd_disable_psm
end
elif self.cmd_in_process == self.cmd_disable_psm
if self.read_rsp_contains_expected_rsp_or_send()
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
end
elif self.cmd_in_process == self.cmd_disable_sleep
self.done = self.read_rsp_contains_expected_rsp_or_send()
end
end
end
class NBIoTMQTTConnectProcedure : NBIoTProcedure
var cmd_open
var cmd_conn
def init(ser, request)
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)
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)
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()
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()
end
self.aborted = self.retries_exceeded()
end
end
class NBIoTMQTTPublishProcedure : NBIoTProcedure
var cmd_conn
var cmd_pub
def init(ser, request)
super(self).init(ser, request)
self.cmd_conn = NBIoTCommand('AT+QMTCONN?\r\n', '+QMTCONN: 0,3', 10)
var cmd = 'AT+QMTPUB=0,0,0,0,\"%s\",\"%s\"\r\n'
self.cmd_pub = NBIoTCommand(string.format(cmd, self.request.topic, self.request.payload), '+QMTPUB: 0,0,0', 10)
end
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()
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()
end
self.aborted = self.retries_exceeded()
end
end
class NBIoTMQTTDisconnectProcedure : NBIoTProcedure
var cmd_close
def init(ser, request)
super(self).init(ser, request)
self.cmd_close = NBIoTCommand('AT+QMTCLOSE=0\r\n', '+QMTCLOSE: 0,0', 10)
end
def execute()
if self.cmd_in_process == nil
self.cmd_in_process = self.cmd_close
end
self.done = self.read_rsp_contains_expected_rsp_or_send()
self.aborted = self.retries_exceeded()
end
end
class NBIoTNTPProcedure : NBIoTProcedure
var cmd_ntp
...
...
@@ -368,6 +405,7 @@ class NBIoTDriver
var state
var request_queue
var procedure
var psm_disabled
def init(rx, tx, psm_eint)
self.ser = serial(rx, tx, 115200, serial.SERIAL_8N1)
...
...
@@ -376,6 +414,7 @@ class NBIoTDriver
self.state = NBIoTDriverState.INIT
self.request_queue = []
self.procedure = nil
self.psm_disabled = false
end
def queue_request(request)
...
...
@@ -387,8 +426,8 @@ class NBIoTDriver
end
def finish_procedure(done)
if
done &&
self.procedure.request != nil && self.procedure.request.callback != nil
self.procedure.request.callback()
if self.procedure.request != nil && self.procedure.request.callback != nil
self.procedure.request.callback(
done, nil
)
end
self.procedure = nil
...
...
@@ -401,6 +440,8 @@ class NBIoTDriver
end
def set_psm_pin(value)
tasmota.log(string.format('NBT: Setting PSM_EINT pin to %i', value), 2)
gpio.digital_write(self.psm_eint, value)
end
...
...
@@ -419,8 +460,13 @@ class NBIoTDriver
if self.procedure.is_done()
self.finish_procedure()
if self.psm_disabled
self.next_state(NBIoTDriverState.READY)
else
self.next_state(NBIoTDriverState.DISABLE_PSM)
end
end
elif self.state == NBIoTDriverState.DISABLE_PSM
if self.procedure == nil
self.init_procedure(NBIoTDisablePSMProcedure(self.ser))
...
...
@@ -429,6 +475,7 @@ class NBIoTDriver
self.procedure.execute()
if self.procedure.is_done()
self.psm_disabled = true
self.finish_procedure()
self.next_state(NBIoTDriverState.READY)
end
...
...
@@ -441,6 +488,12 @@ class NBIoTDriver
if request.request_type == NBIoTRequestType.DEBUG
procedure = NBIoTDebugProcedure(self.ser, request)
elif request.request_type == NBIoTRequestType.MQTT_CONN
procedure = NBIoTMQTTConnectProcedure(self.ser, request)
elif request.request_type == NBIoTRequestType.MQTT_PUB
procedure = NBIoTMQTTPublishProcedure(self.ser, request)
elif request.request_type == NBIoTRequestType.MQTT_DISC
procedure = NBIoTMQTTDisconnectProcedure(self.ser, request)
elif request.request_type == NBIoTRequestType.NTP
procedure = NBIoTNTPProcedure(self.ser, request)
elif
...
...
@@ -488,28 +541,40 @@ nbiot.init = def (m)
tasmota.add_driver(self._driver)
end
def set_power_save_mode(value, callback)
var request = NBIoTPSMRequest(value, callback)
def enable_power_save_mode(callback)
var request = NBIoTRequest(NBIoTRequestType.PSM_ENABLE, callback)
self._driver.queue_request(request)
end
def disable_power_save_mode(callback)
var request = NBIoTRequest(NBIoTRequestType.PSM_DISABLE, callback)
self._driver.queue_request(request)
end
def sync_time(callback)
var request = NBIoT
NTP
Request(callback)
var request = NBIoTRequest(callback)
self._driver.queue_request(request)
end
def mqtt_publish(host, port, username, password, topic, payload, callback)
if type(payload) == type('')
var request = NBIoTMQTTRequest(host, port, username, password, topic, payload, callback)
def mqtt_connect(host, port, client, username, password, callback)
var request = NBIoTMQTTConnectRequest(host, port, client, username, password, callback)
self._driver.queue_request(request)
end
return true
else
return false
def mqtt_disconnect(callback)
var request = NBIoTRequest(NBIoTRequestType.MQTT_DISC, callback)
self._driver.queue_request(request)
end
def mqtt_publish(topic, payload, callback)
var request = NBIoTMQTTPublishRequest(topic, payload, callback)
self._driver.queue_request(request)
end
def coap_get(host, port, path, query, callback)
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment