Onkyo Rückmeldung PicoC Programm

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • benni.st
    Smart Home'r
    • 06.01.2016
    • 45

    #1

    Onkyo Rückmeldung PicoC Programm

    Hallo zusammen,

    ich habe einen Onkyo AV Receiver und wollte in meiner App den Status des Geräts sehen.
    Ist er an oder aus, welche Lautstärke und welche Quelle...

    Dazu habe ich ein PicoC Programm geschrieben welches bei mir schon seit einem halben Jahr läuft.
    Danke an Jan W. der mir damals die entscheidenden Tipps gab.

    Folgende Werte gibt das Programm zurück:
    • Zone 1 Power
    • Zone 1 Quelle
    • Zone 1 Lautstärke
    • Zone 1 Mute
    • Zone 2 Power
    • Zone 2 Quelle
    • Zone 2 Lautstärke
    • Zone 2 Mute

    Ihr müsst im Programm und im virtuellen Ausgang die IP eures Onkyo einstellen.
    Der Haken bei "Verbindung nach senden schließen" sollte deaktiviert sein, das kommt dem Programm sonst in die Quere.

    Kann man alles bestimmt besser machen und für Feedback bin ich gerne zu haben.
    Wer es erweitern will ist herzlich eingeladen.

    Viel Spaß damit.

    Grüße
    benni.st
    Angehängte Dateien
  • Gast

    #2
    Danke werde ich ausprobieren sobald ich umgezogen bin.

    Kommentar

    • Gast

      #3
      Hallo "benni.st"
      Sag hast du eine Ahnung wie ich das hinbekommen könnte, dass ich sehe welche Favoriten(Preset 01-40) gerade aktiv sind?
      Weiter wollte ich fragen was die Funktion Pollen macht?
      Ich hab meine Onkyo NR646 immer über die Loxone ansteuern können und seit neuen bekomm ich keine Verbindung mehr zusammen,
      hattest du auch schon derartige Probleme?

      Kommentar


      • benni.st
        benni.st kommentierte
        Kommentar bearbeiten
        Ich glaube das Setzen von Presets ist in der Loxconfig schon drin, du musst einen TCP Befehl davon ändern, statt der Zahl 1-40 nur QSTN anhängen und das Script um eine if Abfrage erweitern "PRS". Wenn du den QSTN Befehl sendest sollte das Script den aktuellen Preset ausspucken.
        Das Pollen macht nix anderes als QSTN (Question) Befehle zu schicken um die Antworten zu erhalten. Z.B. Nach Neustart.
        Die Netzwerkschnittstelle hängt sich gerne mal auf, Strom weg hilft.
    • Gast

      #4
      Hab das mal ins Programm eingebaut, kannst du auf den Bildern schauen ob ich das richtig gemacht habe, danke!

      Kommentar

      • benni.st
        Smart Home'r
        • 06.01.2016
        • 45

        #5
        Ich glaube beim TCP Befehl musst du die 01 wegmachen und Setoutput sollte 9 sein also der 9. Analoge Ausgang des Programms. Sonst passt das.

        Kommentar

        • Gast

          #6
          Wie kann ich das Preset jetzt bei der Visu in Status Main einbauen?

          Kommentar

          • benni.st
            Smart Home'r
            • 06.01.2016
            • 45

            #7
            Hänge einfach einen Statusbaustein an den analogen Ausgang für PRS. Deine Sendernamen trägst du als Text ein und vergleichst z. B. den Eingang 1 mit dem zugehörigen Preset.

            Wenn AI 1 = 1 dann "Sendername" usw.

            Kommentar

            • Gast

              #8
              So hab jetzt alles in mein Programm eingebaut, IP angepasst, Ein- und Ausgänge angepasst nur läuft leider nix!?
              Ich hab eine Onkyo TX-NR646, funktioniert das Programm mit der Anlage überhaupt?

              Kommentar

              • okenny
                LoxBus Spammer
                • 09.08.2016
                • 306

                #9
                cool.....ich mach das mit FHEM, aber gute Alternative, danke

                Kommentar

                • benni.st
                  Smart Home'r
                  • 06.01.2016
                  • 45

                  #10
                  Was geht denn nicht? Funktioniert die Original Onkyo Remote App? Wenn die geht, dann geht auch das Programm.

                  Kommentar

                  • Gast

                    #11
                    Die Onkyo Remote über das Handy und die Fernbedienung funktionieren, Zugriff per Loxone geht nicht!

                    Kommentar

                    • benni.st
                      Smart Home'r
                      • 06.01.2016
                      • 45

                      #12
                      Poste mal deine Parameter des virtuellen Ausgangs und die IP Einstellungen vom PicoC Skript. Da stimmt was nicht.
                      Ist die IP richtig, Port richtig? Irgendwelche Netzwerk Probleme oder Router /Firewall Konfigurationen falsch?
                      Kannst du den Onkyo vom Miniserver erreichen (Ping Baustein)?

                      Kommentar

                      • Gast

                        #13
                        IP-Adressen sollten richtig sein, hier der Programmcode mit der Erweiterung für die Presets:

                        #define BUFF_SIZE 1
                        #define ARRAY_SIZE 2000

                        STREAM* pTcpStream = stream_create("/dev/tcp/192.168.1.15/60128",0,0); //IP-Adresse anpassen
                        char szBuffer[ARRAY_SIZE];
                        int nCnt, decNumber, decNumber1, decNumber2;
                        char* temp;
                        char RcvString[ARRAY_SIZE];
                        char LeerString[ARRAY_SIZE];
                        int nBytesReceived = 0;
                        char String;


                        int Decimal() // Funktion Hex in Ascii in Dezimal
                        {

                        if ((int)temp[0] >= 48 && (int)temp[0] <= 57) { // Wert ist zwischen 0-9
                        decNumber1 = (int)temp[0] - 48;
                        }
                        else if ((int)temp[0] >= 65 && (int)temp[0] <= 70) { // Wert ist zwischen A-F
                        decNumber1 = (int)temp[0] - 55;
                        }
                        if ((int)temp[1] >= 48 && (int)temp[1] <= 57) { // Wert ist zwischen 0-9
                        decNumber2 = (int)temp[1] - 48;
                        }
                        else if ((int)temp[1] >= 65 && (int)temp[1] <= 70) { // Wert ist zwischen A-F
                        decNumber2 = (int)temp[1] - 55;
                        }

                        decNumber = (decNumber1 * 16) + decNumber2; // Hex in Dezimal umrechnen
                        return(decNumber);
                        }

                        // Hauptprogramm
                        while(1)
                        {
                        nCnt = stream_read(pTcpStream,szBuffer,BUFF_SIZE,150);
                        nBytesReceived += nCnt;
                        if (nCnt >0 && getinput(0) == 1) { // Wenn etwas Empfangen wird und Programm freigegeben
                        strcat(RcvString, szBuffer);
                        setoutput(0,nBytesReceived); // Anzeige empfangener Bytes Ausgang 1

                        if ((int)szBuffer[0] == 13) { // nach Endzeichen <CR> suchen
                        temp = strstrskip(RcvString,"!1"); // alles bis "!1" abschneiden
                        setoutputtext(0,temp); // Anzeige empfangener String Textausgang 1
                        if (strfind(temp,"MVL",0) >= 0){ // Main Volume
                        temp = strstrskip(temp,"MVL"); // alles bis MVL abschneiden
                        Decimal();
                        setoutput(1, decNumber);
                        }
                        else if (strfind(temp,"AMT",0) >= 0){ // Main Mute
                        temp = strstrskip(temp,"AMT");
                        Decimal();
                        setoutput(2, decNumber);
                        }
                        else if (strfind(temp,"PWR",0) >= 0){ // Main Power
                        temp = strstrskip(temp,"PWR");
                        Decimal();
                        setoutput(3, decNumber);
                        }
                        else if (strfind(temp,"SLI",0) >= 0){ // Main Source
                        temp = strstrskip(temp,"SLI");
                        Decimal();
                        setoutput(4, decNumber);
                        }
                        else if (strfind(temp,"ZVL",0) >= 0){ // Zone 2 Volume
                        temp = strstrskip(temp,"ZVL");
                        Decimal();
                        setoutput(5, decNumber);
                        }
                        else if (strfind(temp,"ZMT",0) >= 0){ // Zone 2 Mute
                        temp = strstrskip(temp,"ZMT");
                        Decimal();
                        setoutput(6, decNumber);
                        }
                        else if (strfind(temp,"ZPW",0) >= 0){ // Zone 2 Power
                        temp = strstrskip(temp,"ZPW");
                        Decimal();
                        setoutput(7, decNumber);
                        }
                        else if (strfind(temp,"SLZ",0) >= 0){ // Zone 2 Source
                        temp = strstrskip(temp,"SLZ");
                        Decimal();
                        setoutput(8, decNumber);
                        }
                        else if (strfind(temp,"NPR",0) >= 0){ //Preset Favoriten
                        temp = strstrskip(temp,"NPR");
                        Decimal();
                        setoutput(9, decNumber);
                        }

                        RcvString = LeerString; //Strings leeren
                        szBuffer = LeerString;

                        }
                        }
                        else {
                        nBytesReceived = 0;
                        sleep(100);
                        }
                        }

                        Kommentar

                        • Gast

                          #14
                          Mit dem Ping Baustein bin ich online! Ich versteh das nicht warum ich keine Verbindung mehr über die virtuellen Aus/ Eingänge zur Onkyo über die Loxone aufbauen kann.
                          Portweiterleitung werd ich ja intern nicht brauchen oder?

                          Kommentar

                          • fifman
                            Dumb Home'r
                            • 07.10.2015
                            • 25

                            #15
                            Hallo Heute,

                            ich habe das Problem seit dem Update auf die V9

                            STATUS des Denon AVR 1912 auslesen.

                            IP ist statisch : 192.168.0.12

                            Hat jemand eine Idee ???

                            Hilfe !!!!


                            // Auslesen des Status eines Denon AVR3311
                            // (c) 2014 by Dietmar Wimmer
                            //v1.01
                            //IP Adresse des Denon in Zeile 33,113 und 192 eintragen

                            char Z1Power[10];
                            char Z1InputFuncSelect[10];
                            char Z1MasterVolume[10];
                            char Z1MasterVolume1[10];
                            char Z1Mute[10];

                            char Z2Power[10];
                            char Z2InputFuncSelect[10];
                            char Z2MasterVolume[10];
                            char Z2MasterVolume1[10];
                            char Z2Mute[10];

                            char Z3Power[10];
                            char Z3InputFuncSelect[10];
                            char Z3MasterVolume[10];
                            char Z3MasterVolume1[10];
                            char Z3Mute[10];

                            char* p;

                            while(TRUE)
                            {
                            {
                            if (getinput(0) == 1)

                            //ZONE 1

                            char* pZ1 = httpget("192.168.0.12","/goform/formMainZone_MainZoneXmlStatusLite.xml"); // Hier die IP-Adresse des Denon eintragen
                            if (pZ1 != NULL) {


                            //Power
                            p = strstrskip(pZ1,"<Power><value>"); //Name des XML Attribut- Nächster Wert wird ausgegeben
                            strncpy(Z1Power,p,strfind(p,"<",0)); //Ende des Wert der ausgegeben werden soll

                            if (strcmp("ON", Z1Power) == 0) // Vergleiche ON mit Wert von Z1Power
                            {setoutput(0,1);} //Setze Ausgang 0 auf 1
                            if (strcmp("OFF", Z1Power) == 0)
                            {setoutput(0,0);}

                            //printf("%s",Z1Power); //Ergebnis im Log ausgeben


                            //InputFuncSelect
                            p = strstrskip(pZ1,"<InputFuncSelect><value>");
                            strncpy(Z1InputFuncSelect,p,strfind(p,"<",0));

                            if (strcmp("CD", Z1InputFuncSelect) == 0)
                            {setoutput(1,1);}
                            if (strcmp("DVD", Z1InputFuncSelect) == 0)
                            {setoutput(1,2);}
                            if (strcmp("BD", Z1InputFuncSelect) == 0)
                            {setoutput(1,3);}
                            if (strcmp("TV", Z1InputFuncSelect) == 0)
                            {setoutput(1,4);}
                            if (strcmp("SAT/CBL", Z1InputFuncSelect) == 0)
                            {setoutput(1,5);}
                            if (strcmp("GAME", Z1InputFuncSelect) == 0)
                            {setoutput(1,6);}
                            if (strcmp("GAME2", Z1InputFuncSelect) == 0)
                            {setoutput(1,7);}
                            if (strcmp("Media Server", Z1InputFuncSelect) == 0)
                            {setoutput(1,8);}
                            if (strcmp("V.AUX", Z1InputFuncSelect) == 0)
                            {setoutput(1,9);}
                            if (strcmp("TUNER", Z1InputFuncSelect) == 0)
                            {setoutput(1,10);}
                            if (strcmp("NET/USB", Z1InputFuncSelect) == 0)
                            {setoutput(1,11);}
                            if (strcmp("Favorites", Z1InputFuncSelect) == 0)
                            {setoutput(1,12);}
                            if (strcmp("Internet Radio", Z1InputFuncSelect) == 0)
                            {setoutput(1,13);}

                            setoutputtext(0,Z1InputFuncSelect);
                            //printf("%s",Z1InputFuncSelect);


                            //MasterVolume
                            p = strstrskip(pZ1,"<MasterVolume><value>");
                            strncpy(Z1MasterVolume,p,strfind(p,"<",0));

                            if (strcmp("--", Z1MasterVolume) == 0)
                            {setoutput(2,batof("0"));}
                            else {setoutput(2,batof(Z1MasterVolume)+80);}

                            //printf("%s",Z1MasterVolume);


                            //Mute
                            p = strstrskip(pZ1,"<Mute><value>");
                            strncpy(Z1Mute,p,strfind(p,"<",0));

                            if (strcmp("on", Z1Mute) == 0)
                            {setoutput(3,1);}
                            if (strcmp("off", Z1Mute) == 0)
                            {setoutput(3,0);}

                            //printf("%s",Z1Mute);

                            }
                            free(pZ1);





                            //ZONE 2

                            char* pZ2 = httpget("192.168.0.12","/goform/formZone2_Zone2XmlStatusLite.xml"); // IP-Adresse des Denon, AVR Pfad zur XML Datei Main Zone
                            if (pZ2 != NULL) {


                            //Power
                            p = strstrskip(pZ2,"<Power><value>"); //Name des XML Attribut- N�chster Wert wird ausgegeben
                            strncpy(Z2Power,p,strfind(p,"<",0)); //Ende des Wert der ausgegeben werden soll

                            if (strcmp("ON", Z2Power) == 0)
                            {setoutput(4,1);}
                            if (strcmp("OFF", Z2Power) == 0)
                            {setoutput(4,0);}

                            //printf("%s",Z2Power); //Ergebnis im Log ausgeben


                            //InputFuncSelect
                            p = strstrskip(pZ2,"<InputFuncSelect><value>");
                            strncpy(Z2InputFuncSelect,p,strfind(p,"<",0));

                            if (strcmp("CD", Z2InputFuncSelect) == 0)
                            {setoutput(5,1);}
                            if (strcmp("DVD", Z2InputFuncSelect) == 0)
                            {setoutput(5,2);}
                            if (strcmp("BD", Z2InputFuncSelect) == 0)
                            {setoutput(5,3);}
                            if (strcmp("TV", Z2InputFuncSelect) == 0)
                            {setoutput(5,4);}
                            if (strcmp("SAT/CBL", Z2InputFuncSelect) == 0)
                            {setoutput(5,5);}
                            if (strcmp("GAME", Z2InputFuncSelect) == 0)
                            {setoutput(5,6);}
                            if (strcmp("GAME2", Z2InputFuncSelect) == 0)
                            {setoutput(5,7);}
                            if (strcmp("Media Server", Z2InputFuncSelect) == 0)
                            {setoutput(5,8);}
                            if (strcmp("V.AUX", Z2InputFuncSelect) == 0)
                            {setoutput(5,9);}
                            if (strcmp("TUNER", Z2InputFuncSelect) == 0)
                            {setoutput(5,10);}
                            if (strcmp("NET/USB", Z2InputFuncSelect) == 0)
                            {setoutput(5,11);}
                            if (strcmp("Favorites", Z2InputFuncSelect) == 0)
                            {setoutput(5,12);}
                            if (strcmp("Internet Radio", Z2InputFuncSelect) == 0)
                            {setoutput(5,13);}


                            setoutputtext(1,Z2InputFuncSelect);
                            //printf("%s",Z2InputFuncSelect);


                            //MasterVolume
                            p = strstrskip(pZ2,"<MasterVolume><value>");
                            strncpy(Z2MasterVolume,p,strfind(p,"<",0));

                            if (strcmp("--", Z2MasterVolume) == 0)
                            {setoutput(6,batof("0"));}
                            else {setoutput(6,batof(Z2MasterVolume)+80);}

                            //printf("%s",Z2MasterVolume);


                            //Mute
                            p = strstrskip(pZ2,"<Mute><value>");
                            strncpy(Z2Mute,p,strfind(p,"<",0));

                            if (strcmp("on", Z2Mute) == 0)
                            {setoutput(7,1);}
                            if (strcmp("off", Z2Mute) == 0)
                            {setoutput(7,0);}

                            //printf("%s",Z2Mute);

                            }
                            free(pZ2);




                            //ZONE 3

                            char* pZ3 = httpget("192.168.0.12","/goform/formZone3_Zone3XmlStatusLite.xml"); // IP-Adresse des Denon, AVR Pfad zur XML Datei Main Zone
                            if (pZ3 != NULL) {


                            //Power
                            p = strstrskip(pZ3,"<Power><value>"); //Name des XML Attribut- N?chster Wert wird ausgegeben
                            strncpy(Z3Power,p,strfind(p,"<",0)); //Ende des Wert der ausgegeben werden soll

                            if (strcmp("ON", Z3Power) == 0)
                            {setoutput(8,1);}
                            if (strcmp("OFF", Z3Power) == 0)
                            {setoutput(8,0);}

                            //printf("%s",Z3Power); //Ergebnis im Log ausgeben


                            //InputFuncSelect
                            p = strstrskip(pZ3,"<InputFuncSelect><value>");
                            strncpy(Z3InputFuncSelect,p,strfind(p,"<",0));

                            if (strcmp("CD", Z3InputFuncSelect) == 0)
                            {setoutput(9,1);}
                            if (strcmp("DVD", Z3InputFuncSelect) == 0)
                            {setoutput(9,2);}
                            if (strcmp("BD", Z3InputFuncSelect) == 0)
                            {setoutput(9,3);}
                            if (strcmp("TV", Z3InputFuncSelect) == 0)
                            {setoutput(9,4);}
                            if (strcmp("SAT/CBL", Z3InputFuncSelect) == 0)
                            {setoutput(9,5);}
                            if (strcmp("DVR", Z3InputFuncSelect) == 0)
                            {setoutput(9,6);}
                            if (strcmp("DOCK", Z3InputFuncSelect) == 0)
                            {setoutput(9,7);}
                            if (strcmp("GAME", Z3InputFuncSelect) == 0)
                            {setoutput(9,8);}
                            if (strcmp("V.AUX", Z3InputFuncSelect) == 0)
                            {setoutput(9,9);}
                            if (strcmp("TUNER", Z3InputFuncSelect) == 0)
                            {setoutput(9,10);}
                            if (strcmp("PHONO", Z3InputFuncSelect) == 0)
                            {setoutput(9,11);}
                            if (strcmp("NET/USB", Z3InputFuncSelect) == 0)
                            {setoutput(9,12);}

                            setoutputtext(2,Z3InputFuncSelect);
                            //printf("%s",Z3InputFuncSelect);


                            //MasterVolume
                            p = strstrskip(pZ3,"<MasterVolume><value>");
                            strncpy(Z3MasterVolume,p,strfind(p,"<",0));

                            if (strcmp("--", Z3MasterVolume) == 0)
                            {setoutput(10,batof("0"));}
                            else {setoutput(10,batof(Z3MasterVolume)+80);}

                            //printf("%s",Z3MasterVolume);


                            //Mute
                            p = strstrskip(pZ3,"<Mute><value>");
                            strncpy(Z3Mute,p,strfind(p,"<",0));

                            if (strcmp("on", Z3Mute) == 0)
                            {setoutput(11,1);}
                            if (strcmp("off", Z3Mute) == 0)
                            {setoutput(11,0);}

                            //printf("%s",Z3Mute);

                            }
                            free(pZ3);
                            }
                            sleep(1000); // Refresh Rate in Millisekunden
                            }

                            Kommentar

                            Lädt...