NEWS
trigger mit regex mit variablen
-
bräuchte etwas hilfe
folgender code: ein trigger mit einem regex:
var myreg= /^0_userdata\.0\.CONTROL-OWN\.AAATEST\.mehr\..*$/ let idDatenpunktPrefix = '0_userdata.0'; // '0_userdata.0' or 'javascript.x' let idDatenPunktStrukturPrefixS = `Withings.Test.Schlaf`; // Schlafdauer on({id: myreg}, function (obj) { // Wird ausgeführt, sobald sich im letzten Ordner was ändert var value = obj.state.val; log(obj.id) let ida=obj.id.split('.'); mySetState(`${idDatenpunktPrefix}.${idDatenPunktStrukturPrefixS}.${ida[ida.length-1]}`, value, 'boolean', ida[ida.length-1]); // Schreibt den Wert in einen Datenpunkt. Dieser muss für das Diagramm geloggt werden });
ich bräuchte aber ein regex, welches variable ist, da das "mehr" im regex variable sein soll- es sollte, jedesmal, wenn der trigger reagiert, auch der myreg angepaßt werden - es können neue ordner erscheinen und dann soll das ganze auf den neuen order (z.b. mehr1) angewandt werden - das herausfinden, ob ein neuer ordner da ist, ist hier nicht implementiert - soll aber die variable myreg im trigger anpassen
geht sowas überhaupt ? und wie erzeuge ich eine regex , die variable ist
-
@liv-in-sky
Da scheint jemand das halbe Forum in Beschlag zu nehmen.Bei mir funktioniert es so:
https://forum.iobroker.net/topic/54601/withings-werte-korrekt-umrechnen/11 -
ja, macht er
ich versuche gerade das script, das von dir geklaut ist , für alle datenpunkte anzuwenden
aber eigentlich ist das der job des adapter erstellers - diese serial-ordner sind sehrseltsam und braucht niemand - es scheint, das dieapi diesedaten automatisch holt, weil sie dort gespeichert sind - bei uns - iobroker - haben wir die history für sowas , man muss also keine alten daten in ordner unter dem adapter speichern
-
Im den Adaptereinstellungen kannst du die Anzahl der Tage begrenzen, vielleicht sollte man mit diesen etwas spielen, In den Grundeinstellungen sind 30 Tage hinterlegt. Für jede Änderung, was innerhalb dieser 30 Tage stattfindet wir ein neuer Ordner angelegt.
Außerdem, wenn sich ein Wert innerhalb des Ordners ändert, ändern sich alle, die darin enthalten sind
-
habe das ganze nicht bei mir installiert - daher kann ich nur nachsehen, wenn ich bei andy über anydesk online bin - wir habe heute mal alle datenpunkte gelöscht und neu anlegen lassen - dann gab es bis .. serials59
aber ich wollte dich eh noch was fragen - dein script lädt den ordnerS namen nur beim start des scriptes - ich sehe nichts, was dann, wenn ein neuer ordner (z.b. serials60) erstellt wurde, den pfad ändert und die aktuellen daten ausliest und speichert - check ich da was nicht ?
ich werd mich vielleicht nochmal an dich wenden, wenn ich wieder daran code, obwohl ich immer noch hoffe, dass dies mit dem instanzsetting einfacher werden sollte
-
Das war nur schnell zusammen kopiert und als Denkanstoß gedacht.
Mein Skript hat mittlerweile fast 4000 Zeilen.
Hier mal ein paar Bilder meiner VIShttps://forum.iobroker.net/topic/51104/test-withings-v0-0-x/281
Mit Diagramme spiele ich momentan auch etwas ich glaube aber nicht, dass dies so richtig funktioniert.
Selbst wenn man sich im Adapter nur einen Tag anzeigen lässt, funktioniert das ganze nur, wenn man kein Nickerchen macht, da er dann einen neuen Ordner anlegt und dann diese Daten mit geloggt werden. Da wüsste ich nicht, wie mann das abfangen soll.
-
4000 zeilen - nicht schlecht
-
Da ich nicht der Skriptkönig bin, geht da bestimmt auch etliches einfacher, aber es funktioniert. Kann das ja mal posten, allerdings frühestens am Montag.
-
@liv-in-sky sagte: das "mehr" im regex variable sein soll
Ich würde den variablen Ordner innerhalb des Triggers auswerten. Etwa so:
let myreg= /^0_userdata\.0\.CONTROL-OWN\.AAATEST\..*/; let path = '0_userdata.0.CONTROL-OWN.AAATEST.'; let ordner = 'mehr.'; let idDatenpunktPrefix = '0_userdata.0'; // '0_userdata.0' or 'javascript.x' let idDatenPunktStrukturPrefixS = `Withings.Test.Schlaf`; on({id: myreg}, function (obj) { if(obj.id.startsWith(path + ordner)) {
-
ich denke, ich werde mal einen anderen weg probieren
aber nochmal für die klärung - es geht darum, wie man auf datenpunkte triggern kann, die neu erstellt werden, während das script läuft
- wenn ich einen trigger mit einem array habe, gibt es keine möglicheit, durch änderung des arrays (neue dp/id's) die subscription zu ändern
- was passiert, wenn man einen schedule hat und im schedule das array definiert und dann im schedule anschliessend den on(.. codet - werden dann bei jedem schedule wieder neue subsc. erstellt?
- ein regex erkennt auch neue datenpunkte und triggert
- ein selector erkennt auch neu angelegte dp und kann die verarbeiten
ist das so einigermaßend richtig ?
-
@liv-in-sky sagte: ein regex erkennt auch neue datenpunkte und triggert
Ja.
@liv-in-sky sagte in trigger mit regex mit variablen:
ein selector erkennt auch neu angelegte dp und kann die verarbeiten
Nein, der Selektor verwendet den Puffer der JS-Instanz.
-
danke dir - und ist klar- hatte schon öfter das problem mit dem selektor - hatte ich vergessen bzw verdrängt
-
seit ihr schon weiter gekommen, braucht ihr noch etwas?
-
@oli nein .- wir warten auf tombox - evtl ändert er den adapter und das ganze hat sich erledigt
-
@liv-in-sky
Habt ihr schon mal versucht den Adapter auf einen Tag zu stellen? -
@oli geht nur mit activities
bei den schlafdaten geht das im adapter nicht
-
@liv-in-sky
Ist echt komisch, bei mir wurden noch nie so viele Ordner angelegt. Kann es sein, dass er mehrere Schlafträcker hat?
Ich lege Nachts meine Uhr ab und lass die Schlafmatte aufzeichnen. Kann das aber heute Nacht mal testen -
@oli da musst du mit @Damrak2022 schreiben - ich kenne mich eigentlich damit nicht aus - er ha tmich nur nach einem script gefragt
-
Kann dir auch gerne mein Skript mal einstellen, wenn du willst. Vielleicht kannst du dir da was raus ziehen.
-
danke dir -würd mich dann nochmal melden - ich finde es besser,wenn das mit dem adapter klappt - bei den activities funktioniert es ja auch
tombox hat nicht si viel zeit - muss halt einfach ein wenig geduld aufgebracht werden