Eurotronic Spirit - Unsupported mode type 31

I don’t really know what this refers to - can you point me at the issue please? At a guess, if this is specific to a device, it would not be implemented in the binding.

Refer to this:

Here is the updated database file:

Correct me if I’m wrong, but there is no need to update the binding to control the valve of the Eurotronic Spirit directly. Update of the database should be enough…

As far as I understand it (OH noob) that would be one step forward - it would give us the required Basic Mode channel. But switching to “Manual” in the popup would still not make valve control work, as long as the special command is not send to the Basic Mode channel, like this:

smarthome:send zwave_device_8e7313d3_node16_basic_mode 254

Only after this is sent, the dimmer-slider controls the valve directly.

And I guess this is what @chris wants to think about:

No, I’m wrong. I completely missed there IS a new dropdown specifically for the basic mode - I oversaw it in the UI… And it sends the right command when Manual is chosen (no console command necessary):

Look at @Mihai_Badea Reply : Eurotronic Spirit - Unsupported mode type 31

Edit:
This is how it looks like with Mihai’s modification.

I think the first popup can go away. I can switch with the bottom popup between Manual and Heat, and the Spirit reacts correctly.

Hallo Andraz,
I plan to implement in my appartment the Spirit thermostats. For now i’m running just on as a test.
My heating schedule is based on this topic: Heating Boilerplate - A Universal Temperature Control Solution with Modes I have the feeling that the valve stays fully opened all the time but the target temperatures are corrrectly displayed. Your’re scheme is based also on rules? Could you be so kind and share the .rules and .items file? Thank you in advance. Codrin

My heating rules are based on the same topic.

thermostat.items:

Group   Heating_Thermostat_Mode
Group   Heating_PresetNormal_Group
Group   Heizung

Number  WZ_TempNormal            "Wohnzimmer Preset (Normal Mode) [%.1f °C]"         (Heating_PresetNormal_Group)
Number  KI_TempNormal            "Küche Preset (Normal Mode) [%.1f °C]"              (Heating_PresetNormal_Group)

String  Heating_Mode             "Global Heating Mode [%s]"
Switch  Heating_UpdateHeaters    "Send Target Temperatures to Heaters"

Number  WZ_Temperatur            "Temperatur: [%.1f °C]"         <temperature> (Heizung,Wohnzimmer,Temperaturen) { channel="zwave:device:512:node6:sensor_temperature" }
Number  WZ_Modus                 "Modus: [%d]"                   <radiator> (Heating_Thermostat_Mode)            { channel="zwave:device:512:node6:thermostat_mode" }
Number  WZ_Batterie              "Batterie: [%d %%]"             <batterylevel> (Heizung,Batterien)              { channel="zwave:device:512:node6:battery-level" }
Number  WZ_Komfort_Temperatur    "Komforttemperatur: [%.1f °C]"  <temperature> (Heizung,Heizung_Soll)            { channel="zwave:device:512:node6:thermostat_setpoint_heating" }
Number  WZ_Spar_Temperatur       "Spartemperatur: [%.1f °C]"     <temperature> (Heizung,Heizung_Soll)            { channel="zwave:device:512:node6:thermostat_setpoint_heating_econ" }
Dimmer  WZ_Ventil_Stellung       "Ventilstellung: [%d %%]"       <DimmableLight> (Heizung)                       { channel="zwave:device:512:node6:switch_dimmer" }
Number  WZ_ext_Temperatur        "ext. Temperatur: [%.2f °C]"    <temperature>   (Temperaturen,Heizung)          { channel="zwave:device:512:node6:sensor_report" }

Number  KI_Temperatur            "Temperatur: [%.1f °C]"         <temperature> (Heizung,Wohnzimmer,Temperaturen) { channel="zwave:device:512:node3:sensor_temperature" }
Number  KI_Modus                 "Modus: [%d]"                   <radiator> (Heating_Thermostat_Mode)            { channel="zwave:device:512:node3:thermostat_mode" }
Number  KI_Batterie              "Batterie: [%d %%]"             <batterylevel> (Heizung,Batterien)              { channel="zwave:device:512:node3:battery-level" }
Number  KI_Komfort_Temperatur    "Komforttemperatur: [%.1f °C]"  <temperature> (Heizung,Heizung_Soll)            { channel="zwave:device:512:node3:thermostat_setpoint_heating" }
Number  KI_Spar_Temperatur       "Spartemperatur: [%.1f °C]"     <temperature> (Heizung,Heizung_Soll)            { channel="zwave:device:512:node3:thermostat_setpoint_heating_econ" }
Dimmer  KI_Ventil_Stellung       "Ventilstellung: [%d %%]"       <DimmableLight> (Heizung)                       { channel="zwave:device:512:node3:switch_dimmer" }
Number  KI_ext_Temperatur        "ext. Temperatur: [%.2f °C]"    <temperature>   (Temperaturen,Heizung)          { channel="zwave:device:512:node3:sensor_report" }

heating_mode.rules:

val String filename = "heating_mode.rules"

rule "Initialize uninitialized virtual Items"
when
    System started
then
    createTimer(now.plusSeconds(180)) [ |
        logInfo(filename, "Executing 'System started' rule for Heating")
        if (Heating_Mode.state == NULL)
        {
            Heating_Mode.postUpdate("NORMAL")
        }
        Heating_PresetNormal_Group.members.filter[item | item.state == NULL].forEach[item | item.postUpdate(19.0)]
        Heating_UpdateHeaters.sendCommand(ON)
    ]
end

rule "React on heating mode switch, send target temperatures"
when
    Item Heating_Mode received update or
    Item Heating_UpdateHeaters received command ON
then
    Heating_UpdateHeaters.postUpdate(OFF)
    logInfo(filename, "Heating Mode: " + Heating_Mode.state)
    switch Heating_Mode.state {
        case "NORMAL": {
            WZ_Komfort_Temperatur.sendCommand(WZ_TempNormal.state as Number)
            KI_Komfort_Temperatur.sendCommand(KI_TempNormal.state as Number)
            WZ_Modus.sendCommand(1)
            KI_Modus.sendCommand(1)
        }
        case "PARTY": {
            WZ_Komfort_Temperatur.sendCommand(22.0)
            KI_Komfort_Temperatur.sendCommand(20.0)
            WZ_Modus.sendCommand(1)
            KI_Modus.sendCommand(1)
        }
        case "SICKDAY": {
            WZ_Komfort_Temperatur.sendCommand(22.0)
            KI_Komfort_Temperatur.sendCommand(20.0)
            WZ_Modus.sendCommand(1)
            KI_Modus.sendCommand(1)
        }
        case "WEEKEND_TRIP": {
            WZ_Komfort_Temperatur.sendCommand(18.0)
            KI_Komfort_Temperatur.sendCommand(16.0)
            WZ_Modus.sendCommand(1)
            KI_Modus.sendCommand(1)
        }
        case "AWAY": {
            WZ_Komfort_Temperatur.sendCommand(17.0)
            KI_Komfort_Temperatur.sendCommand(16.0)
            WZ_Modus.sendCommand(1)
            KI_Modus.sendCommand(1)
        }
        case "OFF_SUMMER": {
            WZ_Modus.sendCommand(0)
            KI_Modus.sendCommand(0)
        }
        default : { logError(filename, "Heating Mode unknown: " + Heating_Mode.state) }
    }
end

// ========================
// mode resets

rule "End PARTY and SICKDAY mode at 2:00 in the night"
when
    Time cron "0 0 2 ? * * *"
then
    if (Heating_Mode.state == "PARTY" || Heating_Mode.state == "SICKDAY") {
        Heating_Mode.postUpdate("NORMAL")
    }
end

rule "End WEEKEND_TRIP mode at 13:00 on Sunday"
when
    Time cron "0 0 13 ? * SUN *"
then
    if (Heating_Mode.state == "WEEKEND_TRIP") {
        Heating_Mode.postUpdate("NORMAL")
    }
end

// ========================
// NORMAL schedule

rule "MON-FRI, 13:00"
when
    Time cron "0 0 13 ? * MON-FRI *"
then
    WZ_TempNormal.postUpdate(22.0)
    KI_TempNormal.postUpdate(20.0)
    Heating_UpdateHeaters.sendCommand(ON)
end

rule "SAT-SUN, 07:00"
when
    Time cron "0 0 07 ? * SAT-SUN *"
then
    WZ_TempNormal.postUpdate(22.0)
    KI_TempNormal.postUpdate(20.0)
    Heating_UpdateHeaters.sendCommand(ON)
end

rule "SUN-THU, 22:00"
when
    Time cron "0 0 22 ? * SUN-THU *"
then
    WZ_TempNormal.postUpdate(18.0)
    KI_TempNormal.postUpdate(18.0)
    Heating_UpdateHeaters.sendCommand(ON)
end

rule "FRI-SAT, 23:00"
when
    Time cron "0 0 23 ? * FRI,SAT *"
then
    WZ_TempNormal.postUpdate(18.0)
    KI_TempNormal.postUpdate(18.0)
    Heating_UpdateHeaters.sendCommand(ON)
end

rule "MON-FRI, 02:00"
when
    Time cron "0 0 02 ? * MON-FRI *"
then
    KI_TempNormal.postUpdate(25.0)
    Heating_UpdateHeaters.sendCommand(ON)
end

rule "MON-FRI, 06:00"
when
    Time cron "0 0 06 ? * MON-FRI *"
then
    KI_TempNormal.postUpdate(18.0)
    Heating_UpdateHeaters.sendCommand(ON)
end

Thank you Franck!

@chris Just thought I’d add my ‘+1’ to this discussion - I’d like to see support for Manual mode implemented in OH if possible.

The manual mode is available isn’t it? It would be good if someone could summarise exactly what is still required in an issue on github. I think that what is needed is a channel linked to the BASIC command class? Or is there something more required?

I opened a ticket for your zwave database last week where the manual mode issue is summarized. An additional channel for the basic command class is required, because the manual mode of thermostat mode doesn’t work.

Here is the solution:

@chris Yes, the Manual mode is already available on the device as a Thermostat Mode. However it needs to be sent the value ‘0xFE’ (‘Manufacturer Specific’) via the Basic command class first before it will recognise it. Once that has been sent, the device will respond to the ‘0x1F’ (‘Manufacturer Specific’) command via the existing ‘thermostat_mode’ Channel. At that point, direct control of the valve position will be available via the existing ‘switch_dimmer’ Channel.

I suppose one way to achieve this would be in the device configuration. A ‘Manual mode’ option could send the two necessary commands. However, this would bake in the behaviour so wouldn’t allow it to be changed again (I presume) without editing the Thing’s configuration.

As you mentioned, maybe the simplest way would be to make the Basic mode available as a Channel in the binding, as has been discussed (and achieved by hacking) above. Then the commands could be sent ‘manually’. I imagine the sort of users who want to mess around with direct control of the valve would be fine with this.

Please open an issue on Github - that way it has some visibility. If it’s here, or in my email, then it will get lost. A nice, clear, concise description of what is needed is much easier (for me at least :wink: ) than having to search through the forum to work out what’s up :sunglasses:.

issue has been opened

1 Like

Thanks.

Hello,

New to OH, and using the 2.5 release.

Zwave binding is 2.5.1 and still has same issue (type 31…)
I was able to download the patched 2.5.0M1 jar and have it in addons, and it works, but I would like to use a more up to date version of the jar file.
I installed the vanilla 2.5.2 SNAPSHOT jar in addons and it is working, but the unsupported mode type 31 is still there.
Tried to compile from that jar with the EUROTRONIC xml file provided here following the compilation description, but then the spirits TRVs are not recognized anymore (unknown device).
Any news on this issue? Is it being fixed in the official releases?
Meanwhile, is anyone having a working patched 2.5.1 jar?

Thank you

EDIT: the compiled jar failed to recognize the device because the spirit_0_0.xml file provided in this post (higher) is corrupted (incomplete) and therefore is not correct XML. Here is the correct file: spirit_0_0.xml (12.4 KB)

Start a new thread. Although your symptoms may be similar, likely the issue is different. Adding any debug logs as detailed in the binding documentation may be helpful too.

The binding and database have undergone many changes and adding new, likely unrelated issues to an existing thread is extremely confusing for the helpful volunteers here. Among our volunteers is the developer of this binding.

Thank you Bruce.
I confirm that the issue is exactly the same

And the best description of the issue is the one made by Morgano:

To be complete in the description: if the Manufacturer Specific command is not sent, then going to Manual mode and trying to change the valve position through the switch_dimmer Channel returns the Unsupported mode type 31 error.

Patching the org.openhab.binding.zwave-2.5.1.jar with modified spirit_0_0.xml allows to be able to send this Manufacturer Specific command using the Basic command channel (that is addedin the patched xml file).

Now, a solution needs to be setup in the official release to avoid patching each time.

And as a bonus, a patched xml file updated from 2.5.1: spirit_0_0.xml (12.6 KB)

Ok, the proper procedure for that then, is to open an issue on GitHub so it can be fixed.

1 Like

There is already an issue un github