Also mittels externem PowerShell-Script funktioniert es zwar, ist aber wie vermutet extrem zäh:
Code:
^Volume_Up::
Run, pwsh -NoProfile C:\test\pioneer-send-message.ps1 -InputObject "VU`r"
return
^Volume_Down::
Run, pwsh -NoProfile C:\test\pioneer-send-message.ps1 -InputObject "VD`r"
return
Code:
param(
[Parameter(Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)]
$InputObject
)
function set-avr()
{
[CmdletBinding()]
param (
[Parameter(Position = 0)]
[string]
$RemoteHost = "10.2.0.1",
[Parameter(Position = 1)]
[int]
$Port = 8102,
[Parameter(Position = 2, Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)]
$InputObject,
[Parameter()]
[int]
$DelayMs = 100
)
begin
{
$remoteString = "$($RemoteHost):$($Port)"
Write-Verbose "Connecting socket to '$remoteString'"
$socket = New-Object System.Net.Sockets.TcpClient($RemoteHost, $Port)
$stream = $socket.GetStream()
$reader = New-Object System.IO.StreamReader( $stream )
$writer = New-Object System.IO.StreamWriter( $stream )
$buffer = New-Object System.Byte[] 8192
$encoding = New-Object System.Text.ASCIIEncoding
$writer.Write( "`r" )
$writer.Flush()
}
process
{
Write-Verbose "Writing message to socket connected to '$remoteString'"
$InputObject | Format-Hex | Out-Host
$writer.Write( $InputObject )
$writer.Flush()
Start-Sleep -Milliseconds $DelayMs
}
end
{
Write-Verbose "Closing writer..."
$writer.Close()
Write-Verbose "Closing reader..."
$reader.Close()
Write-Verbose "Closing socket..."
$socket.Close()
}
}
$InputObject | set-avr -Verbose 2>&1 3>&1 4>&1 5>&1 | Tee-Object -FilePath "$PSScriptRoot\log.$((Get-Date).ToFileTime()).txt" -Append
Start-Sleep -Seconds 60
Die Befehle kommen mit ein paar Millisekunden bis Sekunden Verzögerung an und ich kann es auf dem Weg auch nicht direkt steuern. So wird bei jeder Betätigung halt wie gesagt die Konsole geöffnet, der Interpreter gestartet, das Script geladen, ggf. weitere Module, die Verbindung hergestellt, der AVR aufgeweckt und die Kommandos versendet. Die Verzögerung hierbei ist einfach zu hoch, zumal mein Pioneer laut Manual auch zwischen den Befehlen 100 ms Verzögerung benötigt.
Auch verwirft der AVR auf dem Weg manche Pakete. Beispielsweise war die Lautstärke bei -51,5 dB, hab das Rad gedreht, 7 Events sind getriggert worden. Endresultat war nach ein paar Sekunden -54 dB. Heißt der AVR hat lediglich 5 Events registriert, der Rest wurde verworfen. Die Schrittweite ist jeweils 0,5 dB.
Code:
$ (,"VD`r")*4 | .\pioneer-send-message.ps1
Läuft dagegen natürlich zuverlässig, da die Nachrichten ordentlich versendet werden. Das kann ich aber nicht mit AutoHotkey realisieren.
luckysh0t schrieb:
Evtl. ist Script Runner was für dich.
Meinst du
https://www.scriptrunner.com/en/? Kostet wohl etwas. Wurde außerdem von Microsoft in Power Automate integriert.
kuddlmuddl schrieb:
Ka ob das zu deinem Setup passt - ich hab mein Soundsystem einfach "laut genug" eingestellt und regel dann unter Windows einfach leiser.
Hab ich öfter mal bei Kumpels gesehen, mag ich aber nicht. Würde auch nicht klappen, da manchmal VoiceMeter (zum Upmix) dazwischenhängt, welches die Lautstärke ignoriert.
Ich bastel mir grad was auf PowerShell-Basis. Muss nur schauen, wie ich am dümmsten die Global Hotkeys registriere...