Ankündigung

Einklappen
Keine Ankündigung bisher.

[mmh] Commandserver Sqlite Datenbank

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

    [mmh] Commandserver Sqlite Datenbank

    Hallo,

    bei Mac OS X kann man per Terminal mit sqlite3 direkt sqlite-Datenbanken abfragen, anlegen etc.

    Wie muss denn ein commandserver aufgebaut sein um direkt eine sqlite db abzufragen.

    [CONFIG];
    ACTIVE;YES
    SERVERIP;xxx.xxx.xxx.xxx
    SERVERPORT;22
    MATCHING=FULL

    [COMMANDS];
    PATH;cd(\#)
    SQLITE;sqlite3;
    ATTACHDB;attach database 'MyVideos34.db' as xbmcdb;
    SELECT;select(\#)

    Dachte ich verbinde mich per ssh (habe per ssh-keygen 2 Schlüsselpaare angelegt um mich ohne Passwort anmelden zu können).

    Per Terminal geht es so:

    Terminal öffnen
    cd zum Pfad in dem die db liegt
    "sqlite3" eingeben
    Die gewünschte db verfügbar machen mit "attach database 'MyVideos34.db' as xbmcdb;" zum Beispiel.

    Jetzt kann man die Datenbank abfragen.
    Alle Filmtitel in der xbmcdb per "select c00 from movie;"

    Per Standard werden die Datenfelder schon per Pipe getrennt ausgegeben.
    Damit dürfte das Mapping der Rückmeldung recht einfach sein.

    Wie muss denn die config des commandservers aufgebaut sein damit eine Kommunikation möglich ist? Kann der commandserver direkt eine Verbindung mit der gewünschten Datenbank herstellen?

    [CONFIG];
    ACTIVE;YES
    SERVERIP;xxx.xxx.xxx.xxx
    SERVERPORT;22
    USER;kb
    PATH;
    DB;
    MATCHING=FULL

    [COMMANDS];
    SELECT;select(\#)


    Klaus

    #2
    Der Commandserver unterstützt kein ssh. Wenn Du jedoch einen telnetd installierst, sollte das oben Angedachte möglich sein.
    Gruß

    Sascha

    Kommentar


      #3
      telnetd enabled

      Um sich einzuloggen wird Benutzer und Kennwort abgefragt.

      Was wenn sich die Datenbank auf dem gleichen System wie mmh befindet.
      Habe drei xbmc Boxen im Einsatz.

      Wie muss die config des commandservers für telnet mit Authentifizierung aufgebaut sein?

      Meine bisherigen Versuche waren nicht erfolgreich...

      Klaus

      Kommentar


        #4
        Wie sieht denn die .csv des Commandservers aus?
        Gruß

        Sascha

        Kommentar


          #5
          Zitat von sunnyhd Beitrag anzeigen
          Habe drei xbmc Boxen im Einsatz.
          Auf welcher Hardware laufen diese?

          Kommentar


            #6
            Hallo,

            xbmc läuft auf 3 Mac Minis. Die Datenbank liegt auf dem jeweiligen Rechner
            unter /Users/xx/Library/'Application Support'/XBMC/userdata/Database.


            [CONFIG];
            SERVERIP;XXX.XXX.XXX.XXX
            SERVERPORT;23
            SERVERMODE;ASCII
            SERVERTIMEOUT;0
            SERVERPROTOCOL;TCP
            USERNAME;xxxxx
            PASSWORD;xxxxxxx
            MATCHING=FULL

            [COMMANDS];
            PATH;cd /Users/xx/Library/'Application Support'/XBMC/userdata/Database
            SQLITE;sqlite3;
            ATTACHDB;attach database 'MyVideos34.db' as xbmcdb;
            BIBLIOTHEK;select c00 from movie;

            [MAPPINGS]

            __________________________________________________ ____________
            Log:

            09:32:38.458 - network: udp message from xxx.xxx.xxx.xxx, size 53 bytes
            09:32:38.459 - parser: parsing sequence: <SQLITE><PATH><SQLITE><ATTACHDB><BIBLIOTHEK></SQLITE>
            09:32:38.460 - parser: command: SQLITE - PATH
            09:32:38.460 - parser: command: SQLITE - SQLITE
            09:32:38.461 - parser: command: SQLITE - ATTACHDB
            09:32:38.461 - parser: command: SQLITE - BIBLIOTHEK
            09:32:38.462 - parser: reply sequence: <SQLITE>PATH=|OK|SQLITE=|OK|ATTACHDB=|OK|BIBLIOTHE K=|OK</SQLITE>
            09:32:38.465 - commandserver: TCP send: xxx.xxx.xxx.xxx:23 data: cd /Users/xx/Library/'Application Support'/XBMC/userdata/Databasesqlite3attach database 'MyVideos34.db' as xbmcdbselect c00 from movie
            09:32:38.484 - network: message parsed

            Funktioniert so wohl nicht da der der komplette string gesendet wird. Habs versucht mit <SYS>ENKEY</SYS> zwischen den Befehlen. Verstehe nicht wie ich die Verbindung so herstellen kann das der richtige Pfad gewählt, sqlite 3 und Datenbank aktiviert und ich dann nur noch den select command senden muss.

            Klaus

            Kommentar


              #7
              Zunächst: SERVERTIMEOUT muß auf "NONE" stehen, sonst bekommst Du nie eine Antwort.

              Zitat von sunnyhd Beitrag anzeigen
              USERNAME;xxxxx
              PASSWORD;xxxxxxx
              bringt Dich bei TCP nicht weiter, denn mmh kann ja nicht wissen, daß Du versuchst, eine Telnet-Verbindung aufzubauen. Du mußt daher den Telnet-Login nachbilden, z.B. so:
              Code:
              [COMMANDS];
              LOGIN;{Login};
              SEND;\#;
              EXIT;exit;1000
              
              [MAPPINGS];
              assword:;;<SQLITE><SEND={Password}></SQLITE>;
              {Login} und {Password} natürlich ersetzen.

              Ausserdem wäre ein:
              Code:
              CMDSUFFIX;\0x0D
              sinnvoll, um den CR nach jedem Kommando automatisch senden zu lassen.

              Wenn Du dann ein <SQLITE><LOGIN></SQLITE> sendest, solltest Du Dich auf der Shell befinden und kannst Deine Datenbankbefehle absetzen. Beachte, daß ggfs. etwas Zeit benötigt wird, um den Login abzuarbeiten. Du solltest daher ein DELAY einbauen bevor Du die Datenbank-Befehle absetzt:
              <SQLITE><LOGIN></SQLITE><DELAY=1><SQLITE><.........></SQLITE>.......<SQLITE><EXIT></SQLITE>

              EXIT beendet die TCP-Verbindung protokollmäßig und schließt den Socket nach einer Sekunde.
              Gruß

              Sascha

              Kommentar


                #8
                Habe die SQLITE.csv entsprechend angepasst.
                Komme aber noch immer nicht auf die Kommandozeile.

                [CONFIG];
                SERVERIP;xxx.xxx.xxx.xxx
                SERVERPORT;23
                SERVERMODE;ASCII
                SERVERTIMEOUT;NONE
                SERVERPROTOCOL;TCP
                CMDSUFFIX;\0x0D
                MATCHING=FULL

                [COMMANDS];
                LOGIN;xxx;
                SEND;\#;
                EXIT;exit;1000

                [MAPPINGS];
                Password:;;<SQLITE><SEND=xxxxxxx></SQLITE>;


                Log:

                Wenn ich den Login sende sollte ich des Versenden des Passworts im Log sehen oder?

                14:19:32.222 - network: udp message from xxx.xxx.xxx.xxx, size 36 bytes
                14:19:32.223 - parser: parsing sequence: <SQLITE><LOGIN><DELAY=2.00></SQLITE>
                14:19:32.225 - parser: command: SQLITE - LOGIN
                14:19:32.225 - parser: delaying execution for 2.000 seconds
                14:19:34.225 - parser: reply sequence: <SQLITE>LOGIN=|OK</SQLITE>
                14:19:34.232 - commandserver: TCP send: xxx.xxx.xxx.xxx:23 data: xxx\0x0D
                14:19:34.250 - network: message parsed

                Klaus

                Kommentar


                  #9
                  Zitat von sunnyhd Beitrag anzeigen
                  Wenn ich den Login sende sollte ich des Versenden des Passworts im Log sehen oder?

                  14:19:32.222 - network: udp message from xxx.xxx.xxx.xxx, size 36 bytes
                  14:19:32.223 - parser: parsing sequence: <SQLITE><LOGIN><DELAY=2.00></SQLITE>
                  14:19:32.225 - parser: command: SQLITE - LOGIN
                  14:19:32.225 - parser: delaying execution for 2.000 seconds
                  14:19:34.225 - parser: reply sequence: <SQLITE>LOGIN=|OK</SQLITE>
                  14:19:34.232 - commandserver: TCP send: xxx.xxx.xxx.xxx:23 data: xxx\0x0D
                  14:19:34.250 - network: message parsed
                  Richtig, aber erst später. In Deinem Log taucht bisher nur das Versenden des Logins auf, darauf antwortet der telnetd normalerweise mit "Password:", worauf mmh dann das Passwort sendet. Das DELAY solltest Du hinter das </SQLITE> setzen, da der Commandserver Pakete grundsätzlich erst dann absendet, wenn die Klasse geschlossen wird.
                  Gruß

                  Sascha

                  Kommentar


                    #10
                    16:40:49.209 - network: udp message from xxx.xxx.xxx.xxx, size 36 bytes
                    16:40:49.214 - parser: parsing sequence: <SQLITE><LOGIN></SQLITE><DELAY=2.00>
                    16:40:49.220 - parser: command: SQLITE - LOGIN
                    16:40:49.223 - parser: delaying execution for 2.000 seconds
                    16:40:49.224 - commandserver: TCP send: xxx.xxx.xxx.xxx:23 data: xxx\0x0D
                    16:40:49.271 - commandserver: TCP receive: xxx.xxx.xxx.xxx:23 data: ÿý\0x18ÿý ÿý#ÿý'ÿý$
                    16:40:49.275 - commandserver: translated reply sequence: <SQLITE>ÿý\0x18ÿý ÿý#ÿý'ÿý$|OK</SQLITE>
                    16:40:51.223 - parser: reply sequence: <SQLITE>LOGIN=|OK</SQLITE>
                    16:40:51.247 - network: message parsed

                    Kannst Du das selbst bei Dir mal testen?

                    Danke

                    Klaus

                    Kommentar


                      #11
                      Hi Klaus,

                      ich habe getestet:

                      Das Problem ist augenscheinlich, daß Dein telnetd versucht, beim Login noch diverse Optionen auszutauschen. Wenn man einen "dummen" telnetd verwendet, klappt es wie von mir oben beschrieben. Oder hast Du die Möglichkeit, das Verhalten Deines telnetd zu ändern?
                      Gruß

                      Sascha

                      Kommentar


                        #12
                        Hallo Sascha,

                        Habe telentd in Mac OS X lediglich aktiviert.
                        Unter System/Library/LauchDaemons/telnet.plist

                        Hast Du eine Idee was ich hier ändern müsste damit es funktioniert oder gibt es einen anderen "dummen" telnetd den ich alternativ installieren kann? Was nutzt du denn für einen telnet Dienst unter Mac OS X?

                        <?xml version="1.0" encoding="UTF-8"?>
                        <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
                        <plist version="1.0">
                        <dict>
                        <key>Enabled</key>
                        <true/>
                        <key>Label</key>
                        <string>com.apple.telnetd</string>
                        <key>ProgramArguments</key>
                        <array>
                        <string>/usr/libexec/telnetd</string>
                        </array>
                        <key>SessionCreate</key>
                        <true/>
                        <key>Sockets</key>
                        <dict>
                        <key>Listeners</key>
                        <dict>
                        <key>Bonjour</key>
                        <true/>
                        <key>SockServiceName</key>
                        <string>telnet</string>
                        </dict>
                        </dict>
                        <key>inetdCompatibility</key>
                        <dict>
                        <key>Wait</key>
                        <false/>
                        </dict>
                        </dict>
                        </plist>


                        Klaus

                        Kommentar


                          #13
                          Hallo Sascha,

                          ich hab jetzt ein bißchen mit den Einstellungen des telnetd rumgespielt.
                          Ergebnis ist leider unverändert.

                          Ziel ist die Datenbank von XBMC direkt abzufragen damit man Zugriff auf die Daten hat ohne das XBMC laufen muss. Die Datenbank liegt auf dem gleichen Rechner auf dem mmh installiert ist.

                          Vielleicht hast Du noch eine Idee wie man das am besten umsetzt?
                          Sonst würde ich mit der HTTPAPI von XBMC mein Glück versuchen.

                          Klaus

                          Kommentar


                            #14
                            Hallo Klaus,

                            bei der HTTP-Api des XBMC hast Du das Problem, daß im HTTP-Body keine Assoziation zum Content-Typ vorhanden ist. Deshalb habe ich das Parsen des Bodys zurückgestellt, als ich den Commandserver zusammengestrickt haben.

                            Das Telnetd-Beispiel habe ich erfolgreich mit einem SAT-Receiver ausprobiert, hier ist allerdings der telnetd viel "schlanker". Mal sehen wann ich Zeit finde und z.B. eine busybox für den Mac kompiliere...
                            Gruß

                            Sascha

                            Kommentar


                              #15
                              Hallo Sascha,

                              die HTTP API von XBMC wird nicht weiterentwickelt und soll wohl über kurz oder lang bei den kommenden Versionen durch Link ersetzt werden.
                              Macht vermutlich keinen Sinn noch über die HTTP API nachzudenken.

                              Klaus

                              Kommentar

                              Lädt...
                              X