Files
SensorReader/README.md
2025-11-27 18:23:48 +09:00

4.2 KiB

EnvSensor Reader - iOS App

An iOS application for scanning and reading environmental sensor data from BLE devices named "EnvSensor".

Features

  • Real-time BLE scanning for EnvSensor devices
  • Environmental readings display:
    • Temperature (°C)
    • Humidity (%)
    • Pressure (hPa)
  • Power metrics display:
    • Voltage (V)
    • Current (mA)
    • Power (mW)
  • Device Management:
    • UUID-based device filtering (iOS doesn't expose MAC addresses)
    • Discovered devices list
    • Optional device whitelist
    • Discovery mode for debugging
  • Visual Features:
    • Signal strength indicator (RSSI in dBm)
    • Color-coded RSSI display
    • Card-based UI with borders and shadows
    • Dark/Light mode support
  • Smart Features:
    • Automatic deduplication of readings based on nonce
    • Keeps last 100 readings
    • Company ID filtering (0xFFFF)

Requirements

  • iOS 15.0 or later
  • iPhone or iPad with Bluetooth LE support
  • Xcode 15.0 or later (for building)

Device Filtering

Note: iOS does not expose Bluetooth MAC addresses for privacy reasons. Instead, the app uses device UUIDs which are assigned by iOS.

How to Filter Devices

  1. Start scanning - The app will show all devices with Company ID 0xFFFF
  2. Open Settings - Tap the gear icon in the top-right
  3. View discovered devices - All found devices are listed with their UUIDs
  4. Add to filter - Tap "Add" next to any device to whitelist it
  5. Manual entry - You can also manually enter UUIDs in the format 12345678-1234-1234-1234-123456789ABC

When the whitelist is empty, all devices with the correct Company ID are shown. When you add devices to the whitelist, only those specific devices will display readings.

BLE Protocol

The app scans for BLE devices with the following characteristics:

  • Company ID: 0xFFFF (required)
  • Device Name: Optional, not used for filtering
  • Data Format (16 bytes, little-endian):
    • Bytes 0-1: Nonce (UInt16)
    • Bytes 2-3: Temperature (Int16, divide by 100 for °C)
    • Bytes 4-5: Humidity (UInt16, divide by 100 for %)
    • Bytes 6-9: Pressure (UInt32, divide by 10 for hPa)
    • Bytes 10-11: Voltage (UInt16, divide by 100 for V)
    • Bytes 12-15: Current (Int32, divide by 100 for mA)

Building the App

Using Xcode

  1. Open EnvSensorReader.xcodeproj in Xcode
  2. Select your target device or simulator
  3. Press Cmd+R to build and run

Using xcodebuild (command line)

For iOS device:

xcodebuild clean build \
  -project EnvSensorReader.xcodeproj \
  -scheme EnvSensorReader \
  -sdk iphoneos \
  -configuration Release

For iOS Simulator:

xcodebuild clean build \
  -project EnvSensorReader.xcodeproj \
  -scheme EnvSensorReader \
  -sdk iphonesimulator \
  -configuration Release

GitHub Actions

This project includes a GitHub Actions workflow that automatically builds the app on every push to main/master/develop branches. The workflow:

  • Builds for both iOS device and simulator
  • Runs on macOS runners
  • Archives build artifacts for download
  • Supports manual triggering via workflow_dispatch

Permissions

The app requires Bluetooth permissions to function. The following permissions are declared in Info.plist:

  • NSBluetoothAlwaysUsageDescription: For scanning BLE devices
  • NSBluetoothPeripheralUsageDescription: For BLE peripheral access

Users will be prompted to grant Bluetooth access when the app first launches.

Project Structure

EnvSensorReader/
├── EnvSensorReader/
│   ├── EnvSensorReaderApp.swift    # App entry point
│   ├── ContentView.swift           # Main UI
│   ├── BLEManager.swift            # BLE scanning and parsing
│   ├── SensorReading.swift         # Data model
│   ├── Assets.xcassets/            # App assets
│   └── Info.plist                  # App configuration
├── EnvSensorReader.xcodeproj/      # Xcode project
└── .github/
    └── workflows/
        └── build.yml               # CI/CD workflow

Python Version

This iOS app is a port of the Python script env_reader.py which uses the Bleak library for BLE scanning. Both versions implement the same protocol and functionality.

License

This project is provided as-is for educational and development purposes.