0.1.0 • Published 5 months ago

n8n-nodes-hubitat v0.1.0

Weekly downloads
-
License
MIT
Repository
github
Last release
5 months ago

n8n-nodes-hubitat

This n8n integration allows you to interact with your Hubitat devices directly from your n8n workflows.

Installation

Method 1: Local Installation

npm install n8n-nodes-hubitat

Method 2: Development Installation

git clone https://github.com/sboily/n8n-nodes-hubitat.git
cd n8n-nodes-hubitat
npm install
npm run build
npm link

Then, in your n8n installation folder:

cd ~/.n8n
npm link n8n-nodes-hubitat

Compatibility Note

This node is compatible with n8n version 1.0.0 and above. For older versions of n8n, please check the releases for a compatible version.

Configuration

Prerequisites

  1. A Hubitat hub configured and accessible on your network
  2. The Maker API app installed and configured on your Hubitat
  3. An Access Token for the Maker API

Credential Setup

In n8n, add a new credential of type "Hubitat API" with:

  • Hubitat Host: The complete URL of your Hubitat (e.g., http://192.168.0.100)
  • App ID: The ID of your Maker API application
  • Access Token: The access token generated by the Maker API application

Features

Hubitat Node

This node allows you to:

  • Get All Devices: Retrieve a list of all available devices
  • Get a Specific Device: Get details of a particular device
  • Send Command: Send commands to Hubitat devices

Hubitat Trigger

This node allows you to:

  • Listen for Events: Create a webhook endpoint that Hubitat can send events to
  • Filter by Event Type: Choose to listen for all events, device events, mode events, or location events
  • Filter by Device: Optionally filter device events by specific devices
  • Custom Event Types: Listen for custom event types from your Hubitat hub

Hubitat Tool

This node allows you to expose Hubitat functionalities as a tool for AI agents:

  • Multiple Capabilities Support: List devices, get device details, send commands, and manage modes

Usage Examples

Example 1: Get the status of all devices

  1. Add a trigger node (such as "Cron" to execute at regular intervals)
  2. Connect it to a "Hubitat" node
  3. Configure the Hubitat node:
    • Resource: Device
    • Operation: Get All

Example 2: Turn on a light

  1. Add a trigger node (such as "Webhook" for an external API)
  2. Connect it to a "Hubitat" node
  3. Configure the Hubitat node:

Example 3: Automation triggered by Hubitat events

  1. Add a "Hubitat Trigger" node as the start of your workflow
  2. Configure the trigger:
  3. Add subsequent nodes to process the events and perform actions

Example 4: Create a mode-based automation

  1. Add a "Hubitat Trigger" node
  2. Configure it to listen for "Mode Event"
  3. Connect it to a "Switch" node to perform different actions based on the mode value
  4. Add action nodes for each mode scenario

AI Agent Integration Example

Example 1: Create an AI Agent to Control Hubitat

  1. Add a "Hubitat Tool" node
  2. Configure it with the desired capabilities:
    • Tool Name: hubitat
    • Capabilities: List Devices, Get Device, Send Command
  3. The AI can now control your Hubitat devices using natural language

Troubleshooting

  • Connection Issues: Verify that the hub URL is correct and that the Maker API is properly configured
  • Authentication Errors: Make sure your App ID and Access Token are correct
  • Command Not Working: Check that the device ID exists and the command is supported by that device
  • Webhook Not Triggering: Verify that the webhook URL is correctly configured in your Hubitat Maker API settings
  • Build Errors: If you encounter build errors:
    • Make sure you're using compatible versions of n8n-core and n8n-workflow
    • Check the console output for specific error messages
    • Try running with npm run build -- --skipLibCheck true if you have type declaration issues

Development

Building the module

npm run build

Linting

npm run lint

Fix linting issues

npm run lintfix

Testing

This package includes comprehensive unit and integration tests to ensure reliability in production environments.

Running tests

Run all tests:

npm test

Run only unit tests:

npm run test:unit

Run only integration tests:

npm run test:integration

Generate test coverage report:

npm run test:coverage

Test architecture

The tests are organized as follows:

  • Unit tests: Test individual components in isolation with mocks
    • test/unit/nodes/: Tests for node functionality
    • test/unit/credentials/: Tests for credential handling
  • Integration tests: Test components working together
    • test/integration/: End-to-end testing of nodes working together
  • Mocks and test data:
    • test/mocks/: Mock implementations and test data

Continuous Integration

For production deployments, we recommend setting up a CI pipeline that: 1. Builds the package 2. Runs all tests 3. Checks code coverage 4. Performs linting

Dealing with Type Errors

If you encounter type errors during compilation: 1. Make sure you have the correct dependencies installed:

npm install request request-promise-native @n8n_io/riot-tmpl --save
npm install @types/request @types/request-promise-native --save-dev
  1. The repository includes type declarations in the src/types folder to address common typing issues with n8n dependencies.

Project Structure

n8n-nodes-hubitat/
├── src/
│   ├── nodes/
│   │   └── Hubitat/
│   │       ├── Hubitat.node.ts           # Main node for Hubitat API operations
│   │       ├── HubitatTrigger.node.ts    # Webhook trigger node for Hubitat events
│   │       └── hubitat.svg               # Icon for the nodes
│   ├── credentials/
│   │   └── HubitatApi.credentials.ts     # Credential definition for Hubitat API
│   └── types/
│       └── custom.d.ts                   # Custom type declarations
├── test/
│   ├── unit/                             # Unit tests
│   ├── integration/                      # Integration tests
│   └── mocks/                            # Test mocks and fixtures
├── .github/                              # GitHub configuration (actions, templates)
├── package.json                          # Project dependencies and scripts
├── tsconfig.json                         # TypeScript configuration
├── jest.config.js                        # Jest test configuration
├── .eslintrc.js                          # ESLint configuration
├── CODE_OF_CONDUCT.md                    # Community guidelines
└── index.js                              # Main entry point

License

MIT

Credits

This node is based on the node-red-contrib-hubitat project, converted for use with n8n.