Closed Bernd9000 closed 2 years ago
Könnte das mit dieser Function zusammenhängen ? Dort wird, so wie ich das sehe, auf jeden Fall der val Wert geschrieben.
iobroker.js :
function setState(id, val, ack, callback) {
if (node.idChecked) {
if (val !== undefined && val !== '__create__') {
// If not this adapter state
if (isForeignState(id)) {
adapter.setForeignState(id, {val, ack}, callback);
} else {
adapter.setState(id, {val, ack}, callback);
}
}
} else {
checkState(node, id, null, {val, ack}, isOk => callback && callback(!isOk));
}
}
... es sei denn der Wert lautet "create" ... scheinbar sind eie doppel-Unterstiche falsch und waren vllt als formatierung gedacht?
Nein, ich glaub schon das die ein nicht alltägliches Schlüsselwort benutzen wollten. Ich meinte aber viel mehr was auf die Bedingung folgt. Wenn val vom Typ oder Wert entweder "create" und undefined ist wird der Datenpunkt erstellt und auf jeden Fall als Wert val übergeben.So wird dann ein Datenpunkt erstellt mit dem Inhalt "create".
Das hat mich auf eine schöne Möglichkeit gestoßen Datenpunkte zu erstellen die noch nicht existieren und vorhandene Datenpunkte auf keinen Fall zu überschreiben.
Einfach den payload vor dem ioBroker-out löschen. Es wird zwar NULL im Datenpunkt eingetragen, aber es funktioniert erstmal.
Aber es bleibt natürlich der Fehler bestehen das auf das Zauberwort __create__
nicht richtig reagiert wird,
Null ist aber genau richtig - da jeder Datenpunkt, der neu erstellt wird ein (null) für undefined enthält. Insofern braucht es hier in meinen Augen keine Änderung des Verhaltens, da die Datenpunkte ohne payload korrekt angelegt werden. Das Einrichten eines leeren Datenpunktes mit dem create Datenpunkt könnte man sich somit sparen, sollte halt den entsprechenden Hilfetext ändern.
So der Hilfetext könnte in etwa so modifiziert werden:
Fixed in next version
Okay
Der Hilfetext wurde nicht überarbeitet.
Das stimmt zwar das der Hilfetext nicht bearbeitet wurde aber der eigentliche Fehler wurde behoben.
Übergibt man das Zauberwort __create__
wird ein leerer Datenpunkt erstellt, vorher wurde in diesem Datenpunkt __create__
geschrieben.
Also könnte der Text doch so bleiben ?
In fact both works ... so "mepty" payload and also "'create' so I will update docs for both but would not push new version out directly just because of this
Siehe commit, ich habe den text erweitert :-)
In der Hilfe zu ioBorker-out heißt es:
If msg.payload contains "__create__", the object will be only created, but no value will be written.
Also habe ich ein nicht existierenden Topic übergeben und als payload
__create__
. Der Datenpunkt wird in ioBroker erstellt aber es wird mit dem Wert__create__
gefüllt. Das heißt auf diesem Befehl wird nicht reagiert ? Oder sind weitere Voraussetzungen nötig?