Ankündigung

Einklappen
Keine Ankündigung bisher.

Selction

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

    #16
    Also, ich bin ja immer etwas pingelig... ... es heißt Sitemap, nicht Sidemap. Site -> Grundstück, Lage, Örtlichkeit; Map -> Karte
    Code sollte hier im Forum immer als Code markiert sein, nicht als Zitat. Die Forensoftware ändert selbsttätig Buchstabenfolgen ab, man kann das nicht verhindern, außer man markiert die Zeichenfolgen als Code gerade bei Code kommt es auf jedes einzelne Zeichen an. Abgesehen davon erhöht sich auch die Lesbarkeit.

    Wenn Du mit Zahlenwerten arbeitest, solltest Du besser ein Number Item verwenden, kein String Item.
    Code:
    Number Laden "E-Auto laden" <switch>
    Umlaute in Labeln sollten kein Problem sein, falls doch, solltest Du prüfen, ob die locales richtig gesetzt sind (das kann auch an anderer Stelle zu Problemen führen). Das Selection Widget sollte also ohne weiteres auch so funktionieren:
    Code:
    Selection item=Laden mappings=[0="Aus", 1="Zugewinn", 2="Überschuss", 3="Laden" ]
    Das Label ist schon im item definiert, man kann also auf eine doppelte Definition verzichten (es sei denn, man möchte dasselbe Item mehrfach verwenden, mit verschiedenen Labeln)

    Die Rules mögen zwar funktionieren, aber mit modular hat das nichts zu tun. Sauber sieht das so aus:

    Code:
    rule "Laden"
    when
        Item Laden changed
    then
        if(!(Laden.state instanceof Number)) {
            logWarn("laden","Das Item Laden enthält keine gültige Zahl! {}",Laden.state)
            return;
        }
        switch ((Laden.state as Number).intValue) {
            case 0: {                                          // Laden aus
               EG_Wohnzimmer_Licht_Suedseite.sendCommand(OFF)
               EG_Wohnzimmer_Licht_Decke.sendCommand(OFF)
               EG_Wohnzimmer_Licht_Westseite.sendCommand(OFF)
            }
            case 1: {                                         // Laden Zugewinn
               EG_Wohnzimmer_Licht_Westseite.sendCommand(ON)
               EG_Wohnzimmer_Licht_Suedseite.sendCommand(OFF)
               EG_Wohnzimmer_Licht_Decke.sendCommand(OFF)
            }
            case 2: {                                         // Laden Überschuss
               EG_Wohnzimmer_Licht_Westseite.sendCommand(OFF)
               EG_Wohnzimmer_Licht_Suedseite.sendCommand(OFF)
               EG_Wohnzimmer_Licht_Decke.sendCommand(ON)
            }
            case 3: {                                         // Laden manuell
               EG_Wohnzimmer_Licht_Westseite.sendCommand(OFF)
               EG_Wohnzimmer_Licht_Suedseite.sendCommand(ON)
               EG_Wohnzimmer_Licht_Decke.sendCommand(OFF)
            }
            default: {                                        // Irgendwas stimmt nicht
                logWarn("laden","Ungültiger Wert übergeben! {}",Laden.state)
            }
        }
    end
    Man könnte auch mehrere if() Anweisungen verwenden, um auf den ausgewählten Zustand zu reagieren, switch-case ist aber wesentlich eleganter (der Code spricht für sich )
    Die Methode Item.sendCommand(Wert) ist der Action sendCommand(Item,Wert) immer vorzuziehen, da die Action nur mit Strings umgehen kann.
    Zuletzt geändert von udo1toni; 21.11.2019, 21:38.

    Kommentar


      #17
      Mensch Udo bis gerade eben war ich so stolz auf mich !!
      Ich werde es so ändern wie du es gemacht hast !!

      was ich auch noch machen werden ist eine
      Code:
      Rule Systemstart_laden
      when
      System started
      thenEG_Wohnzimmer_Licht_Suedseite.sendCommand(ON) 
       end
      Um bei einem nächtlichen Stromausfall das Auto im Zweifelsfall voll zu haben...
      ein frage habe ich noch
      switch ((Laden.state as Number).intValue) {
      was bedeutet das intValue)?
      Aber auch wenn ich jetzt ein wenig geknickt bin danke

      Kommentar


        #18
        Hallo habs gerade getestet leider geht es nicht im logfile kommt



        Code:
        2019-11-20 00:23:19.810 [ome.event.ItemCommandEvent] - Item 'Laden' received command 3
        
        2019-11-20 00:23:19.822 [vent.ItemStateChangedEvent] - Laden changed from 2 to 3
        
        
        019-11-20 00:27:00.666 [WARN ] [el.core.internal.ModelRepositoryImpl] - Configuration model 'raspi_25_02-1018.rules' has errors, therefore ignoring it: [149,24]: missing ')' at ';'
        
        [149,74]: mismatched input ',' expecting '}'
        
        [149,86]: mismatched input ')' expecting 'end'
        aber funktionieren tut es nimmer ?!
        Gruss
        Zuletzt geändert von Gerhard75; 20.11.2019, 00:30.

        Kommentar


          #19
          Du hast einen Tippfehler in Deiner Rule, in Zeile 149 der Datei raspi_25_02-1018.rules, an Position 24. Es fehlt eine schließende Klammer.

          Allerdings sehe ich in meiner Rule keinen entsprechenden Fehler, und es gibt nur eine Zeile, in der ein Semikolon vorkommt, das ist die Zeile mit dem return.
          Der monierte Fehler kann auch in einer anderen Zeile auftreten, aber an dieser Stelle stolpert die Syntaxprüfung.

          Kommentar


            #20
            Hallo

            ich habe eigentlich copy Paste gemacht

            über der Zeile mit retun ist auch ein Semikolon Ich finde den Fehler einfach nicht
            ich habe jetzt mal deine Rule auskomentiert da war die Fehlermeldung nicht mehr da

            logWarn("laden";"Das Item Laden enthält keine gültige Zahl! {}",Laden.state)
            hier müsste er drin sein finde ihn bloss nicht

            Kommentar


              #21
              logWarn("laden","Das Item Laden enthält keine gültige Zahl! {}",Laden.state)
              so müsste es passen

              Kommentar


                #22
                Oh. tatsächlich... das ist falsch, da gehört ein Komma hin. Ich habe das oben korrigiert.

                Kommentar

                Lädt...
                X