I am currently working for a Norwegian company that manufactures smart water heaters and am reviewing the process of integrating them to the Futurehome platform.
I went through the documentation but am a little confused about the concepts.
In my understanding I should create an adapter (a subset of Edge App) that should serve as a connection between the Futurehome app and our cloud services and communicates over MQTT to Futurehome?
From what I see the water heater service supports a limited set of functionalities like temperature and mode control - is it possible to extend that set of functionality? As an example we wish to set a mode on the device for e specified period of time.
Are there any examples for how to add discovered devices and their functionality?
Thank you for your interest in developing a Playground application.
Currently a water heater device in our system supports only modes and setpoints. A feature you have described in our system is not a part of a device configuration, but automations and behaviors that are configured within the mobile app and then executed through dedicated services running on the hub/gateway. A user can set conditions that need to be met to change the mode or raise/lower temperature on the boiler already using features existing in the mobile application. Then when these conditions happen, those basic commands to change mode or setpoint will be sent to the adapter by the system at a correct time. If this is insufficient, I highly recommend to make an official contact with our product team.
Any edge application can define custom commands that are not defined within FIMP specification. However, the mobile app will not support them, and the only way to access those features will be through the edge application UI, which is limited to procedurally generated set of buttons and fields. It is not recommended to use the playground app UI to manage a device, as it is primarily meant to be used to initially configure the application.
The process of integrating a device into our system depends on the capabilities of the device itself. If the boiler has a Zigbee or Zwave interface it is strongly recommended to use direct communication between Futurehome hub/gateway and the device. In this case our core team would have to prepare special support for your boiler in our internal Zigbee or ZWave adapter.
If the communication with the device is possible only through cloud or local network, an edge application acting as an adapter has to be developed. Once it is received and published in our store it can then be optionally installed and configured by the user on the hub/gateway. Typically in such adapters user will provide some authentication credentials, like user and password or go through OAUTH2 flow. He might also be required to select device from available ones. The application itself is communicating both with the mobile application and other services through internal MQTT running on the gateway/hub. The adapter is expected to listen to certain specific MQTT topics and answer with correct messages as well as occasionally send reports on its own, like temperature readings whenever it changes or a certain amount of time passes. These requirements are described in the development guidelines and FIMP specification.
While we theoretically accept submissions in other languages, like RUST or C++, it is highly recommended to use Golang and utilize our SDK for edge applications and adapters. It does all the heavy lifting of running an adapter and maintaining communication conforming to FIMP specification and recommended best practices, while requiring from a developer to focus mostly on implementing a controller service plugged into the framework. In case of the water heater you need to implement this controller interface: cliffhanger/service.go at df8fb5991d5adde3e676e60b7afaa3157e4910e3 · futurehomeno/cliffhanger · GitHub While our Cliffhanger SDK is still work in progress and unfortunately lacks tutorials and examples for third-parties, we can provide you with an example of an adapter for a boiler.
The documentation for writing edge applications can be found here: Notion – The all-in-one workspace for your notes, tasks, wikis, and databases. . The document needs minor updates but otherwise gives a good view of what is required. The documentation contains links to the old sample application and old development. If developing application in Golang you should use Cliffhanger framework/SDK. GitHub - futurehomeno/cliffhanger: A micro-framework and set of tools for Futurehome edge applications running on the hub.