Skip to content

Commit 5603e99

Browse files
committed
lte: rewrite callback example and explanation
- bit more background and move explanations out of the code comments - shorter callback example
1 parent cfb8722 commit 5603e99

File tree

1 file changed

+15
-28
lines changed

1 file changed

+15
-28
lines changed

content/tutorials/networks/lte/_index.md

Lines changed: 15 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -60,43 +60,30 @@ The last line of the script should return a tuple containing the IP address of t
6060

6161
>Note: the first time, it can take a long while to attach to the network.
6262
63-
## LTE disconnecting
64-
> You will need firmware 1.20.2.r2 or later for this functionality
63+
## LTE Connectivity loss
64+
> You need firmware 1.20.2.r2 or later for this functionality
6565
66-
It is possible that the LTE disconnects unexpectedly (some time after `lte.connect()`) due to a whole variety of reasons.
66+
It is possible that the LTE modem loses connectivity. It could be due to some radio interference, maybe the reception in the location of the module is not too good. Or if the module is being physically moved to another location with worse reception.
6767

68-
When such event happens, the modem will report a `UART break`, which triggers the callback functionality we discuss later. By default the model will automatically reconnect and no user intervention is needed, or, the modem can not automatically reconnect and we can take action. Note that taking action might not resolve the issue and will keep us disconnected.
68+
If the connectivity is lost this will in general not be reflected when you check `lte.isconnected()`. However, the lte modem sends a `UART break` signal. You can receive these events by using the `lte_callback` functionality. When connectivity is lost, the modem will try it's best to re-establish connectivity and this also works well in general. When connectivity is re-established, the modem will send another break signal, ie, the `lte_callback` will fire again.
69+
70+
This means the best practice is to capture the callback and inside the callback test whether the module is connected or not. If, with some timeout, there really is no connection, then one can try to react to this. Let's say the application is a sensor, that is most of the time in deepsleep, wakes up once in a while, measures something and then tries to send it's measurement before going back to deepsleep. In this case one could simply log the event, go back to sleep and hope that in the next interval the reception will be better. Or, if there is some alternative connectivity implemented, one could trigger it at this point.
6971

7072
```python
7173
def lte_cb_handler(arg):
72-
print("CB LTE Callback Handler")
73-
ev = arg.events() # NB: reading the events clears them
74-
t = time.ticks_ms()
75-
print("CB", t, time.time(), ev, time.gmtime())
74+
ev = arg.events() # NB: reading the events also clears them
75+
print("LTE CB", time.time(), ev, time.gmtime())
7676
pycom.rgbled(0x222200)
77-
if ev & LTE.EVENT_COVERAGE_LOSS:
78-
print("CB", t, "coverage loss")
7977
if ev & LTE.EVENT_BREAK:
80-
print("CB", t, "uart break signal")
81-
# investiage the situation. Generally speaking, it will be one of the following:
82-
# - the modem lost connection, but will automatically reestablish it by itself if we give it some time, e.g. new
83-
# - the modem can't automatically reconnect, now we could
84-
# - try to suspend/resume or detach/reattach, or lte.reset(),
85-
# - but it could simply mean that we are out of lte coverage and all we can do is:
86-
# log the event, and then either machine.deepsleep() and try again later or simply
87-
# keep going and wait longer for the modem to reconnect. or, especially if we suspect a
88-
# FW problem, we could machine.reset() and try again
89-
print("CB", t, time.time(), "test connection")
90-
91-
#write your own test_connection function
78+
print("LTE CB", "uart break signal")
79+
print("LTE CB", time.time(), "test connection")
80+
# TBD: write your own test_connection function
9281
if test_connection():
93-
print("CB", t, time.time(), "connection ok")
82+
print("LTE CB", time.time(), "connection ok")
9483
else:
95-
print("CB", t, time.time(), "connection not ok")
96-
# suspendresume()
97-
# lte.reset()
98-
99-
print("CB", t, time.time(), ev, " done")
84+
print("LTE CB", time.time(), "connection not ok")
85+
# TBD: implement handling of lost connection
86+
# machine.deepsleep(deepsleeptime)
10087

10188
lte_callback(LTE.EVENT_BREAK, lte_cb_handler)
10289
```

0 commit comments

Comments
 (0)