Modul für ONKYO AV Receiver (und neuere Pioneer AV Receiver)

Begonnen von Loredo, 30 September 2013, 14:52:36

Vorheriges Thema - Nächstes Thema

urmel86

So hab jetzt endlich Zeit gefunden die letzte Version des Moduls zu zu testen. Leider kommt nach dem Speichern und Reloaden des Moduls folgende Meldung:

Can't locate XML/Simple.pm in @INC (@INC contains: YAF /etc/perl /usr/local/lib/perl/5.14.2 /usr/local/share/perl/5.14.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.14 /usr/share/perl/5.14 /usr/local/lib/site_perl . ./FHEM) at ./FHEM/70_ONKYO_AVR.pm line 37. BEGIN failed--compilation aborted at ./FHEM/70_ONKYO_AVR.pm line 37.

Die Meldung bezieht sich auf diese Zeile im Modul:

package main;

use strict;
use warnings;
use IO::Socket;
use IO::Select;
--> use XML::Simple;
use Time::HiRes;
use Data::Dumper;


Fehlt da in meiner Perl Installation ein Paket?

Gruß Marco

Loredo

Zitat von: urmel86 schrieb am Do, 10 Oktober 2013 16:46Fehlt da in meiner Perl Installation ein Paket?


Ja, die neuste Version benötigt XML::Simple.
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

Loredo

Update:

- show only available inputs from device including device specific naming (2013 models only)
- input command individualization allows to shrink the list and resort of inputs shown in FHEMWEB
- input aliasing to allow naming customization
- allow to directly switch on device for a specific input
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

urmel86

OK nachdem ich das Modul jetzt installieren konnte, schmiert mir FHEM ab. Ist nicht zu erreichen ich komme nur noch dran wenn ich alles abschieße und die 70_ONKYO_AVR.pm lösche.

Im Texteditor mit Syntaxhighlighting kriege ich in Zeile 199 Fehler angezeigt.

       # Input alias handling
        #
        if ( defined( $attr{$name}{inputs} ) ) {
            my @inputs = split( ':', $attr{$name}{inputs} );

            foreach (@inputs) {
                if (m/[^,\s]+(,[^,\s]+)+/) {                     <--- Hier in der Zeile  if (m/[^,\s   ]   +(,[^,\s]+  )  +/) {
                    my @input_names = split( ',', $_ );
                    $input_names[1] =~ s/\s/_/g;
                    $hash->{helper}{receiver}{input_aliases}{ $input_names[0] }
                      = $input_names[1];
                    $hash->{helper}{receiver}{input_names}{ $input_names[1] } =
                      $input_names[0];
                }
            }
        }
    }


In der Zeile markiert er zwei Klammern:

if (m/[^,\s]+(,[^,\s]+)+/) {

Ob deswegen FHEM abschmiert kann ich nicht sagen aber es hängt irgendwie mit dem Modul zusammen. Hat außer mir keiner Probleme?

Gruß Marco

Jaydee

Ich bin noch nicht wieder zuhause, daher hinke ich noch 2 Versionen hinterher ;-)
Dann werd ich mich erstmal darum kümmern müssen, wie ich Perl-Module nachinstalliere...

urmel86

Zitat von: Jaydee am 12 Oktober 2013, 16:15:25
Ich bin noch nicht wieder zuhause, daher hinke ich noch 2 Versionen hinterher ;-)

Das passt. Sind die beiden Versionen mit denen ich Probleme hab.

Zitat von: Jaydee am 12 Oktober 2013, 16:15:25
Dann werd ich mich erstmal darum kümmern müssen, wie ich Perl-Module nachinstalliere...

Versuch es mal mit
sudo apt-get install libxml-simple-perl

Jaydee

ah, dafür schon mal herzlichen Dank :-)

Loredo

Zitat von: urmel86 am 12 Oktober 2013, 12:22:36
Im Texteditor mit Syntaxhighlighting kriege ich in Zeile 199 Fehler angezeigt.

       # Input alias handling
        #
        if ( defined( $attr{$name}{inputs} ) ) {
            my @inputs = split( ':', $attr{$name}{inputs} );

            foreach (@inputs) {
                if (m/[^,\s]+(,[^,\s]+)+/) {                     <--- Hier in der Zeile  if (m/[^,\s   ]   +(,[^,\s]+  )  +/) {
                    my @input_names = split( ',', $_ );
                    $input_names[1] =~ s/\s/_/g;
                    $hash->{helper}{receiver}{input_aliases}{ $input_names[0] }
                      = $input_names[1];
                    $hash->{helper}{receiver}{input_names}{ $input_names[1] } =
                      $input_names[0];
                }
            }
        }
    }


In der Zeile markiert er zwei Klammern:

if (m/[^,\s]+(,[^,\s]+)+/) {

Ob deswegen FHEM abschmiert kann ich nicht sagen aber es hängt irgendwie mit dem Modul zusammen. Hat außer mir keiner Probleme?


Ist schwer sowas nachzuvollziehen, wenn man selbst gar keine Probleme feststellen kann  :(
Ich hab auch schon überlegt, wie wir herausfinden, woran es liegt, aber mir fällt nichts ein momentan.


An der Syntax des Regex liegt es nicht, die Notation ist korrekt (und eine falsche Notation würde auch nicht zu einem kompletten Absturz führen...).
Das Syntax-Highlighting deines Editors scheint nicht ganz so toll zu sein  8)


Was man mal probieren könnte:



       
  • FHEM runterfahren (mit shutdown)
  • im Verzeichnis /opt/fhem/log (je nach Installation natürlich) die Datei fhem.save löschen oder temporär umbenennen. Dort sind die aktuellen Readings etc gespeichert
  • FHEM wieder hochfahren. Die alten Readings sind dann zwar weg, werden aber alle nach und nach neu erstellt. Ich hatte es schon öfters, dass sich dort alte Sachen reingeschlichen haben, die irgendwann nicht mehr richtig verarbeitet werden konnten

Gruß
Julian
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

urmel86

Zitat von: Loredo am 13 Oktober 2013, 10:19:53


       
  • FHEM runterfahren (mit shutdown)
  • im Verzeichnis /opt/fhem/log (je nach Installation natürlich) die Datei fhem.save löschen oder temporär umbenennen. Dort sind die aktuellen Readings etc gespeichert
  • FHEM wieder hochfahren. Die alten Readings sind dann zwar weg, werden aber alle nach und nach neu erstellt. Ich hatte es schon öfters, dass sich dort alte Sachen reingeschlichen haben, die irgendwann nicht mehr richtig verarbeitet werden konnten

So das hab ich grade durchgespielt. Nach dem speichern des Scripts kam eine Meldung das keine Berechtigung für FHEM/70_ONKYO_AVR.pm. Das Modul wurde aber gespeichert. Habe dann testweise wieder ein Gerät anlegen wollen. Ergebnis ist, dass er in der Weboberfläche das Gerät erzeugt, auch in die Details springt und dann hängt das ganze System...

Weißt du wie die Rechte gesetzt sein müssen für den ganzen /opt/fhem Ordner? Und wie ich das dann am schnellsten hinbekomme.
Will das zumindest auschließen können. Auch wenn ich da nicht bei war...

Loredo

Zitat von: urmel86 am 13 Oktober 2013, 10:35:37
So das hab ich grade durchgespielt. Nach dem speichern des Scripts kam eine Meldung das keine Berechtigung für FHEM/70_ONKYO_AVR.pm. Das Modul wurde aber gespeichert. Habe dann testweise wieder ein Gerät anlegen wollen. Ergebnis ist, dass er in der Weboberfläche das Gerät erzeugt, auch in die Details springt und dann hängt das ganze System...

Weißt du wie die Rechte gesetzt sein müssen für den ganzen /opt/fhem Ordner? Und wie ich das dann am schnellsten hinbekomme.
Will das zumindest auschließen können. Auch wenn ich da nicht bei war...



Der gesamte Ordner mit allen darunter sollte einfach dem Benutzer gehören, unter dem FHEM läuft. Die Zugriffsrechte der Ordner und Dateien kann man sicherlich auch noch auf 775 oder 755 stellen, aber das ist bei den meisten Dateien gar nicht notwendig, dort reicht auch 664 oder 644. Die Ownerschaft ist eher entscheidend.


Im Log siehst du vielleicht mehr, wenn du vorher das globale Verbose-Level auf 5 setzt. Allerdings kommen dann auch von all den anderen Modulen viele Meldungen, das wird schnell unübersichtlich.
Besser du definierst mal ein ONKYO Gerät direkt in deiner fhem.cfg (oder entsprechend einer Unterdatei, je nachdem wie du deine Config organisierst) und setzt dort direkt für das Gerät das Verbose Attribut auf 5.



define avr_test ONKYO_AVR 192.168.0.1
attr avr_test verbose 5



Starte dann fhem und im Log sollte ersichtlich sein, an welcher Stelle er dann hängt.




Gruß
Julian
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

urmel86

So leider kein Erfolg... Ich habe jetzt erstmal den kompletten Ordner /opt/fhem wieder dem Nutzer fhem zugewiesen. Da waren tatsächlich Dateien die dem User root gehörten. Dann:


  • FHEM neustart
  • Modul per "save as 70_ONKYO_AVR.pm" gespeichert <-- diesmal ohne Fehlermeldung
  • Testgerät direkt in der fhem.cfg erstellt wie von dir beschrieben <-- Gerät wird ohne Fehler erstellt
  • System hängt...

Hatte FHEM per SSH Session neugetartet eben und glücklicherweise gibt der grade in der Konsole folgendes wieder:

pi@raspberrypi /opt/fhem $ sudo /etc/init.d/fhem start
resetting 868MHz extension...
Starting fhem...
pi@raspberrypi /opt/fhem $ Subroutine ONKYO_AVR_Initialize redefined at ./FHEM/70_ONKYO_AVR.pm line 53.
Subroutine ONKYO_AVR_GetStatus redefined at ./FHEM/70_ONKYO_AVR.pm line 71.
Subroutine ONKYO_AVR_Get redefined at ./FHEM/70_ONKYO_AVR.pm line 528.
Subroutine ONKYO_AVR_Set redefined at ./FHEM/70_ONKYO_AVR.pm line 551.
Subroutine ONKYO_AVR_Define redefined at ./FHEM/70_ONKYO_AVR.pm line 1028.
Subroutine ONKYO_AVR_SendCommand redefined at ./FHEM/70_ONKYO_AVR.pm line 1106.
Subroutine ONKYO_AVR_Undefine redefined at ./FHEM/70_ONKYO_AVR.pm line 1310.
Subroutine ONKYO_AVR_read redefined at ./FHEM/70_ONKYO_AVR.pm line 1319.
Subroutine ONKYO_AVR_Pack redefined at ./FHEM/70_ONKYO_AVR.pm line 1366.
Subroutine ONKYO_AVR_hexdump redefined at ./FHEM/70_ONKYO_AVR.pm line 1416.
Subroutine ONKYO_AVR_hex2dec redefined at ./FHEM/70_ONKYO_AVR.pm line 1424.
Subroutine ONKYO_AVR_dec2hex redefined at ./FHEM/70_ONKYO_AVR.pm line 1430.
Subroutine ONKYO_AVR_RCmakenotify redefined at ./FHEM/70_ONKYO_AVR.pm line 1440.
Subroutine ONKYO_AVR_RClayout_SVG redefined at ./FHEM/70_ONKYO_AVR.pm line 1452.
Subroutine ONKYO_AVR_RClayout redefined at ./FHEM/70_ONKYO_AVR.pm line 1484.
Subroutine ONKYO_AVR_GetRemotecontrolCommand redefined at ./FHEM/70_ONKYO_AVR.pm line 1514.
Subroutine ONKYO_AVR_GetRemotecontrolValue redefined at ./FHEM/70_ONKYO_AVR.pm line 1680.
Subroutine ONKYO_AVR_GetRemotecontrolCommandDetails redefined at ./FHEM/70_ONKYO_AVR.pm line 3172.


Bei der letzten Zeile ist Schluss da bleibt es stehen. Das sieht für mich so aus als würde er sich an der Subroutine ONKYO_AVR_GetRemotecontrolCommandDetails weghängen oder eben danach.

Die Log sieht nicht nach Fehlern aus:

2013.10.13 11:04:22 4: ONKYO_AVR Onkyo_TX_NR515(main): net-receiver-information -> query (NRIQSTN)
2013.10.13 11:04:22 5: ONKYO_AVR Onkyo_TX_NR515(main): 192.168.178.61:60128 snd 49534350000000100000000a0100000021314e52495153544e0d ISCP....$
2013.10.13 11:04:22 5: ONKYO_AVR Onkyo_TX_NR515(main): 192.168.178.61:60128 rcv 49534350000000100000000b0100000021314e4c53432d501a0d0a ISCP..$
2013.10.13 11:04:22 5: ONKYO_AVR Onkyo_TX_NR515(main): 192.168.178.61:60128 rcv 49534350000000100000000b0100000021314e4c53432d501a0d0a ISCP..$


Da fehlen zwar Zeichen am Ende aber das liegt an Nano ich kriege da irgendwie nicht alles markiert zum kopieren...

urmel86

#71
Ein $ sudo killall perl

Bringt noch folgende Meldung:
$ Can't use string ("0") as a HASH ref while "strict refs" in use at ./FHEM/70_ONKYO_AVR.pm line 1122.

Nach weiterem Testenund stromlosschalten hatte ich eben in der fhem.cgf mal ein Device angelegt das er nicht finden knn von der IP her. Läuft durch. Kein Aufhängen nichts.

Dann hab ich diesem Device im Nachhinein die richtige IP zugewiesen und FHEM läuft weiter. Allerdings wird das Device dann nicht als anwesend erkannt. Kommen laut Log keine antworten vom Receiver. Da ich dachte vielleicht hat das vom Netznehmen wieder alles gerettet nächster Versuch. Device gelöscht und per FHEM Kommandozeile neu angelegt: System hängt :(

Muss jetzt auch erstmal los und kann nicht weiter testen.

Schönen Sonntag zusammen!

So habe noch ein wenig getestet aber es bleibt dabei. Sobald ich ein Device setze das erreicht werden kann (IP), bleibt das ganze System hängen. Dann hilft nur noch den Perl Prozess abschießen, das Device aus der fhem.cfg nehmen und neustarten. Interessanterweise kann ich wenn er hängt auch per SSH Session nicht mehr neustarten. Befehle wie sudo init 6 oder sudo shutdown -r nimmt er zwar entgegen es passiert aber nichts und er gibt die Kommandozeile für weitere Eingaben frei.

Werde jetzt nochmal global verbose 5 setzen und das durchspielen. Vielleicht gibt's da ja noch irgendeine Meldung

Hier der Log verbose 5:

2013.10.13 21:44:12 4: ONKYO_AVR onkyo(main): net-receiver-information -> query (NRIQSTN)
2013.10.13 21:44:12 5: ONKYO_AVR onkyo(main): 192.168.178.61:60128 snd 49534350000000100000000a0100000021314e52495153544e0d ISCP............!1NRIQSTN.
2013.10.13 21:44:12 5: ONKYO_AVR onkyo(main): 192.168.178.61:60128 rcv 49534350000000100000000b0100000021314e4c53432d501a0d0a ISCP............!1NLSC-P...
2013.10.13 21:44:12 5: ONKYO_AVR onkyo(main): 192.168.178.61:60128 rcv 4953435000000010000000200100000021314e4c54463330303030303630303039303030304646464630304e451a0d0a ISCP....... ....!1NLTF300000600090000FFFF00NE...
2013.10.13 21:44:12 5: ONKYO_AVR onkyo(main): 192.168.178.61:60128 rcv 49534350000000100000000b0100000021314e4c534336501a0d0a ISCP............!1NLSC6P...
2013.10.13 21:44:12 5: ONKYO_AVR onkyo(main): 192.168.178.61:60128 rcv 4953435000000010000000200100000021314e4c5355302d7654756e657220496e7465726e657420526164696f1a0d0a ISCP....... ....!1NLSU0-vTuner Internet Radio...
2013.10.13 21:44:12 5: ONKYO_AVR onkyo(main): 192.168.178.61:60128 rcv 4953435000000010000000210100000021314e4c5355312d4c6173742e666d20496e7465726e657420526164696f1a0d0a ISCP.......!....!1NLSU1-Last.fm Internet Radio...
2013.10.13 21:44:12 5: ONKYO_AVR onkyo(main): 192.168.178.61:60128 rcv 4953435000000010000000120100000021314e4c5355322d53706f746966791a0d0a ISCP............!1NLSU2-Spotify...
2013.10.13 21:44:12 5: ONKYO_AVR onkyo(main): 192.168.178.61:60128 rcv 4953435000000010000000200100000021314e4c5355332d415550454f2120504552534f4e414c20524144494f1a0d0a ISCP....... ....!1NLSU3-AUPEO! PERSONAL RADIO...
2013.10.13 21:44:12 5: ONKYO_AVR onkyo(main): 192.168.178.61:60128 rcv 4953435000000010000000100100000021314e4c5355342d73696d66791a0d0a ISCP............!1NLSU4-simfy...
2013.10.13 21:44:12 5: ONKYO_AVR onkyo(main): 192.168.178.61:60128 rcv 4953435000000010000000130100000021314e4c5355352d4d503374756e65731a0d0a ISCP............!1NLSU5-MP3tunes...
2013.10.13 21:44:12 5: ONKYO_AVR onkyo(main): 192.168.178.61:60128 rcv 4953435000000010000000170100000021314e4c5355362d4d79204661766f72697465731a0d0a ISCP............!1NLSU6-My Favorites...
2013.10.13 21:44:12 5: ONKYO_AVR onkyo(main): 192.168.178.61:60128 rcv 4953435000000010000000150100000021314e4c5355372d486f6d65204d656469611a0d0a ISCP............!1NLSU7-Home Media...
2013.10.13 21:44:13 5: ONKYO_AVR onkyo(main): 192.168.178.61:60128 rcv 49534350000000100000000f0100000021314e4c5355382d444c4e411a0d0a ISCP............!1NLSU8-DLNA...


Hier noch eine Meldung die ich beitragen kann, die bekomme ich auf der Console in der SSH Session. Und die kommt nur im Fehlerfall, also bei Erreichbarkeit des Devices von der IP her.

Use of uninitialized value $arg in string eq at fhem.pl line 2308.

Jaydee

So, bin wieder zuhause, hab das update gemacht, XML::Simple nach installiert und gestartet... und scheine dasselbe Problem wie Urmel zu haben. Direkt beim Start schmiert FHEM ab.
Ich komme noch om Log bis zu
2013.10.13 22:51:28 0: Server started with 120 defined entities (version $Id: fhem.pl 3872 2013-09-07 11:58:33Z rudolfkoenig $, os linux, user pi, pid 8504)
Und das war es dann... ich habe jetzt noch nichts an Verbose oder sowas geändert. Du hast ja die Daten von Urmel, wenn du doch noch weitere brauchst, sag Bescheid, dann poste ich meine auch noch mal.

Ich hab auch eine ältere Version ausprobiert (09.10.2013) und habe dort dasselbe Problem.
Dann bin ich wieder zu meiner letzten Version zurück (06.10.2013) und die läuft...

LG
Jan


Loredo

Hm. Ich muss wohl nochmal überlegen, wie ich mit dem NRIQSTN Befehl umgehe. Eure Receiver sind pre-2013 und eigentlich ist es so gedacht, dass der Receiver auf NRIQSTN ein NRIN/A zurück liefern sollte, wenn er den Befehl nicht kennt. Das scheint nicht der Fall zu sein. Ich habe zwar ein Timeout im Code festgelegt, aber der muss wohl erst auslaufen und während der Zeit steht FHEM dann aufgrund der aktuellen Architektur leider. Der Befehl wird auch nur nach einem Define oder statusUpdate ausgeführt - hm. Ich bin noch nicht sicher, ob ich das an das Protokoll binde oder nicht. Eleganter hätte ich es gefunden, wenn er einfach den Befehl probiert und wenns nicht geht das Ergebnis eben einfach nicht verarbeitet. Aber offenbar hat Onkyo kein try-and-error vorgesehen :-/
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

Loredo

#74
Update:


- query net-receiver-information (NRI) for 2013 models only
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER