JSPM

  • Created
  • Published
  • Downloads 15
  • Score
    100M100P100Q79107F
  • License MIT

HomeKit to MQTT bridge

Package Exports

  • homekit2mqtt

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (homekit2mqtt) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

homekit2mqtt

mqtt-smarthome NPM version Dependency Status Build Status Coverage Status XO code style License

HomeKit to MQTT bridge 🏡📱

Depends on HAP-NodeJS by KhaosT, all credits belong to him.

This project follows the mqtt-smarthome architecture. I'm using this to control a multitude of MQTT-connected "Things" in my home automation through Siri and with HomeKit apps.

Installation

Prerequisites:

  • Debian, Ubuntu, Raspbian or macOS
  • Node.js 6 or higher
  • If you're running on Linux, you'll need to make sure you have the libavahi-compat-libdnssd-dev package installed: sudo apt-get install libavahi-compat-libdnssd-dev

sudo npm install -g homekit2mqtt --unsafe-perm

Command Line Options

Usage: homekit2mqtt [options]

Options:
  -v, --verbosity    possible values: "error", "warn", "info", "debug"
                                                               [default: "info"]
  -m, --mapfile      JSON file containing HomeKit Services to MQTT mapping
                     definitions. See Readme.                          [default:
         "/Users/basti/WebstormProjects/homekit2mqtt/example-homekit2mqtt.json"]
  -n, --name         instance name. used as mqtt client id and as prefix for
                     connected topic                        [default: "homekit"]
  -u, --url          mqtt broker url. See
                     https://github.com/mqttjs/MQTT.js/wiki/mqtt
                                                   [default: "mqtt://127.0.0.1"]
  -s, --storagedir   directory to store homekit data
  -p, --port         port homekit2mqtt is listening on          [default: 51826]
  -w, --web-port     port webserver is listening on             [default: 51888]
  -x, --disable-web  disable webserver
  -h, --help         Show help                                         [boolean]
  --version          Show version number                               [boolean]
  -c, --pincode                                          [default: "031-45-154"]
  -a, --username                                  [default: "CC:22:3D:E3:CE:F6"]
  -b, --bridgename                                      [default: "MQTT Bridge"]
                                                                 

Configuration

homekit2mqtt needs a JSON file that defines devices and mappings from MQTT-topics and payloads to HomeKit-characteristics. You can either create this manually or use the Web UI to configure homekit2mqtt. The Webserver listens on Port 51888 by default, authentication username is homekit and the password is the pincode (031-45-154 by default).

Web UI Web UI

See example-homekit2mqtt.json for an example configuration. Every Accessory is represented like this in the JSON file:

  "TemperatureSensor": {                                    // Unique Name - used to generate the accessory UUID
    "service": "TemperatureSensor",                         // HomeKit Service Type (see below)
    "name": "TemperatureSensor",                            // Display Name
    "topic": {                                              
        // ... MQTT Topic Configuration ...
    },
    "payload": {
        // ... MQTT Payload Configuration ...
    },
    "manufacturer": "Generic",                              // Additional Accessory Infos (optional)
    "model": "TemperatureSensor"                            // Additional Accessory Infos (optional)
  }

Available Service Types

BatteryService

topic

  • statusBatteryLevel
    Percentage 0-100
  • statusChargingState
    0 = NOT_CHARGING, 1 = CHARGING, 2 = NOT_CHARGEABLE
  • statusLowBattery

payload

  • onLowBattery

CarbonDioxideSensor

topic

  • statusCarbonDioxideDetected
  • statusLowBattery (optional)
  • identify (optional)
  • statusTampered (optional)
  • statusActive (optional)
  • statusFault (optional)

payload

  • onCarbonDioxideDetected
  • onLowBattery (optional)
  • identify (optional)
  • onTampered (optional)
  • onActive (optional)
  • onFault (optional)

CarbonMonoxideSensor

topic

  • statusCarbonMonoxideDetected
  • statusLowBattery (optional)
  • identify (optional)

payload

  • onCarbonMonoxideDetected
  • onLowBattery (optional)
  • identify (optional)

ContactSensor

topic

  • statusContactSensorState
  • statusLowBattery (optional)
  • identify (optional)
  • statusTampered (optional)
  • statusActive (optional)
  • statusFault (optional)

payload

  • onContactDetected
  • onLowBattery (optional)
  • identify (optional)
  • onTampered (optional)
  • onActive (optional)
  • onFault (optional)

Door

topic

  • setTargetPosition
  • statusTargetPosition (optional)
  • statusCurrentPosition (optional)
  • statusPositionState (optional)
  • statusObstruction (optional)
  • identify (optional)

payload

  • targetPositionFactor (optional)
  • currentPositionFactor (optional)
  • positionStatusDecreasing (optional)
  • positionStatusIncreasing (optional)
  • onObstructionDetected (optional)
  • identify (optional)

Doorbell

topic

  • statusEvent
  • identify (optional)

payload

  • identify (optional)

Fan

topic

  • setOn
  • statusOn (optional)
  • setRotationDirection (optional)
  • statusRotationDirection (optional)
  • setRotationSpeed (optional)
  • statusRotationSpeed (optional)
  • identify (optional)

payload

  • onTrue (optional, default: true)
  • onFalse (optional)
  • rotationDirectionCounterClockwise (optional, default: 1)
  • rotationDirectionClockwise (optional)
  • rotationSpeedFactor (optional, default: 1)
  • identify (optional)

Faucet

topic

  • setActive
  • statusActive (optional)
  • statusFault (optional)

payload

  • activeTrue (optional, default: true)
  • activeFalse (optional)
  • faultTrue (optional, default: true)

GarageDoorOpener

topic

  • setDoor
  • statusDoor (optional)
  • statusObstruction (optional)
  • setLock (optional)
  • statusLock (optional)
  • identify (optional)

payload

  • doorOpen
  • doorClosed
  • doorOpening (optional)
  • doorClosing (optional)
  • doorStopped (optional)
  • onObstructionDetected (optional)
  • lockUnsecured (optional)
  • lockSecured (optional)
  • identify (optional)

HumiditySensor

topic

  • statusHumidity
  • statusLowBattery (optional)
  • identify (optional)

payload

  • onLowBattery (optional)
  • identify (optional)

IrrigationSystem

topic

  • setActive
  • statusActive
  • statusFault (optional)
  • statusInUse
  • statusRemainingDuration
  • statusProgramMode

payload

  • activeTrue (optional, default: true)
  • activeFalse (optional)
  • faultTrue (optional, default: true)
  • inUseTrue (optional, default: true)

LeakSensor

topic

  • statusLeakDetected
  • statusLowBattery (optional)
  • identify (optional)

payload

  • onLeakDetected
  • onLowBattery (optional)
  • identify (optional)

Lightbulb

topic

  • setOn
  • statusOn (optional)
  • setBrightness (optional)
  • statusBrightness (optional)
  • setHue (optional)
  • statusHue (optional)
  • setSaturation (optional)
  • statusSaturation (optional)
  • setColorTemperature (optional)
  • statusColorTemperature (optional)
  • identify (optional)

payload

  • onTrue
  • onFalse
  • brightnessFactor (optional, default: 1)
  • hueFactor (optional, default: 1)
  • saturationFactor (optional, default: 1)
  • identify (optional)

LightSensor

topic

  • statusAmbientLightLevel
  • statusLowBattery (optional)
  • identify (optional)

payload

  • ambientLightLevelFactor (optional, default: 1)
  • onLowBattery (optional)
  • identify (optional)

LockMechanism

topic

  • setLock
  • statusLock (optional)
  • identify (optional)

payload

  • lockSecured
  • identify (optional)

Microphone

topic

  • setMute
  • statusMute (optional)
  • setVolume (optional)
  • statusVolume (optional)
  • identify (optional)

payload

  • muteTrue
  • muteFalse
  • volumeFactor (optional, default: 1)
  • identify (optional)

MotionSensor

topic

  • statusMotionDetected
  • statusLowBattery (optional)
  • identify (optional)

payload

  • onMotionDetected
  • onLowBattery (optional)
  • identify (optional)

OccupancySensor

topic

  • statusOccupancyDetected
  • statusLowBattery (optional)
  • identify (optional)

payload

  • onOccupancyDetected
  • onLowBattery (optional)
  • identify (optional)

Outlet

topic

  • setOn
  • statusOn (optional)
  • statusOutletInUse
  • identify (optional)

payload

  • onFalse
  • onTrue
  • onOutletInUse
  • identify (optional)

SecuritySystem

topic

  • setSecuritySystemTargetState
  • statusSecuritySystemCurrentState (optional)
  • identify (optional)

payload

  • identify (optional)

Slat

topic

  • statusCurrentSlatState
    0 = FIXED, 1 = JAMMED, 2 = SWINGING
  • statusCurrentTiltAngle (optional)
  • statusTargetTiltAngle (optional)
  • setTargetTiltAngle (optional)
  • statusSwingMode (optional)
    0 = SWING_DISABLED, 1 = SWING_ENABLED
  • setSwingMode (optional)
    0 = SWING_DISABLED, 1 = SWING_ENABLED

payload

config

  • SlatType
    0 = HORIZONTAL, 1 = VERTICAL

SmokeSensor

topic

  • statusSmokeDetected
  • statusLowBattery (optional)
  • identify (optional)

payload

  • onSmokeDetected
  • onLowBattery (optional)
  • identify (optional)

Speaker

topic

  • setMute
  • statusMute (optional)
  • setVolume (optional)
  • statusVolume (optional)
  • identify (optional)

payload

  • muteTrue
  • muteFalse
  • volumeFactor, default: 1)
  • identify (optional)

StatelessProgrammableSwitch

topic

  • statusEvent
  • identify (optional)

payload

  • identify (optional)

Switch

topic

  • setOn
  • statusOn (optional)
  • identify (optional)

payload

  • onFalse
  • onTrue
  • identify (optional)

TemperatureSensor

topic

  • statusTemperature
  • statusLowBattery (optional)
  • identify (optional)

payload

  • fahrenheit
    Set to true if your sensor publishes values in degree fahrenheit
  • onLowBattery (optional)
  • identify (optional)

Thermostat

topic

  • setTargetTemperature
  • statusTargetTemperature (optional)
  • statusCurrentTemperature
  • setTargetHeatingCoolingState (optional)
    0 = off, 1 = heat, 2 = cool
  • statusTargetHeatingCoolingState (optional)
    0 = off, 1 = heat, 2 = cool
  • statusCurrentHeatingCoolingState (optional)
    0 = off, 1 = heat, 2 = cool
  • setTargetRelativeHumidity (optional)
  • statusTargetRelativeHumidity (optional)
  • statusCurrentRelativeHumidity (optional)
  • setCoolingThresholdTemperature (optional)
  • statusCoolingThresholdTemperature (optional)
  • setHeatingThresholdTemperature (optional)
  • statusHeatingThresholdTemperature (optional)
  • identify (optional)

payload

  • identify (optional)

config

  • TemperatureDisplayUnits
    0 = CELSIUS, 1 = FAHRENHEIT

Valve

topic

  • setActive
  • statusActive
  • statusFault (optional)
  • statusInUse
  • statusRemainingDuration (optional)
  • setDuration (optional)

payload

  • activeTrue (optional, default: true)
  • activeFalse (optional)
  • faultTrue (optional, default: true)
  • inUseTrue (optional, default: true)

config

  • ValveType (optional, default: 0)
    0 = GENERIC_VALVE, 1 = IRRIGATION, 2 = SHOWER_HEAD, 3 = WATER_FAUCET

Window

topic

  • setTargetPosition
  • statusTargetPosition (optional)
  • statusCurrentPosition (optional)
  • statusPositionState (optional)
  • statusObstruction (optional)
  • identify (optional)

payload

  • targetPositionFactor (optional, default: 1)
  • currentPositionFactor (optional, default: 1)
  • positionStatusDecreasing (optional)
  • positionStatusIncreasing (optional)
  • onObstructionDetected (optional)
  • identify (optional)

WindowCovering

topic

  • setTargetPosition
  • statusTargetPosition (optional)
  • statusCurrentPosition (optional)
  • statusPositionState (optional)
  • identify (optional)

payload

  • targetPositionFactor (optional, default: 1)
  • currentPositionFactor (optional, default: 1)
  • positionStatusDecreasing (optional)
  • positionStatusIncreasing (optional)
  • identify (optional)

License

MIT © Sebastian Raff and homekit2mqtt contributors