Configuration

Description

Configuration is done through config.yml The parent folder of the file can be specified with -c PATH or --config PATH. If nothing is specified the file config.yml is searched in the subdirectory HABApp in

  • the current working directory

  • the venv directory

  • the user home

If the config does not yet exist in the folder a blank configuration will be created

Example

directories:
    logging: log    # If the filename for the logfile in logging.yml is not absolute it will be placed in this directory
    rules: rules    # All *.py files in this folder (and subfolders) will be loaded. Load order will be alphabetical by path.
    param: param    # Optional, this is the folder where the parameter files will be created and loaded from
    config: config  # Folder from which configuration files for openHAB will be loaded
    lib: lib        # Custom modules, libraries and files can be placed there.
                    # (!) Attention (!):
                    # Don't create rule instances in files inside the lib folder! It will lead to strange behaviour.

location:           # Specify the location where your HABApp instance is running
  latitude: 0.0     # The value is used to calculate the Sunrise/Sunset etc accordingly
  longitude: 0.0
  elevation: 0.0

openhab:
    ping:
        enabled: true        # If enabled the configured item will show how long it takes to send an update from HABApp
                             # and get the updated value back in milliseconds
        item: 'HABApp_Ping'  # Name of the NumberItem that will show the ping
        interval: 10         # Seconds between two pings

    connection:
        url: http://localhost:8080
        user: ''
        password: ''

    general:
        listen_only: False  # If True  HABApp will not change any value on the openHAB instance.
                            # Useful for testing rules from another machine.
        wait_for_openhab: True   # If True HABApp will wait for items from the openHAB instance
                                 # before loading any rules on startup


mqtt:
    connection:
        client_id: HABApp
        host: ''
        port: 8883
        user: ''
        password: ''
        tls:
          enabled: false   # Enable TLS for the connection
          insecure: false  # Validate server hostname in server certificate
          ca cert: ''      # Path to a CA certificate that will be treated as trusted
                           # (e.g. when using a self signed certificate)

    subscribe:         # Changes to Subscribe get picked up without restarting HABApp
        qos: 0         # Default QoS for subscribing
        topics:
        - '#'               # Subscribe to this topic, qos is default QoS
        - ['my/topic', 1]   # Subscribe to this topic with explicit QoS

    publish:
        qos: 0          # Default QoS when publishing values
        retain: false   # Default retain flag when publishing values

    general:
        listen_only: False # If True  HABApp will not publish any value to the broker.
                           # Useful for testing rules from another machine.

Configuration Reference

All possible configuration options are described here. Not all entries are created by default in the config file and one should take extra care when changing those entries.

settings ApplicationConfig

Structure that contains the complete configuration

field directories: DirectoriesConfig [Optional]
field habapp: HABAppConfig [Optional]
field location: LocationConfig [Optional]
field mqtt: MqttConfig [Optional]
field openhab: OpenhabConfig [Optional]

Directories

settings DirectoriesConfig

Configuration of directories that are used

field config: Optional[Path] = 'config'

Folder from which configuration files (e.g. for textual thing configuration) will be loaded

field lib: Optional[Path] = 'lib'

Folder where additional libraries can be placed

field logging: Path = 'log'

Folder where the logs will be written to

field param: Optional[Path] = 'params'

Folder from which the parameter files will be loaded

field rules: Path = 'rules'

Folder from which the rule files will be loaded

Location

settings LocationConfig

location where the instance is running. Is used to calculate Sunrise/Sunset.

field elevation: float = 0.0
field latitude: float = 0.0
field longitude: float = 0.0

MQTT

settings MqttConfig

MQTT configuration

field connection: Connection [Optional]
field general: General [Optional]
field publish: Publish [Optional]
field subscribe: Subscribe [Optional]

Connection

settings Connection
field client_id: str = 'HABApp-ChEzDwEwnLyaH'

ClientId that is used to uniquely identify this client on the mqtt broker.

field host: str = ''

Connect to this host. Empty string (“”) disables the connection.

field password: str = ''
field port: int = 1883
field tls: TLSSettings [Optional]
field user: str = ''

TLS

settings TLSSettings
field ca cert: Path = ''

Path to a CA certificate that will be treated as trusted

field enabled: bool = True

Enable TLS for the connection

field insecure: bool = False

Validate server hostname in server certificate

Subscribe

settings Subscribe
field qos: Literal[0, 1, 2] = 0

Default QoS for subscribing

field topics: Tuple[Tuple[str, Optional[Literal[0, 1, 2]]], ...] = ('#',)

Publish

settings Publish
field qos: Literal[0, 1, 2] = 0

Default QoS when publishing values

field retain: bool = False

Default retain flag when publishing values

General

settings General
field listen_only: bool = False

If True HABApp does not publish any value to the broker

Openhab

settings OpenhabConfig
field connection: Connection [Optional]
field general: General [Optional]
field ping: Ping [Optional]

Connection

settings Connection
field buffer: ByteSize = '128kib'

Buffer for reading lines in the SSE event handler. This is the buffer that gets allocated for every(!) request and SSE message that the client processes. Increase only if you get error messages or disconnects e.g. if you use large images.

field password: str = ''
field topic filter: str = 'openhab/items/*,openhab/channels/*,openhab/things/*/added,openhab/things/*/removed,openhab/things/*/status,openhab/things/*/statuschanged'

Topic filter for subscribing to openHAB. This filter is processed by openHAB and only eventsmatching this filter will be sent to HABApp.

field url: Union[AnyHttpUrl, Literal['']] = 'http://localhost:8080'

Connect to this url. Empty string (“”) disables the connection.

field user: str = ''
field verify_ssl: bool = True

Check certificates when using https

Ping

settings Ping
field enabled: bool = True

If enabled the configured item will show how long it takes to send an update from HABApp and get the updated value back from openHAB in milliseconds

field interval: int = 10

Seconds between two pings

Constraints
  • minimum = 0.1

field item: str = 'HABApp_Ping'

Name of the Numberitem

General

settings General
field listen_only: bool = False

If True HABApp does not change anything on the openHAB instance.

field min_start_level: int = 70

Minimum openHAB start level to load items and listen to events

Constraints
  • minimum = 0

  • maximum = 100

field wait_for_openhab: bool = True

If True HABApp will wait for a successful openHAB connection before loading any rules on startup

HABApp

settings HABAppConfig

HABApp internal configuration. Only change values if you know what you are doing!

field logging: LoggingConfig [Optional]
field thread pool: ThreadPoolConfig [Optional]

ThreadPool

settings ThreadPoolConfig
field enabled: bool = True

When the thread pool is disabled HABApp will become an asyncio application. Use only if you have experience developing asyncio applications! If the thread pool is disabled using blocking calls in functions can and will break HABApp

field threads: ConstrainedIntValue = 10

Amount of threads to use for the executor

Constraints
  • minimum = 1

  • maximum = 16

Logging

settings LoggingConfig
field flush every: float = 0.5

Wait time in seconds before the buffer gets flushed again when it was empty

Constraints
  • minimum = 0.1

field use buffer: bool = True

Automatically inject a buffer for the event log