Webseite als geplanten Task starten?
Umlüx 03.05.2022 - 09:17 2442 9
Umlüx
Huge Metal Fan
|
Ich hab hier ein Script, welches einen Sony Bravia TV ein- und ausschalten kann. Das würde ich gerne regelmässig als geplanten Task ausführen lassen um den TV nachts auszuschalten und morgens wieder einzuschalten. Das Problem: Das ist Javascript auf einer Webseite, muss also im Browser aufgerufen werden. Wenn ich aber nun einfach eine Firefox instanz im Taskplaner mit der url starte, bleibt der Browserprozess natürlich zurück... Rufe ich die URL in einem Powershell auf (mit invoke-WebRequest), führt er natürlich das JS nicht aus.
Wie könnte ich das am elegantesten lösen?
|
quilty
Ich schau nur
|
Soll eigentlich mit PhantomJS oder vergleichbaren einfach lösbar sein. Scriptable headless web browser als "Stichwort".
|
daisho
VereinsmitgliedSHODAN
|
Kann man nicht einfach ein Batch-/Command-File starten dass zuerst alle z.B. firefox.exe prozesse killt (taskkill) und danach die URL aufruft (geht das ev. einfach via "start firefox.exe %url%")? Die API oder was auch immer da vom Fernseher via JS angesprochen wird einfach selbst ansprechen via script (müsste man halt wissen wie das aussieht und was das JS genau macht).
|
Umlüx
Huge Metal Fan
|
Möchte ungern einfach alle Prozesse killen, eventuell lässt mal wer eine Seite offen die später noch gebraucht wird.
Soweit ich das erkannt habe wird im Script ein json Paket auf die Rest API vom TV geschickt. Ich dachte auch schon daran, das JS aus dem HTML zu reissen und vom WSH ausführen zu lassen? Die Headless Browser sache sieht aber auch sehr interessant aus. Danke erstmal!
|
JDK
Oberwortwart
|
Einfach das Skript in ein Node.js Skript umbauen und fertig. Wenn’s eh nur ein API Call ist, geht das auch problemlos mit anderen Sprachen.
Hast einen Link zum Skript?
|
quilty
Ich schau nur
|
wenn es immer die gleiche payload ist kannst das json ja auch direkt mit curl an die API schicken
|
EG
thinking with portals
|
Oder einfach ein bash script mit einem curl-Einzeiler, dass du in einen cronjob wirfst? Wirkt weniger komplex als einen headless Browser zu bedienen... ^^"
|
Umlüx
Huge Metal Fan
|
Ist ja nicht so, als hätte ich es vorher nicht selber versucht in PowerShell nachzubauen ![:D](/images/smilies/biggrin.gif) leider bin ich aber am JSON gescheitert, der TV nimmts einfach nicht an. Das Webscript selbst ist eh eher simpel. Ich hab das Sony Script bereits selbst auf das nötige zusammengekürzt. <script>
<?php
// Bravia Power Control
// usage example: [url]http://intranet/tools/braviacontrol/?ip=10.37.100.240&action=poweron[/url]
// actions: poweron, poweroff, powerquery
$ip = $_GET["ip"];
$action = $_GET["action"];
$psk = "1234";
switch($action) {
case "poweron":
echo "send('system', 'setPowerStatus', {status: true});";
break;
case "poweroff":
echo "send('system', 'setPowerStatus', {status: false});";
break;
case "powerquery":
echo "send('system', 'getPowerStatus', {});";
break;
}
?>
function send(service, method, params) {
var ip = "<?php echo $ip;?>";
var psk = "<?php echo $psk;?>";
var xhr = new XMLHttpRequest();
xhr.onload = function() {
var resp = xhr.responseText;
document.write('\nstatus: ' + xhr.status + '\n' + JSON.stringify(JSON.parse(xhr.response), null, ' '))
};
xhr.open('POST', 'http://' + ip + '/sony/' + service);
if (psk) {
xhr.setRequestHeader('X-Auth-PSK', psk);
}
xhr.send(JSON.stringify({
method: method,
version: '1.0',
id: 1,
params: params ? [params] : [],
}));
}
</script>
|
meepmeep
Here to stay
|
wenn ich das skript richtig interpretiert hab sollte das funktionieren: curl -d '{"method":"setPowerStatus","version":"1.0","id":1,"params":[{"status":true}]}' -H "X-Auth-PSK: 1234" -X POST [url]http://[/url]<ip:port>/sony/system
|
Umlüx
Huge Metal Fan
|
Danke dir. Aber anscheinend nicht ganz. "{"error":[5,"Illegal JSON"]}" Genau hier häng ich nämlich auch mit meiner Powershell Version und finde keine Lösung. Edit: geht doch ![:D](/images/smilies/biggrin.gif) Unter Windows muss die JSON Payload anscheinend in doppelte Anführungszeichen. Und danach gehören die Inneren mit Backslash escaped. DANKE!
Bearbeitet von Umlüx am 03.05.2022, 12:39
|