Ankündigung

Einklappen
Keine Ankündigung bisher.

Beschreibung Zustandsautomat relative Adressierung

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

    [callidomus] Beschreibung Zustandsautomat relative Adressierung

    Hi,

    habe wohl ein problem mit der Relativen Adressierung....gibt es dazu irgentwo eine beschreibung?

    Nachtrag:
    Was ich rausgefunden habe.

    Wenn man das die Items hat

    Code:
    [parent]
        [smitem]
        [item1]
            [child1]
            [child2]
    dann erreicht man im Zustandsautomat die items wie folgt.

    Das Item des Zustandsautomates (smitem)
    Code:
    .
    Das Elternitem
    Code:
    ..
    Und die Kinderitems so
    Code:
    .child1
    .child2
    und so auf ein Item auf der gleichen Ebene wie das smitem
    Code:
    ..item1

    ---------

    ich habe ein Item mit zwei Kinderitems kurz und lang.

    Und eine Zustandsautomat der diese setzen will bekommt als Meldung.

    2017-03-11 23:09:31,017 [INIT] ################################################## #######
    2017-03-11 23:09:31,018 [INIT] Zustandsautomat: langertastendruck
    2017-03-11 23:09:31,019 [INIT] Loglevel: Info
    2017-03-11 23:09:31,020 [INIT] No trigger items found for selector: .
    2017-03-11 23:09:31,021 [INIT] ein/enter: no condition objects found for selector: .
    2017-03-11 23:09:31,022 [INIT] ein/exit-kurz: no condition objects found for selector: .
    2017-03-11 23:09:31,023 [INIT] State ein: no objects for selector ./kurz found!
    2017-03-11 23:09:31,024 [INIT] State ein: no objects for selector ./lang found!
    2017-03-11 23:09:31,026 [INIT] Restoring state aus
    2017-03-11 23:09:52,158 [aus] entering state: aus Node: A.binareingang

    Es wird auch nicht wie geplant ./lang oder ./kurz gesetzt. Was ist falsch?

    Viele Grüsse
    Jürgen text1.JPG
    text2.JPG

    Zuletzt geändert von heckmannju; 19.03.2017, 15:31.

    #2
    Hi,
    einen Fehler habe ich schon gefunden.

    das Kind objekte heissen .kurz und .lang und bei lang hat noch der . für das aktuelle objekt gefehlt... wobei ich mir nicht sicher bin ober der . richtig ist. jetzt kommt es beim start zu folgender ausgabe.

    Code:
    2017-03-12 08:30:25,746 [INIT] #########################################################
    2017-03-12 08:30:25,747 [INIT] Zustandsautomat: langertastendruck
    2017-03-12 08:30:25,748 [INIT] Loglevel: Debug
    2017-03-12 08:30:25,748 [INIT] No trigger items found for selector: .
    2017-03-12 08:30:25,749 [INIT] ein: creating state
    2017-03-12 08:30:25,750 [INIT] ein/enter: no condition objects found for selector: .
    2017-03-12 08:30:25,751 [INIT] ein/exit-kurz: no condition objects found for selector: .
    2017-03-12 08:30:25,752 [INIT] ein/exit-kurz: action objects => A.binareingang.kurz
    2017-03-12 08:30:25,754 [INIT] ein/exit-lang: no condition objects found for selector: .
    2017-03-12 08:30:25,754 [INIT] ein/exit-lang: action objects => A.binareingang.lang
    2017-03-12 08:30:25,755 [INIT] ein/enter: removing condition
    2017-03-12 08:30:25,756 [INIT] ein/exit-lang: removing condition
    2017-03-12 08:30:25,757 [INIT] ein/exit-kurz: removing condition
    2017-03-12 08:30:25,757 [INIT] aus: creating state
    2017-03-12 08:30:25,758 [INIT] aus/enter: condition objects => year
    2017-03-12 08:30:25,759 [INIT] Using triggers: location.today
    2017-03-12 08:30:25,760 [INIT] Restoring state aus
    Vg
    Jürgen

    Kommentar


      #3
      Hi Jürgen,

      Du solltest bei einer SM nicht mit . arbeiten, da an vielen Stellen nicht klar ist, was gemeint ist. Ich geh das der Reihe nach durch:
      • Abhängigkeiten:
        Du triggerst die SM durch sich selbst, ist meiner Meinung nach eine Endlosschleife. Hab ich so noch nicht benutzt, würde ich vermeiden. Und so richtig verstehe ich nicht, wie die SM funktionieren soll bzw. wie Du gedacht hast, dass sie funktionieren soll.
      • Item/s:
        Hier gibt es 2 Möglichkeiten, was Du meinen könntest: Zustand oder Wert der SM. Deswegen hat Marcus dafür in der Dropdown die explizite Auswahl erlaubt. Nimm entweder "Zustand" oder "Automat (item)". Da Du hier aber beim Verlassen bist, macht eine Abfrage des Zustandes oder des Wertes keinen Sinn: Du bist dann in dem Zustand, der verlassen werden soll UND dieser hat dann den Wert, den der Zustand haben soll.
      • Item/s mit Alter:
        Da hast Du gar kein Item angegeben, falls da ein . stehen sollte: Dafür ist "Automat (item)" mit "Alter" gedacht.
      Noch eine allgemeine Anmerkung: SM werden maximal mit einem Zyklus von 1s abgefragt, dazu kommen noch Ungenauigkeiten des Schedulers. Willst Du wirklich einen langen Tastendruck >1s auswerten?

      Gruß, Waldemar
      OpenKNX www.openknx.de

      Kommentar


        #4
        Hi Waldemar,

        erstmal was ich will ein BE Eingang wo nur 0 und 1 kann um die Funktionalität langer Tastendruck erweitern...neuer kaufen der das kann wäre zu einfach....ich will das eher so machen das beim drücken ein Licht angeht. Wenn der Taster länger gedrückt wird noch ein anderes Licht. Das sollte nicht so zeitkritisch sein. Also eigentlich will ich nur einen langen Tastendruck zusätzlich erkennen.

        Geplant ist wenn ich von ein auf aus gehe will ich wissen wie lange die Taste gedrückt wurde. Das müsste die Zeit sein in der ich im Zustand ein bin.

        Ich versteh nicht den unterschied von Automat(item) zu Item "." sollte meiner Verständnis nach das selbe sein. Du hast da was von nichteindeutigkeit von "." erzält was ich nicht verstehe wenn . nicht eindeutig ist kann ein Eltern Item und ein Kind auch nicht eindeutig sein.

        Ich habe das jetzt mal so abgeändert.

        SM.JPG
        Das Ergebniss ist nicht so doll die Statmaschine meint jetzt sie muss jede sekunde anspringen keine Ahnung warum ich will an der stelle nur wissen wie alt sie ist. Die Bedingung zuvor ist nicht. Das will ich auf keinen Fall.

        Wenn sie von KNX oder CLI gesetzt wird wird sie auch nicht ausgewertet sie springt einfach auf den Zustand ein oder aus ohne die Prüfungen auszuführen weil sonst müsste ja entweder kurz oder lang gesetzt werden.

        Viele Grüsse
        Jürgen

        Kommentar


          #5
          Hi Jürgen,

          Zitat von heckmannju Beitrag anzeigen
          Ich versteh nicht den unterschied von Automat(item) zu Item "." sollte meiner Verständnis nach das selbe sein. Du hast da was von nichteindeutigkeit von "." erzält was ich nicht verstehe wenn . nicht eindeutig ist kann ein Eltern Item und ein Kind auch nicht eindeutig sein.
          Ich habe nicht geschrieben, dass das Item nicht eindeutig ist, sondern dass bei einem SM-Item nicht eindeutig ist, was Du meinst. SM-Items sind die einzigen Items, die mehrere Informationen tragen können (ich sagen nicht, dass ich das gut finde, aber es ist so). Ein SM-Item kann einen Zustand und einen Wert tragen, und diese beiden müssen nicht gleich sein. Deswegen gibt es bei den conditions die Möglichkeit, beides jeweils explizit auszuwerten und deswegen (vermute ich) wertet Marcus einen "." nicht aus. Semantisch ist "." das selbe wie "Automat (item)", aber technisch eben nicht.

          Zitat von heckmannju Beitrag anzeigen
          Das Ergebniss ist nicht so doll die Statmaschine meint jetzt sie muss jede sekunde anspringen keine Ahnung warum ich will an der stelle nur wissen wie alt sie ist.
          Das zeigt schon mal, dass jetzt die condition korrekt ausgewertet wird. Wenn Du die Trigger der SM automatisch bestimmen lässt, ist bei einer Altersabfrage ein Trigger jede Sekunde korrekt. Wie soll sonst die SM das Alter feststellen? Es muss jede Sekunde geprüft werden, ob das Alter <= :langertastendruck ist (oder entsprechend >).

          Zitat von heckmannju Beitrag anzeigen
          Die Bedingung zuvor ist nicht. Das will ich auf keinen Fall.
          Das verstehe ich nicht. Falls sich das auf meine Aussage zur Bedingung beim Verlassen bezieht, es bleibt dabei, was ich gesagt habe: "Automat (item) Wert == 0" ist in einer exit-Bedingung sinnlos, denn es ist entweder immer wahr (dann ist die Bedingung nicht nötig) oder immer falsch (dann ist der ganze exit nicht nötig, da nie betreten).

          Zitat von heckmannju Beitrag anzeigen
          Wenn sie von KNX oder CLI gesetzt wird wird sie auch nicht ausgewertet sie springt einfach auf den Zustand ein oder aus ohne die Prüfungen auszuführen weil sonst müsste ja entweder kurz oder lang gesetzt werden.
          Falls Du hier das SM-Item meinst: Wenn ein SM-Item von außen gesetzt wird, werden NIE conditions ausgewertet. Ist auch logisch:
          • Ein SM-Item hält den Zustand der SM.
          • Dieser Zustand wird dadurch geändert, dass die SM evaluiert wird (also getriggert) und dann anhand von conditions einen neuen Zustand annimmt
          • Du kannst auch den Zustand einer SM direkt setzen, dann "zwingst" Du die SM direkt in den neuen Zustand, da wird nichts evaluert, sondern das Item einfach auf den Wert gesetzt.

          Zitat von heckmannju Beitrag anzeigen
          Geplant ist wenn ich von ein auf aus gehe will ich wissen wie lange die Taste gedrückt wurde. Das müsste die Zeit sein in der ich im Zustand ein bin.
          Nein. Das ist die Zeit, in der das Trigger-Item (das über Flankensteuerung vom BE bei Tastendruck auf 1 und beim loslassen auf 0 gesetzt wird) den Wert 1 hat. Das darf auf keinen Fall das SM-Item sein. Mach mal folgendes:

          Code:
          [Taster]
              type = bool
              knx_dpt = 1
              knx_listen = <GA vom Taster>
              [Lang]
                  type = num
                  langertasterndruck = 2
          Die SM hängt an Lang (Dein alter Selektor ist gleich). Bei den Abhängigkeiten machst Du "..", dann reagiert die SM auf den Taster.
          Dann machst Du einen Zustand "lang" mit dem Wert 1, als enter-condition ein
          Item/s .. == 0
          Machine (item) Alter >= :langertastendruck
          Dann noch einen Zustand "trigger" mit dem Wert 2, als enter-condition ein
          Item/s .. == 1
          Und schließlich noch einen Zustand "kurz" mit dem Wert 0, als enter-condition ein
          year >= 0


          Ich habe es zwar nicht ausprobiert, aber wahrscheinlich wird diese SM beim loslassen des Tasters immer eine 1 für den langen Tastendruck haben, und eine 0 für kurzen.
          Hier könnte man es auch ausprobieren, ob das Attribut "langertastendruck" auch Kommazahlen und somit so was wie "0.5" Sekunden auch erlauben würde.

          Gruß, Waldemar



          OpenKNX www.openknx.de

          Kommentar


            #6
            Hi Waldemar,
            danke für deine ausfühlichen antworten. Das scheint so zu funktionieren wie du gesagt hast. Muss morgen mal schauen ob sich das was ich mir ausgeacht habe auch in der praxis bewährt.

            Viele Grüsse
            Jürgen

            Kommentar


              #7
              Hi,

              Code:
              [taster]
                  [sm]
                  [kurz]
                  [lang]
              Wenn meine Items so heisen. Die Statemaschine am Item sm hängt. Wie kann ich in der SM den auf die Items kurz und lang zugreifen?

              Viele Grüsse
              Jürgen

              Kommentar


                #8
                Hi Jürgen,

                Code:
                ..kurz
                und analog bei lang .

                Gruß Waldemar
                OpenKNX www.openknx.de

                Kommentar

                Lädt...
                X