Giter Site home page Giter Site logo

manekinekko / cafy Goto Github PK

View Code? Open in Web Editor NEW
53.0 14.0 8.0 503 KB

An experimental node package to interact with the Delonghi Primadonna Elite (and probably other ECAM models)

License: MIT License

TypeScript 95.07% JavaScript 4.93%
coffee-machine iot ble nodejs hacktoberfest hacktoberfest-accepted

cafy's Introduction

Cafy

This is an experimental Node.js app to interact with the Primadonna Elite (ECAM65075MS) coffee smart machines (and probably other ECAM models), using the Bluetooth Low Energy (BLE) protocol.

Disclaimer

I own a Primadonna Elite (ECAM 650.75.MS) and I created this app for my personal use. The code shared in this project is for educational purposes only.

The code is provided β€œas is”, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall I (Wassim Chegham) or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the code or the use or other dealings in the code.

Prerequisites

You will need:

Getting Started

  1. git clone https://github.com/manekinekko/node-ecam-coffee.git
  2. cd node-ecam-coffee
  3. npm install
  4. npm start

Sending commands (WIP)

For the time being, you can just edit the index.ts file. We will provide a cleaner public API in the future.

import { App } from "./classes";

(async function () {
  let app = new App();
  await app.sendCommand(["0d 08 83 f0 02 02 06 c4 b1"]);
})();

> NOTE: you will need to rebuild your code (`npm start`) every time you change a file under [src](src/) folder.

Project Status

This project is still under development. Most of the work is being invested in understanding the communication protocol and decoding the packets coming from the machine (see src/decoder.ts).

Beverages

Beverage Trigger Command Stop Command
Coffee 0d 0f 83 f0 02 01 01 00 67 02 02 00 00 06 77 ff 0d 08 83 f0 02 02 06 c4 b1
Doppio+ 0d 0d 83 f0 05 01 01 00 78 00 00 06 c4 7e 0d 08 83 f0 05 02 06 41 21
Steam 0d 0d 83 f0 11 01 09 03 84 1c 01 06 c0 7b 0d 08 83 f0 11 02 06 de 82
Hot Water 0d 0d 83 f0 10 01 0f 00 fa 1c 01 06 04 b4 0d 08 83 f0 10 02 06 e9 b2
x2 Espresso 0d 0f 83 f0 04 01 01 00 28 02 02 00 00 06 ab 53 0d 08 83 f0 04 02 06 76 11
Americano 0d 12 83 f0 06 01 01 00 28 02 03 0f 00 6e 00 00 06 47 8b 0d 08 83 f0 06 02 06 18 71
Coffee Long 0d 0f 83 f0 03 01 01 00 a0 02 03 00 00 06 18 7f 0d 08 83 f0 03 02 06 f3 81
Espresso x1 (Aroma=3 Temperature=2 Qty=40) 0d 11 83 f0 01 01 01 00 28 02 03 08 00 00 00 06 8f fc 0d 08 83 f0 01 02 06 9d e1

Machine settings

Setting Trigger Command
Turn on 0d 07 84 0f 02 01 55 12
Cup Light On 0d 0b 90 0f 00 3f 00 00 00 99 39 22
Cup Light Off 0d 0b 90 0f 00 3f 00 00 00 91 b8 2a
Cup Warmer On 0d 0b 90 0f 00 3f 00 00 00 b1 9c 48
Cup Warmer Off 0d 0b 90 0f 00 3f 00 00 00 91 b8 2a
Energy Saving On 0d 0b 90 0f 00 3f 00 00 00 91 b8 2a
Energy Saving Off 0d 0b 90 0f 00 3f 00 00 00 81 aa 1b
Beep Sound On 0d 0b 90 0f 00 3f 00 00 00 91 b8 2a
Beep Sound Off 0d 0b 90 0f 00 3f 00 00 00 95 f8 ae
Show Time 0d 08 95 0f 00 5f 03 00 eb
Water Hardness 1 0d 0b 90 0f 00 32 00 00 00 00 0a c8
Water Hardness 2 0d 0b 90 0f 00 32 00 00 00 02 2a 8a
Water Hardness 3 0d 0b 90 0f 00 32 00 00 00 02 2a 8a
Water Hardness 4 0d 0b 90 0f 00 32 00 00 00 03 3a ab

Other

Beverage Statistics TODO
Profiles TODO
"My" Custom Beverage settings TODO
Monitor data WIP
Decoding machine responses WIP

Protocol

Request/Response Packet Format

Request Packet

  00              01                      N               n-1                n
+----+----------------------------+---+---+---+---+------------------+----------------+
| 0d |   request packet size (n)  |     data      |  checksum byte   | checksum byte  |
+----+----------------------------+---+---+---+---+------------------+----------------+

Response Packet

  00              01                      N               n-1                n
+----+----------------------------+---+---+---+---+------------------+----------------+
| d0 |   request packet size (n)  |     data      |  checksum byte   | checksum byte  |
+----+----------------------------+---+---+---+---+------------------+----------------+

Checksum Algorithm

let deviser = 0x1d0f;
for (let byteIndex = 0; byteIndex < bytes.length - 2; byteIndex++) {
  let i3 =
    (((deviser << 8) | (deviser >>> 8)) & 0x0000ffff) ^
    (bytes[byteIndex] & 0xffff);
  let i4 = i3 ^ ((i3 & 0xff) >> 4);
  let i5 = i4 ^ ((i4 << 12) & 0x0000ffff);
  deviser = i5 ^ (((i5 & 0xff) << 5) & 0x0000ffff);
}
checksum = deviser & 0x0000ffff;

Example: bytes=[0d 05 75 0f da 25]

  1. for all bytes except the last 2 bytes: 0d 05 75 0f
    1. let i3 = (((i << 8) | (i >>> 8)) & 0x0000ffff) ^ (bytes[0] & 0xffff);
      1. 0x1d0f << 8 = 0x1d0f00 (1904384)
      2. 0x1d0f >>> 8 = 0x1d (29)
      3. (0x1d0f00 | 0x1d) = 0x1d0f1d (1904413)
      4. (0x1d0f1d & 0x0000ffff) = 0xf1d (3869)
      5. (0xd0 & 0xffff) = 0xd0 (-48)
      6. 0xf1d ^ 0xd0 = 0xfcd (4045)
    2. let i4 = i3 ^ ((i3 & 0xff) >> 4);
      1. 0xfcd & 0xff = 0xcd
      2. 0xcd >> 4 = 0xc
      3. 0xfcd ^ 0xc = 0xfc1
    3. let i5 = i4 ^ ((i4 << 12) & 0x0000ffff);
      1. 0xfc1 << 12 = 0xfc1000
      2. 0xfc1000 & 0x0000ffff = 0x1000
      3. 0xfc1 ^ 0x1000 = 0x1fc1
    4. i = i5 ^ (((i5 & 0xff) << 5) & 0x0000ffff);
      1. 0x1fc1 & 0xff = 0xc1
      2. 0xc1 << 5 = 0x1820
      3. 0x1820 & 0x0000ffff = 0x1820
      4. 0x1fc1 ^ 0x1820 = 0x7e1

Monitoring Data

Request Packet

  00   01   02   03   04   05
+----+----+----+----+----+----+
| 0d | 05 | 75 | 0f | da | 25 |
+----+----+----+----+----+----+

00= Request magic byte
01= Request packet size
02= Monitoring data type (T0=0x70, T1=0x75, T2=0x75)
03= 0x0f (??)
04= Checksum byte
05= Checksum byte

Response Packet

  00   01   02   03   04   05   06   07   08   09   10   11   12   13   14   15   16   17   18
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
| d0 | 12 | 75 | 0f | 01 | 01 | 00 | 08 | 00 | 00 | 02 | 00 | 00 | 00 | 00 | 00 | 00 | 7d | 05 |
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+

00= Response magic byte
01= Response packet size
02= Operation ID
03= ??
04= Accessory Present (00: no accessory, 01: water spout, 02: milk spout, 03: chocolate spout, 04: milk clean dial)
05= ??
06= ??
07= ??
08= ??
09= ??
10= Machine Model Id
11= Dispensing Percentage
12= ??
13= ??
14= ??
15= Main Board Software Release
16= ??
17= Checksum byte
18= Checksum byte

Rinsing process

Status:
  Decoder       - InStandBy             = false
  Decoder       - TurningOn             = false
  Decoder       - ReadyToWork           = false
  Decoder       - ShuttingDown          = false
  Decoder       - ShutDown              = false
  Decoder       -------------------------
  Decoder       - AccessoryPresent      = 1
  Decoder       - ActiveAlarms          = 2,11
  Decoder       - BeverageType          = undefined
  Decoder       - CoffeeInfuserPos      = 0
  Decoder       - CoffeePowderQty       = -1
  Decoder       - CoffeeWasteCounter    = undefined
  Decoder       - DispensingPercentage  = 0
  Decoder       - FunctionOngoing       = 4
  Decoder       - HeaterTemp            = undefined
  Decoder       - MachineModelId        = -1
  Decoder       - MainBoardSwRelease    = 0
  Decoder       - OnLoads               =
  Decoder       - OnSwitches            = 0,2
  Decoder       - OnSwitchesToShowUser  =
  Decoder       - PressedKeys           =
  Decoder       - RequestedWaterQty     = -1
  Decoder       - SteamerTemp           = undefined
  Decoder       - Timestamp             = undefined
  Decoder       - Type                  = 2
  Decoder       - Value                 = [d0 12 75 0f 01 05 00 04 08 04 09 00 00 00 00 00 00 fa 12] (19)
  Decoder       - WaterFlowQty          = 4608

Troubleshooting

Running on Linux/RPi (EPERM, Operation not permitted)

If you get the following error:

hci onSocketError: EPERM, Operation not permitted
noble warning: adapter state unauthorized, please run as root or with sudo
               or see README for information on running without root/sudo:
               https://github.com/sandeepmistry/noble#running-on-linux

You need to apply the following command:

sudo setcap cap_net_raw+eip $(eval readlink -f `which node`)

More info here: https://github.com/noble/noble#running-on-linux

cafy's People

Contributors

manekinekko avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cafy's Issues

endpoint request

I'm not sure if this is the correct place to post because this is not really an "issue" with the code.
But since you asked me to open an issue on Smartthings community, let me try to describe.

I have a similar implementation that use on my Raspberry PI server.
It uses the Noble nodejs library from here:
https://github.com/noble/noble

and provides http endpoints to be used with smart home hubs. So far I utilised it with Smartthings and Hubitat hubs.

Endpoints are easily created using nodejs "express" library.
it listens on a tcp socket for http post/get requests and then gets parameters like "poweron" , "espresso", "cappuccino", "americano", "cappuccino mix"

accrording to the received order, it creates the BLE request and sends to the Coffee Machine.
but I am not sure of my Noble use , I guess I'm having a loop somewhere or creating unnecessary threads.
as a result it starts to fail after some time.

maybe we can have a look at my nodejs code, or implement similar endpoints on "Cafy"

Operation not permitted

Coffee machine: ECAM 370.95
Hardware: Raspberry pi 3

Running npm start gives the following result:

> @manekinekko/[email protected] start
> npm run build && DEBUG=*,-noble node dist/index.js


> @manekinekko/[email protected] build
> tsc

  App BLE: activating... +0ms
  hci setting filter to: 1600000020c10000000000400000 +0ms
  hci set event mask - writing: 01010c08fffffbff07f8bf3d +5ms
  hci onSocketError: EPERM, Operation not permitted +1ms
noble warning: adapter state unauthorized, please run as root or with sudo
               or see README for information on running without root/sudo:
               https://github.com/sandeepmistry/noble#running-on-linux
  App BLE: state= unauthorized +42ms
  hci set le event mask - writing: 010120081f00000000000000 +12ms
  hci onSocketError: EPERM, Operation not permitted +2ms
  hci read local version - writing: 01011000 +1ms
  hci write LE host supported - writing: 016d0c020100 +2ms
  hci onSocketError: EPERM, Operation not permitted +0ms
  hci read LE host supported - writing: 016c0c00 +2ms
  hci onSocketError: EPERM, Operation not permitted +1ms
  hci read bd addr - writing: 01091000 +1ms
  hci onSocketData: 040e0c0101100007fc01070f000922 +6ms
  hci 	event type = 4 +2ms
  hci 	sub event type = 14 +0ms
  hci 		cmd = 4097 +2ms
  hci 		status = 0 +1ms
  hci 		result = 07fc01070f000922 +0ms
  hci set scan enabled - writing: 010c20020001 +3ms
  hci onSocketError: EPERM, Operation not permitted +1ms
  hci set scan parameters - writing: 010b200701100010000000 +1ms
  hci onSocketError: EPERM, Operation not permitted +1ms
  hci onSocketData: 040e0a01091000c15cabeb27b8 +1ms
  hci 	event type = 4 +1ms
  hci 	sub event type = 14 +0ms
  hci 		cmd = 4105 +1ms
  hci 		status = 0 +0ms
  hci 		result = c15cabeb27b8 +0ms
  hci address = b8:27:eb:ab:5c:c1 +1ms
  App packets to send: id= health_check +5s
  App                 hex= [0d 05 75 0f da 25] (6) +3ms
  App                 dec= [13 5 117 15 -38 37] (6) +1ms
  App Warning: Trying to send packets but connection is not ready. Retrying... (5) +1ms
  App packets to send: id= health_check +1s
  App                 hex= [0d 05 75 0f da 25] (6) +1ms
  App                 dec= [13 5 117 15 -38 37] (6) +1ms
  App Warning: Trying to send packets but connection is not ready. Retrying... (4) +0ms
  App packets to send: id= health_check +1s
  App                 hex= [0d 05 75 0f da 25] (6) +2ms
  App                 dec= [13 5 117 15 -38 37] (6) +0ms
  App Warning: Trying to send packets but connection is not ready. Retrying... (3) +1ms
  App packets to send: id= health_check +1s
  App                 hex= [0d 05 75 0f da 25] (6) +1ms
  App                 dec= [13 5 117 15 -38 37] (6) +0ms
  App Warning: Trying to send packets but connection is not ready. Retrying... (2) +1ms
  App packets to send: id= health_check +1s
  App                 hex= [0d 05 75 0f da 25] (6) +3ms
  App                 dec= [13 5 117 15 -38 37] (6) +0ms
  App Warning: Trying to send packets but connection is not ready. Retrying... (1) +1ms
  App Abort +0ms
  App disconnecting... +1ms
  hci set scan enabled - writing: 010c20020001 +9s
  hci onSocketError: EPERM, Operation not permitted +1ms

Value to write for turn off

Hi,

thanks for great job. I have one question only.
What is value to write for turn off? I can nowhere it find.

Thanks.

CRC code calculation

Nice work, I was waiting for it :)

This is not a bug, but a (hopefully helpful) contribution.
Looking at crccalc it turns out that the CRC algorithm used might be CRC-16/AUG-CCITT. For parameters see there.
The byte sequence for turn_on, without the last 2 CRC bytes (0d07840f0201) yields 5512 !
In case you need a clean CRC lib, here is one: https://github.com/latysheff/node-polycrc .

Maybe this helps with some of your ongoing work :) :)

Regards, Steffen

Unexpected token failure on raspberry pi 3

When running on raspberry pi 3, get the following error (node version 12.9.0, npm version 6.10.2):

$ npm start

> [email protected] start /home/pi/node-ecam-coffee
> npm run build && DEBUG=*,-noble node dist/index.js


> [email protected] build /home/pi/node-ecam-coffee
> tsc

/home/pi/node-ecam-coffee/dist/classes/App.js:26
            if (!this.machine?.characteristic) {
                              ^

SyntaxError: Unexpected token .
    at Module._compile (internal/modules/cjs/loader.js:872:18)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:947:10)
    at Module.load (internal/modules/cjs/loader.js:790:32)
    at Function.Module._load (internal/modules/cjs/loader.js:703:12)
    at Module.require (internal/modules/cjs/loader.js:830:19)
    at require (internal/modules/cjs/helpers.js:68:18)
    at Object.<anonymous> (/home/pi/node-ecam-coffee/dist/index.js:3:15)
    at Module._compile (internal/modules/cjs/loader.js:936:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:947:10)
    at Module.load (internal/modules/cjs/loader.js:790:32)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] start: `npm run build && DEBUG=*,-noble node dist/index.js`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the [email protected] start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/pi/.npm/_logs/2020-11-23T23_21_40_457Z-debug.log

Example for turning on / off the machine

Hi,

Can you please add an example of how to turn on and off the machine withe the Cafy (App) class?

I am not that familiar with the bluetooth staff, so I am not sure: Is the Cafy class scan and find the device automatically or there should be some code that handles it (which wiull be great if you can add it to the examples).

Connection not ready

Coffee machine: ECAM 370.95
Hardware: Raspberry pi 3

Seems that it is trying to connect to the wrong device. Is it auto-detection? Should I set the device address somewhere?

  App BLE: activating... +0ms
  hci setting filter to: 1600000020c10000000000400000 +0ms
  hci set event mask - writing: 01010c08fffffbff07f8bf3d +5ms
  hci set le event mask - writing: 010120081f00000000000000 +1ms
  hci read local version - writing: 01011000 +2ms
  hci write LE host supported - writing: 016d0c020100 +1ms
  hci read LE host supported - writing: 016c0c00 +1ms
  hci read bd addr - writing: 01091000 +2ms
  hci onSocketData: 040e0401010c00 +6ms
  hci 	event type = 4 +1ms
  hci 	sub event type = 14 +1ms
  hci 		cmd = 3073 +2ms
  hci 		status = 0 +1ms
  hci 		result =  +0ms
  hci onSocketData: 040e0401012000 +2ms
  hci 	event type = 4 +1ms
  hci 	sub event type = 14 +0ms
  hci 		cmd = 8193 +1ms
  hci 		status = 0 +0ms
  hci 		result =  +1ms
  hci onSocketData: 040e0c0101100007fc01070f000922 +1ms
  hci 	event type = 4 +0ms
  hci 	sub event type = 14 +1ms
  hci 		cmd = 4097 +0ms
  hci 		status = 0 +1ms
  hci 		result = 07fc01070f000922 +0ms
  hci set scan enabled - writing: 010c20020001 +2ms
  hci set scan parameters - writing: 010b200701100010000000 +1ms
  hci onSocketData: 040e04016d0c00 +1ms
  hci 	event type = 4 +1ms
  hci 	sub event type = 14 +0ms
  hci 		cmd = 3181 +1ms
  hci 		status = 0 +0ms
  hci 		result =  +0ms
  hci onSocketData: 040e06016c0c000100 +2ms
  hci 	event type = 4 +0ms
  hci 	sub event type = 14 +0ms
  hci 		cmd = 3180 +1ms
  hci 		status = 0 +0ms
  hci 		result = 0100 +1ms
  hci 			le = 1 +0ms
  hci 			simul = 0 +0ms
  hci onSocketData: 040e0a01091000c15cabeb27b8 +1ms
  hci 	event type = 4 +0ms
  hci 	sub event type = 14 +1ms
  hci 		cmd = 4105 +0ms
  hci 		status = 0 +0ms
  hci 		result = c15cabeb27b8 +1ms
  hci address = b8:27:eb:ab:5c:c1 +1ms
  hci onSocketData: 040e04010c200c +1ms
  hci 	event type = 4 +1ms
  hci 	sub event type = 14 +0ms
  hci 		cmd = 8204 +0ms
  hci 		status = 12 +1ms
  hci 		result =  +0ms
  hci onSocketData: 040e04010b2000 +1ms
  hci 	event type = 4 +1ms
  hci 	sub event type = 14 +0ms
  hci 		cmd = 8203 +1ms
  hci 		status = 0 +0ms
  hci 		result =  +0ms
  App BLE: state= poweredOn +80ms
  hci set scan enabled - writing: 010c20020001 +7ms
  hci set scan parameters - writing: 010b200701100010000000 +1ms
  hci set scan enabled - writing: 010c20020101 +1ms
  hci onSocketData: 040e04010c200c +1ms
  hci 	event type = 4 +1ms
  hci 	sub event type = 14 +0ms
  hci 		cmd = 8204 +1ms
  hci 		status = 12 +0ms
  hci 		result =  +0ms
  hci onSocketData: 040e04010b2000 +1ms
  hci 	event type = 4 +1ms
  hci 	sub event type = 14 +0ms
  hci 		cmd = 8203 +1ms
  hci 		status = 0 +0ms
  hci 		result =  +0ms
  hci onSocketData: 040e04010c2000 +1ms
  hci 	event type = 4 +0ms
  hci 	sub event type = 14 +1ms
  hci 		cmd = 8204 +0ms
  hci 		status = 0 +0ms
  hci 		result =  +1ms
  App BLE: scanning... +16ms
  hci onSocketData: 043e2b02010000a0478450a0001f0201060909443135333332383711070003003a12081a02dd07e658035b0300a5 +25ms
  hci 	event type = 4 +1ms
  hci 	sub event type = 62 +0ms
  hci 		LE meta event type = 2 +0ms
  hci 		LE meta event status = 1 +1ms
  hci 		LE meta event data = 0000a0478450a0001f0201060909443135333332383711070003003a12081a02dd07e658035b0300a5 +0ms
  hci 			type = 0 +2ms
  hci 			address = 00:a0:50:84:47:a0 +1ms
  hci 			address type = public +0ms
  hci 			eir = 0201060909443135333332383711070003003a12081a02dd07e658035b0300 +1ms
  hci 			rssi = -91 +0ms
  gap advertisement = {"localName":"D1533287","serviceData":[],"serviceUuids":["00035b0358e607dd021a08123a000300"],"solicitationServiceUuids":[],"serviceSolicitationUuids":[]} +0ms
  hci onSocketData: 043e0c02010400a0478450a00000a4 +6ms
  hci 	event type = 4 +0ms
  hci 	sub event type = 62 +1ms
  hci 		LE meta event type = 2 +0ms
  hci 		LE meta event status = 1 +1ms
  hci 		LE meta event data = 0400a0478450a00000a4 +0ms
  hci 			type = 4 +0ms
  hci 			address = 00:a0:50:84:47:a0 +1ms
  hci 			address type = public +0ms
  hci 			eir =  +0ms
  hci 			rssi = -92 +1ms
  gap advertisement = {"localName":"D1533287","serviceData":[],"serviceUuids":["00035b0358e607dd021a08123a000300"],"solicitationServiceUuids":[],"serviceSolicitationUuids":[]} +6ms
  hci onSocketData: 043e1a020100016246b9bd567d0e0201060aff4c001005581c990599a0 +252ms
  hci 	event type = 4 +0ms
  hci 	sub event type = 62 +1ms
  hci 		LE meta event type = 2 +0ms
  hci 		LE meta event status = 1 +0ms
  hci 		LE meta event data = 00016246b9bd567d0e0201060aff4c001005581c990599a0 +1ms
  hci 			type = 0 +0ms
  hci 			address = 7d:56:bd:b9:46:62 +1ms
  hci 			address type = random +0ms
  hci 			eir = 0201060aff4c001005581c990599 +0ms
  hci 			rssi = -96 +1ms
  gap advertisement = {"manufacturerData":{"type":"Buffer","data":[76,0,16,5,88,28,153,5,153]},"serviceData":[],"serviceUuids":[],"solicitationServiceUuids":[],"serviceSolicitationUuids":[]} +257ms
  hci onSocketData: 043e2b020100007315a6e95c441f02011a1bff75004204010166445ce9a61573465ce9a6157201000000000000a1 +48ms
  hci 	event type = 4 +1ms
  hci 	sub event type = 62 +0ms
  hci 		LE meta event type = 2 +1ms
  hci 		LE meta event status = 1 +0ms
  hci 		LE meta event data = 00007315a6e95c441f02011a1bff75004204010166445ce9a61573465ce9a6157201000000000000a1 +0ms
  hci 			type = 0 +1ms
  hci 			address = 44:5c:e9:a6:15:73 +1ms
  hci 			address type = public +0ms
  hci 			eir = 02011a1bff75004204010166445ce9a61573465ce9a6157201000000000000 +0ms
  hci 			rssi = -95 +1ms
  gap advertisement = {"manufacturerData":{"type":"Buffer","data":[117,0,66,4,1,1,102,68,92,233,166,21,115,70,92,233,166,21,114,1,0,0,0,0,0,0]},"serviceData":[],"serviceUuids":[],"solicitationServiceUuids":[],"serviceSolicitationUuids":[]} +52ms
  hci onSocketData: 043e28020102015912260109591c03039ffe17169ffe0000000000000000000000000000000000000000c5 +109ms
  hci 	event type = 4 +0ms
  hci 	sub event type = 62 +1ms
  hci 		LE meta event type = 2 +0ms
  hci 		LE meta event status = 1 +0ms
  hci 		LE meta event data = 02015912260109591c03039ffe17169ffe0000000000000000000000000000000000000000c5 +1ms
  hci 			type = 2 +1ms
  hci 			address = 59:09:01:26:12:59 +0ms
  hci 			address type = random +0ms
  hci 			eir = 03039ffe17169ffe0000000000000000000000000000000000000000 +1ms
  hci 			rssi = -59 +0ms
  gap advertisement = {"serviceData":[{"uuid":"fe9f","data":{"type":"Buffer","data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}}],"serviceUuids":["fe9f"],"solicitationServiceUuids":[],"serviceSolicitationUuids":[]} +114ms
  hci onSocketData: 043e16020104015912260109590a09ffe00000c9ca88fcc1b5 +2ms
  hci 	event type = 4 +1ms
  hci 	sub event type = 62 +0ms
  hci 		LE meta event type = 2 +1ms
  hci 		LE meta event status = 1 +0ms
  hci 		LE meta event data = 04015912260109590a09ffe00000c9ca88fcc1b5 +0ms
  hci 			type = 4 +1ms
  hci 			address = 59:09:01:26:12:59 +0ms
  hci 			address type = random +0ms
  hci 			eir = 09ffe00000c9ca88fcc1 +1ms
  hci 			rssi = -75 +0ms
  gap advertisement = {"manufacturerData":{"type":"Buffer","data":[224,0,0,201,202,136,252,193]},"serviceData":[{"uuid":"fe9f","data":{"type":"Buffer","data":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}}],"serviceUuids":["fe9f"],"solicitationServiceUuids":[],"serviceSolicitationUuids":[]} +6ms
  hci onSocketData: 043e0c020104016246b9bd567d00a4 +376ms
  hci 	event type = 4 +1ms
  hci 	sub event type = 62 +0ms
  hci 		LE meta event type = 2 +0ms
  hci 		LE meta event status = 1 +1ms
  hci 		LE meta event data = 04016246b9bd567d00a4 +0ms
  hci 			type = 4 +1ms
  hci 			address = 7d:56:bd:b9:46:62 +0ms
  hci 			address type = random +0ms
  hci 			eir =  +0ms
  hci 			rssi = -92 +1ms
  gap advertisement = {"manufacturerData":{"type":"Buffer","data":[76,0,16,5,88,28,153,5,153]},"serviceData":[],"serviceUuids":[],"solicitationServiceUuids":[],"serviceSolicitationUuids":[]} +379ms
  hci onSocketData: 043e2b02010001ec36f67209c01f0709534d492d4d31031900000201060f1695fe3120a10100ec36f67209c00db0 +557ms
  hci 	event type = 4 +5ms
  hci 	sub event type = 62 +0ms
  hci 		LE meta event type = 2 +1ms
  hci 		LE meta event status = 1 +0ms
  hci 		LE meta event data = 0001ec36f67209c01f0709534d492d4d31031900000201060f1695fe3120a10100ec36f67209c00db0 +0ms
  hci 			type = 0 +1ms
  hci 			address = c0:09:72:f6:36:ec +0ms
  hci 			address type = random +1ms
  hci 			eir = 0709534d492d4d31031900000201060f1695fe3120a10100ec36f67209c00d +0ms
  hci 			rssi = -80 +1ms
  gap advertisement = {"localName":"SMI-M1","serviceData":[{"uuid":"fe95","data":{"type":"Buffer","data":[49,32,161,1,0,236,54,246,114,9,192,13]}}],"serviceUuids":[],"solicitationServiceUuids":[],"serviceSolicitationUuids":[]} +567ms
  hci onSocketData: 043e2702010401ec36f67209c01b07030a180100301512ff5500736f6f636172656d31c00972f636ecb0 +2ms
  hci 	event type = 4 +1ms
  hci 	sub event type = 62 +0ms
  hci 		LE meta event type = 2 +0ms
  hci 		LE meta event status = 1 +1ms
  hci 		LE meta event data = 0401ec36f67209c01b07030a180100301512ff5500736f6f636172656d31c00972f636ecb0 +0ms
  hci 			type = 4 +1ms
  hci 			address = c0:09:72:f6:36:ec +0ms
  hci 			address type = random +0ms
  hci 			eir = 07030a180100301512ff5500736f6f636172656d31c00972f636ec +1ms
  hci 			rssi = -80 +0ms
  gap advertisement = {"localName":"SMI-M1","manufacturerData":{"type":"Buffer","data":[85,0,115,111,111,99,97,114,101,109,49,192,9,114,246,54,236]},"serviceData":[{"uuid":"fe95","data":{"type":"Buffer","data":[49,32,161,1,0,236,54,246,114,9,192,13]}}],"serviceUuids":["180a","1","1530"],"solicitationServiceUuids":[],"serviceSolicitationUuids":[]} +6ms
  App packets to send: id= health_check +5s
  App                 hex= [0d 05 75 0f da 25] (6) +3ms
  App                 dec= [13 5 117 15 -38 37] (6) +1ms
  App Warning: Trying to send packets but connection is not ready. Retrying... (5) +1ms
  App packets to send: id= health_check +1s
  App                 hex= [0d 05 75 0f da 25] (6) +1ms
  App                 dec= [13 5 117 15 -38 37] (6) +0ms
  App Warning: Trying to send packets but connection is not ready. Retrying... (4) +1ms
  App packets to send: id= health_check +1s
  App                 hex= [0d 05 75 0f da 25] (6) +1ms
  App                 dec= [13 5 117 15 -38 37] (6) +1ms
  App Warning: Trying to send packets but connection is not ready. Retrying... (3) +0ms
  App packets to send: id= health_check +1s
  App                 hex= [0d 05 75 0f da 25] (6) +1ms
  App                 dec= [13 5 117 15 -38 37] (6) +1ms
  App Warning: Trying to send packets but connection is not ready. Retrying... (2) +0ms
  App packets to send: id= health_check +1s
  App                 hex= [0d 05 75 0f da 25] (6) +3ms
  App                 dec= [13 5 117 15 -38 37] (6) +1ms
  App Warning: Trying to send packets but connection is not ready. Retrying... (1) +1ms
  App Abort +1ms
  App disconnecting... +2ms
  hci set scan enabled - writing: 010c20020001 +8s

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.