├── .clang-format ├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── pull_request_template.md └── workflows │ ├── PR_build.yml │ ├── build.yml │ ├── manual_test-pypi.yml │ ├── publish.yml │ ├── publish_docs.yml │ └── stale.yml ├── .gitignore ├── .gitmodules ├── .npmignore ├── .pre-commit-config.yaml ├── CMakeLists.txt ├── CODE_OF_CONDUCT.md ├── LICENSE.txt ├── MANIFEST.in ├── README.md ├── docs ├── .vuepress │ ├── config.js │ ├── public │ │ ├── apple-touch-icon.png │ │ ├── favicon-144x144.png │ │ ├── favicon-16x16.png │ │ └── favicon-32x32.png │ └── styles │ │ └── index.styl ├── README.md ├── devices │ ├── ABN03.md │ ├── ABN07.md │ ├── ABTemp.md │ ├── Amazfit.md │ ├── Amphiro.md │ ├── AppleAirPods.md │ ├── AppleDevice.md │ ├── AppleWatch.md │ ├── Aranet4.md │ ├── BC08.md │ ├── BM1in1.md │ ├── BM2.md │ ├── BM3in1.md │ ├── BM4in1.md │ ├── BM6.md │ ├── BPARASITE.md │ ├── BWBSDOO.md │ ├── BeatsBuds.md │ ├── CGC1.md │ ├── CGD1.md │ ├── CGDK2.md │ ├── CGDN1.md │ ├── CGG1.md │ ├── CGH1.md │ ├── CGP1W.md │ ├── CGP22C.md │ ├── CGP23W.md │ ├── CGPR1.md │ ├── Ecoflow.md │ ├── FEASY.MD │ ├── H5055.md │ ├── H5072.md │ ├── H5074.md │ ├── H5075.md │ ├── H5100.md │ ├── H5101.md │ ├── H5102.md │ ├── H5104.md │ ├── H5105.md │ ├── H5106.md │ ├── H5108.md │ ├── H5174.md │ ├── H5177.md │ ├── H5179.md │ ├── HHCCJCY01HHCC.md │ ├── HHCCJCY10.md │ ├── HHCCPOT002.md │ ├── HOBOMX2001.md │ ├── IBS-P01B.md │ ├── IBS_TH1.md │ ├── IBS_TH2.md │ ├── IBT_2X.md │ ├── IBT_4XS.md │ ├── IBT_6XS.md │ ├── ITH_12S.md │ ├── JAALEE.md │ ├── JQJCY01YM.md │ ├── KKM_K6P.md │ ├── KKM_K9.md │ ├── LYWSD02.md │ ├── LYWSD03MMC.md │ ├── LYWSDCGQ.md │ ├── MBXPRO.md │ ├── MHO-C401.md │ ├── MJWSD05MMC.md │ ├── MUE4094RT.md │ ├── Miband.md │ ├── Mikrotik.md │ ├── MokoBeacon.md │ ├── Mopeka.md │ ├── NODONNIU.md │ ├── ORALB.md │ ├── ORAS.md │ ├── OTOD.md │ ├── PH10.md │ ├── RDL52832.md │ ├── RuuviTag_RAWv1.md │ ├── RuuviTag_RAWv2.md │ ├── SBBT-002C.md │ ├── SBBT-004CEU.md │ ├── SBBT-004CUS.md │ ├── SBBT.md │ ├── SBCS.md │ ├── SBCU.md │ ├── SBDW-002C.md │ ├── SBHT-003C.md │ ├── SBMO-003Z.md │ ├── SBMP.md │ ├── SBMS.md │ ├── SBMT.md │ ├── SBOT.md │ ├── SBS1.md │ ├── SCD4X.md │ ├── SDLS.md │ ├── SE_MAG.md │ ├── SE_RHT_PRO.md │ ├── SE_TEMP.md │ ├── SE_TEMP_PRO.md │ ├── SE_TPROBE.md │ ├── SHT4x.md │ ├── SOLIS_6.md │ ├── SensorP_HT.md │ ├── SensorP_HTP.md │ ├── ServiceData.md │ ├── Skale.md │ ├── T201.md │ ├── T301.md │ ├── THB1.md │ ├── TILT.md │ ├── TP357.md │ ├── TP358.md │ ├── TP359.md │ ├── TP393.md │ ├── TPMS.md │ ├── ThermoBeacon.md │ ├── UT363BT.md │ ├── VCH6003.md │ ├── VICTRON_BSC.md │ ├── VICTRON_ORIONXS.md │ ├── VICTRON_SBP.md │ ├── XMTZC04HM.md │ ├── XMTZC05HM.md │ ├── XOSSX2.md │ ├── devices_by_brand.md │ ├── devices_template.html │ ├── generate_devices_tables.py │ ├── iBeacon.md │ ├── iNodeEM.md │ └── rows.md ├── img │ ├── BC021.png │ ├── BM2.png │ ├── BP.png │ ├── CGD1.png │ ├── CGDK2.png │ ├── CGDN1.png │ ├── CGG1.png │ ├── CGH1.png │ ├── CGP1W.png │ ├── CGPR1.png │ ├── H4.png │ ├── H5074.png │ ├── H5075.png │ ├── H5106.png │ ├── HHCCJCY01HHCC.png │ ├── IBS-TH1.png │ ├── IBS-TH2.png │ ├── IBT_2X.png │ ├── IBT_4X.png │ ├── JQJCY01YM.png │ ├── LYWSD02MMC.png │ ├── LYWSD03MMC.png │ ├── LYWSDCGQ.png │ ├── M1017.png │ ├── M2.png │ ├── MHO-C401.png │ ├── MiBand.png │ ├── T201.png │ ├── THX1.png │ ├── TILE.png │ ├── TP357.png │ ├── TP358.png │ ├── TPMS.png │ ├── Theengs_decoder.jpg │ ├── Theengs_decoder_iot_chain.jpg │ ├── VCH6003.png │ ├── W110150X.png │ └── XMTZC05HM.png ├── participate │ ├── adding-decoders.md │ ├── development.md │ └── support.md └── use │ ├── ESP32.md │ ├── include.md │ └── python.md ├── examples ├── ESP32 │ └── ScanAndDecode │ │ ├── .gitignore │ │ ├── ScanAndDecode.ino │ │ └── platformio.ini ├── go │ ├── README.md │ ├── decoder.go │ └── dummy.cpp └── python │ ├── README.md │ └── ScanAndDecode.py ├── include └── shared │ └── theengs.h ├── library.json ├── library.properties ├── package-lock.json ├── package.json ├── pyproject.toml ├── python ├── CMakeLists.txt ├── MANIFEST.in ├── README.md ├── TheengsDecoder │ ├── __init__.py │ └── _decoder.cpp ├── pyproject.toml └── setup.py ├── scripts ├── check_decoder.py └── remove_arduino_json.py ├── src ├── decoder.cpp ├── decoder.h ├── decoder_c.cpp ├── devices.h └── devices │ ├── ABN03_json.h │ ├── ABN07_json.h │ ├── ABTemp_json.h │ ├── APPLEAIRPODS_json.h │ ├── APPLEDEVICE_json.h │ ├── APPLEWATCH_json.h │ ├── APPLE_json.h │ ├── ARANET4_json.h │ ├── Amphiro_json.h │ ├── BC08_json.h │ ├── BM1IN1_json.h │ ├── BM2_json.h │ ├── BM3IN1_json.h │ ├── BM4IN1_json.h │ ├── BM6_json.h │ ├── BPARASITE_json.h │ ├── BWBSDOO_json.h │ ├── CGD1_json.h │ ├── CGDK2_json.h │ ├── CGDN1_json.h │ ├── CGG1_json.h │ ├── CGH1_json.h │ ├── CGP1W_json.h │ ├── CGP22C_json.h │ ├── CGP23W_json.h │ ├── CGPR1_json.h │ ├── ECOFLOW_ADV_json.h │ ├── FEASY_json.h │ ├── GAEN_json.h │ ├── H5055_json.h │ ├── H5072_json.h │ ├── H5074_json.h │ ├── H5102_json.h │ ├── H5106_json.h │ ├── H5179_json.h │ ├── HHCCJCY01HHCC_json.h │ ├── HHCCJCY10_json.h │ ├── HHCCPOT002_json.h │ ├── HOBOMX2001_json.h │ ├── HOLYIOT_json.h │ ├── IBS_THBP01B_json.h │ ├── IBT_2X_json.h │ ├── IBT_4XS_json.h │ ├── IBT_6XS_SOLIS6_json.h │ ├── JAALEE_json.h │ ├── JQJCY01YM_json.h │ ├── KKM_K6P_json.h │ ├── KKM_K9_json.h │ ├── LYWSD02_json.h │ ├── LYWSD03MMC_ENCR_json.h │ ├── LYWSD03MMC_json.h │ ├── LYWSDCGQ_json.h │ ├── MBXPRO_json.h │ ├── MS_CDP_json.h │ ├── MUE4094RT_json.h │ ├── Miband_json.h │ ├── Mikrotik_json.h │ ├── Mokobeacon_json.h │ ├── Mopeka_json.h │ ├── NODONNIU_json.h │ ├── OTOD_json.h │ ├── OralB_json.h │ ├── Oras_json.h │ ├── PH10_json.h │ ├── RDL52832_json.h │ ├── RuuviTag_RAWv1_json.h │ ├── RuuviTag_RAWv2_json.h │ ├── SBBT_002C_ENCR_json.h │ ├── SBBT_002C_json.h │ ├── SBBT_004CEU_US_json.h │ ├── SBBT_json.h │ ├── SBCS_json.h │ ├── SBCU_json.h │ ├── SBDW_002C_ENCR_json.h │ ├── SBDW_002C_json.h │ ├── SBHT_003C_ENCR_json.h │ ├── SBHT_003C_json.h │ ├── SBMO_003Z_ENCR_json.h │ ├── SBMO_003Z_json.h │ ├── SBMP_json.h │ ├── SBMS_json.h │ ├── SBMT_json.h │ ├── SBOT_json.h │ ├── SBS1_json.h │ ├── SCD4X_json.h │ ├── SE_MAG_json.h │ ├── SE_RHT_json.h │ ├── SE_TEMP_json.h │ ├── SE_TPROBE_json.h │ ├── SHT4X_json.h │ ├── SensorP_HTP_json.h │ ├── SensorP_HT_json.h │ ├── ServiceData_json.h │ ├── Skale_json.h │ ├── SmartDry_json.h │ ├── T201_json.h │ ├── T301_json.h │ ├── THB1_json.h │ ├── TILT_json.h │ ├── TPMS_json.h │ ├── TPTH_json.h │ ├── ThermoBeacon_json.h │ ├── UT363BT_json.h │ ├── VCH6003_json.h │ ├── VICTRON_BSC_ENCR_json.h │ ├── VICTRON_BSC_json.h │ ├── VICTRON_ORIONXS_ENCR_json.h │ ├── VICTRON_ORIONXS_json.h │ ├── VICTRON_SBP_ENCR_json.h │ ├── VICTRON_SBP_json.h │ ├── XMTZC04HMKG_json.h │ ├── XMTZC04HMLB_json.h │ ├── XMTZC05HMKG_json.h │ ├── XMTZC05HMLB_json.h │ ├── XOSSX2_json.h │ ├── common_props.h │ ├── iBeacon_json.h │ ├── iNodeEM_json.h │ └── tracker_json.h └── tests ├── BLE ├── CMakeLists.txt └── test_ble.cpp ├── BLE_fail ├── CMakeLists.txt └── test_ble_fail.cpp ├── CMakeLists.txt ├── CompileOptions.cmake └── python_ble └── decoder_test.py /.clang-format: -------------------------------------------------------------------------------- 1 | BasedOnStyle: Google 2 | Language: Cpp 3 | ColumnLimit: 0 4 | IndentWidth: 2 5 | TabWidth: 2 6 | UseTab: Never 7 | IndentPPDirectives: AfterHash 8 | ReflowComments: false 9 | SpacesBeforeTrailingComments: 1 10 | AlignConsecutiveMacros: true 11 | AlignTrailingComments: false 12 | AccessModifierOffset: -2 13 | DerivePointerAlignment: false 14 | PointerAlignment: Left 15 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | 5 | --- 6 | 7 | **Describe the bug** 8 | A clear and concise description of what the bug is. 9 | 10 | **To Reproduce** 11 | Steps to reproduce the behavior: 12 | 1. Data processed 13 | 2. Expected data 14 | 3. See error 15 | 16 | **Expected behavior** 17 | A clear and concise description of what you expected to happen. 18 | 19 | **Screenshots** 20 | If applicable, add screenshots to help explain your problem. 21 | 22 | **Environment (please complete the following information):** 23 | * version used (V0.9.3, 0.8, development) 24 | * Context of your project 25 | 26 | **Additional context** 27 | Add any other context about the problem here. 28 | 29 | * You should not have a compilation error if you use the versions of the libraries linked into the libraries folder, this badges show you the state of the compilation 30 | [![Build Status](https://github.com/theengs/decoder/workflows/Build/badge.svg?branch=development)](https://github.com/theengs/decoder/actions) 31 | * If you are not sure this is a bug or an enhancement post your question to the forum 32 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | 5 | --- 6 | 7 | **Is your feature request related to a problem? Please describe.** 8 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 9 | 10 | **Describe the solution you'd like** 11 | A clear and concise description of what you want to happen. 12 | 13 | **Describe alternatives you've considered** 14 | A clear and concise description of any alternative solutions or features you've considered. 15 | 16 | **Additional context** 17 | Add any other context or screenshots about the feature request here. 18 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | ## Description: 2 | 3 | 4 | ## Checklist: 5 | - [ ] The pull request is done against the latest development branch 6 | - [ ] Only one feature/fix was added per PR and the code change compiles without warnings 7 | - [ ] I accept the [DCO](https://github.com/theengs/decoder/blob/development/docs/participate/development.md#developer-certificate-of-origin). 8 | -------------------------------------------------------------------------------- /.github/workflows/manual_test-pypi.yml: -------------------------------------------------------------------------------- 1 | name: Publish to TestPyPI 2 | on: 3 | workflow_dispatch: 4 | jobs: 5 | build-n-publish: 6 | name: Build and publish distribution to TestPyPI 7 | runs-on: ubuntu-latest 8 | steps: 9 | - uses: actions/checkout@v4 10 | with: 11 | submodules: recursive 12 | fetch-depth: 0 # deep clone for setuptools-scm 13 | - uses: actions/setup-python@v4 14 | with: 15 | python-version: '3.11' 16 | - name: Install pypa/build 17 | run: | 18 | python3 -m pip install --upgrade pip 19 | pip3 install setuptools setuptools_scm cmake wheel scikit-build ninja 20 | - name: Build a source tarball 21 | run: | 22 | cd python 23 | cp -r ../src . 24 | python3 setup.py sdist 25 | - name: Publish distribution 📦 to Test PyPI 26 | uses: pypa/gh-action-pypi-publish@release/v1 27 | with: 28 | password: ${{ secrets.TEST_PYPI_API_TOKEN }} 29 | repository-url: https://test.pypi.org/legacy/ 30 | packages-dir: python/dist/ 31 | -------------------------------------------------------------------------------- /.github/workflows/publish.yml: -------------------------------------------------------------------------------- 1 | name: Publish to Pypi 2 | on: 3 | workflow_dispatch: 4 | release: 5 | types: [published] 6 | jobs: 7 | build-n-publish: 8 | name: Build and publish distributions to PyPI 9 | runs-on: ubuntu-latest 10 | steps: 11 | - uses: actions/checkout@v4 12 | with: 13 | submodules: recursive 14 | fetch-depth: 0 # deep clone for setuptools-scm 15 | - uses: actions/setup-python@v4 16 | with: 17 | python-version: "3.11" 18 | - name: Install pypa/build 19 | run: | 20 | python3 -m pip install --upgrade pip 21 | pip3 install setuptools setuptools_scm cmake wheel scikit-build ninja 22 | - name: Build distributions 23 | run: | 24 | cd python 25 | cp -r ../src . 26 | python3 setup.py sdist 27 | cd .. 28 | - name: Publish distribution 📦 to PyPI 29 | uses: pypa/gh-action-pypi-publish@release/v1 30 | with: 31 | password: ${{ secrets.PYPI_API_TOKEN }} 32 | packages-dir: python/dist/ 33 | -------------------------------------------------------------------------------- /.github/workflows/publish_docs.yml: -------------------------------------------------------------------------------- 1 | name: Create and publish documentation 2 | on: 3 | workflow_dispatch: 4 | release: 5 | types: [published] 6 | jobs: 7 | documentation: 8 | runs-on: ubuntu-latest 9 | name: Create the documentation and deploy it to GitHub Pages 10 | steps: 11 | - uses: actions/checkout@v4 12 | - name: Set up Node.js 13 | uses: actions/setup-node@v3 14 | with: 15 | node-version: "14.x" 16 | - name: Set up Python 17 | uses: actions/setup-python@v4 18 | with: 19 | python-version: "3.11" 20 | - name: Install build dependencies 21 | run: | 22 | python -m pip install --upgrade pip 23 | pip install requests pandas markdown pytablereader tabulate 24 | npm install 25 | - name: Download Common Config 26 | run: | 27 | curl -o docs/.vuepress/public/commonConfig.js https://www.theengs.io/commonConfig.js 28 | - name: Build documentation 29 | run: | 30 | npm run docs:build 31 | - name: Generate tables 32 | run: | 33 | cd docs/devices 34 | python generate_devices_tables.py 35 | - name: Deploy to GitHub Pages 36 | uses: peaceiris/actions-gh-pages@v3 37 | with: 38 | github_token: ${{ secrets.GITHUB_TOKEN }} 39 | publish_dir: ./docs/.vuepress/dist 40 | cname: decoder.theengs.io 41 | -------------------------------------------------------------------------------- /.github/workflows/stale.yml: -------------------------------------------------------------------------------- 1 | name: Close inactive issues or PR 2 | on: 3 | schedule: 4 | - cron: "30 0 * * *" 5 | 6 | jobs: 7 | close-issues: 8 | runs-on: ubuntu-latest 9 | permissions: 10 | issues: write 11 | pull-requests: write 12 | steps: 13 | - uses: actions/stale@v4.1.1 14 | with: 15 | days-before-issue-stale: 60 16 | days-before-issue-close: 14 17 | stale-issue-label: "stale" 18 | stale-issue-message: "This issue is stale because it has been open for 60 days with no activity." 19 | close-issue-message: "This issue was closed because it has been inactive for 14 days since being marked as stale." 20 | days-before-pr-stale: 60 21 | days-before-pr-close: 14 22 | repo-token: ${{ secrets.GITHUB_TOKEN }} 23 | exempt-issue-labels: "enhancement,bug" 24 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | /node_modules 3 | /CMakeFiles 4 | /decoder.dir 5 | /x64 6 | /TheengsDecoder.egg-info 7 | .vscode 8 | .pio 9 | .CMakeFiles 10 | .cmake 11 | _skbuild 12 | dist -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "src/arduino_json"] 2 | path = src/arduino_json 3 | url = https://github.com/bblanchon/ArduinoJson.git 4 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | pids 2 | logs 3 | node_modules 4 | npm-debug.log 5 | coverage/ 6 | run 7 | dist 8 | .DS_Store 9 | .nyc_output 10 | .basement 11 | config.local.js 12 | basement_dist 13 | -------------------------------------------------------------------------------- /.pre-commit-config.yaml: -------------------------------------------------------------------------------- 1 | repos: 2 | - repo: local 3 | hooks: 4 | - id: check-decoders 5 | name: check-decoders 6 | entry: python scripts/check_decoder.py 7 | language: python 8 | files: ^src\/devices\/.+.h$ 9 | -------------------------------------------------------------------------------- /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.10) 2 | 3 | project(decoder) 4 | 5 | if(SKBUILD) 6 | message(STATUS "The project is built using scikit-build") 7 | find_package(PythonExtensions REQUIRED) 8 | 9 | add_library(_decoder MODULE TheengsDecoder/_decoder.cpp src/decoder.cpp) 10 | 11 | python_extension_module(_decoder) 12 | 13 | target_include_directories(_decoder 14 | PUBLIC 15 | $ 16 | $ 17 | ${CMAKE_CURRENT_SOURCE_DIR}/src 18 | ) 19 | 20 | target_compile_features(_decoder PRIVATE cxx_std_11) 21 | install(TARGETS _decoder LIBRARY DESTINATION TheengsDecoder) 22 | 23 | else() 24 | 25 | add_library(decoder 26 | src/decoder.cpp 27 | src/decoder_c.cpp 28 | ) 29 | 30 | set_target_properties(decoder PROPERTIES 31 | PUBLIC_HEADER shared/theengs.h) 32 | 33 | target_include_directories(decoder 34 | PUBLIC 35 | $ 36 | $ 37 | ${CMAKE_CURRENT_SOURCE_DIR}/include 38 | ${CMAKE_CURRENT_SOURCE_DIR}/src 39 | ) 40 | 41 | target_compile_features(decoder PRIVATE cxx_std_11) 42 | 43 | if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME) 44 | include(CTest) 45 | endif() 46 | 47 | if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME AND BUILD_TESTING) 48 | include(tests/CompileOptions.cmake) 49 | add_subdirectory(tests) 50 | endif() 51 | 52 | endif() 53 | -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- 1 | include LICENSE 2 | include README.md 3 | include pyproject.toml 4 | include CMakeLists.txt 5 | recursive-include TheengsDecoder * 6 | recursive-include src * 7 | prune src/arduino_json/extras* 8 | prune src/arduino_json/examples* 9 | prune src/arduino_json/.* 10 | exclude MANIFEST.in 11 | -------------------------------------------------------------------------------- /docs/.vuepress/config.js: -------------------------------------------------------------------------------- 1 | const commonConfig = require('./public/commonConfig'); 2 | 3 | module.exports = { 4 | ...commonConfig, 5 | title: 'Theengs Decoder: BLE message decoder', 6 | themeConfig: { 7 | repo: 'theengs/decoder', 8 | ...commonConfig.themeConfig, 9 | sidebar: [ 10 | ['/','0 - What is it for 🏠'], 11 | { 12 | title: '1 - Use ✈️', // required 13 | sidebarDepth: 1, // optional, defaults to 1 14 | children: [ 15 | 'use/include', 16 | 'use/ESP32', 17 | 'use/python' 18 | ] 19 | }, 20 | { 21 | title: '2 - Participate 💻', // required 22 | sidebarDepth: 1, // optional, defaults to 1 23 | children: [ 24 | 'participate/adding-decoders', 25 | 'participate/support', 26 | 'participate/development' 27 | ] 28 | } 29 | ] 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /docs/.vuepress/public/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theengs/decoder/f8132ea019ba7aeb4d191b3a1f78d28912587c71/docs/.vuepress/public/apple-touch-icon.png -------------------------------------------------------------------------------- /docs/.vuepress/public/favicon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theengs/decoder/f8132ea019ba7aeb4d191b3a1f78d28912587c71/docs/.vuepress/public/favicon-144x144.png -------------------------------------------------------------------------------- /docs/.vuepress/public/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theengs/decoder/f8132ea019ba7aeb4d191b3a1f78d28912587c71/docs/.vuepress/public/favicon-16x16.png -------------------------------------------------------------------------------- /docs/.vuepress/public/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theengs/decoder/f8132ea019ba7aeb4d191b3a1f78d28912587c71/docs/.vuepress/public/favicon-32x32.png -------------------------------------------------------------------------------- /docs/.vuepress/styles/index.styl: -------------------------------------------------------------------------------- 1 | // index.styl 2 | div.table-generated-page 3 | main 4 | div.content__default, 5 | footer.page-edit, 6 | div.page-nav 7 | // Display full with the API pages 8 | max-width: 100% 9 | -------------------------------------------------------------------------------- /docs/devices/ABN03.md: -------------------------------------------------------------------------------- 1 | # April Brother N03 2 | 3 | |Model Id|[ABN03](https://github.com/theengs/decoder/blob/development/src/devices/ABN03_json.h)| 4 | |-|-| 5 | |Brand|April Brother| 6 | |Model|Sensor N03| 7 | |Short Description|Temperature, humidity and light sensor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|CR2450| 11 | |Exchanged Data|temperature, humidity, luminance, battery| 12 | |Encrypted|No| 13 | |Device Tracker|✅| 14 | -------------------------------------------------------------------------------- /docs/devices/ABN07.md: -------------------------------------------------------------------------------- 1 | # April Brother N07 2 | 3 | |Model Id|[ABN07](https://github.com/theengs/decoder/blob/development/src/devices/ABN07_json.h)| 4 | |-|-| 5 | |Brand|April Brother| 6 | |Model|Sensor N07| 7 | |Short Description|Temperature/humidity sensor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4GHz| 10 | |Power Source|CR2450| 11 | |Exchanged Data|temperature, humidity, battery, packet ID| 12 | |Encrypted|No| 13 | |Device Tracker|✅| 14 | 15 | Theengs Decoder supports firmware 4.0.1 and higher on the device. 16 | -------------------------------------------------------------------------------- /docs/devices/ABTemp.md: -------------------------------------------------------------------------------- 1 | # April Brother ABTemp 2 | 3 | |Model Id|[ABTemp](https://github.com/theengs/decoder/blob/development/src/devices/ABTemp_json.h)| 4 | |-|-| 5 | |Brand|April Brother| 6 | |Model|ABTemp| 7 | |Short Description|iBeacon with temperature sensor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|CR2450| 11 | |Exchanged Data|mfid, uuid, major, battery, temperature, txpower @ 1 m| 12 | |Encrypted|No| 13 | |Device Tracker|✅| 14 | -------------------------------------------------------------------------------- /docs/devices/Amazfit.md: -------------------------------------------------------------------------------- 1 | # Amazfit Smart Watch/Band 2 | 3 | |Model Id|[Amazfit](https://github.com/theengs/decoder/blob/development/src/devices/Miband_json.h)| 4 | |-|-| 5 | |Brand|Amazfit| 6 | |Model|Smart Watch/Band| 7 | |Short Description|Various Amazfit Smart Watch/Band models with step count and activity heart rate monitoring| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|Rechargeable battery| 11 | |Exchanged Data|steps, activity heart rate (when activated in the Zepp Life settings)| 12 | |Encrypted|No| 13 | |Device Tracker|✅| 14 | -------------------------------------------------------------------------------- /docs/devices/Amphiro.md: -------------------------------------------------------------------------------- 1 | # Amphiro/Oras/Hansa Hydractiva/Activejet Digital 2 | 3 | |Model Id|[ADHS](https://github.com/theengs/decoder/blob/development/src/devices/Amphiro_json.h)| 4 | |-|-| 5 | |Brand|Amphiro/Oras/Hansa| 6 | |Model|Hydractiva/Activejet Digital| 7 | |Short Description|Digital hand shower giving real-time feedback and statistics| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|Powered by the water flow| 11 | |Exchanged Data|session, duration, volume, temperature, energy| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/AppleAirPods.md: -------------------------------------------------------------------------------- 1 | # Apple AirPods (Pro) 2 | 3 | |Model Id|[APPLEAIRPODS](https://github.com/theengs/decoder/blob/development/src/devices/APPLEAIRPODS_json.h)| 4 | |-|-| 5 | |Brand|Apple| 6 | |Model|AirPods (Pro)| 7 | |Short Description|Various Apple AirPods (Pro) models| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|Rechargeable battery| 11 | |Exchanged Data|model version, color, status, (left, right, case) battery level*, (left, right, case) charging state| 12 | |Encrypted|No| 13 | |Device Tracker|✅| 14 | 15 | Currently only usefully working with the [Theengs Gateway](https://gateway.theengs.io/use/use.html#details-options) **Identity Address** and **IRK** functionality, to be able to decrypt the randomly changing Bluetooth MAC address to the static identity MAC address. 16 | 17 | Instructions on how to get the [Identity Address and IRK for an Apple Watch, iPhone, iPad or AirPods](https://gateway.theengs.io/use/use.html#getting-identity-resolving-key-irk-for-apple-watch-iphone-ipad-and-airpods) 18 | 19 | \* battery levels are only reported in 10% steps by the BLE broadcasts. 20 | 21 | Some model versions and statuses are not decoded correctly yet, due to the various models and generations. In such a case please report your device's MQTT message with the [PUBLISH_ADVDATA option](https://gateway.theengs.io/use/use.html#details-options) set to **true**. 22 | -------------------------------------------------------------------------------- /docs/devices/AppleDevice.md: -------------------------------------------------------------------------------- 1 | # Apple iPhone/iPad 2 | 3 | |Model Id|[APPLEDEVICE](https://github.com/theengs/decoder/blob/development/src/devices/APPLEDEVICE_json.h)| 4 | |-|-| 5 | |Brand|Apple| 6 | |Model|Apple iPhone/iPad| 7 | |Short Description|Various Apple iPhone/iPad models| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|Rechargeable battery| 11 | |Exchanged Data|unlocked| 12 | |Encrypted|No| 13 | |Device Tracker|✅| 14 | 15 | Currently only usefully working with the [Theengs Gateway](https://gateway.theengs.io/use/use.html#details-options) **Identity Address** and **IRK** functionality, to be able to decrypt the randomly changing Bluetooth MAC address to the static identity MAC address. 16 | 17 | Instructions on how to get the [Identity Address and IRK for an Apple Watch, iPhone or iPad](https://gateway.theengs.io/use/use.html#getting-identity-resolving-key-irk-for-apple-watch-iphone-ipad-and-airpods) 18 | -------------------------------------------------------------------------------- /docs/devices/AppleWatch.md: -------------------------------------------------------------------------------- 1 | # Apple Watch 2 | 3 | |Model Id|[APPLEWATCH](https://github.com/theengs/decoder/blob/development/src/devices/APPLEWATCH_json.h)| 4 | |-|-| 5 | |Brand|Apple| 6 | |Model|Apple Watch| 7 | |Short Description|Various Apple Watch models| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|Rechargeable battery| 11 | |Exchanged Data|unlocked| 12 | |Encrypted|No| 13 | |Device Tracker|✅| 14 | 15 | Currently only usefully working with the [Theengs Gateway](https://gateway.theengs.io/use/use.html#details-options) **Identity Address** and **IRK** functionality, to be able to decrypt the randomly changing Bluetooth MAC address to the static identity MAC address. 16 | 17 | Instructions on how to get the [Identity Address and IRK for an Apple Watch, iPhone or iPad](https://gateway.theengs.io/use/use.html#getting-identity-resolving-key-irk-for-apple-watch-iphone-ipad-and-airpods) 18 | -------------------------------------------------------------------------------- /docs/devices/Aranet4.md: -------------------------------------------------------------------------------- 1 | # Aranet Aranet4 CO₂ Monitor 2 | 3 | |Model Id|[ARANET4](https://github.com/theengs/decoder/blob/development/src/devices/ARANET4_json.h)| 4 | |-|-| 5 | |Brand|Aranet| 6 | |Model|Aranet4 CO₂ Monitor| 7 | |Short Description|Air quality monitor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|2 AA| 11 | |Exchanged Data|temperature, humidity, pressure, carbon dioxide, battery| 12 | |Encrypted|No - BLE broadcast only working when Bluetooth dip switch set to ON| 13 | -------------------------------------------------------------------------------- /docs/devices/BC08.md: -------------------------------------------------------------------------------- 1 | # BlueCharm Beacon 08/04P/021 - KKM K8/K4/K21 2 | 3 | |Model Id|[KSensor](https://github.com/theengs/decoder/blob/development/src/devices/BC08_json.h)| 4 | |-|-| 5 | |Brand|BlueCharm/KKM| 6 | |Model|Beacon 08/04P/021 - K8/K4/K21| 7 | |Short Description|Water-resistant (not the BC021/K21) MultiBeacon (KBeacon and iBeacon protocols supported)| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|CR2477| 11 | |Exchanged Data|temperature, acceleration x/y/z-axis, voltage| 12 | |Encrypted|No| 13 | |Device Tracker|✅| 14 | |Image|![BC021](./../img/BC021.png)| 15 | -------------------------------------------------------------------------------- /docs/devices/BM1in1.md: -------------------------------------------------------------------------------- 1 | # Blue Maestro Tempo Disc Temperature 2 | 3 | |Model Id|[TD1in1](https://github.com/theengs/decoder/blob/development/src/devices/BM1IN1_json.h)| 4 | |-|-| 5 | |Brand|BlueMaestro| 6 | |Model|Tempo Disc| 7 | |Short Description|Red temperature sensor, also available as IP67 waterproof| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|CR2032 (IP67 model non-changeable)| 11 | |Exchanged Data|temperature, battery| 12 | |Encrypted|No| 13 | |Device Tracker|✅| 14 | -------------------------------------------------------------------------------- /docs/devices/BM2.md: -------------------------------------------------------------------------------- 1 | # BM2 Battery Monitor 2 | 3 | |Model Id|[BM2](https://github.com/theengs/decoder/blob/development/src/devices/BM2_json.h)| 4 | |-|-| 5 | |Brand|GENERIC| 6 | |Model|BM2 Battery Monitor| 7 | |Short Description|Battery capacity| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|8V-16V or 6V-20V (depending on model)| 11 | |Exchanged Data|battery| 12 | |Encrypted|No| 13 | |Device Tracker|✅| 14 | |Image|![BM2](./../img/BM2.png)| 15 | -------------------------------------------------------------------------------- /docs/devices/BM3in1.md: -------------------------------------------------------------------------------- 1 | # Blue Maestro Tempo Disc 3 in 1 2 | 3 | |Model Id|[TD3in1](https://github.com/theengs/decoder/blob/development/src/devices/BM3IN1_json.h)| 4 | |-|-| 5 | |Brand|BlueMaestro| 6 | |Model|Tempo Disc| 7 | |Short Description|Blue temperature, humidity and dew point sensor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|CR2032| 11 | |Exchanged Data|temperature, humidity, dew point, battery| 12 | |Encrypted|No| 13 | |Device Tracker|✅| 14 | -------------------------------------------------------------------------------- /docs/devices/BM4in1.md: -------------------------------------------------------------------------------- 1 | # Blue Maestro Tempo Disc 4 in 1 2 | 3 | |Model Id|[TD4in1](https://github.com/theengs/decoder/blob/development/src/devices/BM4IN1_json.h)| 4 | |-|-| 5 | |Brand|BlueMaestro| 6 | |Model|Tempo Disc| 7 | |Short Description|Purple temperature, humidity, dew point and pressure sensor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|CR2032| 11 | |Exchanged Data|temperature, humidity, pressure, battery| 12 | |Encrypted|No| 13 | |Device Tracker|✅| 14 | -------------------------------------------------------------------------------- /docs/devices/BM6.md: -------------------------------------------------------------------------------- 1 | # BM6 Battery Monitor 2 | 3 | |Model Id|[BM6](https://github.com/theengs/decoder/blob/development/src/devices/BM6_json.h)| 4 | |-|-| 5 | |Brand|GENERIC| 6 | |Model|BM6 Battery Monitor| 7 | |Short Description|Battery capacity| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|6V-20V| 11 | |Exchanged Data|battery| 12 | |Encrypted|No| 13 | |Device Tracker|✅| 14 | -------------------------------------------------------------------------------- /docs/devices/BPARASITE.md: -------------------------------------------------------------------------------- 1 | # rbaron b-parasite 2 | 3 | |Model Id|[BPv1.0-1.2](https://github.com/theengs/decoder/blob/development/src/devices/BPARASITE_json.h)| 4 | |-|-| 5 | |Brand|rbaron| 6 | |Model|b-parasite| 7 | |Short Description|Open hardware and open source soil moisture and ambient temperature/humidity/light sensor https://github.com/rbaron/b-parasite| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|CR2032| 11 | |Exchanged Data|moisture, temperature, humidity, luminance (v1.1.0+), voltage| 12 | |Encrypted|No| 13 | |Image|![BPARASITE](./../img/BP.png)| 14 | -------------------------------------------------------------------------------- /docs/devices/BWBSDOO.md: -------------------------------------------------------------------------------- 1 | # Otio/BeeWi Smart Door & Window Sensor 2 | 3 | |Model Id|[BSDOO](https://github.com/theengs/decoder/blob/development/src/devices/BWBSDOO_json.h)| 4 | |-|-| 5 | |Brand|Otio/BeeWi| 6 | |Model|Door & Window Sensor| 7 | |Short Description|Contact sensor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|CR2032| 11 | |Exchanged Data|open, battery| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/BeatsBuds.md: -------------------------------------------------------------------------------- 1 | # Beats Solo/Studio Buds 2 | 3 | |Model Id|[BEATSBUDS](https://github.com/theengs/decoder/blob/development/src/devices/APPLEAIRPODS_json.h)| 4 | |-|-| 5 | |Brand|Beats| 6 | |Model|Solo/Studio Buds| 7 | |Short Description|Various Beats Solo/Studio Buds models| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|Rechargeable battery| 11 | |Exchanged Data|model version, color, status, (left, right, case) battery level*, (left, right, case) charging state| 12 | |Encrypted|No| 13 | |Device Tracker|✅| 14 | 15 | Currently only usefully working with the [Theengs Gateway](https://gateway.theengs.io/use/use.html#details-options) **Identity Address** and **IRK** functionality, to be able to decrypt the randomly changing Bluetooth MAC address to the static identity MAC address. 16 | 17 | Instructions on how to get the [Identity Address and IRK for an Apple Watch, iPhone, iPad or Beats Buds](https://gateway.theengs.io/use/use.html#getting-identity-resolving-key-irk-for-apple-watch-iphone-ipad-and-airpods) 18 | 19 | \* battery levels are only reported in 10% steps by the BLE broadcasts. 20 | 21 | Some model versions, colors and statuses are not decoded correctly yet, due to the various models, colors and generations. In such a case please report your device's MQTT message with the [PUBLISH_ADVDATA option](https://gateway.theengs.io/use/use.html#details-options) set to **true**. 22 | -------------------------------------------------------------------------------- /docs/devices/CGC1.md: -------------------------------------------------------------------------------- 1 | # ClearGrass/Qingping Alarm and Timer Clock CGC1 2 | 3 | |Model Id|[CGC1](https://github.com/theengs/decoder/blob/development/src/devices/CGD1_json.h)| 4 | |-|-| 5 | |Brand|ClearGrass/Qingping| 6 | |Model|Alarm Clock| 7 | |Short Description|Pink or beige alarm and timer clock with temperature and humidity sensors (device needs to be provisioned through the Qingping+ app)| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|CR2430| 11 | |Exchanged Data|temperature, humidity, battery| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/CGD1.md: -------------------------------------------------------------------------------- 1 | # ClearGrass/Qingping Alarm Clock CGD1 2 | 3 | |Model Id|[CGD1](https://github.com/theengs/decoder/blob/development/src/devices/CGD1_json.h)| 4 | |-|-| 5 | |Brand|ClearGrass/Qingping| 6 | |Model|Alarm Clock| 7 | |Short Description|Blue, green or white alarm clock with temperature and humidity sensors. Triggers a blue backlight when pressed (device needs to be provisioned through the Qingping+ app)| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|2 AA| 11 | |Exchanged Data|temperature, humidity, battery| 12 | |Encrypted|No| 13 | |Image|![CGD1](./../img/CGD1.png)| 14 | -------------------------------------------------------------------------------- /docs/devices/CGDK2.md: -------------------------------------------------------------------------------- 1 | # Qingping TH Lite CGDK2 2 | 3 | |Model Id|[CGDK2](https://github.com/theengs/decoder/blob/development/src/devices/CGDK2_json.h)| 4 | |-|-| 5 | |Brand|Qingping| 6 | |Model|TH Lite| 7 | |Short Description|Simple temperature and humidity sensor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|CR2430| 11 | |Exchanged Data|temperature, humidity, battery, voltage (depending on which CGDK2 firmware is installed)| 12 | |Encrypted|No| 13 | |Image|![CGDK2](./../img/CGDK2.png)| 14 | -------------------------------------------------------------------------------- /docs/devices/CGDN1.md: -------------------------------------------------------------------------------- 1 | # Qingping Air Monitor Lite 2 | 3 | |Model Id|[CGDN1](https://github.com/theengs/decoder/blob/development/src/devices/CGDN1_json.h)| 4 | |-|-| 5 | |Brand|Qingping| 6 | |Model|Air Monitor Lite| 7 | |Short Description|Air quality monitor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|Rechargeable battery, USB-C| 11 | |Exchanged Data|temperature, humidity, PM2.5, PM10, carbon dioxide| 12 | |Encrypted|No - BLE broadcast only working after being paired with a companion app| 13 | |Image|![CGDN1](./../img/CGDN1.png)| 14 | -------------------------------------------------------------------------------- /docs/devices/CGG1.md: -------------------------------------------------------------------------------- 1 | # ClearGrass/Qingping Hygro Thermometer CGG1 2 | 3 | |Model Id|[CGG1](https://github.com/theengs/decoder/blob/development/src/devices/CGG1_json.h)| 4 | |-|-| 5 | |Brand|ClearGrass/Qingping| 6 | |Model|Round Hygro Thermometer| 7 | |Short Description|Simple temperature and humidity sensor with e-ink display| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|CR2430| 11 | |Exchanged Data|temperature, humidity, battery, voltage (depending on which CGG1 firmware is installed)| 12 | |Encrypted|No| 13 | |Image|![CGG1](./../img/CGG1.png)| 14 | -------------------------------------------------------------------------------- /docs/devices/CGH1.md: -------------------------------------------------------------------------------- 1 | # Qingping Contact Sensor CGH1 2 | 3 | |Model Id|[CGH1](https://github.com/theengs/decoder/blob/development/src/devices/CGH1_json.h)| 4 | |-|-| 5 | |Brand|Qingping| 6 | |Model|Contact sensor| 7 | |Short Description|Door/Window contact sensor with Open-Close status| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|CR1632| 11 | |Exchanged Data|open| 12 | |Encrypted|No| 13 | |Image|![CGH1](./../img/CGH1.png)| 14 | -------------------------------------------------------------------------------- /docs/devices/CGP1W.md: -------------------------------------------------------------------------------- 1 | # ClearGrass/Qingping Weather Station CGP1W 2 | 3 | |Model Id|[CGP1W](https://github.com/theengs/decoder/blob/development/src/devices/CGP1W_json.h)| 4 | |-|-| 5 | |Brand|ClearGrass/Qingping| 6 | |Model|Weather Station| 7 | |Short Description|Rechargeable temperature, humidity and atmospheric pressure sensor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|Internal battery/USB| 11 | |Exchanged Data|temperature, humidity, atmospheric pressure, battery| 12 | |Encrypted|No| 13 | |Image|![CGP1W](./../img/CGP1W.png)| 14 | -------------------------------------------------------------------------------- /docs/devices/CGP22C.md: -------------------------------------------------------------------------------- 1 | # ClearGrass/Qingping Thermo-Hygrometer CO2 Detector CGP22C 2 | 3 | |Model Id|[CGP22C](https://github.com/theengs/decoder/blob/development/src/devices/CGP22C_json.h)| 4 | |-|-| 5 | |Brand|ClearGrass/Qingping| 6 | |Model|Thermo-Hygrometer CO2 Detector| 7 | |Short Description|Rechargeable temperature, humidity and carbon dioxide sensor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|Internal battery/USB-C| 11 | |Exchanged Data|temperature, humidity, carbon dioxide, battery| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/CGP23W.md: -------------------------------------------------------------------------------- 1 | # ClearGrass/Qingping Barometer Pro CGP23W 2 | 3 | |Model Id|[CGP23W](https://github.com/theengs/decoder/blob/development/src/devices/CGP23W_json.h)| 4 | |-|-| 5 | |Brand|ClearGrass/Qingping| 6 | |Model|Barometer Pro| 7 | |Short Description|Rechargeable temperature, humidity and atmospheric pressure sensor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|Internal battery/USB-C| 11 | |Exchanged Data|temperature, humidity, atmospheric pressure, battery| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/CGPR1.md: -------------------------------------------------------------------------------- 1 | # Qingping Motion & Light CGPR1 2 | 3 | |Model Id|[CGPR1](https://github.com/theengs/decoder/blob/development/src/devices/CGPR1_json.h)| 4 | |-|-| 5 | |Brand|Qingping| 6 | |Model|Motion & Light| 7 | |Short Description|Motion and ambient light sensor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|2 CR2450| 11 | |Exchanged Data|luminance, motion, battery| 12 | |Encrypted|No| 13 | |Image|![CGPR1](./../img/CGPR1.png)| 14 | -------------------------------------------------------------------------------- /docs/devices/Ecoflow.md: -------------------------------------------------------------------------------- 1 | # EcoFlow Power Station 2 | 3 | |Model Id|[ECOFLOW_ADV](https://github.com/theengs/decoder/blob/development/src/devices/ECOFLOW_ADV_json.h)| 4 | |-|-| 5 | |Brand|EcoFlow| 6 | |Model|Power Station| 7 | |Short Description|Various portable power station models| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|mains and internal battery| 11 | |Exchanged Data|model version, battery| 12 | |Encrypted|No| 13 | |Device Tracker|✅| 14 | -------------------------------------------------------------------------------- /docs/devices/FEASY.MD: -------------------------------------------------------------------------------- 1 | # Feasycom Bluetooth Beacon 2 | 3 | |Model Id|[FEASY](https://github.com/theengs/decoder/blob/development/src/devices/FEASY_json.h)| 4 | |-|-| 5 | |Brand|Feasycom| 6 | |Model|Bluetooth Beacon| 7 | |Short Description|Various types of Bluetooth beacons| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|different batteries depending on type or USB| 11 | |Exchanged Data|beacon model, battery, plugged-in (true for USB powered beacons)| 12 | |Encrypted|No| 13 | |Device Tracker|✅| 14 | -------------------------------------------------------------------------------- /docs/devices/H5055.md: -------------------------------------------------------------------------------- 1 | # Govee H5055 2 | 3 | |Model Id|[H5055](https://github.com/theengs/decoder/blob/development/src/devices/H5055_json.h)| 4 | |-|-| 5 | |Brand|Govee| 6 | |Model|Bluetooth BBQ Thermometer| 7 | |Short Description|Bluetooth BBQ Thermometer with 6 probes| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|2 AA| 11 | |Exchanged Data|temperature, battery| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/H5072.md: -------------------------------------------------------------------------------- 1 | # Govee H5072 2 | 3 | |Model Id|[H5072](https://github.com/theengs/decoder/blob/development/src/devices/H5072_json.h)| 4 | |-|-| 5 | |Brand|Govee| 6 | |Model|Thermo-Hygrometer| 7 | |Short Description|Indoor digital temperature and humidity monitor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|3 AAA| 11 | |Exchanged Data|temperature, humidity, battery| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/H5074.md: -------------------------------------------------------------------------------- 1 | # Govee H5074 2 | 3 | |Model Id|[H5074](https://github.com/theengs/decoder/blob/development/src/devices/H5074_json.h)| 4 | |-|-| 5 | |Brand|Govee| 6 | |Model|Smart Thermo-Hygrometer| 7 | |Short Description|Indoor digital temperature and humidity monitor with large LCD display| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|2 CR2477| 11 | |Exchanged Data|temperature, humidity, battery| 12 | |Encrypted|No| 13 | |Image|![H5074](./../img/H5074.png)| 14 | -------------------------------------------------------------------------------- /docs/devices/H5075.md: -------------------------------------------------------------------------------- 1 | # Govee H5075 2 | 3 | |Model Id|[H5075](https://github.com/theengs/decoder/blob/development/src/devices/H5072_json.h)| 4 | |-|-| 5 | |Brand|Govee| 6 | |Model|Thermo-Hygrometer| 7 | |Short Description|Indoor digital temperature and humidity monitor with large LCD display| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|2 AAA| 11 | |Exchanged Data|temperature, humidity, battery| 12 | |Encrypted|No| 13 | |Image|![H5075](./../img/H5075.png)| 14 | -------------------------------------------------------------------------------- /docs/devices/H5100.md: -------------------------------------------------------------------------------- 1 | # Govee H5100 2 | 3 | |Model Id|[H5100](https://github.com/theengs/decoder/blob/development/src/devices/H5102_json.h)| 4 | |-|-| 5 | |Brand|Govee| 6 | |Model|Smart Thermo Hygrometer| 7 | |Short Description|Mini Indoor Digital Humidity and Temperature monitor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|1 AAA| 11 | |Exchanged Data|temperature, humidity, battery| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/H5101.md: -------------------------------------------------------------------------------- 1 | # Govee H5101 2 | 3 | |Model Id|[H5101](https://github.com/theengs/decoder/blob/development/src/devices/H5102_json.h)| 4 | |-|-| 5 | |Brand|Govee| 6 | |Model|Smart Thermo-Hygrometer| 7 | |Short Description|Indoor digital temperature and humidity monitor with LCD display| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|CR2450| 11 | |Exchanged Data|temperature, humidity, battery| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/H5102.md: -------------------------------------------------------------------------------- 1 | # Govee H5102 2 | 3 | |Model Id|[H5102](https://github.com/theengs/decoder/blob/development/src/devices/H5102_json.h)| 4 | |-|-| 5 | |Brand|Govee| 6 | |Model|Smart Thermo-Hygrometer| 7 | |Short Description|Indoor digital temperature and humidity monitor with LCD display| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|2 AAA| 11 | |Exchanged Data|temperature, humidity, battery| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/H5104.md: -------------------------------------------------------------------------------- 1 | # Govee H5104 2 | 3 | |Model Id|[H5104](https://github.com/theengs/decoder/blob/development/src/devices/H5102_json.h)| 4 | |-|-| 5 | |Brand|Govee| 6 | |Model|Smart Thermo Hygrometer| 7 | |Short Description|Indoor Digital Humidity and Temperature monitor with LCD display| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|2 AAA| 11 | |Exchanged Data|temperature, humidity, battery| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/H5105.md: -------------------------------------------------------------------------------- 1 | # Govee H5105 2 | 3 | |Model Id|[H5105](https://github.com/theengs/decoder/blob/development/src/devices/H5102_json.h)| 4 | |-|-| 5 | |Brand|Govee| 6 | |Model|Smart Thermo Hygrometer| 7 | |Short Description|Indoor Digital Humidity and Temperature monitor with LCD display| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|CR2450| 11 | |Exchanged Data|temperature, humidity, battery| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/H5106.md: -------------------------------------------------------------------------------- 1 | # Govee H5106 2 | 3 | |Model Id|[H5106](https://github.com/theengs/decoder/blob/development/src/devices/H5106_json.h)| 4 | |-|-| 5 | |Brand|Govee| 6 | |Model|Smart Air Quality Monitor| 7 | |Short Description|Air quality monitor with temperature, humidity and PM2.5| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|USB-C| 11 | |Exchanged Data|temperature, humidity, PM2.5| 12 | |Encrypted|No| 13 | |Image|![H5106](./../img/H5106.png)| 14 | -------------------------------------------------------------------------------- /docs/devices/H5108.md: -------------------------------------------------------------------------------- 1 | # Govee H5108 2 | 3 | |Model Id|[H5108](https://github.com/theengs/decoder/blob/development/src/devices/H5102_json.h)| 4 | |-|-| 5 | |Brand|Govee| 6 | |Model|Smart Probe Thermometer| 7 | |Short Description|Smart Probe Temperature monitor with LCD display| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|2 AAA| 11 | |Exchanged Data|temperature, battery| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/H5174.md: -------------------------------------------------------------------------------- 1 | # Govee H5174 2 | 3 | |Model Id|[H5174](https://github.com/theengs/decoder/blob/development/src/devices/H5102_json.h)| 4 | |-|-| 5 | |Brand|Govee| 6 | |Model|Smart Thermo-Hygrometer| 7 | |Short Description|Indoor digital temperature and humidity sensor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|3 AAA| 11 | |Exchanged Data|temperature, humidity, battery| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/H5177.md: -------------------------------------------------------------------------------- 1 | # Govee H5177 2 | 3 | |Model Id|[H5177](https://github.com/theengs/decoder/blob/development/src/devices/H5102_json.h)| 4 | |-|-| 5 | |Brand|Govee| 6 | |Model|Thermo-Hygrometer| 7 | |Short Description|Indoor digital temperature and humidity monitor with LCD display| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|3 AAA| 11 | |Exchanged Data|temperature, humidity, battery| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/H5179.md: -------------------------------------------------------------------------------- 1 | # Govee H5179 2 | 3 | |Model Id|[H5179](https://github.com/theengs/decoder/blob/development/src/devices/H5179_json.h)| 4 | |-|-| 5 | |Brand|Govee| 6 | |Model|Smart Thermo-Hygrometer| 7 | |Short Description|Temperature and humidity sensor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|3 AA| 11 | |Exchanged Data|temperature, humidity, battery| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/HHCCJCY01HHCC.md: -------------------------------------------------------------------------------- 1 | # Xiaomi/VegTrug Mi Flora 2 | 3 | |Model Id|[HHCCJCY01HHCC](https://github.com/theengs/decoder/blob/development/src/devices/HHCCJCY01HHCC_json.h)| 4 | |-|-| 5 | |Brand|Xiaomi/VegTrug| 6 | |Model|MiFlora| 7 | |Short Description|Moisture, light, temperature and fertility sensor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|CR2032| 11 | |Exchanged Data|temperature, moisture, fertility, luminance| 12 | |Encrypted|No| 13 | |Image|![HHCCJCY01HHCC](./../img/HHCCJCY01HHCC.png)| 14 | -------------------------------------------------------------------------------- /docs/devices/HHCCJCY10.md: -------------------------------------------------------------------------------- 1 | # Xiaomi Mi Flora (pink version) 2 | 3 | |Model Id|[HHCCJCY10](https://github.com/theengs/decoder/blob/development/src/devices/HHCCJCY10_json.h)| 4 | |-|-| 5 | |Brand|Xiaomi| 6 | |Model|MiFlora| 7 | |Short Description|Temperature, moisture, light and fertility sensor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|CR2032| 11 | |Exchanged Data|temperature, moisture, luminance, fertility, battery| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/HHCCPOT002.md: -------------------------------------------------------------------------------- 1 | # Xiaomi RoPot 2 | 3 | |Model Id|[HHCCPOT002](https://github.com/theengs/decoder/blob/development/src/devices/HHCCPOT002_json.h)| 4 | |-|-| 5 | |Brand|Xiaomi| 6 | |Model|RoPot| 7 | |Short Description|Moisture, temperature and fertility sensor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|Rechargeable battery, USB| 11 | |Exchanged Data|moisture, fertility| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/HOBOMX2001.md: -------------------------------------------------------------------------------- 1 | # Onset Hobo Water Level Sensor 2 | 3 | |Model Id|[MX2001](https://github.com/theengs/decoder/blob/development/src/devices/HOBOMX2001_json.h)| 4 | |-|-| 5 | |Brand|Onset| 6 | |Model|Hobo Water Level Sensor| 7 | |Short Description|Water Tank level sensor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|2 AA| 11 | |Exchanged Data|level| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/IBS-P01B.md: -------------------------------------------------------------------------------- 1 | # Inkbird P01B 2 | 3 | |Model Id|[IBS-P01B](https://github.com/theengs/decoder/blob/development/src/devices/IBS_THBP01B_json.h)| 4 | |-|-| 5 | |Brand|Inkbird| 6 | |Model|Pool Thermometer| 7 | |Short Description|Pool temperature sensor IPX7| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|2 AA| 11 | |Exchanged Data|temperature, battery| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/IBS_TH1.md: -------------------------------------------------------------------------------- 1 | # Inkbird TH1 2 | 3 | |Model Id|[IBS-TH1](https://github.com/theengs/decoder/blob/development/src/devices/IBS_THBP01B_json.h)| 4 | |-|-| 5 | |Brand|Inkbird| 6 | |Model|Thermometer Hygrometer| 7 | |Short Description|Temperature and humidity sensor (also mini and Plus models) with external probe (not mini)| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|1 AAA| 11 | |Exchanged Data|temperature, humidity, battery| 12 | |Encrypted|No| 13 | |Image|![IBS-TH1](./../img/IBS-TH1.png)| 14 | -------------------------------------------------------------------------------- /docs/devices/IBS_TH2.md: -------------------------------------------------------------------------------- 1 | # Inkbird TH2 2 | 3 | |Model Id|[IBS-TH2](https://github.com/theengs/decoder/blob/development/src/devices/IBS_THBP01B_json.h)| 4 | |-|-| 5 | |Brand|Inkbird| 6 | |Model|Thermometer Hygrometer| 7 | |Short Description|Temperature and humidity (not for all models) sensor (also Plus model with external probe)| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|2 AAA/AA| 11 | |Exchanged Data|temperature, humidity, battery| 12 | |Encrypted|No| 13 | |Image|![IBS-TH2](./../img/IBS-TH2.png)| 14 | -------------------------------------------------------------------------------- /docs/devices/IBT_2X.md: -------------------------------------------------------------------------------- 1 | # Inkbird 2X(S) BBQ 2 | 3 | |Model Id|[IBT_2X(S)](https://github.com/theengs/decoder/blob/development/src/devices/IBT_2X_json.h)| 4 | |-|-| 5 | |Brand|Inkbird| 6 | |Model|BBQ Temperature sensor| 7 | |Short Description|BBQ Temperature sensor with 2 probes| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|2 AAA (Rechargeable battery, USB)| 11 | |Exchanged Data|temperature, temperature2| 12 | |Encrypted|No| 13 | |Image|![IBT_2X(S)](./../img/IBT_2X.png)| 14 | -------------------------------------------------------------------------------- /docs/devices/IBT_4XS.md: -------------------------------------------------------------------------------- 1 | # Inkbird 4X(S/C) BBQ 2 | 3 | |Model Id|[IBT_4X(S/C)](https://github.com/theengs/decoder/blob/development/src/devices/IBT_4XS_json.h)| 4 | |-|-| 5 | |Brand|Inkbird| 6 | |Model|BBQ Temperature sensor| 7 | |Short Description|BBQ Temperature sensor with 4 probes| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|Rechargeable battery, USB| 11 | |Exchanged Data|temperature, temperature2, temperature3, temperature4| 12 | |Encrypted|No| 13 | |Image|![IBT_4X](./../img/IBT_4X.png)| 14 | -------------------------------------------------------------------------------- /docs/devices/IBT_6XS.md: -------------------------------------------------------------------------------- 1 | # Inkbird 6X(S) BBQ 2 | 3 | |Model Id|[IBT_6X(S)](https://github.com/theengs/decoder/blob/development/src/devices/IBT_6XS_SOLIS6_json.h)| 4 | |-|-| 5 | |Brand|Inkbird| 6 | |Model|BBQ Temperature sensor| 7 | |Short Description|BBQ Temperature sensor with 6 probes| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|2 AAA (Rechargeable battery, USB)| 11 | |Exchanged Data|temperature, temperature2, temperature3, temperature4, temperature5, temperature6| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/ITH_12S.md: -------------------------------------------------------------------------------- 1 | # Inkbird ITH-12S 2 | 3 | |Model Id|[ITH-12S](https://github.com/theengs/decoder/blob/development/src/devices/IBS_THBP01B_json.h)| 4 | |-|-| 5 | |Brand|Inkbird| 6 | |Model|Thermometer Hygrometer| 7 | |Short Description|Temperature and humidity sensor with display| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|CR2032| 11 | |Exchanged Data|temperature, humidity, battery| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/JAALEE.md: -------------------------------------------------------------------------------- 1 | # Jaalee TH sensor F525/F51C 2 | 3 | |Model Id|[F525/F51C](https://github.com/theengs/decoder/blob/development/src/devices/JAALEE_json.h)| 4 | |-|-| 5 | |Brand|Jaalee| 6 | |Model|TH sensor| 7 | |Short Description|Temperature and humidity sensor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|CR2477| 11 | |Exchanged Data|temperature, humidity, battery| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/JQJCY01YM.md: -------------------------------------------------------------------------------- 1 | # Xiaomi Formaldehyde detector 2 | 3 | |Model Id|[JQJCY01YM](https://github.com/theengs/decoder/blob/development/src/devices/JQJCY01YM_json.h)| 4 | |-|-| 5 | |Brand|Xiaomi| 6 | |Model|Formaldehyde detector| 7 | |Short Description|Honeywell formaldehyde monitor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|2 AA| 11 | |Exchanged Data|formaldehyde, temperature, humidity, battery| 12 | |Encrypted|No| 13 | |Image|![JQJCY01YM](./../img/JQJCY01YM.png)| 14 | -------------------------------------------------------------------------------- /docs/devices/KKM_K6P.md: -------------------------------------------------------------------------------- 1 | # KKM Long Range Beacon K6P 2 | 3 | |Model Id|[K6P](https://github.com/theengs/decoder/blob/development/src/devices/KKM_K6P_json.h)| 4 | |-|-| 5 | |Brand|KKM| 6 | |Model|Long Range K6P| 7 | |Short Description|Long Range Sensor Beacon| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|ER14505| 11 | |Exchanged Data|temperature, humidity, voltage| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/KKM_K9.md: -------------------------------------------------------------------------------- 1 | # KKM Tracking Beacon K9 2 | 3 | |Model Id|[K9](https://github.com/theengs/decoder/blob/development/src/devices/KKM_K9_json.h)| 4 | |-|-| 5 | |Brand|KKM| 6 | |Model|Tracking K9| 7 | |Short Description|Pallet Tracking Beacon| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|ER14505| 11 | |Exchanged Data|temperature, humidity, voltage, acceleration x/y/z-axis (optional - without recognised as K6P)| 12 | |Encrypted|No| 13 | |Device Tracker|✅| 14 | -------------------------------------------------------------------------------- /docs/devices/LYWSD02.md: -------------------------------------------------------------------------------- 1 | # Xiaomi/Mijia LYWSD02 e-ink Clock 2 | 3 | |Model Id|[LYWSD02](https://github.com/theengs/decoder/blob/development/src/devices/LYWSD02_json.h)| 4 | |-|-| 5 | |Brand|Xiaomi/Mijia| 6 | |Model|e-ink Clock| 7 | |Short Description|Rectangular clock with e-ink display and temperature/humidity measurement| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|2 CR2032| 11 | |Exchanged Data|temperature, humidity, battery| 12 | |Encrypted|No| 13 | |Image|![LYWSD02MMC](./../img/LYWSD02MMC.png)| 14 | -------------------------------------------------------------------------------- /docs/devices/LYWSD03MMC.md: -------------------------------------------------------------------------------- 1 | # Xiaomi LYWSD03MMC ATC or PVVX firmware 2 | 3 | 4 | |Model Id|[LYWSD03MMC_ATC/PVVX](https://github.com/theengs/decoder/blob/development/src/devices/LYWSD03MMC_json.h)| 5 | |-|-| 6 | |Brand|Xiaomi| 7 | |Model|Compact Temperature sensor| 8 | |Short Description|Temperature and humidity sensor compact and cost effective with ATC or PVVX firmware| 9 | |Communication|BLE broadcast| 10 | |Frequency|2.4Ghz| 11 | |Power Source|CR2032| 12 | |Exchanged Data|temperature, humidity, battery, voltage (depending on which LYWSD03MMC firmware is installed)| 13 | |Encrypted|Yes/No - Optional| 14 | |Image|![LYWSD03MMC](./../img/LYWSD03MMC.png)| 15 | -------------------------------------------------------------------------------- /docs/devices/LYWSDCGQ.md: -------------------------------------------------------------------------------- 1 | # Xiaomi LYWSDCGQ 2 | 3 | |Model Id|[LYWSDCGQ](https://github.com/theengs/decoder/blob/development/src/devices/LYWSDCGQ_json.h)| 4 | |-|-| 5 | |Brand|Xiaomi| 6 | |Model|Mi Jia| 7 | |Short Description|Round Temperature and humidity sensor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|1 AAA| 11 | |Exchanged Data|temperature, humidity, battery| 12 | |Encrypted|No| 13 | |Image|![LYWSDCGQ](./../img/LYWSDCGQ.png)| 14 | -------------------------------------------------------------------------------- /docs/devices/MBXPRO.md: -------------------------------------------------------------------------------- 1 | # MokoSmart Pro 2 | 3 | |Model Id|[MBXPRO](https://github.com/theengs/decoder/blob/development/src/devices/MBXPRO_json.h)| 4 | |-|-| 5 | |Brand|MOKOSMART| 6 | |Model|H4| 7 | |Short Description|IP66 Waterproof temperature and humidity sensor with accelerometer| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|2 AAA| 11 | |Exchanged Data|temperature, humidity, acceleration x/y/z-axis, volt| 12 | |Encrypted|No| 13 | |Device Tracker|✅| 14 | |Image|![H4](./../img/H4.png)| 15 | -------------------------------------------------------------------------------- /docs/devices/MHO-C401.md: -------------------------------------------------------------------------------- 1 | # Xiaomi MHO-C401/MMC-C401 ATC or PVVX firmware 2 | 3 | |Model Id|[MHO/MMC-C401_ATC/PVVX](https://github.com/theengs/decoder/blob/development/src/devices/LYWSD03MMC_json.h)| 4 | |-|-| 5 | |Brand|Xiaomi| 6 | |Model|Compact Temperature sensor| 7 | |Short Description|Temperature and humidity sensor compact and cost effective with ATC or PVVX firmware| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|CR2032| 11 | |Exchanged Data|temperature, humidity, battery, volt| 12 | |Encrypted|No| 13 | |Image|![MHO-C401](./../img/MHO-C401.png)| 14 | -------------------------------------------------------------------------------- /docs/devices/MJWSD05MMC.md: -------------------------------------------------------------------------------- 1 | # Xiaomi MJWSD05MMC ATC or PVVX firmware 2 | 3 | |Model Id|[MJWSD05MMC_ATC/PVVX](https://github.com/theengs/decoder/blob/development/src/devices/LYWSD03MMC_json.h)| 4 | |-|-| 5 | |Brand|Xiaomi| 6 | |Model|Compact Temperature sensor| 7 | |Short Description|Temperature and humidity sensor also showing date and time with ATC or PVVX firmware| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|CR2450| 11 | |Exchanged Data|temperature, humidity, battery, volt| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/MUE4094RT.md: -------------------------------------------------------------------------------- 1 | # Xiaomi Motion sensor and light 2 | 3 | |Model Id|[MUE4094RT](https://github.com/theengs/decoder/blob/development/src/devices/MUE4094RT_json.h)| 4 | |-|-| 5 | |Brand|Xiaomi| 6 | |Model|Motion and Light| 7 | |Short Description|Motion sensor and ambient light| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|AA| 11 | |Exchanged Data|darkness, motion| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/Miband.md: -------------------------------------------------------------------------------- 1 | # Xiaomi Mi Band 2 | 3 | |Model Id|[MiBand](https://github.com/theengs/decoder/blob/development/src/devices/Miband_json.h)| 4 | |-|-| 5 | |Brand|Xiaomi| 6 | |Model|Mi Band| 7 | |Short Description|Fitness band with step count and activity heart rate monitoring| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|Rechargeable battery| 11 | |Exchanged Data|steps (*), activity heart rate (when activated in the Zepp Life settings)| 12 | |Encrypted|No| 13 | |Device Tracker|✅| 14 | |Image|![MiBand](./../img/MiBand.png)| 15 | 16 | (*) Starting with Mi Band 7 the steps don't seem to be freely broadcast any longer so that only the activity heart rate is available. -------------------------------------------------------------------------------- /docs/devices/Mikrotik.md: -------------------------------------------------------------------------------- 1 | # MikroTik TG-BT5-IN & TG-BT5-OUT 2 | 3 | |Model Id|[TG-BT5](https://github.com/theengs/decoder/blob/development/src/devices/Mikrotik_json.h)| 4 | |-|-| 5 | |Brand|MikroTik| 6 | |Model|TG-BT5-IN/-OUT| 7 | |Short Description|Indoor & Outdoor temperature and acceleration sensors| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|built-in non-replaceable battery| 11 | |Exchanged Data|temperature, acceleration x/y/z-axis, uptime, battery| 12 | |Encrypted|No - Currently only unencrypted devices are supported| 13 | |Device Tracker|✅| 14 | -------------------------------------------------------------------------------- /docs/devices/MokoBeacon.md: -------------------------------------------------------------------------------- 1 | # MokoSmart Beacon 2 | 3 | |Model Id|[MokoBeacon](https://github.com/theengs/decoder/blob/development/src/devices/Mokobeacon_json.h)| 4 | |-|-| 5 | |Brand|MOKOSMART| 6 | |Model|Beacon| 7 | |Short Description|MokoBeacon protocol| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|CR2032| 11 | |Exchanged Data|acceleration x/y/z-axis, battery| 12 | |Encrypted|No| 13 | |Device Tracker|✅| 14 | |Image|![M2](./../img/M2.png)| 15 | -------------------------------------------------------------------------------- /docs/devices/Mopeka.md: -------------------------------------------------------------------------------- 1 | # Mopeka/Lippert Pro Check (Universal)/BottleCheck Sensor 2 | 3 | |Model Id|[M1017](https://github.com/theengs/decoder/blob/development/src/devices/Mopeka_json.h)| 4 | |-|-| 5 | |Brand|Mopeka/Lippert| 6 | |Model|Pro Check (Universal)/BottleCheck Sensor| 7 | |Short Description|Ultrasonic LPG Tank level sensor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|CR2032| 11 | |Exchanged Data|temperature, level, sync status, voltage, battery, reading quality, acceleration x/y-axis| 12 | |Encrypted|No| 13 | |Image|![M1017](./../img/M1017.png)| 14 | -------------------------------------------------------------------------------- /docs/devices/NODONNIU.md: -------------------------------------------------------------------------------- 1 | # NodOn NIU smart button 2 | 3 | |Model Id|[NODONNIU](https://github.com/theengs/decoder/blob/development/src/devices/NODONNIU_json.h)| 4 | |-|-| 5 | |Brand|NodOn| 6 | |Model|NIU smart button| 7 | |Short Description|Bluetooth smart button| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|CR2032| 11 | |Exchanged Data|button press type, color, battery| 12 | |Encrypted|No| 13 | |Device Tracker|✅| 14 | 15 | The button press type is encoded as: 16 | 17 | * 1 - Single short click 18 | * 2 - Double click 19 | * 3 - Triple click 20 | * 4 - Quadruple click 21 | * 5 - Quintuple click 22 | * 9 - Long press 23 | * 10 - Button release 24 | -------------------------------------------------------------------------------- /docs/devices/ORALB.md: -------------------------------------------------------------------------------- 1 | # Oral-B Bluetooth Toothbrush 2 | 3 | |Model Id|[ORALB_BT](https://github.com/theengs/decoder/blob/development/src/devices/OralB_json.h)| 4 | |-|-| 5 | |Brand|Oral-B| 6 | |Model|BT Toothbrush| 7 | |Short Description|Various Bluetooth connected toothbrush models| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|Rechargeable battery| 11 | |Exchanged Data|state, mode, sector, pressure, duration| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/ORAS.md: -------------------------------------------------------------------------------- 1 | # Amphiro/Oras/Hansa Smart Faucet 2 | 3 | |Model Id|[ORAS](https://github.com/theengs/decoder/blob/development/src/devices/Oras_json.h)| 4 | |-|-| 5 | |Brand|Amphiro/Oras/Hansa| 6 | |Model|Smart Faucet| 7 | |Short Description|Bluetooth Faucet| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|Battery or mains| 11 | |Exchanged Data|serial number, battery| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/OTOD.md: -------------------------------------------------------------------------------- 1 | # Otodata RC1010 Rotarex-compatible Monitor 2 | 3 | |Model Id|[RC1010](https://github.com/theengs/decoder/blob/development/src/devices/OTOD_json.h)| 4 | |-|-| 5 | |Brand|Otodata| 6 | |Model|RC1010 Rotarex-compatible Monitor| 7 | |Short Description|BLE monitor for Rotarex Level Gauges| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|sealed in non-changeable| 11 | |Exchanged Data|level, status, serial, model type| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/PH10.md: -------------------------------------------------------------------------------- 1 | # Polar H10 Heart Rate Sensor 2 | 3 | |Model Id|[H10](https://github.com/theengs/decoder/blob/development/src/devices/PH10_json.h)| 4 | |-|-| 5 | |Brand|Polar| 6 | |Model|Heart Rate Sensor| 7 | |Short Description|Chest strap heart rate sensor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|CR2025| 11 | |Exchanged Data|heart rate| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/RDL52832.md: -------------------------------------------------------------------------------- 1 | # RDL52832 2 | 3 | |Model Id|[RDL52832](https://github.com/theengs/decoder/blob/development/src/devices/RDL52832_json.h)| 4 | |-|-| 5 | |Brand|Radioland| 6 | |Model|RDL52832| 7 | |Short Description|iBeacon with sensors| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|CR2032| 11 | |Exchanged Data|mfid, uuid, minor, major, txpower @ 1 m, temperature, humidity, acceleration x/y/z-axis| 12 | |Encrypted|No| 13 | |Device Tracker|✅| 14 | -------------------------------------------------------------------------------- /docs/devices/RuuviTag_RAWv1.md: -------------------------------------------------------------------------------- 1 | # RuuviTag (RAWv1 data format) 2 | 3 | |Model Id|[RuuviTag_RAWv1](https://github.com/theengs/decoder/blob/development/src/devices/RuuviTag_RAWv1_json.h)| 4 | |-|-| 5 | |Brand|Ruuvi| 6 | |Model|RuuviTag| 7 | |Short Description| Open source environmental sensor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|CR2477| 11 | |Exchanged Data|temperature, humidity, pressure, acceleration x/y/z-axis, voltage| 12 | |Encrypted|No| 13 | |Device Tracker|✅| 14 | -------------------------------------------------------------------------------- /docs/devices/RuuviTag_RAWv2.md: -------------------------------------------------------------------------------- 1 | # RuuviTag (RAWv2 data format) 2 | 3 | |Model Id|[RuuviTag_RAWv2](https://github.com/theengs/decoder/blob/development/src/devices/RuuviTag_RAWv2_json.h)| 4 | |-|-| 5 | |Brand|Ruuvi| 6 | |Model|RuuviTag| 7 | |Short Description| Open source environmental sensor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|CR2477| 11 | |Exchanged Data|temperature, humidity, pressure, acceleration x/y/z-axis, voltage, TX power, movement counter, measurement sequence number| 12 | |Encrypted|No| 13 | |Device Tracker|✅| 14 | -------------------------------------------------------------------------------- /docs/devices/SBBT-002C.md: -------------------------------------------------------------------------------- 1 | # ShellyBLU Button1 2 | 3 | |Model Id|[SBBT-002C](https://github.com/theengs/decoder/blob/development/src/devices/SBBT_002C_json.h)| 4 | |-|-| 5 | |Brand|Shelly| 6 | |Model|ShellyBLU Button1| 7 | |Short Description|Button| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|CR2032| 11 | |Exchanged Data|button press type, battery, packet ID| 12 | |Encrypted|Yes/No - Optional| 13 | 14 | The button press type is encoded as: 15 | 16 | * 0 - None (sent every 8 seconds if beacon mode is enabled) 17 | * 1 - Single short click 18 | * 2 - Double click 19 | * 3 - Triple click 20 | * 9 - Long press 21 | * 11 - Button hold 22 | -------------------------------------------------------------------------------- /docs/devices/SBBT-004CEU.md: -------------------------------------------------------------------------------- 1 | # ShellyBLU Wall Switcht4 2 | 3 | |Model Id|[SBBT-004CEU](https://github.com/theengs/decoder/blob/development/src/devices/SBBT_004CEU_US_json.h)| 4 | |-|-| 5 | |Brand|Shelly| 6 | |Model|ShellyBLU Wall Switch4| 7 | |Short Description|Button| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|CR2032| 11 | |Exchanged Data|button press type of each button, battery, packet ID| 12 | |Encrypted|No - Currently only unencrypted devices are supported| 13 | 14 | The button press type for each button is encoded as: 15 | 16 | * 0 - None (other Button was pressed or sent every 8 seconds if beacon mode is enabled) 17 | * 1 - Single short click 18 | * 2 - Double click 19 | * 3 - Triple click 20 | * 9 - Long press 21 | * 11 - Button hold 22 | -------------------------------------------------------------------------------- /docs/devices/SBBT-004CUS.md: -------------------------------------------------------------------------------- 1 | # ShellyBLU RC Button4 2 | 3 | |Model Id|[SBBT-004CUS](https://github.com/theengs/decoder/blob/development/src/devices/SBBT_004CEU_US_json.h)| 4 | |-|-| 5 | |Brand|Shelly| 6 | |Model|ShellyBLU RC Button4| 7 | |Short Description|Button| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|CR2032| 11 | |Exchanged Data|button press type of each button, battery, packet ID| 12 | |Encrypted|No - Currently only unencrypted devices are supported| 13 | 14 | The button press type for each button is encoded as: 15 | 16 | * 0 - None (other Button was pressed or sent every 8 seconds if beacon mode is enabled) 17 | * 1 - Single short click 18 | * 2 - Double click 19 | * 3 - Triple click 20 | * 9 - Long press 21 | * 11 - Button hold 22 | -------------------------------------------------------------------------------- /docs/devices/SBBT.md: -------------------------------------------------------------------------------- 1 | # SwitchBot Blind Tilt 2 | 3 | |Model Id|[W270160X](https://github.com/theengs/decoder/blob/development/src/devices/SBBT_json.h)| 4 | |-|-| 5 | |Brand|SwitchBot| 6 | |Model|W270160X| 7 | |Short Description|Venetian blind tilting actor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|Solar panel| 11 | |Exchanged Data|open, direction, motion, calibrated, light level, battery| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/SBCS.md: -------------------------------------------------------------------------------- 1 | # SwitchBot Contact Sensor 2 | 3 | |Model Id|[W120150X](https://github.com/theengs/decoder/blob/development/src/devices/SBCS_json.h)| 4 | |-|-| 5 | |Brand|SwitchBot| 6 | |Model|Contact Sensor| 7 | |Short Description|Contact sensor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|2 AAA| 11 | |Exchanged Data|contact, motion, light level, scope tested, in count, out count, push count, battery| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/SBCU.md: -------------------------------------------------------------------------------- 1 | # SwitchBot Curtain 2 | 3 | |Model Id|[W070160X](https://github.com/theengs/decoder/blob/development/src/devices/SBCU_json.h)| 4 | |-|-| 5 | |Brand|SwitchBot| 6 | |Model|Curtain (2/3)| 7 | |Short Description|Curtain motor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|Rechargeable battery| 11 | |Exchanged Data|moving, position, light level, battery, calibration state| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/SBDW-002C.md: -------------------------------------------------------------------------------- 1 | # ShellyBLU Door/Window 2 | 3 | |Model Id|[SBDW-002C](https://github.com/theengs/decoder/blob/development/src/devices/SBDW_002C_json.h)| 4 | |-|-| 5 | |Brand|Shelly| 6 | |Model|ShellyBLU Door/Window| 7 | |Short Description|Door/window contact sensor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|CR2032| 11 | |Exchanged Data|open, rotation, battery, packet ID| 12 | |Encrypted|Yes/No - Optional| 13 | -------------------------------------------------------------------------------- /docs/devices/SBHT-003C.md: -------------------------------------------------------------------------------- 1 | # ShellyBLU H&T 2 | 3 | |Model Id|[SBHT-003C](https://github.com/theengs/decoder/blob/development/src/devices/SBHT_003C_json.h)| 4 | |-|-| 5 | |Brand|Shelly| 6 | |Model|ShellyBLU H&T| 7 | |Short Description|Humidity and temperature sensor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|CR2032| 11 | |Exchanged Data|temperature, humidity, button press type, battery, packet ID| 12 | |Encrypted|Yes/No - Optional| 13 | 14 | The button press type is encoded as: 15 | 16 | * 1 - Single short click 17 | * 11 - Button hold 18 | -------------------------------------------------------------------------------- /docs/devices/SBMO-003Z.md: -------------------------------------------------------------------------------- 1 | # ShellyBLU Motion 2 | 3 | |Model Id|[SBMO-003Z](https://github.com/theengs/decoder/blob/development/src/devices/SBMO_003Z_json.h)| 4 | |-|-| 5 | |Brand|Shelly| 6 | |Model|ShellyBLU Motion| 7 | |Short Description|Motion sensor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|CR2477| 11 | |Exchanged Data|motion, illuminance, battery, packet ID| 12 | |Encrypted|Yes/No - Optional| 13 | -------------------------------------------------------------------------------- /docs/devices/SBMP.md: -------------------------------------------------------------------------------- 1 | # SwitchBot Meter Pro (CO2) 2 | 3 | |Model Id|[W490001X](https://github.com/theengs/decoder/blob/development/src/devices/SBMP_json.h)| 4 | |-|-| 5 | |Brand|SwitchBot| 6 | |Model|Meter Pro (CO2)| 7 | |Short Description|Thermo-Hygrometer and CO2 Monitor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|2 AA| 11 | |Exchanged Data|temperature, humidity, carbon dioxide, battery| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/SBMS.md: -------------------------------------------------------------------------------- 1 | # SwitchBot Motion Sensor 2 | 3 | |Model Id|[W110150X](https://github.com/theengs/decoder/blob/development/src/devices/SBMS_json.h)| 4 | |-|-| 5 | |Brand|SwitchBot| 6 | |Model|Motion Sensor| 7 | |Short Description|PIR Motion Sensor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|2 AAA| 11 | |Exchanged Data|motion, light level, sensing distance, led, scope tested, battery| 12 | |Encrypted|No| 13 | |Image|![W110150X](./../img/W110150X.png)| 14 | -------------------------------------------------------------------------------- /docs/devices/SBMT.md: -------------------------------------------------------------------------------- 1 | # SwitchBot Meter (Plus) 2 | 3 | |Model Id|[THX1(W230150X)](https://github.com/theengs/decoder/blob/development/src/devices/SBMT_json.h)| 4 | |-|-| 5 | |Brand|SwitchBot| 6 | |Model|Meter (Plus)| 7 | |Short Description|Thermometer and Hygrometer| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|2 AAA| 11 | |Exchanged Data|temperature, humidity, battery| 12 | |Encrypted|No| 13 | |Image|![THX1](./../img/THX1.png)| -------------------------------------------------------------------------------- /docs/devices/SBOT.md: -------------------------------------------------------------------------------- 1 | # SwitchBot Outdoor Meter 2 | 3 | |Model Id|[W340001X](https://github.com/theengs/decoder/blob/development/src/devices/SBOT_json.h)| 4 | |-|-| 5 | |Brand|SwitchBot| 6 | |Model|Outdoor Meter| 7 | |Short Description|Indoor/Outdoor Thermometer and Hygrometer| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|2 AAA| 11 | |Exchanged Data|temperature, humidity, battery| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/SBS1.md: -------------------------------------------------------------------------------- 1 | # SwitchBot Bot 2 | 3 | |Model Id|[X1](https://github.com/theengs/decoder/blob/development/src/devices/SBS1_json.h)| 4 | |-|-| 5 | |Brand|SwitchBot| 6 | |Model|Bot| 7 | |Short Description|Switch Button Pusher| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|1 CR2| 11 | |Exchanged Data|mode, state, battery| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/SCD4X.md: -------------------------------------------------------------------------------- 1 | # Sensirion MyCO₂/CO₂ Gadget SCD4X 2 | 3 | |Model Id|[SCD4X](https://github.com/theengs/decoder/blob/development/src/devices/SCD4X_json.h)| 4 | |-|-| 5 | |Brand|Sensirion| 6 | |Model|MyCO₂/CO₂ Gadget| 7 | |Short Description|Temperature, humidity and CO₂ sensor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|USB| 11 | |Exchanged Data|temperature, humidity, carbon dioxide| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/SDLS.md: -------------------------------------------------------------------------------- 1 | # SmartDry Laundry Sensor 2 | 3 | |Model Id|[SDLS](https://github.com/theengs/decoder/blob/development/src/devices/SmartDry_json.h)| 4 | |-|-| 5 | |Brand|SmartDry| 6 | |Model|Laundry Sensor| 7 | |Short Description|Wireless Laundry Sensor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|CR2032| 11 | |Exchanged Data|temperature, humidity, shake, voltage, wake| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/SE_MAG.md: -------------------------------------------------------------------------------- 1 | # Sensor Easy Door/Window sensor 2 | 3 | |Model Id|[SE_MAG](https://github.com/theengs/decoder/blob/development/src/devices/SE_MAG_json.h)| 4 | |-|-| 5 | |Brand|Sensor Easy| 6 | |Model|Sensor Easy Door/Window Pro| 7 | |Short Description|Indoor/Outdoor Magnetic sensor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|embedded| 11 | |Exchanged Data|open, battery, volt| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/SE_RHT_PRO.md: -------------------------------------------------------------------------------- 1 | # Sensor Easy Thermometer and Hygrometer Pro 2 | 3 | |Model Id|[SE_RHT](https://github.com/theengs/decoder/blob/development/src/devices/SE_RHT_json.h)| 4 | |-|-| 5 | |Brand|Sensor Easy| 6 | |Model|Sensor Easy Temperature and Humidity Pro| 7 | |Short Description|Indoor/Outdoor Thermometer| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|embedded| 11 | |Exchanged Data|temperature, humidity, battery, volt| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/SE_TEMP.md: -------------------------------------------------------------------------------- 1 | # Sensor Easy Thermometer 2 | 3 | |Model Id|[SE_TEMP](https://github.com/theengs/decoder/blob/development/src/devices/SE_TEMP_json.h)| 4 | |-|-| 5 | |Brand|Sensor Easy| 6 | |Model|Sensor Easy Temperature| 7 | |Short Description|Indoor/Outdoor Thermometer| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|embedded| 11 | |Exchanged Data|temperature, battery, volt| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/SE_TEMP_PRO.md: -------------------------------------------------------------------------------- 1 | # Sensor Easy Thermometer Pro 2 | 3 | |Model Id|[SE_TEMP_PRO](https://github.com/theengs/decoder/blob/development/src/devices/SE_TEMP_json.h)| 4 | |-|-| 5 | |Brand|Sensor Easy| 6 | |Model|Sensor Easy Temperature Pro| 7 | |Short Description|Indoor/Outdoor Thermometer| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|embedded| 11 | |Exchanged Data|temperature, battery, volt| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/SE_TPROBE.md: -------------------------------------------------------------------------------- 1 | # Sensor Easy Thermometer External Probe Pro 2 | 3 | |Model Id|[SE_TPROBE](https://github.com/theengs/decoder/blob/development/src/devices/SE_TPROBE_json.h)| 4 | |-|-| 5 | |Brand|Sensor Easy| 6 | |Model|Sensor Easy Temperature External Probe Pro| 7 | |Short Description|Indoor/Outdoor Thermometer| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|embedded| 11 | |Exchanged Data|temperature, battery, volt| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/SHT4x.md: -------------------------------------------------------------------------------- 1 | # Sensirion SHT4X Smart Gadget 2 | 3 | |Model Id|[SHT4X](https://github.com/theengs/decoder/blob/development/src/devices/SHT4X_json.h)| 4 | |-|-| 5 | |Brand|Sensirion| 6 | |Model|TH Sensor| 7 | |Short Description|Temperature and humidity sensor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|CR2032| 11 | |Exchanged Data|temperature, humidity| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/SOLIS_6.md: -------------------------------------------------------------------------------- 1 | # Tenergy SOLIS 6 BBQ 2 | 3 | |Model Id|[SOLIS_6](https://github.com/theengs/decoder/blob/development/src/devices/IBT_6XS_SOLIS6_json.h)| 4 | |-|-| 5 | |Brand|Ternergy| 6 | |Model|BBQ Temperature sensor| 7 | |Short Description|BBQ Temperature sensor with 6 probes| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|2 AA| 11 | |Exchanged Data|temperature, temperature2, temperature3, temperature4, temperature5, temperature6| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/SensorP_HT.md: -------------------------------------------------------------------------------- 1 | # SensorPush HT.w Smart Sensor 2 | 3 | |Model Id|[SPHT](https://github.com/theengs/decoder/blob/development/src/devices/SensorP_HT_json.h)| 4 | |-|-| 5 | |Brand|SensorPush| 6 | |Model|HT.w Smart Sensor| 7 | |Short Description|Water-resistant temperature and humidity sensor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|CR2477| 11 | |Exchanged Data|temperature, humidity| 12 | |Encrypted|No| 13 | |Device Tracker|✅| 14 | -------------------------------------------------------------------------------- /docs/devices/SensorP_HTP.md: -------------------------------------------------------------------------------- 1 | # SensorPush HTP.xw Smart Sensor 2 | 3 | |Model Id|[SPHTP](https://github.com/theengs/decoder/blob/development/src/devices/SensorP_HTP_json.h)| 4 | |-|-| 5 | |Brand|SensorPush| 6 | |Model|HTP.xw Smart Sensor| 7 | |Short Description|Water-resistant temperature, humidity and barometric pressure sensor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|CR2477| 11 | |Exchanged Data|temperature, humidity, pressure| 12 | |Encrypted|No| 13 | |Device Tracker|✅| 14 | -------------------------------------------------------------------------------- /docs/devices/ServiceData.md: -------------------------------------------------------------------------------- 1 | # Service data 2 | 3 | |Model Id|[ServiceData](https://github.com/theengs/decoder/blob/development/src/devices/ServiceData_json.h)| 4 | |-|-| 5 | |Brand|GENERIC| 6 | |Model|Service data| 7 | |Short Description|Various devices broadcasting service data for Bluetooth SIG service UUIDs| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|various| 11 | |Exchanged Data|battery| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/Skale.md: -------------------------------------------------------------------------------- 1 | # Atomax Skale I/II 2 | 3 | |Model Id|[SKALE](https://github.com/theengs/decoder/blob/development/src/devices/Skale_json.h)| 4 | |-|-| 5 | |Brand|Atomax| 6 | |Model|Skale I/II| 7 | |Short Description|Bluetooth kitchen scale| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|USB/4 AAA| 11 | |Exchanged Data|weight| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/T201.md: -------------------------------------------------------------------------------- 1 | # Oria/Brifit/SigmaWit/SensorPro T201 2 | 3 | |Model Id|[T201](https://github.com/theengs/decoder/blob/development/src/devices/T201_json.h)| 4 | |-|-| 5 | |Brand|Oria/Brifit/SigmaWit/SensorPro| 6 | |Model|TH sensor| 7 | |Short Description|Temperature and humidity sensor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|CR2450| 11 | |Exchanged Data|temperature, humidity, battery| 12 | |Encrypted|No| 13 | |Image|![T201](./../img/T201.png)| 14 | -------------------------------------------------------------------------------- /docs/devices/T301.md: -------------------------------------------------------------------------------- 1 | # Oria/Brifit/SigmaWit/SensorPro T301 2 | 3 | |Model Id|[T301](https://github.com/theengs/decoder/blob/development/src/devices/T301_json.h)| 4 | |-|-| 5 | |Brand|Oria/Brifit/SigmaWit/SensorPro| 6 | |Model|TH sensor| 7 | |Short Description|Temperature and humidity sensor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|2 CR2032| 11 | |Exchanged Data|temperature, humidity, battery| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/THB1.md: -------------------------------------------------------------------------------- 1 | # Tuya THB1 2 | 3 | 4 | |Model Id|[THB1](https://github.com/theengs/decoder/blob/development/src/devices/THB1_json.h)| 5 | |-|-| 6 | |Brand|Tuya| 7 | |Model|THB1 Thermo-Hygrometer| 8 | |Short Description|Temperature and humidity sensor with PVVX firmware| 9 | |Communication|BLE broadcast| 10 | |Frequency|2.4Ghz| 11 | |Power Source|CR2032| 12 | |Exchanged Data|temperature, humidity, battery, voltage| 13 | |Encrypted|No| 14 | -------------------------------------------------------------------------------- /docs/devices/TILT.md: -------------------------------------------------------------------------------- 1 | # Tilt Brewing Hydro- Thermometer 2 | 3 | |Model Id|[TILT](https://github.com/theengs/decoder/blob/development/src/devices/TILT_json.h)| 4 | |-|-| 5 | |Brand|Tilt| 6 | |Model|Brewing Hydro- Thermometer| 7 | |Short Description|Hydro- Thermometer for beer and cidre brewing| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|CR123A| 11 | |Exchanged Data|color, temperature, specific gravity, txpower @ 1 m| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/TP357.md: -------------------------------------------------------------------------------- 1 | # ThermoPro TP357 2 | 3 | |Model Id|[TP357](https://github.com/theengs/decoder/blob/development/src/devices/TPTH_json.h)| 4 | |-|-| 5 | |Brand|ThermoPro| 6 | |Model|TH sensor| 7 | |Short Description|Temperature and humidity sensor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|1 AAA| 11 | |Exchanged Data|temperature, humidity, battery| 12 | |Encrypted|No| 13 | |Image|![TP357](./../img/TP357.png)| 14 | -------------------------------------------------------------------------------- /docs/devices/TP358.md: -------------------------------------------------------------------------------- 1 | # ThermoPro TP358 2 | 3 | |Model Id|[TP358](https://github.com/theengs/decoder/blob/development/src/devices/TPTH_json.h)| 4 | |-|-| 5 | |Brand|ThermoPro| 6 | |Model|TH sensor| 7 | |Short Description|Temperature and humidity sensor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|2 AAA| 11 | |Exchanged Data|temperature, humidity, battery| 12 | |Encrypted|No| 13 | |Image|![TP358](./../img/TP358.png)| 14 | -------------------------------------------------------------------------------- /docs/devices/TP359.md: -------------------------------------------------------------------------------- 1 | # ThermoPro TP359 2 | 3 | |Model Id|[TP359](https://github.com/theengs/decoder/blob/development/src/devices/TPTH_json.h)| 4 | |-|-| 5 | |Brand|ThermoPro| 6 | |Model|TH sensor| 7 | |Short Description|Temperature and humidity sensor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|2 AAA| 11 | |Exchanged Data|temperature, humidity, battery| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/TP393.md: -------------------------------------------------------------------------------- 1 | # ThermoPro TP393 2 | 3 | |Model Id|[TP393](https://github.com/theengs/decoder/blob/development/src/devices/TPTH_json.h)| 4 | |-|-| 5 | |Brand|ThermoPro| 6 | |Model|TH sensor| 7 | |Short Description|Temperature and humidity sensor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|Rechargeable battery, USB-C| 11 | |Exchanged Data|temperature, humidity, battery| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/TPMS.md: -------------------------------------------------------------------------------- 1 | # TPMS 2 | 3 | |Model Id|[TPMS](https://github.com/theengs/decoder/blob/development/src/devices/TPMS_json.h)| 4 | |-|-| 5 | |Brand|Generic| 6 | |Model|Tire pressure monitoring system| 7 | |Short Description|TPMS that can replace the valve cap| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|AA| 11 | |Exchanged Data|count, pressure, temperature, battery, alarm| 12 | |Encrypted|No| 13 | |Image|![TPMS](./../img/TPMS.png)| 14 | -------------------------------------------------------------------------------- /docs/devices/ThermoBeacon.md: -------------------------------------------------------------------------------- 1 | # SensorBlue/Oria/Brifit ThermoBeacon 2 | 3 | |Model Id|[WS02/WS08](https://github.com/theengs/decoder/blob/development/src/devices/ThermoBeacon_json.h)| 4 | |-|-| 5 | |Brand|SensorBlue/Oria/Brifit| 6 | |Model|ThermoBeacon| 7 | |Short Description|Temperature and humidity sensor, various models sold under various brands| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|CR2032/CR2477| 11 | |Exchanged Data|temperature, humidity, voltage, timestamp, maximum temperature, maximum temperature timestamp, minimum temperature, minimum temperature timestamp| 12 | |Encrypted|No| 13 | 14 | All timestamps are the number of seconds since the device is powered on. The minimum and maximum temperatures are also the values since the device is powered on. 15 | -------------------------------------------------------------------------------- /docs/devices/UT363BT.md: -------------------------------------------------------------------------------- 1 | # UNI-T UT363 BT Anemometer 2 | 3 | |Model Id|[UT363BT](https://github.com/theengs/decoder/blob/development/src/devices/UT363BT_json.h)| 4 | |-|-| 5 | |Brand|UNI-T| 6 | |Model|UT363 BT Anemometer| 7 | |Short Description|Wind speed anemometer| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|3 AAA| 11 | |Exchanged Data|wind speed| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/VCH6003.md: -------------------------------------------------------------------------------- 1 | # VCHON VCH6003 2 | 3 | 4 | |Model Id|[VCH6003](https://github.com/theengs/decoder/blob/development/src/devices/VCH6003_json.h)| 5 | |-|-| 6 | |Brand|VCHON| 7 | |Model|TH sensor| 8 | |Short Description|Bluetooth Thermometer and Hygrometer| 9 | |Communication|BLE broadcast| 10 | |Frequency|2.4Ghz| 11 | |Power Source|CR2032| 12 | |Exchanged Data|temperature, humidity| 13 | |Encrypted|No| 14 | |Image|![VCH6003](./../img/VCH6003.png)| 15 | -------------------------------------------------------------------------------- /docs/devices/VICTRON_BSC.md: -------------------------------------------------------------------------------- 1 | # Victron Energy Blue Smart Charger 2 | 3 | |Model Id|[VICTBSC](https://github.com/theengs/decoder/blob/development/src/devices/VICTRON_BSC_json.h)| 4 | |-|-| 5 | |Brand|Victron Energy| 6 | |Model|Blue Smart Charger| 7 | |Short Description|Various Blue Smart Charger models| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|AC mains| 11 | |Exchanged Data|device state, voltage battery 1, current battery 1, voltage battery 2, current battery 2, voltage battery 3, current battery 3, temperature, current ac, error code| 12 | |Encrypted|Yes| 13 | -------------------------------------------------------------------------------- /docs/devices/VICTRON_ORIONXS.md: -------------------------------------------------------------------------------- 1 | # Victron Energy Orion XS 2 | 3 | |Model Id|[VICTORIONXS](https://github.com/theengs/decoder/blob/development/src/devices/VICTRON_ORIONXS_json.h)| 4 | |-|-| 5 | |Brand|Victron Energy| 6 | |Model|Orion XS| 7 | |Short Description|Various DC-DC Battery Charger models| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|From connected battery/alternator| 11 | |Exchanged Data|device state, voltage out, current out, voltage in, current in, error code| 12 | |Encrypted|Yes| 13 | |Device Tracker|✅| 14 | -------------------------------------------------------------------------------- /docs/devices/VICTRON_SBP.md: -------------------------------------------------------------------------------- 1 | # Victron Energy Smart BatteryProtect 2 | 3 | |Model Id|[VICTSBP](https://github.com/theengs/decoder/blob/development/src/devices/VICTRON_SBP_json.h)| 4 | |-|-| 5 | |Brand|Victron Energy| 6 | |Model|Smart BatteryProtect| 7 | |Short Description|Various Smart BatteryProtect models| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|From connected battery| 11 | |Exchanged Data|device state, output state, voltage in, voltage out, error code, alarm reason, warning reason| 12 | |Encrypted|Yes| 13 | |Device Tracker|✅| 14 | -------------------------------------------------------------------------------- /docs/devices/XMTZC04HM.md: -------------------------------------------------------------------------------- 1 | # Xiaomi Mi Smart Scale 2 | 3 | |Model Id|[XMTZC01HM/XMTZC04HM](https://github.com/theengs/decoder/blob/development/src/devices/XMTZC04HM_json.h)| 4 | |-|-| 5 | |Brand|Xiaomi| 6 | |Model|Mi Smart Scale| 7 | |Short Description|First (MI_SCALE) and second (MI SCALE2) version of the Mi Smart Scale| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|4 AA/3 AAA| 11 | |Exchanged Data|weighing_mode, unit, weight| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/XMTZC05HM.md: -------------------------------------------------------------------------------- 1 | # Xiaomi Mi Body Composition Scale 2 | 3 | |Model Id|[XMTZC02HM/XMTZC05HM](https://github.com/theengs/decoder/blob/development/src/devices/XMTZC05HM_json.h)| 4 | |-|-| 5 | |Brand|Xiaomi| 6 | |Model|Mi Body Composition Scale| 7 | |Short Description|First (MIBCS) and second (MIBFS) version of the Mi Body Composition Scale| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|4 AAA| 11 | |Exchanged Data|weighing_mode, unit, weight, impedance| 12 | |Encrypted|No| 13 | |Image|![XMTZC05HM](./../img/XMTZC05HM.png)| 14 | -------------------------------------------------------------------------------- /docs/devices/XOSSX2.md: -------------------------------------------------------------------------------- 1 | # XOSS X2 Heart Rate Sensor 2 | 3 | |Model Id|[XOSSX2](https://github.com/theengs/decoder/blob/development/src/devices/XOSSX2_json.h)| 4 | |-|-| 5 | |Brand|XOSS| 6 | |Model|X2 Heart Rate Sensor| 7 | |Short Description|Chest strap heart rate sensor| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|CR2032| 11 | |Exchanged Data|heart rate, battery| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/devices_by_brand.md: -------------------------------------------------------------------------------- 1 | --- 2 | redirect: ./devices.html 3 | --- 4 | 5 | # Redirecting... 6 | 7 | If you are not redirected automatically, follow this link to the compatible BT devices listing. 8 | 9 | 10 | 13 | -------------------------------------------------------------------------------- /docs/devices/iBeacon.md: -------------------------------------------------------------------------------- 1 | # iBeacon 2 | 3 | |Model Id|[IBEACON](https://github.com/theengs/decoder/blob/development/src/devices/iBeacon_json.h)| 4 | |-|-| 5 | |Brand|Generic| 6 | |Model|iBeacon| 7 | |Short Description|iBeacon protocol| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|Sensor dependent| 11 | |Exchanged Data|mfid, uuid, minor, major, txpower @ 1 m/voltage| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/iNodeEM.md: -------------------------------------------------------------------------------- 1 | # iNode Energy Meter 2 | 3 | |Model Id|[INEM](https://github.com/theengs/decoder/blob/development/src/devices/iNodeEM_json.h)| 4 | |-|-| 5 | |Brand|iNode| 6 | |Model|Energy Meter| 7 | |Short Description|Sensors for electricity or water meters| 8 | |Communication|BLE broadcast| 9 | |Frequency|2.4Ghz| 10 | |Power Source|CR2032/14250/CR2| 11 | |Exchanged Data|Current average and aggregate kW(h)/m³, battery| 12 | |Encrypted|No| 13 | -------------------------------------------------------------------------------- /docs/devices/rows.md: -------------------------------------------------------------------------------- 1 | # Rows 2 | 3 | |Model Id| 4 | |-| 5 | |Image| 6 | |Brand| 7 | |Model| 8 | |Short Description| 9 | |Communication| 10 | |Frequency| 11 | |Power Source| 12 | |Exchanged Data| 13 | |Encrypted| 14 | |Device Tracker| 15 | |Filename| 16 | -------------------------------------------------------------------------------- /docs/img/BC021.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theengs/decoder/f8132ea019ba7aeb4d191b3a1f78d28912587c71/docs/img/BC021.png -------------------------------------------------------------------------------- /docs/img/BM2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theengs/decoder/f8132ea019ba7aeb4d191b3a1f78d28912587c71/docs/img/BM2.png -------------------------------------------------------------------------------- /docs/img/BP.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theengs/decoder/f8132ea019ba7aeb4d191b3a1f78d28912587c71/docs/img/BP.png -------------------------------------------------------------------------------- /docs/img/CGD1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theengs/decoder/f8132ea019ba7aeb4d191b3a1f78d28912587c71/docs/img/CGD1.png -------------------------------------------------------------------------------- /docs/img/CGDK2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theengs/decoder/f8132ea019ba7aeb4d191b3a1f78d28912587c71/docs/img/CGDK2.png -------------------------------------------------------------------------------- /docs/img/CGDN1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theengs/decoder/f8132ea019ba7aeb4d191b3a1f78d28912587c71/docs/img/CGDN1.png -------------------------------------------------------------------------------- /docs/img/CGG1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theengs/decoder/f8132ea019ba7aeb4d191b3a1f78d28912587c71/docs/img/CGG1.png -------------------------------------------------------------------------------- /docs/img/CGH1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theengs/decoder/f8132ea019ba7aeb4d191b3a1f78d28912587c71/docs/img/CGH1.png -------------------------------------------------------------------------------- /docs/img/CGP1W.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theengs/decoder/f8132ea019ba7aeb4d191b3a1f78d28912587c71/docs/img/CGP1W.png -------------------------------------------------------------------------------- /docs/img/CGPR1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theengs/decoder/f8132ea019ba7aeb4d191b3a1f78d28912587c71/docs/img/CGPR1.png -------------------------------------------------------------------------------- /docs/img/H4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theengs/decoder/f8132ea019ba7aeb4d191b3a1f78d28912587c71/docs/img/H4.png -------------------------------------------------------------------------------- /docs/img/H5074.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theengs/decoder/f8132ea019ba7aeb4d191b3a1f78d28912587c71/docs/img/H5074.png -------------------------------------------------------------------------------- /docs/img/H5075.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theengs/decoder/f8132ea019ba7aeb4d191b3a1f78d28912587c71/docs/img/H5075.png -------------------------------------------------------------------------------- /docs/img/H5106.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theengs/decoder/f8132ea019ba7aeb4d191b3a1f78d28912587c71/docs/img/H5106.png -------------------------------------------------------------------------------- /docs/img/HHCCJCY01HHCC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theengs/decoder/f8132ea019ba7aeb4d191b3a1f78d28912587c71/docs/img/HHCCJCY01HHCC.png -------------------------------------------------------------------------------- /docs/img/IBS-TH1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theengs/decoder/f8132ea019ba7aeb4d191b3a1f78d28912587c71/docs/img/IBS-TH1.png -------------------------------------------------------------------------------- /docs/img/IBS-TH2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theengs/decoder/f8132ea019ba7aeb4d191b3a1f78d28912587c71/docs/img/IBS-TH2.png -------------------------------------------------------------------------------- /docs/img/IBT_2X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theengs/decoder/f8132ea019ba7aeb4d191b3a1f78d28912587c71/docs/img/IBT_2X.png -------------------------------------------------------------------------------- /docs/img/IBT_4X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theengs/decoder/f8132ea019ba7aeb4d191b3a1f78d28912587c71/docs/img/IBT_4X.png -------------------------------------------------------------------------------- /docs/img/JQJCY01YM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theengs/decoder/f8132ea019ba7aeb4d191b3a1f78d28912587c71/docs/img/JQJCY01YM.png -------------------------------------------------------------------------------- /docs/img/LYWSD02MMC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theengs/decoder/f8132ea019ba7aeb4d191b3a1f78d28912587c71/docs/img/LYWSD02MMC.png -------------------------------------------------------------------------------- /docs/img/LYWSD03MMC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theengs/decoder/f8132ea019ba7aeb4d191b3a1f78d28912587c71/docs/img/LYWSD03MMC.png -------------------------------------------------------------------------------- /docs/img/LYWSDCGQ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theengs/decoder/f8132ea019ba7aeb4d191b3a1f78d28912587c71/docs/img/LYWSDCGQ.png -------------------------------------------------------------------------------- /docs/img/M1017.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theengs/decoder/f8132ea019ba7aeb4d191b3a1f78d28912587c71/docs/img/M1017.png -------------------------------------------------------------------------------- /docs/img/M2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theengs/decoder/f8132ea019ba7aeb4d191b3a1f78d28912587c71/docs/img/M2.png -------------------------------------------------------------------------------- /docs/img/MHO-C401.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theengs/decoder/f8132ea019ba7aeb4d191b3a1f78d28912587c71/docs/img/MHO-C401.png -------------------------------------------------------------------------------- /docs/img/MiBand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theengs/decoder/f8132ea019ba7aeb4d191b3a1f78d28912587c71/docs/img/MiBand.png -------------------------------------------------------------------------------- /docs/img/T201.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theengs/decoder/f8132ea019ba7aeb4d191b3a1f78d28912587c71/docs/img/T201.png -------------------------------------------------------------------------------- /docs/img/THX1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theengs/decoder/f8132ea019ba7aeb4d191b3a1f78d28912587c71/docs/img/THX1.png -------------------------------------------------------------------------------- /docs/img/TILE.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theengs/decoder/f8132ea019ba7aeb4d191b3a1f78d28912587c71/docs/img/TILE.png -------------------------------------------------------------------------------- /docs/img/TP357.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theengs/decoder/f8132ea019ba7aeb4d191b3a1f78d28912587c71/docs/img/TP357.png -------------------------------------------------------------------------------- /docs/img/TP358.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theengs/decoder/f8132ea019ba7aeb4d191b3a1f78d28912587c71/docs/img/TP358.png -------------------------------------------------------------------------------- /docs/img/TPMS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theengs/decoder/f8132ea019ba7aeb4d191b3a1f78d28912587c71/docs/img/TPMS.png -------------------------------------------------------------------------------- /docs/img/Theengs_decoder.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theengs/decoder/f8132ea019ba7aeb4d191b3a1f78d28912587c71/docs/img/Theengs_decoder.jpg -------------------------------------------------------------------------------- /docs/img/Theengs_decoder_iot_chain.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theengs/decoder/f8132ea019ba7aeb4d191b3a1f78d28912587c71/docs/img/Theengs_decoder_iot_chain.jpg -------------------------------------------------------------------------------- /docs/img/VCH6003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theengs/decoder/f8132ea019ba7aeb4d191b3a1f78d28912587c71/docs/img/VCH6003.png -------------------------------------------------------------------------------- /docs/img/W110150X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theengs/decoder/f8132ea019ba7aeb4d191b3a1f78d28912587c71/docs/img/W110150X.png -------------------------------------------------------------------------------- /docs/img/XMTZC05HM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theengs/decoder/f8132ea019ba7aeb4d191b3a1f78d28912587c71/docs/img/XMTZC05HM.png -------------------------------------------------------------------------------- /docs/participate/support.md: -------------------------------------------------------------------------------- 1 | # Supporting the project 2 | 3 | If you like the project and/or used it please consider supporting it! It can be done in different ways: 4 | * Helping others in the [community](https://github.com/theengs/decoder/discussions) 5 | * [Contribute](development) to the [code](https://github.com/theengs/decoder) or the documentation, 6 | * Buy devices, boards or parts from the [OpenMQTTGateway compatible web site](https://compatible.openmqttgateway.com), the devices and parts linked use affiliated links, 7 | * Donate or sponsor the project [developers](https://github.com/theengs/decoder/graphs/contributors) 8 | * Make a video or a blog article about what you have done with [TheengsDecoder](https://github.com/theengs/decoder) and share it. -------------------------------------------------------------------------------- /docs/use/ESP32.md: -------------------------------------------------------------------------------- 1 | # Using with ESP32 2 | 3 | The library includes a BLE decoder [example](https://github.com/theengs/decoder/blob/development/examples/ESP32/ScanAndDecode/ScanAndDecode.ino) based on ESP32, you can open the folder [ScanAndDecode](https://github.com/theengs/decoder/blob/development/examples/ESP32/ScanAndDecode) with a platformio environment or directly [ScanAndDecode.ino](https://github.com/theengs/decoder/blob/development/examples/ESP32/ScanAndDecode/ScanAndDecode.ino) with an Arduino IDE. 4 | 5 | If Theengs Decoder recognize a device, it will print in the serial output a message like the example below: 6 | ``` 7 | TheengsDecoder found device: {"id":"AA:BB:CC:DD:EE:FF","name":"ATC_800021","rssi":-90,"servicedatauuid":"0x181a","brand":"Xiaomi","model":"LYWSD03MMC","model_id":"LYWSD03MMC_ATC","tempc":26.3,"tempf":79.34,"hum":49,"batt":29,"volt":2.487} 8 | ``` 9 | -------------------------------------------------------------------------------- /docs/use/include.md: -------------------------------------------------------------------------------- 1 | # Using the library in a project 2 | 3 | Call `decodeBLEJson(JsonObject)` with the input being of the Arduino JSON JsonObject type. If the device is known the JsonObject will have the decoded device data added to it. 4 | 5 | ### Example 6 | Input JsonObject: 7 | ``` 8 | { 9 | "servicedata": "712098000163b6658d7cc40d0410024001" 10 | } 11 | ``` 12 | 13 | JsonObject after decoding: 14 | ``` 15 | { 16 | "servicedata": "712098000163b6658d7cc40d0410024001" 17 | "brand":"Xiaomi", 18 | "model":"miflora", 19 | "model_id":"HHCCJCY01HHCC", 20 | "tempc":32, 21 | "tempf":89.6 22 | } 23 | ``` 24 | 25 | ::: tip 26 | If you are using ArduinoJson library with your project (like TheengsDecoder) you may have to align the ArduinoJson build options into TheengDecoder with it. To do so, go to [decoder.h](https://github.com/theengs/decoder/blob/development/src/decoder.h) and align the flags with your project. In particular you may have to remove `ARDUINOJSON_USE_LONG_LONG=1`. 27 | ::: 28 | 29 | ### Encrypted data 30 | 31 | Decoders for encrypted data, indicated by the `"encr": true` tag, will send a JsonObject with the properties cipher, counter, message integrity check and MAC address, e.g. 32 | 33 | ``` 34 | { 35 | "encr": true, 36 | "cipher":"62511158bd25", 37 | "ctr":"b8f09364", 38 | "mic":"5b573115", 39 | "mac":"AA:BB:CC:DD:EE:FF" 40 | } 41 | ``` 42 | 43 | With a correct bindkey this encrypted data can be decrypted and sent back to Decoder for properties decoding. 44 | -------------------------------------------------------------------------------- /examples/ESP32/ScanAndDecode/.gitignore: -------------------------------------------------------------------------------- 1 | .pio 2 | .vscode/.browse.c_cpp.db* 3 | .vscode/c_cpp_properties.json 4 | .vscode/launch.json 5 | .vscode/ipch 6 | -------------------------------------------------------------------------------- /examples/ESP32/ScanAndDecode/platformio.ini: -------------------------------------------------------------------------------- 1 | [platformio] 2 | src_dir = . 3 | 4 | [libraries] 5 | arduinojson = ArduinoJson@6.18.3 6 | ble = https://github.com/h2zero/NimBLE-Arduino.git#1.3.1 7 | 8 | [env] 9 | lib_extra_dirs = ../../../ 10 | lib_ldf_mode = deep+ 11 | lib_ignore = examples 12 | 13 | [env:esp32dev] 14 | platform = espressif32 15 | board = esp32dev 16 | framework = arduino 17 | monitor_speed = 115200 18 | lib_deps = 19 | ${libraries.arduinojson} 20 | ${libraries.ble} 21 | -------------------------------------------------------------------------------- /examples/go/README.md: -------------------------------------------------------------------------------- 1 | # Go demo 2 | 3 | ## Prerequisites 4 | 5 | The decoder library should be compiled statically when using it with Go. 6 | 7 | From the decoder root folder 8 | 9 | ```sh 10 | mkdir -p build 11 | cd build 12 | cmake -DBUILD_SHARED_LIBS=OFF -DBUILD_TESTING=OFF .. 13 | make 14 | ``` 15 | 16 | # Running 17 | The example can now be ran 18 | 19 | ```sh 20 | go run decode.go 21 | ``` 22 | -------------------------------------------------------------------------------- /examples/go/decoder.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | // #cgo LDFLAGS: -lstdc++ -L../../build -ldecoder 4 | // #include "../../include/shared/theengs.h" 5 | // #include "stdlib.h" 6 | import "C" 7 | 8 | import ( 9 | "log" 10 | "unsafe" 11 | ) 12 | 13 | type TheengsDecoder struct { 14 | ptr unsafe.Pointer 15 | } 16 | 17 | func NewDecoder() TheengsDecoder { 18 | return TheengsDecoder{ 19 | ptr: C.Theengs_NewDecoder(), 20 | } 21 | } 22 | 23 | func (d TheengsDecoder) Destroy() { 24 | C.Theengs_DestroyDecoder(d.ptr) 25 | } 26 | 27 | func (d TheengsDecoder) DecodeBLE(json_data string) string { 28 | cs_data := C.CString(json_data) 29 | cs_result := C.Theengs_DecodeBLE(d.ptr, cs_data) 30 | result := C.GoString(cs_result) 31 | C.free(unsafe.Pointer(cs_data)) 32 | C.free(unsafe.Pointer(cs_result)) 33 | return result 34 | } 35 | 36 | func (d TheengsDecoder) GetProperties(model_id string) string { 37 | cs_model := C.CString(model_id) 38 | cs_result := C.Theengs_GetProperties(d.ptr, cs_model) 39 | result := C.GoString(cs_result) 40 | C.free(unsafe.Pointer(cs_model)) 41 | C.free(unsafe.Pointer(cs_result)) 42 | return result 43 | } 44 | 45 | func (d TheengsDecoder) GetAttribute(model_id string, attribute string) string { 46 | cs_model := C.CString(model_id) 47 | cs_attr := C.CString(attribute) 48 | cs_result := C.Theengs_GetAttribute(d.ptr, cs_model, cs_attr) 49 | result := C.GoString(cs_result) 50 | C.free(unsafe.Pointer(cs_model)) 51 | C.free(unsafe.Pointer(cs_attr)) 52 | C.free(unsafe.Pointer(cs_result)) 53 | return result 54 | } 55 | 56 | func main() { 57 | 58 | json_data := `{"id":"redacted","mac_type":0,"adv_type":0,"name":"LYWSD02","rssi":-67,"servicedata":"70205b043941e480012ee7090a10012500","servicedatauuid":"0xfe95"}` 59 | 60 | decoder := NewDecoder() 61 | data := decoder.DecodeBLE(json_data) 62 | props := decoder.GetProperties("LYWSD02") 63 | brand := decoder.GetAttribute("LYWSD02", "brand") 64 | model := decoder.GetAttribute("LYWSD02", "model") 65 | 66 | log.Println(data) 67 | log.Println(props) 68 | log.Printf("brand: %v, model: %v\n", brand, model) 69 | } 70 | -------------------------------------------------------------------------------- /examples/go/dummy.cpp: -------------------------------------------------------------------------------- 1 | // Go won't use the C++ linker unless it detects at least one cpp file 2 | // This file serves no other purpose -------------------------------------------------------------------------------- /examples/python/README.md: -------------------------------------------------------------------------------- 1 | # Scan and decode demo 2 | 3 | ## Requirements 4 | - bleak: `pip install bleak` 5 | - TheengsDecoder: (not available on PyPy yet) see the README in REPO_FOLDER/python for installation. 6 | -------------------------------------------------------------------------------- /examples/python/ScanAndDecode.py: -------------------------------------------------------------------------------- 1 | import asyncio 2 | import json 3 | import struct 4 | from bleak import BleakScanner 5 | from TheengsDecoder import decodeBLE as dble 6 | from TheengsDecoder import getProperties, getAttribute 7 | 8 | def detection_callback(device, advertisement_data): 9 | print(f"{device.address}:{advertisement_data}") 10 | data_json = {} 11 | 12 | if advertisement_data.service_data: 13 | dstr = list(advertisement_data.service_data.keys())[0] 14 | # TheengsDecoder only accepts 16 bit uuid's, this converts the 128 bit uuid to 16 bit. 15 | data_json['servicedatauuid'] = dstr[4:8] 16 | dstr = str(list(advertisement_data.service_data.values())[0].hex()) 17 | data_json['servicedata'] = dstr 18 | 19 | if advertisement_data.manufacturer_data: 20 | dstr = str(struct.pack('. 20 | */ 21 | 22 | #ifndef _THEENGS_H_ 23 | #define _THEENGS_H_ 24 | 25 | #ifdef __cplusplus 26 | extern "C" { 27 | #endif 28 | 29 | void* Theengs_NewDecoder(); 30 | void Theengs_DestroyDecoder(void* decoder); 31 | const char* Theengs_DecodeBLE(void* decoder, const char* json_data); 32 | const char* Theengs_GetProperties(void* decoder, const char* model_id); 33 | const char* Theengs_GetAttribute(void* decoder, const char* model_id, const char* attribute); 34 | 35 | #ifdef __cplusplus 36 | } // extern "C" 37 | #endif 38 | 39 | #endif // _THEENGS_H_ -------------------------------------------------------------------------------- /library.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "TheengsDecoder", 3 | "keywords": "ble, json, decoder", 4 | "description": "A simple, efficient, portable and lightweight library for Internet of Things messages decoding.", 5 | "homepage": "https://theengs.github.io/decoder/", 6 | "repository": { 7 | "type": "git", 8 | "url": "https://github.com/theengs/decoder.git" 9 | }, 10 | "version": "1.9.8", 11 | "authors": 12 | [ 13 | { 14 | "name": "Florian Robert", 15 | "url": "https://1technophile.blogspot.com/" 16 | }, 17 | { 18 | "name": "Ryan Powell" 19 | } 20 | ], 21 | "build": { 22 | "extraScript": "scripts/remove_arduino_json.py" 23 | }, 24 | "export": { 25 | "exclude": [ 26 | "*.github", 27 | "*.gitmodules" 28 | ] 29 | }, 30 | "frameworks": "*", 31 | "platforms": "*", 32 | "license":"GPL-3.0-or-later" 33 | } -------------------------------------------------------------------------------- /library.properties: -------------------------------------------------------------------------------- 1 | name=TheengsDecoder 2 | version=1.9.8 3 | author=Florian Robert, Ryan Powell 4 | maintainer=Florian Robert 5 | sentence=A simple, efficient, portable and lightweight library for Internet of Things messages decoding. 6 | paragraph=Theengs Decoder library translates sensors data chains into human readable data leveraging the well known data interchange format JSON. This format can easily be integrated into different systems or software. 7 | category=Data Processing 8 | url=https://github.com/theengs/decoder 9 | architectures=* 10 | repository=https://github.com/theengs/decoder.git -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "scripts": { 3 | "docs:dev": "vuepress dev docs", 4 | "docs:build": "vuepress build docs" 5 | }, 6 | "devDependencies": { 7 | "vuepress": "^1.9.7" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = [ 3 | # packaging engine 4 | "setuptools >= 61", 5 | "wheel", 6 | # C/C++ build glue 7 | "scikit-build >= 0.17", # or scikit-build-core >= 0.11.2 8 | "cmake >= 3.18", 9 | "ninja", 10 | "pybind11 >= 2.9.0", 11 | # version extraction 12 | "setuptools_scm[toml] >= 8", 13 | ] 14 | build-backend = "setuptools.build_meta" 15 | 16 | [tool.setuptools_scm] 17 | root = ".." 18 | relative_to = "python/pyproject.toml" 19 | version_scheme = "post-release" 20 | local_scheme = "no-local-version" 21 | 22 | [tool.setuptools] 23 | packages = ["TheengsDecoder"] 24 | package-dir = { "" = "." } 25 | include-package-data = true 26 | -------------------------------------------------------------------------------- /python/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.5) 2 | 3 | project(decoder VERSION 1.9.8) 4 | find_package(PythonExtensions REQUIRED) 5 | 6 | add_library(_decoder MODULE TheengsDecoder/_decoder.cpp src/decoder.cpp) 7 | python_extension_module(_decoder) 8 | 9 | target_include_directories(_decoder 10 | PUBLIC 11 | $ 12 | $ 13 | ${CMAKE_CURRENT_SOURCE_DIR}/src 14 | ) 15 | 16 | target_compile_features(_decoder PRIVATE cxx_std_11) 17 | 18 | install(TARGETS _decoder LIBRARY DESTINATION TheengsDecoder) 19 | -------------------------------------------------------------------------------- /python/MANIFEST.in: -------------------------------------------------------------------------------- 1 | include CMakeLists.txt 2 | include README.md 3 | include TheengsDecoder/__init__.py 4 | include TheengsDecoder/_decoder.cpp 5 | include pyproject.toml 6 | include setup.py 7 | recursive-include src * 8 | exclude MANIFEST.in 9 | -------------------------------------------------------------------------------- /python/README.md: -------------------------------------------------------------------------------- 1 | # Theengs Decoder 2 | 3 | ## Installation 4 | 5 | * Create a virtual environment 6 | `python3 -m venv theengs-venv` 7 | 8 | * Activate the virtual environment 9 | `source theengs-venv/bin/activate` 10 | 11 | * Install and upgrade pip 12 | `python3 -m pip install --upgrade pip` 13 | 14 | * Install dependencies 15 | `pip3 install setuptools setuptools_scm cmake==3.25.0 wheel scikit-build ninja` 16 | 17 | * Clone Theengs Decoder 18 | `git clone --recursive https://github.com/Theengs/decoder.git` 19 | 20 | * cd to python folder inside the repository 21 | `cd decoder/python` 22 | 23 | * Copy sources inside the build repository 24 | `cp -r ../src .` 25 | 26 | * Build wheel 27 | `python3 setup.py bdist_wheel` 28 | 29 | * Install 30 | `cd ..` 31 | `pip3 install python/dist/*.whl` 32 | 33 | * Verify installation 34 | `python3 -c "from TheengsDecoder import decodeBLE; print('Successfully imported decodeBLE from PR_build.yml')"` 35 | 36 | You should see: 37 | `Successfully imported decodeBLE from PR_build.yml` 38 | 39 | ## using 40 | 41 | `import TheengsDecoder` 42 | 43 | ## methods 44 | 45 | - `decodeBLE(string)` Returns a new string with the decoded data in json format or None. 46 | - `getProperties('model_id string')` Returns the properties (string) of the given model ID or None 47 | - `getAttribute('model_id string', 'attribute string')` Return the value (string) of named attrubte of the model ID or None. 48 | -------------------------------------------------------------------------------- /python/TheengsDecoder/__init__.py: -------------------------------------------------------------------------------- 1 | from ._decoder import decodeBLE # noqa: F401 2 | from ._decoder import getAttribute # noqa: F401 3 | from ._decoder import getProperties # noqa: F401 -------------------------------------------------------------------------------- /python/pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = ["setuptools", "wheel", "scikit-build", "cmake", "ninja"] -------------------------------------------------------------------------------- /python/setup.py: -------------------------------------------------------------------------------- 1 | # read the contents of your README file 2 | from pathlib import Path 3 | 4 | 5 | from packaging import version 6 | from skbuild import setup 7 | from skbuild.cmaker import get_cmake_version 8 | from skbuild.exceptions import SKBuildError 9 | 10 | this_directory = Path(__file__).parent 11 | long_description = (this_directory / "README.md").read_text(encoding="utf-8") 12 | setup_requires = ["setuptools_scm"] 13 | # Add CMake as a build requirement if cmake is not installed 14 | # or is too low a version 15 | try: 16 | if version.parse(get_cmake_version()) < version.parse("3.10"): 17 | setup_requires.append("cmake") 18 | except SKBuildError: 19 | setup_requires.append("cmake") 20 | 21 | setup( 22 | name="theengsdecoder", 23 | long_description=long_description, 24 | long_description_content_type="text/markdown", 25 | description="A message decoder for the Internet of Things", 26 | author='Theengs', 27 | license=" GPL-3.0 License", 28 | packages=['TheengsDecoder'], 29 | use_scm_version={"root": "..", "version_scheme": "no-guess-dev"}, 30 | setup_requires=setup_requires, 31 | include_package_data=True, 32 | ) 33 | -------------------------------------------------------------------------------- /scripts/remove_arduino_json.py: -------------------------------------------------------------------------------- 1 | from pathlib import Path 2 | import shutil 3 | 4 | dirpath = Path('../src') / 'arduino_json' 5 | if dirpath.exists() and dirpath.is_dir(): 6 | shutil.rmtree(dirpath) 7 | -------------------------------------------------------------------------------- /src/decoder_c.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | TheengsDecoder - Decode things and devices 3 | 4 | Copyright: (c)Florian ROBERT 5 | 6 | This file is part of TheengsDecoder. 7 | 8 | TheengsDecoder is free software: you can redistribute it and/or modify 9 | it under the terms of the GNU General Public License as published by 10 | the Free Software Foundation, either version 3 of the License, or 11 | (at your option) any later version. 12 | 13 | TheengsDecoder is distributed in the hope that it will be useful, 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | GNU General Public License for more details. 17 | 18 | You should have received a copy of the GNU General Public License 19 | along with this program. If not, see . 20 | */ 21 | 22 | #include 23 | #include 24 | 25 | #include "decoder.h" 26 | #ifdef SKBUILD 27 | # include "shared/theengs.h" 28 | #else 29 | # include "../include/shared/theengs.h" 30 | #endif 31 | 32 | // Utility function local to the bridge's implementation 33 | TheengsDecoder* AsDecoder(void* decoder) { return reinterpret_cast(decoder); } 34 | 35 | void* Theengs_NewDecoder() { 36 | auto decoder = new TheengsDecoder(); 37 | return decoder; 38 | } 39 | 40 | void Theengs_DestroyDecoder(void* decoder) { 41 | AsDecoder(decoder)->~TheengsDecoder(); 42 | } 43 | 44 | const char* Theengs_DecodeBLE(void* decoder, const char* json_data) { 45 | StaticJsonDocument<1024> doc; 46 | DeserializationError err = deserializeJson(doc, json_data); 47 | if (!err) { 48 | JsonObject bleObject; 49 | bleObject = doc.as(); 50 | 51 | if (AsDecoder(decoder)->decodeBLEJson(bleObject) >= 0) { 52 | std::string buf; 53 | serializeJson(bleObject, buf); 54 | return strdup(buf.c_str()); 55 | } 56 | } 57 | return ""; 58 | } 59 | 60 | const char* Theengs_GetProperties(void* decoder, const char* model_id) { 61 | std::string props = AsDecoder(decoder)->getTheengProperties(model_id); 62 | return strdup(props.c_str()); 63 | } 64 | 65 | const char* Theengs_GetAttribute(void* decoder, const char* model_id, const char* attribute) { 66 | std::string attrs = AsDecoder(decoder)->getTheengAttribute(model_id, attribute); 67 | return strdup(attrs.c_str()); 68 | } -------------------------------------------------------------------------------- /src/devices/ABN03_json.h: -------------------------------------------------------------------------------- 1 | const char* _ABN03_json = "{\"brand\":\"April Brother\",\"model\":\"N03\",\"model_id\":\"ABN03\",\"tag\":\"0208\",\"condition\":[\"servicedata\",\"=\",30,\"index\",0,\"ab03\"],\"properties\":{\"tempc\":{\"decoder\":[\"value_from_hex_data\",\"servicedata\",18,4,true,true],\"post_proc\":[\"/\",8]},\"hum\":{\"decoder\":[\"value_from_hex_data\",\"servicedata\",22,4,true,false],\"post_proc\":[\"/\",2]},\"lux\":{\"decoder\":[\"value_from_hex_data\",\"servicedata\",26,4,true,false]},\"batt\":{\"decoder\":[\"value_from_hex_data\",\"servicedata\",16,2,false,false]},\"mac\":{\"decoder\":[\"mac_from_hex_data\",\"servicedata\",4]}}}"; 2 | /* R""""( 3 | { 4 | "brand":"April Brother", 5 | "model":"N03", 6 | "model_id":"ABN03", 7 | "tag":"0208", 8 | "condition":["servicedata", "=", 30, "index", 0, "ab03"], 9 | "properties":{ 10 | "tempc":{ 11 | "decoder":["value_from_hex_data", "servicedata", 18, 4, true, true], 12 | "post_proc":["/", 8] 13 | }, 14 | "hum":{ 15 | "decoder":["value_from_hex_data", "servicedata", 22, 4, true, false], 16 | "post_proc":["/", 2] 17 | }, 18 | "lux":{ 19 | "decoder":["value_from_hex_data", "servicedata", 26, 4, true, false] 20 | }, 21 | "batt":{ 22 | "decoder":["value_from_hex_data", "servicedata", 16, 2, false, false] 23 | }, 24 | "mac":{ 25 | "decoder":["mac_from_hex_data", "servicedata", 4] 26 | } 27 | } 28 | })"""";*/ 29 | 30 | const char* _ABN03_json_props = "{\"properties\":{\"tempc\":{\"unit\":\"°C\",\"name\":\"temperature\"},\"hum\":{\"unit\":\"%\",\"name\":\"humidity\"},\"lux\":{\"unit\":\"lx\",\"name\":\"illuminance\"},\"batt\":{\"unit\":\"%\",\"name\":\"battery\"},\"mac\":{\"unit\":\"string\",\"name\":\"MAC address\"}}}"; 31 | /*R""""( 32 | { 33 | "properties":{ 34 | "tempc":{ 35 | "unit":"°C", 36 | "name":"temperature" 37 | }, 38 | "hum":{ 39 | "unit":"%", 40 | "name":"humidity" 41 | }, 42 | "lux":{ 43 | "unit":"lx", 44 | "name":"illuminance" 45 | }, 46 | "batt":{ 47 | "unit":"%", 48 | "name":"battery" 49 | }, 50 | "mac":{ 51 | "unit":"string", 52 | "name":"MAC address" 53 | } 54 | } 55 | })"""";*/ 56 | -------------------------------------------------------------------------------- /src/devices/APPLEDEVICE_json.h: -------------------------------------------------------------------------------- 1 | const char* _APPLEDEVICE_json = "{\"brand\":\"Apple\",\"model\":\"Apple iPhone/iPad\",\"model_id\":\"APPLEDEVICE\",\"tag\":\"1018\",\"condition\":[\"manufacturerdata\",\">=\",8,\"index\",0,\"4c0010\"],\"properties\":{\"unlocked\":{\"condition\":[\"manufacturerdata\",9,\"b\"],\"decoder\":[\"static_value\",true]},\"_unlocked\":{\"condition\":[\"manufacturerdata\",9,\"!\",\"b\"],\"decoder\":[\"static_value\",false]}}}"; 2 | /*R""""( 3 | { 4 | "brand":"Apple", 5 | "model":"Apple iPhone/iPad", 6 | "model_id":"APPLEDEVICE", 7 | "tag":"1018", 8 | "condition":["manufacturerdata", ">=", 8, "index", 0, "4c0010"], 9 | "properties":{ 10 | "unlocked":{ 11 | "condition":["manufacturerdata", 9, "b"], 12 | "decoder":["static_value", true] 13 | }, 14 | "_unlocked":{ 15 | "condition":["manufacturerdata", 9, "!", "b"], 16 | "decoder":["static_value", false] 17 | } 18 | } 19 | })"""";*/ 20 | 21 | const char* _APPLEDEVICE_json_props = "{\"properties\":{\"unlocked\":{\"unit\":\"status\",\"name\":\"lock\"}}}"; 22 | /*R""""( 23 | { 24 | "properties":{ 25 | "unlocked":{ 26 | "unit":"status", 27 | "name":"lock" 28 | } 29 | } 30 | })"""";*/ 31 | -------------------------------------------------------------------------------- /src/devices/APPLEWATCH_json.h: -------------------------------------------------------------------------------- 1 | const char* _APPLEWATCH_json = "{\"brand\":\"Apple\",\"model\":\"Apple Watch\",\"model_id\":\"APPLEWATCH\",\"tag\":\"0b18\",\"condition\":[\"manufacturerdata\",\"index\",10,\"98\",\"|\",\"manufacturerdata\",\"index\",10,\"18\",\"&\",\"manufacturerdata\",\"=\",18,\"index\",0,\"4c001005\"],\"properties\":{\"unlocked\":{\"condition\":[\"manufacturerdata\",10,\"98\"],\"decoder\":[\"static_value\",true]},\"_unlocked\":{\"condition\":[\"manufacturerdata\",10,\"18\"],\"decoder\":[\"static_value\",false]}}}"; 2 | /*R""""( 3 | { 4 | "brand":"Apple", 5 | "model":"Apple Watch", 6 | "model_id":"APPLEWATCH", 7 | "tag":"0b18", 8 | "condition":["manufacturerdata", "index", 10, "98", "|", "manufacturerdata", "index", 10, "18", "&", "manufacturerdata", "=", 18, "index", 0, "4c001005"], 9 | "properties":{ 10 | "unlocked":{ 11 | "condition":["manufacturerdata", 10, "98"], 12 | "decoder":["static_value", true] 13 | }, 14 | "_unlocked":{ 15 | "condition":["manufacturerdata", 10, "18"], 16 | "decoder":["static_value", false] 17 | } 18 | } 19 | })"""";*/ 20 | 21 | const char* _APPLEWATCH_json_props = "{\"properties\":{\"unlocked\":{\"unit\":\"status\",\"name\":\"lock\"}}}"; 22 | /*R""""( 23 | { 24 | "properties":{ 25 | "unlocked":{ 26 | "unit":"status", 27 | "name":"lock" 28 | } 29 | } 30 | })"""";*/ 31 | -------------------------------------------------------------------------------- /src/devices/APPLE_json.h: -------------------------------------------------------------------------------- 1 | const char* _APPLE_json = "{\"brand\":\"Apple\",\"model\":\"Apple Continuity\",\"model_id\":\"APPLE_CONT\",\"tag\":\"fe\",\"condition\":[\"manufacturerdata\",\">=\",10,\"index\",0,\"4c000\",\"|\",\"manufacturerdata\",\">=\",10,\"index\",0,\"4c001\",\"&\",\"manufacturerdata\",\"<\",50],\"properties\":{\"device\":{\"decoder\":[\"static_value\",\"Apple device\"]}}}"; 2 | /*R""""( 3 | { 4 | "brand":"Apple", 5 | "model":"Apple Continuity", 6 | "model_id":"APPLE_CONT", 7 | "tag":"fe", 8 | "condition":["manufacturerdata", ">=", 10, "index", 0, "4c000", "|", "manufacturerdata", ">=", 10, "index", 0, "4c001", "&", "manufacturerdata", "<", 50], 9 | "properties":{ 10 | "device":{ 11 | "decoder":["static_value", "Apple device"] 12 | } 13 | } 14 | })"""";*/ 15 | 16 | const char* _APPLE_json_at = "{\"brand\":\"Apple\",\"model\":\"Apple Continuity\",\"model_id\":\"APPLE_CONTAT\",\"tag\":\"fe\",\"condition\":[\"manufacturerdata\",\">\",50,\"index\",0,\"4c000\",\"|\",\"manufacturerdata\",\">\",50,\"index\",0,\"4c001\"],\"properties\":{\"device\":{\"decoder\":[\"static_value\",\"Apple device\"]}}}"; 17 | /*R""""( 18 | { 19 | "brand":"Apple", 20 | "model":"Apple Continuity", 21 | "model_id":"APPLE_CONTAT", 22 | "tag":"fe", 23 | "condition":["manufacturerdata", ">", 50, "index", 0, "4c000", "|", "manufacturerdata", ">", 50, "index", 0, "4c001"], 24 | "properties":{ 25 | "device":{ 26 | "decoder":["static_value", "Apple device"] 27 | } 28 | } 29 | })"""";*/ 30 | 31 | const char* _APPLE_json_props = "{\"properties\":{\"device\":{\"unit\":\"string\",\"name\":\"device\"}}}"; 32 | /*R""""( 33 | { 34 | "properties":{ 35 | "device":{ 36 | "unit":"string", 37 | "name":"device" 38 | } 39 | } 40 | })"""";*/ 41 | -------------------------------------------------------------------------------- /src/devices/BM1IN1_json.h: -------------------------------------------------------------------------------- 1 | const char* _BM1IN1_json = "{\"brand\":\"Blue Maestro\",\"model\":\"Tempo Disc\",\"model_id\":\"TD1in1\",\"tag\":\"0108\",\"condition\":[\"manufacturerdata\",\"index\",4,\"0d\",\"&\",\"manufacturerdata\",\"=\",24,\"index\",0,\"3301\"],\"properties\":{\"tempc\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",16,4,false,true],\"post_proc\":[\"/\",10]},\"batt\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",6,2,false,false]}}}"; 2 | /*R""""( 3 | { 4 | "brand":"Blue Maestro", 5 | "model":"Tempo Disc", 6 | "model_id":"TD1in1", 7 | "tag":"0108", 8 | "condition":["manufacturerdata", "index", 4, "0d", "&", "manufacturerdata", "=", 24, "index", 0, "3301"], 9 | "properties":{ 10 | "tempc":{ 11 | "decoder":["value_from_hex_data", "manufacturerdata", 16, 4, false, true], 12 | "post_proc":["/", 10] 13 | }, 14 | "batt":{ 15 | "decoder":["value_from_hex_data", "manufacturerdata", 6, 2, false, false] 16 | } 17 | } 18 | })"""";*/ 19 | 20 | const char* _BM1IN1_json_props = "{\"properties\":{\"tempc\":{\"unit\":\"°C\",\"name\":\"temperature\"},\"batt\":{\"unit\":\"%\",\"name\":\"battery\"}}}"; 21 | /*R""""( 22 | { 23 | "properties": { 24 | "tempc": { 25 | "unit": "°C", 26 | "name": "temperature" 27 | }, 28 | "batt": { 29 | "unit": "%", 30 | "name": "battery" 31 | } 32 | } 33 | })"""";*/ 34 | -------------------------------------------------------------------------------- /src/devices/BM2_json.h: -------------------------------------------------------------------------------- 1 | const char* _BM2_json = "{\"brand\":\"GENERIC\",\"model\":\"BM2 Battery Monitor\",\"model_id\":\"BM2\",\"tag\":\"0808\",\"condition\":[\"manufacturerdata\",\"=\",50,\"index\",0,\"4c000215655f83caae16a10a702e31f30d58dd82\"],\"properties\":{\"batt\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",48,2,false]},\"device\":{\"decoder\":[\"static_value\",\"BM2 Tracker\"]}}}"; 2 | 3 | /*R""""( 4 | { 5 | "brand":"GENERIC", 6 | "model":"BM2 Battery Monitor", 7 | "model_id":"BM2", 8 | "tag":"0808", 9 | "condition":["manufacturerdata", "=", 50, "index", 0, "4c000215655f83caae16a10a702e31f30d58dd82"], 10 | "properties":{ 11 | "batt":{ 12 | "decoder":["value_from_hex_data", "manufacturerdata", 48, 2, false] 13 | }, 14 | "device":{ 15 | "decoder":["static_value", "BM2 Tracker"] 16 | } 17 | } 18 | })"""";*/ 19 | 20 | const char* _BM2_json_props = "{\"properties\":{\"batt\":{\"unit\":\"%\",\"name\":\"battery\"},\"device\":{\"unit\":\"string\",\"name\":\"tracker device\"}}}"; 21 | /*R""""( 22 | { 23 | "properties":{ 24 | "batt":{ 25 | "unit":"%", 26 | "name":"battery" 27 | }, 28 | "device":{ 29 | "unit":"string", 30 | "name":"tracker device" 31 | } 32 | } 33 | })"""";*/ 34 | -------------------------------------------------------------------------------- /src/devices/BM3IN1_json.h: -------------------------------------------------------------------------------- 1 | const char* _BM3IN1_json = "{\"brand\":\"Blue Maestro\",\"model\":\"Tempo Disc\",\"model_id\":\"TD3in1\",\"tag\":\"0208\",\"condition\":[\"manufacturerdata\",\"index\",4,\"16\",\"|\",\"manufacturerdata\",\"index\",4,\"17\",\"&\",\"manufacturerdata\",\"=\",32,\"index\",0,\"3301\"],\"properties\":{\"tempc\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",16,4,false,true],\"post_proc\":[\"/\",10]},\"hum\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",20,4,false,false],\"post_proc\":[\"/\",10]},\"tempc2_dp\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",24,4,false,true],\"post_proc\":[\"/\",10]},\"batt\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",6,2,false,false]}}}"; 2 | /*R""""( 3 | { 4 | "brand":"Blue Maestro", 5 | "model":"Tempo Disc", 6 | "model_id":"TD3in1", 7 | "tag":"0208", 8 | "condition":["manufacturerdata", "index", 4, "16", "|", "manufacturerdata", "index", 4, "17", "&", "manufacturerdata", "=", 32, "index", 0, "3301"], 9 | "properties":{ 10 | "tempc":{ 11 | "decoder":["value_from_hex_data", "manufacturerdata", 16, 4, false, true], 12 | "post_proc":["/", 10] 13 | }, 14 | "hum":{ 15 | "decoder":["value_from_hex_data", "manufacturerdata", 20, 4, false, false], 16 | "post_proc":["/", 10] 17 | }, 18 | "tempc2_dp":{ 19 | "decoder":["value_from_hex_data", "manufacturerdata", 24, 4, false, true], 20 | "post_proc":["/", 10] 21 | }, 22 | "batt":{ 23 | "decoder":["value_from_hex_data", "manufacturerdata", 6, 2, false, false] 24 | } 25 | } 26 | })"""";*/ 27 | 28 | const char* _BM3IN1_json_props = "{\"properties\":{\"tempc\":{\"unit\":\"°C\",\"name\":\"temperature\"},\"hum\":{\"unit\":\"%\",\"name\":\"humidity\"},\"tempc2_dp\":{\"unit\":\"°C\",\"name\":\"dew point\"},\"batt\":{\"unit\":\"%\",\"name\":\"battery\"}}}"; 29 | /*R""""( 30 | { 31 | "properties": { 32 | "tempc": { 33 | "unit": "°C", 34 | "name": "temperature" 35 | }, 36 | "hum": { 37 | "unit": "%", 38 | "name": "humidity" 39 | }, 40 | "tempc2_dp": { 41 | "unit": "°C", 42 | "name": "dew point" 43 | }, 44 | "batt": { 45 | "unit": "%", 46 | "name": "battery" 47 | } 48 | } 49 | })"""";*/ 50 | -------------------------------------------------------------------------------- /src/devices/BM4IN1_json.h: -------------------------------------------------------------------------------- 1 | const char* _BM4IN1_json = "{\"brand\":\"Blue Maestro\",\"model\":\"Tempo Disc\",\"model_id\":\"TD4in1\",\"tag\":\"0208\",\"condition\":[\"manufacturerdata\",\"index\",4,\"1b\",\"&\",\"manufacturerdata\",\"=\",32,\"index\",0,\"3301\"],\"properties\":{\"tempc\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",16,4,false,true],\"post_proc\":[\"/\",10]},\"hum\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",20,4,false,false],\"post_proc\":[\"/\",10]},\"pres\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",24,4,false,false],\"post_proc\":[\"/\",10]},\"batt\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",6,2,false,false]}}}"; 2 | /*R""""( 3 | { 4 | "brand":"Blue Maestro", 5 | "model":"Tempo Disc", 6 | "model_id":"TD4in1", 7 | "tag":"0208", 8 | "condition":["manufacturerdata", "index", 4, "1b", "&", "manufacturerdata", "=", 32, "index", 0, "3301"], 9 | "properties":{ 10 | "tempc":{ 11 | "decoder":["value_from_hex_data", "manufacturerdata", 16, 4, false, true], 12 | "post_proc":["/", 10] 13 | }, 14 | "hum":{ 15 | "decoder":["value_from_hex_data", "manufacturerdata", 20, 4, false, false], 16 | "post_proc":["/", 10] 17 | }, 18 | "pres":{ 19 | "decoder":["value_from_hex_data", "manufacturerdata", 24, 4, false, false], 20 | "post_proc":["/", 10] 21 | }, 22 | "batt":{ 23 | "decoder":["value_from_hex_data", "manufacturerdata", 6, 2, false, false] 24 | } 25 | } 26 | })"""";*/ 27 | 28 | const char* _BM4IN1_json_props = "{\"properties\":{\"tempc\":{\"unit\":\"°C\",\"name\":\"temperature\"},\"hum\":{\"unit\":\"%\",\"name\":\"humidity\"},\"pres\":{\"unit\":\"hPa\",\"name\":\"pressure\"},\"batt\":{\"unit\":\"%\",\"name\":\"battery\"}}}"; 29 | /*R""""( 30 | { 31 | "properties": { 32 | "tempc": { 33 | "unit": "°C", 34 | "name": "temperature" 35 | }, 36 | "hum": { 37 | "unit": "%", 38 | "name": "humidity" 39 | }, 40 | "pres":{ 41 | "unit":"hPa", 42 | "name":"pressure" 43 | }, 44 | "batt": { 45 | "unit": "%", 46 | "name": "battery" 47 | } 48 | } 49 | })"""";*/ 50 | -------------------------------------------------------------------------------- /src/devices/BM6_json.h: -------------------------------------------------------------------------------- 1 | const char* _BM6_json = "{\"brand\":\"GENERIC\",\"model\":\"BM6 Battery Monitor\",\"model_id\":\"BM6\",\"tag\":\"0808\",\"condition\":[\"manufacturerdata\",\"=\",50,\"index\",0,\"4c0002153ba29cd9a42c894856badaf2606ef777\"],\"properties\":{\"batt\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",42,2,false]},\"device\":{\"decoder\":[\"static_value\",\"BM6 Tracker\"]}}}"; 2 | /*R""""( 3 | { 4 | "brand":"GENERIC", 5 | "model":"BM6 Battery Monitor", 6 | "model_id":"BM6", 7 | "tag":"0808", 8 | "condition":["manufacturerdata", "=", 50, "index", 0, "4c0002153ba29cd9a42c894856badaf2606ef777"], 9 | "properties":{ 10 | "batt":{ 11 | "decoder":["value_from_hex_data", "manufacturerdata", 42, 2, false] 12 | }, 13 | "device":{ 14 | "decoder":["static_value", "BM6 Tracker"] 15 | } 16 | } 17 | })"""";*/ 18 | 19 | const char* _BM6_json_props = "{\"properties\":{\"batt\":{\"unit\":\"%\",\"name\":\"battery\"},\"device\":{\"unit\":\"string\",\"name\":\"tracker device\"}}}"; 20 | /*R""""( 21 | { 22 | "properties":{ 23 | "batt":{ 24 | "unit":"%", 25 | "name":"battery" 26 | }, 27 | "device":{ 28 | "unit":"string", 29 | "name":"tracker device" 30 | } 31 | } 32 | })"""";*/ 33 | -------------------------------------------------------------------------------- /src/devices/BWBSDOO_json.h: -------------------------------------------------------------------------------- 1 | const char* _BWBSDOO_json = "{\"brand\":\"Otio/BeeWi\",\"model\":\"Door & Window Sensor\",\"model_id\":\"BSDOO\",\"tag\":\"0405\",\"condition\":[\"manufacturerdata\",\"=\",14,\"index\",4,\"080c\"],\"properties\":{\"open\":{\"decoder\":[\"bit_static_value\",\"manufacturerdata\",9,0,false,true]},\"batt\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",12,2,false,false]}}}"; 2 | /*R""""( 3 | { 4 | "brand":"Otio/BeeWi", 5 | "model":"Door & Window Sensor", 6 | "model_id":"BSDOO", 7 | "tag":"0405", 8 | "condition":["manufacturerdata", "=", 14, "index", 4, "080c"], 9 | "properties":{ 10 | "open":{ 11 | "decoder":["bit_static_value", "manufacturerdata", 9, 0, false, true] 12 | }, 13 | "batt":{ 14 | "decoder":["value_from_hex_data", "manufacturerdata", 12, 2, false, false] 15 | } 16 | } 17 | })"""";*/ 18 | 19 | const char* _BWBSDOO_json_props = "{\"properties\":{\"open\":{\"unit\":\"status\",\"name\":\"door\"},\"batt\":{\"unit\":\"%\",\"name\":\"battery\"}}}"; 20 | /*R""""( 21 | { 22 | "properties":{ 23 | "open":{ 24 | "unit":"status", 25 | "name":"door" 26 | }, 27 | "batt":{ 28 | "unit":"%", 29 | "name":"battery" 30 | } 31 | } 32 | })"""";*/ 33 | -------------------------------------------------------------------------------- /src/devices/CGD1_json.h: -------------------------------------------------------------------------------- 1 | #include "common_props.h" 2 | 3 | const char* _CGD1_json = "{\"brand\":\"ClearGrass/Qingping\",\"model\":\"Alarm Clock\",\"model_id\":\"CGC1/CGD1\",\"tag\":\"01\",\"condition\":[\"servicedata\",\"=\",34,\"index\",2,\"0c\",\"|\",\"servicedata\",\"=\",34,\"index\",2,\"1e\",\"&\",\"uuid\",\"index\",0,\"fdcd\"],\"properties\":{\"tempc\":{\"decoder\":[\"value_from_hex_data\",\"servicedata\",20,4,true,true],\"post_proc\":[\"/\",10]},\"hum\":{\"decoder\":[\"value_from_hex_data\",\"servicedata\",24,4,true,false],\"post_proc\":[\"/\",10]},\"batt\":{\"decoder\":[\"value_from_hex_data\",\"servicedata\",32,2,false,false],\"post_proc\":[\"&\",127]},\"mac\":{\"decoder\":[\"revmac_from_hex_data\",\"servicedata\",4]}}}"; 4 | 5 | /*R""""( 6 | { 7 | "brand":"ClearGrass/Qingping", 8 | "model":"Alarm Clock", 9 | "model_id":"CGC1/CGD1", 10 | "tag":"01", 11 | "condition":["servicedata", "=", 34, "index", 2, "0c", "|", "servicedata", "=", 34, "index", 2, "1e", "&", "uuid", "index", 0, "fdcd"], 12 | "properties":{ 13 | "tempc":{ 14 | "decoder":["value_from_hex_data", "servicedata", 20, 4, true, true], 15 | "post_proc":["/", 10] 16 | }, 17 | "hum":{ 18 | "decoder":["value_from_hex_data", "servicedata", 24, 4, true, false], 19 | "post_proc":["/", 10] 20 | }, 21 | "batt":{ 22 | "decoder":["value_from_hex_data", "servicedata", 32, 2, false, false], 23 | "post_proc":["&", 127] 24 | }, 25 | "mac":{ 26 | "decoder":["revmac_from_hex_data", "servicedata", 4] 27 | } 28 | } 29 | })"""";*/ 30 | 31 | const char* _CGD1_json_props = _common_BTHM_props; 32 | -------------------------------------------------------------------------------- /src/devices/CGH1_json.h: -------------------------------------------------------------------------------- 1 | const char* _CGH1_json = "{\"brand\":\"Qingping\",\"model\":\"Contact Sensor\",\"model_id\":\"CGH1\",\"tag\":\"0404\",\"condition\":[\"servicedata\",\"=\",34,\"index\",2,\"04\",\"|\",\"servicedata\",\"=\",28,\"index\",2,\"04\",\"&\",\"uuid\",\"index\",0,\"fdcd\"],\"properties\":{\"open\":{\"condition\":[\"servicedata\",\"=\",28],\"decoder\":[\"bit_static_value\",\"servicedata\",21,0,true,false]},\"_open\":{\"condition\":[\"servicedata\",\"=\",34],\"decoder\":[\"bit_static_value\",\"servicedata\",33,0,true,false]},\"mac\":{\"decoder\":[\"revmac_from_hex_data\",\"servicedata\",4]}}}"; 2 | /*R""""( 3 | { 4 | "brand":"Qingping", 5 | "model":"Contact Sensor", 6 | "model_id":"CGH1", 7 | "tag":"0404", 8 | "condition":["servicedata", "=", 34, "index", 2, "04", "|", "servicedata", "=", 28, "index", 2, "04", "&", "uuid", "index", 0, "fdcd"], 9 | "properties":{ 10 | "open":{ 11 | "condition":["servicedata", "=", 28], 12 | "decoder":["bit_static_value", "servicedata", 21, 0, true, false] 13 | }, 14 | "_open":{ 15 | "condition":["servicedata", "=", 34], 16 | "decoder":["bit_static_value", "servicedata", 33, 0, true, false] 17 | }, 18 | "mac":{ 19 | "decoder":["revmac_from_hex_data", "servicedata", 4] 20 | } 21 | } 22 | })"""";*/ 23 | 24 | const char* _CGH1_json_props = "{\"properties\":{\"open\":{\"unit\":\"status\",\"name\":\"door\"},\"mac\":{\"unit\":\"string\",\"name\":\"MAC address\"}}}"; 25 | /*R""""( 26 | { 27 | "properties":{ 28 | "open":{ 29 | "unit":"status", 30 | "name":"door" 31 | }, 32 | "mac":{ 33 | "unit":"string", 34 | "name":"MAC address" 35 | } 36 | } 37 | })"""";*/ 38 | -------------------------------------------------------------------------------- /src/devices/ECOFLOW_ADV_json.h: -------------------------------------------------------------------------------- 1 | const char* _ECOFLOW_ADV_json = "{\"brand\":\"EcoFlow\",\"model\":\"Power Station\",\"model_id\":\"ECOFLOW_ADV\",\"tag\":\"1409\",\"condition\":[\"manufacturerdata\",\"=\",52,\"index\",0,\"b5b5\"],\"properties\":{\"version\":{\"decoder\":[\"string_from_hex_data\",\"manufacturerdata\",6,6],\"lookup\":[\"00\",\"off\",\"523630\",\"RIVER 2\",\"523631\",\"RIVER 2 Max\",\"523632\",\"RIVER 2 Pro\",\"523635\",\"RIVER 3\",\"523333\",\"DELTA 2\"]},\"batt\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",38,2,false,false],\"post_proc\":[\"&\",127]}}}"; 2 | /*R""""( 3 | { 4 | "brand":"EcoFlow", 5 | "model":"Power Station", 6 | "model_id":"ECOFLOW_ADV", 7 | "tag":"1409", 8 | "condition":["manufacturerdata", "=", 52, "index", 0, "b5b5"], 9 | "properties":{ 10 | "version":{ 11 | "decoder":["string_from_hex_data", "manufacturerdata", 6, 6], 12 | "lookup":["00", "off", 13 | "523630", "RIVER 2", 14 | "523631", "RIVER 2 Max", 15 | "523632", "RIVER 2 Pro", 16 | "523635", "RIVER 3", 17 | "523333", "DELTA 2"] 18 | }, 19 | "batt":{ 20 | "decoder":["value_from_hex_data", "manufacturerdata", 38, 2, false, false], 21 | "post_proc":["&", 127] 22 | } 23 | } 24 | })"""";*/ 25 | 26 | const char* _ECOFLOW_ADV_json_props = "{\"properties\":{\"version\":{\"unit\":\"string\",\"name\":\"model version\"},\"batt\":{\"unit\":\"%\",\"name\":\"battery\"}}}"; 27 | /*R""""( 28 | { 29 | "properties": { 30 | "version":{ 31 | "unit":"string", 32 | "name":"model version" 33 | }, 34 | "batt": { 35 | "unit": "%", 36 | "name": "battery" 37 | } 38 | } 39 | })"""";*/ 40 | -------------------------------------------------------------------------------- /src/devices/GAEN_json.h: -------------------------------------------------------------------------------- 1 | const char* _GAEN_json = "{\"brand\":\"GENERIC\",\"model\":\"GAEN\",\"model_id\":\"GAEN\",\"tag\":\"fe\",\"condition\":[\"uuid\",\"index\",0,\"fd6f\"],\"properties\":{\"rpi\":{\"decoder\":[\"string_from_hex_data\",\"servicedata\",0,32]},\"aem\":{\"decoder\":[\"string_from_hex_data\",\"servicedata\",32,8]}}}"; 2 | 3 | /*R""""( 4 | { 5 | "brand":"GENERIC", 6 | "model":"GAEN", 7 | "model_id":"GAEN", 8 | "tag":"fe", 9 | "condition":["uuid", "index", 0, "fd6f"], 10 | "properties":{ 11 | "rpi":{ 12 | "decoder":["string_from_hex_data", "servicedata", 0, 32] 13 | }, 14 | "aem":{ 15 | "decoder":["string_from_hex_data", "servicedata", 32, 8] 16 | } 17 | } 18 | })"""";*/ 19 | 20 | const char* _GAEN_json_props = "{\"properties\":{\"rpi\":{\"unit\":\"hex\",\"name\":\"rolling proximity identifier\"},\"aem\":{\"unit\":\"hex\",\"name\":\"associated encrypted metadata\"}}}"; 21 | /*R""""( 22 | { 23 | "properties":{ 24 | "rpi":{ 25 | "unit":"hex", 26 | "name":"rolling proximity identifier" 27 | }, 28 | "aem":{ 29 | "unit":"hex", 30 | "name":"associated encrypted metadata" 31 | } 32 | } 33 | })"""";*/ 34 | -------------------------------------------------------------------------------- /src/devices/H5072_json.h: -------------------------------------------------------------------------------- 1 | #include "common_props.h" 2 | 3 | const char* _H5072_json = "{\"brand\":\"Govee\",\"model\":\"Thermo-Hygrometer\",\"model_id\":\"H5072/75\",\"tag\":\"0103\",\"condition\":[\"name\",\"index\",0,\"GVH5072\",\"|\",\"name\",\"index\",0,\"GVH5075\",\"&\",\"manufacturerdata\",\">=\",16,\"index\",0,\"88ec\"],\"properties\":{\"tempc\":{\"condition\":[\"manufacturerdata\",6,\"bit\",3,0],\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",6,6,false,false],\"post_proc\":[\"/\",1000,\">\",0,\"/\",10]},\"_tempc\":{\"condition\":[\"manufacturerdata\",6,\"bit\",3,1],\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",6,6,false,false],\"post_proc\":[\"&\",8388607,\"/\",10000,\"*\",-1]},\"hum\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",6,6,false,false],\"post_proc\":[\"&\",8388607,\"%\",1000,\"/\",10]},\"batt\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",12,2,false,false]}}}"; 4 | 5 | /* R""""( 6 | { 7 | "brand":"Govee", 8 | "model":"Thermo-Hygrometer", 9 | "model_id":"H5072/75", 10 | "tag":"0103", 11 | "condition":["name", "index", 0, "GVH5072", "|", "name", "index", 0, "GVH5075", "&", "manufacturerdata", ">=", 16, "index", 0, "88ec"], 12 | "properties":{ 13 | "tempc":{ 14 | "condition":["manufacturerdata", 6, "bit", 3, 0], 15 | "decoder":["value_from_hex_data", "manufacturerdata", 6, 6, false, false], 16 | "post_proc":["/", 1000, ">", 0, "/", 10] 17 | }, 18 | "_tempc":{ 19 | "condition":["manufacturerdata", 6, "bit", 3, 1], 20 | "decoder":["value_from_hex_data", "manufacturerdata", 6, 6, false, false], 21 | "post_proc":["&", 8388607, "/", 10000, "*", -1] 22 | }, 23 | "hum":{ 24 | "decoder":["value_from_hex_data", "manufacturerdata", 6, 6, false, false], 25 | "post_proc":["&", 8388607, "%", 1000, "/", 10] 26 | }, 27 | "batt":{ 28 | "decoder":["value_from_hex_data", "manufacturerdata", 12, 2, false, false] 29 | } 30 | } 31 | })"""";*/ 32 | 33 | const char* _H5072_json_props = _common_BTH_props; 34 | -------------------------------------------------------------------------------- /src/devices/H5074_json.h: -------------------------------------------------------------------------------- 1 | #include "common_props.h" 2 | 3 | const char* _H5074_json = "{\"brand\":\"Govee\",\"model\":\"Thermo-Hygrometer\",\"model_id\":\"H5074\",\"tag\":\"0103\",\"condition\":[\"name\",\"index\",0,\"Govee_H5074\",\"&\",\"manufacturerdata\",\">=\",18,\"index\",0,\"88ec\"],\"properties\":{\"tempc\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",6,4,true,true],\"post_proc\":[\"/\",100]},\"hum\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",10,4,true,false],\"post_proc\":[\"/\",100]},\"batt\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",14,2,false,false]}}}"; 4 | /* R""""( 5 | { 6 | "brand":"Govee", 7 | "model":"Thermo-Hygrometer", 8 | "model_id":"H5074", 9 | "tag":"0103", 10 | "condition":["name", "index", 0, "Govee_H5074", "&", "manufacturerdata", ">=", 18, "index", 0, "88ec"], 11 | "properties":{ 12 | "tempc":{ 13 | "decoder":["value_from_hex_data", "manufacturerdata", 6, 4, true, true], 14 | "post_proc":["/", 100] 15 | }, 16 | "hum":{ 17 | "decoder":["value_from_hex_data", "manufacturerdata", 10, 4, true, false], 18 | "post_proc":["/", 100] 19 | }, 20 | "batt":{ 21 | "decoder":["value_from_hex_data", "manufacturerdata", 14, 2, false, false] 22 | } 23 | } 24 | })"""";*/ 25 | 26 | const char* _H5074_json_props = _common_BTH_props; 27 | -------------------------------------------------------------------------------- /src/devices/H5179_json.h: -------------------------------------------------------------------------------- 1 | #include "common_props.h" 2 | 3 | const char* _H5179_json = "{\"brand\":\"Govee\",\"model\":\"Thermo-Hygrometer\",\"model_id\":\"H5179\",\"tag\":\"0103\",\"condition\":[\"name\",\"index\",0,\"Govee_H5179\",\"&\",\"manufacturerdata\",\"=\",22,\"index\",0,\"0188ec\"],\"properties\":{\"tempc\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",12,4,true,true],\"post_proc\":[\"/\",100]},\"hum\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",16,4,true,false],\"post_proc\":[\"/\",100]},\"batt\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",20,2,false,false]}}}"; 4 | /* R""""( 5 | { 6 | "brand":"Govee", 7 | "model":"Thermo-Hygrometer", 8 | "model_id":"H5179", 9 | "tag":"0103", 10 | "condition":["name", "index", 0, "Govee_H5179", "&", "manufacturerdata", "=", 22, "index", 0, "0188ec"], 11 | "properties":{ 12 | "tempc":{ 13 | "decoder":["value_from_hex_data", "manufacturerdata", 12, 4, true, true], 14 | "post_proc":["/", 100] 15 | }, 16 | "hum":{ 17 | "decoder":["value_from_hex_data", "manufacturerdata", 16, 4, true, false], 18 | "post_proc":["/", 100] 19 | }, 20 | "batt":{ 21 | "decoder":["value_from_hex_data", "manufacturerdata", 20, 2, false, false] 22 | } 23 | } 24 | })"""";*/ 25 | 26 | const char* _H5179_json_props = _common_BTH_props; 27 | -------------------------------------------------------------------------------- /src/devices/HHCCJCY10_json.h: -------------------------------------------------------------------------------- 1 | const char* _HHCCJCY10_json = "{\"brand\":\"Xiaomi/VegTrug\",\"model\":\"MiFlora\",\"model_id\":\"HHCCJCY10\",\"tag\":\"09\",\"condition\":[\"servicedata\",\"=\",18,\"&\",\"uuid\",\"index\",0,\"fd50\"],\"properties\":{\"tempc\":{\"decoder\":[\"value_from_hex_data\",\"servicedata\",2,4,false,true],\"post_proc\":[\"/\",10]},\"moi\":{\"decoder\":[\"value_from_hex_data\",\"servicedata\",0,2,false,false]},\"lux\":{\"decoder\":[\"value_from_hex_data\",\"servicedata\",6,6,false,false]},\"fer\":{\"decoder\":[\"value_from_hex_data\",\"servicedata\",14,4,false,false]},\"batt\":{\"decoder\":[\"value_from_hex_data\",\"servicedata\",12,2,false,false]}}}"; 2 | /*R""""( 3 | { 4 | "brand":"Xiaomi/VegTrug", 5 | "model":"MiFlora", 6 | "model_id":"HHCCJCY10", 7 | "tag":"09", 8 | "condition":["servicedata", "=", 18, "&", "uuid", "index", 0, "fd50"], 9 | "properties":{ 10 | "tempc":{ 11 | "decoder":["value_from_hex_data", "servicedata", 2, 4, false, true], 12 | "post_proc":["/", 10] 13 | }, 14 | "moi":{ 15 | "decoder":["value_from_hex_data", "servicedata", 0, 2, false, false] 16 | }, 17 | "lux":{ 18 | "decoder":["value_from_hex_data", "servicedata", 6, 6, false, false] 19 | }, 20 | "fer":{ 21 | "decoder":["value_from_hex_data", "servicedata", 14, 4, false, false] 22 | }, 23 | "batt":{ 24 | "decoder":["value_from_hex_data", "servicedata", 12, 2, false, false] 25 | } 26 | } 27 | })"""";*/ 28 | 29 | const char* _HHCCJCY10_json_props = "{\"properties\":{\"tempc\":{\"unit\":\"°C\",\"name\":\"temperature\"},\"moi\":{\"unit\":\"%\",\"name\":\"moisture\"},\"lux\":{\"unit\":\"lx\",\"name\":\"illuminance\"},\"fer\":{\"unit\":\"µS/cm\",\"name\":\"fertility\"},\"batt\":{\"unit\":\"%\",\"name\":\"battery\"}}}"; 30 | /*R""""( 31 | { 32 | "properties":{ 33 | "tempc":{ 34 | "unit":"°C", 35 | "name":"temperature" 36 | }, 37 | "moi":{ 38 | "unit":"%", 39 | "name":"moisture" 40 | }, 41 | "lux":{ 42 | "unit":"lx", 43 | "name":"illuminance" 44 | }, 45 | "fer":{ 46 | "unit":"µS/cm", 47 | "name":"fertility" 48 | }, 49 | "batt":{ 50 | "unit":"%", 51 | "name":"battery" 52 | } 53 | } 54 | })"""";*/ 55 | -------------------------------------------------------------------------------- /src/devices/HHCCPOT002_json.h: -------------------------------------------------------------------------------- 1 | const char* _HHCCPOT002_json = "{\"brand\":\"Xiaomi\",\"model\":\"RoPot\",\"model_id\":\"HHCCPOT002\",\"tag\":\"09\",\"condition\":[\"servicedata\",\"index\",2,\"205d01\"],\"properties\":{\"moi\":{\"condition\":[\"servicedata\",25,\"8\"],\"decoder\":[\"value_from_hex_data\",\"servicedata\",30,2,false]},\"fer\":{\"condition\":[\"servicedata\",25,\"9\"],\"decoder\":[\"value_from_hex_data\",\"servicedata\",30,4,true]},\"mac\":{\"decoder\":[\"revmac_from_hex_data\",\"servicedata\",10]}}}"; 2 | /*R""""( 3 | { 4 | "brand":"Xiaomi", 5 | "model":"RoPot", 6 | "model_id":"HHCCPOT002", 7 | "tag":"09", 8 | "condition":["servicedata", "index", 2, "205d01"], 9 | "properties":{ 10 | "moi":{ 11 | "condition":["servicedata", 25, "8"], 12 | "decoder":["value_from_hex_data", "servicedata", 30, 2, false] 13 | }, 14 | "fer":{ 15 | "condition":["servicedata", 25, "9"], 16 | "decoder":["value_from_hex_data", "servicedata", 30, 4, true] 17 | }, 18 | "mac":{ 19 | "decoder":["revmac_from_hex_data", "servicedata", 10] 20 | } 21 | } 22 | })"""";*/ 23 | 24 | const char* _HHCCPOT002_json_props = "{\"properties\":{\"moi\":{\"unit\":\"%\",\"name\":\"moisture\"},\"fer\":{\"unit\":\"µS/cm\",\"name\":\"fertility\"},\"mac\":{\"unit\":\"string\",\"name\":\"MAC address\"}}}"; 25 | /*R""""( 26 | { 27 | "properties":{ 28 | "moi":{ 29 | "unit":"%", 30 | "name":"moisture" 31 | }, 32 | "fer":{ 33 | "unit":"µS/cm", 34 | "name":"fertility" 35 | }, 36 | "mac":{ 37 | "unit":"string", 38 | "name":"MAC address" 39 | } 40 | } 41 | })"""";*/ 42 | -------------------------------------------------------------------------------- /src/devices/HOBOMX2001_json.h: -------------------------------------------------------------------------------- 1 | const char* _HOBOMX2001_json = "{\"brand\":\"Onset\",\"model\":\"Hobo Water Level Sensor\",\"model_id\":\"HOBOMX2001\",\"tag\":\"ff\",\"condition\":[\"manufacturerdata\",\"=\",44,\"index\",0,\"c500\"],\"properties\":{\"lvl_cm\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",36,8,true,true,true],\"post_proc\":[\"*\",100]}}}"; 2 | /* R""""( 3 | { 4 | "brand":"Onset", 5 | "model":"Hobo Water Level Sensor", 6 | "model_id":"HOBOMX2001", 7 | "tag":"ff", 8 | "condition":["manufacturerdata", "=", 44, "index", 0, "c500"], 9 | "properties":{ 10 | "lvl_cm":{ 11 | "decoder":["value_from_hex_data", "manufacturerdata", 36, 8, true, true, true], 12 | "post_proc":["*", 100] 13 | } 14 | } 15 | })"""";*/ 16 | 17 | const char* _HOBOMX2001_json_props = "{\"properties\":{\"lvl_cm\":{\"unit\":\"cm\",\"name\":\"distance\"}}}"; 18 | /*R""""( 19 | { 20 | "properties":{ 21 | "lvl_cm":{ 22 | "unit":"cm", 23 | "name":"distance" 24 | } 25 | } 26 | })"""";*/ 27 | -------------------------------------------------------------------------------- /src/devices/HOLYIOT_json.h: -------------------------------------------------------------------------------- 1 | const char* _HOLYIOT_json = "{\"brand\":\"HolyIoT\",\"model\":\"Beacon\",\"model_id\":\"HOLYIOT\",\"tag\":\"1009\",\"condition\":[\"manufacturerdata\",\"=\",50,\"index\",0,\"4c000215\",\"&\",\"servicedata\",\"=\",26,\"index\",0,\"416\",\"&\",\"uuid\",\"index\",0,\"5242\"],\"properties\":{\"batt\":{\"decoder\":[\"value_from_hex_data\",\"servicedata\",2,2]},\"device\":{\"decoder\":[\"static_value\",\"HolyIoT Beacon Tracker\"]}}}"; 2 | /*R""""( 3 | { 4 | "brand":"HolyIoT", 5 | "model":"Beacon", 6 | "model_id":"HOLYIOT", 7 | "tag":"1009", 8 | "condition":["manufacturerdata", "=", 50, "index", 0, "4c000215", "&", "servicedata", "=", 26, "index", 0, "416", "&", "uuid", "index", 0, "5242"], 9 | "properties":{ 10 | "batt":{ 11 | "decoder":["value_from_hex_data", "servicedata", 2, 2] 12 | }, 13 | "device":{ 14 | "decoder":["static_value", "HolyIoT Beacon Tracker"] 15 | } 16 | } 17 | })"""";*/ 18 | 19 | const char* _HOLYIOT_json_props = "{\"properties\":{\"batt\":{\"unit\":\"%\",\"name\":\"battery\"},\"device\":{\"unit\":\"string\",\"name\":\"tracker device\"}}}"; 20 | /*R""""( 21 | { 22 | "properties":{ 23 | "batt":{ 24 | "unit":"%", 25 | "name":"battery" 26 | }, 27 | "device":{ 28 | "unit":"string", 29 | "name":"tracker device" 30 | } 31 | } 32 | })"""";*/ 33 | -------------------------------------------------------------------------------- /src/devices/JAALEE_json.h: -------------------------------------------------------------------------------- 1 | #include "common_props.h" 2 | 3 | const char* _JAALEE_json = "{\"brand\":\"Jaalee\",\"model\":\"TH sensor\",\"model_id\":\"F525/F51C\",\"tag\":\"0102\",\"condition\":[\"uuid\",\"contain\",\"f525\",\"|\",\"uuid\",\"contain\",\"f51c\",\"&\",\"manufacturerdata\",\"=\",52],\"properties\":{\"tempc\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",40,4,false],\"post_proc\":[\"*\",175,\"/\",65535,\"-\",45]},\"hum\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",44,4,false,false],\"post_proc\":[\"*\",100,\"/\",65535]},\"batt\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",50,2,false,false]}}}"; 4 | /* R""""( 5 | { 6 | "brand":"Jaalee", 7 | "model":"TH sensor", 8 | "model_id":"F525/F51C", 9 | "tag":"0102", 10 | "condition":["uuid", "contain", "f525", "|", "uuid", "contain", "f51c" , "&", "manufacturerdata", "=", 52], 11 | "properties":{ 12 | "tempc":{ 13 | "decoder":["value_from_hex_data", "manufacturerdata", 40, 4, false], 14 | "post_proc":["*", 175, "/", 65535, "-", 45] 15 | }, 16 | "hum":{ 17 | "decoder":["value_from_hex_data", "manufacturerdata", 44, 4, false, false], 18 | "post_proc":["*", 100, "/", 65535] 19 | }, 20 | "batt":{ 21 | "decoder":["value_from_hex_data", "manufacturerdata", 50, 2, false, false] 22 | } 23 | } 24 | })"""";*/ 25 | 26 | const char* _JAALEE_json_props = _common_BTH_props; 27 | -------------------------------------------------------------------------------- /src/devices/LYWSD02_json.h: -------------------------------------------------------------------------------- 1 | #include "common_props.h" 2 | 3 | const char* _LYWSD02_json = "{\"brand\":\"Xiaomi/Mijia\",\"model\":\"e-ink Clock\",\"model_id\":\"LYWSD02\",\"tag\":\"01\",\"condition\":[\"uuid\",\"index\",0,\"fe95\",\"&\",\"servicedata\",\"index\",4,\"5b04\"],\"properties\":{\"tempc\":{\"condition\":[\"servicedata\",24,\"0410\"],\"decoder\":[\"value_from_hex_data\",\"servicedata\",30,4,true],\"post_proc\":[\"/\",10]},\"hum\":{\"condition\":[\"servicedata\",24,\"0610\"],\"decoder\":[\"value_from_hex_data\",\"servicedata\",30,4,true,false],\"post_proc\":[\"/\",10]},\"batt\":{\"condition\":[\"servicedata\",24,\"0a10\"],\"decoder\":[\"value_from_hex_data\",\"servicedata\",30,2,false,false]},\"mac\":{\"decoder\":[\"revmac_from_hex_data\",\"servicedata\",10]}}}"; 4 | /* R""""( 5 | { 6 | "brand":"Xiaomi/Mijia", 7 | "model":"e-ink Clock", 8 | "model_id":"LYWSD02", 9 | "tag":"01", 10 | "condition":["uuid", "index", 0, "fe95", "&", "servicedata", "index", 4, "5b04"], 11 | "properties":{ 12 | "tempc":{ 13 | "condition":["servicedata", 24, "0410"], 14 | "decoder":["value_from_hex_data", "servicedata", 30, 4, true], 15 | "post_proc":["/", 10] 16 | }, 17 | "hum":{ 18 | "condition":["servicedata", 24, "0610"], 19 | "decoder":["value_from_hex_data", "servicedata", 30, 4, true, false], 20 | "post_proc":["/", 10] 21 | }, 22 | "batt":{ 23 | "condition":["servicedata", 24, "0a10"], 24 | "decoder":["value_from_hex_data", "servicedata", 30, 2, false, false] 25 | }, 26 | "mac":{ 27 | "decoder":["revmac_from_hex_data", "servicedata", 10] 28 | } 29 | } 30 | })"""";*/ 31 | 32 | const char* _LYWSD02_json_props = _common_BTHM_props; 33 | -------------------------------------------------------------------------------- /src/devices/LYWSD03MMC_ENCR_json.h: -------------------------------------------------------------------------------- 1 | const char* _LYWSD03MMC_ENCR_json_PVVX = "{\"brand\":\"Xiaomi\",\"model\":\"TH Sensor\",\"model_id\":\"LYWSD03MMC/MJWSD05MMC_PVVX_ENCR\",\"tag\":\"010001\",\"condition\":[\"servicedata\",\"=\",22,\"&\",\"uuid\",\"index\",0,\"181a\"],\"properties\":{\"cipher\":{\"decoder\":[\"string_from_hex_data\",\"servicedata\",2,12]},\"ctr\":{\"decoder\":[\"string_from_hex_data\",\"servicedata\",0,2]},\"mic\":{\"decoder\":[\"string_from_hex_data\",\"servicedata\",14,8]}}}"; 2 | /*R""""( 3 | { 4 | "brand":"Xiaomi", 5 | "model":"TH Sensor", 6 | "model_id":"LYWSD03MMC/MJWSD05MMC_PVVX_ENCR", 7 | "tag":"010001", 8 | "condition":["servicedata", "=", 22, "&", "uuid", "index", 0, "181a"], 9 | "properties":{ 10 | "cipher":{ 11 | "decoder":["string_from_hex_data", "servicedata", 2, 12] 12 | }, 13 | "ctr":{ 14 | "decoder":["string_from_hex_data", "servicedata", 0, 2] 15 | }, 16 | "mic":{ 17 | "decoder":["string_from_hex_data", "servicedata", 14, 8] 18 | } 19 | } 20 | })"""";*/ 21 | 22 | const char* _LYWSD03MMC_ENCR_json_props = "{\"properties\":{\"cipher\":{\"unit\":\"hex\",\"name\":\"ciphertext\"},\"ctr\":{\"unit\":\"hex\",\"name\":\"counter\"},\"mic\":{\"unit\":\"hex\",\"name\":\"message integrity check\"}}}"; 23 | /*R""""( 24 | { 25 | "properties":{ 26 | "cipher":{ 27 | "unit":"hex", 28 | "name":"ciphertext" 29 | }, 30 | "ctr":{ 31 | "unit":"hex", 32 | "name":"counter" 33 | }, 34 | "mic":{ 35 | "unit":"hex", 36 | "name":"message integrity check" 37 | } 38 | } 39 | })"""";*/ 40 | -------------------------------------------------------------------------------- /src/devices/LYWSDCGQ_json.h: -------------------------------------------------------------------------------- 1 | #include "common_props.h" 2 | 3 | const char* _LYWSDCGQ_json = "{\"brand\":\"Xiaomi\",\"model\":\"Mi Jia round\",\"model_id\":\"LYWSDCGQ\",\"tag\":\"01\",\"condition\":[\"servicedata\",\"index\",2,\"20aa01\"],\"properties\":{\"batt\":{\"condition\":[\"servicedata\",23,\"a\"],\"decoder\":[\"value_from_hex_data\",\"servicedata\",28,2,false,false]},\"tempc\":{\"condition\":[\"servicedata\",23,\"d\",\"|\",\"servicedata\",23,\"4\"],\"decoder\":[\"value_from_hex_data\",\"servicedata\",28,4,true],\"post_proc\":[\"/\",10]},\"hum\":{\"condition\":[\"servicedata\",23,\"d\"],\"decoder\":[\"value_from_hex_data\",\"servicedata\",32,4,true,false],\"post_proc\":[\"/\",10]},\"_hum\":{\"condition\":[\"servicedata\",23,\"6\"],\"decoder\":[\"value_from_hex_data\",\"servicedata\",28,4,true,false],\"post_proc\":[\"/\",10]},\"mac\":{\"decoder\":[\"revmac_from_hex_data\",\"servicedata\",10]}}}"; 4 | /*R""""( 5 | { 6 | "brand":"Xiaomi", 7 | "model":"Mi Jia round", 8 | "model_id":"LYWSDCGQ", 9 | "tag":"01", 10 | "condition":["servicedata", "index", 2, "20aa01"], 11 | "properties":{ 12 | "batt":{ 13 | "condition":["servicedata", 23, "a"], 14 | "decoder":["value_from_hex_data", "servicedata", 28, 2, false, false] 15 | }, 16 | "tempc":{ 17 | "condition":["servicedata", 23, "d", "|", "servicedata", 23, "4"], 18 | "decoder":["value_from_hex_data", "servicedata", 28, 4, true], 19 | "post_proc":["/", 10] 20 | }, 21 | "hum":{ 22 | "condition":["servicedata", 23, "d"], 23 | "decoder":["value_from_hex_data", "servicedata", 32, 4, true, false], 24 | "post_proc":["/", 10] 25 | }, 26 | "_hum":{ 27 | "condition":["servicedata", 23, "6"], 28 | "decoder":["value_from_hex_data", "servicedata", 28, 4, true, false], 29 | "post_proc":["/", 10] 30 | }, 31 | "mac":{ 32 | "decoder":["revmac_from_hex_data", "servicedata", 10] 33 | } 34 | } 35 | })"""";*/ 36 | 37 | const char* _LYWSDCGQ_json_props = _common_BTHM_props; 38 | -------------------------------------------------------------------------------- /src/devices/MS_CDP_json.h: -------------------------------------------------------------------------------- 1 | const char* _MS_CDP_json = "{\"brand\":\"GENERIC\",\"model\":\"MS-CDP\",\"model_id\":\"MS-CDP\",\"tag\":\"fe\",\"condition\":[\"manufacturerdata\",\"index\",0,\"060001\"],\"properties\":{\"device\":{\"decoder\":[\"static_value\",\"Microsoft advertising beacon\"]}}}"; 2 | /*R""""( 3 | { 4 | "brand":"GENERIC", 5 | "model":"MS-CDP", 6 | "model_id":"MS-CDP", 7 | "tag":"fe", 8 | "condition":["manufacturerdata", "index", 0, "060001"], 9 | "properties":{ 10 | "device":{ 11 | "decoder":["static_value", "Microsoft advertising beacon"] 12 | } 13 | } 14 | })"""";*/ 15 | 16 | const char* _MS_CDP_json_props = "{\"properties\":{\"device\":{\"unit\":\"string\",\"name\":\"device type\"}}}"; 17 | /*R""""( 18 | { 19 | "properties":{ 20 | "device":{ 21 | "unit":"string", 22 | "name":"device type" 23 | } 24 | } 25 | })"""";*/ 26 | -------------------------------------------------------------------------------- /src/devices/MUE4094RT_json.h: -------------------------------------------------------------------------------- 1 | const char* _MUE4094RT_json = "{\"brand\":\"Xiaomi\",\"model\":\"MiLamp\",\"model_id\":\"MUE4094RT\",\"tag\":\"0404\",\"condition\":[\"servicedata\",\">=\",18,\"index\",2,\"30dd\",\"&\",\"uuid\",\"index\",0,\"fe95\"],\"properties\":{\"motion\":{\"condition\":[\"servicedata\",0,\"40\"],\"decoder\":[\"static_value\",true],\"is_bool\":1},\"darkness\":{\"condition\":[\"servicedata\",0,\"40\"],\"decoder\":[\"value_from_hex_data\",\"servicedata\",8,2,true]},\"mac\":{\"condition\":[\"servicedata\",0,\"30\"],\"decoder\":[\"revmac_from_hex_data\",\"servicedata\",10]}}}"; 2 | /*R""""( 3 | { 4 | "brand":"Xiaomi", 5 | "model":"MiLamp", 6 | "model_id":"MUE4094RT", 7 | "tag":"0404", 8 | "condition":["servicedata", ">=", 18, "index", 2, "30dd", "&", "uuid", "index", 0, "fe95"], 9 | "properties":{ 10 | "motion":{ 11 | "condition":["servicedata", 0, "40"], 12 | "decoder":["static_value", true], 13 | "is_bool":1 14 | }, 15 | "darkness":{ 16 | "condition":["servicedata", 0, "40"], 17 | "decoder":["value_from_hex_data", "servicedata", 8, 2, true] 18 | }, 19 | "mac":{ 20 | "condition":["servicedata", 0, "30"], 21 | "decoder":["revmac_from_hex_data", "servicedata", 10] 22 | } 23 | } 24 | })"""";*/ 25 | 26 | const char* _MUE4094RT_json_props = "{\"properties\":{\"motion\":{\"unit\":\"status\",\"name\":\"motion\"},\"darkness\":{\"unit\":\"lx\",\"name\":\"illuminance\"},\"mac\":{\"unit\":\"string\",\"name\":\"MAC address\"}}}"; 27 | /*R""""( 28 | { 29 | "properties":{ 30 | "motion":{ 31 | "unit":"status", 32 | "name":"motion" 33 | }, 34 | "darkness":{ 35 | "unit":"lx", 36 | "name":"illuminance" 37 | }, 38 | "mac":{ 39 | "unit":"string", 40 | "name":"MAC address" 41 | } 42 | } 43 | })"""";*/ 44 | -------------------------------------------------------------------------------- /src/devices/Mokobeacon_json.h: -------------------------------------------------------------------------------- 1 | const char* _Mokobeacon_json = "{\"brand\":\"Mokosmart\",\"model\":\"Beacon\",\"model_id\":\"Mokobeacon\",\"tag\":\"0708\",\"condition\":[\"uuid\",\"index\",0,\"ff01\"],\"properties\":{\"batt\":{\"decoder\":[\"value_from_hex_data\",\"servicedata\",0,2,false]},\"x_axis\":{\"decoder\":[\"value_from_hex_data\",\"servicedata\",14,4,false],\"post_proc\":[\"/\",10000,\"*\",9.80665]},\"y_axis\":{\"decoder\":[\"value_from_hex_data\",\"servicedata\",18,4,false],\"post_proc\":[\"/\",10000,\"*\",9.80665]},\"z_axis\":{\"decoder\":[\"value_from_hex_data\",\"servicedata\",22,4,false],\"post_proc\":[\"/\",10000,\"*\",9.80665]}}}"; 2 | /*R""""( 3 | { 4 | "brand":"Mokosmart", 5 | "model":"Beacon", 6 | "model_id":"Mokobeacon", 7 | "tag":"0708", 8 | "condition":["uuid", "index", 0, "ff01"], 9 | "properties":{ 10 | "batt":{ 11 | "decoder":["value_from_hex_data", "servicedata", 0, 2, false] 12 | }, 13 | "x_axis":{ 14 | "decoder":["value_from_hex_data", "servicedata", 14, 4, false], 15 | "post_proc":["/", 10000, "*", 9.80665] 16 | }, 17 | "y_axis":{ 18 | "decoder":["value_from_hex_data", "servicedata", 18, 4, false], 19 | "post_proc":["/", 10000, "*", 9.80665] 20 | }, 21 | "z_axis":{ 22 | "decoder":["value_from_hex_data", "servicedata", 22, 4, false], 23 | "post_proc":["/", 10000, "*", 9.80665] 24 | } 25 | } 26 | })"""";*/ 27 | 28 | const char* _Mokobeacon_json_props = "{\"properties\":{\"batt\":{\"unit\":\"%\",\"name\":\"battery\"},\"x_axis\":{\"unit\":\"m/s²\",\"name\":\"x_axis\"},\"y_axis\":{\"unit\":\"m/s²\",\"name\":\"y_axis\"},\"z_axis\":{\"unit\":\"m/s²\",\"name\":\"z_axis\"}}}"; 29 | /*R""""( 30 | { 31 | "properties":{ 32 | "batt":{ 33 | "unit":"%", 34 | "name":"battery" 35 | }, 36 | "x_axis":{ 37 | "unit":"m/s²", 38 | "name":"x_axis" 39 | }, 40 | "y_axis":{ 41 | "unit":"m/s²", 42 | "name":"y_axis" 43 | }, 44 | "z_axis":{ 45 | "unit":"m/s²", 46 | "name":"z_axis" 47 | } 48 | } 49 | })"""";*/ -------------------------------------------------------------------------------- /src/devices/Oras_json.h: -------------------------------------------------------------------------------- 1 | const char* _Oras_json = "{\"brand\":\"Oras\",\"model\":\"Smart faucet\",\"model_id\":\"ORAS\",\"tag\":\"0801\",\"condition\":[\"manufacturerdata\",\"=\",40,\"index\",0,\"3101\"],\"properties\":{\"serial\":{\"decoder\":[\"ascii_from_hex_data\",\"manufacturerdata\",10,20]},\"batt\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",6,2,false,false],\"post_proc\":[\"&\",127]}}}"; 2 | /*R""""( 3 | { 4 | "brand":"Oras", 5 | "model":"Smart faucet", 6 | "model_id":"ORAS", 7 | "tag":"0801", 8 | "condition":["manufacturerdata", "=", 40, "index", 0, "3101"], 9 | "properties":{ 10 | "serial":{ 11 | "decoder":["ascii_from_hex_data", "manufacturerdata", 10, 20] 12 | }, 13 | "batt":{ 14 | "decoder":["value_from_hex_data", "manufacturerdata", 6, 2, false, false], 15 | "post_proc":["&", 127] 16 | } 17 | } 18 | })"""";*/ 19 | 20 | const char* _Oras_json_props = "{\"properties\":{\"serial\":{\"unit\":\"string\",\"name\":\"serial number\"},\"batt\":{\"unit\":\"%\",\"name\":\"battery\"}}}"; 21 | /*R""""( 22 | { 23 | "properties":{ 24 | "serial":{ 25 | "unit":"string", 26 | "name":"serial number" 27 | }, 28 | "batt":{ 29 | "unit":"%", 30 | "name":"battery" 31 | } 32 | } 33 | })"""";*/ 34 | -------------------------------------------------------------------------------- /src/devices/PH10_json.h: -------------------------------------------------------------------------------- 1 | const char* _PH10_json = "{\"brand\":\"Polar\",\"model\":\"Heart Rate Sensor\",\"model_id\":\"H10\",\"tag\":\"0b00\",\"condition\":[\"manufacturerdata\",\"=\",12,\"index\",0,\"6b00\"],\"properties\":{\"bpm\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",10,2,false,false]}}}"; 2 | /*R""""( 3 | { 4 | "brand":"Polar", 5 | "model":"Heart Rate Sensor", 6 | "model_id":"H10", 7 | "tag":"0b00", 8 | "condition":["manufacturerdata", "=", 12, "index", 0, "6b00"], 9 | "properties":{ 10 | "bpm":{ 11 | "decoder":["value_from_hex_data", "manufacturerdata", 10, 2, false, false] 12 | } 13 | } 14 | })"""";*/ 15 | 16 | const char* _PH10_json_props = "{\"properties\":{\"bpm\":{\"unit\":\"bpm\",\"name\":\"heart rate\"}}}"; 17 | /*R""""( 18 | { 19 | "properties":{ 20 | "bpm":{ 21 | "unit":"bpm", 22 | "name":"heart rate" 23 | } 24 | } 25 | })"""";*/ 26 | -------------------------------------------------------------------------------- /src/devices/SBBT_002C_ENCR_json.h: -------------------------------------------------------------------------------- 1 | const char* _SBBT_002C_ENCR_json = "{\"brand\":\"Shelly\",\"model\":\"ShellyBLU Button1 encrypted\",\"model_id\":\"SBBT_002C_ENCR\",\"tag\":\"110602\",\"condition\":[\"servicedata\",\"index\",0,\"41\",\"|\",\"servicedata\",\"index\",0,\"45\",\"&\",\"uuid\",\"index\",0,\"fcd2\",\"&\",\"name\",\"index\",0,\"SBBT-\"],\"properties\":{\"cipher\":{\"decoder\":[\"string_from_hex_data\",\"servicedata\",2,12]},\"ctr\":{\"decoder\":[\"string_from_hex_data\",\"servicedata\",14,8]},\"mic\":{\"decoder\":[\"string_from_hex_data\",\"servicedata\",22,8]},\"mac\":{\"condition\":[\"manufacturerdata\",\"=\",30],\"decoder\":[\"revmac_from_hex_data\",\"manufacturerdata\",18]}}}"; 2 | /*R""""( 3 | { 4 | "brand":"Shelly", 5 | "model":"ShellyBLU Button1 encrypted", 6 | "model_id":"SBBT_002C_ENCR", 7 | "tag":"110602", 8 | "condition":["servicedata", "index", 0, "41", "|", "servicedata", "index", 0, "45", "&", "uuid", "index", 0, "fcd2", "&", "name", "index", 0, "SBBT-"], 9 | "properties":{ 10 | "cipher":{ 11 | "decoder":["string_from_hex_data", "servicedata", 2, 12] 12 | }, 13 | "ctr":{ 14 | "decoder":["string_from_hex_data", "servicedata", 14, 8] 15 | }, 16 | "mic":{ 17 | "decoder":["string_from_hex_data", "servicedata", 22, 8] 18 | }, 19 | "mac":{ 20 | "condition":["manufacturerdata", "=", 30], 21 | "decoder":["revmac_from_hex_data", "manufacturerdata", 18] 22 | } 23 | } 24 | })"""";*/ 25 | 26 | const char* _SBBT_002C_ENCR_json_props = "{\"properties\":{\"cipher\":{\"unit\":\"hex\",\"name\":\"ciphertext\"},\"ctr\":{\"unit\":\"hex\",\"name\":\"counter\"},\"mic\":{\"unit\":\"hex\",\"name\":\"message integrity check\"},\"mac\":{\"unit\":\"string\",\"name\":\"MAC address\"}}}"; 27 | /*R""""( 28 | { 29 | "properties":{ 30 | "cipher":{ 31 | "unit":"hex", 32 | "name":"ciphertext" 33 | }, 34 | "ctr":{ 35 | "unit":"hex", 36 | "name":"counter" 37 | }, 38 | "mic":{ 39 | "unit":"hex", 40 | "name":"message integrity check" 41 | }, 42 | "mac":{ 43 | "unit":"string", 44 | "name":"MAC address" 45 | } 46 | } 47 | })"""";*/ 48 | -------------------------------------------------------------------------------- /src/devices/SBDW_002C_ENCR_json.h: -------------------------------------------------------------------------------- 1 | const char* _SBDW_002C_ENCR_json = "{\"brand\":\"Shelly\",\"model\":\"ShellyBLU Door/Window encrypted\",\"model_id\":\"SBDW_002C_ENCR\",\"tag\":\"040602\",\"condition\":[\"servicedata\",\"index\",0,\"45\",\"&\",\"uuid\",\"index\",0,\"fcd2\",\"&\",\"name\",\"index\",0,\"SBDW-\"],\"properties\":{\"cipher\":{\"decoder\":[\"string_from_hex_data\",\"servicedata\",2,26]},\"ctr\":{\"decoder\":[\"string_from_hex_data\",\"servicedata\",28,8]},\"mic\":{\"decoder\":[\"string_from_hex_data\",\"servicedata\",36,8]},\"mac\":{\"condition\":[\"manufacturerdata\",\"=\",30],\"decoder\":[\"revmac_from_hex_data\",\"manufacturerdata\",18]}}}"; 2 | /*R""""( 3 | { 4 | "brand":"Shelly", 5 | "model":"ShellyBLU Door/Window encrypted", 6 | "model_id":"SBDW_002C_ENCR", 7 | "tag":"040602", 8 | "condition":["servicedata", "index", 0, "45", "&", "uuid", "index", 0, "fcd2", "&", "name", "index", 0, "SBDW-"], 9 | "properties":{ 10 | "cipher":{ 11 | "decoder":["string_from_hex_data", "servicedata", 2, 26] 12 | }, 13 | "ctr":{ 14 | "decoder":["string_from_hex_data", "servicedata", 28, 8] 15 | }, 16 | "mic":{ 17 | "decoder":["string_from_hex_data", "servicedata", 36, 8] 18 | }, 19 | "mac":{ 20 | "condition":["manufacturerdata", "=", 30], 21 | "decoder":["revmac_from_hex_data", "manufacturerdata", 18] 22 | } 23 | } 24 | })"""";*/ 25 | 26 | const char* _SBDW_002C_ENCR_json_props = "{\"properties\":{\"cipher\":{\"unit\":\"hex\",\"name\":\"ciphertext\"},\"ctr\":{\"unit\":\"hex\",\"name\":\"counter\"},\"mic\":{\"unit\":\"hex\",\"name\":\"message integrity check\"},\"mac\":{\"unit\":\"string\",\"name\":\"MAC address\"}}}"; 27 | /*R""""( 28 | { 29 | "properties":{ 30 | "cipher":{ 31 | "unit":"hex", 32 | "name":"ciphertext" 33 | }, 34 | "ctr":{ 35 | "unit":"hex", 36 | "name":"counter" 37 | }, 38 | "mic":{ 39 | "unit":"hex", 40 | "name":"message integrity check" 41 | }, 42 | "mac":{ 43 | "unit":"string", 44 | "name":"MAC address" 45 | } 46 | } 47 | })"""";*/ 48 | -------------------------------------------------------------------------------- /src/devices/SBMO_003Z_ENCR_json.h: -------------------------------------------------------------------------------- 1 | const char* _SBMO_003Z_ENCR_json = "{\"brand\":\"Shelly\",\"model\":\"ShellyBLU Motion encrypted\",\"model_id\":\"SBMO_003Z_ENCR\",\"tag\":\"040602\",\"condition\":[\"servicedata\",\"index\",0,\"45\",\"&\",\"uuid\",\"index\",0,\"fcd2\",\"&\",\"name\",\"index\",0,\"SBMO-\"],\"properties\":{\"cipher\":{\"decoder\":[\"string_from_hex_data\",\"servicedata\",2,20]},\"ctr\":{\"decoder\":[\"string_from_hex_data\",\"servicedata\",22,8]},\"mic\":{\"decoder\":[\"string_from_hex_data\",\"servicedata\",30,8]},\"mac\":{\"condition\":[\"manufacturerdata\",\"=\",30],\"decoder\":[\"revmac_from_hex_data\",\"manufacturerdata\",18]}}}"; 2 | /*R""""( 3 | { 4 | "brand":"Shelly", 5 | "model":"ShellyBLU Motion encrypted", 6 | "model_id":"SBMO_003Z_ENCR", 7 | "tag":"040602", 8 | "condition":["servicedata", "index", 0, "45", "&", "uuid", "index", 0, "fcd2", "&", "name", "index", 0, "SBMO-"], 9 | "properties":{ 10 | "cipher":{ 11 | "decoder":["string_from_hex_data", "servicedata", 2, 20] 12 | }, 13 | "ctr":{ 14 | "decoder":["string_from_hex_data", "servicedata", 22, 8] 15 | }, 16 | "mic":{ 17 | "decoder":["string_from_hex_data", "servicedata", 30, 8] 18 | }, 19 | "mac":{ 20 | "condition":["manufacturerdata", "=", 30], 21 | "decoder":["revmac_from_hex_data", "manufacturerdata", 18] 22 | } 23 | } 24 | })"""";*/ 25 | 26 | const char* _SBMO_003Z_ENCR_json_props = "{\"properties\":{\"cipher\":{\"unit\":\"hex\",\"name\":\"ciphertext\"},\"ctr\":{\"unit\":\"hex\",\"name\":\"counter\"},\"mic\":{\"unit\":\"hex\",\"name\":\"message integrity check\"},\"mac\":{\"unit\":\"string\",\"name\":\"MAC address\"}}}"; 27 | /*R""""( 28 | { 29 | "properties":{ 30 | "cipher":{ 31 | "unit":"hex", 32 | "name":"ciphertext" 33 | }, 34 | "ctr":{ 35 | "unit":"hex", 36 | "name":"counter" 37 | }, 38 | "mic":{ 39 | "unit":"hex", 40 | "name":"message integrity check" 41 | }, 42 | "mac":{ 43 | "unit":"string", 44 | "name":"MAC address" 45 | } 46 | } 47 | })"""";*/ 48 | -------------------------------------------------------------------------------- /src/devices/SBS1_json.h: -------------------------------------------------------------------------------- 1 | const char* _SBS1_json = "{\"brand\":\"SwitchBot\",\"model\":\"Bot\",\"model_id\":\"X1\",\"tag\":\"0e22\",\"condition\":[\"uuid\",\"index\",0,\"0d00\",\"|\",\"uuid\",\"index\",0,\"fd3d\",\"&\",\"servicedata\",\">=\",6,\"index\",0,\"48\"],\"properties\":{\"mode\":{\"decoder\":[\"bit_static_value\",\"servicedata\",2,3,\"onestate\",\"on/off\"]},\"state\":{\"decoder\":[\"bit_static_value\",\"servicedata\",2,2,\"on\",\"off\"]},\"batt\":{\"decoder\":[\"value_from_hex_data\",\"servicedata\",4,2,false,false],\"post_proc\":[\"&\",127]}}}"; 2 | /*R""""( 3 | { 4 | "brand":"SwitchBot", 5 | "model":"Bot", 6 | "model_id":"X1", 7 | "tag":"0e22", 8 | "condition":["uuid", "index", 0, "0d00", "|", "uuid", "index", 0, "fd3d", "&", "servicedata", ">=", 6, "index", 0, "48"], 9 | "properties":{ 10 | "mode":{ 11 | "decoder":["bit_static_value", "servicedata", 2, 3, "onestate", "on/off"] 12 | }, 13 | "state":{ 14 | "decoder":["bit_static_value", "servicedata", 2, 2, "on", "off"] 15 | }, 16 | "batt":{ 17 | "decoder":["value_from_hex_data", "servicedata", 4, 2, false, false], 18 | "post_proc":["&", 127] 19 | } 20 | } 21 | })"""";*/ 22 | 23 | const char* _SBS1_json_props = "{\"properties\":{\"mode\":{\"unit\":\"string\",\"name\":\"mode\"},\"state\":{\"unit\":\"string\",\"name\":\"state\"},\"batt\":{\"unit\":\"%\",\"name\":\"battery\"}}}"; 24 | /*R""""( 25 | { 26 | "properties":{ 27 | "mode":{ 28 | "unit":"string", 29 | "name":"mode" 30 | }, 31 | "state":{ 32 | "unit":"string", 33 | "name":"state" 34 | }, 35 | "batt":{ 36 | "unit":"%", 37 | "name":"battery" 38 | } 39 | } 40 | })"""";*/ -------------------------------------------------------------------------------- /src/devices/SCD4X_json.h: -------------------------------------------------------------------------------- 1 | const char* _SCD4X_json = "{\"brand\":\"Sensirion\",\"model\":\"MyCO₂/CO₂ Gadget\",\"model_id\":\"SCD4X\",\"tag\":\"0f\",\"condition\":[\"manufacturerdata\",\">=\",24,\"index\",0,\"d5060008\",\"|\",\"manufacturerdata\",\">=\",24,\"index\",0,\"d506000a\"],\"properties\":{\"tempc\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",12,4,true,true],\"post_proc\":[\"*\",175,\"/\",65535,\"-\",45]},\"hum\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",16,4,true,false],\"post_proc\":[\"*\",100,\"/\",65535]},\"co2\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",20,4,true,false]}}}"; 2 | 3 | /* R""""( 4 | { 5 | "brand":"Sensirion", 6 | "model":"MyCO₂/CO₂ Gadget", 7 | "model_id":"SCD4X", 8 | "tag":"0f", 9 | "condition":["manufacturerdata", ">=", 24, "index", 0, "d5060008", "|", "manufacturerdata", ">=", 24, "index", 0, "d506000a"], 10 | "properties":{ 11 | "tempc":{ 12 | "decoder":["value_from_hex_data", "manufacturerdata", 12, 4, true, true], 13 | "post_proc":["*", 175, "/", 65535, "-", 45] 14 | }, 15 | "hum":{ 16 | "decoder":["value_from_hex_data", "manufacturerdata", 16, 4, true, false], 17 | "post_proc":["*", 100, "/", 65535] 18 | }, 19 | "co2":{ 20 | "decoder":["value_from_hex_data", "manufacturerdata", 20, 4, true, false] 21 | } 22 | } 23 | })"""";*/ 24 | 25 | const char* _SCD4X_json_props = "{\"properties\":{\"tempc\":{\"unit\":\"°C\",\"name\":\"temperature\"},\"hum\":{\"unit\":\"%\",\"name\":\"humidity\"},\"co2\":{\"unit\":\"ppm\",\"name\":\"carbon_dioxide\"}}}"; 26 | 27 | /* R""""( 28 | { 29 | "properties":{ 30 | "tempc":{ 31 | "unit":"°C", 32 | "name":"temperature" 33 | }, 34 | "hum":{ 35 | "unit":"%", 36 | "name":"humidity" 37 | }, 38 | "co2":{ 39 | "unit":"ppm", 40 | "name":"carbon_dioxide" 41 | } 42 | } 43 | })"""";*/ 44 | -------------------------------------------------------------------------------- /src/devices/SE_MAG_json.h: -------------------------------------------------------------------------------- 1 | const char* _SE_MAG_json = "{\"brand\":\"Sensor Easy\",\"model\":\"SE MAG\",\"model_id\":\"SE_MAG\",\"tag\":\"0404\",\"condition\":[\"servicedata\",\"=\",4,\"&\",\"uuid\",\"index\",0,\"2a06\",\"&\",\"name\",\"index\",1,\" MAG\"],\"properties\":{\"open\":{\"decoder\":[\"bit_static_value\",\"servicedata\",1,0,true,false]},\"volt\":{\"condition\":[\"manufacturerdata\",\"=\",10,\"index\",4,\"f2\"],\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",6,4,true,false],\"post_proc\":[\"/\",1000]}}}"; 2 | 3 | /* 4 | R""""( 5 | { 6 | "brand":"Sensor Easy", 7 | "model":"SE MAG", 8 | "model_id":"SE_MAG", 9 | "tag":"0404", 10 | "condition":["servicedata", "=", 4, "&", "uuid", "index", 0, "2a06","&", "name", "index", 1, " MAG"], 11 | "properties":{ 12 | "open":{ 13 | "decoder":["bit_static_value", "servicedata", 1, 0, true, false] 14 | }, 15 | "volt":{ 16 | "condition":["manufacturerdata", "=", 10,"index", 4, "f2"], 17 | "decoder":["value_from_hex_data", "manufacturerdata", 6, 4, true, false], 18 | "post_proc":["/", 1000] 19 | } 20 | } 21 | })""""; 22 | */ 23 | 24 | const char* _SE_MAG_json_props = "{\"properties\":{\"open\":{\"unit\":\"status\",\"name\":\"door\"},\"volt\":{\"unit\":\"V\",\"name\":\"voltage\"}}}"; 25 | 26 | /* 27 | R""""( 28 | { 29 | "properties": { 30 | "open":{ 31 | "unit":"status", 32 | "name":"door" 33 | }, 34 | "volt": { 35 | "unit": "V", 36 | "name": "voltage" 37 | } 38 | } 39 | })""""; 40 | */ 41 | -------------------------------------------------------------------------------- /src/devices/SE_RHT_json.h: -------------------------------------------------------------------------------- 1 | #include "common_props.h" 2 | 3 | const char* _SE_RHT_json = "{\"brand\":\"Sensor Easy\",\"model\":\"SE RHT\",\"model_id\":\"SE_RHT\",\"tag\":\"01\",\"condition\":[\"name\",\"index\",1,\" RHT \",\"&\",\"uuid\",\"index\",0,\"2a6e\",\"|\",\"uuid\",\"index\",0,\"2a6f\"],\"properties\":{\"tempc\":{\"condition\":[\"servicedata\",\"=\",4],\"decoder\":[\"value_from_hex_data\",\"servicedata\",0,4,true,true],\"post_proc\":[\"/\",100]},\"hum\":{\"condition\":[\"servicedata\",\"=\",2],\"decoder\":[\"value_from_hex_data\",\"servicedata\",0,2,true,true]},\"volt\":{\"condition\":[\"manufacturerdata\",\"=\",10,\"index\",4,\"f2\"],\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",6,4,true,false],\"post_proc\":[\"/\",1000]}}}"; 4 | 5 | /*R""""( 6 | { 7 | "brand":"Sensor Easy", 8 | "model":"SE RHT", 9 | "model_id":"SE_RHT", 10 | "tag":"01", 11 | "condition":["name", "index", 1, " RHT ","&", "uuid", "index", 0, "2a6e","|", "uuid", "index", 0, "2a6f"], 12 | "properties":{ 13 | "tempc":{ 14 | "condition":["servicedata", "=", 4], 15 | "decoder":["value_from_hex_data", "servicedata", 0, 4, true, true], 16 | "post_proc":["/", 100] 17 | }, 18 | "hum":{ 19 | "condition":["servicedata", "=", 2], 20 | "decoder":["value_from_hex_data", "servicedata", 0, 2, true, true] 21 | }, 22 | "volt":{ 23 | "condition":["manufacturerdata", "=", 10,"index", 4, "f2"], 24 | "decoder":["value_from_hex_data", "manufacturerdata", 6, 4, true, false], 25 | "post_proc":["/", 1000] 26 | } 27 | } 28 | })"""";*/ 29 | 30 | const char* _SE_RHT_json_props = _common_BVTH_props; 31 | -------------------------------------------------------------------------------- /src/devices/SE_TEMP_json.h: -------------------------------------------------------------------------------- 1 | const char* _SE_TEMP_json = "{\"brand\":\"Sensor Easy\",\"model\":\"SE TEMP\",\"model_id\":\"SE_TEMP\",\"tag\":\"01\",\"condition\":[\"servicedata\",\"=\",4,\"&\",\"uuid\",\"index\",0,\"2a6e\",\"&\",\"name\",\"index\",1,\" T \"],\"properties\":{\"tempc\":{\"condition\":[\"servicedata\",0,\"!\",\"ff7f\"],\"decoder\":[\"value_from_hex_data\",\"servicedata\",0,4,true,true],\"post_proc\":[\"/\",100]},\"volt\":{\"condition\":[\"manufacturerdata\",\"=\",10,\"index\",4,\"f2\"],\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",6,4,true,false],\"post_proc\":[\"/\",1000]}}}"; 2 | 3 | /*R""""( 4 | { 5 | "brand":"Sensor Easy", 6 | "model":"SE TEMP", 7 | "model_id":"SE_TEMP", 8 | "tag":"01", 9 | "condition":["servicedata", "=", 4, "&", "uuid", "index", 0, "2a6e","&", "name", "index", 1, " T "], 10 | "properties":{ 11 | "tempc":{ 12 | "condition":["servicedata",0 ,"!","ff7f"], 13 | "decoder":["value_from_hex_data", "servicedata", 0, 4, true, true], 14 | "post_proc":["/", 100] 15 | }, 16 | "volt":{ 17 | "condition":["manufacturerdata", "=", 10,"index", 4, "f2"], 18 | "decoder":["value_from_hex_data", "manufacturerdata", 6, 4, true, false], 19 | "post_proc":["/", 1000] 20 | } 21 | } 22 | })""""; 23 | */ 24 | const char* _SE_TEMP_json_props = "{\"properties\":{\"tempc\":{\"unit\":\"°C\",\"name\":\"temperature\"},\"volt\":{\"unit\":\"V\",\"name\":\"voltage\"}}}"; 25 | 26 | /*R""""( 27 | { 28 | "properties": { 29 | "tempc": { 30 | "unit": "°C", 31 | "name": "temperature" 32 | }, 33 | "volt": { 34 | "unit": "V", 35 | "name": "voltage" 36 | } 37 | } 38 | })"""";*/ 39 | -------------------------------------------------------------------------------- /src/devices/SE_TPROBE_json.h: -------------------------------------------------------------------------------- 1 | const char* _SE_TPROBE_json = "{\"brand\":\"Sensor Easy\",\"model\":\"SE TEMP PROBE\",\"model_id\":\"SE_TPROBE\",\"tag\":\"01\",\"condition\":[\"servicedata\",\"=\",4,\"&\",\"uuid\",\"index\",0,\"2a6e\",\"&\",\"name\",\"index\",1,\" TPROBE\"],\"properties\":{\"tempc\":{\"decoder\":[\"value_from_hex_data\",\"servicedata\",0,4,true,true],\"post_proc\":[\"/\",100]},\"volt\":{\"condition\":[\"manufacturerdata\",\"=\",10,\"index\",4,\"f2\"],\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",6,4,true,false],\"post_proc\":[\"/\",1000]}}}"; 2 | 3 | /*R""""( 4 | { 5 | "brand":"Sensor Easy", 6 | "model":"SE TEMP PROBE", 7 | "model_id":"SE_TPROBE", 8 | "tag":"01", 9 | "condition":["servicedata", "=", 4, "&", "uuid", "index", 0, "2a6e","&", "name", "index", 1, " TPROBE"], 10 | "properties":{ 11 | "tempc":{ 12 | "decoder":["value_from_hex_data", "servicedata", 0, 4, true, true], 13 | "post_proc":["/", 100] 14 | }, 15 | "volt":{ 16 | "condition":["manufacturerdata", "=", 10,"index", 4, "f2"], 17 | "decoder":["value_from_hex_data", "manufacturerdata", 6, 4, true, false], 18 | "post_proc":["/", 1000] 19 | } 20 | } 21 | })""""; 22 | */ 23 | const char* _SE_TPROBE_json_props = "{\"properties\":{\"tempc\":{\"unit\":\"°C\",\"name\":\"temperature\"},\"volt\":{\"unit\":\"V\",\"name\":\"voltage\"}}}"; 24 | 25 | /*R""""( 26 | { 27 | "properties": { 28 | "tempc": { 29 | "unit": "°C", 30 | "name": "temperature" 31 | }, 32 | "volt": { 33 | "unit": "V", 34 | "name": "voltage" 35 | } 36 | } 37 | })"""";*/ 38 | -------------------------------------------------------------------------------- /src/devices/SHT4X_json.h: -------------------------------------------------------------------------------- 1 | #include "common_props.h" 2 | 3 | const char* _SHT4X_json = "{\"brand\":\"Sensirion\",\"model\":\"TH Sensor\",\"model_id\":\"SHT4X\",\"tag\":\"01\",\"condition\":[\"manufacturerdata\",\">=\",20,\"index\",0,\"d5060006\"],\"properties\":{\"tempc\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",12,4,true,true],\"post_proc\":[\"*\",175,\"/\",65535,\"-\",45]},\"hum\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",16,4,true,false],\"post_proc\":[\"*\",125,\"/\",65535,\"-\",6]}}}"; 4 | 5 | /* R""""( 6 | { 7 | "brand":"Sensirion", 8 | "model":"TH Sensor", 9 | "model_id":"SHT4X", 10 | "tag":"01", 11 | "condition":["manufacturerdata", ">=", 20, "index", 0, "d5060006"], 12 | "properties":{ 13 | "tempc":{ 14 | "decoder":["value_from_hex_data", "manufacturerdata", 12, 4, true, true], 15 | "post_proc":["*", 175, "/", 65535, "-", 45] 16 | }, 17 | "hum":{ 18 | "decoder":["value_from_hex_data", "manufacturerdata", 16, 4, true, false], 19 | "post_proc":["*", 125, "/", 65535, "-", 6] 20 | } 21 | } 22 | })"""";*/ 23 | 24 | const char* _SHT4X_json_props = _common_TH_props; 25 | -------------------------------------------------------------------------------- /src/devices/SensorP_HTP_json.h: -------------------------------------------------------------------------------- 1 | const char* _SensorPush_HTP_json = "{\"brand\":\"SensorPush\",\"model\":\"HTP.xw\",\"model_id\":\"SPHTP\",\"tag\":\"0209\",\"condition\":[\"manufacturerdata\",\"=\",14,\"index\",0,\"00\"],\"properties\":{\"tempc\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",2,12,true,true],\"post_proc\":[\"%\",72001,\"*\",0.0025,\"+\",-40]},\"hum\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",2,12,true,false],\"post_proc\":[\"%\",2880112001,\"/\",72001,\"*\",0.0025]},\"pres\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",2,12,true,false],\"post_proc\":[\"%\",273613520207001,\"/\",2880112001,\"+\",30000.0,\"/\",100.0]}}}"; 2 | /* R""""( 3 | { 4 | "brand": "SensorPush", 5 | "model": "HTP.xw", 6 | "model_id": "SPHTP", 7 | "tag": "0209", 8 | "condition": ["manufacturerdata", "=", 14, "index", 0, "00"], 9 | "properties": { 10 | "tempc": { 11 | "decoder": ["value_from_hex_data", "manufacturerdata", 2, 12, true, true], 12 | "post_proc": ["%", 72001, "*", 0.0025, "+", -40] 13 | }, 14 | "hum": { 15 | "decoder": ["value_from_hex_data", "manufacturerdata", 2, 12, true, false], 16 | "post_proc": ["%", 2880112001, "/", 72001, "*", 0.0025] 17 | }, 18 | "pres":{ 19 | "decoder": ["value_from_hex_data", "manufacturerdata", 2, 12, true, false], 20 | "post_proc": ["%", 273613520207001, "/", 2880112001, "+", 30000.0, "/", 100.0] 21 | } 22 | } 23 | })"""";*/ 24 | 25 | const char* _SensorPush_HTP_json_props = "{\"properties\":{\"tempc\":{\"unit\":\"°C\",\"name\":\"temperature\"},\"hum\":{\"unit\":\"%\",\"name\":\"humidity\"},\"pres\":{\"unit\":\"hPa\",\"name\":\"pressure\"}}}"; 26 | /*R""""( 27 | { 28 | "properties": { 29 | "tempc": { 30 | "unit":"°C", 31 | "name":"temperature" 32 | }, 33 | "hum": { 34 | "unit":"%", 35 | "name":"humidity" 36 | }, 37 | "pres": { 38 | "unit":"hPa", 39 | "name":"pressure" 40 | } 41 | } 42 | })"""";*/ 43 | -------------------------------------------------------------------------------- /src/devices/SensorP_HT_json.h: -------------------------------------------------------------------------------- 1 | const char* _SensorPush_HT_json = "{\"brand\":\"SensorPush\",\"model\":\"HT.w\",\"model_id\":\"SPHT\",\"tag\":\"0109\",\"condition\":[\"manufacturerdata\",\"=\",10,\"index\",0,\"04\"],\"properties\":{\"tempc\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",2,8,true,true],\"post_proc\":[\"%\",66001,\"*\",0.0025,\"+\",-40]},\"hum\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",2,8,true,false],\"post_proc\":[\"%\",2640106001,\"/\",66001,\"*\",0.0025]}}}"; 2 | /* R""""( 3 | { 4 | "brand": "SensorPush", 5 | "model": "HT.w", 6 | "model_id": "SPHT", 7 | "tag": "0109", 8 | "condition": ["manufacturerdata", "=", 10, "index", 0, "04"], 9 | "properties": { 10 | "tempc": { 11 | "decoder": ["value_from_hex_data", "manufacturerdata", 2, 8, true, true], 12 | "post_proc": ["%", 66001, "*", 0.0025, "+", -40] 13 | }, 14 | "hum": { 15 | "decoder": ["value_from_hex_data", "manufacturerdata", 2, 8, true, false], 16 | "post_proc": ["%", 2640106001, "/", 66001, "*", 0.0025] 17 | } 18 | } 19 | })"""";*/ 20 | 21 | const char* _SensorPush_HT_json_props = "{\"properties\":{\"tempc\":{\"unit\":\"°C\",\"name\":\"temperature\"},\"hum\":{\"unit\":\"%\",\"name\":\"humidity\"}}}"; 22 | /*R""""( 23 | { 24 | "properties": { 25 | "tempc": { 26 | "unit":"°C", 27 | "name":"temperature" 28 | }, 29 | "hum": { 30 | "unit":"%", 31 | "name":"humidity" 32 | } 33 | } 34 | })"""";*/ 35 | -------------------------------------------------------------------------------- /src/devices/ServiceData_json.h: -------------------------------------------------------------------------------- 1 | const char* _ServiceData_json = "{\"brand\":\"GENERIC\",\"model\":\"Service data\",\"model_id\":\"ServiceData\",\"tag\":\"08\",\"condition\":[\"uuid\",\"index\",0,\"180f\"],\"properties\":{\"batt\":{\"decoder\":[\"value_from_hex_data\",\"servicedata\",0,2,false,false]}}}"; 2 | /*R""""( 3 | { 4 | "brand":"GENERIC", 5 | "model":"Service data", 6 | "model_id":"ServiceData", 7 | "tag":"08", 8 | "condition":["uuid", "index", 0, "180f"], 9 | "properties":{ 10 | "batt":{ 11 | "decoder":["value_from_hex_data", "servicedata", 0, 2, false, false] 12 | } 13 | } 14 | })"""";*/ 15 | 16 | const char* _ServiceData_json_props = "{\"properties\":{\"batt\":{\"unit\":\"%\",\"name\":\"battery\"}}}"; 17 | /*R""""( 18 | { 19 | "properties":{ 20 | "batt":{ 21 | "unit":"%", 22 | "name":"battery" 23 | } 24 | } 25 | })"""";*/ 26 | -------------------------------------------------------------------------------- /src/devices/Skale_json.h: -------------------------------------------------------------------------------- 1 | const char* _Skale_json = "{\"brand\":\"Atomax\",\"model\":\"Skale I/II\",\"model_id\":\"SKALE\",\"tag\":\"0501\",\"condition\":[\"manufacturerdata\",\"=\",12,\"index\",0,\"ef81\"],\"properties\":{\"weight\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",4,4,true,true],\"post_proc\":[\"/\",10]}}}"; 2 | /*R""""( 3 | { 4 | "brand":"Atomax", 5 | "model":"Skale I/II", 6 | "model_id":"SKALE", 7 | "tag":"0501", 8 | "condition":["manufacturerdata", "=", 12, "index", 0, "ef81"], 9 | "properties":{ 10 | "weight":{ 11 | "decoder":["value_from_hex_data", "manufacturerdata", 4, 4, true, true], 12 | "post_proc":["/", 10] 13 | } 14 | } 15 | })"""";*/ 16 | 17 | const char* _Skale_json_props = "{\"properties\":{\"weight\":{\"unit\":\"g\",\"name\":\"weight\"}}}"; 18 | /*R""""( 19 | { 20 | "properties":{ 21 | "weight":{ 22 | "unit":"g", 23 | "name":"weight" 24 | } 25 | } 26 | })"""";*/ 27 | -------------------------------------------------------------------------------- /src/devices/T201_json.h: -------------------------------------------------------------------------------- 1 | #include "common_props.h" 2 | 3 | const char* _T201_json = "{\"brand\":\"Oria\",\"model\":\"TH Sensor\",\"model_id\":\"T201\",\"tag\":\"0103\",\"condition\":[\"name\",\"index\",0,\"T201\",\"&\",\"manufacturerdata\",\">=\",38],\"properties\":{\"tempc\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",24,4,false,true],\"post_proc\":[\"/\",100]},\"hum\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",28,4,false,false],\"post_proc\":[\"/\",100]},\"batt\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",32,2,false,false]},\"mac\":{\"decoder\":[\"mac_from_hex_data\",\"manufacturerdata\",8]}}}"; 4 | /*R""""( 5 | { 6 | "brand":"Oria", 7 | "model":"TH Sensor", 8 | "model_id":"T201", 9 | "tag":"0103", 10 | "condition":["name", "index", 0, "T201", "&", "manufacturerdata", ">=", 38], 11 | "properties":{ 12 | "tempc":{ 13 | "decoder":["value_from_hex_data", "manufacturerdata", 24, 4, false, true], 14 | "post_proc":["/", 100] 15 | }, 16 | "hum":{ 17 | "decoder":["value_from_hex_data", "manufacturerdata", 28, 4, false, false], 18 | "post_proc":["/", 100] 19 | }, 20 | "batt":{ 21 | "decoder":["value_from_hex_data", "manufacturerdata", 32, 2, false, false] 22 | }, 23 | "mac":{ 24 | "decoder":["mac_from_hex_data", "manufacturerdata", 8] 25 | } 26 | } 27 | })"""";*/ 28 | 29 | const char* _T201_json_props = _common_BTHM_props; 30 | -------------------------------------------------------------------------------- /src/devices/T301_json.h: -------------------------------------------------------------------------------- 1 | #include "common_props.h" 2 | 3 | const char* _T301_json = "{\"brand\":\"Oria\",\"model\":\"TH Sensor\",\"model_id\":\"T301\",\"tag\":\"0103\",\"condition\":[\"name\",\"index\",0,\"T301\",\"&\",\"manufacturerdata\",\"=\",38],\"properties\":{\"tempc\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",24,4,false,true],\"post_proc\":[\"/\",100]},\"hum\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",28,4,false,false],\"post_proc\":[\"/\",100]},\"batt\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",32,2,false,false]},\"mac\":{\"decoder\":[\"mac_from_hex_data\",\"manufacturerdata\",8]}}}"; 4 | /*R""""( 5 | { 6 | "brand":"Oria", 7 | "model":"TH Sensor", 8 | "model_id":"T301", 9 | "tag":"0103", 10 | "condition":["name", "index", 0, "T301", "&", "manufacturerdata", "=", 38], 11 | "properties":{ 12 | "tempc":{ 13 | "decoder":["value_from_hex_data", "manufacturerdata", 24, 4, false, true], 14 | "post_proc":["/", 100] 15 | }, 16 | "hum":{ 17 | "decoder":["value_from_hex_data", "manufacturerdata", 28, 4, false, false], 18 | "post_proc":["/", 100] 19 | }, 20 | "batt":{ 21 | "decoder":["value_from_hex_data", "manufacturerdata", 32, 2, false, false] 22 | }, 23 | "mac":{ 24 | "decoder":["mac_from_hex_data", "manufacturerdata", 8] 25 | } 26 | } 27 | })"""";*/ 28 | 29 | const char* _T301_json_props = _common_BTHM_props; 30 | -------------------------------------------------------------------------------- /src/devices/TPTH_json.h: -------------------------------------------------------------------------------- 1 | #include "common_props.h" 2 | 3 | const char* _TPTH_json = "{\"brand\":\"ThermoPro\",\"model\":\"TH Sensor\",\"model_id\":\"TP35X/393\",\"tag\":\"0103\",\"condition\":[\"name\",\"index\",0,\"TP357\",\"|\",\"name\",\"index\",0,\"TP358\",\"|\",\"name\",\"index\",0,\"TP359\",\"|\",\"name\",\"index\",0,\"TP393\",\"&\",\"manufacturerdata\",\">=\",12,\"index\",0,\"c2\"],\"properties\":{\"tempc\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",2,4,true,true],\"post_proc\":[\"/\",10]},\"hum\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",6,2,false,false]},\"batt_low\":{\"condition\":[\"manufacturerdata\",9,\"bit\",1,1],\"decoder\":[\"static_value\",false]},\"_batt_low\":{\"condition\":[\"manufacturerdata\",9,\"bit\",1,0],\"decoder\":[\"static_value\",true]}}}"; 4 | /*R""""( 5 | { 6 | "brand":"ThermoPro", 7 | "model":"TH Sensor", 8 | "model_id":"TP35X/393", 9 | "tag":"0103", 10 | "condition":["name", "index", 0, "TP357", "|", "name", "index", 0, "TP358", "|", "name", "index", 0, "TP359", "|", "name", "index", 0, "TP393", "&", "manufacturerdata", ">=", 12, "index", 0, "c2"], 11 | "properties":{ 12 | "tempc":{ 13 | "decoder":["value_from_hex_data", "manufacturerdata", 2, 4, true, true], 14 | "post_proc":["/", 10] 15 | }, 16 | "hum":{ 17 | "decoder":["value_from_hex_data", "manufacturerdata", 6, 2, false, false] 18 | }, 19 | "batt_low":{ 20 | "condition":["manufacturerdata", 9, "bit", 1, 1], 21 | "decoder":["static_value", false] 22 | }, 23 | "_batt_low":{ 24 | "condition":["manufacturerdata", 9, "bit", 1, 0], 25 | "decoder":["static_value", true] 26 | } 27 | } 28 | })"""";*/ 29 | 30 | const char* _TPTH_json_props = "{\"properties\":{\"tempc\":{\"unit\":\"°C\",\"name\":\"temperature\"},\"hum\":{\"unit\":\"%\",\"name\":\"humidity\"},\"batt_low\":{\"unit\":\"status\",\"name\":\"battery\"}}}"; 31 | /* 32 | R""""( 33 | { 34 | "properties":{ 35 | "tempc":{ 36 | "unit":"°C", 37 | "name":"temperature" 38 | }, 39 | "hum":{ 40 | "unit":"%", 41 | "name":"humidity" 42 | }, 43 | "batt_low":{ 44 | "unit":"status", 45 | "name":"battery" 46 | } 47 | } 48 | })"""";*/ 49 | -------------------------------------------------------------------------------- /src/devices/UT363BT_json.h: -------------------------------------------------------------------------------- 1 | const char* _UT363BT_json = "{\"brand\":\"UNI-T\",\"model\":\"UT363 BT Anemometer\",\"model_id\":\"UT363BT\",\"tag\":\"1301\",\"condition\":[\"manufacturerdata\",\"=\",38,\"index\",22,\"4d2f53\",\"&\",\"manufacturerdata\",\"=\",38,\"index\",0,\"aabb\"],\"properties\":{\"windspeed\":{\"decoder\":[\"ascii_from_hex_data\",\"manufacturerdata\",10,12],\"is_double\":1}}}"; 2 | /*R""""( 3 | { 4 | "brand":"UNI-T", 5 | "model":"UT363 BT Anemometer", 6 | "model_id":"UT363BT", 7 | "tag":"1301", 8 | "condition":["manufacturerdata", "=", 38, "index", 22, "4d2f53", "&", "manufacturerdata", "=", 38, "index", 0, "aabb"], 9 | "properties":{ 10 | "windspeed":{ 11 | "decoder":["ascii_from_hex_data", "manufacturerdata", 10, 12], 12 | "is_double": 1 13 | } 14 | } 15 | })"""";*/ 16 | 17 | const char* _UT363BT_json_props = "{\"properties\":{\"windspeed\":{\"unit\":\"m/s\",\"name\":\"wind_speed\"}}}"; 18 | /*R""""( 19 | { 20 | "properties":{ 21 | "windspeed":{ 22 | "unit":"m/s", 23 | "name":"wind_speed" 24 | } 25 | } 26 | })"""";*/ 27 | -------------------------------------------------------------------------------- /src/devices/VCH6003_json.h: -------------------------------------------------------------------------------- 1 | const char* _VCH6003_json = "{\"brand\":\"VCHON\",\"model\":\"Thermo-Hygrometer\",\"model_id\":\"VCH6003\",\"tag\":\"0101\",\"condition\":[\"manufacturerdata\",\"=\",22,\"index\",0,\"0109\",\"&\",\"manufacturerdata\",\"mac@index\",10],\"conditionnomac\":[\"name\",\"index\",\"0\",\"XL0801\",\"&\",\"manufacturerdata\",\"=\",22,\"index\",0,\"0109\"],\"properties\":{\"tempc\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",4,4,false],\"post_proc\":[\"/\",10]},\"hum\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",8,2,false]},\"mac\":{\"decoder\":[\"mac_from_hex_data\",\"manufacturerdata\",10]}}}"; 2 | /*R""""( 3 | { 4 | "brand":"VCHON", 5 | "model":"Thermo-Hygrometer", 6 | "model_id":"VCH6003", 7 | "tag":"0101", 8 | "condition":["manufacturerdata", "=", 22, "index", 0, "0109", "&", "manufacturerdata", "mac@index", 10], 9 | "conditionnomac":["name", "index", "0", "XL0801", "&", "manufacturerdata", "=", 22, "index", 0, "0109"], 10 | "properties":{ 11 | "tempc":{ 12 | "decoder":["value_from_hex_data", "manufacturerdata", 4, 4, false], 13 | "post_proc":["/", 10] 14 | }, 15 | "hum":{ 16 | "decoder":["value_from_hex_data", "manufacturerdata", 8, 2, false] 17 | }, 18 | "mac":{ 19 | "decoder":["mac_from_hex_data", "manufacturerdata", 10] 20 | } 21 | } 22 | })"""";*/ 23 | 24 | const char* _VCH6003_json_props = "{\"properties\":{\"tempc\":{\"unit\":\"°C\",\"name\":\"temperature\"},\"hum\":{\"unit\":\"%\",\"name\":\"humidity\"},\"mac\":{\"unit\":\"string\",\"name\":\"MAC address\"}}}"; 25 | /*R""""( 26 | { 27 | "properties":{ 28 | "tempc":{ 29 | "unit":"°C", 30 | "name":"temperature" 31 | }, 32 | "hum":{ 33 | "unit":"%", 34 | "name":"humidity" 35 | }, 36 | "mac":{ 37 | "unit":"string", 38 | "name":"MAC address" 39 | } 40 | } 41 | })"""";*/ -------------------------------------------------------------------------------- /src/devices/VICTRON_BSC_ENCR_json.h: -------------------------------------------------------------------------------- 1 | const char* _VICTBSC_ENCR_json = "{\"brand\":\"Victron Energy\",\"model\":\"Blue Smart Charger encrypted\",\"model_id\":\"VICTBSC_ENCR\",\"tag\":\"140003\",\"condition\":[\"manufacturerdata\",\"=\",46,\"index\",0,\"e10210\",\"&\",\"manufacturerdata\",\"index\",12,\"08\"],\"properties\":{\"cipher\":{\"decoder\":[\"string_from_hex_data\",\"manufacturerdata\",20,26]},\"ctr\":{\"decoder\":[\"string_from_hex_data\",\"manufacturerdata\",14,4,true]},\"mic\":{\"decoder\":[\"string_from_hex_data\",\"manufacturerdata\",18,2]}}}"; 2 | /*R""""( 3 | { 4 | "brand":"Victron Energy", 5 | "model":"Blue Smart Charger encrypted", 6 | "model_id":"VICTBSC_ENCR", 7 | "tag":"140003", 8 | "condition":["manufacturerdata", "=", 46, "index", 0, "e10210", "&", "manufacturerdata", "index", 12, "08"], 9 | "properties":{ 10 | "cipher":{ 11 | "decoder":["string_from_hex_data", "manufacturerdata", 20, 26] 12 | }, 13 | "ctr":{ 14 | "decoder":["string_from_hex_data", "manufacturerdata", 14, 4, true] 15 | }, 16 | "mic":{ 17 | "decoder":["string_from_hex_data", "manufacturerdata", 18, 2] 18 | } 19 | } 20 | })"""";*/ 21 | 22 | const char* _VICTBSC_ENCR_json_props = "{\"properties\":{\"cipher\":{\"unit\":\"hex\",\"name\":\"ciphertext\"},\"ctr\":{\"unit\":\"hex\",\"name\":\"counter\"},\"mic\":{\"unit\":\"hex\",\"name\":\"message integrity check\"}}}"; 23 | /*R""""( 24 | { 25 | "properties":{ 26 | "cipher":{ 27 | "unit":"hex", 28 | "name":"ciphertext" 29 | }, 30 | "ctr":{ 31 | "unit":"hex", 32 | "name":"counter" 33 | }, 34 | "mic":{ 35 | "unit":"hex", 36 | "name":"message integrity check" 37 | } 38 | } 39 | })"""";*/ 40 | -------------------------------------------------------------------------------- /src/devices/VICTRON_ORIONXS_ENCR_json.h: -------------------------------------------------------------------------------- 1 | const char* _VICTORIONXS_ENCR_json = "{\"brand\":\"Victron Energy\",\"model\":\"Orion XS encrypted\",\"model_id\":\"VICTORIONXS_ENCR\",\"tag\":\"140003\",\"condition\":[\"manufacturerdata\",\"=\",48,\"index\",0,\"e10210\",\"&\",\"manufacturerdata\",\"index\",12,\"0f\"],\"properties\":{\"cipher\":{\"decoder\":[\"string_from_hex_data\",\"manufacturerdata\",20,28]},\"ctr\":{\"decoder\":[\"string_from_hex_data\",\"manufacturerdata\",14,4,true]},\"mic\":{\"decoder\":[\"string_from_hex_data\",\"manufacturerdata\",18,2]}}}"; 2 | /*R""""( 3 | { 4 | "brand":"Victron Energy", 5 | "model":"Orion XS encrypted", 6 | "model_id":"VICTORIONXS_ENCR", 7 | "tag":"140003", 8 | "condition":["manufacturerdata", "=", 48, "index", 0, "e10210", "&", "manufacturerdata", "index", 12, "0f"], 9 | "properties":{ 10 | "cipher":{ 11 | "decoder":["string_from_hex_data", "manufacturerdata", 20, 28] 12 | }, 13 | "ctr":{ 14 | "decoder":["string_from_hex_data", "manufacturerdata", 14, 4, true] 15 | }, 16 | "mic":{ 17 | "decoder":["string_from_hex_data", "manufacturerdata", 18, 2] 18 | } 19 | } 20 | })"""";*/ 21 | 22 | const char* _VICTORIONXS_ENCR_json_props = "{\"properties\":{\"cipher\":{\"unit\":\"hex\",\"name\":\"ciphertext\"},\"ctr\":{\"unit\":\"hex\",\"name\":\"counter\"},\"mic\":{\"unit\":\"hex\",\"name\":\"message integrity check\"}}}"; 23 | /*R""""( 24 | { 25 | "properties":{ 26 | "cipher":{ 27 | "unit":"hex", 28 | "name":"ciphertext" 29 | }, 30 | "ctr":{ 31 | "unit":"hex", 32 | "name":"counter" 33 | }, 34 | "mic":{ 35 | "unit":"hex", 36 | "name":"message integrity check" 37 | } 38 | } 39 | })"""";*/ 40 | -------------------------------------------------------------------------------- /src/devices/VICTRON_SBP_ENCR_json.h: -------------------------------------------------------------------------------- 1 | const char* _VICTSBP_ENCR_json = "{\"brand\":\"Victron Energy\",\"model\":\"Smart BatteryProtect encrypted\",\"model_id\":\"VICTSBP_ENCR\",\"tag\":\"140003\",\"condition\":[\"manufacturerdata\",\"=\",50,\"index\",0,\"e10210\",\"&\",\"manufacturerdata\",\"index\",12,\"09\"],\"properties\":{\"cipher\":{\"decoder\":[\"string_from_hex_data\",\"manufacturerdata\",20,30]},\"ctr\":{\"decoder\":[\"string_from_hex_data\",\"manufacturerdata\",14,4,true]},\"mic\":{\"decoder\":[\"string_from_hex_data\",\"manufacturerdata\",18,2]}}}"; 2 | /*R""""( 3 | { 4 | "brand":"Victron Energy", 5 | "model":"Smart BatteryProtect encrypted", 6 | "model_id":"VICTSBP_ENCR", 7 | "tag":"140003", 8 | "condition":["manufacturerdata", "=", 50, "index", 0, "e10210", "&", "manufacturerdata", "index", 12, "09"], 9 | "properties":{ 10 | "cipher":{ 11 | "decoder":["string_from_hex_data", "manufacturerdata", 20, 30] 12 | }, 13 | "ctr":{ 14 | "decoder":["string_from_hex_data", "manufacturerdata", 14, 4, true] 15 | }, 16 | "mic":{ 17 | "decoder":["string_from_hex_data", "manufacturerdata", 18, 2] 18 | } 19 | } 20 | })"""";*/ 21 | 22 | const char* _VICTSBP_ENCR_json_props = "{\"properties\":{\"cipher\":{\"unit\":\"hex\",\"name\":\"ciphertext\"},\"ctr\":{\"unit\":\"hex\",\"name\":\"counter\"},\"mic\":{\"unit\":\"hex\",\"name\":\"message integrity check\"}}}"; 23 | /*R""""( 24 | { 25 | "properties":{ 26 | "cipher":{ 27 | "unit":"hex", 28 | "name":"ciphertext" 29 | }, 30 | "ctr":{ 31 | "unit":"hex", 32 | "name":"counter" 33 | }, 34 | "mic":{ 35 | "unit":"hex", 36 | "name":"message integrity check" 37 | } 38 | } 39 | })"""";*/ 40 | -------------------------------------------------------------------------------- /src/devices/XMTZC04HMKG_json.h: -------------------------------------------------------------------------------- 1 | const char* _XMTZC04HMKG_json = "{\"brand\":\"Xiaomi\",\"model\":\"Mi Smart Scale\",\"model_id\":\"XMTZC01HM/XMTZC04HM\",\"tag\":\"05\",\"condition\":[\"servicedata\",\"index\",0,\"22\",\"|\",\"servicedata\",\"index\",0,\"a2\",\"|\",\"servicedata\",\"index\",0,\"62\",\"|\",\"servicedata\",\"index\",0,\"e2\",\"&\",\"servicedata\",\"=\",20,\"&\",\"uuid\",\"contain\",\"181d\"],\"properties\":{\"weighing_mode\":{\"decoder\":[\"bit_static_value\",\"servicedata\",0,2,\"person\",\"object\"]},\"unit\":{\"decoder\":[\"static_value\",\"kg\"]},\"weight\":{\"decoder\":[\"value_from_hex_data\",\"servicedata\",2,4,true,false],\"post_proc\":[\"/\",200]}}}"; 2 | /*R""""( 3 | { 4 | "brand":"Xiaomi", 5 | "model":"Mi Smart Scale", 6 | "model_id":"XMTZC01HM/XMTZC04HM", 7 | "tag":"05", 8 | "condition":["servicedata", "index", 0, "22", "|", "servicedata", "index", 0, "a2", "|", "servicedata", "index", 0, "62", "|", "servicedata", "index", 0, "e2", "&", "servicedata", "=", 20, "&", "uuid", "contain", "181d"], 9 | "properties":{ 10 | "weighing_mode":{ 11 | "decoder":["bit_static_value", "servicedata", 0, 2, "person", "object"] 12 | }, 13 | "unit":{ 14 | "decoder":["static_value", "kg"] 15 | }, 16 | "weight":{ 17 | "decoder":["value_from_hex_data", "servicedata", 2, 4, true, false], 18 | "post_proc":["/", 200] 19 | } 20 | } 21 | })"""";*/ 22 | 23 | const char* _XMTZC04HMKG_json_props = "{\"properties\":{\"weighing_mode\":{\"unit\":\"string\",\"name\":\"weighing_mode\"},\"unit\":{\"unit\":\"string\",\"name\":\"unit\"},\"weight\":{\"unit\":\"kg\",\"name\":\"weight\"}}}"; 24 | /*R""""( 25 | { 26 | "properties":{ 27 | "weighing_mode":{ 28 | "unit":"string", 29 | "name":"weighing_mode" 30 | }, 31 | "unit":{ 32 | "unit":"string", 33 | "name":"unit" 34 | }, 35 | "weight":{ 36 | "unit":"kg", 37 | "name":"weight" 38 | } 39 | } 40 | })"""";*/ 41 | -------------------------------------------------------------------------------- /src/devices/XMTZC04HMLB_json.h: -------------------------------------------------------------------------------- 1 | const char* _XMTZC04HMLB_json = "{\"brand\":\"Xiaomi\",\"model\":\"Mi Smart Scale\",\"model_id\":\"XMTZC01HM/XMTZC04HM\",\"tag\":\"05\",\"condition\":[\"servicedata\",\"index\",0,\"23\",\"|\",\"servicedata\",\"index\",0,\"a3\",\"|\",\"servicedata\",\"index\",0,\"63\",\"|\",\"servicedata\",\"index\",0,\"e3\",\"&\",\"servicedata\",\"=\",20,\"&\",\"uuid\",\"contain\",\"181d\"],\"properties\":{\"weighing_mode\":{\"decoder\":[\"bit_static_value\",\"servicedata\",0,2,\"person\",\"object\"]},\"unit\":{\"decoder\":[\"static_value\",\"lb\"]},\"weight\":{\"decoder\":[\"value_from_hex_data\",\"servicedata\",2,4,true,false],\"post_proc\":[\"/\",100]}}}"; 2 | /*R""""( 3 | { 4 | "brand":"Xiaomi", 5 | "model":"Mi Smart Scale", 6 | "model_id":"XMTZC01HM/XMTZC04HM", 7 | "tag":"05", 8 | "condition":["servicedata", "index", 0, "23", "|", "servicedata", "index", 0, "a3", "|", "servicedata", "index", 0, "63", "|", "servicedata", "index", 0, "e3", "&", "servicedata", "=", 20, "&", "uuid", "contain", "181d"], 9 | "properties":{ 10 | "weighing_mode":{ 11 | "decoder":["bit_static_value", "servicedata", 0, 2, "person", "object"] 12 | }, 13 | "unit":{ 14 | "decoder":["static_value", "lb"] 15 | }, 16 | "weight":{ 17 | "decoder":["value_from_hex_data", "servicedata", 2, 4, true, false], 18 | "post_proc":["/", 100] 19 | } 20 | } 21 | })"""";*/ 22 | 23 | const char* _XMTZC04HMLB_json_props = "{\"properties\":{\"weighing_mode\":{\"unit\":\"string\",\"name\":\"weighing_mode\"},\"unit\":{\"unit\":\"string\",\"name\":\"unit\"},\"weight\":{\"unit\":\"lb\",\"name\":\"weight\"}}}"; 24 | /*R""""( 25 | { 26 | "properties":{ 27 | "weighing_mode":{ 28 | "unit":"string", 29 | "name":"weighing_mode" 30 | }, 31 | "unit":{ 32 | "unit":"string", 33 | "name":"unit" 34 | }, 35 | "weight":{ 36 | "unit":"lb", 37 | "name":"weight" 38 | } 39 | } 40 | })"""";*/ 41 | -------------------------------------------------------------------------------- /src/devices/XOSSX2_json.h: -------------------------------------------------------------------------------- 1 | const char* _XOSSX2_json = "{\"brand\":\"XOSS\",\"model\":\"X2 Heart Rate Sensor\",\"model_id\":\"XOSSX2\",\"tag\":\"0b01\",\"condition\":[\"manufacturerdata\",\"=\",12,\"index\",0,\"04ff\"],\"properties\":{\"bpm\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",10,2,false,false]},\"batt\":{\"decoder\":[\"value_from_hex_data\",\"manufacturerdata\",6,2,false,false],\"post_proc\":[\"&\",127]}}}"; 2 | /*R""""( 3 | { 4 | "brand":"XOSS", 5 | "model":"X2 Heart Rate Sensor", 6 | "model_id":"XOSSX2", 7 | "tag":"0b01", 8 | "condition":["manufacturerdata", "=", 12, "index", 0, "04ff"], 9 | "properties":{ 10 | "bpm":{ 11 | "decoder":["value_from_hex_data", "manufacturerdata", 10, 2, false, false] 12 | }, 13 | "batt":{ 14 | "decoder":["value_from_hex_data", "manufacturerdata", 6, 2, false, false], 15 | "post_proc":["&", 127] 16 | } 17 | } 18 | })"""";*/ 19 | 20 | const char* _XOSSX2_json_props = "{\"properties\":{\"bpm\":{\"unit\":\"bpm\",\"name\":\"heart rate\"},\"batt\":{\"unit\":\"%\",\"name\":\"battery\"}}}"; 21 | /*R""""( 22 | { 23 | "properties":{ 24 | "bpm":{ 25 | "unit":"bpm", 26 | "name":"heart rate" 27 | }, 28 | "batt":{ 29 | "unit":"%", 30 | "name":"battery" 31 | } 32 | } 33 | })"""";*/ 34 | -------------------------------------------------------------------------------- /tests/BLE/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.5) 2 | 3 | project(test_ble) 4 | 5 | add_executable(test_ble test_ble.cpp) 6 | 7 | target_compile_features(test_ble PRIVATE cxx_std_11) 8 | 9 | target_link_libraries(test_ble PUBLIC decoder) 10 | 11 | target_compile_definitions(decoder PUBLIC DEBUG_DECODER UNIT_TESTING) 12 | 13 | target_include_directories(test_ble PUBLIC 14 | "${PROJECT_BINARY_DIR}" 15 | ) 16 | 17 | add_test(NAME run_test_ble COMMAND test_ble) 18 | 19 | -------------------------------------------------------------------------------- /tests/BLE_fail/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.5) 2 | 3 | project(test_ble_fail) 4 | 5 | add_executable(test_ble_fail test_ble_fail.cpp) 6 | 7 | target_compile_features(test_ble_fail PRIVATE cxx_std_11) 8 | 9 | target_link_libraries(test_ble_fail PUBLIC decoder) 10 | 11 | target_include_directories(test_ble_fail PUBLIC 12 | "${PROJECT_BINARY_DIR}" 13 | ) 14 | 15 | add_test(NAME run_test_ble_fail COMMAND test_ble_fail) 16 | 17 | -------------------------------------------------------------------------------- /tests/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | link_libraries(decoder) 2 | 3 | add_subdirectory(BLE) 4 | add_subdirectory(BLE_fail) 5 | -------------------------------------------------------------------------------- /tests/CompileOptions.cmake: -------------------------------------------------------------------------------- 1 | if(CMAKE_CXX_COMPILER_ID MATCHES "(GNU|Clang)") 2 | add_compile_options( 3 | -pedantic 4 | -Wall 5 | -Wcast-align 6 | -Wcast-qual 7 | -Wconversion 8 | -Wctor-dtor-privacy 9 | -Wdisabled-optimization 10 | -Werror 11 | -Wextra 12 | -Wformat=2 13 | -Winit-self 14 | -Wmissing-include-dirs 15 | -Wnon-virtual-dtor 16 | -Wold-style-cast 17 | -Woverloaded-virtual 18 | -Wparentheses 19 | -Wredundant-decls 20 | -Wshadow 21 | -Wsign-promo 22 | -Wstrict-aliasing 23 | -Wundef 24 | ) 25 | 26 | endif() 27 | 28 | if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") 29 | if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.8) 30 | add_compile_options(-g -Og) 31 | else() 32 | add_compile_options(-g -O0) 33 | endif() 34 | 35 | add_compile_options( 36 | -Wstrict-null-sentinel 37 | -Wno-vla # Allow VLA in tests 38 | ) 39 | add_definitions(-DHAS_VARIABLE_LENGTH_ARRAY) 40 | 41 | if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.5) 42 | add_compile_options(-Wlogical-op) # the flag exists in 4.4 but is buggy 43 | endif() 44 | 45 | if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.6) 46 | add_compile_options(-Wnoexcept) 47 | endif() 48 | endif() 49 | 50 | if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") 51 | add_compile_options( 52 | -Wc++11-compat 53 | -Wdeprecated-register 54 | -Wno-vla-extension # Allow VLA in tests 55 | ) 56 | add_definitions( 57 | -DHAS_VARIABLE_LENGTH_ARRAY 58 | -DSUBSCRIPT_CONFLICTS_WITH_BUILTIN_OPERATOR 59 | ) 60 | endif() 61 | 62 | if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") 63 | if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.0) 64 | add_compile_options(-g -Og) 65 | else() 66 | add_compile_options(-g -O0) 67 | endif() 68 | endif() 69 | 70 | if(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") 71 | if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 9.0) 72 | add_compile_options(-g -Og) 73 | else() 74 | add_compile_options(-g -O0) 75 | endif() 76 | endif() 77 | 78 | if(MSVC) 79 | add_definitions(-D_CRT_SECURE_NO_WARNINGS) 80 | add_compile_options( 81 | /W4 # Set warning level 82 | /WX # Treats all compiler warnings as errors. 83 | ) 84 | 85 | if (NOT MSVC_VERSION LESS 1910) # >= Visual Studio 2017 86 | add_compile_options( 87 | /Zc:__cplusplus # Enable updated __cplusplus macro 88 | ) 89 | endif() 90 | endif() 91 | -------------------------------------------------------------------------------- /tests/python_ble/decoder_test.py: -------------------------------------------------------------------------------- 1 | from TheengsDecoder import decodeBLE as dble 2 | from TheengsDecoder import getProperties 3 | from TheengsDecoder import getAttribute 4 | import json 5 | 6 | x = {"servicedata":"712098004a63b6658d7cc40d071003f32600"} 7 | z = dble(json.dumps(x)) 8 | print(z, "\n") 9 | 10 | p = json.loads(z) 11 | print(getProperties(p['model_id']), "\n") 12 | brand = getAttribute(p['model_id'], 'brand') 13 | model = getAttribute(p['model_id'], 'model') 14 | print("brand:", brand, ", model:", model) 15 | 16 | y = {} 17 | z = dble(json.dumps(y)) 18 | print("decoder result (None expected): ", z) 19 | print("Done") --------------------------------------------------------------------------------