Hi.
Da ich meinen PC gerne über ioBroker booten und herunterfahren möchte, habe ich mir ein keines Script geschrieben, dass es mir ermöglicht über WOL zu booten und über einen HTTP GET request ein shutdown
Befehl auszuführen.
Das Script kann beliebig erweitert werden und es können somit beliebig viele Systembefehle ausgeführt werden!
Als voraussetzung hierfür ist nur ein Mainboard das WOL unterstützt und ein installierter Web server.
Am einfachsten ist es ihr installiert XAMPP mit der minimalinstallation (nur Apache) und lässt dann Apache als Dienst laufen. Somit bekommt ihr nichts davon mit.
Im webroot (htdocs) müsst ihr ein .php file (z.b. index.php) mit den folgenden Inhalt erstellen:
<?php
if (isset($_GET['cmd'])) {
switch ($_GET['cmd']) {
case 'info': echo('info'); break;
case 'shutdown': exec('shutdown -s -f -t 0'); break;
}
}
?>
In der script Engine erstellt ihr ein neues Javascript mit folgenden Inhalt:
var wol = require('wake_on_lan');
var ping = require('ping');
const objTarget = 'pc.0.power';
const ip = '192.168.0.XXX';
const macAddr = 'XX:XX:XX:XX:XX:XX';
const pollingInterval = 10000;
createState(objTarget, false, {
read: false,
write: true,
desc: 'PC Power switch',
type: 'boolean',
def: false
});
function sendRequest(cmd) {
try {
var request = require('sync-request');
var result = request(
'GET',
'http://'+ip+'/index.php?cmd='+cmd,
{ timeout: 10000 }
);
if (!result.error && result.statusCode) {
return result.body;
}
} catch(e) {}
return 'error';
}
setInterval(function () {
ping.sys.probe(ip, function(isAlive) {
setState(objTarget, isAlive, true);
});
}, pollingInterval);
on({ id: 'javascript.0'+objTarget, change: 'any', ack: false }, function (obj) {
if (obj.state.val == false) {
sendRequest('shutdown');
log('powered off '+objTarget, 'info');
} else {
wol.wake(macAddr);
log('powered on '+objTarget, 'info');
}
});
Ihr müsst die Module sync-request
, ping
und wake_on_lan
in den settings der Script Engine hinzufügen, damit sie auch geladen werden undverfügbar sind (Instanz einstellungen).
Schlussendlich könnt ihr mit dem Objekt javascript.0.pc.0.power (wie im Javascript file festgelegt) erstellen um den State zu triggern.
Wie gesagt, es ist möglich das Ganze zu erweitern und es können noch parameter für die Befehle hinzugefügt werden usw...