Ankündigung

Einklappen
Keine Ankündigung bisher.

LinKNX: Diskussionen zu Tipps, Tricks und Beispiele

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

    Was bedeutet "bleibt stehen"? Ist der Prozess noch vorhanden und reagiert auf keine Aktionen mehr oder verabschiedet er sich nach 6 Stunden? Was machst du, wenn linknx stehen bleibt?

    Möglicherweise gibt es einen Deadlock im 1-Wire Treiber.

    Kommentar


      Hallo Ihr,

      @panzaeron,
      ich habe mal am Beginn und Ende des Shell-Skripts eine Ausgabe in eine zweite Log-Datei erstellt und den Loglevel auf Debug gesetzt.

      @toggle,

      der Prozess ist scheinbar nicht mehr vorhanden, hier nach dem es wieder stehen geblieben ist, nach 8 Std., keine 6, habe mich da vertan.
      Code:
      /var/lib/linknx$ ps ax | grep linknx
      13277 ?        S      0:00 grep linknx
      Und hier nach einem reboot
      Code:
      /var/log$ ps ax | grep linknx
       2212 ?        Ss     0:05 /usr/local/bin/linknx -c/var/lib/linknx/linknx.xml -p /var/run/linknx.pid -d/var/log/linknx.log -w
       2896 ?        S      0:00 grep linknx
      Ich schaue dann mal wie es in 8 Std. wieder aussieht.

      Gruß
      Michi

      Kommentar


        Habe gerade mal in Dein XML geschaut...
        Code:
            <rule id="sendRL_Flur_Temp">
              <condition type="timer" trigger="true">
                <every>250</every>
              </condition>
              <actionlist>
                <action type="shell-cmd" cmd="/home/rrdtool/update_database_RL_Flur.sh"/>
              </actionlist>
            </rule>
        Ich vermute mal, dass LinKNX hier stehen bleibt, weil irgendein Shell-Script hängen bleibt.

        Auch wenn es prinzipiell so laufen sollte, denke ich dennoch, das die reinen Timer-Rules nicht wirklich für LinKNX geeignet sollen.

        Sowas gehört in den CRON. Hier kannst Du zu festgelegten Zeiten/Intervallen einfach ein Shell-Script aufrufen. Mach einfach mal "man crontab". Ist super einfach.

        Gruß, Netsrac

        Kommentar


          Problem scheint gelöst

          So,

          jetzt habe ich den/die Übeltäter gefunden.

          Zitat von netsrac Beitrag anzeigen
          Ich vermute mal, dass LinKNX hier stehen bleibt, weil irgendein Shell-Script hängen bleibt.
          Das hatte ich jetzt auch schon vermutet, denn je mehr Shell-Scripte ich hinzugefügt habe desto schneller ist Linknx ausgestiegen.

          Die Scripte haben sich nicht beendet, es sind nach jedem Aufruf noch netcat Prozesse sowie die Scripte als Prozess über ps zu sehen.
          Code:
          2798 ?        S      0:00 sh -c /home/rrdtool/update_database_RL_Flur.sh
           2799 ?        S      0:00 /bin/bash /home/rrdtool/update_database_RL_Flur.sh
           2811 ?        S      0:00 netcat localhost 1028
           2812 ?        S      0:00 sh -c /home/rrdtool/update_database_RL_WZ_HK2.sh
           2813 ?        S      0:00 /bin/bash /home/rrdtool/update_database_RL_WZ_HK2.sh
           2818 ?        S      0:00 netcat localhost 1028
           2819 ?        S      0:00 sh -c /home/rrdtool/update_database_RL_WZ_HK1.sh
           2820 ?        S      0:00 /bin/bash /home/rrdtool/update_database_RL_WZ_HK1.sh
           2832 ?        S      0:00 netcat localhost 1028
           2840 ?        S      0:00 sh -c /home/rrdtool/update_database_RL_Erdgeschoss.sh
           2841 ?        S      0:00 /bin/bash /home/rrdtool/update_database_RL_Erdgeschoss.sh
           2853 ?        S      0:00 netcat localhost 1028
           2854 ?        S      0:00 sh -c /home/rrdtool/update_database_VL_Erdgeschoss.sh
           2855 ?        S      0:00 /bin/bash /home/rrdtool/update_database_VL_Erdgeschoss.sh
           2867 ?        S      0:00 netcat localhost 1028
           2884 ?        S      0:00 sh -c /home/rrdtool/update_database_RL_Flur.sh
           2885 ?        S      0:00 /bin/bash /home/rrdtool/update_database_RL_Flur.sh
           2897 ?        S      0:00 netcat localhost 1028
           2898 ?        S      0:00 sh -c /home/rrdtool/update_database_RL_WZ_HK2.sh
           2899 ?        S      0:00 /bin/bash /home/rrdtool/update_database_RL_WZ_HK2.sh
           2904 ?        S      0:00 netcat localhost 1028
           2906 ?        S      0:00 sh -c /home/rrdtool/update_database_RL_WZ_HK1.sh
           2907 ?        S      0:00 /bin/bash /home/rrdtool/update_database_RL_WZ_HK1.sh
           2919 ?        S      0:00 netcat localhost 1028
           2920 ?        R      0:00 ps ax
          Ich habe das Scrpit nun abgeändert, nun ist alles sauber.

          Code:
          #!/bin/bash
          cd /home/rrdtool
          # Read temperature from sensor Arbeitszimmer
          tempread=`cat /mnt/1wire/28.B3B100040000/temperature`
           
          OBJECTID="Arbeitszimmer_Temperatur"
          #printf '<write><object id="%s" value=%s /></write>\4' "$OBJECTID" "$tempread" | netcat localhost 1028 > /dev/null 2>&1
          [COLOR=darkred]printf '<write><object id="%s" value=%s /></write>\4' "$OBJECTID" "$tempread" | nc -q 1 localhost 1028 > /dev/null 2>&1[/COLOR]

          Zitat von netsrac Beitrag anzeigen
          Sowas gehört in den CRON. Hier kannst Du zu festgelegten Zeiten/Intervallen einfach ein Shell-Script aufrufen. Mach einfach mal "man crontab". Ist super einfach.
          Ich denke auch dass es da besser aufgehoben ist.
          Leider habe ich mich damit noch nicht richtig auseinander gesetzt.
          Kannst mir da mal jemand zu meinen Script ein einfaches Beispiel erstellen?
          Wenn ich erst einmal einen Anfang/Vorlage habe, dann komme ich mit dem Rest auch selber klar.
          Besten Dank.

          Gruß
          Michi

          Edit: Ok, über Crontab habe ich jetzt was über Google finden können, scheint echt einfach zu sein.
          Ich muß dann nur mal schauen, wie ich dann die Werte wieder nach Linknx. bekomme.

          Kommentar


            Zitat von Michixx Beitrag anzeigen
            Edit: Ok, über Crontab habe ich jetzt was über Google finden können, scheint echt einfach zu sein.
            Ich muß dann nur mal schauen, wie ich dann die Werte wieder nach Linknx. bekomme.
            So...CRON ist echt kein Hexenwerk.

            Einfach auf Shell-Ebene folgendes Kommando eingeben:

            Code:
            crontab -e
            Daraufhin öffnet sich Dein Lieblingseditor. Nun einfach pro Zeile ein Eintrag. Die Spalten sehen dabei wie folgt aus:

            Code:
                       field         allowed values
                       -----         --------------
                       minute        0-59
                       hour          0-23
                       day of month  1-31
                       month         1-12 (or names, see below)
                       day of week   0-7 (0 or 7 is Sun, or use names)
                       script name
            Für jede Zeit-Spalte kannst Du ein "*" verwenden.

            Wenn Du also alle 5 Minuten ein Script ausführen willst, dann schreibst Du:
            Code:
            */5 * * * * /path/to/script.sh
            Ein Script zu festen 10-er Minuten ausführen kannst Du hiermit:
            Code:
            10,20,30,40,50 * * * * /path/to/script2.sh
            Oder immer kurz vor Mitternacht:
            Code:
            59 23 * * * /path/to/script3.sh
            Nur mal so als Idee....

            Gruß, Netsrac

            Kommentar


              Hallo Carsten,

              muss das ein Shell-Script sein, oder kann ich da auch direkt Kommandos angeben.

              Hab bei mir in der crontab
              Code:
              0 3 1 * * find /var/log -name '*.gz' -exec rm -f \{} \;
              Also immer am 1. des Monats um 03:00.
              Läuft aber nicht.

              Gibts irgendwo nen Log, wo man Fehlermeldungen sieht?

              Sorry, wenn ich den Fred gekapert hab.
              Aber die Info hilft dem Michi sicher auch.
              Ciao
              Olaf
              Nichts ist so gerecht verteilt, wie der Verstand.
              Jeder meint, genug davon zu haben.

              Kommentar


                Zitat von dundee Beitrag anzeigen
                Hab bei mir in der crontab
                Code:
                0 3 1 * * find /var/log -name '*.gz' -exec rm -f \{} \;
                Also immer am 1. des Monats um 03:00.
                Läuft aber nicht.

                Gibts irgendwo nen Log, wo man Fehlermeldungen sieht?
                Die Logs werden dem User als Mail zugestellt. Je nachdem ob eMails auf dem Server aufgesetzt sind. Schau einfach mal in /var/mail/username. Kannst Du auch einfach mit 'nem Texteditor öffnen.

                Zu Deinem obigen Code:

                Erkläre mir mal, was der "\" vor der ersten Klammer soll :-)

                Versuchs mal so:
                Code:
                0 3 1 * * (find /var/log -name \*.gz -exec rm -f {} \;)
                Zum Aufräumen der Logfiles gibt es übrigens ein besseres Tool namens "logrotate". Dort kannst Du die Maximalgröße einies einzelnen Files angeben und wie viele "archive" Du behalten willst.

                Gruß, netsrac

                Kommentar


                  Hallo Carsten,

                  Zitat von netsrac Beitrag anzeigen
                  Die Logs werden dem User als Mail zugestellt. Je nachdem ob eMails auf dem Server aufgesetzt sind. Schau einfach mal in /var/mail/username. Kannst Du auch einfach mit 'nem Texteditor öffnen.
                  Hab grad keinen Zugriff aufs System. Muss ich mal gucken. Ich hab da keine EMails aufgesetzt.
                  Aber trotzdem super Tip!

                  Zitat von netsrac Beitrag anzeigen
                  Zu Deinem obigen Code:

                  Erkläre mir mal, was der "\" vor der ersten Klammer soll :-)
                  Ich dachte immer, die erste geschweifte müsste man escapen.
                  Habs grad getestet - geht doch glatt auch ohne.
                  Zitat von netsrac Beitrag anzeigen
                  Zum Aufräumen der Logfiles gibt es übrigens ein besseres Tool namens "logrotate". Dort kannst Du die Maximalgröße einies einzelnen Files angeben und wie viele "archive" Du behalten willst.
                  Da bin ich grad erst gestern Abend drüber gestolpert.
                  Wenn ich da das eibd.log mit einbeziehe muss ich dann aber wohl nen Deamon-Restart mit reinnehmen, oder?
                  Jedenfalls erzeugt er kein neues Logfile, wenn man ihm das alte im laufenden Betrieb weglöscht (und das macht logrotate doch, oder?).

                  Bin ich der einzige, der den eibd.log mit ins logrotate nehmen will?
                  Oder gibts da schon ne logrotate.conf dafür?


                  Oh Mann, jetzt sind wir langsam völlig OT. Und ich hab eh schon den Fred gekapert (eigentlich nur für EINE KURZE FRAGE).

                  Ich übergeb den Fred jetzt wieder offiziell an den TE.
                  logrotate und Deamon-Restart krieg ich wohl auch alleine in den Griff. Schaut jetzt nicht so sonderlich komplex aus - hoffe ich mal....
                  Ciao
                  Olaf
                  Nichts ist so gerecht verteilt, wie der Verstand.
                  Jeder meint, genug davon zu haben.

                  Kommentar


                    linknx und exceptiondays

                    Hallo,

                    hat jemand erfahrung damit, in linknx mit den exceptiondays zu arbeiten?

                    Die Anwendung bei Zeitschaltfunktionen ist ja klar:
                    Code:
                      <at hour="14" min="00" wdays="12345" exception="no" />
                    bedeutet, dass die Funktion nicht an "Ausnahmetagen" ausgeführt wird. Mit exception="yes" ist es unabhängig davon.

                    Aber ich möchte auswerten, ob ein "Ausnahmetag" ist. Also verschiedene Funktionen nur an diesen Tagen ausführen.

                    Wie setzte ich sowas um, bzw. is das überhaupt möglich?

                    Kommentar


                      Hi,

                      spontan würde mir einfallen einfach einen Timer für Mitternacht einzurichten, der bei einem exceptionday ein objekt auf true setzt, das man dann in weiteren logiken auswerten kann. Das Objekt muss natürlich bei einem nicht-exceptionday auch wieder auf false gesetzt werden...

                      Gruß, Waldemar
                      OpenKNX www.openknx.de

                      Kommentar


                        Man kann auch rules auf aktiv oder nicht-aktiv setzen mit "set-rule-active", da könnte man evt. auch was mit bauen...

                        23:59: regel auf aktiv setzen
                        00:01: wenn nicht execpition day regel auf inaktiv

                        oder so...

                        Michael

                        Kommentar


                          Hallo Waldemar, hallo Michi,

                          soweit hatte ich auch schon an die beiden Möglichkeiten gedacht. Aber wie sehen dann die entsprechenden Codes aus?

                          Kommentar


                            linknx.log

                            Zitat von MGK Beitrag anzeigen
                            Man kann auch rules auf aktiv oder nicht-aktiv setzen mit "set-rule-active", da könnte man evt. auch was mit bauen...

                            23:59: regel auf aktiv setzen
                            00:01: wenn nicht execpition day regel auf inaktiv

                            oder so...

                            Michael

                            Hallo MGK,

                            mit ein bisschen Logik wird die linknx.log recht schnell recht gross. gibt es eine Möglichkeit, zB zu sagen "wenn x.log > 20 MB dann lösche älteste Einträge bis x.log < 20 MB.

                            Gruss
                            docjey

                            Kommentar


                              hmmm... keine Ahnung wie Linknx gebaut ist in Deinem verwendeten Image.

                              auf jeden Fall kann man mit den Log level einstellen:
                              Code:
                              <logging format="simple" level="WARN"/>
                              "DEBUG", "INFO", "NOTICE", "WARN" and "ERROR". The default value is "INFO"
                              Wenn log4cpp eingebunden ist??? kann man noch viel mehr einstellen laut Doku-Wiki inklusive max Grösse und logrotate.

                              Michael

                              Kommentar


                                Variables delay in Action

                                Hallo,

                                hab da mal ne Frage, bin wohl mal wieder Blind, oder es gibt hier keinen Hinweis drauf. Aber vielleicht hat das ja schon jemand umgesetzt.

                                Ich möchte gerne die Delayzeit einer Action variabel gestalten z.B. über einen Infotrigger der CV.

                                Wie der Code mit statischem Delay aussieht weiß ich:

                                Code:
                                    <rule id="xxxx">   
                                     <condition type="and">
                                       <condition type="object" id="xxxx" value="on" trigger="true" />
                                     </condition>
                                
                                     <actionlist type="if-true">
                                        <action type="set-value" id="yyyy" value="on"/>
                                        <action type="set-value" id="yyyy" value="off" delay="20m"/>
                                     </actionlist>
                                    </rule>
                                unter sourceforge.net

                                hab ich folgenden Code für einen Timer gefunden:
                                Code:
                                <at type="variable" time="wakeup_time" wdays="12345">
                                dafür muss ich aber eine "Uhrzeit" EIS3 oder EIS4 haben.

                                Hat jemand einen Tip, wie ich das machen kann?

                                Kommentar

                                Lädt...
                                X