Busch-Jaeger Free@Home

Your problem is that you are logging in with a usename unknown to the SysAp / username without installer rights (as set within the SysAp interface).

Some more log details would be required to identify your issue.

I had the same problem with my busch jƤger sysapā€¦

I have to restart the bundle manually after the openhab container was booted from my Synology NASā€¦

bundle:restart org.openhab.binding.freeathome in the console, otherwise the bridge would not go online.

My bridge is created via .thing file

Bridge freeathome:bridge:sysap "SysAP_Bridge" @ "Room" [ host="yx", ipAddress="xy", port="5280", login="<username_withInstallerRights>", password="<pw>", log_dir="/tmp/", log_enabled=false, dummy_things_enabled=true ] {
    //PC
    Thing raffstore Raff_PC_Doppel "Raff_PC_Doppel" @ "PC" [ DeviceId="<..>", ChannelId="ch0003", InputIdComplete="idp0000", InputIdPercentage="idp0002", InputIdStepwise="idp0001", OutputIdPercentage="odp0001" ]
    Thing raffstore Raff_PC_Klein "Raff_PC_Klein" @ "PC" [ DeviceId="<..>", ChannelId="ch0003", InputIdComplete="idp0000", InputIdPercentage="idp0002", InputIdStepwise="idp0001", OutputIdPercentage="odp0001" ]

Hello all,
I have installed OpenHAB 3.3.0 on Ubuntu and downloaded freeathome binding from GitHub - andrasU/openhab-free-home-binding: OpenHAB free@home binding.
My SysAP is version 3.1.0 and Freeathome bridge in OH is online.
Unfortunately when I try to add thing - scan doesnt find any item. I dont see any messages in /var/log/openhab/openhab.log or event.log.
Any idea where problem could be? Or how to enable debub logging?
Thanks

Hello,

at frist you have to setup the bridge manually.

Afterwards the scan will work.

I just updated my SysAP to the new Version 3.1.0 Revision 9754, and the binding still works fine.

Hello,

thanks for quick response.
I have Free@Home Bridge already configured. Please see screenshot:

Bridge is online but scan cannot find any device. Is there any way how to track down communication with SysAP?
I am new in this area so I hope I installed freeathome binding properly (just downloaded to specific folder in linux). I will try to investigate if did something wrong during installation.

I see you are using the swagger version of the binding created by @UhA, so then I am uncertain what is the problem.

The other version of the binding could be downloaded:
https://community.openhab.org/t/busch-jaeger-free-home/31043/599?u=kjoglums

Thanks a lot. I installed version you shared and now it works very well.
Have a nice day

Is it possible to get/see the source code of that binding? I want to learn, how to create a binding.

PS: My special issue is, that Iā€™m at 3.1.0 of my SysAP2 and get an connection error. I believe the XMPP protocol changed in some way, that the addon canā€™t used.
I wanted to upload the openapi.json, but as new user I was not allowed to do that. Because of that, I posted the YAML file inline.

openapi: 3.0.1
info:
  title: free@home API
  description: free@home is the leading Smart Home System from ABB.
  version: v1
servers:
  - url: https://{hostname}/fhapi/v1
    variables:
      hostname:
        default: 192.168.2.1
        description: Hostname of the System Access Point or IP Address
paths:
  /api/rest/configuration:
    get:
      tags:
        - api
      summary: Get configuration
      description:
        "Get configuration for all user registered System Access Points, this
        includes the schema for all devices, channels and data points, the floorplan and
        current user information.
        \n\n
        The response body is a JSON object that uses the SysAP UUID of each SysAP of the
        requesting user account as key. The configuration of that SysAP is the corresponding
        value and is again a JSON object.
        \n\n
        You can find further description and an example of the returned data model in the
        [documentation](https://developer.eu.mybuildings.abb.com/fah_cloud/concepts/#data-model)
        and an example of this request in the
        [samples](https://developer.eu.mybuildings.abb.com/fah_cloud/samples/#query-the-configuration)."
      operationId: getconfiguration
      responses:
        "200":
          description: Configuration
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Configuration"
        "502":
          description: free@home error
          content:
            text/plain:
              schema:
                $ref: "#/components/schemas/ApiRestConfigurationGet502TextPlainResponse"
        "401":
          $ref: "#/components/responses/UnauthorizedError"
  /api/rest/devicelist:
    get:
      tags:
        - api
      summary: Get devicelist
      description: "Get list of devices for all System Access Points.
        \n\n
        This endpoint is similar to the /api/rest/configuration endpoint,
        but only provides access to the list of Device IDs that are known
        by each SysAP, not their corresponding configuration."
      operationId: getdevicelist
      responses:
        "200":
          description: Devicelist
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Devicelist"
        "502":
          description: free@home error
          content:
            text/plain:
              schema:
                $ref: "#/components/schemas/ApiRestDevicelistGet502TextPlainResponse"
        "401":
          $ref: "#/components/responses/UnauthorizedError"
  "/api/rest/device/{sysap}/{device}":
    get:
      tags:
        - api
      summary: Get device
      description: "Get configuration information for given device.
        \n\n
        This endpoint is similar to the /api/rest/configuration endpoint,
        but except for returning the full configuration of all SysAPs,
        it returns the configuration of a single device in a single SysAP
        only and therefore is much faster and requires less bandwidth.
        \n\n
        The response body is a JSON object that maps the (single) SysAP
        UUID to an object that contains \"devices\" object (only) which
        in turn holds the specified device object (only).
        \n\n
        See also the [documentation](https://developer.eu.mybuildings.abb.com/fah_cloud/concepts/#data-model)
        for the meaning of the contents of the device object."
      operationId: getdevice
      parameters:
        - name: sysap
          in: path
          description: SysAP UUID
          required: true
          schema:
            $ref: "#/components/schemas/SysapUuid"
          example: "00000000-0000-0000-0000-000000000000"
        - name: device
          in: path
          description: Device Serial
          required: true
          schema:
            $ref: "#/components/schemas/DeviceSerial"
          example: "6000D2CB27B2"
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiRestDevice_sysap__device_Get200ApplicationJsonResponse"
        "502":
          description: free@home error
          content:
            text/plain:
              schema:
                $ref: "#/components/schemas/ApiRestDevice_sysap__device_Get502TextPlainResponse"
        "401":
          $ref: "#/components/responses/UnauthorizedError"
  "/api/rest/datapoint/{sysap}/{device}.{channel}.{datapoint}":
    get:
      tags:
        - api
      summary: Get datapoint value
      description: "Get the current value of a given datapoint.
        See the
        [documentation on datapoints](https://developer.eu.mybuildings.abb.com/fah_cloud/concepts/#input-and-output-datapoints)
        for further information and the
        [samples](https://developer.eu.mybuildings.abb.com/fah_cloud/samples/#query-a-datapoint)
        for an example."
      operationId: getdatapoint
      parameters:
        - name: sysap
          in: path
          description: SysAP UUID
          required: true
          schema:
            $ref: "#/components/schemas/SysapUuid"
          example: "00000000-0000-0000-0000-000000000000"
        - name: device
          in: path
          description: "Datapoint Serial.
            as obtained from e.g. a
            /api/rest/configuration call."
          required: true
          schema:
            $ref: "#/components/schemas/DeviceSerial"
          example: "6000D2CB27B2"
        - name: channel
          in: path
          description: "Channel of a device.
            Selects a channel in a device, as obtained from e.g. a
            /api/rest/configuration call."
          required: true
          schema:
            $ref: "#/components/schemas/ChannelSerial"
          example: "ch0000"
        - name: datapoint
          in: path
          description: "Datapoint Serial.
            Selects a datapoint in a channel of a device."
          required: true
          schema:
            $ref: "#/components/schemas/DatapointSerial"
          example: "odp0000"
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiRestDatapoint_sysap__serial_Get200ApplicationJsonResponse"
        "401":
          $ref: "#/components/responses/UnauthorizedError"
    put:
      tags:
        - api
      summary: Set datapoint value
      description: "Set a new value for a given datapoint.
        See the
        [documentation on datapoints](https://developer.eu.mybuildings.abb.com/fah_cloud/concepts/#input-and-output-datapoints)
        for further information and the
        [samples](https://developer.eu.mybuildings.abb.com/fah_cloud/samples/#set-a-datapoint)
        for an example."
      operationId: putdatapoint
      parameters:
        - name: sysap
          in: path
          description: SysAP UUID
          required: true
          schema:
            $ref: "#/components/schemas/SysapUuid"
          example: "00000000-0000-0000-0000-000000000000"
        - name: device
          in: path
          description: "Datapoint Serial.
            as obtained from e.g. a
            /api/rest/configuration call."
          required: true
          schema:
            $ref: "#/components/schemas/DeviceSerial"
          example: "6000D2CB27B2"
        - name: channel
          in: path
          description: "Channel of a device.
            Selects a channel in a device, as obtained from e.g. a
            /api/rest/configuration call."
          required: true
          schema:
            $ref: "#/components/schemas/ChannelSerial"
          example: "ch0000"
        - name: datapoint
          in: path
          description: "Datapoint Serial.
            Selects a datapoint in a channel of a device."
          required: true
          schema:
            $ref: "#/components/schemas/DatapointSerial"
          example: "odp0000"
      requestBody:
        description: New value
        content:
          text/plain:
            schema:
              $ref: "#/components/schemas/ApiRestDatapoint_sysap__serial_PutRequest"
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiRestDatapoint_sysap__serial_Put200TextPlainResponse"
        "502":
          description: free@home error
          content:
            text/plain:
              schema:
                $ref: "#/components/schemas/ApiRestDatapoint_sysap__serial_Put502TextPlainResponse"
        "401":
          $ref: "#/components/responses/UnauthorizedError"
  /api/ws:
    get:
      summary: Websocket connection
      description: "This endpoint is used to open a websocket connection.
        In order to use this endpoint, you must use a websocket implementation and use the \"wss://\"
        protocol schema instead of \"https\",a normal http request on this URL will fail.
        \n\n
        When the websocket has been opened successfully, the client will receive events from the
        free@home cloud for all registered SysAPs in the account of the requester.
        \n\n
        Also note that this call can NOT be tested by using the swagger ui frontend (the \"Try it\" button).
        You must use a websocket implementation for this request, the portal does not support this.
        See the [websocket section](https://developer.eu.mybuildings.abb.com/fah_cloud/concepts/#websocket) in the documentation for an example."
      operationId: ws
      responses:
        "101":
          description: "Switching protocols (websocket success).
            This response code is sent to indicate that the connection is upgraded from an HTTP to a websocket connection.
            You should normally not see this response code, the library/code that implements the websocket should have handled this."
        "418":
          description: "This code will never replied from the server.
            This response code only exists to document the schema of messages that are send by the server on the websocket."
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/WebsocketMessage"
        "401":
          $ref: "#/components/responses/UnauthorizedError"
  "/api/rest/virtualdevice/{sysap}/{serial}":
    put:
      tags:
        - api
      summary: Create virtual device
      description: "Create a virtual device inside free@home.
        You can choose a serialnumber freely.
        The following devices can be created:
        <ul>
        <li>BinarySensor</li>
        <li>SwitchingActuator </li>
        <li>CeilingFanActuator </li>
        <li>RTC </li>
        <li>DimActuator </li>
        <li>WindowSensor </li>
        <li>ShutterActuator </li>
        <li>WeatherStation </li>
        <li>Weather-TemperatureSensor </li>
        <li>Weather-WindSensor </li>
        <li>Weather-BrightnessSensor </li>
        <li>Weather-RainSensor </li>
        <li>CODetector </li>
        <li>FireDetector</li>
        <li>KNX-SwitchSensor</li>
        <li>MediaPlayer</li>
        <li>EnergyBattery</li>
        <li>EnergyInverter</li>
        <li>EnergyMeter</li>
        <li>EnergyInverterBattery</li>
        <li>EnergyInverterMeter</li>
        <li>EnergyInverterMeterBattery</li>
        <li>EnergyMeterBattery</li>
        <li>AirQualityCO2</li>
        <li>AirQualityCO</li>
        <li>AirQualityFull</li>
        <li>AirQualityHumidity</li>
        <li>AirQualityNO2</li>
        <li>AirQualityO3</li>
        <li>AirQualityPM10</li>
        <li>AirQualityPM25</li>
        <li>AirQualityPressure</li>
        <li>AirQualityTemperature</li>
        <li>AirQualityVOC</li>
        </ul>
        \n\n
        As response you should recieve a success message with internal serialnumber granted by the SysAP for that virtual device.
        Now you can continue working with that virtual device as with any other native free@home component via free@home API.
        \n\n
        This endpoint is also used to update the TTL regularly per device.
        When the application does not call this endpoint every TTL seconds (defaults to 180),
        the SysAP will mark the virtual device as unresponsive until a newlife sign is send.
        Changes to the datapoints can be sent via the /api/rest/datapoint/ endpoint.
        \n\n
        Please find further description in the [virtual device documentation](https://developer.eu.mybuildings.abb.com/fah_cloud/concepts/#virtual-devices)
        and an example in the [samples](https://developer.eu.mybuildings.abb.com/fah_cloud/samples/#how-to-register-a-virtual-device)."
      operationId: create-virtual-device
      parameters:
        - name: sysap
          in: path
          description: SysAP UUID
          required: true
          schema:
            $ref: "#/components/schemas/SysapUuid"
          example: "00000000-0000-0000-0000-000000000000"
        - name: serial
          in: path
          description: serialnumber for virtual device (choose freely)
          required: true
          schema:
            $ref: "#/components/schemas/NativeSerial"
          example: "abcd12345"
      requestBody:
        description: Optional description in *JSON*
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/VirtualDevice"
      responses:
        "200":
          description: successful
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/VirtualDevicesSuccess"
        "502":
          description: free@home error
        "401":
          $ref: "#/components/responses/UnauthorizedError"
  "/api/rest/proxydevice/{sysap}/{class}/{device}/action/{action}":
    get:
      tags:
        - "experimental api"
      summary: Trigger proxy device
      description: "Trigger proxy device"
      operationId: proxydevice
      parameters:
        - name: sysap
          in: path
          description: SysAP UUID
          required: true
          schema:
            $ref: "#/components/schemas/SysapUuid"
          example: "00000000-0000-0000-0000-000000000000"
        - name: class
          in: path
          description: "device class"
          required: true
          schema:
            $ref: "#/components/schemas/DeviceClass"
          example: "pushbutton"
        - name: device
          in: path
          description: "individual device ID"
          required: true
          schema:
            $ref: "#/components/schemas/NativeSerial"
          example: "shelly"
        - name: action
          in: path
          description: "action to execute"
          required: true
          schema:
            type: string
            enum:
              - "shortpress"
              - "doublepress"
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiRestDevice_sysap__device_Get200ApplicationJsonResponse"
        "502":
          description: free@home error
          content:
            text/plain:
              schema:
                $ref: "#/components/schemas/ApiRestDevice_sysap__device_Get502TextPlainResponse"
        "401":
          $ref: "#/components/responses/UnauthorizedError"
  "/api/rest/proxydevice/{sysap}/{class}/{device}/value/{value}":
    put:
      tags:
        - "experimental api"
      summary: Set proxy device value
      description: "Set proxy device value"
      operationId: proxydevice_value
      parameters:
        - name: sysap
          in: path
          description: SysAP UUID
          required: true
          schema:
            $ref: "#/components/schemas/SysapUuid"
          example: "00000000-0000-0000-0000-000000000000"
        - name: class
          in: path
          description: "device class"
          required: true
          schema:
            $ref: "#/components/schemas/DeviceClass"
          example: "temperaturesensor"
        - name: device
          in: path
          description: "individual device ID"
          required: true
          schema:
            $ref: "#/components/schemas/NativeSerial"
          example: "shelly"
        - name: value
          in: path
          description: "value to be set"
          required: true
          schema:
            type: string
            enum:
              - "temperature"
              - "alarm"
      responses:
        "200":
          description: Success
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiRestDevice_sysap__device_Get200ApplicationJsonResponse"
        "502":
          description: free@home error
          content:
            text/plain:
              schema:
                $ref: "#/components/schemas/ApiRestDevice_sysap__device_Get502TextPlainResponse"
        "401":
          $ref: "#/components/responses/UnauthorizedError"
components:
  schemas:
    Error:
      type: object
      properties:
        code:
          type: string
        detail:
          type: string
        title:
          type: string
      nullable: true
      example:
        code: "2010"
        detail: FreeAtHome connection timeout
        title: Connection Error
    SysapUuid:
      type: string
      pattern: "^0{8}-0{4}-0{4}-0{4}-0{12}$"
    DeviceSerial:
      type: string
      pattern: "^[0-9A-Fa-f]{12}$"
    ChannelSerial:
      type: string
      pattern: "^ch[0-9A-Fa-f]{4}$"
    DatapointSerial:
      type: string
      pattern: "^[io]dp[0-9A-Fa-f]{4}$"
    DeviceAndEndPontSerial:
      type: string
      pattern: "^[0-9A-Fa-f]{12}.ch[0-9A-Fa-f]{4}.[io]dp[0-9A-Fa-f]{4}$"
    NativeSerial:
      type: string
      pattern: "^[a-zA-Z0-9\\-_]{1,64}$"
    DeviceClass:
      type: string
      enum:
        - "doorring"
        - "pushbutton"
        - "smokedetector"
        - "temperaturesensor"
    Rooms:
      type: object
      additionalProperties:
        type: object
        properties:
          name:
            type: string
    Floors:
      type: object
      additionalProperties:
        type: object
        properties:
          name:
            type: string
          rooms:
            $ref: "#/components/schemas/Rooms"
    InOutPut:
      type: object
      properties:
        pairingID:
          type: integer
        value:
          type: string
    Channel:
      properties:
        displayName:
          type: string
        functionID:
          type: string
        room:
          type: string
        floor:
          type: string
        inputs:
          type: object
          additionalProperties:
            $ref: "#/components/schemas/InOutPut"
        outputs:
          type: object
          additionalProperties:
            $ref: "#/components/schemas/InOutPut"
        type:
          type: string
    Devices:
      additionalProperties:
        $ref: "#/components/schemas/Device"
    Device:
      type: object
      properties:
        displayName:
          type: string
        room:
          type: string
        floor:
          type: string
        interface:
          type: string
        nativeId:
          type: string
        channels:
          type: object
          additionalProperties:
            $ref: "#/components/schemas/Channel"
    Users:
      type: object
      additionalProperties:
        type: object
        properties:
          enabled:
            type: boolean
          flags:
            type: array
            items:
              type: string
          grantedPermissions:
            type: array
            items:
              type: string
          jid:
            type: string
          name:
            type: string
          requestedPermissions:
            type: array
            items:
              type: string
          role:
            type: string
      example:
        foobar-fhapi:
          enabled: true
          flags:
            - oauth
            - randomPassword
            - system
          grantedPermissions:
            - ""
            - oauth
            - randomPassword
            - system
          requestedPermissions:
            - ""
            - oauth
            - randomPassword
            - system
          role: switch
          name: foobar-fhapi
          jid: foobar-fhapi@busch-jaeger.de
    SysAP:
      type: object
      properties:
        devices:
          $ref: "#/components/schemas/Devices"
        floorplan:
          type: object
          properties:
            floors:
              $ref: "#/components/schemas/Floors"
        sysapName:
          type: string
        users:
          $ref: "#/components/schemas/Users"
        error:
          $ref: "#/components/schemas/Error"
      description: SysAP
    Configuration:
      type: object
      additionalProperties:
        $ref: "#/components/schemas/SysAP"
      description: Configuration for all SysAPs
    Devicelist:
      type: object
      additionalProperties:
        type: array
        items:
          type: string
          description: Device Serial Number
      example:
        3c542979-abe2-43ad-9ce0-f7d2b14b8d48:
          - ABB700000000
    VirtualDeviceType:
      type: string
      enum:
        - "BinarySensor"
        - "BlindActuator"
        - "SwitchingActuator"
        - "CeilingFanActuator"
        - "RTC"
        - "DimActuator"
        - "evcharging"
        - "WindowSensor"
        - "simple_doorlock"
        - "ShutterActuator"
        - "WeatherStation"
        - "Weather-TemperatureSensor"
        - "Weather-WindSensor"
        - "Weather-BrightnessSensor"
        - "Weather-RainSensor"
        - "WindowActuator"
        - "CODetector"
        - "FireDetector"
        - "KNX-SwitchSensor"
        - "MediaPlayer"
        - "EnergyBattery"
        - "EnergyInverter"
        - "EnergyMeter"
        - "EnergyInverterBattery"
        - "EnergyInverterMeter"
        - "EnergyInverterMeterBattery"
        - "EnergyMeterBattery"
        - "AirQualityCO2"
        - "AirQualityCO"
        - "AirQualityFull"
        - "AirQualityHumidity"
        - "AirQualityNO2"
        - "AirQualityO3"
        - "AirQualityPM10"
        - "AirQualityPM25"
        - "AirQualityPressure"
        - "AirQualityTemperature"
        - "AirQualityVOC"
    VirtualDevice:
      type: object
      required:
        - "type"
      properties:
        type:
          $ref: "#/components/schemas/VirtualDeviceType"
        properties:
          type: "object"
          properties:
            ttl:
              type: "string"
            displayname:
              type: "string"
      example:
        {
          "type": "SwitchingActuator",
          "properties": { "ttl": "180", "displayname": "Virtual switch" },
        }
    ScenesTriggered:
      type: object
      additionalProperties:
        type: object
        required:
          - "channels"
        properties:
          channels:
            type: object
            additionalProperties:
              type: object
              required:
                - "outputs"
              properties:
                outputs:
                  type: object
                  additionalProperties:
                    type: object
                    required:
                      - "value"
                      - "pairingID"
                    properties:
                      value:
                        type: string
                      pairingID:
                        type: integer
    WebsocketMessage:
      type: object
      additionalProperties:
        type: object
        required:
          - datapoints
          - devices
          - devicesAdded
          - devicesRemoved
          - scenesTriggered
        properties:
          datapoints:
            type: object
            additionalProperties:
              type: string
          devices:
            type: object
            additionalProperties:
              $ref: "#/components/schemas/Devices"
          devicesAdded:
            type: array
            items:
              type: string
          devicesRemoved:
            type: array
            items:
              type: string
          scenesTriggered:
            $ref: "#/components/schemas/ScenesTriggered"
    ApiRestConfigurationGet502TextPlainResponse:
      type: string
      example: FreeAtHome Connection Timeout
    ApiRestDevicelistGet502TextPlainResponse:
      type: string
      example: FreeAtHome Connection Timeout
    ApiRestDevice_sysap__device_Get200ApplicationJsonResponse:
      type: object
      additionalProperties:
        type: object
        properties:
          devices:
            $ref: "#/components/schemas/Devices"
      example:
        {
          "00000000-0000-0000-0000-000000000000":
            {
              "devices":
                {
                  "600028E1ED13":
                    {
                      "channels":
                        {
                          "ch0000":
                            {
                              "displayName": "Test",
                              "functionID": "0007",
                              "inputs":
                                {
                                  "idp0000": { "pairingID": 1, "value": "0" },
                                  "idp0001": { "pairingID": 2, "value": "0" },
                                  "idp0002": { "pairingID": 3, "value": "0" },
                                  "idp0003": { "pairingID": 4, "value": "0" },
                                  "idp0004": { "pairingID": 6, "value": "0" },
                                  "idp0005": { "pairingID": 48, "value": "" },
                                  "idp0006": { "pairingID": 323, "value": "" },
                                  "idp0007": { "pairingID": 333, "value": "" },
                                  "idp0008": { "pairingID": 334, "value": "" },
                                },
                              "outputs":
                                {
                                  "odp0000": { "pairingID": 256, "value": "0" },
                                  "odp0001": { "pairingID": 257, "value": "0" },
                                  "odp0002": { "pairingID": 273, "value": "" },
                                  "odp0003": { "pairingID": 305, "value": "" },
                                  "odp0004": { "pairingID": 321, "value": "" },
                                  "odp0005": { "pairingID": 335, "value": "" },
                                  "odp0006": { "pairingID": 336, "value": "" },
                                },
                            },
                        },
                      "displayName": "Test",
                      "nativeId": "47110815AA",
                      "unresponsive": false,
                    },
                },
            },
        }
    ApiRestDevice_sysap__device_Get502TextPlainResponse:
      type: string
      example: FreeAtHome Connection Timeout
    ApiRestDatapoint_sysap__serial_Get200ApplicationJsonResponse:
      type: object
      additionalProperties:
        type: object
        properties:
          values:
            type: array
            items:
              type: string
      example: { "00000000-0000-0000-0000-000000000000": { "values": ["1"] } }
    ApiRestDatapoint_sysap__serial_PutRequest:
      type: string
      example: "1"
    ApiRestDatapoint_sysap__serial_Put200TextPlainResponse:
      type: object
      example: { "00000000-0000-0000-0000-000000000000": { "result": "OK" } }
    ApiRestDatapoint_sysap__serial_Put502TextPlainResponse:
      type: string
      example: FreeAtHome Connection Timeout
    VirtualDevicesSuccess:
      description: payload contains new generated device id
      type: object
      additionalProperties:
        type: object
        properties:
          devices:
            type: object
            additionalProperties:
              type: object
              properties:
                serial:
                  type: string
      example:
        {
          "00000000-0000-0000-0000-000000000000":
            { "devices": { "abcd12345": { "serial": "6000D2CB27B2" } } },
        }
  responses:
    UnauthorizedError:
      description: Authentication information is missing or invalid

  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
security:
  - basicAuth: []
tags:
  - name: api
    description: Main API
  - name: "experimental api"
    description: Experimental API

https://github.com/kjoglum/openhab2-addons/tree/freeathome-3.0/bundles/org.openhab.binding.freeathome

Does this work with Firmware 3.1.0? Because I canā€™t get any connection. My user isnā€™t the ā€žinstallerā€œ account, and the API setting created some long username.

As I wrote above:

It works fine with the 3.1.0 Firmware

Yes, I am running this version of the binding, being the source code as referred to above under SysAp FW version 3.1.0. Although, you need to be using a SysAp account set up with ā€œinstallerā€ rights to get the binding working.

Also, as @ML1982 points out: You need to manually set up the bridge first (using correct IP and account with installer rights), and once the bridge is online, you can scan for things for autodiscovery.

Iā€™ve uploaded the JAR into the /usr/share/openhab/addons folder and changed via chown the user to openhab. My free@home system has an activated API. The used user has all rights within free@home (compared to the ā€œinstallerā€).

But itā€™s always initializing. I donā€™t know why.

Is there a way to see any logs? (sorry, but Iā€™m new to openHAB).

Uncertain what you are trying to achieve with the chown feature, which only is used for permissions of the file system itself. Also uncertain what the Activated API is.

As part of manual configuration of the bridge within openHAB, you need to use username/password for a SysAp account registerred with installer rights. Under SysAp, you could for instance create a new installer account to be used by openHAB only.

Also, you should try restarting OH if you are getting only Initializing.

Oh, you are not using the official API, because for that I get another username (not my real one).

I canā€™t post more then one image (new user). Maybe I should use Photoshop to show my setup.

At first, I will try my real username.

Edit: With my real username:

Something is real strange.

I have SysAp v1, FW 3.1.0. I am also using the official API, although being the cloud API as local API is only supported by SysAp v2. The cloud API is integrated in the binding by means of auto discovery of devices (recognized by the device type ID), so I am not relying on API input in the F@H / openHAB interface itself. So, I also have a API user registered in SysAp, but I still use my username (with installer rights) used to log in to the SysAp from browser, to log in to the bridge from openHAB.

To troubleshoot further why you only get your bridge Initializing and Offline you should:

  • Reboot openHAB a couple of times
  • Provide debug logs to show what is happening during startup

Your explanation sounds strange. I have a SysAP 2 and want to use the local API (not the cloud API). My current problem is that I broke my Raspberry SD card and need to get a new one to test again.

In the meantime, I will check your source code and try to reproduce the calls with postman (or other tools). I didnā€™t find any reference to XMPP in the documentation for my SysAP 2, so Iā€™m confused.

I will reply on Wednesday when I have new hardware.

Edit: I search for XMPP and found out, that XMPP is an undocumented feature and for SysAP 2 you could use the local API. Does anybody has a SysAP 2 to confirm, that the addon is working (and Iā€™m too stupid to configure it)?

@kjoglums Iā€™m trying to create a local API binding addon, so we donā€™t need any cloud to get the data.

The binding from kjoglums is using an undocumented XMPP interface of free@home and NOT the official REST API from Busch-Jaeger!

1 Like

Yes, and because of that, it can be broken everytime. Thanks @jannodeluxe.