Autor Thema: Sonos steuern  (Gelesen 1026161 mal)

Offline herman

  • Jr. Member
  • **
  • Beiträge: 96
Antw:Sonos steuern
« Antwort #555 am: 25 Dezember 2013, 18:26:47 »
Folgende Meldung habe ich auch noch erhalten:

Can't use string ("") as a HASH ref while "strict refs" in use at ./FHEM/21_SONOSPLAYER.pm line 532

Offline Reinerlein

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2134
Antw:Sonos steuern
« Antwort #556 am: 25 Dezember 2013, 19:13:34 »
Hallo Merhan,

ok, jetzt sehe ich, an welchen Stellen da ein Fehler auftritt. Allerdings frage ich mich, wie das passieren konnte...
Das tritt auf, wenn die Player nicht in der Fhem-Device-Liste gefunden werden konnten. Das aber sollte gar nicht auftreten.

Gehen wir doch mal Schrittweise durch:
Du versuchst ja Gruppen zu bilden, bzw. aufzulösen. Bitte stell doch im ersten Schritt sicher, dass alle Player von Fhem erkannt und angelegt wurden.
Danach kannst du bitte mal ein "get Sonos Groups" ausführen. Da solltest du deine Sonos-Player in ihren Gruppen angezeigt bekommen.
Desweiteren sollte am Sonos-Device das Reading "ZoneGroupState" gefüllt sein, das sollte aber der Fall sein, wenn die Ausgabe von "get Sonos Groups" erfolgreich war...

Außerdem solltest du auf jeden Fall sicherstellen, dass du wirklich nur ein Sonos-Device konfiguriert hast. Sonst dürfte da auch einiges schief gehen...

Und du solltest dem ganzen nach einem Neustart etwas Zeit geben, die Player zu erkennen und zu aktualisieren. Das kann schon mal 30 Sekunden dauern (ja nach Maschine auch länger, oder natürlich auch kürzer :-).

Klappt das denn schon mal?

Grüße
Reiner

Offline John

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1426
Antw:Sonos steuern
« Antwort #557 am: 25 Dezember 2013, 20:43:49 »
Hallo Reiner,
besten Dank für deine Antwort #550.
Mit Samba funktioniert nun alles wie gewünscht. Das ewige Wiederholen hat nun ein Ende.

Nächstes Problem:
ich möchte eine Playlist laden via:
set Sonos_Wohnzimmer LoadPlaylist file:/mnt/SonosSpeak/john.m3u
Das angegebenen Verzeichnis ist gleichzeitig das freigegebene Samba-Verzeichnis:
Ergebnis von LastActionResult:
Zitat
LoadPlaylist: Error during opening file "/mnt/SonosSpeak/john.m3u": Unpassender IOCTL (I/O-Control) für das Gerät

Rechte-Einstellung
-rw-rw-r-- 1 pi fhem 174 Dez 25 20:17 /mnt/SonosSpeak/john.m3u
Was mache ich falsch?

John
CubieTruck CULV3 MAX HM  Logo  ESP8266 MQTT PID20 HourCounter MaxScanner KostalPiko

Offline Reinerlein

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2134
Antw:Sonos steuern
« Antwort #558 am: 25 Dezember 2013, 23:18:08 »
Hi John,

hmm... das ist aber komisch. Da wird einfach eine Datei mit dem Perl-Befehl "open" zum Lesen geöffnet.
Das sollte eigentlich auf jeder Maschine gehen.

Da muss ich erstmal etwas forschen. Leider muss ich dich da also etwas vertrösten...

Grüße
Reiner

chregu

  • Gast
Antw:Sonos steuern
« Antwort #559 am: 26 Dezember 2013, 09:35:00 »
Hallo

Ich habe sehr oft folgendes in meinem Output

SONOS0: Error during MainTrigger: syntax error at (eval 367) line 1, near "understand you:"
 - Trying to execute 'Sorry. I don't understand you: 'A:RINCON_000E5868517601400_MR:disable:0''

Und was ich auch sehr oft habe

ProxyObject does not exists

In unterschiedlichsten Variatonen. Ich benutze die _dev version, kann auch mehr infos liefern, falls nötig.

Gruss

Christian
« Letzte Änderung: 26 Dezember 2013, 09:41:14 von chregu »

Offline Christoph

  • Full Member
  • ***
  • Beiträge: 197
Antw:Sonos steuern
« Antwort #560 am: 27 Dezember 2013, 11:35:45 »
Hallo,

habe mal gestern ein Update auf Sonos_dev gemacht und bekam dann folgende Fehler beim speichern der fhem.cfg.

Reading Sonos_BRIDGE->presence not used out of statefile. Reading Sonos_Bad->presence not used out of statefile. Reading Sonos_Wohnzimmer->presence not used out of statefile.
Hab alles was das Sonos Modul betraf in der cfg gelöscht und die beiden Player (Play1 und Play3) neu erkennen lassen.

Gruß Christoph


Offline Reinerlein

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2134
Antw:Sonos steuern
« Antwort #561 am: 27 Dezember 2013, 13:25:14 »
Hi zusammen,

@Christoph:
das ist keine Fehlermeldung, sondern nur eine Info.
Es geht darum, dass der Inhalt des Readings "presence" nicht aus dem Statefile gesetzt werden darf.
Dieses Rading wird beim Start des Moduls auf disappeared gesetzt, damit ein folgender Erkennungsvorgang sicher den Wert setzen kann, und ausgeschaltete Player (die sich ja nicht melden) auch sicher als Disappeared geführt werden (sonst könnte es passieren, dass ein Player, der an war, und während des Neustarts von Fhem ausgeschaltet wird, zukünftig als "appeared" geführt wird, da das Reading ja nie angefasst wird).

Leider kann ich das Laden aus dem Statefile nur mit einer Meldung unterbinden, sodass dazu immer etwas im Log steht...

@Christian:
Ich habe in der aktuellen Developer-Version dazu etwas eingebaut. Diese Meldungen sollten jetzt seltener auftreten. Das ist ein Zeitproblem zwischen der Fhem und der Subprozess Verarbeitung durch das Betriebssystem. Auf meiner Windows-Monster-Entwicklungs-Maschine tritt da nie was auf, auf meinem Pi hingegen schon, sodass ich das also entsprechend nachvollziehen konnte...
Vielleicht finde ich da aber auch noch eine bessere Lösung...

Warst du nicht derjenige, der auch ein Sonos-Surround-System hatte?
Wenn ja, könntest du mit der aktuellen Dev-Version mal eine vollständige Erkennung aller Zoneplayer mittels Fhem durchführen lassen, und mal schauen, wie die Player jetzt benannt werden?
Dieser Test (bzw. das Problem dazu) steht dem Weihnachtsrelease noch im Weg.
Wenn das gelöst ist, wollte ich den Stand erst mal veröffentlichen...

Grüße
Reiner

Offline eppi

  • Full Member
  • ***
  • Beiträge: 434
Antw:Sonos steuern
« Antwort #562 am: 27 Dezember 2013, 19:17:37 »
Hallo Reiner
Ich melde mich zurück...

Ich habe heute das Naming meiner Surround Konfiguration nochmals überprüft.... Nach dem ich mehrmals die bereits erkannten Player gelöscht habe, gespeichert und FHEM neugestartet habe, funktioniert nun das Naming wie gewünscht.

Meine Player des Surround heissen nun:
Sonos_Wohnzimmer
Sonos_Wohnzimmer_LR
Sonos_Wohnzimmer_RR
Sonos_Wohnzimmer_SW

Also genauso wie es sein sollte, HERZLICHEN DANK!

Ich habe aber noch eine Frage.
Wenn ich eine Gruppe mit 3 Playern machen möchte scheitere ich an der Schreibweise. Versucht habe ich:
set Sonos_Wohnzimmer AddMember Sonos_Bad,Sonos_Kueche
Das hat aber so nicht funktioniert und ich habe mir als Workaround die Befehle aufgeteilt. Kannst du mir hier auf die Sprüngge helfen?

Danke und Gruess Dani

Offline Reinerlein

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2134
Antw:Sonos steuern
« Antwort #563 am: 27 Dezember 2013, 22:12:30 »
Hi Dani,

der Befehl "AddMember" ist nur für das Hinzufügen eines Players.

Wenn du eine Gruppe auf einen Schlag erzeugen willst, kannst du den Befehl "set Groups" am Sonos-Device verwenden:
set Sonos Groups [Sonos_Wohnzimmer, Sonos_Bad, Sonos_Kueche]
erzeugt eine Gruppe mit den drei Playern, wobei das Wohnzimmer der Master wird (also wird dessen Abspielliste die der neuen Gruppe).

Grüße
Reiner

chregu

  • Gast
Antw:Sonos steuern
« Antwort #564 am: 27 Dezember 2013, 22:26:22 »
Hallo Reinerlein

Ich hab zwar kein Surround System, aber 2 play:5 mit einem Sub. Hab mal alle sonos definitionen gelöscht in der .cfg und neu gestartet, folgendes kam raus (hab auch noch nen Play:1 und einen Connect):

define Sonos_Living_Room_SW SONOSPLAYER RINCON_000E5899F9CE01400_MR
attr Sonos_Living_Room_SW generateInfoSummarize1 <NormalAudio><Artist prefix="(" suffix=")"/><Title prefix=" '" suffix="'" ifempty="[Keine Musikdatei]"/><Album prefix=" vom Album '" suffix="'"/></NormalAudio> <StreamAudio><Sender suffix=":"/><SenderCurrent prefix=" '" suffix="' -"/><SenderInfo prefix=" "/></StreamAudio>
attr Sonos_Living_Room_SW generateInfoSummarize2 <TransportState/><InfoSummarize1 prefix=" => "/>
attr Sonos_Living_Room_SW generateInfoSummarize3 <Volume prefix="Lautstaerke: "/><Mute instead=" ~ Kein Ton" ifempty=" ~ Ton An" emptyval="0"/> ~ Balance: <Balance ifempty="Mitte" emptyval="0"/><HeadphoneConnected instead=" ~ Kopfhoerer aktiv" ifempty=" ~ Kein Kopfhoerer" emptyval="0"/>
attr Sonos_Living_Room_SW getAlarms 1
attr Sonos_Living_Room_SW group Living_Room
attr Sonos_Living_Room_SW icon icoSONOSPLAYER_icon-Sub.png
attr Sonos_Living_Room_SW minVolume 0
attr Sonos_Living_Room_SW model Sonos_Sub
attr Sonos_Living_Room_SW room Sonos
attr Sonos_Living_Room_SW stateVariable InfoSummarize2
attr Sonos_Living_Room_SW webCmd Play:Pause:Previous:Next:VolumeD:VolumeU:MuteT
define Sonos_Living_Room_RF SONOSPLAYER RINCON_000E5889C19001400_MR
attr Sonos_Living_Room_RF generateInfoSummarize1 <NormalAudio><Artist prefix="(" suffix=")"/><Title prefix=" '" suffix="'" ifempty="[Keine Musikdatei]"/><Album prefix=" vom Album '" suffix="'"/></NormalAudio> <StreamAudio><Sender suffix=":"/><SenderCurrent prefix=" '" suffix="' -"/><SenderInfo prefix=" "/></StreamAudio>
attr Sonos_Living_Room_RF generateInfoSummarize2 <TransportState/><InfoSummarize1 prefix=" => "/>
attr Sonos_Living_Room_RF generateInfoSummarize3 <Volume prefix="Lautstaerke: "/><Mute instead=" ~ Kein Ton" ifempty=" ~ Ton An" emptyval="0"/> ~ Balance: <Balance ifempty="Mitte" emptyval="0"/><HeadphoneConnected instead=" ~ Kopfhoerer aktiv" ifempty=" ~ Kein Kopfhoerer" emptyval="0"/>
attr Sonos_Living_Room_RF getAlarms 1
attr Sonos_Living_Room_RF group Living_Room
attr Sonos_Living_Room_RF icon icoSONOSPLAYER_icon-S5.png
attr Sonos_Living_Room_RF minVolume 0
attr Sonos_Living_Room_RF model Sonos_S5
attr Sonos_Living_Room_RF room Sonos
attr Sonos_Living_Room_RF stateVariable InfoSummarize2
attr Sonos_Living_Room_RF webCmd Play:Pause:Previous:Next:VolumeD:VolumeU:MuteT
define Sonos_BRIDGE SONOSPLAYER RINCON_000E5868517601400_MR
attr Sonos_BRIDGE group BRIDGE
attr Sonos_BRIDGE icon icoSONOSPLAYER_icon-ZB100.png
attr Sonos_BRIDGE model Sonos_ZB100
attr Sonos_BRIDGE room Sonos
define Sonos_Bathroom SONOSPLAYER RINCON_000E58C9D7E201400_MR
attr Sonos_Bathroom generateInfoSummarize1 <NormalAudio><Artist prefix="(" suffix=")"/><Title prefix=" '" suffix="'" ifempty="[Keine Musikdatei]"/><Album prefix=" vom Album '" suffix="'"/></NormalAudio> <StreamAudio><Sender suffix=":"/><SenderCurrent prefix=" '" suffix="' -"/><SenderInfo prefix=" "/></StreamAudio>
attr Sonos_Bathroom generateInfoSummarize2 <TransportState/><InfoSummarize1 prefix=" => "/>
attr Sonos_Bathroom generateInfoSummarize3 <Volume prefix="Lautstaerke: "/><Mute instead=" ~ Kein Ton" ifempty=" ~ Ton An" emptyval="0"/> ~ Balance: <Balance ifempty="Mitte" emptyval="0"/><HeadphoneConnected instead=" ~ Kopfhoerer aktiv" ifempty=" ~ Kein Kopfhoerer" emptyval="0"/>
attr Sonos_Bathroom getAlarms 1
attr Sonos_Bathroom group Bathroom
attr Sonos_Bathroom icon icoSONOSPLAYER_icon-S1.png
attr Sonos_Bathroom minVolume 0
attr Sonos_Bathroom model Sonos_S1
attr Sonos_Bathroom room Sonos
attr Sonos_Bathroom stateVariable InfoSummarize2
attr Sonos_Bathroom webCmd Play:Pause:Previous:Next:VolumeD:VolumeU:MuteT
define Sonos_Bedroom SONOSPLAYER RINCON_000E582B613C01400_MR
attr Sonos_Bedroom generateInfoSummarize1 <NormalAudio><Artist prefix="(" suffix=")"/><Title prefix=" '" suffix="'" ifempty="[Keine Musikdatei]"/><Album prefix=" vom Album '" suffix="'"/></NormalAudio> <StreamAudio><Sender suffix=":"/><SenderCurrent prefix=" '" suffix="' -"/><SenderInfo prefix=" "/></StreamAudio>
attr Sonos_Bedroom generateInfoSummarize2 <TransportState/><InfoSummarize1 prefix=" => "/>
attr Sonos_Bedroom generateInfoSummarize3 <Volume prefix="Lautstaerke: "/><Mute instead=" ~ Kein Ton" ifempty=" ~ Ton An" emptyval="0"/> ~ Balance: <Balance ifempty="Mitte" emptyval="0"/><HeadphoneConnected instead=" ~ Kopfhoerer aktiv" ifempty=" ~ Kein Kopfhoerer" emptyval="0"/>
attr Sonos_Bedroom getAlarms 1
attr Sonos_Bedroom group Bedroom
attr Sonos_Bedroom icon icoSONOSPLAYER_icon-ZP90.png
attr Sonos_Bedroom minVolume 0
attr Sonos_Bedroom model Sonos_ZP90
attr Sonos_Bedroom room Sonos
attr Sonos_Bedroom stateVariable InfoSummarize2
attr Sonos_Bedroom webCmd Play:Pause:Previous:Next:VolumeD:VolumeU:MuteT
define AlbumArt_Bedroom weblink image /fhem/icons/SONOSPLAYER/Sonos_Bedroom_AlbumArt
attr AlbumArt_Bedroom group Bedroom
attr AlbumArt_Bedroom htmlattr width='200'
attr AlbumArt_Bedroom room Sonos
define Sonos_Living_Room_LF SONOSPLAYER RINCON_000E585B03CC01400_MR
attr Sonos_Living_Room_LF generateInfoSummarize1 <NormalAudio><Artist prefix="(" suffix=")"/><Title prefix=" '" suffix="'" ifempty="[Keine Musikdatei]"/><Album prefix=" vom Album '" suffix="'"/></NormalAudio> <StreamAudio><Sender suffix=":"/><SenderCurrent prefix=" '" suffix="' -"/><SenderInfo prefix=" "/></StreamAudio>
attr Sonos_Living_Room_LF generateInfoSummarize2 <TransportState/><InfoSummarize1 prefix=" => "/>
attr Sonos_Living_Room_LF generateInfoSummarize3 <Volume prefix="Lautstaerke: "/><Mute instead=" ~ Kein Ton" ifempty=" ~ Ton An" emptyval="0"/> ~ Balance: <Balance ifempty="Mitte" emptyval="0"/><HeadphoneConnected instead=" ~ Kopfhoerer aktiv" ifempty=" ~ Kein Kopfhoerer" emptyval="0"/>
attr Sonos_Living_Room_LF getAlarms 1
attr Sonos_Living_Room_LF group Living_Room
attr Sonos_Living_Room_LF icon icoSONOSPLAYER_icon-S5.png
attr Sonos_Living_Room_LF minVolume 0
attr Sonos_Living_Room_LF model Sonos_S5
attr Sonos_Living_Room_LF room Sonos
attr Sonos_Living_Room_LF stateVariable InfoSummarize2
attr Sonos_Living_Room_LF webCmd Play:Pause:Previous:Next:VolumeD:VolumeU:MuteT

Es scheint nun keinen Sonos_Living_Room mehr zu geben, nur noch die entsprecchenden Sonos_Living_Room_*, ich nehm an, um die Gruppe anzusprechen, kann ich einen davon nehmen (tut jedenfalls bei einfachen Tests)

Offline Reinerlein

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2134
Antw:Sonos steuern
« Antwort #565 am: 27 Dezember 2013, 22:58:04 »
Hi Christian,

das mit der Namensgebung muss noch etwas feingeschliffen werden. Da baue ich noch etwas dran rum :-)

Aber prinzipiell hast du recht. Das Modul weiss schon, an wen die Anweisungen gehen müssen. Es müssen nur alle Player in Fhem eine entsprechende Komponente haben.

Grüße
Reiner

Offline John

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1426
Antw:Sonos steuern
« Antwort #566 am: 28 Dezember 2013, 17:28:36 »
Hallo Reiner,

ich hab mit targetSpeakFileHashCache gespielt und folgendes festgestellt:

  • wenn angelegt, lässt es sich nicht mehr ändern, bleibt immer auf 1
  • es lässt sich nicht mehr löschen via "deleteattr"
  • es treten Fehler auf, die ohne targetSpeakFileHashCache nicht auftreten

Zitat
2013.12.28 13:10:11 3: SONOS1: Event: Received Transport-Event for Zone "Sonos_Wohnzimmer".
2013.12.28 13:10:11 3: SONOS1: Event: End of Transport-Event for Zone "Sonos_Wohnzimmer".
2013.12.28 13:10:13 3: SONOS0: Received: 'DoWork:RINCON_000E58CBFB7C01400_MR:speak0:50,de, Der Brenner ist ein'
Argument "DoWork:RINCON_000E58CBFB7C01400_MR:speak0:50,de, Der Bre..." isn't numeric in numeric eq (==) at FHEM/00_SONOS.pm line 1749, <$client> line 2.
Argument "A:undef:targetSpeakFileHashCache:1" isn't numeric in numeric eq (==) at FHEM/00_SONOS.pm line 1762, <$client> line 2.
2013.12.28 13:10:14 3: SONOS1: Load Google generated MP3 from "http://translate.google.com/translate_tts?tl=de&q=Der%20Brenner%20ist%20ein" to "A:undef:targetSpeakFileTimestamp:0/RINCON_000E58CBFB7C01400_MR_Speak.mp3"
2013.12.28 13:10:14 2: SONOS1: Beim Setzen der MP3-Informationen (ID3TagV2) ist ein Fehler aufgetreten: Can't call method "title_set" on an undefined value at FHEM/00_SONOS.pm line 1787, <$client> line 2.

 Beim Ermitteln des Hash-Wertes ist ein Fehler aufgetreten: Can't locate Digest/SHA1.pm in @INC (@INC contains: FHEM/lib FHEM/FHEM/lib ./FHEM/lib ./lib ./FHEM ./ /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 .) at FHEM/00_SONOS.pm line 1751, <$client> line 2.

John

CubieTruck CULV3 MAX HM  Logo  ESP8266 MQTT PID20 HourCounter MaxScanner KostalPiko

Offline Reinerlein

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2134
Antw:Sonos steuern
« Antwort #567 am: 29 Dezember 2013, 02:19:22 »
Hi John,

also das mit dem Löschen der Attribute kann ich nicht nachvollziehen.
Aber die Änderungen an Attributen usw. werden vom Modul auf jeden Fall erst nach einem Neustart übernommen ("save" vorher nicht vergessen).
Ich kann diese Informationen nicht ständig zwischen dem Subprozess und Fhem synchronisieren, sodass ich diese nur einmal (bei der ersten Verwendung) transferiere.

Zu den Fehlermeldungen:
Leider kann ich die Zeilennummern nicht bei mir anwenden. Dazu müsstest du auf die Developer-Version updaten, die meinem lokalen Codestand entspricht.
Aber zu der unteren Fehlermeldung kann ich dir schon was schreiben:
Er vermisst die, für die Generierung des Hash-Werts notwendige, Perl Library "Digest/SHA1.pm". Um die Funktionalität nutzen zu können, musst du diese auf jeden Fall noch installieren.

Wenn du auf die Dev-Version umgestellt hast, bzw. wenn du auf das offizielle Release wartest, nach dem update, kann ich mir die Fehlermeldungen mit deinen dann neuen Zeilennummern anschauen. Dann finden wir die Lösung sicherlich...

Grüße
Reiner

Offline JoeALLb

  • Hero Member
  • *****
  • Beiträge: 1614
Antw:Sonos steuern
« Antwort #568 am: 29 Dezember 2013, 07:48:38 »
Hallo Reiner,

Da mit dem SHA Modul sollte Bitte in der Wiki Doku ergänzt werden,  da bin ich ebenfalls gescheitert. Ich würde Hebel vorschlagen   die benötigten Module gesammelt dort anzugeben,  den das mp3 Info Modul sollte sich leichter auf Auffindbar sein. Ich würde dort sogar auch espeak als optional angeben. Ansonsten freue ich mich sehr über die neue Version und beginne jetzt mit dem Testen. Habe die letzten Änderungen leider noch mitbekommen, irgendwie funktioniert hier die email Benachrichtigung nicht gut dem Forum.
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Offline Reinerlein

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2134
Antw:Sonos steuern
« Antwort #569 am: 29 Dezember 2013, 11:19:46 »
Hi JoeAllb,

das Wiki repräsentiert immer den "offiziellen" Stand, und wird zusammen mit dem Modul aktualisiert. Das bedeutet, dass die "Developer"-Funktionen dort noch nicht dokumentiert sind.

Aber du hast natürlich Recht, und ich werde auf jeden Fall noch die Hinweise bzgl. Digest/Sha einbauen.
Bzgl. espeak habe ich ein Beispiel mit Installationshinweisen im Wiki eingetragen. Ansonsten sollte espeak ja auch nur ein Beispiel sein, und wird dementsprechend nicht in den Standard-Installationshinweisen erwähnt, schließlich kann man ja auch beliebiges anderes verwenden :-)

Wie gesagt, muss nur noch der Test mit den Surround-Systemen abgeschlossen werden, dann wird alles released und damit auch das Wiki aktualisiert...

Grüße
Reiner

 

decade-submarginal