NEWS
How to replace null with 0 using alias-manager
-
Hi,
I have an object that returns a value (number) on button press but then it shows null.
I need to convert that null tu value 0.
I've tried the alias-manager adapter, but I don't know how to write a proper rule for that.
This below doesn't seem to work:Any help appreciated!
-
@tomasz-nowak sagte in How to replace null with 0 using alias-manager:
Any help appreciated!
I really don't know, but please try
val === null?0:val
-
@homoran said in How to replace null with 0 using alias-manager:
I really don't know, but please try
val === null?0:val
Thanks, but it doesn't seem to work
-
@tomasz-nowak sagte in How to replace null with 0 using alias-manager:
it doesn't seem to work
can you please try
val == null?0:val
-
Zeig doch bitte mal dwie das Alias objekt aussieht was da rausfällt.
-
@tomasz-nowak The
common.type
seems wrong - the original state is numeric. Maybe that confuses the alias function. -
@alcalzone I've changed common.type to number - no change.
@Homoran Tried also == and no change.So I have this object: SceneId:
When I press a mono-switch connected that dimmer I see value "26" for a blink of an eye, than there's noting in that field (I believe its "null"). This null somehow crashes mqtt-broker, so I wanted to change "null" to "0".
But in an alias object:
Its exactly the same - 26 shows for a blink of the eye and then nothing. Both with val === null?0:val and val == null?0:val.
This alias object also crashes mqtt-client adapter with uncaught null exception.This is full config of my alias. I'm not sure if I understand all correctly.
-
@tomasz-nowak Crashes? Logs please
Also I would like to see the Core JSON of the created alias object because that matters (not a UI)
Go into Admin please, Objects Tab, go to that state and enable expert mode, klick on pencil on right side, in dialog "raw" and copy the json please here
-
This is JSON for an alias object:
{ "from": "system.adapter.admin.0", "user": "system.user.admin", "ts": 1619609676629, "common": { "name": "Scene ID", "role": "level", "type": "number", "read": true, "write": true, "alias": { "id": "zwave2.0.Node_014.Scene_Activation.sceneId", "read": "val == null?0:val" } }, "native": {}, "acl": { "object": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator", "state": 1636 }, "_id": "alias.0.Fibaro_Dimmer_1_SceneID.sceneId", "type": "state" }
and this is for the source object:
{ "type": "state", "common": { "role": "level", "read": true, "write": true, "name": "Scene ID", "type": "number", "min": 1, "max": 255 }, "native": { "nodeId": 14, "valueId": { "commandClass": 43, "endpoint": 0, "property": "sceneId" } }, "from": "system.adapter.zwave2.0", "user": "system.user.admin", "ts": 1619558168447, "_id": "zwave2.0.Node_014.Scene_Activation.sceneId", "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" } }
Thanks
-
Mqtt-client crash log is here (I've created an issue out of this):
https://github.com/Pmant/ioBroker.mqtt-client/issues/45 -
@tomasz-nowak js-controller Version??
-
- JS-Controller version: 3.2.16
- Node version: v12.22.1
- Operating system: docker image @ Raspberry OS
- all adapters in current released versions
-
Ok, jetuzt mal ganz genau: was ist der exakte wert?
- In allen screenshots ist gar kein Wert zu sehen - auch nicht "null"
- Der mqtt-client Adapter crasht weil der state an sich "null" ist - also NICHT "state wert ist null" sondern es gibt gar keinen state!! Nix
- Aliasse greifen dann nicht weil Sie nur Werte mappen - bedeutet also das der resulting Alias auch "keinen Wert hat"
Am besten dazu jetzt mal
iobroker state get zwave2.0.Node_014.Scene_Activation.sceneId
machen und Ausgabe posten.
-
@apollon77 said in How to replace null with 0 using alias-manager:
Ok, jetuzt mal ganz genau: was ist der exakte wert?
- In allen screenshots ist gar kein Wert zu sehen - auch nicht "null"
- Der mqtt-client Adapter crasht weil der state an sich "null" ist - also NICHT "state wert ist null" sondern es gibt gar keinen state!! Nix
- Aliasse greifen dann nicht weil Sie nur Werte mappen - bedeutet also das der resulting Alias auch "keinen Wert hat"
Am besten dazu jetzt mal
iobroker state get zwave2.0.Node_014.Scene_Activation.sceneId
machen und Ausgabe posten.
Yes, no value is seen on the screenshots because there no value at all for most of the time. It gets "26" or "24" depending on number of clicks, but only for a second. Then it returns to empty / null.
Now, because mqtt-client can't handle this correctly, I've been trying to alias this object somehow to push it to MQTT anyway. So, I can not rewrite empty object with any custom value (such as "0" for instance)? -
Thats strange:
And I still see this object in ioBroker admin panel
-
Ok nicht englishc.
Nicht Dinge vermischen!!
Es gibt Objekte - das siehst Du im Admin. Und Objekte haben (vielleicht) einen Wert. Ein Wert kann da sein und einen value haben und der Wert kann auch NICHT da sein (weil nie gesetzt wurde, weil expired oder weil gelöscht.
Also: Jetzt wieder zwave2 Frage ... warum existiert der state nicht?
-
That issue I've also reported here
https://github.com/AlCalzone/ioBroker.zwave2/issues/597 -
@tomasz-nowak ;üsste man umformulieren!
Wie gesagt der crash ist ein Fehler in mqtt-client! Die Frage an zwave2 ist warum der state gelöscht wird
-
@tomasz-nowak
If the state expires after a second, use a script:on({id: 'zwave2.0.Node_014.Scene_Activation.sceneId'}, function(dp) { setState('0_userdata.0.Fibaro_Dimmer_1_SceneID.sceneId', dp.state.val, true); setTimeout(function() { setState('0_userdata.0.Fibaro_Dimmer_1_SceneID.sceneId', 0, true); }, 1000); });
-
I've never used Javascript in ioBroker, but I have installed Javascript adapter now, created that channel and object under 0_userdata.0 and......
WOW, it works as it should !!!!!!!!!!!!
I get 26 and 24 values on 1- and 2-click and then the objects turns to 0. And it works with mqtt-client putting it to the broker just fine:Thank you @paul53 for this quick solution!
I hope mqtt-client (and probably zwave2) adapters will be address with this issue in the future, but for now I may switch my lights again!