mirror of
https://github.com/OpenMTC/OpenMTC.git
synced 2024-12-30 17:57:03 +00:00
136 lines
4.6 KiB
Markdown
136 lines
4.6 KiB
Markdown
|
# gui-sensors demo app
|
||
|
|
||
|
|
||
|
The [gui-sensors demo applications](/doc/training/apps/onem2m/gui/sensors/) receives data from the (virtual) sensors from the ipe-demo-apps and prints it to the console. The demo application is extended incrementally from the basic app frame to the complete gui-sensors demo application.
|
||
|
|
||
|
|
||
|
## Step 1: [onem2m-gui-sensors-01.py](/doc/training/apps/onem2m/gui/sensors/onem2m-gui-sensors-01.py)
|
||
|
|
||
|
* initial app base structure
|
||
|
* starts periodic discovery on registration
|
||
|
* the discovery result is printed as a whole
|
||
|
* this will discover EVERY new container
|
||
|
|
||
|
``` py
|
||
|
from openmtc_app.onem2m import XAE
|
||
|
|
||
|
|
||
|
class TestGUI(XAE):
|
||
|
remove_registration = True
|
||
|
remote_cse = '/mn-cse-1/onem2m'
|
||
|
|
||
|
def _on_register(self):
|
||
|
# start periodic discovery of EVERY container
|
||
|
self.periodic_discover(
|
||
|
self.remote_cse, # start directory inside cse for discovery
|
||
|
None, # no filter criteria
|
||
|
1, # frequency of repeated discovery (in Hz)
|
||
|
self.handle_discovery # callback function to return the result of the discovery to
|
||
|
)
|
||
|
|
||
|
def handle_discovery(self, discovery):
|
||
|
# print the discovery
|
||
|
print('New discovery:')
|
||
|
print(discovery)
|
||
|
print(' ')
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
from openmtc_app.runner import AppRunner as Runner
|
||
|
|
||
|
host = 'http://localhost:18000'
|
||
|
app = TestGUI()
|
||
|
Runner(app).run(host)
|
||
|
```
|
||
|
|
||
|
|
||
|
## Step 2: [onem2m-gui-sensors-02.py](/doc/training/apps/onem2m/gui/sensors/onem2m-gui-sensors-02.py)
|
||
|
|
||
|
* adds filter criteria, to specify what to discover
|
||
|
* detailed print of every uri from the discovery
|
||
|
* this will only discover new container with the specific label 'measurements'
|
||
|
* renamed function handle_discovery() to handle_discovery_measurements()
|
||
|
|
||
|
``` py
|
||
|
from openmtc_app.onem2m import XAE
|
||
|
|
||
|
|
||
|
class TestGUI(XAE):
|
||
|
remove_registration = True
|
||
|
remote_cse = '/mn-cse-1/onem2m'
|
||
|
|
||
|
def _on_register(self):
|
||
|
# start periodic discovery of 'measurements' containers
|
||
|
self.periodic_discover(
|
||
|
self.remote_cse, # start directory inside cse for discovery
|
||
|
{'labels': ['measurements']}, # filter criteria (what to discover)
|
||
|
1, # frequency of repeated discovery (in Hz)
|
||
|
self.handle_discovery_measurements # callback function to return the result of the discovery to)
|
||
|
)
|
||
|
|
||
|
def handle_discovery_measurements(self, discovery):
|
||
|
print('New discovery:')
|
||
|
# for each device container discovered
|
||
|
for uri in discovery:
|
||
|
# print content of discovery
|
||
|
print('uri from discovery: %s' % uri)
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
from openmtc_app.runner import AppRunner as Runner
|
||
|
|
||
|
host = 'http://localhost:18000'
|
||
|
app = TestGUI()
|
||
|
Runner(app).run(host)
|
||
|
```
|
||
|
|
||
|
|
||
|
## Step 3: [onem2m-gui-sensors-03.py](/doc/training/apps/onem2m/gui/sensors/onem2m-gui-sensors-03.py)
|
||
|
|
||
|
* adds subscription to discovered containers via returned uri
|
||
|
* adds content handler for subscribed containers
|
||
|
* this will only discover and subscribe to new containers with the specific label
|
||
|
* whenever a child is created in the subscribed containers, the content handler is called
|
||
|
|
||
|
``` py
|
||
|
from openmtc_app.onem2m import XAE
|
||
|
|
||
|
|
||
|
class TestGUI(XAE):
|
||
|
remove_registration = True
|
||
|
remote_cse = '/mn-cse-1/onem2m'
|
||
|
|
||
|
def _on_register(self):
|
||
|
# start periodic discovery of 'measurements' containers
|
||
|
self.periodic_discover(
|
||
|
self.remote_cse, # start directory inside cse for discovery
|
||
|
{'labels': ['measurements']}, # filter criteria (what to discover)
|
||
|
1, # frequency of repeated discovery (in Hz)
|
||
|
self.handle_discovery_measurements # callback function to return the result of the discovery to)
|
||
|
)
|
||
|
|
||
|
def handle_discovery_measurements(self, discovery):
|
||
|
# for each device container discovered
|
||
|
for uri in discovery:
|
||
|
# subscribe to device container with handler function
|
||
|
print('Subscribing to Resource: %s' % uri)
|
||
|
self.add_container_subscription(uri, self.handle_measurements)
|
||
|
|
||
|
def handle_measurements(self, container, data):
|
||
|
# this function handles the new data from subscribed measurements containers
|
||
|
print('handle measurements..')
|
||
|
print('container: %s' % container)
|
||
|
print('data: %s' % data)
|
||
|
print('')
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
from openmtc_app.runner import AppRunner as Runner
|
||
|
host = 'http://localhost:18000'
|
||
|
app = TestGUI(
|
||
|
poas=['http://localhost:21345'] # adds poas in order to receive notifications
|
||
|
)
|
||
|
Runner(app).run(host)
|
||
|
```
|
||
|
|