Du möchtest ein Node.js Script, oder einen CMD Befehl bei Hochfahren/Neustart/Reboot automatisch ausführen, dann bist du hier genau richtig.
Nach dem Laden des Linux-Kernels wird als erstes Programm überhaupt das Programm init gestartet. Dieses Programm startet alle weiteren Programme. Welche das sind, wird über die Skripte im Verzeichnis /etc/init.d/ bestimmt.
Der Vorteil gegenüber der /etc/init.d/
Variante ist, das du das Script über die Kommandozeile Neustarten, Stoppen und Starten kannst.
- Erstell ein Init Script für “dasher” (dasher ist nur ein Beispielname, du kannst ihn nach belieben verändern).
sudo nano /etc/init.d/dasher
- Kopiere den Inhalt dieses Init Script Templates. Mehr Informationen über diese Template findest du hier.
- Füge hinter
Provides:
den Scriptnamen ein und pass diese 3 Variablen (dir, cmd und user) am Anfang des Script an. Beicmd
kannst du jeden beliebigen Befehl eintragen den du auch im Terminal ausführen kannst. So kannst du beim Neustart einen beliebigen Befehlt ausführen lassen.#!/bin/sh ### BEGIN INIT INFO # Provides: dasher # Required-Start: $network $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start daemon at boot time # Description: Enable service provided by daemon. ### END INIT INFO dir="/home/pi/dasher" cmd="node app.js" user="root"
… beende den Nano Texteditor mit
ctrl
+x
am Mac, oderstrg
+x
bei Windows und speichere die Änderung mity
. - Ändere die Rechte des Init Script, um es ausführbar zu machen.
sudo chmod 755 /etc/init.d/dasher
- Aktiviere den dasher Dienst/Service (ersetze den Namen “dasher” mit dem Namen den du in Schritt 3 hinter
Provides:
geschrieben hast)sudo update-rc.d dasher defaults
- Beim nächsten Neustart/Reboot wird das Script mit ausgeführt. Um es manuell zu starten kannst du folgenden Befehl verwenden.
sudo /etc/init.d/dasher start
Script stoppen
sudo /etc/init.d/dasher stop
Script neustarten
sudo /etc/init.d/dasher restart
Anstattsudo /etc/init.d/dasher restart
kannst du auchsudo service dasher restart
schreiben. - Um zu prüfen ob das Script läuft gib diesen Befehl ein
/etc/init.d/dasher status
- Die Logdateien kannst du dir wie folgt live ausgeben lassen.
tail -f /var/log/dasher.log tail -f /var/log/dasher.err
Hallo,
irgendwie bekommt ich das Script nicht zu laufen bzw alle Pfade sind richtig die Berechtigungen passen, eine PID wird vergeben wenn ich das Script starte aber die PID kann ich im Taskmanager nicht sehen denn wenn ich den status Abfrage ist das Script immer GESTOPPT.
Die beiden Dateien error und log sind leer.
Gehe ich, ohne Script, in mein Verzeichnis und starte mit node index.js funkt alles perfekt.
Ach ja den User habe ich auf PI gesetzt da ich mit ROOT den node sonst nicht starten kann.
Ist nicht so das ich mich gar nicht auskenne aber im Moment weiss ich nicht mehr weiter.
Für einen Tipp wäre ich dankbar
Mit node-supervisor kann man zusätzlich den Prozess noch während der Laufzeit absichern.
https://github.com/isaacs/node-supervisor
Hier in dem Beispiel muss dafür nur
cmd=”node app.js”
in
cmd=”supervisor /path_to_app/app.js” und
dir=”/path_to_supervisor/
geändert werden.
Hi Ben,
danke für dieses exzellente Tutorial – ich konnte es 1a so umsetzen und es lief.
Viele Grüße,
Lorenz
Hallo,
nach Kopieren des Templates, Anpassen und Starten (sudo /etc/init.d/dasher start) des Scriptes bekomme ich folgende Meldung:
/etc/init.d/dasher: 26: /etc/init.d/dasher: Syntax error: "&" unexpected
Ich kenne mich leider mit der Syntax nicht aus. Ehrlich gesagt bin ich nicht mal sicher, welches Zeile 26 ist. Im Notepad++ wäre das diese Zeile:
[ -f "$pid_file" ] && ps get_pid > /dev/null 2>&1
Ist hier irgendwas falsch oder was ist das Problem?
Sind bei dir die angeschrägten Anführungszeichen um get_pid?
[ -f "$pid_file" ] && ps `get_pid` > /dev/null 2>&1
Hallo,
ich habe ein Problem das Skript zum Laufen zu bringen.
Wenn ich „/etc/init.d/dasher status“ eingebe, wird mir angezeigt das das Script gestoppt ist.
Unter „tail -f /var/log/dasher.err“ steht folgendes:
SyntaxError: /home/pi/dasher/config/config.json: Unexpected token
in JSON at position 265
at Object.parse (native)
at Object.Module._extensions..json (module.js:573:27)
at Module.load (module.js:473:32)
at tryModuleLoad (module.js:432:12)
at Function.Module._load (module.js:424:3)
at Module.require (module.js:483:17)
at require (internal/module.js:20:19)
at Object. (/home/pi/dasher/app.js:2:14)
at Module._compile (module.js:556:32)
at Object.Module._extensions..js (module.js:565:10)
Ich habe nachgesehen, die Datei config.json existiert mit folgendem Inhalt:
{„buttons“:[
{
„name“: „Dash1“,
„address“: „20:6E:9C:E6:AD:1F“,
„url“: „http://192.168.178.22:8083/fhem?cmd=set%20Steckdose%20on“,
„method“: „POST“,
„json“: true,
„body“: {„value1“: „any value“, „value2“: „another value“, „value3“: „wow, $
}
]}
Unter „tail -f /var/log/dasher.log“ erscheint kein Eintrag
Was ich ja eigentlich nur will ist, den Dash Button zum Ein- und Ausschalten einer Steckdose zu benutzen.
Aber irgendwo muss ich einen Bock gebaut haben!
Der Fehler liegt irgendwo in deiner config.json Datei.
Lösch mal die Zeile body: {…} da ist eine Klammer zu wenig und ein $ Zeichen. Wichtig ist auch das alle Anführungszeichen ” sind und nicht „“ sind.
Hier der Inhalt einer config.json
{"buttons":[
{
"name": "Dash1",
"address": "ac:61:b3:e1:fa:fe",
"url": "http://127.0.0.1:8083/fhem?cmd=set%20Licht%20on",
"method": "POST",
"json": true,
"body": {"value1": "any value", "value2": "another value"}
}
]}
Hallo Ben,
das Skript scheint jetzt zu laufen.
Im Log file erscheint: “Dash1 added.”
Das Err file zeigt nichts mehr an. 🙂
Meine config.json sieht jetzt so aus:
{“buttons”:[
{
“name”: “Dash1”,
“address”: “20:6E:9C:E6:AD:1F”,
“url”: “http://192.168.178.22:8083/fhem?cmd=set%20Steckdose%20on”,
“method”: “POST”,
“json”: true,
“body”: {“value1”: “any value”, “value2”: “another value”}
}
]}
Bis dahin vielen Dank für Deine Hilfe.
Ich bin jetzt ein wenig verunsichert, welcher Schritt muss jetzt folgen, damit ich den Dash Button ins FHEM einbinden kann, um damit meine Steckdose (ein/aus) schalten kann.
Danke und noch einen schönen Abend!
Gruß
Jörg
Bei diesem Artikel 3. Schritt die URL anpasssen. IP des FHEM Servers und den Namen welches Fhem-Gerät du schalten willst. In deiner config heisst es Steckdose.
Dann die Anleitung für Fhem weiter befolgen.
Hallo Ben,
ich bin glaube ich total mit der Reihenfolge der Installationen durcheinander gekommen.
Muss ich in der Anleitung
“http://www.benjaminroesner.com/blog/ifttt-aktionen-mit-amazon-dash-button-ausloesen/”
auch eine “IFTTT Recipe mit IFTTT Maker Chanel” erstellen?
Oder “springe ich gleich zu
“http://www.benjaminroesner.com/blog/node-js-init-script-neustart-reboot-automatisch-starten-linux-raspberry-pi/”?
Und dann zu
“http://www.benjaminroesner.com/blog/fhem-geraete-mit-amazon-dash-button-schaltensteuern-raspberry-pi-home-automation/”
Und wenn dem so ist, ist mein FHEM toggle so richtig?
define DashButton1 dummy
attr DashButton1 webCmd toggle
define n_DashButton1 notify DashButton1.* IF (Steckdose eq “on”) (set Steckdose off) ELSE (set Steckdose on)
Danke Dir!
Und noch einen schönen Abend
Wie deine Steckdose in FHEM heisst weiss ich ja nicht, aber sonst sieht das richtig heisst.
Die Reihenfolge ist so wie du sie im Kommentar geschrieben hast.
Dash Button iffft, dann node.js script autostart und dann dash button fhem.