D Derbyboy skrev:
Tyvärr ingen skillnad
Du sparade nog aldrig filen, inget -s i körningen

/Höghus
 
D
vet inte vad som hände....

men tyvärr inget resultat
 
  • Skärmdump av en kommandoprompt med ett skript som inte ger önskat resultat.
    Inloggade ser högupplösta bilder
    Skapa konto
    Gratis och tar endast 30 sekunder
D Derbyboy skrev:
vet inte vad som hände....

men tyvärr inget resultat
D Derbyboy skrev:
vet inte vad som hände....

men tyvärr inget resultat
Vad blir det om du vid prompten skriver
curl -s "http://192.168.0.92/httpapi.asp?command=IOSimuread:2"


/Höghus
 
D
återkommer ikväll :)
 
D
Sådär!

Jag lyckades tillslut skapa en loggfil för att se hur svaren från högtalaren lämnades. Tyvärr tycks det inte finnas något mönster som jag kan utnyttja i frågeställningen. Såhär blev den fungerande koden tillslut:

Skärmbild av datorskript som genererar en loggfil med kodrader i en textredigerare.
 
D
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)
 
R
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])
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 http://airscope-audio.net/core2/pdf/airscope-module-http.pdf
 
  • Gilla
Derbyboy
  • Laddar…
Unikt namn
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
}
 
D
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:

Skärmbild av PowerShell-skriptkod som använder webbegäran för att styra mediauppspelning.

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
 
D
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.
 
  • Gilla
RoAd
  • Laddar…
F
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.
 
Nu mörkade ju du dina förkunskaper lite, så kanske termux och bash på en Androidtelefon kan lösa uppgiften.

/Höghus
 
Klicka här för att svara
Vi vill skicka notiser för ämnen du bevakar och händelser som berör dig.