NEWS
Nachkommastellen verschwunden?
-
Hallo,
ich sende mir seit längeren schon Werte von Zigbee Sensoren auf den KNX Bus. Dies hat bis zuletzt gut mit diesem Blockly Script funktioniert:
das erste Steure wird verwendet als "Initiator" wenn ich das Script starte.
Das falls Objekt sendet dann immer bei einer änderung den Wert.Nun habe ich aus diversen Gründen meine ioBroker Instanz neu aufgesetzt, und habe jedoch folgendes Problem:
Die bisherigen Werte haben allesamt einen . (Punkt) als Komma. Obwohl mir in den Objekten die Werte richtig angezeigt werden, kommt auf dem KNX Bus nur der Teil vor dem . (Punkt) an?
als Beispiel:
Wasserzähler hat einen Wert von 132.274 m3
auf dem KNX Bus erscheint nur 132
Obwohl das Objekt in der KNX Instanz richtig geschrieben wird?Daten auf dem Bus:
wo werden die Stellen nach dem Komma abgeschnitten? Kann mir das jemand sagen?
dann dachte ich mir, mache ich mit einem Mathematik Baustein, den ("Wert vom Objekt ID ..." x 1000) um das Komma zu entfernen.
Aber da erhalte ich dann keinen Werte mehr in den Objekten mehr geschrieben...
EDIT:
ich sehe gerade, ohne den Mathematik Bauastein, erhalte ich eine orange Warn Meldung:
Logfile:
javascript.0 2021-01-23 23:19:06.607 warn (1758) at script.js.KNX_Daten.Wasserzähler:5:1 javascript.0 2021-01-23 23:19:06.606 warn (1758) at setState (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1354:20) javascript.0 2021-01-23 23:19:06.604 warn (1758) You are assigning a string to the state "knx.0.Zigbee_IOBroker_Eingänge.Wasserzähler.Wasserzähler_Zählerstand" which expects a number. Please fix your code to use a number or change the state
Versteht das jemand? beide Objekte haben doch State und Value ?
-
@dditt sagte: You are assigning a string to the state "knx.0.Zigbee_IOBroker_Eingänge.Wasserzähler.Wasserzähler_Zählerstand"
Konvertiere "nach Zahl".
-
@paul53 hallo, danke dir für deinen Hinweis! Die Fehlermeldung ist weg, jedoch bleibt das Objekt in das ich schreiben möchte leer?
würdest du mir hier zu "aktualisiere" oder "steuere" raten? oder kann ich das so gar nicht machen?
-
@dditt sagte:
jedoch bleibt das Objekt in das ich schreiben möchte leer?
Hat sich denn "Volume" bereits geändert ?
-
@dditt sagte in Nachkommastellen verschwunden?:
würdest du mir hier zu "aktualisiere" oder "steuere" raten? oder kann ich das so gar nicht machen?
wenn der Wert dazu von einem Adapter verarbeitet werden soll (hier knx, oder???) muss es "steuere" sein.
Wenn aber in den Objekten gar nichts auftaucht ist das erst einmal sekundär.
"Wert" ist aber schon der fertige Baustein aus den Trigger-Blöcken? und keine selbst erstellte Variable?
sonst setze bitte mal einen debug-Baustein vor den aktualisiere/steuere Block und lasse dir "Wert" im debug anzeigen
-
@paul53 ja, aber nur die Stellen nach dem Komma bzw. dem Punkt.
-
@homoran richtig, den Wert von dem WM-Bus Objekt möchte ich auf den KNX Bus senden.
Habe den Baustein steuere jetzt eingebaut.
Der "Wert" ist aus dem Trigger Block -> Baustein "Objekt ID" umgestellt über DropDown auf Wert.
Mit dem Debug schaut es dann jetzt so aus:
In einer Stunde wissen wir mehr, der Wasserzähler sendet nur alle 60 Minuten den Wert....
EDIT, habe das Script mit dem Debug Block abgeändert... Denke so ist es eher richtig.
-
131.665 true 2021-01-24 17:08:40.611 131.627 true 2021-01-24 16:49:37.798 null true 2021-01-24 16:49:37.798
den letzten Wert von 17:08 Uhr hat er auch nicht geschrieben... das KNX Objekt das er beschreiben darf ist leer...
-
@dditt sagte in Nachkommastellen verschwunden?:
131.665 true 2021-01-24 17:08:40.611 131.627 true 2021-01-24 16:49:37.798
dann liefert der Datenpunkt einen Bool.
Was ist das genau für ein Datenpunkt?
-
@homoran welche Informationen genau benötigst du? die Zeilen oben kamen aus der History Instanz.
hier die RAW Informationen:
{ "from": "system.adapter.wmbus.0", "user": "system.user.admin", "ts": 1611490120573, "common": { "name": "Volume (Instantaneous value)", "role": "value.volume", "unit": "m³", "read": true, "write": false, "custom": { "history.0": { "enabled": true, "changesOnly": true, "debounce": 0, "maxLength": "10", "retention": "31536000", "changesRelogInterval": 0, "changesMinDelta": 0, "aliasId": "" } } }, "native": { "id": ".data.1-0-VIF_VOLUME", "StorageNumber": 0, "Tariff": 0 }, "acl": { "object": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator", "state": 1636 }, "_id": "wmbus.0.SEN-40015490.data.1-0-VIF_VOLUME", "type": "state" }
-
@dditt sagte: habe das Script mit dem Debug Block abgeändert
Poste mal den erzeugten Javascript-Code ohne die letzte Zeile in Code tags.
-
@dditt Sorry - Mein Fehler
Der DP liefert ja einen Wert - melde mich
Dann ist das gepostete aber nicht der Output vom debug-Block - oder?
EDIT:
@dditt sagte in Nachkommastellen verschwunden?:
die Zeilen oben kamen aus der History Instanz.
Hab's jetzt auch gelesen.
Ich brauche aber den Output des debug-Blocks
müsste auch im allgemeinen Log zu finden sein -
@dditt sagte:
"common": { "name": "Volume (Instantaneous value)", "role": "value.volume", "unit": "m³", "read": true, "write": false, "custom": { "history.0": { "enabled": true, "changesOnly": true, "debounce": 0, "maxLength": "10", "retention": "31536000", "changesRelogInterval": 0, "changesMinDelta": 0, "aliasId": "" } } },
Es fehlt common.type.
"common": { "type": "number",
-
@homoran nein, das ist aus dem History Adapter!
ich bekomme erst wieder einen Wert so in 10 Minuten ... wenn jemand Wasser verbraucht hat
-
@dditt sagte in Nachkommastellen verschwunden?:
nein, das ist aus dem History Adapter!
das weiß ich ja jetzt
Nutzt nur nix
-
@paul53 habe in den Eigenschaften des Objektes unter dem Reiter Allgemein mit dem "+" Symbol ein neues Attribut hinzugefügt "Type" -> und dieses Auf Zahl gestellt.
{ "from": "system.adapter.wmbus.0", "user": "system.user.admin", "ts": 1611490120573, "common": { "name": "Volume (Instantaneous value)", "role": "value.volume", "unit": "m³", "type": "number", "read": true, "write": false, "custom": { "history.0": { "enabled": true, "changesOnly": true, "debounce": 0, "maxLength": "10", "retention": "31536000", "changesRelogInterval": 0, "changesMinDelta": 0, "aliasId": "" } } }, "native": { "id": ".data.1-0-VIF_VOLUME", "StorageNumber": 0, "Tariff": 0 }, "acl": { "object": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator", "state": 1636 }, "_id": "wmbus.0.SEN-40015490.data.1-0-VIF_VOLUME", "type": "state" }
-
@dditt sagte: ein neues Attribut hinzugefügt "Type" -> und dieses Auf Zahl gestellt.
Sieht so besser aus.
Poste mal den vom Blockly erzeugten Javascript-Code ohne die letzte Zeile in Code tags.
-
@paul53 said in Nachkommastellen verschwunden?:
Code tags
Es tut mir leid, ich wüsste im Moment nur den Block zu "exportieren", aber was genau soll ich weg lassen?
so?
<xml xmlns="http://www.w3.org/1999/xhtml"> <block type="comment" id="9lLvRUT0G){Hm_rrxzla" x="112" y="162"> <field name="COMMENT">Wasserzaehlerstand</field> <next> <block type="on_ext" id="`$=B12u[MI24`;:f(h,D"> <mutation items="1"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id=")-LstACnP[G5;9Mu%VEK"> <field name="oid">wmbus.0.SEN-40015490.data.1-0-VIF_VOLUME</field> </shadow> </value> <statement name="STATEMENT"> <block type="debug" id="L*|7D{]d[(=eGQ]8_t1T"> <field name="Severity">debug</field> <value name="TEXT"> <shadow type="text" id="hEoKu:w%#!q8NRYtE(FI"> <field name="TEXT">test</field> </shadow> <block type="text_join" id="j[]h|PI6q;P+o94$cE|Q"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="j)s}u(N`C)Q$p6rd6fo2"> <field name="TEXT">Wert:</field> </block> </value> <value name="ADD1"> <block type="on_source" id="%lxe0A9xuxV5ctLylS$9"> <field name="ATTR">state.val</field> </block> </value> </block> </value> <next> <block type="control" id="/p8-0sydUN(KN3M^0k3t"> <mutation delay_input="false"></mutation> <field name="OID">knx.0.Zigbee_IOBroker_Eingänge.Wasserzähler.Wasserzähler_Zählerstand</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="convert_tonumber" id="D/2qG!CF2.sIHZ$-z}f@"> <value name="VALUE"> <block type="on_source" id="@BQ_]?{,D]+0r_EjeXEe"> <field name="ATTR">state.val</field> </block> </value> </block> </value> </block> </next> </block> </statement> </block> </next> </block>
-
@dditt sagte in Nachkommastellen verschwunden?:
Es tut mir leid, ich wüsste im Moment nur den Block zu "exportieren", aber was genau soll ich weg lassen?
oben Rechts kannst du die Ansicht von Blockly in den durch Blockly generierten javascript Code umschalten
Diesen Code bitte hier in Code-tags posten!
die letzte Zeile dieses Codes enthält die Informationen über die Blöcke, ist sehr lang und hier unnötig.
Die sollst du weglassen -
@dditt sagt: ich wüsste im Moment nur den Block zu "exportieren"
So wie @Homoran schrieb. Der Code ist korrekt und sollte funktionieren.
// Wasserzaehlerstand on({id: 'wmbus.0.SEN-40015490.data.1-0-VIF_VOLUME', change: "ne"}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; console.debug(('Wert:' + String((obj.state ? obj.state.val : "")))); setState("knx.0.Zigbee_IOBroker_Eingänge.Wasserzähler.Wasserzähler_Zählerstand", parseFloat((obj.state ? obj.state.val : ""))); });