Command 'true' not supported by type 'OnOffValue':

I’ve searched Openhab-community to understand how to convert an incoming true/false response to ON/OFF mapping but I haven’t found a simple example. I have a MQTT generic thing in OH3 for a switch that has two different topics for state and command as defined in a channel. For the state topic, the payload is simply ‘true’ or ‘false’. For the command topic, it is a ‘{“id”: 8, “isOn”: true}’ or ‘{“id”: 8, “isOn”: false}’ for a custom value on or off; respectively. It works when I turn on/off the switch but I get an error in the log file that “Command ‘true’ not supported by type ‘OnOffValue’: No enum constant org.openhab.core.library.types.OnOffType.true.” The state payload is not json so I wonder how I can use the incoming transformation to convert true to ON.

Command Topic Configuration

Payload from State Topic

Any suggestions will be helpful.

1 Like

You can use any transformation service you like, not limited to JSONPATH.

I think I’d use MAP here. You can use the same MAP for in and out transforms. looking up the JSON for ON or OFF, and also looking up ON/OFF for true or false.

So I created a map file in the transform folder (/etc/openhab/transform/) that has two key value pairs and modified my channel as follows:

UID: mqtt:topic:d69bc8ed3f:LowSpeedNoHeat
label: Pump Low Speed
thingTypeUID: mqtt:topic
configuration: {}
bridgeUID: mqtt:broker:d69bc8ed3f
location: Outside
channels:
  - id: LowSpeedFeatureChannel
    channelTypeUID: mqtt:switch
    label: Low Speed Feature Channel
    description: ""
    configuration:
      commandTopic: virtual-controllerAlt/state/features/setState
      postCommand: true
      stateTopic: virtual-controllerAlt/state/features/8/isOn
      transformationPattern: truefalse:map
      off: '{"id": 8, "isOn": false}'
      on: '{"id": 8, "isOn": true}'

Yet, I get the following error when I save the thing channel.

Transformation service TRUEFALSE for pattern map not found!

This syntax is incorrect.

Should be something like:

transformationPattern: MAP:truefalse.map

But don’t you want this on the outgoing transformation? Your custom on/off values should probably be set to true/false, then in your map file you transform from true to {"id": 8, "isOn": true} and false to {"id": 8, "isOn": false}.

1 Like

Thank you, that worked. I reviewed the documentation but could not find sample syntax for entering a transformation map in a channel configuration; especially MAP. I’m using custom on/off values for the command topic because each switch has a different id number and that would require an outgoing transformation map for each switch.