NEWS
String teilen - split-Befehl
-
@OliverIO said in String teilen - split-Befehl:
{s:Datenpunkt;s.slice(0,s.indexOf('('))}
Ok, danke für deine Antwort. Leider will es nicht wirklich funktionieren.
So heißt der Datenpunkt: homeconnect.0.SIEMENS-HS858GXB6-68A40E060A0C.status.BSH_Common_Status_OperationState
Diesen in das basic-string Widget unter HTML-voranstellen eingefügt:
{s:homeconnect.0.SIEMENS-HS858GXB6-68A40E060A0C.status.BSH_Common_Status_OperationState;s.slice(0,s.indexOf('('))}
Das Event im Datenpunkt lautet:
Inactive(BSH.Common.EnumType.OperationState.Inactive)
Wovon eigentlich nur das "Inactive" als Ergebnis heraus extrahiert werden soll.Aber im Ergebnis der VIS steht:
Die geplante Card:
Unter Status soll dann jeweils der aktuelle Zustand z.Bsp. "inaktiv" ausgeführt werden.Bin aktiv am suchen und Lesen zum Thema "Binding VIS-Funktionalität"...
-
@ub-privat
Also mehrere Probleme:- du hast in das Feld ObjectID (bei dir lustigerweise als Schalter bezeichnet) ebenfalls den Datenpunkt ausgewählt. Das bitte wieder rausnehmen. Hatte ich ja auch nicht geschrieben
- oben hast du mehrfach geschrieben, das alles nach der ( abgeschnitten werden soll.
Im jetzigen Ergebnis sehe ich aber keine (
Deswegen wird auch nichts abgeschnitten.
Bitte liste alle Möglichkeiten der Ergebnisse, die der Datenpunkt so enthalten kann auf.
Daraus kann man eine Regel ableiten, die man in Befehle umsetzen kann. - Verstehst du das was du da eingetragen hast? Kannst du den Weg nachvollziehen?
Bei IObroker ist wichtig, die Dinge nachzuvollziehen und ggfs. auch mal noch weitere Doku zu lesen, da man aus der Ferndiagnose nur mit den Informationen arbeiten kann, wass der TE einem gibt. Wenn da auch schon Fehler oder Ungenauigkeiten entstehen, dann kann sich das ewig hinziehen.
-
@dslraser sagte in String teilen - split-Befehl:
vielleicht hilft Dir das.
ich zitiere mich mal selbst...
Ich habe zwar diesen Adapter nicht, aber ich denke auf Grund des Datenpunktes (siehe Link zu meinem Beitrag) handelt es sich bei diesem Datenpunkt um den Wert aus einer Werteliste, kann das sein ?
Ich meine den Wert den Du anzeigen willst...Edit: zeige am besten mal den RAW von Deinem Datenpunkt.
-
@OliverIO said in String teilen - split-Befehl:
Moin.moin
du hast in das Feld ObjectID (bei dir lustigerweise als Schalter bezeichnet) ebenfalls den Datenpunkt ausgewählt. Das bitte wieder rausnehmen. Hatte ich ja auch nicht geschrieben
Habe den Datenpunkt wieder aus dem Feld "Schalter" entfernt.
Das Ergebnis sieht wie folgt aus:
Von dieser Zeichenfolge benötige ich nur das "Inactiv".oben hast du mehrfach geschrieben, das alles nach der ( abgeschnitten werden soll.
Im jetzigen Ergebnis sehe ich aber keine (
Deswegen wird auch nichts abgeschnitten.
Bitte liste alle Möglichkeiten der Ergebnisse, die der Datenpunkt so enthalten kann auf.
Daraus kann man eine Regel ableiten, die man in Befehle umsetzen kann.Die Ergebnisse aus den Datenpunkten können wie folgt aussehen:
{
"BSH.Common.EnumType.OperationState.Ready": "Ready",
"BSH.Common.EnumType.OperationState.Inactive": "Inactive",
"BSH.Common.EnumType.OperationState.Run": "Run",
"BSH.Common.EnumType.OperationState.Finished": "Finished",
"BSH.Common.EnumType.OperationState.Pause": "Pause",
"BSH.Common.EnumType.OperationState.ActionRequired": "ActionRequired"
}anderer Datenpunkt, aber identische Struktur:
{
"BSH.Common.EnumType.DoorState.Closed": "Closed",
"BSH.Common.EnumType.DoorState.Open": "Open"
}
Dies sind die Daten direkt aus dem Adapter. Zu jedem Hausgerät gibt es untershiedliche Stati.Gerät1:
Gerät2:
Gerät3:
Ich gehe davon aus, dass der String in der letzten Spalte der aktuelle Wert des Datenpunktes ist.
Deshalb komme ich auf "alles nach der (".
Wenn ich mir nun die Werte (siehe oben) ansehe, muss ich umdenken.
Die Struktur lautet "blablabla": "Das Ergebnis möchte ich haben!" --> also alles nach dem Doppelpunkt!?Verstehst du das was du da eingetragen hast? Kannst du den Weg nachvollziehen?
Bei IObroker ist wichtig, die Dinge nachzuvollziehen und ggfs. auch mal noch weitere Doku zu lesen, da man aus der Ferndiagnose nur mit den Informationen arbeiten kann, wass der TE einem gibt. Wenn da auch schon Fehler oder Ungenauigkeiten entstehen, dann kann sich das ewig hinziehen.Ich versuche zu verstehen, deshalb bin ich ja ursprünglich mit split-string gestartet.
Aber wie gesagt, ich VERSUCHE zu verstehn, was nicht ganz einfach ist... -
je mehr ich mich damit beschäftige, hast du recht.
Die Werte entsprechen einer Werteliste.so z.Bsp.
{
"BSH.Common.EnumType.OperationState.Ready": "Ready",
"BSH.Common.EnumType.OperationState.Inactive": "Inactive",
"BSH.Common.EnumType.OperationState.Run": "Run",
"BSH.Common.EnumType.OperationState.Finished": "Finished",
"BSH.Common.EnumType.OperationState.Pause": "Pause",
"BSH.Common.EnumType.OperationState.ActionRequired": "ActionRequired"
}anderer Datenpunkt, aber identische Struktur:
{
"BSH.Common.EnumType.DoorState.Closed": "Closed",
"BSH.Common.EnumType.DoorState.Open": "Open"
}Verfolge deinen von die verlinkten Beitrag parallel.
Da gibt es eine Menge Gemeinsamkeiten.
Nur wenn ich noch nicht einmal den reinen Text extrahiert bekomme, dann ist es mit Sprache sicher noch schwieriger...?Ihr bastelt an einer "ähnlichen" Lösung...
-
@ub-privat
die Lösung steht in dem Beitrag drinn, weil der Zustand, den Du auch haben möchtest, ausgegeben wird. Nur das hier das Ergebnis als Sprachausgabe benutzt wird. -
ok, dann muss ich noch einmal aufmerksam lesen!
-
ok, dann füge in das basic string widget genau wie oben folgendes ein
{s:Datenpunkt;s.split('.')[s.split('.').length-1]}
Ich habe eine Vermutung, warum die Anzeige des Wertes im iobroker und der Ausgabe in vis
differiert. Es scheint mit den Enums zu tun zu haben, mit denen ich selbst noch nicht gearbeitet habe.
Der Datenpunkt enthält nur den Enumtyp. Die Anzeige in iobroker ermittelt dir aber auch gleich den Wert dazu.
Um es Einfach zu machen ist im obigen Befehl jetzt folgendes drin:
splitte den Wert mittels dem Punkt und nehme aus dem erzeugten Array immer das letzte Element. der Zustand ist ja immer der Text nach dem letzten Punkt. -
@OliverIO said in String teilen - split-Befehl:
{s:Datenpunkt;s.split('.')[s.split('.').length-1]}
Tata: ES FUNKTIONIERT!!!
Jetzt muss ich mich aber noch intensiv mit dem Split-Befehl auseinander setzen.
Erst einmal vielen DANK.Das chöne daran ist, dass man immer wieder dazu lernt! Mein persönliches ioBroker-Kompendium wächst und wächst.
-
Lerne gerad hier https://www.w3schools.com/jsreF/jsref_slice_string.asp
Java für Einsteiger -
@OliverIO sagte in String teilen - split-Befehl:
Um es Einfach zu machen ist im obigen Befehl jetzt folgendes drin:
splitte den Wert mittels dem Punkt und nehme aus dem erzeugten Array immer das letzte Element. der Zustand ist ja immer der Text nach dem letzten Punkt.so habe ich es in dem von mir verlinkten Beitrag zu Beginn (weiter oben in dem Thread) auch gemacht.
Der "echte" Wert von der Werteliste,(der eingedeutschte) habe ich dann später mit der kleinen Funktion in Blockly ermittelt. -
@ub-privat sehr schön.
Allerdings sind Java und JavaScript Zwei unterschiedliche Sprachen. Aber für Iobroker bist du auf der richtigen Seite. -
Das sind in JavaScript unendliche Weiten. Aber das Hirn hat noch ein paar freie Kapazitäten...
So schaut es nun aus:
Muss jetzt noch abfragen einbauen, die bei inaktiven Gerät "null" ausblendet.
Das undefiened bin ich noch am erkunden,,,
Es wird und das ist die Hauptsache! -
habe gerade deine Signatur gelesen - Adapter für Squeezebox - klingt gut.
Aber ich suche etwas für TEUFEL/Raumfeld Komponenten. Steht bereits in der Adapteranfrage, aber scheinbar ohne Erfolg... -
@ub-privat da hat wohl jemand angefangen aber nicht abgeschlossen
https://forum.iobroker.net/topic/19003/noch-nicht-testbereit-teufel-raumfeld-adapter -
@OliverIO sagte in String teilen - split-Befehl:
splitte den Wert mittels dem Punkt und nehme aus dem erzeugten Array immer das letzte Element. der Zustand ist ja immer der Text nach dem letzten Punkt.
Der Wert nach dem letzten Punkt ist zwar fast immer der gleiche, aber nicht immer. Hier mal die Werte des Datenpunktes aus dem anderen Thread.
Ich vermute mal, das es in Deinem Datenpunkt im RAW Bereich ähnlich aussieht ?
Vergleiche mal z.B. Milchschaum. Nach der Splitt Methode bekommst Du nicht Milchschaum angezeigt, sondern MilkFroth. Die gezeigte Funktion im anderen Thread ermittelt den "echten Wert"
Ich bin unterwegs und nur am Handy, von daher kann ich es nicht besser zeigen. -
@ub-privat
hier noch mal das was ich meine.....(danach halte ich mich raus)Testblockly mit Debug-Bausteinen. Hier wird vielleicht klar was ich meine. Oben die Funktion und unten die Splittmethode.
Ergebnis:
Hier die genutzte Funktion
if(getObject(id).common.states) return getObject(id).common.states[val]; return id + ' Dieser Datenpunkt hat keinen Zustand !';
-
Hallo,
ich habe einen Datenpunkt als Zeichenkette in den ich an 16 verschiedene Stellen Uhrzeiten schreibe. So das der Inhalt der Zeichenkette so aussieht :16:11:25,17:15:30,20:03:54,usw.
Wie bekomme ich es jetzt in vis hin, dass ich die Uhrzeiten einzeln an verschiedenen Stellen (Textfelder) angezeigt bekomme?
Grüße...
-
Moin zusammen, ich versuche gerade noch die letzte Baustelle im VIS einzubauen. Leider komme ich mit dem TEXT ausschneiden nicht weiter.
Folgendes habe ich versucht:ich möchte gerne den rot markierten wert in VIS anzeigen lassen
Aber bei mir kommt nur das bei raus !!!!
Hier den Code den genutzt habe
{s:Datenpunkt;s.split('.')[s.split('.').length-1]}Aber wie man sehen kann mache hier irgendwas falsch .. wie müsste der Aufbau genau aussehen ?
Gruß und danke für eure Hilfe
Rene -
@gfrene sagte in String teilen - split-Befehl:
{s:Datenpunkt;s.split('.')[s.split('.').length-1]}
{s:controll-own.0.AAATEST.TestString3;s.split('.')[0]}
du musst den datenpunkt (bei mir "controll-own.0.AAATEST.TestString3") auch eingeben und nicht den state reinschreiben - und du willst die erste stelle - also [0]
dein datenpunkt: