4 126 läst ·
56 svar
4k läst
56 svar
Skapa en batch-fil för att köra ett script
D Derbyboy skrev:
Vad blir det om du vid prompten skriverD Derbyboy skrev:
curl -s "http://192.168.0.92/httpapi.asp?command=IOSimuread:2"
/Höghus
Jag tror dock att jag hittat en lösning. Står högtalaren inställd på BT så störs den inte av att jag skickat kommandot slå på BT (som även fungerar som slå på högtalaren med ingången BT). Det innebär alltså att jag kan skicka anropet "slå på BT" trots att högtalaren redan står på BT.
Den enda gången som högtalaren inte ska slå över till BT är när den spelar upp material via airplay. För att ta reda på om högtalaren spelar upp material via airplay kan jag skicka frågan:
http://192.168.0.92/httpapi.asp?command=getPlayerStatus
Jag får följande svar om högtalaren spelar upp via airplay:
{"type":"0","ch":"0","mode":"41","loop":"3","eq":"0","status":"play","curpos":"135991","offset_pts":"0","totlen":"383760","Title":"556E6B6E6F776E","Artist":"556E6B6E6F776E","Album":"556E6B6E6F776E","alarmflag":"0","plicount":"0","plicurr":"0","vol":"46","mute":"0"}
Jag får följande svar om högtalaren inte spelar upp via airplay:
{"type":"0","ch":"0","mode":"41","loop":"3","eq":"0","status":"stop","curpos":"135991","offset_pts":"0","totlen":"383760","Title":"556E6B6E6F776E","Artist":"556E6B6E6F776E","Album":"556E6B6E6F776E","alarmflag":"0","plicount":"0","plicurr":"0","vol":"46","mute":"0"}
1) Det innebär att jag kan skicka frågan: (http://192.168.0.92/httpapi.asp?command=getPlayerStatus)
2) Står det "stop" i svaret så
3) Skicka växla till BT (http://192.168.0.92/httpapi.asp?command=setPlayerCmd:switchmode:bluetooth)
Den enda gången som högtalaren inte ska slå över till BT är när den spelar upp material via airplay. För att ta reda på om högtalaren spelar upp material via airplay kan jag skicka frågan:
http://192.168.0.92/httpapi.asp?command=getPlayerStatus
Jag får följande svar om högtalaren spelar upp via airplay:
{"type":"0","ch":"0","mode":"41","loop":"3","eq":"0","status":"play","curpos":"135991","offset_pts":"0","totlen":"383760","Title":"556E6B6E6F776E","Artist":"556E6B6E6F776E","Album":"556E6B6E6F776E","alarmflag":"0","plicount":"0","plicurr":"0","vol":"46","mute":"0"}
Jag får följande svar om högtalaren inte spelar upp via airplay:
{"type":"0","ch":"0","mode":"41","loop":"3","eq":"0","status":"stop","curpos":"135991","offset_pts":"0","totlen":"383760","Title":"556E6B6E6F776E","Artist":"556E6B6E6F776E","Album":"556E6B6E6F776E","alarmflag":"0","plicount":"0","plicurr":"0","vol":"46","mute":"0"}
1) Det innebär att jag kan skicka frågan: (http://192.168.0.92/httpapi.asp?command=getPlayerStatus)
2) Står det "stop" i svaret så
3) Skicka växla till BT (http://192.168.0.92/httpapi.asp?command=setPlayerCmd:switchmode:bluetooth)
Statusen "play" i svaret på getPlayerStatus betyder inte att det är just airplay som används utan bara att något spelas. Om det är viktigt att det är just airplay måste du även kolla "mode" som då måste vara "1".D Derbyboy skrev:Jag tror dock att jag hittat en lösning. Står högtalaren inställd på BT så störs den inte av att jag skickat kommandot slå på BT (som även fungerar som slå på högtalaren med ingången BT). Det innebär alltså att jag kan skicka anropet "slå på BT" trots att högtalaren redan står på BT.
Den enda gången som högtalaren inte ska slå över till BT är när den spelar upp material via airplay. För att ta reda på om högtalaren spelar upp material via airplay kan jag skicka frågan:
[länk]
Jag får följande svar om högtalaren spelar upp via airplay:
{"type":"0","ch":"0","mode":"41","loop":"3","eq":"0","status":"play","curpos":"135991","offset_pts":"0","totlen":"383760","Title":"556E6B6E6F776E","Artist":"556E6B6E6F776E","Album":"556E6B6E6F776E","alarmflag":"0","plicount":"0","plicurr":"0","vol":"46","mute":"0"}
Jag får följande svar om högtalaren inte spelar upp via airplay:
{"type":"0","ch":"0","mode":"41","loop":"3","eq":"0","status":"stop","curpos":"135991","offset_pts":"0","totlen":"383760","Title":"556E6B6E6F776E","Artist":"556E6B6E6F776E","Album":"556E6B6E6F776E","alarmflag":"0","plicount":"0","plicurr":"0","vol":"46","mute":"0"}
1) Det innebär att jag kan skicka frågan: ([länk])
2) Står det "stop" i svaret så
3) Skicka växla till BT ([länk])
Men det kanske inte spelar någon roll för dig.
Jag antar med värdet på "mode" i det läge där du "inte spelar upp via airplay" att du inte bara stoppat airplay utan även satt den till blåtand, för där är "mode" "41" vilket betyder just blåtand.
Allt detta från 2.3.1 i http://airscope-audio.net/core2/pdf/airscope-module-http.pdf
Vet inte om du fått till det än, men det borde bli ungefär såhär i Powershell.
"Hämtar status och skriv ut svar"
$reply = Invoke-WebRequest -uri "http://192.168.0.92/httpapi.asp?command=getPlayerStatus"
$reply.content
"Konvertera från Json och skriv ut"
$nonJson = $reply.content | ConvertFrom-Json
$nonjson
"Undersök status och mode"
if($nonjson.status -eq "stop" -and $nonjson.mode -eq "1")
{
"airplay & stop"
Invoke-WebRequest -uri "http://192.168.0.92/httpapi.asp?command=setPlayerCmd:switchmode:bluetooth"
}
elseif($nonjson.status -eq "play" -and $nonjson.mode -eq "1")
{
"Airplay & Play, gör inget...."
}
elseif($nonjson.mode -eq "41")
{
"Bluetooth & " + $nonjson.status
}
"Hämtar status och skriv ut svar"
$reply = Invoke-WebRequest -uri "http://192.168.0.92/httpapi.asp?command=getPlayerStatus"
$reply.content
"Konvertera från Json och skriv ut"
$nonJson = $reply.content | ConvertFrom-Json
$nonjson
"Undersök status och mode"
if($nonjson.status -eq "stop" -and $nonjson.mode -eq "1")
{
"airplay & stop"
Invoke-WebRequest -uri "http://192.168.0.92/httpapi.asp?command=setPlayerCmd:switchmode:bluetooth"
}
elseif($nonjson.status -eq "play" -and $nonjson.mode -eq "1")
{
"Airplay & Play, gör inget...."
}
elseif($nonjson.mode -eq "41")
{
"Bluetooth & " + $nonjson.status
}
Tusen tack hörrni! Efter två nätters klippa, klistra och googla så kroknade jag. Men segerns sötma smakar gott och den vill dela med er eftersom det var ni som serverade.....
Som sagt ovan så lyckades jag skriva (läs klipp o klistra) ihop en batch som skrev ut resultatet och insåg ganska snabbt att det var fel väg att gå så jag gick tillbaka till powershell-kodsnutten från tidigare och modifiera lite för att det skulle fungera att hämta ut "stop" (hämtar även "paus" från anropet: http://192.168.0.92/httpapi.asp?command=getPlayerStatus. Just det anropet lämnar ju ett väldigt långts svar.
Såhär är koden just nu:
To-do
1) Långtidstesta
2)Det är orimligt att köra en windowsburk bara för det här powershellscriptet. drar för många watt för att det ska gå ihop sig ekonomiskt. Det bästa vore att kunna få ner koden (möjligen då i annat språk) på en arduino, Homey elelr något annat som antingen redan står på elelr som drar lite ström
Som sagt ovan så lyckades jag skriva (läs klipp o klistra) ihop en batch som skrev ut resultatet och insåg ganska snabbt att det var fel väg att gå så jag gick tillbaka till powershell-kodsnutten från tidigare och modifiera lite för att det skulle fungera att hämta ut "stop" (hämtar även "paus" från anropet: http://192.168.0.92/httpapi.asp?command=getPlayerStatus. Just det anropet lämnar ju ett väldigt långts svar.
Såhär är koden just nu:
To-do
1) Långtidstesta
2)Det är orimligt att köra en windowsburk bara för det här powershellscriptet. drar för många watt för att det ska gå ihop sig ekonomiskt. Det bästa vore att kunna få ner koden (möjligen då i annat språk) på en arduino, Homey elelr något annat som antingen redan står på elelr som drar lite ström
R RoAd skrev:Statusen "play" i svaret på getPlayerStatus betyder inte att det är just airplay som används utan bara att något spelas. Om det är viktigt att det är just airplay måste du även kolla "mode" som då måste vara "1".
Men det kanske inte spelar någon roll för dig.
Jag antar med värdet på "mode" i det läge där du "inte spelar upp via airplay" att du inte bara stoppat airplay utan även satt den till blåtand, för där är "mode" "41" vilket betyder just blåtand.
Allt detta från 2.3.1 i [länk]
Efetrsom högtalaren inte bryr sig om att jag skickar "växla till BT" om den står i BT så kan jag skicka anropet även då. Det innebär att jag kan skicka "växla till BT" hela tiden förutom när den står på "play" för då skulle det ju kunna vara annat matrial som spelas upp.
F
fredrik.johansson
Husägare
· Skåne
· 1 767 inlägg
fredrik.johansson
Husägare
- Skåne
- 1 767 inlägg
Nu har du ju en färdig powershell-lösning men jag hade nog satsat på ett bashscript att köra under linux istället. Då är det inga problem att köra den från en raspberry pi eller en gammal router som ligger och skräpar (om den används är det ju ännu bättre!)
Jag har använt asusrouters flera gånger för såna här små projekt. Man får börja med att lägga in ddwrt eller openwrt på routern (finns varianter till massor av routers), sen går det fint att få den att köra ett script med hjälp av cron var 10:e minut eller vad som är lämpligt.
OT: För många år sedan hade jag inget eget bredbandsabonnemang några månader eftersom jag skulle flytta inom kort, men bodde ovanpå ett dagis med stadens öppna gästwifi tillgängligt. Tyvärr blev man utloggad vid inaktivitet med ojämna mellanrum så det var ganska irriterande. Jag skrev ett liknande script som loggade in routern på gästnätet med curl, pingade en server några gånger i timmen och förnyade ip-adressen tidigt varje morgon. Då behöll den uppkopplingen helt perfekt! Detta kördes på en redan då gammal asus wl-500g och ddwrt. Samma router lever fortfarande med openwrt i garaget och loggade temperaturer från ett 1-wirenät senast för något år sedan.
Jag har använt asusrouters flera gånger för såna här små projekt. Man får börja med att lägga in ddwrt eller openwrt på routern (finns varianter till massor av routers), sen går det fint att få den att köra ett script med hjälp av cron var 10:e minut eller vad som är lämpligt.
OT: För många år sedan hade jag inget eget bredbandsabonnemang några månader eftersom jag skulle flytta inom kort, men bodde ovanpå ett dagis med stadens öppna gästwifi tillgängligt. Tyvärr blev man utloggad vid inaktivitet med ojämna mellanrum så det var ganska irriterande. Jag skrev ett liknande script som loggade in routern på gästnätet med curl, pingade en server några gånger i timmen och förnyade ip-adressen tidigt varje morgon. Då behöll den uppkopplingen helt perfekt! Detta kördes på en redan då gammal asus wl-500g och ddwrt. Samma router lever fortfarande med openwrt i garaget och loggade temperaturer från ett 1-wirenät senast för något år sedan.
Klicka här för att svara

