Ankündigung

Einklappen
Keine Ankündigung bisher.

linknx -w, --write[=FILE]

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

    KNX/EIB linknx -w, --write[=FILE]

    hallo,

    ich glaub ich steh grad etwas auf der leitung bezüglich linknx und benötige eure hilfe.

    in der linknx hilfe steht:
    -w, --write[=FILE] write configuration to file (if no FILE specified,
    the config file is overwritten)
    für mich heisst das, dass wenn ich die konfiguration über den xml-server ändere, diese änderung auch in die angegebene datei geschrieben wird, damit diese neue konfiguration auch für den nächsten start wieder zur verfügung steht.

    bei mir die konfigurationsdatei aber nie verändert. kann mir einer sagen wann diese geschrieben wird?

    zur sicherheit mein aufruf:
    /usr/local/bin/linknx -d/var/log/linknx -p /var/run/linknx.pid -c/etc/linknx/linknx.xml -w/etc/linknx/linknx.xml

    #2
    Lass das -w mal weg, das sollte es eigentlich tun..

    Makki
    EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
    -> Bitte KEINE PNs!

    Kommentar


      #3
      dann wird das configfile aber auch nicht geschieben, wenn die konfiguration über den xml-server geandert wird und genau das will ich ja haben. ich muß ja ansonsten jede konfigurationanderung an den xml-server senden und zusatzlich in die linknx.xml schreiben, falls der daemon mal abschmiert und neu gestartet werden muss.

      damit ich nicht falsch verstanden werde: funktionieren tut der linknx bestens, mir geht es nur um das automatische schreiben der konfigurationsdatei, wenn die konfiguration wahrend der laufzeit direkt über den xml-server geandert wird (neue objekte, neue bzw. geanderte rules usw.).

      Kommentar


        #4
        Sorry, hab jetzt nochmal nachgesehen, ich hab da natürlich "-w" (ohne Filename drinstehen, dann wird das mit -c angegebene configfile genommen). Testen kann ichs grade nicht, aber das hat meine ich so auch funktioniert. Ansonsten bleiben noch die Rechte auf das configfile, falls linknx nicht als root läuft (?)

        Makki
        EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
        -> Bitte KEINE PNs!

        Kommentar


          #5
          Hallo,

          Bevor 0.0.1.25 war das -w um Konfig zu speichern wenn Applikation ist gestopppt. Es war ein Problem damit, wenn linknx mit "kill -9" oder einfach durch Stromausfall gestoppt ist. Dafür habe ich es geändert.
          Wenn man config speichern will, muss man "<admin><save file='/where/to/save/linknx.xml'/></admin>" Befehl senden. Das klappt immer, egal ob "-w" benutzt oder nicht. Wenn man "-w" benutzt (oder "-w/etc/linknx/linknx.xml" ) kann man einfach "<admin><save/></admin>" senden.
          Ich weiss, das es noch nicht im Wiki geschrieben ist... Mea culpa

          MfG,

          Jean-François

          Kommentar


            #6
            Zitat von jef2000 Beitrag anzeigen
            Wenn man config speichern will, muss man "<admin><save file='/where/to/save/linknx.xml'/></admin>" Befehl senden. Das klappt immer, egal ob "-w" benutzt oder nicht. Wenn man "-w" benutzt (oder "-w/etc/linknx/linknx.xml" ) kann man einfach "<admin><save/></admin>" senden.
            ahh alles klar, danke für die information.

            Zitat von jef2000 Beitrag anzeigen
            Ich weiss, das es noch nicht im Wiki geschrieben ist... Mea culpa
            ja, ich habe im wiki gelesen, dass es die option <admin> gibt, aber da diese sonst nicht weiter erwähnt wurde dachte ich, dass diese noch experimentel ist und erst in zukünftigen versionen verwendbar ist.

            gibt es noch weitere admin-commands welche erwähnenswert sind?

            Kommentar


              #7
              Linknx ändert die Konfiguration nicht

              Hallo.
              Ich arbeite gerade mit Linknx und versuche während der Laufzeit die Konfiguration der Geräte zu ändern (Name, Gruppenadresse, ...).

              Im Output von Linknx steht zwar:
              Code:
              2012-02-08 10:57:09 [ INFO] Object: Configured object 'blau_on_off': gad=1/1/0
              Leider werden diese Änderungen aber nicht übernommen, wenn ich linknx beende. In der Konfiguration (/var/lib/linknx/linknx.xml), stehen immer noch die alten Werte. Auch mit dem <admin> Befehl funktioniert es nicht.

              Hier das PHP-Script, das die Änderung machen sollte.

              Code:
              $address = "127.0.0.1";
              $port = 1028;
              
              $fp = fsockopen($address, $port, $errno, $errstr, 30);
              if (!$fp) {
                  echo "$errstr ($errno)<br />\n";
              }
              else
              {
              	echo"SUCCESS";
              
                $in = "<write><config><objects><object id='blau_on_off' gad='1/1/0' type='1.001'>neueLampe</object></objects></config></write>\n\4";
              
                  fwrite($fp, $in);
              
                  $ret = '';
                  $cnt = 0;
                  while ($cnt < 4 && $fp && !feof($fp)) {
                      $ret .= fgets($fp, 128);
                      $c = fgetc($fp);
                      if ($c == "\4") {
                          if (ereg ("<write status='success'", $ret))
                            return 1;
                          break;
                      }
                      $ret .= $c;
                      $cnt++;
                  }
               $in = "<admin><save file='/var/lib/linknx/linknx.xml'/></admin>\n\4";
              
                  fwrite($fp, $in);
                  
                  $ret = '';
                  $cnt = 0;
                  while ($cnt < 4 && $fp && !feof($fp)) {
                      $ret .= fgets($fp, 128);
                      $c = fgetc($fp);
                      if ($c == "\4") {
                          if (ereg ("<write status='success'", $ret))
                            return 1;
                          break;
                      }
                      $ret .= $c;
                      $cnt++;
                  }
              
              echo "Config geändert";  
              }
              So starte ich linknx:

              linknx --config=/var/lib/linknx/linknx.xml --write=/var/lib/linknx/linknx.xml

              Bitte um Hilfe, wieso die Änderungen im XML-File nicht übernommen werden!
              Danke.

              MFG
              Michael Eder

              Kommentar


                #8
                Zitat von diplomarbeit2011 Beitrag anzeigen
                Bitte um Hilfe, wieso die Änderungen im XML-File nicht übernommen werden!
                Ich habe deinen Code ausprobiert (nach Ergänzung von <?php ?>). Er lädt zwar das neue Objekt aber schreibt das File nicht.
                wenn ich 2 Files draus mache, eines zum Erzeugen des neues Objekts, und eines zum Schreiben des XML Files, dann funktioniert es. Ich vermute, dass der Socket für einen zweiten Schreibbefehl nicht mehr zur Verfügung steht. Grosse Ahnung von PHP habe ich allerdings nicht.

                Gruss, Othmar
                EIB/KNX, VISU mit knxd + linknx + knxweb, Steuerbefehle via SMS und Email mit postfix + procmail

                Kommentar


                  #9
                  der user der linknx ausführt muss schreibrechte auf die config-datei haben, sonst kann er sie natürlich nicht überschreiben. versuch mal "chmod 777", dann siehste zumindest ob es daran liegt.

                  Kommentar


                    #10
                    Zitat von Tru Beitrag anzeigen
                    Ich habe deinen Code ausprobiert (nach Ergänzung von <?php ?>). Er lädt zwar das neue Objekt aber schreibt das File nicht.
                    wenn ich 2 Files draus mache, eines zum Erzeugen des neues Objekts, und eines zum Schreiben des XML Files, dann funktioniert es. Ich vermute, dass der Socket für einen zweiten Schreibbefehl nicht mehr zur Verfügung steht. Grosse Ahnung von PHP habe ich allerdings nicht.

                    Gruss, Othmar
                    Danke für Eure raschen Antworten.

                    Es scheint wirklich so, als müsse man das Speichern der Konfig in einen eigenen Socket machen. Wieso man diesen Umweg gehen muss ist mir zwar auch nicht klar, jedenfalls funktioniert die Lösung von "tru".
                    Danke nochmals.

                    MFG
                    Michael Eder

                    Kommentar


                      #11
                      Zitat von diplomarbeit2011 Beitrag anzeigen
                      Wieso man diesen Umweg gehen muss ist mir zwar auch nicht klar, jedenfalls funktioniert die Lösung von "tru".
                      So, habe mir deinen Code nochmals angeschaut und den Fehler gefunden: in der Auswertung der ersten Antwort steigst du mit "return 1" ganz aus, wenn die Antwort korrekt ist (desgleichen in der Auswertung der zweiten Antwort). Da kommst du natürlich nie zum zweiten Schreibbefehl. Du musst wohl auf Ungleichheit prüfen.
                      Desweitern wäre die positive Antwort auf den Save-Befehl '<admin status='success'/>'

                      Gruss, Othmar
                      EIB/KNX, VISU mit knxd + linknx + knxweb, Steuerbefehle via SMS und Email mit postfix + procmail

                      Kommentar


                        #12
                        Der Vollständigkeit halber nochmals der Code der nun funktioniert.

                        Code:
                        <?php
                        $address = "127.0.0.1";
                        $port = 1028;
                        
                        $fp = fsockopen($address, $port, $errno, $errstr, 30);
                        if (!$fp) {
                            echo "$errstr ($errno)<br />\n";
                        }
                        else
                        {
                                echo"SUCCESS";
                        $out=knxread($fp, "temp_val");
                        echo "Aktuelle Temperatur im Raum :  ";
                        echo $out;
                        #knxwrite($fp, "blau_on_off", "1");
                        
                          $in = "<write><config><objects><object id='blau_on_off' gad='1/1/0' type='1.001'>ganzneueLampe</object></objects></config>\n\4<admin><save/></admin>\n\4";
                        
                            fwrite($fp, $in);
                        
                            $ret = '';
                            $cnt = 0;
                            while ($cnt < 4 && $fp && !feof($fp)) {
                                $ret .= fgets($fp, 128);
                                $c = fgetc($fp);
                                if ($c == "\4") {
                                    if (ereg ("<write status='success'", $ret))
                                      return 1;
                                    break;
                                }
                                $ret .= $c;
                                $cnt++;
                            }
                        }
                        ?>
                        Wichtig ist das man nach jeden Befehl, die Zeichen "\n\4" hinzufügt, dann funktioniert alles einwandfrei mit dem Speichern der Konfig.

                        Nochmals Danke an Othmar,

                        MFG
                        Michael Eder

                        Kommentar

                        Lädt...
                        X