メインコンテンツへスキップ
見出し画像

TWBlueScan:開発が一気に進んだがbeaconの処理で悩む

    浦和レッズ引き分け!老猫は体調がかなり悪いなかTVの前にいました。TVから聞こえるスタジアムの音に反応してしっぽを振っていました。

    さて、昨日開発の方向性を決めたBlueToothのデバイスの情報を集めるセンサーTWBlueScanのリポジトリを作って一気にソースコードを書きました。

    基本的な機能が動作した後、少し欲がでて、

    の情報も取得できるようにしました。
    参考にしたのは、

    のデータシートと

    のサイトです。何も設定を変更しなくてもデフォルトで送信されるアドバタイスパケットから気温などの環境情報が取得できます。

    // OMRONSセンサーのデータ
    // https://omronfs.omron.com/ja_JP/ecb/products/pdf/CDSC-016A-web1.pdf
    // P60
    // https://armadillo.atmark-techno.com/howto/armadillo_2JCIE-BU01_GATT
    // 01     Data Type
    // c5     連番
    // a9 09  温度 0.01℃
    // cd 1a  湿度 0.01%
    // 0d 00  照度 1lx
    // 26 6c 0f 00 気圧 1hPa
    // 3d 13  騒音 0.01dB
    // 07 00  eTVOC 1ppb
    // c3 01  二酸化炭素 1ppm
    // ff
    
    func checkOMRONEnv(dev *device.Device1) {
    	if dev == nil || dev.Properties == nil || dev.Properties.ManufacturerData == nil {
    		log.Printf("checkOMRONEnv no data")
    	}
    	i, ok := dev.Properties.ManufacturerData[0x02d5]
    	if !ok {
    		log.Printf("checkOMRONEnv no ManufacturerData")
    	}
    	if v, ok := i.(dbus.Variant); ok {
    		if ba, ok := v.Value().([]uint8); ok && len(ba) > 18 && ba[0] == 1 {
    			seq := int(ba[1])
    			temp := float64(int(ba[3])*256+int(ba[2])) * 0.01
    			hum := float64(int(ba[5])*256+int(ba[4])) * 0.01
    			lx := int(ba[7])*256 + int(ba[6])
    			press := float64(int(ba[11])*(256*256*256)+int(ba[10])*(256*256)+int(ba[9])*256+int(ba[8])) * 0.001
    			sound := float64(int(ba[13])*256+int(ba[12])) * 0.01
    			v := int(ba[15])*256 + int(ba[14])
    			co2 := int(ba[17])*256 + int(ba[16])
    			log.Printf("seq=%d,temp=%.02f,hum=%.02f,lx=%d,press=%.02f,sound=%.02f,eTVOC=%d,eCO2=%d",
    				seq, temp, hum, lx, press, sound, v, co2,
    			)
    			syslogCh <- fmt.Sprintf("type=OMRONEnv,address=%s,name=%s,rssi=%d,seq=%d,temp=%.02f,hum=%.02f,lx=%d,press=%.02f,sound=%.02f,eTVOC=%d,eCO2=%d",
    				dev.Properties.Address, dev.Properties.Name, dev.Properties.RSSI,
    				seq, temp, hum, lx, press, sound, v, co2,
    			)
    		}
    	}
    }

    のように変換すれば、

    2021/08/30 07:35:31.031 info:local5 twBlueScan type=OMRONEnv,address=EF:6E:29:F9:8C:48,name=Rbt,rssi=-61,seq=137,temp=24.54,hum=64.88,lx=20,press=1012.50,sound=51.15,eTVOC=186,eCO2=1522

    のようなログが出力されます。
    何となく良くなってきましたが、まだ元のサンプルから流用したbeaconの処理に問題があり悩んでいます。続きは明日

    明日に続く

     
     

    twsnmp

     
     
    私は、TWSNMP Managerの開発者です。 25年以上前に作ったソフトを今も多くの人に使っていただけて幸せです。 2021年:Docker版TWSNMP FC、2022年:スマホ版,2023年:シン・TWSNMP、2026年AI対応ログ分析ツールを開発しました。

    あなたへのおすすめ