NEWS
Funktion um Datenpunkt-Namen "aufzuräumen"?
-
Hallo zusammen,
ich habe beim Trashschedule Adapter aktuell das Problem, dass ich als Datenpunkt den Text nehme, welchen der Nutzer selbst eingibt.
Jetzt wünsche ich mir eine Funktion vom Adapter, mit welcher ich Strings so bereinigen kann, dass diese für Datenpunkte geeignet sind. Gibt es soetwas?
Also
- Leerzeichen / Whitespaces raus
- Sonderzeichen raus
- Punkte raus
- Umlaute umwandeln
- ...
Damit ich praktisch genau weiß, dass es am Ende keine Probleme mit diesem Datenpunkt gibt. Theoretisch könnte das ja auch direkt in
setObjectNotExists
und co eingebaut werden, aber der Break wäre wahrscheinlich zu hartGibt es da was? Oder eine Vorlage, welche man nutzen könnte? Wahrscheinlich machen das viele Adapter-Entwickler schon selbst auf die unterschiedlichsten Arten.
-
@haus-automatisierung Die Buchstaben finden sich in der Regex FORBIDDEN_CHARS. Du solltest es wie folgt machen können (ich habe es allerdings nicht versucht):
const cleanName = input.replace(this.FORBIDDEN_CHARS, '_');
this
bezieht sich auf die Adapter Instanz.Ich weiss allerdings nicht, welche Version von js-controller dies voraussetzt.
-
-
@haus-automatisierung sagte in Funktion um Datenpunkt-Namen "aufzuräumen"?:
ist aber total viel erlaubt
Ja, absolut. Ist auch gut so. Das wichtigste ist eigentlich wirklich nur der Punkt.
-
@unclesam sagte in Funktion um Datenpunkt-Namen "aufzuräumen"?:
Das wichtigste ist eigentlich wirklich nur der Punkt.
Selbst der Punkt ist doch aber erlaubt
Am Ende werden da nur komische Unicode-Zeichen wirklich rausgeworfen.So richtig happy bin ich mit dem Ergebnis nicht (erlaubt zu viel) - werde wohl doch einen eigenen RegEx bauen für meinen Fall.
-
@haus-automatisierung sagte in Funktion um Datenpunkt-Namen "aufzuräumen"?:
Selbst der Punkt ist doch aber erlaubt
Richtig, das ist ja die Regex für ganze Objekt IDs. Für ein einzelnes Unterobjekt wäre natürlich ein Punkt nicht erlaubt.
Aber ich gebe dir recht, ich schliesse auch mehr aus: https://github.com/UncleSamSwiss/ioBroker.loxone/blob/e1cf009eea6eb661c57b1362c944b8ddd59400b6/src/loxone-handler-base.ts#L227
-
@unclesam sagte in Funktion um Datenpunkt-Namen "aufzuräumen"?:
Aber ich gebe dir recht, ich schliesse auch mehr aus:
Genau das meine ich, es baut sich jeder Entwickler eine eigene Funktion um Namen für Datenpunkte aufzubereiten. Ich würde sogar soweit gehen, dass man nur
a-zA-Z0-9_-
zulässt. -
@haus-automatisierung sagte in Funktion um Datenpunkt-Namen "aufzuräumen"?:
Genau das meine ich, es baut sich jeder Entwickler eine eigene Funktion um Namen für Datenpunkte aufzubereiten.
Ja, aber jeder hat andere Anforderungen. Man kann nicht einfach eine Einschränkung machen, die nicht für alle passt. Genau das hatten wir mit States mit einem Punkt am Schluss: das ist neu nicht mehr erlaubt und es gab zahlreiche Leute, die sowas noch in ihren JS-States hatten und diese (kurzfristig) nicht einmal mehr in Admin löschen konnten.
Niemand hat ein Problem, wenn du die möglichen Werte mehr einschränkst als ioBroker dies tut, aber alle Adapter kann man nicht dazu zwingen - das gäbe ganz viele (unnötige) Anpassungen in den bestehenden Objektbäumen - und damit Anpassungen in zahllosen Skripten.
-
@unclesam sagte in Funktion um Datenpunkt-Namen "aufzuräumen"?:
aber alle Adapter kann man nicht dazu zwingen
Das war ja auch nicht die Idee. Sondern eher ein allgemeine Funktion mit in die adapter.js aufzunehmen, welche man nutzen kann, aber nicht muss. Problematisch wird natürlich, wenn man diese nachträglich anpasst und sich dann in allen Projekten die Datenpunkte ändern... Man müsste also im ersten Wurf die perfekte Definition hinbekommen.
Also nicht so einfach.
-
ich nutze
encodeURIComponent(str)
mit einer daran anschließenden Sonderbehandlung für die dann ggfs. enthaltenen %-Zeichen