• Stars
    star
    167
  • Rank 225,956 (Top 5 %)
  • Language
    Python
  • Created almost 3 years ago
  • Updated 7 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

OPNsense integration with Home Assistant

Build Status hacs_badge

hass-opnsense

Join OPNsense with Home Assistant!

hass-opnsense uses the built-in xmlrpc service of OPNsense for all interactions. This project is currently a proof-of-concept and may fail to work at any time.

Initial development was done againt OPNsense 21.7 and Home Assistant 2021.10.

Overview

installation

Installation

This integration currenlty replaces the built-in OPNsense integration which only provides device_tracker functionality, be sure to remove any associated configuration for the built-in integration before installing this replacement.

The installation requires a plugin on OPNsense and a custom integration in Home Assistant.

OPNsense_plugin

To use the integration you need to install an OPNsense plugin made available on mimugmail repository: https://www.routerperformance.net/opnsense-repo/

First you need to install the repository:

  • open an SSH session on OPNsense and issue the following commands:
fetch -o /usr/local/etc/pkg/repos/mimugmail.conf https://www.routerperformance.net/mimugmail.conf
pkg update

Now you need to install the plugin, you have two ways to do it:

  • In OPNsense web UI, go to System:Firmware:Plugins and install plugin os-homeassistant-maxit
  • From SSH shell: pkg install os-homeassistant-maxit

HomeAssistant_integration

In Home Assistant, add this repository to your HACS installation or clone the directory manually.

HACS_installation

In HACS, add this as a custom repository: https://github.com/travisghansen/hass-opnsense then go to the HACS integrations page, search for OPNsense integration for Home Assistant and install it. Once the integration is installed be sure to restart Home Assistant.

Manual_installation

Copy the contents of the custom_components folder to your Home Assistant config/custom_components folder and restart Home Assistant.

Configuration

Configuration is managed entirely from the UI using config_flow semantics. Simply go to Configuration -> Integrations -> Add Integration and search for OPNsense in the search box. If you can't find it in the list (well-known HA issue) you need to do a 'hard-refresh' of the browser (ctrl-F5) then open the list again, you'll find it there.

OPNsense

  • Create a new user or choose an existing user, and create an API key associated to to that user. When creating the API key, OPNsense will push the API file containing the API key and API secret to your browser, you'll find it in the download folder.
  • If using a non admin user account ensure the user has the following privileges:
    • XMLRPC Library (note that this privilege effectively gives the user complete access to the system via the xmlrpc feature)
    • System:Firmware

config

  • URL - the full URL to your OPNsense UI (ie: https://192.168.1.1), supported format is <scheme>://<ip or host>[:<port>]
  • Verify SSL Certificate - if the SSL certificate should be verified or not (if you get an SSL error try unchecking this)
  • username - the API key created previously
  • password - the API secret of the API key
  • Firewall Name - a custom name to be used for entity naming (default: use the OPNsense hostname)

options

  • Scan Interval (seconds) - scan interval to use for state polling (default: 30)
  • Enable Device Tracker - turn on the device tracker integration using OPNsense arp table (default: false)
  • Device Tracker Scan Interval (seconds) - scan interval to use for arp updates (default: 60)
  • Device Tracker Consider Home (seconds) - seconds to wait until marking a device as not home after not being seen. (default: 0)
    • 0 - disabled (if device is not present during any given scan interval it is considered away)
    • > 0 - generally should be a multiple of the configured scan interval

entities

Many entities are created by hass-opnsense for stats etc. Due to to volume of entities many are disabled by default. If something is missing be sure to review the disabled entities as what you're looking for is probably there.

binary_sensor

  • carp status (enabled/disabled)
  • system notices present (the bell icon in the upper right of the UI)
  • firmware updates available

device_tracker

ScannerEntity entries are created for the OPNsense arp table. Disabled by default. Not only is the feature disabled by default but created entities are currently disabled by default as well. Search the disabled entity list for the relevant mac addresses and enable as desired.

Note that by default FreeBSD/OPNsense use a max age of 20 minutes for arp entries (sysctl net.link.ether.inet.max_age). You may lower that using System -> Advanced -> System Tunables if desired.

Also note that if you are running AdGuardHome DNS queries may get throttled causing issues with the tracker. See #22 for details.

sensor

  • system details (name, version, temp, boottime, etc)
  • pfstate details (used, max, etc)
  • cpu details (average load, frequency, etc)
  • mbuf details
  • memory details
  • filesystem usage
  • interface details (status, stats, pps, kbs (time samples are based on the Scan Interval (seconds) config option))
  • gateways details (status, delay, stddev, loss)
  • carp interface status
  • dhcp stats (total, online, and offline clients)
  • OpenVPN server stats (per-server basis - connected client count, bytes sent/received, kB/s sent/received)

switch

All of the switches below are disabled by default.

  • filter rules - enable/disable rules
  • nat port forward rules - enable/disable rules
  • nat outbound rules - enable/disable rules
  • services - start/stop services (note that services must be enabled before they can be started)

services

service: opnsense.close_notice
data:
  entity_id: binary_sensor.opnsense_localdomain_pending_notices_present
  # default is to clear all notices
  # id: <some id>

service: opnsense.file_notice
data:
  entity_id: binary_sensor.opnsense_localdomain_pending_notices_present
  notice: "hello world"

service: opnsense.system_halt
data:
  entity_id: binary_sensor.opnsense_localdomain_pending_notices_present

service: opnsense.system_reboot
data:
  entity_id: binary_sensor.opnsense_localdomain_pending_notices_present

service: opnsense.start_service
data:
  entity_id: binary_sensor.opnsense_localdomain_pending_notices_present
  service_name: "dpinger"

service: opnsense.stop_service
data:
  entity_id: binary_sensor.opnsense_localdomain_pending_notices_present
  service_name: "dpinger"

service: opnsense.restart_service
data:
  entity_id: binary_sensor.opnsense_localdomain_pending_notices_present
  service_name: "dpinger"
  # only_if_running: false

service: opnsense.send_wol
data:
  entity_id: binary_sensor.opnsense_localdomain_pending_notices_present
  interface: lan
  mac: "B9:7B:A6:46:B3:8B"

Known Issues

AdGuardHome

As mentioned here using AdGuardHome can lead to problems with the plugin. Setting the Ratelimit in AdGuardHome to 0 will resolve this problem.

More Repositories

1

external-auth-server

easy auth for reverse proxies
JavaScript
327
star
2

argo-cd-helmfile

Integration between argo-cd and helmfile
Shell
200
star
3

kubernetes-pfsense-controller

Integrate Kubernetes and pfSense
PHP
195
star
4

hass-pfsense

pfSense integration with Home Assistant
Python
178
star
5

fanout

A simple fanout pubsub message server
C
62
star
6

kubernetes-client-php

No nonsense PHP Client for the Kubernetes API
PHP
31
star
7

freenas-iscsi-provisioner

FreeNAS iscsi provisioner
Go
29
star
8

node-red-slack

A node-red module to post to Slack.com
JavaScript
21
star
9

highcharts-svg

Server Side Exports of Highcharts
JavaScript
16
star
10

gentoo-cloud-image-builder

Create gentoo openstack-compatible images
Shell
15
star
11

chaos

Chaos Gentoo Overlay
Shell
11
star
12

metallb-node-route-agent

ensure return path through incoming bgp routers
JavaScript
9
star
13

docker-registry-curl

Tool to interact with docker registry api
Shell
9
star
14

node-red-contrib-kubernetes-client

Node-RED node for interacting with Kubernetes clusters
JavaScript
9
star
15

phpgpg

Support PGP operations in PHP
PHP
9
star
16

rancher-to-argocd-controller

Shell
8
star
17

pfsense_fauxapi_php_client

pfSense PHP API client
PHP
8
star
18

kannel-twilio

PHP
5
star
19

kubernetes-controller-php

reusable Kubernetes controller base
PHP
4
star
20

kubernetes-pfsense-controller-chart

Smarty
4
star
21

netsuite-php-toolkit

NetSuite PHP Toolkit
PHP
4
star
22

chaos-gitlabhq

playground gentoo overlay to get gitlabhq related items going
Shell
3
star
23

proxmox-utils

Shell
3
star
24

node-red-contrib-lftp

A node-red node that supports FTP(s) and SFTP file transfer.
JavaScript
2
star