Climate Control QML Example

The Example shows how to access the climate control from QML.

The example shows how to access the climate control from QML.

In the example, ClimateControl is created and autoDiscovery enabled. When autoDiscovery is enabled, the module starts searching for the presence of a plugin that implements QIviClimateControlBackendInterface.

 ClimateControl {
     id: climateControl
     discoveryMode: ClimateControl.LoadOnlySimulationBackends
 }

Note: To simplify the deployment process, this example loads a simulation backend.

If discovery fails, a message dialog is shown:

 Component.onCompleted: {
     if (!climateControl.isValid)
         messageDialog.open()
 }

As a Climate System can support multiple climate zones, we need to differentiate between the zones. A general zone can be used for settings that are applied to all zones.

General ClimateControl attribute values are handled in check boxes as follows:

 GroupBox {
     title: "Air Flow Direction"

     ColumnLayout {
         anchors.fill: parent
         CheckBox {
             text: "Windshield"
             checked: climateControl.airflowDirections & ClimateControl.Windshield
             onClicked: {
                 if (checked)
                     climateControl.airflowDirections |= ClimateControl.Windshield
                 else
                     climateControl.airflowDirections &= ~ClimateControl.Windshield
             }
         }

         CheckBox {
             text: "Dashboard"
             checked: climateControl.airflowDirections & ClimateControl.Dashboard
             onClicked: {
                 if (checked)
                     climateControl.airflowDirections |= ClimateControl.Dashboard
                 else
                     climateControl.airflowDirections &= ~ClimateControl.Dashboard
             }
         }

         CheckBox {
             text: "Floor"
             checked: climateControl.airflowDirections & ClimateControl.Floor
             onClicked: {
                 if (checked)
                     climateControl.airflowDirections |= ClimateControl.Floor
                 else
                     climateControl.airflowDirections &= ~ClimateControl.Floor
             }
         }
     }
 }

 CheckBox {
     text: "Air Condition"
     checked: climateControl.airConditioningEnabled
     onClicked: {
             climateControl.airConditioningEnabled = checked
     }
 }

 CheckBox {
     text: "Heater"
     checked: climateControl.heaterEnabled
     onClicked: {
             climateControl.heaterEnabled = checked
     }
 }

 CheckBox {
     text: "Air Recirculation"
     checked: climateControl.recirculationMode === ClimateControl.RecirculationOn
     onClicked: {
         if (checked)
             climateControl.recirculationMode = ClimateControl.RecirculationOn
         else
             climateControl.recirculationMode = ClimateControl.RecirculationOff
     }
 }

 ColumnLayout {
     RowLayout {

         Label {
             text: "Fan Speed"
         }

         SpinBox {
             value: climateControl.fanSpeedLevel
             onValueChanged: {
                 climateControl.fanSpeedLevel = value
             }
         }
     }

     RowLayout {

         Label {
             text: "Steering Wheel Heater"
         }

         SpinBox {
             value: climateControl.steeringWheelHeater
             onValueChanged: {
                 climateControl.steeringWheelHeater = value
             }
         }
     }
 }

For the zoned ClimateControl, the zoneAt property is used for controlling the values from the front left climate zone:

 GroupBox {
     title: "Front Left Zone"

     ColumnLayout {
         RowLayout {

             Label {
                 text: "Temperature"
             }

             SpinBox {
                 value: climateControl.zoneAt.FrontLeft.targetTemperature
                 onValueChanged: {
                     climateControl.zoneAt.FrontLeft.targetTemperature = value
                 }
             }
         }

         RowLayout {

             Label {
                 text: "Seat Heater"
             }

             SpinBox {
                 value: climateControl.zoneAt.FrontLeft.seatHeater
                 onValueChanged: {
                     climateControl.zoneAt.FrontLeft.seatHeater = value
                 }
             }
         }
     }
 }

 GroupBox {
     title: "Front Right Zone"

     ColumnLayout {
         RowLayout {

             Label {
                 text: "Temperature"
             }

             SpinBox {
                 value: climateControl.zoneAt.FrontRight.targetTemperature
                 onValueChanged: {
                     climateControl.zoneAt.FrontRight.targetTemperature = value
                 }
             }
         }

         RowLayout {

             Label {
                 text: "Seat Heater"
             }

             SpinBox {
                 value: climateControl.zoneAt.FrontRight.seatHeater
                 onValueChanged: {
                     climateControl.zoneAt.FrontRight.seatHeater = value
                 }
             }
         }
     }
 }

 GroupBox {
     title: "Rear Zone"

     ColumnLayout {
         RowLayout {

             Label {
                 text: "Temperature"
             }

             SpinBox {
                 value: climateControl.zoneAt.Rear.targetTemperature
                 onValueChanged: {
                     climateControl.zoneAt.Rear.targetTemperature = value
                 }
             }
         }

         RowLayout {

             Label {
                 text: "Seat Heater"
             }

             SpinBox {
                 value: climateControl.zoneAt.Rear.seatHeater
                 onValueChanged: {
                     climateControl.zoneAt.Rear.seatHeater = value
                 }
             }
         }
     }
 }

Example project @ code.qt.io