Ankündigung

Einklappen
Keine Ankündigung bisher.

erster eigener LBS

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

    erster eigener LBS

    Hallo,
    zuerst einmal Hallo an Alle und vielen Dank für die zahlreichen Beiträge und vor allem an gaert! Edomi ist der Wahnsinn und macht richtig Spaß.
    Ich bin relativ neu in dem Thema KNX und da meine Zeit leider sehr begrenzt ist, werde ich wohl auch nie der Profi werden. Ergänzend hatte ich mit Linux noch nie etwas am Hut und habe es trotzdem, Dank des Forums, geschafft soweit alles zum Laufen zu bringen. Hier hätte ich ggf. noch die eine oder andere Anregung was die Hilfe zur Installation angeht, da ich hier wohl unnötig viel Zeit "verbraten" habe und es aus meiner jetzigen Erkenntnisse wohl deutlich einfacher geht. Ich würde ja hierzu auch was posten, da ich mir aber nicht sicher bin, ob es auch der wirklich richtige Weg war und ob es so 100%ig korrekt ist, halte ich lieber meinen Mund und würde das den Profis überlassen.
    Nun gut, zumindest läuft alles und jetzt möchte ich mich mit meinen nicht vorhandenen PHP-Kenntnissen an mein erstes LBS wagen und scheitere das erste Mal.

    Zum Testen habe ich einen ganz einfachen Baustein erstellt, der einfach nur mal einen Text "TEST LBS TraceLog" in das LOG-File schreiben soll, um zu sehen ob es überhaupt aufgerufen wird und ob die Debugging-Möglichkeit läuft. Am Eingang liegt ein internes "Test"-KO. Dieses sehe ich im LOG-File, aber sonst nichts.
    (Ich hatte auch schon mehr drin, auch mit Ausgabe auf einen Ausgang, aber nachdem das auch nicht funktioniert hat, habe ich es extrem vereinfacht um den Fehler auf die Spur zu kommen)

    Wäre klasse, wenn mir jemand weiterhelfen könnte und Danke schon mal vorab.

    Logik.JPG
    LOG.JPG

    Hier mal das Skript:

    ###[DEF]###
    [name = TEST LBS]

    [e#1 = Eingang1]

    [a#1 = Ausgang1]
    ###[/DEF]###


    ###[HELP]###
    Vorlage: Standard-LBS
    ###[/HELP]###


    ###[LBS]###
    function LB_LBSID($id) {
    if ($E=logic_getInputs($id))
    {
    if ($E[1]['refresh']==1)
    {
    writeToTraceLog(0,true,"TEST LBS TraceLog")
    }
    }
    }
    ?>
    ###[/LBS]###


    ###[EXEC]###
    <?
    ?>
    ###[/EXEC]###


    #2
    Sieht für mich jetzt nach dem Monitor-Log als nach dem Tracelog aus, was du da als Screenshot angehängt hast, oder?
    Dort ist geloggt worden, dass du eine 1 auf das iKO Test geschickt hast.

    Die Meldung, die du mit writeToTraceLog schreibst, sollte im Tracelog auftauchen.

    Kommentar


      #3
      Ich weiss nicht, ob es nur ein Kopierfehler ist, aber füge doch mal zwischen den Zeilen ###[LBS]### function LB_LBSID($id) {
      folgendes <? ein, wenn noch nicht vorhanden.
      Also so:

      ###[LBS]###
      <?
      function LB_LBSID($id) {

      Kommentar


        #4
        Super, vielen Dank für die schnellen Antworten. Ich denke Ihr habt mir beide schon mal einen guten Tipp gegeben.

        @jonofe: Du hast Recht. Das ist der Monitor-Log. Aber wo finde ich den Tracelog? Bei mir sieht es so aus:
        Monitor.JPG

        @KNXFan1970: Nein, ist tatsächlich nicht drin. Da ist mir beim hin- und herprobieren wohl aus Versehen etwas verloren gegangen. Danke!

        Kommentar


          #5
          Zitat von Aktor Beitrag anzeigen
          Super, vielen Dank für die schnellen Antworten. Ich denke Ihr habt mir beide schon mal einen guten Tipp gegeben.

          @jonofe: Du hast Recht. Das ist der Monitor-Log. Aber wo finde ich den Tracelog? Bei mir sieht es so aus:
          Monitor.JPG
          Sollte eigentlich so aussehen:

          Screenshot from 2016-12-27 19-42-17.png

          Soweit ich weiss, muss man es nicht separat aktivieren. Hast du es denn noch mal nach dem Ergänzen des <? probiert?
          Gibt es weitere Fehlermeldungen?
          Projekt aktiviert?
          Logikseite aktiv?
          Da fehlt auch noch ein Semikolon am Ende des writeToTraceLog Befehls.

          Kommentar


            #6
            Das TraceLog muss in der edomi.ini aktiviert sein. Aber ungeachtet dessen: Das TraceLog ist eher nicht für eigene LBS gedacht - verwende doch besser das CustomLog (so wird's auch in der Hilfe zur LBS-Entwicklung beschrieben).
            EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

            Kommentar


              #7
              Nochmals vielen Dank für die Hilfe. TraceLog war bereits in der ursprünglichen edomi.ini aktiviert. Es lag tatsächlich an dem fehlenden "<?". Keine Ahnung wie das verschwunden ist, da ich in dem Bereich eigentlich nichts geändert hatte. Aber irgendwie muss es ja passiert sein. :-(
              In Zukunft werde ich nun CustomLog verwenden.

              Ich habe in der Zwischenzeit nun einiges weiter rumprobiert und stoße doch auf immer mehr Hürden. Hat z.B. einer einen guten Tipp bzgl. einer Beschreibung der möglichen Funktionen?

              Als Beispiel: In der edomi-Hilfe ist z.B. ein Beispiel mit einem UND-Gatter aufgeführt. Hier wird der Ausgang über logic_setOutput($id,1,1) gesetzt. In folgender Hilfe http://www.knx-home.net/wiki/index.php?title=Logic wird in dem gleichen Beispiel der Ausgang über setLogicLinkAusgang($id,1,1); gesetzt. Wo ist hier der Unterschied?

              Google liefert hier generell leider sehr dürftige Ergebnisse. Daher wäre ich für gute Literaturangaben dankbar.

              Als weiteren einfachen Versuch habe ich mich an einen ganz einfachen Baustein gemacht, eine zentrale Jalousiesteuerung mit Verriegelung der Abwärtsfahrt wenn z.B. ein Fenster offen ist. Soweit scheint es zu funktionieren, nur habe ich folgendes festgestellt. Ich brauche anscheinend das "else" mit drin, da sonst das LBS irgendwie aufhört. Bei Verriegelung E2 <1 wird dem Ausgang dann "0" zugewiesen, was wiederum eine Aufwährtsfahrt zur Folge hat. Wunsch wäre jetzt hier, dass die Jalousie aber unten bleibt, wenn sie vorher schon unten war. Hierfür müsste ich den Zustand vor Ausführung des LBS abfragen und dann zuweisen. Nur wie mache ich das?

              ###[DEF]###
              [name = Jalousie]

              [e#1 = Zentral]
              [e#2 = Verriegelung]

              [a#1 = Ausgang]
              ###[/DEF]###

              ###[HELP]###
              Vorlage: Standard-LBS
              ###[/HELP]###

              ###[LBS]###
              <?
              function LB_LBSID($id) {
              if ($E=logic_getInputs($id)) {
              if ($E[1]['refresh']==1) {
              if ($E[2]['value']==1) {
              setLogicLinkAusgang($id, 1, $E[1]['value']);
              }
              else {
              setLogicLinkAusgang($id, 1, 0);
              }
              }
              }
              }
              ?>
              ###[/LBS]###

              ###[EXEC]###
              <?
              ?>
              ###[/EXEC]###

              Kommentar


                #8
                Steht eigentlich alles in der EDOMI Hilfe. setLogicLinkAusgang() ist ein Alias von logic_setOutput()
                Such mal nach Funktionsreferenz, dann siehst du alle Funktionen, die EDOMI bereitstellt.
                Alles andere ist dann PHP und was du draus machst.

                Kommentar


                  #9
                  Danke Dir.

                  Ja, das hatte ich gesehen, nur leider setzt die Erklärung für mich schon wieder zu viel Basiswissen voraus. Das mit dem "Alias" hatte ich gelesen und vermutet was es heißt, ich möchte aber nicht nur vermuten :-) und im Moment ist es schon sehr viel Try & Error.
                  Ich suche daher nach einer ausführlicheren Beschreibung mit Beispielen zu jeder Funktion, in der Schritt für Schritt erklärt ist, was passiert und vor allem warum man die Funktion einsetzt.

                  Vielleicht gibt es ja sowas?

                  Ich wünsche allen einen guten Rutsch ins neue Jahr!

                  Kommentar


                    #10
                    Also ich finde die Beschreibung der Funktionen schon ziemlich ausführlich.
                    Natürlich sind PHP Grundkenntnisse notwendig. Wenn die nicht vorhanden sind, dass würde ich als erstes ein PHP Tutorial empfehlen.

                    Beispiele zu den EDOMI Funktionen findest du in jedem LBS. Am besten mal mit den einfachen LBS anschauen.

                    Ansonsten gibt es m.W. neben EDOMI Hilfe und Wiki keine weitere Beschreibung der EDOMI spezifischen Funktionen.

                    Kennst du das Wiki? Schau mal hier: http://www.knx-home.net/wiki/index.php?title=Logic

                    Von mir natürlich auch einen guten Rutsch ins neue Jahr

                    Kommentar


                      #11
                      Klar, Du hast auch ca. 500x mal so viele Beiträge wie ich und entsprechend mehr Erfahrung :-) Ja, das Wiki kenne ich (s.o.). Zu PHP gibt es ja einiges, nur zu Edomi habe ich wie gesagt nichts anderes gefunden. Dann mache ich mal weiter mit Try & Error bzw. vielleicht kann mir noch einer zu meinem o.g. Beispiel eine kurze Hilfestellung abgeben. Das würde mir schon sehr weiterhelfen.

                      a) Benötige ich wirklich das "Else" und wenn nein, würde die Jalousie einfach in der Position bleiben wenn die IF-Bedingung nicht erfüllt ist?
                      b) Wenn ich das "Else" benötige, wie kann ich dem Ausgang anstatt einen Fixwert von z.B. "0", den Wert zuweisen den er vor Aufruf des LBS hatte? Sprich die Jalousie dann unverändert bleiben?

                      Kommentar


                        #12
                        Ich habe vermutlich nicht verstanden, was dein LBS genau machen soll.
                        Ist es ein LBS, der einmal je Jalousie eingesetzt werden soll?
                        Was bedeutet zentral an E1? Kommt hier eine 1 wenn alle Jalousien runter fahren sollen und eine 0 für zentral AUF?
                        Und was genau ist E2? Sollte E2 nicht eigentlich Fensterstatus heißen statt Verriegelung?
                        Wenn an E1 eine 1 (Zentral) kommt und E2 == 0 (Fenster nicht offen), dann runterfahren? Und wenn an E1 eine 0 kommt, dann auf jeden Fall hochfahren? Ist es das was du willst?

                        Dann wäre es ggf. sowas wie:

                        PHP-Code:
                        if ($E[1]['refresh'] == 1)
                            if ((
                        $E[1]['value']==&& $E[2]['value']==0) ||  ($E[1]['value']==0)) 
                                
                        setLogicLinkAusgang($id1$E[1]['value']); 
                        Davon abgesehen kann man das mit den vorhandenen EDOMI Standard LBS lösen und braucht keinen eigenen LBS dafür.

                        Kommentar


                          #13
                          Genau, ein LBS je Jalousie.

                          Ja, eine 1 für alle Jalousien RUNTER und 0 für zentral AUF

                          Der LBS wird am Ende um einiges komplexer, da z.B. auch noch Sperren/ Verriegelungen für andere Situationen mit einpflegen möchte. So soll z.B. die Jalousie im Gäste Bad nicht hochfahren, wenn jemand im Bad und das Licht an ist, usw. Daher halte ich die Bezeichnungen eher allgemein/ flexibel, aber Du hast Recht, in diesem Fall ist es der Fensterstatus.
                          Ich hatte diesen Fall schon mit Standard LBS gelöst und hat funktioniert, nur wie gesagt, wird es noch ausgebaut und dann wurde es irgendwann unübersichtlich.

                          Ja, das ist das was ich im ersten Schritt prinzipiell machen möchte, bis auf dass bei mir E2==1 (Fenster nicht offen) ist, aber das bekomme ich schon transferiert :-) und dass, wenn die Verriegelung aktiv ist, die Jalousieposition sich nicht verändern soll.

                          Wenn ich es richtig verstanden habe, funktioniert Dein Beispiel wie meines, nur dass es einfacher und kompakter aufgebaut ist. Wenn das Fenster offen ist und eine Zentral 1 kommt, ist am Ausgang eine 0 und die Jalousie fährt hoch. Ich möchte aber, dass wenn die Jalousie/ Rolladen z.B. nur halb geschlossen ist, einfach gar nichts macht und an der gleichen Position bleibt.

                          "Normalerweise" würde ich hier einfach das ODER oder Else weglassen, d.h. dass gar nichts passiert. Aber das scheint so einfach nicht zu gehen, oder?

                          Kommentar


                            #14
                            Du willst weder hoch noch runter fahren, wenn die Jalousie nur halb geschlossen ist?
                            Du brauchst dann auf jeden Fall an einem weiteren Eingang die Position deiner Jalousie.
                            Ansonsten kannst du ja nicht in Abhängigkeit dieser Größe eine Aktion ausführen.

                            Kommentar


                              #15
                              ok, danke.

                              Ich hatte zuerst in Deinem PHP Code einfach das " || ($E[1]['value']==0) " weggelassen, mit der Idee, dass dann der Ausgang einfach nicht verändert wird. Nur hat das wie gesagt nicht funktioniert. Was passiert dann in dem LBS wenn man die ODER Bedingung weglässt?

                              Kommentar

                              Lädt...
                              X