Ankündigung

Einklappen
Keine Ankündigung bisher.

Initialisierung von LBS-internen Variablen?

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

    Initialisierung von LBS-internen Variablen?

    Hallo Christian,

    mir ist eben aufgefallen, dass LBS-interne Variablen (v#1...) beim Edomi-Start mit ihrem Kommentar (!) initialisiert werden.

    Zum Test habe ich in einem LBS direkt am Anfang die internen Variablen loggen lassen und sehe in diesem Output als "Wert" der Variablen deren Kommentar:

    Code:
    for ($i = 1; $i <= 16; $i++) {
        LB_LBSID_debug(true, "Initial value for v$i: " . getLogicElementVar($id, $i));
    }
    M.M.n. ist das ein Fehler. Wenn kein #init=... angegeben wurde, sollten diese Var's leer sein. Was meinst Du?

    Darauf gekommen bin ich durch die Problemstellung herauszufinden, ob ein LBS zum allerersten Mal läuft (also nachdem Edomi neu gestartet wurde) oder nicht.
    Zuletzt geändert von starwarsfan; 11.08.2016, 15:36. Grund: Fixed typo
    Kind regards,
    Yves

    #2
    Das ist mir auch schon aufgefallen, deshalb haben die Variablen bei mir auch keine Namen

    Kommentar


      #3
      Was meinst Du mit "Kommentar"?

      Gültige Deklarationen sind:

      [v#1 = ]
      [v#1 = 123]
      [v#1 = Hallo]

      #init gibt es bei Variablen nicht, nur bei Eingängen.
      EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

      Kommentar


        #4
        Hm, ok. Ich bin davon ausgegangen, dass interne Variablen genauso deklariert werden, wie die Eingänge:

        Code:
        [e#1       =Trigger                      ]
        [e#2       =Debug Output    #init=0      ]
        [v#1       =Foo                          ]
        [v#2       =Bar             #init=123    ]
        Könnte man das nicht so machen? Würde den Code verständlicher gestalten, da dann vom Kommentar her klar ist, wofür die Variable gebraucht wird. Das es kein #init gibt, damit könnte ich leben, denn das sollte ja nur beim allerersten LBS-Call gesetzt werden.
        Kind regards,
        Yves

        Kommentar


          #5
          Hilfe gelesen?

          Verstehe ich nicht wirklich - eine Variable deklariert man üblicherweise mit einem Wert (oder halt mit "leer"). Was soll hier ein #init bringen - das würde mich eher verwirren

          Zum Verständnis: Die Variablen haben keine Namen! Mit v#1=123 deklarierst Du v1 und setzt diese Variable initial auf 123.
          EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

          Kommentar


            #6
            Zitat von gaert Beitrag anzeigen
            Hilfe gelesen?
            Nunja, das bringt in diesem Zusammenhang nichts.


            Zitat von gaert Beitrag anzeigen
            Verstehe ich nicht wirklich
            Na das wir zwei uns nicht gleich verstehen, ist ja nichts besonderes mehr. Das war bisher immer so.


            Zitat von gaert Beitrag anzeigen
            eine Variable deklariert man üblicherweise mit einem Wert (oder halt mit "leer"). Was soll hier ein #init bringen - das würde mich eher verwirren

            Zum Verständnis: Die Variablen haben keine Namen! Mit v#1=123 deklarierst Du v1 und setzt diese Variable initial auf 123.
            Jetzt beiss Dich doch mal nicht so am #init fest. Ich habe doch geschrieben, es mir nicht darauf ankommt.

            Mir geht es darum, dass die Variablen leer initialisiert werden sollten und nicht mit dem, was man im Baustein am Anfang hinter dem = schreibt! Das was dort nach dem = steht ist einfach ein Kommentar zur Variable oder meinetwegen auch deren Name. Aber unterm Strich wäre das vom Handling her dann eben genauso wie das bei den LBS-Eingängen der Fall ist.

            Soll eine Variable mit einem konkreten Wert initialisiert werden, dann kann das der LBS-Entwickler ja einfach machen.
            Kind regards,
            Yves

            Kommentar


              #7
              Ich habs jetzt - zugegebenermassen - nicht ausprobiert, bin aber bisher davon ausgegangen, dass ein [v#1=] initial zu einer leeren Variable fuehrt. Tut es das nicht? Und wenn die initial zB auf foobar stehen soll, dann eben ein [v#1=foobar]...
              Ich hab aber das Gefuehl, ich guck grad am eigentlichen Problem vorbei.... irgendwie... o\

              Kommentar


                #8
                Hi

                Zitat von wintermute Beitrag anzeigen
                Ich habs jetzt - zugegebenermassen - nicht ausprobiert, bin aber bisher davon ausgegangen, dass ein [v#1=] initial zu einer leeren Variable fuehrt. Tut es das nicht? Und wenn die initial zB auf foobar stehen soll, dann eben ein [v#1=foobar]...
                Ich hab aber das Gefuehl, ich guck grad am eigentlichen Problem vorbei.... irgendwie... o\
                Ja, ein wenig.

                Meine Überlegung ist die, dass rein intuitiv die internen Variablen genauso definiert werden sollten, wie die Eingänge des Bausteins. Und da ist die zweite Spalte der Kommentar zum Eingang bzw. dessen Name. Die Variablen sollten aber leer initialisiert werden. Wenn eine interne Variable mit einem Wert vorbelegt werden soll, dann kann man das ja direkt am Anfang des Code des LBS machen.
                Kind regards,
                Yves

                Kommentar


                  #9
                  Zitat von starwarsfan Beitrag anzeigen
                  Ja, ein wenig.
                  Ich hab mir die Muehe gemacht das nochmal zu ueberdenken, ich verstehe es aber scheinbar trotzdem nicht...
                  Folgende Variablen-Definition
                  Code:
                  [v#1        =    ]
                  [v#2        = blah    ]
                  [v#3        = 17.2    ]
                  fuehrt zu folgendem Dump
                  Code:
                  2016-08-12 00:20:00    462945    13654    1    VarDump: Array[LF]([LF]    [3] => 17.2[LF]    [2] => blah[LF]    [1] => [LF])[LF]
                  Wo ist denn jetzt das Problem? Ist doch alles so, wie (zumindest) ich es erwarten wuerde... oder erwartest Du bei V1 ein "NULL"?
                  Oder geht es eher darum, dass die Variablen keine Namen haben? Das ist falsch, denn sie haben ja Namen... eben 1-3 in diesem Fall.
                  Oder meinst Du eher einen Kommentar zur Variablen? Der haette aber in der Deklaration nichts verloren, da gehoert er nicht hin.

                  Aber wie gesagt: ich fuerchte, ich habs noch immer nicht wirklich begriffen

                  gruesse :: Michael

                  Kommentar


                    #10
                    Ganz ehrlich: Ich hab's auch nicht kapiert - wirklich nicht... Klar kann man die Variablen auch im LBS-Code gleich zu Beginn mit einem Wert belegen - oder eben bei der Deklaration (wie in so ziemlich jeder "Programmiersprache").

                    Wo ist also genau Dein Problem?! Kommentare kannst Du hinter(!) die Deklaration schreiben, also z.B.: [v#1=] diese Variable ist leer

                    EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

                    Kommentar


                      #11
                      Ach vergesst es einfach, wenn euch intuitive Bedienung auch auf Seiten der Entwickler nicht wirklich etwas bedeutet. Ich geb's auf...
                      Kind regards,
                      Yves

                      Kommentar


                        #12
                        Sorry, aber was ist an v#1=xyz nicht intuitiv?!
                        EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

                        Kommentar


                          #13
                          Ganz einfach: Es ist nicht konsistent zur Deklaration der Eingänge und damit anders, also nicht intuitiv! Bei den Eingängen schreibt man ja folgendes:

                          Code:
                          e#<nummer> =<kommentar/name> [#init=<wert>]

                          Nun erwarte ich, dass das konsistent auch bei den Variablen so ist. Ob nun mit oder ohne #init-Möglichkeit sei mal dahingestellt:

                          Code:
                          v#<nummer> =<kommentar/name> [#init=<wert>]

                          Also alles nach dem Motto "e#X ist der Eingang foo", "a#Y ist der Ausgang bar" und "v#Z ist die interne Variable blablub". Der Knackpunkt dabei ist aber der, dass die Variablen nicht mit dem Kommentar/Name sondern leer initialisiert werden sollten! Im Sinne einer konsistenten Deklaration aller Ein- und Ausgänge sowie Variablen wäre das auch hier mit der Angabe von #init= zielführender.

                          Bei den Eingängen wird der Wert hinter #init= zur Initialisierung verwendet, bei den Variablen jedoch der Wert hinter dem =. Natürlich ist das für sich alleine betrachtet kein Problem. Nur m.M.n. wäre es besser, wenn es eine einheitliche Konfiguration gäbe.

                          Kind regards,
                          Yves

                          Kommentar


                            #14
                            Naja... Eingänge und Ausgänge haben eine ganz andere Bedeutung als Variablen: Eingänge und Ausgänge werden im Editor angezeigt, Variablen hingegen nicht. Denn diese sind ja nur intern für den Entwickler von Bedeutung, nicht jedoch für den Anwender, der im Logikeditor mit den Bausteinen arbeitet.

                            Also ehrlich gesagt halte ich Deine Argumente für etwas willkürlich... Dem Eingang wird ein Wert zugewiesen, der nunmal als Name angezeigt wird. Mit #init definiert man den Initialwert für diesen Eingang, also quasi eine zusätzliche(!) Eigenschaft, die ja auch im Logikeditor editierbar ist.

                            Wie kommst Du eigentlich nach so langer Zeit plötzlich auf sowas? Bislang kamen scheinbar alle Entwickler (dich eingeschlossen) mit dieser schrecklich inkonsistenten Lösung klar...
                            EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

                            Kommentar


                              #15
                              Hallo Christian

                              Zitat von gaert Beitrag anzeigen
                              Naja... Eingänge und Ausgänge haben eine ganz andere Bedeutung als Variablen: Eingänge und Ausgänge werden im Editor angezeigt, Variablen hingegen nicht. Denn diese sind ja nur intern für den Entwickler von Bedeutung, nicht jedoch für den Anwender, der im Logikeditor mit den Bausteinen arbeitet.
                              Ja ist klar. Deswegen spreche ich ja auch die ganze Zeit nur von der Entwickler-Sicht.


                              Zitat von gaert Beitrag anzeigen
                              Also ehrlich gesagt halte ich Deine Argumente für etwas willkürlich...
                              Schade...


                              Zitat von gaert Beitrag anzeigen
                              Wie kommst Du eigentlich nach so langer Zeit plötzlich auf sowas? Bislang kamen scheinbar alle Entwickler (dich eingeschlossen) mit dieser schrecklich inkonsistenten Lösung klar...
                              Das steht im ersten Posting. Ich möchte in einem LBS herausfinden, ob dieser schon einmal lief.

                              Dazu habe ich geschaut, ob eine interne Variable leer ist und mich gewundert, als dort deren Kommentar drin stand (was ja nun also der Init-Wert ist.). Insofern ist das bisher noch nie aufgefallen, da die Variablen vor deren Verwendung immer überschrieben wurden und damit natürlich nicht mehr der Init-Wert darin stand.

                              Aber wie ich schon sagte, sei's drum...
                              Kind regards,
                              Yves

                              Kommentar

                              Lädt...
                              X