NEWS
Zeitstempel entfernen
-
Hallo
Ich möchte gerne bei einem Höhenstand der per MQTT übermittelt wird den Zeitstempel entfernen.
Der übermittelte Wert sieht so aus: 17-3-2022_20:30 39
Ich möchte das nur die 39 übrig bleibt. Sowohl in iobroker als auch in der Homematic.
Mein Script welches gleichzeitig den Wert in die Homematic überträgt sieht so aus:var idAdapter = 'mqtt.0.Zisterne.Hoehenstand'/**/ const idSysvar = 'hm-rega.0.1740'/**/ function removeFirstCharacter() { var idAdapter = (0,idAdapter.length16) console.log(idAdapter); } // Skriptstart setState(idSysvar, getState(idAdapter).val); // Aktualisierung bei Wertänderung on(idAdapter, function(dp) { setState(idSysvar, dp.state.val); });
Vielen Dank für eure Hilfe
mp24 -
@mp24 sagte: 17-3-2022_20:30 39
Ich möchte das nur die 39 übrig bleibt.Wenn die SV vom Typ "Zahl" ist:
setState(idSysvar, parseFloat(dp.state.val.split(' ')[1]));
-
Ich habe es jetzt so abgeändert und eine neue Variable Typ Zahl erstellt. Ob es funktioniert sehe ich ja erst bei Wertänderung. Bei einer Zisterne kann das dauern.
Vielen, vielen Dank
mp24var idAdapter = 'mqtt.0.Zisterne.Hoehenstand'/**/ var idSysvar = 'hm-rega.0.1768'/**/ // Skriptstart setState(idSysvar, getState(idAdapter).val); // Aktualisierung bei Wertänderung on(idAdapter, function(dp) { /*setState(idSysvar, dp.state.val);*/ setState(idSysvar, parseFloat(dp.state.val.split(' ')[1])); });
-
@mp24 sagte: Ob es funktioniert sehe ich ja erst bei Wertänderung.
Nicht unbedingt (Zeile 9):
setState(idSysvar, parseFloat(getState(idAdapter).val.split(' ')[1]));
-
@paul53
Oh. Da habe ich Anfänger aber einen Bock geschossen.
Zeile 9 wurde durch: setState(idSysvar, parseFloat(getState(idAdapter).val.split(' ')[1])); ersetzt.
Vielen Dank für die Korrektur
mp24 -
@paul53
Kaum macht Man(n) es richtig, dann klappt es auch. Die 38 % stehen über dem Tank in der Vis.
Und ich habe es stundenlang mit trim, ltrim, replace usw. versucht.
Vielen Dank nochmal
mp24 -
@paul53
Ich erhalte Warnungen:
javascript.0 (16643) at script.js.common.von_IOBroker_nach_Homematic.Zisterne_Hoehenstand_ohne_Zeit:10:1
Bzw. 21:3
Was könnte das bedeuten ?Vielen Dank
mp24 -
@mp24 sagte: javascript.0 (16643) at script.js.common.von_IOBroker_nach_Homematic.Zisterne_Hoehenstand_ohne_Zeit:10:1
Mehr nicht? Schau mal in den Tab "Protokolle", ob es dort nicht mehr Informationen gibt.
-
@paul53
Die Fehlermeldungen:
You are assigning a number to the state "hm-rega.0.1740" which expects a string. Please fix your code to use a string or change the state type to number. This warning might become an error in future versionsat setState (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1437:20)
Der Wert der vom Broker übermittelt wird ist vom Typ string. In der Homematic Zahl.
Muss erst noch gewandelt werden ? -
@mp24 sagte: You are assigning a number to the state "hm-rega.0.1740"
Ändere den Typ des Datenpunktes in "Zahl".
-
@paul53
Der Datenpunkt in der Homematic ist Zahl. Aber von MQTT kommt String an -
@mp24 sagte in Zeitstempel entfernen:
Der Datenpunkt in der Homematic ist Zahl. Aber von MQTT kommt String an
das log sagt aber was anderes
und das Skript von @paul53 schreibt eine Zahl -
@mp24 sagte: Der Datenpunkt in der Homematic ist Zahl.
Das hat die Instanz "hm-rega.0" aber noch nicht mitbekommen.
-
@paul53
Genau. Der Rega Adapter stand noch auf String. Rega Adapter neu gestartet - steht nuun auf Zahl. Aber neue Fehler:at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1082:38) at Immediate._onImmediate (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/src/lib/adapter/adapter.js:5909:56)
-
@paul53
Noch mehr Fehlermeldungen:
javascript.0
2022-03-18 18:32:05.739 info State value to set for "hm-rega.0.1740" has to be type "number" but received type "string"
javascript.0
2022-03-18 18:32:05.713 warn at processImmediate (internal/timers.js:464:21)
javascript.0
2022-03-18 18:32:05.713 warn at Immediate._onImmediate (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/src/lib/adapter/adapter.js:5909:56)
javascript.0
2022-03-18 18:32:05.713 warn at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:530:29)
javascript.0
2022-03-18 18:32:05.713 warn at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1082:38)
javascript.0
2022-03-18 18:32:05.713 warn at Object.<anonymous> (script.js.common.von_IOBroker_nach_Homematic.Zisterne_Hoehenstand_ohne_Zeit:17:4)
javascript.0
2022-03-18 18:32:05.712 warn at setState (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1437:20)
javascript.0
2022-03-18 18:32:05.393 warn You are assigning a string to the state "hm-rega.0.1740" which expects a number. Please fix your code to use a number or change the state type to string. This warning might become an error in future versions. -
@mp24 sagte: warn You are assigning a string to the state "hm-rega.0.1740" which expects a number.
parseFloat() macht eine Zahl aus dem String-Teil hinter dem Leerzeichen. Hast Du was am Skript geändert?
const idAdapter = 'mqtt.0.Zisterne.Hoehenstand'; const idSysvar = 'hm-rega.0.1740'; // Skriptstart setState(idSysvar, parseFloat(getState(idAdapter).val.split(' ')[1])); // Aktualisierung bei Wertänderung on(idAdapter, function(dp) { setState(idSysvar, parseFloat(dp.state.val.split(' ')[1])); });
-
@paul53
So sieht das Script aus:var idAdapter = 'mqtt.0.Zisterne.Hoehenstand'/*Quelle*/ var idSysvar = 'hm-rega.0.1740'/*Ziel*/ // Skriptstart // setState(idSysvar, getState(idAdapter).val); setState(idSysvar, parseFloat(getState(idAdapter).val.split(' ')[1])); // Aktualisierung bei Wertänderung on(idAdapter, function(dp) { setState(idSysvar, dp.state.val); });
-
@paul53
Und so die hmrega 1740:"_id": "hm-rega.0.1740", "type": "state", "common": { "name": "SV_Zisterne-Hoehenstand", "type": "number", "read": true, "write": true, "role": "state", "min": 0, "max": 100, "unit": "%",
-
@mp24 sagte: So sieht das Script aus:
Zeile 17:
setState(idSysvar, parseFloat(dp.state.val.split(' ')[1]));
-
@paul53 said in Zeitstempel entfernen:
setState(idSysvar, parseFloat(dp.state.val.split(' ')[1]));
Aus dem Hinweis gestern Zeile 9:
habe ich geschlossen. das nur der Befehl in Zeike 9 gehört.
Das es zweimal gesetzt werden muss habe ich falsch verstanden.Ich senke demütig mein Haupt und bitte um Entschuldigung
mp24