Ankündigung

Einklappen
Keine Ankündigung bisher.

[mmh] CommandServer

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

    [mmh] CommandServer

    Alle Fragen und Infos zum Thema CommandServer

    #2
    Hi,

    kann man dem <script><run=... command mitteilen das er die returncodes der im script ausgeführten commands optional mit zurückliefert?
    Beispiel ist ein script welches verschiedene itunes funktionen aufruft und unter anderem auch den player status abfragt. Aktuell bekomme ich nur RUN=SUCCESS zurück, ich möchte aber den player status auch noch im iViewer auswerten können.

    Was mir auch fehlt sind ein paar logik Bausteine wie:

    <if PLAYING="<itunes><getplayerstate><itunes>">
    <sys><returnvalue="Player läuft"></sys>
    <else>
    <sys><returnvalue="Player läuft nicht"></sys>
    </else>
    </if>

    Wie macht Ihr so etwas?

    VG Macrauder

    Kommentar


      #3
      Ja, die Logik Engine... *traum*... dann brauchten wir ja bald keinen HS oder ahnliches mehr.... ;-)

      ... eines Tages!! Aber vorerst müssen wir uns um andere Dinge kümmern. Wir sind letztendlich nur eine kleine Bude und arbeiten schon grenzlastig. Wir würden gern weitere Entwickler hinzunehmen, aber das kostet halt alles Geld...

      In der Tat führen wir aber "Gesprache" und würden bei erfolgreichen Abschluss auch notwendigen "Schub" bekommen, um eben "Projekte" wie Logik, Konfigurator, uvm. antriggern zu können. In erster Linie sind wir also dazu "verdammt" Anforderungen aus den jeweiligen Projekten mit höherer Prioritat anzufassen. Wenn wir könnten, wie wir wollten, oha... ;-)

      Nun aber zu Deinem Anliegen:

      Der EventServer kann Dir evtl. weiterhelfen. Wir senden ja jede Änderung des iTunes Status auf dem Broadcast Port 1038. Auf diesen kann man auch entsprechend "lauschen" und auswerten. Der iViewer stellt hierfür leider keinerlei Funktionen zur Verfügung. Kurzum, der iViewer ist und bleibt "dumm".

      Ich hatte zB die Anforderung zu erkennen, wenn iTunes über "Remote" angesprochen wird um eben automatisch die Audioanlage einzuschalten. Da wir nun nicht zwischen die Kommunikation von iTunes und "Remote" kommen, haben wir den EventServer entsprechend erweitert. Hier kann auf den BC Port gelauscht und es können Meldungen ausgewertet werden. Entsprechend können auch Aktionen ausgeführt werden !!!

      Beispiel:

      [CONFIG];;
      TRIGGERIP;192.168.50.55;
      TRIGGERPORT;1038;
      TRIGGERMODE;ASCII;

      [TRIGGERS];;
      <ITUNES>GETPLAYERSTATE=\*|;iTunesRemoteEvent.myh;O NCHANGE


      lauscht auf den BC Port und führt bei Änderung des PLAYERSTATE entsprechendes Script aus. Dies ist quasi gleichzusetzen mit der Bedingung "IF=GETPLAYERSTATE="

      Nun kommt der Trick...
      Wie Du ja mittlerweile weißt, wird der "Match" automatisch als Argument dem Scriptaufruf angehangen... Angenommen GETPLAYERSTATE andert sich auf "PLAYING"... dann würde in diesem Fall der Scriptaufruf wie folgt ausgeführt...

      <SCRIPT><RUN=iTunesRemoteEvent.myh><ARG=PLAYING> </SCRIPT>

      Nun betrachten wir mal den Inhalt des Scriptes iTunesRemoteEvent.myh:

      <SCRIPT><RUN=iTunesRemoteEvent_[ARG].myh></SCRIPT>

      Wie Du siehst hange ich das Argument einem erneuten Scriptaufruf an. Über das Argument baue ich quasi einen neuen Namen zusammen... um final das Script:

      <SCRIPT><RUN=iTunesRemoteEvent_PLAYING.myh></SCRIPT>

      aufzurufen, welches die Bedingung "GETPLAYERSTATE=PLAYING" entsprechen würde.

      Du kannst somit auf alle Playerstatis gezielt Aktionen ausführen.

      Vermutlich kann die Vorgehensweise auch vereinfacht werden, habe ich allerdings noch nicht getestet. Wenn Du folgendes in der EventServer Definition eintragst:

      [TRIGGERS];;
      <ITUNES>GETPLAYERSTATE=\*|;iTunesRemoteEvent_\#.my h;ONCHANGE

      könnte/sollte sich der Zwischenschritt über das iTunesRemoteEvent.myh Script entfallen...

      LG

      Kommentar


        #4
        Hi,

        ja das liebe geld und dann braucht man auch noch zeit und die richtige resourcen, überall das selbe problem.

        Danke für die Antwort, die Trigger Funktion hab ich mir auch mal in der Doku durchgelesen, die geht aber anscheint nur mit iTunes. Ich wollte mir für verschiedene Sourcen Steuerscripts erstellen, also auch TV und DVD, da wirds damit leider nix.

        Hab deswegen gerade etwas Applescript gehackt.
        Wenn Ihr in eurer AppleScript Command Function noch das Result zurückgeben würdet und eine Art ECHO Funktion erstellt, dann könnte man die Logik komplett über AppleScript erschlagen.

        tell application "MyHGUI" of machine "eppc://192.168....."
        set mmhResult to Command "<SYS><HELLO></SYS>"
        if mmhResult contains "gmbh" then
        Command "<SYS><ECHO=TRUE></SYS>"
        end if
        end tell


        Im iViewer würde ich dann auf TRUE matchen können.

        Was hälst du davon?
        Ich weis Ihr habt noch andere wichtigere Dinge in der Pipe, wäre aber ein nettes Feature!

        VG Macrauder

        Kommentar


          #5
          Hi,

          ich habe gerade feststellen müssen das der CommandServer anscheint Single Threaded läuft!

          Mir ist es aufgefallen als ich ein Korruptes Command an den Server geschickt habe und Ihn damit abgeschossen habe. Danach hab ich den Server restartet und einen Telnet auf den Port gemacht und Commands per Hand abgesetzt und festgestellt das man Parallel nicht mir dem ScriptingClient arbeiten kann.

          Das ganze schrenkt die Möglichkeiten meiner Meinung nach doch arg ein, da man so nur mit einen Client den Server steuern kann. Jetzt könnte man sagen das mehrere Clients auf die Sekunde genau zugreifen müssen aber richtig doof wird es wenn man von einem Script aus was im Server läuft auch wieder einen Connect macht der mmh commands absetzen soll. (sieh mein AS Script)

          Generell sollten Server Prozesse möglichst immer Multithreaded ausgelegt werden so das ein Prozess nicht den ganzen Server platt machen kann.
          Sprich jeder Request wird in einen Thread verpackt und dann verarbeitet.
          Das macht den Server einfach robuster gegenüber Fehlern und auch flexiebler einsetzbar.

          Gibt es technische Gründe dafür oder ist es eher aus der Historie heraus entstandenen?

          VG macruader

          Kommentar


            #6
            Mit Sicherheit läuft der/die CServer mutlithreaded !!!!

            kann es sein Das Du Dich, mit was auch immer, per TCP verbindest ???

            Ich habe es noch nicht geschafft, den CServer "abzuschießen"... wäre evtl. mal wichtig zu erfahren, was genau Du da machst ??

            LG

            Kommentar


              #7
              Hab mich per TCP verbunden, am einfachsten du machst mal einen

              telnet IP PORT

              und läst den stehen.
              Dann nimmst du den Scripting Client und versuchst dich mit dem zu verbinden. Das geht nicht da der Port noch von dem Telnet geblockt ist.

              Kommentar


                #8
                ja, aber das ist doch auch logisch !!!

                Bzw. bedienen wir auf dieser Ebene per TCP nur eine Verbindung. Kommen so auch eigentlich super zurecht. Der Mac ist hinsichtlich der Protokoll Schnittstelle eben "nur" Client...

                Mich würde interessieren, was Du denn da genau vor hast ??? Evtl. können wir Dir neben UDP ja einen anderen Weg aufzeigen.

                LG

                Kommentar


                  #9
                  ja, aber das ist doch auch logisch !!!
                  ... ist es meist nur für den der es programmiert hat!!!!
                  "normal" wird ein server der auf einen port lauscht gethreaded ausgelegt... da brauchen wir aber nicht aus diksutieren!


                  Was hab ich vor!
                  Ich möchte aus einem command aufruf heraus ein AS aufrufen welches dann wieder weitere commands called um die iviewer joins zu verändern.

                  Verhält der iViewer "Server" sich eigentlich auch wie der CommandServer? Sprich kann da nur ein iPhone mit ihm parallel reden?

                  Mich würde euer Verständniss was Client oder Server ist mal Interessieren, ich denke mit den Begriffen wird etwas inflationär umgegangen!
                  Für mich ist mmh ein Server den ich sage was er machen soll... der client ist für mich das programm was ihm sagt was er machen soll, also iphone, gui, scripts usw. sind wir da dakor?

                  Kommentar


                    #10
                    ... wir diskutieren nicht, wir handeln !!! Bauen das also entsprechend um.

                    Warum Du nun aus AS iViewer Joins verändern möchtest, ist mir noch nicht ganz klar. Theoretisch geht das auch, da eben der iViewer Server "gethreaded"
                    ausgelegt ist. Was auch die Frage beantwortet, ob Du Dich mit mehr als einem Phone/Touch verbinden kannst....

                    Das Problem: Wenn Du das mit AS so machen willst, kannst Du das zZ nur über UDP. Da der iViewer Client sich nur mit einem Server verbinden läßt, hast Du auch keine Chance irgendwie anders dazwischen zu kommen....

                    Verständnis Frage: :-) ja, da habe ich mich wohl ein wenig verhaspelt ....

                    LG

                    Kommentar


                      #11
                      Hi Mike,

                      kannst du kurz erklären was du mit

                      ...Bauen das also entsprechend um.
                      meinst?

                      AppleScript unterstützt leider kein UDP da es nur zum Scripten da ist und nicht auf low level Functions zugreifen kann, leider! Wird ein TCP Support kommen?

                      Bezüglich Join Änderungen:
                      Meiner Meinung nach ist das Join ändern über mmh eine Super Funktion, da du so z.B. bei einem Screen Change bewust die Felder neu befüllen kannst und dir nicht die Finger Wund greppen must mit den Values und den Positionen, auch kann ich so externe Services nutzen. z.b. per WebService oder KO Abfragen Felder befüllen.
                      Gerade wenn demnächst beim iViewer auch Listen hinzukommen wird das ein must have sein.

                      VG macrauder

                      Kommentar


                        #12
                        Ich meine damit, dass die nächste Version entsprechend geändert wird.

                        Auszug aus dem changelog:

                        Version 1.0.65:
                        - TCP- und UDP-Kommandoparser multithreaded
                        - Commandserver parallelisiert (=performanter), bitte wenn möglich mal mit mehreren Geräten gleichzeitig ausprobieren
                        - Broadcast-Engine optimiert
                        - iViewer-Absturz bei iTunes-Betrieb behoben

                        LG

                        Kommentar


                          #13
                          Hallo allerseits,

                          habe ein Problem mit der Ansteuerung eines Sanyo PLV-Z5 Beamers.

                          Der Beamer besitzt eine RS232 Schnittstelle, wenn ich die Kommandos
                          über Hyper-Terminal sende führt er diese brav aus.

                          Nun versuche ich über mmh CommadServer diese Kommandos
                          auszuführen, laut SkriptClient-Monitor macht mmh das auch brav.
                          aber es tut NIX !

                          Der Beamer ist über ein Moxa NPort5110 Lan/Serial Adapter mit dem
                          Netzwerk verbunden.

                          Ich habe schon mit den Einstellungen des Nport experimentiert „aber Nix da“.
                          In der Bedienungsanleitung des NPort steht, das die TX/RX LED das
                          transmitting mit grün signalisiert diese bleibt aber „AUS“
                          (Ready und Link LED sind grün) das lässt vermuten
                          das die Konfiguration des NPort nicht korrekt ist.

                          Kennt sich jemand mit Nport 5110 und dessen Konfiguration in Verbindung mit
                          mmh aus?

                          Meine Konfiguration Nport:
                          Network Settings : Außer IP alles Standard

                          Serial Settings : Baud rate 19200 (laut Sanjo)
                          Data bits 8
                          Stop bits 1
                          Parity None
                          Flow control None
                          FIFO Enable

                          Operating Settings:Real COM Mode (alles andere Standard)
                          Gruß

                          Olli

                          Kommentar


                            #14
                            Mapping funktioniert nicht

                            Hallo,

                            kriege über den Commandserver "Server" folgenden Inhalt nach mmh:

                            11:10:42.869 - network: udp message from xxx.xxx.xxx.xxx, size 23 bytes
                            11:10:42.869 - parser: parsing sequence: <SERVER><JAHR></SERVER>
                            11:10:42.871 - parser: command: SERVER - JAHR
                            11:10:42.871 - parser: reply sequence: <SERVER>JAHR=|OK</SERVER>
                            11:10:42.871 - commandserver: TCP send: xxx.xxx.xxx.xxx:9000 data: 2006\0x0A
                            11:10:42.877 - commandserver: TCP receive: xxx.xxx.xxx.xxx:9000 data: |16 Blocks
                            11:10:42.878 - commandserver: translated reply sequence: <SERVER>TITEL|OK</SERVER>
                            11:10:42.889 - network: message parsed
                            11:10:42.906 - commandserver: TCP receive: xxx.xxx.xxx.xxx:9000 data: |300|An Inconvenient Truth|Babel|Blood Diamond|Das Leben der Anderen|Deja Vu|Dreamgirls|Pirates of the Caribbean: Dead Man's Chest|Hollywoodland|The Departed|The Good Shepherd|The Prestige|Volver|Cars|The Da Vinci Code|Penelope|Rescue Dawn|Notebook|Trixie
                            11:10:42.908 - commandserver: translated reply sequence: <SERVER>TITEL|OK</SERVER>

                            Manchmal kommt die Rückantwort in einer Sequenz dann so wie hier in 2 Sequenzen.

                            Der Commandserver:

                            [CONFIG];
                            ACTIVE;YES
                            SERVERIP;xxx.xxx.xxx.xxx
                            SERVERPORT;9000
                            SERVERMODE;ASCII
                            SERVERTIMEOUT;NONE
                            SERVERPROTOCOL;TCP
                            MATCHING=NORMAL
                            CMDSUFFIX;\0x0A


                            [COMMANDS];
                            SEND;\#;
                            JAHR;2006


                            [MAPPINGS];
                            \?\*;TITEL

                            Was mach ich falsch?

                            Gewünschtes Ergebnis:

                            <SERVER>TITEL=16 Blocks|300|An Inconvenient Truth|Babel|Blood Diamond|Das Leben der Anderen|Deja Vu|Dreamgirls|Pirates of the Caribbean: Dead Man's Chest|Hollywoodland|The Departed|The Good Shepherd|The Prestige|Volver|Cars|The Da Vinci Code|Penelope|Rescue Dawn|Notebook|Trixie|OK</SERVER>

                            Klaus

                            Kommentar


                              #15
                              Hallo Klaus,

                              bzgl. der Übertragung machst Du garnichts falsch, die Gegenstelle sendet die Antwort "zerhackt".
                              Lösung 1: Wenn möglich, auf UDP umstellen.
                              Lösung 2: Wenn möglich, das TCP-Sendeverhalten der Gegenstelle umstellen, sodaß der komplette String auf einmal gesendet wird.
                              Gruß

                              Sascha

                              Kommentar

                              Lädt...
                              X