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 stateVersteht das jemand? beide Objekte haben doch State und Value ?
-
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 stateVersteht 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?
-
@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 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
-
@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
@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.798den 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?
-
@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" } -
@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.
-
@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 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 -
@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:
"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", -
@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 -
@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
-
@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",@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" } -
@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> -
@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 -
@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 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 : ""))); });
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden