MBee Python library
SerialStar_callback_example.py
1 # Модуль с примерами использования библиотеки MBee-Python для работы с модулями MBee производства фирмы "Системы, модули и компоненты" методом callback-функций.
2 # "Системы модули и компоненты" ("СМК"). 2018. Москва.
3 # Распространяется свободно. Надеемся, что программные продукты, созданные
4 # с помощью данной библиотеки будут полезными, однако никакие гарантии, явные или
5 # подразумеваемые не предоставляются.
6 # The MIT License(MIT)
7 # MBee-Python Library.
8 # Copyright © 2017 Systems, modules and components. Moscow. Russia.
9 # Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
10 # documentation files(the "Software"), to deal in the Software without restriction, including without limitation
11 # the rights to use, copy, modify, merge, publish, distribute, sublicense, and / or sell copies of the Software,
12 # and to permit persons to whom the Software is furnished to do so, subject to the following conditions :
13 # The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
14 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
15 # WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE AUTHORS OR
16 # COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
17 # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
18 
19 # Данный пример предназначен для демонстрации взаимодействия с модулем, работающим под управлением ПО SerialStar, с помощью callback-функций. Модуль должен быть предварительно настроен для работы
20 # в пакетном режиме UATR с escape-символами (AP = 2).
21 # Для полной проверки требуется 2 модуля. Локальный модуль может иметь произвольный собственный адрес (параметр MY), на удаленном модуле этот параметр должен быть равен 2.
22 
23 import os, sys
24 #sys.path.append('C:\VONBOD\SYSMC\Low-Power RF\Python\MBee')
25 #sys.path.append('/home/pi/myproject/python')
26 
27 from mbee import serialstar
28 
29 import time
30 from threading import Timer
31 
32 # Присваиваем имя COM-порта.
33 PORT = "COM15"
34 
35 # Определяем битовую скорость COM-порта.
36 BITRATE = 9600
37 
38 # Назначаем период таймера, который будет использоваться для периодической отправки пакетов удаленному модулю.
39 TICK_TIME = 1
40 events = {"TIMER_EVENTS": False}
41 
42 # Создаем объект SerialStar.
43 mbee = serialstar.SerialStar(PORT, BITRATE)
44 
45 # Устанавливаем событие срабатывания периодического таймера.
46 def timer_set_event():
47  events["TIMER_EVENTS"] = True
48 
49 # Обслуживание периодических событий.
50 def timer_service():
51  #mbee.send_tx_request("00", "FFFF", "313233343536373839", options = "01") #API-frame 0x10. Широковещательный режим. Локальное и удаленное подтверждения отключены.
52  #mbee.send_tx_request("01", "FFFF", "313233343536373839", options = "00") #API-frame 0x10. Широковещательный режим. Только локальное подтверждение.
53  #mbee.send_tx_request("00", "0002", "313233343536373839", options = "00") #API-frame 0x10. Адресный режим. Только удаленное подтверждение.
54  #mbee.send_tx_request("01", "0002", "313233343536373839", options = "00") #API-frame 0x10. Адресный режим. Как локальное, так и удаленное подтверждение.
55  #mbee.send_immidiate_apply_local_at("01", "TX", "0002") #API-frame 0x07. Установка параметра TX, равным 2 с немедленным применением изменений.
56  #mbee.send_immidiate_apply_local_at("01", "M1") #API-frame 0x07. Запрос параметра M1.
57  #mbee.send_immidiate_apply_and_save_local_at("01", "M1", "3034") #API-frame 0x08. Установка параметра M1 равным 12340 с немедленным применением изменений и сохранением их в энергонезависимой памяти.
58  #mbee.send_immidiate_apply_and_save_local_at("01", "M1") #API-frame 0x08. #API-frame 0x08. Запрос параметра M1.
59  #mbee.send_queue_local_at("01", "M1", "3032") #API-frame 0x09. Помещение параметра M1, равным 12338 в очередь.
60  #mbee.send_queue_local_at("01", "M1") #API-frame 0x09. Запрос параметра M1.
61  #mbee.send_tx_request("01", "FFFF", "313233343536373839") # #API-frame 0x0F. Широковещательный режим. Только локальное подтверждение. Удаленное подтверждение невозможно вследствие того, что поле опций отсутствует.
62  #mbee.send_remote_at("01", "0002", "04", "M1", "1964") #API-frame 0x17. #API-frame 0x17. Адресный режим. Установка на удаленном модуле параметра M1 равным 6500 с немедленным применением и без сохранения изменений. Как локальное, так и удаленное подтверждение.
63  #mbee.send_remote_at("00", "0002", "04", "M1") #API-frame 0x17. Адресный режим. Запрос параметра M1 на удаленном модуле. Только удаленный ответ.
64  pass
65 
66 timer = Timer(TICK_TIME, timer_set_event) #Создание компонента таймера.
67 
68 timer.start()
69 
70 
71 # Определение callback-функций для всех типов пакетов.
72 def frame_81_received(packet):
73  print("Received 81-frame.")
74  print(packet)
75 
76 def frame_83_received(packet):
77  print("Received 83-frame.")
78  print(packet)
79 
80 def frame_87_received(packet):
81  print("Received 87-frame.")
82  print(packet)
83 
84 def frame_88_received(packet):
85  print("Received 88-frame.")
86  print(packet)
87 
88 def frame_89_received(packet):
89  print("Received 89-frame.")
90  print(packet)
91 
92 def frame_8A_received(packet):
93  print("Received 8A-frame.")
94  print(packet)
95 
96 def frame_8B_received(packet):
97  print("Received 8B-frame.")
98  print(packet)
99 
100 def frame_8C_received(packet):
101  print("Received 8C-frame.")
102  print(packet)
103 
104 def frame_8F_received(packet):
105  print("Received 8F-frame.")
106  print(packet)
107 
108 def frame_97_received(packet):
109  print("Received 97-frame.")
110  print(packet)
111 
112 # Регистрирация callback-фукнций для всех типов фреймов.
113 mbee.callback_registring("81", frame_81_received)
114 mbee.callback_registring("83", frame_83_received)
115 mbee.callback_registring("87", frame_87_received)
116 mbee.callback_registring("88", frame_88_received)
117 mbee.callback_registring("89", frame_89_received)
118 mbee.callback_registring("8A", frame_8A_received)
119 mbee.callback_registring("8B", frame_8B_received)
120 mbee.callback_registring("8C", frame_8C_received)
121 mbee.callback_registring("8F", frame_8F_received)
122 mbee.callback_registring("97", frame_97_received)
123 
124 while(True):
125  try:
126  frame = mbee.run()
127  if events["TIMER_EVENTS"]:
128  events["TIMER_EVENTS"] = False
129  timer_service()
130  timer = Timer(TICK_TIME, timer_set_event)
131  timer.start()
132  timer.setName("Thread-1")
133 
134  except Exception as exc:
135  print("Script is stopping.", exc)
136  break
137  except KeyboardInterrupt:
138  print("Script is stopping.")
139  break