at_yukari.hara
2021年2月1日 12時55分
Armadillo-640で、ドングルタイプのEnOcean受信機を使って開閉センサのデータを取得してみました。
Node-REDを使う方法は以下のブログをご参照ください。
Armadillo-640:ドングルタイプのEnOcean受信機を使って開閉センサのデータを取得してみた(Node-RED編)
使用するもの
手順
1.必要なパッケージ、ライブラリのインストール
以下のコマンドを実行し、必要なパッケージをインストールします。
root@armadillo:~# apt-get update root@armadillo:~# apt-get upgrade root@armadillo:~# apt-get install python root@armadillo:~# apt-get install python-pip root@armadillo:~# pip install pyserial
2.Pythonプログラムの作成
下記の内容のファイルを作成します。
(後述の説明上、このファイル名を"enocean.py"とします。)
以下のコードはPythonでEnOceanの電文を読み取るを参考にさせていただきました。
from serial import * from sys import exit from datetime import datetime port = '/dev/ttyUSB0' try: ser = Serial(port, 57600) print('open serial port: %s' % port) except: print('cannot open serial port: %s' % port) exit(1) cnt,dataLen,optLen = 0,0,0 telegraph,headList,dataList,optList = [],[],[],[] ready = True while True: s = ser.read().encode('hex') if s == '55' and ready: cnt,dataLen,optLen = 0,0,0 telegraph,headList,dataList,optList = [],[],[],[] ready = False print '==========' cnt += 1 telegraph.append(s) if 2 <= cnt <= 5: # header headList.append(s) if cnt == 5: dataLen = int(headList[1],16) optLen = int(headList[2],16) if 7 <= cnt <= (6+dataLen): # data dataList.append(s) if (7+dataLen) <= cnt <= (6+dataLen+optLen): # optional data optList.append(s) if cnt == (6+dataLen+optLen+1): ready = True dt = datetime.now().strftime('%Y-%m-%d %H:%M:%S') print dt print ':'.join(telegraph) print 'head...', ':'.join(headList) print 'data...', ':'.join(dataList), '(length=%d)' % dataLen print 'opt ...', ':'.join(optList), '(length=%d)' % optLen sensorId = ':'.join(dataList[1:5]) print 'sid ...', sensorId if sensorId == 'XX:XX:XX:XX': #センサーのSIDを入力 if dataList[5] == '08': action = 'open' elif dataList[5] == '09': action = 'close' else: action = 'non' print ('door...', action) else: continue
3.実行
作成した"enocean.py"を下記のようにpythonで実行し、 開閉センサーを動作させると、センサーの情報と、開閉情報がコンソールに表示されます。
root@armadillo:~# python enocean.py ========== 2021-01-25 16:36:02 55:00:07:02:0a:0a:21:05:17:9a:02:09:c1:01:29:ca head... 00:07:02:0a data... 21:05:17:9a:02:09:c1 (length=7) opt ... 01:29 (length=2) sid ... 05:17:9a:02 ('door...', 'close') ========== 2021-01-25 16:36:02 55:00:07:02:0a:0a:21:05:17:9a:02:08:c6:01:29:ca head... 00:07:02:0a data... 21:05:17:9a:02:08:c6 (length=7) opt ... 01:29 (length=2) sid ... 05:17:9a:02 ('door...', 'open')