Ankündigung

Einklappen
Keine Ankündigung bisher.

String nach Wort auswerten

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    String nach Wort auswerten

    Hallo zusammen,

    ich habe in OpenHab das DWD Binding eingebunden.

    Nun möchte ich Beispielsweise diesen String:

    "Es treten Gewitter auf. Dabei gibt es Sturmböen mit Geschwindigkeiten um 70 km/h (20m/s, 38kn, Bft 8) sowie Starkregen mit Niederschlagsmengen bis 25 l/m² pro Stunde und kleinkörnigen Hagel."

    nach dem Wort "Hagel" auswerten. In den Items WarningKoelnBeschreibung und WarningKoelnTyp kann der Begriff Hagel vorkommen.
    Ich möchte wenn in einem der beiden Items das Wort "Hagel" oder "HAGEL" drin ist, das dann meine Jalousie im DG alle hochfahren um sie vor Hagel zu schützen.

    Dazu habe ich noch einen Schalter hagelschutz_jalousie_dg gebaut, der zusätzlich eingeschaltet sein muss, damit ich den Hagelschutz auch ausschalten kann. WarningKoeln ist der Schalter für das auslösen eine Unwetterwarnung.

    Leider funktioniert meine Regel aber irgendwie nicht. Hat jemand eine Idee?

    Hier die Regel:

    Code:
    rule "Jalousie Dachgeschoss bei Unwetterwarnung vor Hagel hochfahren"
    
    when
    
    Item WarningKoeln changed to ON
    
    then
    
    If (hagelschutz_jalousie_dg.state == ON) {
    
    if (WarningKoelnTyp.state.toString.contains("HAGEL") || WarningKoelnBeschreibung.state.toString.contains("HAGEL")) {
    
    dg_kinderzimmer2_rol.sendCommand(0)
    dg_schlafzimmerrechts_rol.sendCommand(0)
    dg_schlafzimmerlinks_rol.sendCommand(0)
    dg_badezimmer2_rol.sendCommand(0)
    
    }
    
    
    else {
    if (WarningKoelnTyp.state.toString.contains("Hagel")|| WarningKoelnBeschreibung.state.toString.contains("Hagel")) {
    
    
    dg_kinderzimmer2_rol.sendCommand(0)
    dg_schlafzimmerrechts_rol.sendCommand(0)
    dg_schlafzimmerlinks_rol.sendCommand(0)
    dg_badezimmer2_rol.sendCommand(0)
    
    }
    }
    }
    end

    #2
    Wir haben zwei Items, deren Status jeweils einen String repräsentieren, der durchsucht werden muss.
    Um die Aufgabe etwas zu vereinfachen, wäre der erste Punkt, den Text in eine Variable zu schreiben.
    Der zweite Punkt wäre, die Variable mittels .toLowerCase komplett in Kleinbuchstaben zu wandeln.
    Da es hier nur um zwei Items geht, gibt es noch einen dreckigen Trick, sich die Arbeit weiter zu vereinfachen:

    Code:
    rule "Jalousie Dachgeschoss bei Unwetterwarnung vor Hagel hochfahren"
    when
        Item WarningKoelnTyp changed or
        Item WarningKoelnBeschreibung changed
    then
        val String strMessage = (WarningKoelnTyp.state.toString + WarningKoelnBeschreibung.state.toString).toLowerCase
        if(hagelschutz_jalousie_dg.state == ON && strMessage.contains("hagel")) {
            dg_kinderzimmer2_rol.sendCommand(0)
            dg_schlafzimmerrechts_rol.sendCommand(0)
            dg_schlafzimmerlinks_rol.sendCommand(0)
            dg_badezimmer2_rol.sendCommand(0)
        }
    end
    Es werden also einfach beide Item-Inhalte hintereinander in eine gemeinsame String-Konstante kopiert, das Ganze wird in lowercase gewandelt und anschließend durchsucht.
    In Deiner ursprünglichen Rule hast Du ein If statt if geschrieben. Falls Du die Rule kopiert hast, dürfte das der Fehler sein.

    Weiterer Verbesserungsvorschlag: Lege ein Group Item gDachfenster an und weise die vier Items diesem GroupItem zu. Dann reicht in der Rule ein
    gDachfenster.members.forEach[r|r.sendCommand(0)] aus, um alle Läden zu öffnen.

    Kommentar


      #3
      Zitat von udo1toni Beitrag anzeigen

      Code:
      val String strMessage = (WarningKoelnTyp.state.toString + WarningKoelnBeschreibung.state.toString).toLowerCase
      if(hagelschutz_jalousie_dg.state == ON && strMessage.contains("hagel")) {
      Mega gut! Es gibt insgesamt 19(!) verschieden Warnungen, die das Wort Gewitter enthalten. Da mir die Warnung "Gewitter" ohne die einzelnen Varianten genügt, kann ich so darauf verzichten, alle 19 verschienden Item.state anzugeben, die das Item annehmen kann. Das macht das ganze deutlich übersichtlicher!

      Kommentar

      Lädt...
      X