Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Gerätefilter usw. mit Regexpattern #2028

Closed
IT-VBFK opened this issue Nov 1, 2022 · 12 comments · Fixed by #2035
Closed

Gerätefilter usw. mit Regexpattern #2028

IT-VBFK opened this issue Nov 1, 2022 · 12 comments · Fixed by #2035
Labels
💡 enhancement-ideas New feature or change request

Comments

@IT-VBFK
Copy link
Contributor

IT-VBFK commented Nov 1, 2022

Describe the solution you'd like

Anstatt nur mit string matches zu filtern, wäre es hin und wieder ganz hilfreich, mittels Regex-Pattern zu filtern.

Hintergrund: Ich habe Aktoren und Thermostate die bis auf das Prefix gleich heißen. zB. Ak1_Raum1 und Th1_Raum1
Da die beiden mehr oder weniger zusammengehören, möchte ich nun zB hiermit filtern: (Th|Ak)1.*, mit genau diesen zwei Ergebnissen.

Describe alternatives you've considered

Manuell filtern

Is your feature request related to a problem?

Manuell filtern fühlt sich halt ein bisschen umständlich an :)

Additional information

No response

@IT-VBFK IT-VBFK added the 💡 enhancement-ideas New feature or change request label Nov 1, 2022
@jp112sdl
Copy link
Contributor

jp112sdl commented Nov 1, 2022

1.) Einstellungen->Geräte
Dort geht es jetzt schon, dass man mittels Pattern (|-getrennt) mehrere Begriffe angeben und suchen kann.

Bildschirm­foto 2022-11-01 um 17 20 50

Allerdings nicht "Regex-like", sondern es wird nur geschaut, ob die Suchzeichenfolge irgendwo im Text vorkommt.

Lässt sich jedoch relativ einfach in der webui.js anpassen (aktuellen Code habe ich // auskommentiert):

  /**                                                                                                                                                           
   * Pr?ft, ob der Filter auf einen Text zutrifft                                                                                                               
   **/                                                                                                                                                          
  this.match = function(text)                                                                                                                                   
  {                                                                                                                                                             
    if (false === isSet()) { return true; }                                                                                                                     
                                                                                                                                                                
    var patternList = m_value.toLowerCase().split("|");                                                                                                         
    //var patternList = m_value.split("|");                                                                                                                     
    text            = text.toLowerCase();                                                                                                                       
                                                                                                                                                                
    //for (var i = 0, len = patternList.length; i < len; i++)                                                                                                   
    //{                                                                                                                                                         
    //  if (0 <= text.indexOf(patternList[i])) { return true; }                                                                                                 
    //}                                                                                                                                                         
    var r = new RegExp(m_value.toLowerCase());                                                                                                                  
    if (r.test(text) === true) {return true; }                                                                                                                  
                                                                                                                                                                
    return false;                                                                                                                                               
  };   

2.) Status und Bedienung, sowie Einstellungen->Systemvariablen

Hier funktioniert 1. nicht.

Aber wenn ich auch hier in der webui.js aus

    if (this.filName !== "")                 
    {                                                                                 
      if (typeof obj['name'] != 'undefined')                                          
      {                                                                               
        if (obj['name'] === "")                      { return false; }                    
        var transName = translateString(obj['name']);              
        //if (transName.toLowerCase().indexOf(this.filName) == -1) { return false; }
        var r = new RegExp(this.filName);                                           
        if (r.test(transName.toLowerCase()) === false) {return false; } 
      }                                             
    } 

die aktuell genutzte Such-Methode auskommentiere und gegen eine Regex-Funktion austausche, dann sieht es erstmal gut aus.

Und es funktioniert dann auch noch weiterhin wie gehabt: Teilstrings werden als Ergebnis ausgeworfen.

Wobei man auf die Groß-/Kleinschreibung weiterhin verzichten müsste, da sowohl Filtertext als auch Wert in lowerCase gewandelt werden.

Das würde ich auch so beibehalten wollen.

Bildschirm­foto 2022-11-01 um 17 01 47

@IT-VBFK
Copy link
Contributor Author

IT-VBFK commented Nov 1, 2022

Cool :)

Danke fürs checken

Wenn mir noch jemand erklärt, wie man das hier via PR einreicht, kann ich mir das mal anschauen ;)

Wenn diese Änderung überhaupt gewünscht ist..

@jp112sdl
Copy link
Contributor

jp112sdl commented Nov 2, 2022

Wenn mir noch jemand erklärt, wie man das hier via PR einreicht, kann ich mir das mal anschauen ;)

  • Fork ziehen
  • in buildroot-external/patches/occu anschauen, wie andere Patche aussehen
  • neues Patchverzeichnis erstellen und betroffene/benötigte Patchdateien darin ablegen
  • create_patches.sh ausführen
  • Änderungen in einem neuen eigenen Branch committen
  • PR erstellen

Wenn diese Änderung überhaupt gewünscht ist..

Selbst wenn nicht, kannst du ja für dich und dein System einen Patch bauen.
Ich werd es auf jeden Fall in meine persönliche Customize-Sammlung mit aufnehmen.

@jens-maus
Copy link
Owner

Bin mir nicht mal sicher ob es so eine gute Idee ist jetzt Otto-Normal-Verbraucher so etwas wie eine RegExp erklären zu müssen. Auch wird das sicherlich wieder irgendwelche Nebeneffekt haben wenn jemand jetzt nur ein * oder so anderes Sonderzeichen dort eingibt....

@jp112sdl
Copy link
Contributor

jp112sdl commented Nov 2, 2022

@jens-maus Denk in Ruhe drüber nach.
Ggf. könnte man auch eine extra [ ] Regex-Suche-Checkbox in das Filter-Popup einbauen.

@IT-VBFK : Du kannst es ja mal testen. Ich bin vorerst zufrieden damit.
Falls das hier in RM nicht reinkommt, kannst du den Patch ja auch in einem Homematic-Forenbeitrag bereitstellen und dann kann sich das jeder, der meint damit umgehen zu können, selbst installieren.

1006-WebUI-RegexFilter.txt

@IT-VBFK
Copy link
Contributor Author

IT-VBFK commented Nov 2, 2022

@jens-maus Denk in Ruhe drüber nach. Ggf. könnte man auch eine extra [ ] Regex-Suche-Checkbox in das Filter-Popup einbauen.

@IT-VBFK : Du kannst es ja mal testen. Ich bin vorerst zufrieden damit. Falls das hier in RM nicht reinkommt, kannst du den Patch ja auch in einem Homematic-Forenbeitrag bereitstellen und dann kann sich das jeder, der meint damit umgehen zu können, selbst installieren.

1006-WebUI-RegexFilter.txt

Kann man diesen Patch einfach so mit Boardmitteln anwenden?

@jp112sdl
Copy link
Contributor

jp112sdl commented Nov 2, 2022

Ja natürlich.
mount -o remount,rw / ; cd / ; patch -p 1 -i /pfad/zum/patchfile

@IT-VBFK
Copy link
Contributor Author

IT-VBFK commented Nov 2, 2022

Herzlichen Dank für die Hilfe :)

Das mit dem PR schau ich mir am WE mal in Ruhe an

@IT-VBFK
Copy link
Contributor Author

IT-VBFK commented Nov 4, 2022

neues Patchverzeichnis erstellen und betroffene/benötigte Patchdateien darin ablegen

Noch eine Frage: da braucht man eine webui.js.orig woher bekomm ich die? aus dem OCCU-Package?

@jp112sdl
Copy link
Contributor

jp112sdl commented Nov 4, 2022

Schau mal in die anderen Patchverzeichnisse. Dann nimmst die neueste die du da finden kannst

@IT-VBFK
Copy link
Contributor Author

IT-VBFK commented Nov 4, 2022

Ok,

sorry wenn ich nochmal nachhake..

Was ich gemacht habe:

  • die die webui.js.orig aus dem patch 168 genommen
  • die aktuelle webui.js aus meinem System (mit den Änderungen) auch in dieses Verzeichnis gesteckt
  • create_patches.sh aufgerufen

Nun habe ich aber komischerweise extrem viele Änderungen im patchfile, die gar nichts damit zu tun haben. Kann das sein?
Des weiteren hab ich ein paar weiterer Patches die auch als "modified" gekennzeichnet sind.. Aber gut.. die muss man ja nicht committen

IT-VBFK added a commit to IT-VBFK/RaspberryMatic that referenced this issue Nov 4, 2022
@jens-maus
Copy link
Owner

Optimalerweise nimmt man immer die webui.js direkt aus dem OCCU als basis bzw. orig patchdatei und fügt dort seine änderungen ein. Wenn man allerdings an der selben stelle wie ein anderer WebUI Patch agiert bzw. etwas ändert, dann muss man natürlich die webui.js dieses früheren Patches nutzen. Deshalb auch die aufsteigenden Patch IDs die auch nicht recyclt werden dürfen.

IT-VBFK added a commit to IT-VBFK/RaspberryMatic that referenced this issue Nov 4, 2022
IT-VBFK added a commit to IT-VBFK/RaspberryMatic that referenced this issue Nov 4, 2022
IT-VBFK added a commit to IT-VBFK/RaspberryMatic that referenced this issue Nov 4, 2022
IT-VBFK added a commit to IT-VBFK/RaspberryMatic that referenced this issue Nov 4, 2022
IT-VBFK added a commit to IT-VBFK/RaspberryMatic that referenced this issue Nov 4, 2022
IT-VBFK added a commit to IT-VBFK/RaspberryMatic that referenced this issue Nov 4, 2022
IT-VBFK added a commit to IT-VBFK/RaspberryMatic that referenced this issue Nov 11, 2022
IT-VBFK added a commit to IT-VBFK/RaspberryMatic that referenced this issue Nov 11, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
💡 enhancement-ideas New feature or change request
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants