NEWS
PC Booten / Herunterfahren und Befehle ausführen (v2)
-
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 shutdownBefehl 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,pingundwake_on_lanin 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... -
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 shutdownBefehl 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,pingundwake_on_lanin 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...@schreda
Hey, k
ö
nntest du das bitte etwas verst
ä
ndlicher f
ü
r anf
ä
nger erkl
ä
ren.
ü
ber WOL kann ich mein PC schon anmachen.
Das ausmachen klappt leider nicht so..1.Ich habe den XAMPP Apache Server Installiert ( Hier in der installation bei service nur apache ausgew
ä
hlt)
2. Dann hab ich die index.php mit editor ge
ä
ndert so wies oben steht.
Apache Server Starten
3. Das Script in auf Common eingef
ü
gt ( IP und Mac vom PC eingetragen)
Wenn ich das Script dann ausf
ü
hre bekomme ich folgenden Fehler05:28:50.261 [error] javascript.0 script.js.common.Shutdown: Error: Cannot find module '/opt/iobroker/node_modules/iobroker.javascript/node_modules/sync-request' 05:28:50.261 [error] javascript.0 at sendRequest (script.js.common.Shutdown:15:23) 05:28:50.261 [error] javascript.0 at updateState (script.js.common.Shutdown:32:21) 05:28:50.261 [error] javascript.0 at Object. (script.js.common.Shutdown:40:26)hat wahrscheinlich mit Punkt 4 zu tun
4. "Ihr m
ü
sst die Module sync-request und wake_on_lan in den settings der Script Engine hinzuf
ü
gen, damit sie auch geladen werden unverf
ü
gbar sind." steh hier iwie aufem schlauch? Wie muss ich das jetzt einf
ü
gen? werd bestimmt f
ü
ndig aber dann erst nach 10 Stunden
5.Das "Objekt" habe ich im IoBroker im Cloud Adapter angelegt hier dann das eingef
ü
gte Script aus Common ausgew
ä
hlt. - in Alexa dann nach neue Ger
ä
ten suchen und den Adapter ausprobieren-Wie f
ü
ge ich weitere befehle ein?
Wird mir irgendwie aus dem Script nicht ersichtlich wo ich da jetzt Beispielweise den Befehl f
ü
r den Ruhezustand also "rundll32.exe powrprof.dll,SetSuspendState" einf
ü
gen soll?Danke f
ü
r die Hilfe!! -
@schreda
Hey, k
ö
nntest du das bitte etwas verst
ä
ndlicher f
ü
r anf
ä
nger erkl
ä
ren.
ü
ber WOL kann ich mein PC schon anmachen.
Das ausmachen klappt leider nicht so..1.Ich habe den XAMPP Apache Server Installiert ( Hier in der installation bei service nur apache ausgew
ä
hlt)
2. Dann hab ich die index.php mit editor ge
ä
ndert so wies oben steht.
Apache Server Starten
3. Das Script in auf Common eingef
ü
gt ( IP und Mac vom PC eingetragen)
Wenn ich das Script dann ausf
ü
hre bekomme ich folgenden Fehler05:28:50.261 [error] javascript.0 script.js.common.Shutdown: Error: Cannot find module '/opt/iobroker/node_modules/iobroker.javascript/node_modules/sync-request' 05:28:50.261 [error] javascript.0 at sendRequest (script.js.common.Shutdown:15:23) 05:28:50.261 [error] javascript.0 at updateState (script.js.common.Shutdown:32:21) 05:28:50.261 [error] javascript.0 at Object. (script.js.common.Shutdown:40:26)hat wahrscheinlich mit Punkt 4 zu tun
4. "Ihr m
ü
sst die Module sync-request und wake_on_lan in den settings der Script Engine hinzuf
ü
gen, damit sie auch geladen werden unverf
ü
gbar sind." steh hier iwie aufem schlauch? Wie muss ich das jetzt einf
ü
gen? werd bestimmt f
ü
ndig aber dann erst nach 10 Stunden
5.Das "Objekt" habe ich im IoBroker im Cloud Adapter angelegt hier dann das eingef
ü
gte Script aus Common ausgew
ä
hlt. - in Alexa dann nach neue Ger
ä
ten suchen und den Adapter ausprobieren-Wie f
ü
ge ich weitere befehle ein?
Wird mir irgendwie aus dem Script nicht ersichtlich wo ich da jetzt Beispielweise den Befehl f
ü
r den Ruhezustand also "rundll32.exe powrprof.dll,SetSuspendState" einf
ü
gen soll?Danke f
ü
r die Hilfe!! -
@Grace13
In den Einstellungen f
ü
r den Script Adapter kannst du
“
zus
ä
tzliche Module
”
angeben, die dann in den Skripten genutzt werden k
ö
nnen.A.
@Asgothian
Hmm meinst du jetzt bei Instanzen? Den Javascript Adapter? Hier finde ich nichtsBei Objekte dann das gew
ü
nschte JavaScript auf "Einstellungen" hier steht abee auch nur "Weitere" und "Raw"Wo muss ich denn hin

-
@Asgothian
Hmm meinst du jetzt bei Instanzen? Den Javascript Adapter? Hier finde ich nichtsBei Objekte dann das gew
ü
nschte JavaScript auf "Einstellungen" hier steht abee auch nur "Weitere" und "Raw"Wo muss ich denn hin

@Grace13 sagte in PC Booten / Herunterfahren und Befehle ausf
ü
hren:@Asgothian
Hmm meinst du jetzt bei Instanzen? Den Javascript Adapter? Hier finde ich nichtsBei Objekte dann das gew
ü
nschte JavaScript auf "Einstellungen" hier steht abee auch nur "Weitere" und "Raw"Wo muss ich denn hin


-
@Grace13 sagte in PC Booten / Herunterfahren und Befehle ausf
ü
hren:@Asgothian
Hmm meinst du jetzt bei Instanzen? Den Javascript Adapter? Hier finde ich nichtsBei Objekte dann das gew
ü
nschte JavaScript auf "Einstellungen" hier steht abee auch nur "Weitere" und "Raw"Wo muss ich denn hin


-
hab die Module hinzugef
ü
gt.
Wenn ich nun aber das Script ausf
ü
hre bekomme ichjavascript.0 2019-03-02 15:45:04.034 warn at Object.<anonymous> (script.js.common.WoL:40:26) javascript.0 2019-03-02 15:45:04.034 warn at updateState (script.js.common.WoL:36:9) javascript.0 2019-03-02 15:45:04.034 warn State "pc.0.power" not found javascript.0 2019-03-02 15:45:04.034 warn at Object.<anonymous> (script.js.common.WoL:40:26) javascript.0 2019-03-02 15:45:04.033 warn at updateState (script.js.common.WoL:31:20) javascript.0 2019-03-02 15:45:04.032 warn getState "pc.0.power" not found (3)Die Host IP ist die Ip meines PCs, Mac Adresse auch.
In XAMPP habe ich die index nun in idex.php umgenannt. Hier werde ich jetzt auch im Browser weitergeleitet wenn ich auf Admin klicke. Muss ich hier noch irgendetwas einstellen?
Wo liegt mein Fehler?
-
hab die Module hinzugef
ü
gt.
Wenn ich nun aber das Script ausf
ü
hre bekomme ichjavascript.0 2019-03-02 15:45:04.034 warn at Object.<anonymous> (script.js.common.WoL:40:26) javascript.0 2019-03-02 15:45:04.034 warn at updateState (script.js.common.WoL:36:9) javascript.0 2019-03-02 15:45:04.034 warn State "pc.0.power" not found javascript.0 2019-03-02 15:45:04.034 warn at Object.<anonymous> (script.js.common.WoL:40:26) javascript.0 2019-03-02 15:45:04.033 warn at updateState (script.js.common.WoL:31:20) javascript.0 2019-03-02 15:45:04.032 warn getState "pc.0.power" not found (3)Die Host IP ist die Ip meines PCs, Mac Adresse auch.
In XAMPP habe ich die index nun in idex.php umgenannt. Hier werde ich jetzt auch im Browser weitergeleitet wenn ich auf Admin klicke. Muss ich hier noch irgendetwas einstellen?
Wo liegt mein Fehler?
@Grace13
Du musst noch ein objekt anlegen mit dem du den aktuellen Zustand des Rechners steuerst. Im Script ist dazu pc.0.power vorgesehen.Also - Objekt anlegen,Skript entsprechend anpassen das es dieses Objekt auch nutzt
var obj_root = 'pc.0'; var obj_state = 'power'; -
@Grace13
Du musst noch ein objekt anlegen mit dem du den aktuellen Zustand des Rechners steuerst. Im Script ist dazu pc.0.power vorgesehen.Also - Objekt anlegen,Skript entsprechend anpassen das es dieses Objekt auch nutzt
var obj_root = 'pc.0'; var obj_state = 'power';@Asgothian
Also nochmal zus
ä
tzlich eins wo nur die zwei Zeilen drin stehn?Das dann als Objekt ausw
ä
hlen.
Und das ist dann mein schalter?Das ausgew
ä
hlte Objekt ist dann sozusagen der Pc der im haupts
ä
chlichen Skript das oben steht angegeben wurde? -
@Asgothian
Also nochmal zus
ä
tzlich eins wo nur die zwei Zeilen drin stehn?Das dann als Objekt ausw
ä
hlen.
Und das ist dann mein schalter?Das ausgew
ä
hlte Objekt ist dann sozusagen der Pc der im haupts
ä
chlichen Skript das oben steht angegeben wurde?@Grace13
Nein, die 2 Zeilen sollten in dem Script das du hast schon drin sein. Du musst sie
ä
ndern um das richtige Objekt anzusprechen. Ich w
ü
rde das so machen:Im Objektbaum unter JavaScript.0 ein Objekt
„
rechnerstatus
“
anlegen (Art Status, Typ Zahl)Dann musst du bei obj_root
„
javascript.0
“
stehen und bei obj_state
„
rechnerstatus
“
.A.
-
12:29:19.968 [warn] javascript.0 at updateState (script.js.common.rechnerstatus:31:20) 12:29:19.968 [warn] javascript.0 at Object. (script.js.common.rechnerstatus:40:26) 12:29:19.968 [warn] javascript.0 at updateState (script.js.common.rechnerstatus:36:9) 12:29:19.968 [warn] javascript.0 at Object. (script.js.common.rechnerstatus:40:26)Irgdnwie bin ich nicht viel weiter gekommen.
Ich hab die zwei Zeilen
var obj_root = 'pc.0'; var obj_state = 'power';in
var obj_root = 'javascript.0; var obj_state = 'rechnerstatus';ge
ä
ndert..Damit keine Verst
ä
ndnissfehler aufkommen hab ich das gleiche nochmal als Skript in Common angelegt ( war mir nicht ersichtlich das direkt unter objektem - javascript.0 einzutragen)k
ö
nnte der fehler vll bei XAMPP liegen?Wohl eher kaufm das Script kann ja nicht ausgef
ü
hrt werden ? -
@Grace13
Nein, die 2 Zeilen sollten in dem Script das du hast schon drin sein. Du musst sie
ä
ndern um das richtige Objekt anzusprechen. Ich w
ü
rde das so machen:Im Objektbaum unter JavaScript.0 ein Objekt
„
rechnerstatus
“
anlegen (Art Status, Typ Zahl)Dann musst du bei obj_root
„
javascript.0
“
stehen und bei obj_state
„
rechnerstatus
“
.A.
@Asgothian sagte in PC Booten / Herunterfahren und Befehle ausf
ü
hren:Im Objektbaum unter JavaScript.0 ein Objekt
„
rechnerstatus
“
anlegen (Art Status, Typ Zahl)Das musst du auch machen - sonst geht es nicht.
-
@Asgothian sagte in PC Booten / Herunterfahren und Befehle ausf
ü
hren:Im Objektbaum unter JavaScript.0 ein Objekt
„
rechnerstatus
“
anlegen (Art Status, Typ Zahl)Das musst du auch machen - sonst geht es nicht.
-
Ich schon wieder..
Ich hab was du gesagt hast in zeile 10 eingef
ü
gt? Oder soll ichs doch bei zeile 3 einf
ü
gen?Der PC macht aber kein muchs
Liegt das vll am Appache?Wo k
ö
nnte der Fehler noch liegen? -
Also
Ich hab das erste Script mit Editor in die.php vom xampp eingef
ü
gt.Das zwei im common eingef
ü
gt dann so ge
ä
ndert wie du gesagt hast.Ein Ger
ä
t im Cloud Adapter eingef
ü
gt und das geschrieben Java Script mit dem Namen rechnerstatus ausgew
ä
hltDann bei alexa das
ü
bliche prozederNun kann ich auf An klicken hier bekomm ich im Log dann den Eintrag "javascript.js.common.rechnerstatus: registered 1 subscription and 0 schedules"
Das wars.. Wenn ich auf aus klicke kommt wird das Script gestoppt.Bei im Objektbaum und JavaScript bei Vis hab wird mir "rechnerstatus" auch angezeigt kann es aber aus irgend einem Grund nicht im Cloud Adapter einf
ü
ge bzw wird mir nicht angezeigtHab in nem anderen forum das hier
"EDIT:Ich glaube es leigt daran, weil das Script nicht in javascript.0 liegt sondern in javascript.0->ScriptEnabled"
Gefunden mal sehn obs was bringt wenn ichs
ä
ndere -
Immer mit dr Ruhe - teste mal bitte folgendes:
-
Script starten
-
Rechner starten (den du steuern willst
-
datenpunkt javascript.0.rechnerstatus im objektbaum auf true setzen.
-
datenpunkt javascript.0.rechnerstatus auf false setzen
-
ins log schauen - da m
ü
sste
“
powered off
”
auftauchen -
Rechner beobachten - er sollte jetzt herunter gefahren werden wenn das kein offenes Programm blockiert. Wenn der Rechner nach 5 Minuten noch l
ä
uft bitte herunter fahren -
wenn der Rechner aus ist den datenpunkt wieder auf wahr setzen - jetzt m
ü
sste der Rechner starten. -
wieder ins log schauen - da m
ü
sste
“
powered on
”
auftauchen.
A.
Nachtrag - nur zur Sicherheit: du hast im Kopf des scriptes die pi und mac Adresse deines zu steuernden Rechners eingetragen ?
var host_ip = '192.168.X.X'; var mac_addr = 'XX:XX:XX:XX:XX:XX'; -
-
Immer mit dr Ruhe - teste mal bitte folgendes:
-
Script starten
-
Rechner starten (den du steuern willst
-
datenpunkt javascript.0.rechnerstatus im objektbaum auf true setzen.
-
datenpunkt javascript.0.rechnerstatus auf false setzen
-
ins log schauen - da m
ü
sste
“
powered off
”
auftauchen -
Rechner beobachten - er sollte jetzt herunter gefahren werden wenn das kein offenes Programm blockiert. Wenn der Rechner nach 5 Minuten noch l
ä
uft bitte herunter fahren -
wenn der Rechner aus ist den datenpunkt wieder auf wahr setzen - jetzt m
ü
sste der Rechner starten. -
wieder ins log schauen - da m
ü
sste
“
powered on
”
auftauchen.
A.
Nachtrag - nur zur Sicherheit: du hast im Kopf des scriptes die pi und mac Adresse deines zu steuernden Rechners eingetragen ?
var host_ip = '192.168.X.X'; var mac_addr = 'XX:XX:XX:XX:XX:XX';@Asgothian
Ich probiers sp
ä
ter mal ausAber dir schonmal vielen Dank f
ü
r die M
ü
he!!Mit rechner aus meinst du ganz normal herunterfahren?
Das Script dann am besten
ü
ber nen anderen Computer starte?Okay, guter Tipp werd drauf auchten das alle Programme zu sind.
Mit Script false und true einfach nur die hacken bei setzen, hab ich das richtig verstanden?
-
-
@Asgothian
Ich probiers sp
ä
ter mal ausAber dir schonmal vielen Dank f
ü
r die M
ü
he!!Mit rechner aus meinst du ganz normal herunterfahren?
Das Script dann am besten
ü
ber nen anderen Computer starte?Okay, guter Tipp werd drauf auchten das alle Programme zu sind.
Mit Script false und true einfach nur die hacken bei setzen, hab ich das richtig verstanden?
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden