Ankündigung

Einklappen
Keine Ankündigung bisher.

Warnung: Map is a raw type. ....

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

    Warnung: Map is a raw type. ....

    Hi,
    ich habe in einem Rule-File folgende Map definiert:

    Code:
    var Map luefterstufe = null
    openhab und der designer mosen das mit folgender Meldung an:
    Code:
    Map is a raw type. References to generic type Map<K, V> should be parameterized
    Wie muss das richtig formuliert sein, dass diese Warnung nicht mehr kommt?

    Viele Grüße
    Michael

    #2
    Es müsste wie folgt definiert sein:

    Code:
    var Map(String, Integer) luefterstufe = null
    Der Key ist damit ein String und der Value ein Integer.

    Gruß
    Thomas

    Kommentar


      #3
      Hi Thomas,
      danke für die Antwort. Vielleicht sollte ich noch erwähnen, dass ich damit Itemstatus zwischenspeichere
      Code:
      luefterstufe = storeStates(LueftungStufe, LueftungSchalten)
      Ich habe leider keine Ahnung, wie eine Map sowas speichert. Letztendlich sind das eine Number für LueftungStufe und ein ON oder OFF für LueftungSchalten.
      Aber irgenwie kann das ja nicht relevant sein für die Mapdefinition, da ich ja auch mehr als nur zwei Werte in der Map speichern kann.
      Also verstehen tue ich das nicht.

      Muss ich also nur Deine Zeile in meine Rule kopieren und alles ist gut?

      Viele Grüße
      Michael

      Kommentar


        #4
        Aus meiner Sicht reicht es wenn du die Definition nach ziehst, aber nach deiner Erklärung frage ich mich, ob eine Map das richtige ist. Eine Map speichert Schlüssel/Wertpaare und wenn Du als Schlüssel die Lüfterstufe nimmst, kannst du bei drei Stufen drei Werte speichern. Hier kann man auch ein Array nehmen und der Index ist die Lüfterstufe. Aber um das weiter auszudetailieren hast Du noch nicht genug beschrieben.

        Bei deiner Map fällt mir noch ein, dass der String ggf. auch ein OnOffType sein könnte, was dann direkt ein Stae für ein Item wäre und keine Umweg über einen String geht.

        Probier die Ergänzung doch einfach mal aus.

        Gruß
        Thomas

        Kommentar


          #5
          Hi Thomas,

          um es genauer zu beschreiben. Die Rule sieht in Auszügen so aus:

          Code:
          var Map luefterstufe = null
          
          rule "Stoßlüften"
          when
              Item Stosslueften received update
          then
              if (Stosslueften.state==ON) {
                  if (luefterstufe == null) { // kein Stosslüfen
                      luefterstufe = storeStates(LueftungStufe, LueftungSchalten)
                      sendCommand(LueftungStufe, 3)        
                  }
              } else {
                  restoreStates(luefterstufe)
                  luefterstufe = null
              }
          end
          Damit merke ich mir quasi den Zustand der Lüftung vor dem Stoßlüften, damit dieser nach einer gewissen Zeit wieder eingestellt wird. Ähnliches mache bei der Lautstärke meiner squeezeboxen. Wenn ein Telefonanruf reinkommt, werden die Lautstärken gemerkt. telefoniert, dann wieder die Lautstärke auf gemerktes Niveau angehoben.

          Wo finde ich den eine Erklärung, wie diese map funktioniert?

          In o.g. Beispiel wird ja im Prinzip eine Number (LueftungStufe 1 bis 3) und ein Boolean (LueftungSchalten ON oder OFF) gepeichert. In deiner Definition finde ich einen String, den ich jetzt mal meinem Unwissen geschuldet für den Platzhalter der Strings LueftungStufe und LueftungSchalten sehen würde. Die zweite Definition in der map ist ein Integer, was für Nummern der LueftungStufe zutrifft, für LueftungSchalten aber vielleicht nicht mehr ... Ich weiß nicht, wie OH intern Variablen gehandhabt werden (damit bin ich absolut auf Kriegsfuß), vielleicht ist ja ein ON=1 und OFF=0 auch als Integer zu sehen.

          Das hat jetzt zwar nicht unmittelbar was mit meinem Problem zu tun, ich würde nur ganz gerne verstehen, was ich da mache ;-)

          Viele Grüße
          Michael

          Kommentar


            #6
            Moin Michael,

            ich versuche da mal nachzuvollziehen. Vorweg, ich glaube nicht, dass Du eine MAP brauchst. In einer Map wird einem Schüssel ein eindeutiger Wert zugeordnet. Im Prinzip sowas ähnliches wie ein Array.

            Bei deine Boxen gehe ich davon aus, dass Du mehrer hast, die einen Namen haben. Dem Namen wird dann in der Map eine Lautstärke zugeordnet, die dann später anhang des Namens abgerufen und eingestellt werden kann.

            Aus meiner Sicht braucht du für den einen Lüfter nur eine Variable, die sich den letzten Status merkt. Typ könnte einfach Number sein.

            Der Code könnte dann so aussehen:
            Code:
            var Number LastState
            
            rule "Stoßlüften"
            when
                Item Stosslueften changed
            then
                if (Stosslueften.state == ON)  {
                    LastState = Luefterstufe.state
                    Luefterstufe.sendCommand(3)
                } else {
                    Luefterstufe.sendCommand(LastState)
                }
            Eine Logik zum Einschalten kann noch dazu gebaut werden. Habe ich das soweit richtig verstanden.

            Gruß
            Thomas

            Kommentar

            Lädt...
            X