Aktion (REST-Request) auslösen bei (Un)Mute der Lautstäke
Hallo,
leider habe ich im Netz bisher dazu keine Lösung gefunden: Es geht darum unter Windows 10 beim (un)muten eine Shelly-Steckdose per REST-Schnittstelle (http Request) ein- bzw. auszuschalten. Hintergrund ist der, dass die Boxen so alt sind, dass diese im Standby viel zu Stromhungrig sind und auch teilweise brummen.
Im Windows Event Log wird Standard mäßig kein (Un)mute protokolliert, in der Registry habe ich nur diverse "Vol"-Optionen für Volume (Datenträger) gefunden.
Daher die Frage weiß jemand die der Registry-Eintrag heißt? Gibt es evtl. bessere Möglichkeiten die Steckdose zu steuern?
Danke, schon mal für die Hilfe.
leider habe ich im Netz bisher dazu keine Lösung gefunden: Es geht darum unter Windows 10 beim (un)muten eine Shelly-Steckdose per REST-Schnittstelle (http Request) ein- bzw. auszuschalten. Hintergrund ist der, dass die Boxen so alt sind, dass diese im Standby viel zu Stromhungrig sind und auch teilweise brummen.
Im Windows Event Log wird Standard mäßig kein (Un)mute protokolliert, in der Registry habe ich nur diverse "Vol"-Optionen für Volume (Datenträger) gefunden.
Daher die Frage weiß jemand die der Registry-Eintrag heißt? Gibt es evtl. bessere Möglichkeiten die Steckdose zu steuern?
Danke, schon mal für die Hilfe.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1038666047
Url: https://administrator.de/contentid/1038666047
Ausgedruckt am: 21.11.2024 um 23:11 Uhr
18 Kommentare
Neuester Kommentar
Moin,
Gruß
cykes
Zitat von @DonJoe:
leider habe ich im Netz bisher dazu keine Lösung gefunden: Es geht darum unter Windows 10 beim (un)muten eine Shelly-Steckdose per REST-Schnittstelle (http Request) ein- bzw. auszuschalten. Hintergrund ist der, dass die Boxen so alt sind, dass diese im Standby viel zu Stromhungrig sind und auch teilweise brummen.
Vielleicht wäre es einen Gedanken wert, die Boxen mal auzutauschen?leider habe ich im Netz bisher dazu keine Lösung gefunden: Es geht darum unter Windows 10 beim (un)muten eine Shelly-Steckdose per REST-Schnittstelle (http Request) ein- bzw. auszuschalten. Hintergrund ist der, dass die Boxen so alt sind, dass diese im Standby viel zu Stromhungrig sind und auch teilweise brummen.
Im Windows Event Log wird Standard mäßig kein (Un)mute protokolliert, in der Registry habe ich nur diverse "Vol"-Optionen für Volume (Datenträger) gefunden.
In letzteren fummelst Du besser nicht herum Die wesentliche Frage wäre, inwiefern Programmierkenntnisse vorhanden sind bzw. ob Du einen (zentralen) Smarthome-Controller einsetzt?Daher die Frage weiß jemand die der Registry-Eintrag heißt? Gibt es evtl. bessere Möglichkeiten die Steckdose zu steuern?
Die gibt es sicher, aber ohne Programmierkenntnisse wird das wohl nichts werden. Wie bereits oben schon angemerkt, könnte es deutlich weniger Aufwand sein, die Boxen zu tauschen. Gerade Brummschleifen lassen auf billige Verstärker in den (Aktiv)Boxen und/oder minderwertige Kabel schließen.Gruß
cykes
Zitat von @DonJoe:
Hallo,
Hintergrund ist der, dass die Boxen so alt sind, dass diese im Standby viel zu Stromhungrig sind und auch teilweise brummen.
Hallo,
Hintergrund ist der, dass die Boxen so alt sind, dass diese im Standby viel zu Stromhungrig sind und auch teilweise brummen.
Das wäre eher ein Grund die Dinger zu entsorgen und neue stromsparende Boxen zu holen. Das amortisiert sich in ein bis zwei Jahren. Und die Brumschleife wäre damit vermutlich auch weg.
lks
PS. Nimm so einen Schalter (Brennenstuhl Eco Line Comfort Switch Adapter EL CSA 1). Dann klickst Du statt auf "mute" einfach auf den taster.
Moin,
Welche Programmierkenntnisse besitzt Du? Also welche Sprache könntest du anwenden?
Mit dem Wissen kann man dann schauen, welche Schnittstelle in Frage kommen könnte.
Gruß
C.C.
Zitat von @DonJoe:
Ich nutze keinen Smarthome-Controller ich wüsste auch nicht wie mir dieser hier weiter helfen könnte. Meine Programmierkenntnisse sind doch etwas eingerostet, aber hier sehe ich primäre das Problem, der Schnittstellen und Parameter mit denen ich mich nicht auskenne. Austauschboxen seihe oben ^^.
Ich nutze keinen Smarthome-Controller ich wüsste auch nicht wie mir dieser hier weiter helfen könnte. Meine Programmierkenntnisse sind doch etwas eingerostet, aber hier sehe ich primäre das Problem, der Schnittstellen und Parameter mit denen ich mich nicht auskenne. Austauschboxen seihe oben ^^.
Welche Programmierkenntnisse besitzt Du? Also welche Sprache könntest du anwenden?
Mit dem Wissen kann man dann schauen, welche Schnittstelle in Frage kommen könnte.
Gruß
C.C.
Zitat von @DonJoe:
So hoch ist der Stromverbrauch auch nicht, das es nach ein bis zwei Jahren diese Boxen drin sind (Nach-Nachfolger: https://teufel.de/concept-e-450-digital-51-set-104762000
Aber vielleicht kannst Du zumindest die (vermutliche) Brummschleife umgehen/beheben. Teufel hat eine sehr ausführliche Anleitung dazu: https://blog.teufel.de/brummschleife-mein-subwoofer-brummt-was-tun/So hoch ist der Stromverbrauch auch nicht, das es nach ein bis zwei Jahren diese Boxen drin sind (Nach-Nachfolger: https://teufel.de/concept-e-450-digital-51-set-104762000
Ggf. hilft es schon, den PC über optisches Kabel mit dem Sub zu verbinden. Ansonsten ist Dein Lösungsansatz zu speziell, um ohne sich dafür etwas selbst zu programmieren zum Ziel zu gelangen. Den Smarthomecontroller hatte ich nur erwähnt, weil man den ggf. separat programmieren kann und der den Shelly-Schalter steuern kann.
Gruß
cykes
Servus DonJoe,
hier ein Beispiel mit der Powershell wie man Mute-Events live im System registrieren und darauf mit REST-Requests reagieren kann. Die für dich interessanten Zeilen findest du in Zeile 64 und 69. Wenn du diese mit entsprechenden URLs deiner Shellys ersetzt und auskommentierst kannst du das gewünschte erreichen.
Das Skript registriert einen Event-Handler der auf Änderungen der Lautstärke des Default-Ausgabe-Devices reagiert.
Im Eventhandler wird dann die Mute-Variable abgefragt und je nach Änderung des Status deine gewünschte Aktion ausgeführt.
Zur Info: Der Code im Kopf bis Zeile 50 lädt beim ersten Ausführen die für das Skript benötigte naudio.dll aus dem Nuget Repo herunter und lädt das .NET Assembly.
Viel Spaß damit
Grüße Uwe
hier ein Beispiel mit der Powershell wie man Mute-Events live im System registrieren und darauf mit REST-Requests reagieren kann. Die für dich interessanten Zeilen findest du in Zeile 64 und 69. Wenn du diese mit entsprechenden URLs deiner Shellys ersetzt und auskommentierst kannst du das gewünschte erreichen.
Das Skript registriert einen Event-Handler der auf Änderungen der Lautstärke des Default-Ausgabe-Devices reagiert.
Im Eventhandler wird dann die Mute-Variable abgefragt und je nach Änderung des Status deine gewünschte Aktion ausgeführt.
Zur Info: Der Code im Kopf bis Zeile 50 lädt beim ersten Ausführen die für das Skript benötigte naudio.dll aus dem Nuget Repo herunter und lädt das .NET Assembly.
<#
Register audio mute events
#>
# function to load nuget assembly
function Load-NugetAssembly {
[CmdletBinding()]
param(
[string]$url,
[string]$name,
[string]$zipinternalpath,
[switch]$downloadonly
)
# Accept all TLS protocols
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::GetNames([System.Net.SecurityProtocolType])
if($psscriptroot -ne ''){
$localpath = join-path $psscriptroot $name
}else{
$localpath = join-path $env:TEMP $name
}
$tmp = "$env:TEMP\$([IO.Path]::GetRandomFileName())"
$zip = $null
try{
if(!(Test-Path $localpath)){
Add-Type -A System.IO.Compression.FileSystem
write-host "Downloading and extracting required library '$name' ... " -F Green -NoNewline
(New-Object System.Net.WebClient).DownloadFile($url, $tmp)
$zip = [System.IO.Compression.ZipFile]::OpenRead($tmp)
$zip.Entries | ?{$_.Fullname -eq $zipinternalpath} | %{
[System.IO.Compression.ZipFileExtensions]::ExtractToFile($_,$localpath)
}
Unblock-File -Path $localpath
write-host "OK" -F Green
}
if(!$downloadonly.IsPresent){
Add-Type -Path $localpath -EA Stop
}
}catch{
throw "Error: $($_.Exception.Message)"
}finally{
if ($zip){$zip.Dispose()}
if(Test-Path $tmp){del $tmp -Force}
}
}
# load required assembly from nuget
Load-NugetAssembly 'https://www.nuget.org/api/v2/package/NAudio/1.10.0' -name 'naudio.dll' -zipinternalpath 'lib/net35/naudio.dll' -EA Stop
# Get IMM DeviceEnumerator object
$deviceenum = New-Object NAudio.CoreAudioApi.MMDeviceEnumerator
# Get system default audio endpoint
$dev = $deviceenum.GetDefaultAudioEndpoint([NAudio.CoreAudioApi.DataFlow]::Render,[NAudio.CoreAudioApi.Role]::Multimedia)
# forcefully unregister event subscriber
Unregister-Event -SourceIdentifier VolumeChanged -Force -EA SilentlyContinue
# mute state variable to register change
$global:muted = $dev.AudioEndpointVolume.Mute
# register audio change event
Register-ObjectEvent $dev.AudioEndpointVolume OnVolumeNotification -SourceIdentifier VolumeChanged -Action {
if (!$global:muted -and $event.SourceArgs.Muted){
write-host "Device muted." -F Green
# here place your rest method e.g.
# Invoke-RestMethod 'http://192.168.xxx.xxx/relay/0?turn=off'
$global:muted = $true
}elseif(!$event.SourceArgs.Muted -and $global:muted){
write-host "Device unmuted." -F Green
# here place your rest method e.g.
# Invoke-RestMethod 'http://192.168.xxx.xxx/relay/0?turn=on'
$global:muted = $false
}
} | out-null
cls
write-host "Waiting for audio mute events ..." -F Green
while($true){
sleep .5
}
Grüße Uwe
Zitat von @DonJoe:
Jetzt werde ich nur noch den DL ersetzen damit ich von der Verfügbarkeit der der dll unabhängig bin.
Das macht die Funktion schon automatisch sie prüft ob die DLL bereits im Script-Verzeichnis liegt und nur wenn nicht wird sie heruntergeladen .Jetzt werde ich nur noch den DL ersetzen damit ich von der Verfügbarkeit der der dll unabhängig bin.
Ist doch etwas mehr Code als ich dachte *g* DANKE.
Das Interessante ist ja eh erst ab Zeile 50, der Rest ist "Gerüst" damit's jeder ohne selbst den Download anzustoßen direkt ausprobieren kann .Zitat von @DonJoe:
Hallo, ich habe inzwischen leider feststellen müssen, dass das Skript mehr als einen ganzen(!) CPU Kern auslastet. Kann man das noch beheben, wenn ja wie? Ich komme auf einen Stromverbrauch von rund 7,84W wenn ich die TDP im Verhältnis zu Auslastung setze.
Hallo, ich habe inzwischen leider feststellen müssen, dass das Skript mehr als einen ganzen(!) CPU Kern auslastet. Kann man das noch beheben, wenn ja wie? Ich komme auf einen Stromverbrauch von rund 7,84W wenn ich die TDP im Verhältnis zu Auslastung setze.
Du brauchst ja nicht jede halbe Sekunde (wie oben im Skript) die Events abfragen 😉, das war ja nur ein Beispiel, einfach den Sleep Wert in der Schleife erhöhen.
Hier sonst keine Probleme mit der Auslastung, die bleibt unter ferner liefen, ist ja nun wirklich nichts weltbewegendes.
Nein das ist kein Bug, das ist schon lange bekannt und nennt sich busy waiting bzw. spinning. Denn auch bei einer Schleife die nichts weiter tut muss der Prozessor eine Variable erhöhen und belegt somit CPU Zeit, je geringer der Sleep desto weniger CPU-Zeit bleibt anderen Prozessen.
Zitat von @DonJoe:
In zwischen konnte ich ein bisschen Praxiserfahrung sammeln. Leider vergesse ich zu häufig, das Muten. Gibt es eine Möglichkeit wenn kein Audiosignal anliegt nach x- Minuten/Sekunden die Boxen auszuschalten und sobald ein Audio Signal kommt wieder ein?
Ja, kein Problem, mach ich dir gerne als Auftragsarbeit fertig => PN, hat ja nichts mehr mit der ursprünglichen Fragestellung zu tun.In zwischen konnte ich ein bisschen Praxiserfahrung sammeln. Leider vergesse ich zu häufig, das Muten. Gibt es eine Möglichkeit wenn kein Audiosignal anliegt nach x- Minuten/Sekunden die Boxen auszuschalten und sobald ein Audio Signal kommt wieder ein?