4 126 läst ·
56 svar
4k läst
56 svar
Skapa en batch-fil för att köra ett script
Sådär!
Det är alltså först frågan som behöver ställas (är stereon on (1) eller off (0)).
Jag tänker att det enklaste just nu blir att få ihop bara en fråga och sen beroende på svar (1 elller 0) så händer olika saker.
1 = Stereon är igång ingenting behöver göras
0 = Stereon är avstängd då behöver följande skickas:
http://192.168.0.92/httpapi.asp?command=setPlayerCmd:switchmode:bluetooth
Det är alltså först frågan som behöver ställas (är stereon on (1) eller off (0)).
Jag tänker att det enklaste just nu blir att få ihop bara en fråga och sen beroende på svar (1 elller 0) så händer olika saker.
1 = Stereon är igång ingenting behöver göras
0 = Stereon är avstängd då behöver följande skickas:
http://192.168.0.92/httpapi.asp?command=setPlayerCmd:switchmode:bluetooth
Att börja kludda med annat än Powershell på Windows för detta är helt onödigt, enda anledningen skulle vara att man behärskar ett annat språk väldigt bra eller har en färdig lösning och inte har tid/klarar av att göra om det i Powershell.
Jag skulle kolla på Invoke-RestMethod för detta.
https://docs.microsoft.com/en-us/po...od?view=powershell-7&WT.mc_id=DOP-MVP-5003674
Jag skulle kolla på Invoke-RestMethod för detta.
https://docs.microsoft.com/en-us/po...od?view=powershell-7&WT.mc_id=DOP-MVP-5003674
Prova att spara detta i en fil på skrivbordet som heter tex speakers.bat och dubbelklicka sedan på den
@echo off
set URL=http://192.168.0.92/httpapi.asp?command=
set COMMANDQ=IOSimuread:2
set COMMANDON=setPlayerCmd:switchmode:bluetooth
:WHILE
timeout /t 600
for /f "tokens=2" %%i in ('curl %URL%%COMMANDQ%') do set RESULT= %%i
if %RESULT% == 0 call SWITCHON
goto WHILE
:EndWhile
:SWITCHON
curl %URL%%COMMANDON%
goto :EOF
/Höghus
@echo off
set URL=http://192.168.0.92/httpapi.asp?command=
set COMMANDQ=IOSimuread:2
set COMMANDON=setPlayerCmd:switchmode:bluetooth
:WHILE
timeout /t 600
for /f "tokens=2" %%i in ('curl %URL%%COMMANDQ%') do set RESULT= %%i
if %RESULT% == 0 call SWITCHON
goto WHILE
:EndWhile
:SWITCHON
curl %URL%%COMMANDON%
goto :EOF
/Höghus
Svaret är i formatet json. Det hanteras automatiskt av powershells Invoke-RestMethod och omvandlas till användbara objekt så det är mycket vunnet om man kan använda det.D Derbyboy skrev:Jag har försökt att få till detta av och till i snart tre år, varit i kontakt med audio pros support mm. Högtalarna lyssnar på anropen som finns här:
[länk]
För att fråga högtalarna om de är on eller off skickar jag idag följande från webläsaren:
[länk]
Högtalaren svarar 1 om den är på och 0 om den är avstängd.
Nästa fråga som behöver ställas är:
[länk]
högtalaren svarar:
{"type":"0","ch":"0","mode":"41","loop":"0","eq":"0","status":"stop","curpos":"24000","offset_pts":"0","totlen":"383000","Title":"556E6B6E6F776E","Artist":"556E6B6E6F776E","Album":"556E6B6E6F776E","alarmflag":"0","plicount":"0","plicurr":"0","vol":"50","mute":"0"}
i svaret är det Mode och status som är relevanta. Mode 41 är inte BT.
Jag bara gissar att även det första svaret borde vara json om nu det andra är det. Då måste det parsas först.Höghus skrev:
Prova att spara detta i en fil på skrivbordet som heter tex speakers.bat och dubbelklicka sedan på den
@echo off
set URL=[länk]
set COMMANDQ=IOSimuread:2
set COMMANDON=setPlayerCmd:switchmode:bluetooth
:WHILE
timeout /t 600
for /f "tokens=2" %%i in ('curl %URL%%COMMANDQ%') do set RESULT= %%i
if %RESULT% == 0 call SWITCHON
goto WHILE
:EndWhile
:SWITCHON
curl %URL%%COMMANDON%
goto :EOF
/Höghus
Bästa svaret
Ungefär såhär då.
$reply = invoke-webrequest -uri "http://192.168.0.92/httpapi.asp?command=IOSimuRead:2"
$reply #skriver ut svaret
if($reply.content -eq "2,0")
{
# försök slå igång stereon och skriv ut svaret
$reply2 = invoke-webrequest -uri "http://192.168.0.92/httpapi.asp?command=setPlayerCmd:switchmode:bluetooth"
$reply2
}
$reply = invoke-webrequest -uri "http://192.168.0.92/httpapi.asp?command=IOSimuRead:2"
$reply #skriver ut svaret
if($reply.content -eq "2,0")
{
# försök slå igång stereon och skriv ut svaret
$reply2 = invoke-webrequest -uri "http://192.168.0.92/httpapi.asp?command=setPlayerCmd:switchmode:bluetooth"
$reply2
}
Fnuttar är viktiga.
REM @echo off
set "URL=http://192.168.0.92/httpapi.asp?command="
set COMMANDQ=IOSimuread:2
set COMMANDON=setPlayerCmd:switchmode:bluetooth
:WHILE
timeout /t 30
for /f "tokens=2" %%i in ('curl "%URL%%COMMANDQ%"') do set RESULT= %%i
if %RESULT% == 0 call SWITCHON
goto WHILE
:EndWhile
:SWITCHON
curl "%URL%%COMMANDON%"
goto :EOF
/Höghus
REM @echo off
set "URL=http://192.168.0.92/httpapi.asp?command="
set COMMANDQ=IOSimuread:2
set COMMANDON=setPlayerCmd:switchmode:bluetooth
:WHILE
timeout /t 30
for /f "tokens=2" %%i in ('curl "%URL%%COMMANDQ%"') do set RESULT= %%i
if %RESULT% == 0 call SWITCHON
goto WHILE
:EndWhile
:SWITCHON
curl "%URL%%COMMANDON%"
goto :EOF
/Höghus
0,2 är inte json-format. Det saknas måsvingar och diverse jox.R RoAd skrev:
Här kan du se om det är json-syntax JSON Online Validator and Formatter - JSON Lint
/Höghus
Det ser ut att vara tecknet = som försvinner i scriptet. Se 3:e raden från slutet, sista skärmbilden.D Derbyboy skrev:
Förslag. Ändra rad 2 och 8. Flytta =
2: set URL=http://192.168.0.92/httpapi.asp?command=
8: for /f "tokens=2" %%i in ('curl %URL%%COMMANDQ%') do set RESULT= %%i.
till där textsträngen sätts ihop
2: set URL=http://192.168.0.92/httpapi.asp?command
8: for /f "tokens=2" %%i in ('curl %URL%=%COMMANDQ%') do set RESULT= %%i
Edit: Lite sen med det svaret...
Redigerat:
Jag antog att det var p.g.a. kommandot som användes för att hämta svaret. Vissa av dem (exempelvis Invoke-RestMethod) verkar automatiskt parsa json.Höghus skrev:
Output som visas sist i #14 är i.a.f. json. Lustigt om de blandat det med annat i samma API.
APIt verkar vara detta, eller en variant av det: http://airscope-audio.net/core2/pdf/airscope-module-http.pdf
Men jag ska inte lägga mig i för mycket. Har aldrig skrivit en rad i powershell och jobbar nästan uteslutande i Linux.
EDIT: IOSimu* anropen verkar vara någon form av direktaccess till GPIOs och verkar mycket riktigt inte vara i JSON-format. Så det är tydligen lite blandat.
Testade din rad 8 innan jag hittade att dubbelfnuttar funkar. Dos rensar bort = inom parenteserna om man inte dubbelfnuttar miljövariabeln. Och curl hade inget emot dubbelfnuttar som tur var.blackarrow skrev:
Det ser ut att vara tecknet = som försvinner i scriptet. Se 3:e raden från slutet, sista skärmbilden.
Förslag. Ändra rad 2 och 8. Flytta =
2: set URL=[länk]=
8: for /f "tokens=2" %%i in ('curl %URL%%COMMANDQ%') do set RESULT= %%i.
till där textsträngen sätts ihop
2: set URL=[länk]
8: for /f "tokens=2" %%i in ('curl %URL%=%COMMANDQ%') do set RESULT= %%i
Edit: Lite sen med det svaret...![]()
/Höghus




