Diese Karten werden üblicherweise in Linux per "crelay" Kommando angesprochen, so auch im System vom MS4H.
Hierbei wird die Seriennummer der Karte im Powermanager des MS4H eingetragen, so das dieser dann passend zur eingestellten Konfiguration die entsprechenden Relays schalten kann um z.B. Soundkarten, Netzteile oder Verstärker Ein/Auszuschalten.
Über die Seriennummer der Karte wird hierbei die jeweilige Karte mit den Schaltbefehlen der Relays aufgerufen.
Dies lief bei mir auch relativ lange gut, bis ich beim Umbau der USB Stromversorgung die USB Verbindung zum Hub an welchen die Soundkarten stecken während des Betriebs (also ohne das System vorher runtergefahren zu haben) mehrfach an/abgesteckt habe.
Beim nächsten Versuch im Haus Musik zu hören, war dann leider nichts mehr zu hören !!!
Es hatte mich dann etwas Zeit gekostet um raus zu finden, das wohl die USB Relay Karte die Soundkarten bzw. auch das Netzteil nicht mehr schaltete.
Nach einige Suchen konnte ich den Fehler finden.
Die Relaykarte hat eine neue bzw. zu vorher, also wie im MS4H Powermanager eingetragene geänderte Seriennummer. (vorher "7QMBS" und dann neu "7▒MBS")
Erste Idee war dann natürlich, ok ich passe einfach die Seriennummer im Powermanager an, tja denkste.
Die neue Seriennummer der Relaykarte hatte ein Sonderzeichen welche die Treiber und Tools der Relaykarte also z.B. "crelay" nicht akzeptieren
Blöd, was nun.
Nach einiger WEB Recherche wurde ich dann auf "usbrelay" ( https://github.com/darrylb123/usbrelay/ ) aufmerksam und konnte dort lesen, das damit die Seriennummer dieser speziellen Relaykarten gesetzt werden kann.
Das wollte dann gleich mal ausprobiert werden, also per Putty als root auf den MS4H und wie bei https://github.com/darrylb123/usbrelay/ angegeben "sudo apt-get install usbrelay" (natürlich auch apt-get update davor)
Dann erst mal "usbrelay -d" um den Devicepfad zur Karte zu bekommen.
Hier kam dann unter anderem zurück:
path: /dev/hidraw4
Hiermit sollte man nun eine neue Seriennummer (also z.B. auf die alte "7QMBS") setzen können:
"usbrelay /dev/hidraw4_0=7QMBS"
zurück kam nur
*** buffer overflow detected ***: terminated'7▒MBS_1'=1
Nach weiterer Suche konnte ich schließlich raus finden, das die Version von "usbrelay" welcher per "apt-get" installiert wird zu alt ist und man am besten die Version von "github" als Source zieht und selbst kompiliert.
Das Vorgehen ist einfach und direkt auch auf https://github.com/darrylb123/usbrelay/ beschrieben:
[als root:]
apt-get install libhidapi-dev libhidapi-hidraw0 git
git clone https://github.com/darrylb123/usbrelay
cd usbrelay
make
make install
Danach dann nochmal der Versuch die SER Nummer zu setzen:
"usbrelay /dev/hidraw4_0=7QMBS"
Was dann mit folgendem quittiert wurde:
▒QMBS_1=0
▒QMBS_2=0
▒QMBS_3=0
▒QMBS_4=0
▒QMBS_5=0
▒QMBS_6=0
▒QMBS_7=0
▒QMBS_8=0
Setting new serial
Eine Abfrage der Relay states brachte dann tatsächlich:
7QMBS_1=0
7QMBS_2=0
7QMBS_3=0
7QMBS_4=0
7QMBS_5=0
7QMBS_6=0
7QMBS_7=0
7QMBS_8=0
Perfekt, das System war wieder funktionsfähig und der MS4H konnte die Relays wieder korrekt schalten.
Fazit:
Diese "speziellen" Relaykarten sind anfällig auf verirrte bzw. beschädigte UBS Pakete und können hierdurch quasi außer Betrieb gesetzt werden.
Um die Seriennummer dieser Relay Karten neu zu setzen kann man das "usbrelay" Paket ( https://github.com/darrylb123/usbrelay ) in einer aktuellen Version verwenden.
Noch eine Ergänzung bezüglich was ich oben nicht erwähnt habe:
Nachdem ich das Seriennummern Problem erkannt hatte jedoch auf die Schnelle keine Lösung hierfür fand, hatte ich mich zugunsten des WAF dazu entschlossen eine Interim Lösung umzusetzen. Hierzu hatte ich einfach im MS4H Powermanager Script alle Vorkommen von "crelay -s ' . $configpm['CRELAY_SERIAL'] ." in "/crelay ' ." geändert.
Dies hatte den Effekt, das die crealy Kommandos ohne Angabe einer Seriennummer aufgerufen wurden und somit die "illegale" Seriennummer nicht benötigt wurde. So lange sich (wie bei mir) nur eine Relay Karte (bei mir ein 8 Kanal) im System befindet funktioniert dies auch sehr gut.
Bei einem MS4H Update oder einer Backup Einspielung wären diese Änderungen jedoch wieder überschrieben worden weshalb ich dann doch eine Nachhaltige Lösung wollte.
Danach bin ich dann sogar noch einen weiteren Lösungsweg gegangen bevor ich dann bei der "usbrelay" Lösung angelangt war.
Ich habe mir die selbe Karte noch einmal gekauft konnte diese neue jedoch wegen den heftigen Umbauten (wegen der Stromaufnahme und der Versorgung von USB Hub, aller 4 Sound- und der Relay Karten durch den USB Port des Musikservers) der zu nutzenden Karte nicht einfach austauschen. Jedoch hatte ich die Absicht den Microcontroller (Atmel ATMega8) neu zu flashen und das vorher alles auf der neuen externen Karte zu testen was dann auch geglückt ist. ( https://github.com/thmahe/usbrelay-firmware )
Glücklicherweise stolperte ich dann trotzdem über "usbrelay" so dass ich mir dann letztendlich das aus-/flashen/ein-bauen der alten Karte sparen konnte.
Warum schreib ich das hier ?
Nachdem mir das mit der Seriennummer nun gerade schon wieder ein zweites mal passiert ist und ich beim zweiten mal (nach Monaten) wieder nicht mehr genau wusste wie ich vorzugehen habe, wollte ich das irgendwo dokumentieren und wenn schon dann kann es ja eventuell auch für andere auch mal hilfreich sein.
Kommentar