Du bist nicht angemeldet.

Eine Antwort schreiben

Schreibe deinen Beitrag und versende ihn
Beitragsoptionen
Deine Antwort

Zurück

Themen-Übersicht (Neuester Beitrag zuerst)

_Ardbeg_
18.11.2019 22:15:43

Hi zusammen,

zunächst Euch allen mal wieder herzlichen Dank für Eure Hilfe! Ich habe gerade alles umgesetzt und zack, alles läuft!!! smile

Vielleicht Interessiert den ein oder anderen die Lösung:

ich habe drei Dateien erstellt:

datenlogger.service mit folgendem Inhalt:

[Unit]
Description=Dieser Service startet das Datenloggerskript

[Service]
ExecStart=/home/pi/datenlogger 

datenlogger.timer mit folgendem Inhalt:

[Unit]
Description=Dieser Timer steuert den Datenloggerservice alle zwei Minuten an

[Timer]
OnBootSec=2min
OnUnitActiveSec=2min

[Install]
WantedBy=basic.target

und das Skript datenlogger selbst:

#!/bin/bash


### Funktionsdeklaration
###Parameter 1 ist abzurufende IP, Parameter 2 die Variable, in die geschrieben werden soll
function liesWert(){
  local ip=$1
  local var=$2
  local wert
  wert=$(curl $ip)
  wert=$(curl $ip)
  wert=${wert#*strValue=}
  wert=${wert:1}
  wert=${wert%%'"'*}
  eval ${var}="'${wert}'"
}



### rufe werte ab
liesWert "http://xyz:8080/user/var/40/10241/0/0/12197" ausentemp 

liesWert "http://xyz:8080/user/var//120/10101/0/11124/0" pumpe
    
liesWert "http://xyz:8080/user/var//120/10101/0/0/12111" vorlauf
    
liesWert "http://xyz:8080/user/var/120/10111/0/0/12271" warmwasser
    
liesWert "http://xyz:8080/user/var//120/10111/0/0/12273" zirkulation
    
liesWert "http://xyz:8080/user/var/120/10251/0/0/12242" pufferoben
    
liesWert "http://xyz:8080/user/var/120/10251/0/0/12244" pufferunten
    
liesWert "http://xyz:8080/user/var//40/10021/0/0/12016" verbrauch
    
### erstelle Zeitstempel
zeit=`date +%H:%M`
### setze Ausgabestring zusammen
TAB=$'\t'
ausgabe="${zeit}""${TAB}""${ausentemp}""${TAB}""${pumpe}""${TAB}""${vorlauf}""${TAB}""${warmwasser}""${TAB}""${zirkulation}""${TAB}""${pufferoben}""${TAB}""${pufferunten}""${TAB}""$verbrauch"
### erstelle heutiges Datum
d=`date +%Y-%m-%d`
### schreibe Ausgabestring in Datei
echo "$ausgabe" >> /home/pi/NAS/Heizungsdaten/"${d}"
 

Die .service und .timer Datei habe ich unter

/etc/systemd/system/

abgelegt, das Skript unter

/home/pi

Den Timer habe ich mit

systemctl enable --now beispiel.timer

gestartet und das wars, ab jetzt wird fleißig mitgeloggt!

Besten Dank nochmal für die konstruktive Hilfe, hab wieder etwas Neues dazu gelernt! smile


Viele Grüße

_ardbeg_

wirr
17.11.2019 20:27:40

Die Log Datei willst du im Script in jedem Fall mit dem vollen Pfad angeben, weil das Script irgendwo gestartet werden kann. Wo das Script liegt ist nicht so wichtig, normalerweise liegt es eher nicht im Ordner '/etc/systemd/'. Den Pfad, aus dem es gestartet wird und auch den Benutzer kannst du in der .service Datei angeben (sonst wird root und / verwendet):

[Service]
User=pi
WorkingDirectory=/home/pi/NAS/Heizungsdaten/
ExecStart=/voller/pfad/zum/script

Ganz sauber wäre, ein Paket zu bauen, welches das Script, den Service und Timer "richtig" installiert, z.B:

/usr/bin/heizungsdaten
/usr/lib/systemd/system/heizungsdaten.service
/usr/lib/systemd/system/heizungsdaten.timer
_Ardbeg_
17.11.2019 18:40:07

Hi zusammen,

danke Euch für die Tipps und Hinweise.

Das vorgehen mit dem Timer habe ich, denke ich verstanden. Der Timer wird konfiguriert und aktiviert und startet der Konfig entsprechenden den gleichnamigen Service.

Eine grundsätzliche Frage noch. Macht es Sinn, das Skript direkt im systemd Verzeichnis laufen zu lassen und dann nur den Pfad für die Ausgabedatei anzugeben oder schreibt man in den den Dienst bloß den Befehl für die Ausführung des Skriptes, das dann auf dem NAS liegt? An sich ist es ja mehr oder weniger das selbe, bin mir aber nicht sicher, vor allem was die Rechte anbetrifft.


Danke und viele Grüße

_Ardbeg_

wirr
16.11.2019 19:20:29
_Ardbeg_ schrieb:

Was bewirkt die Änderung von $d auf ${d}? Funktioniert hat beides.

In diesem Fall gibt es keinen Unterschied:

man bash schrieb:
Parameter Expansion
[...]
${parameter}
    The value of parameter is substituted.  The braces are required when parameter  is  a
    positional  parameter  with  more  than one digit, or when parameter is followed by a
    character which is not to be interpreted as part of its name.   The  parameter  is  a
    shell parameter as described above PARAMETERS) or an array reference (Arrays).

Ich vermute, dass du dort ( ${d} ) den absoluten Pfad angeben willst, weil die Services und Timer das Script nicht im Ordner /home/pi/NAS/Heizungsdaten/ starten.

drcux
16.11.2019 10:16:12
_Ardbeg_ schrieb:

Wie werde ich jetzt noch mit einem Timer die Endlosschleife los?

Nicht als Service starten, sondern mit einem Timer:

https://wiki.archlinux.de/title/Systemd/Timers

Alle zwei Minuten würde dann so aussehen:

OnBootSec=2min
OnUnitActiveSec=2min

_Ardbeg_
15.11.2019 20:18:07

Hi TBone,

danke für die Tips, das Skript schaut jetzt so aus:

#!/bin/bash


### Funktionsdeklaration Parameter 1 ist abzurufende IP, Parameter 2 die Variable, in die geschrieben werden soll
function liesWert(){
  local ip=$1
  local var=$2
  local wert
  wert=$(curl $ip)
  wert=$(curl $ip)
  wert=${wert#*strValue=}
  wert=${wert:1}
  wert=${wert%%'"'*}
  eval ${var}="'${wert}'"
}



while [ true ]
do
    ### rufe werte ab
    liesWert "http://xyz:8080/user/var/40/10241/0/0/12197" ausentemp 

    liesWert "http://xyz:8080/user/var//120/10101/0/11124/0" pumpe
    
    liesWert "http://xyz:8080/user/var//120/10101/0/0/12111" vorlauf
    
    liesWert "http://xyz:8080/user/var/120/10111/0/0/12271" warmwasser
    
    liesWert "http://xyz:8080/user/var//120/10111/0/0/12273" zirkulation
    
    liesWert "http://xyz:8080/user/var/120/10251/0/0/12242" pufferoben
    
    liesWert "http://xyz:8080/user/var/120/10251/0/0/12244" pufferunten
    
    liesWert "http://xyz:8080/user/var//40/10021/0/0/12016" verbrauch
    
    ### erstelle Zeitstempel
    zeit=`date +%H:%M`
    ### setze Ausgabestring zusammen
    TAB=$'\t'
    ausgabe="${zeit}""${TAB}""${ausentemp}""${TAB}""${pumpe}""${TAB}""${vorlauf}""${TAB}""${warmwasser}""${TAB}""${zirkulation}""${TAB}""${pufferoben}""${TAB}""${pufferunten}""${TAB}""$verbrauch"
    ### erstelle heutiges Datum
    d=`date +%Y-%m-%d`
    ### schreibe Ausgabestring in Datei
    echo "$ausgabe" >> "${d}"
    
    
    
    #echo "$ausentemp" 
    #echo "$pumpe"
    #echo "$vorlauf"
    #echo "$warmwasser"
    #echo "$zirkulation"
    #echo "$pufferoben"
    #echo "$pufferunten"
    #echo "$verbrauch"

    sleep 4
done

Was bewirkt die Änderung von $d auf ${d}? Funktioniert hat beides.

Den Autostart hätte ich wie auf der verloinkten Seite aufgebaut:
https://forum-raspberrypi.de/forum/thre … ert-nicht/

Wie werde ich jetzt noch mit einem Timer die Endlosschleife los?

Danke und Gruß _Ardbeg_

_Ardbeg__
15.11.2019 10:08:29

Hi TBone,

danke für Deinen Hinweis, werde mir das mit dem systemd service anschauen. Was meinst Du mit anständig neu Schreiben? Ist mein erstes "größeres" Skript, bin für konkrete Hinweise dankbar.

Viele Grüße

_Ardbeg_

_Ardbeg_
14.11.2019 23:26:18

Hi zusammen,

ich verzweifel daran auf meinem Raspberry mit raspbian lite ein Script automatisch beim Starten zu starten.
Es handelt sich um ein Script, das als Datenlogger fungieren soll. Ich hatte es bisher relativ aufwändig als Java-Applikation umgesetzt und wollte es mit einem Bash Script umsetzen. Das Script hat folgenden Inhalt:

#!/bin/bash
while [ true ]
do
    ausentemp=$(curl http://###.###.###.###:8080/user/var/40/10241/0/0/12197)
    ausentemp=${ausentemp#*strValue=}
    ausentemp=${ausentemp:1}
    ausentemp=${ausentemp%%'"'*}

    pumpe=$(curl http://###.###.###.###:8080/user/var//120/10101/0/11124/0)
    pumpe=${pumpe#*strValue=}
    pumpe=${pumpe:1}
    pumpe=${pumpe%%'"'*}

    vorlauf=$(curl http://###.###.###.###:8080/user/var//120/10101/0/0/12111)
    vorlauf=${vorlauf#*strValue=}
    vorlauf=${vorlauf:1}
    vorlauf=${vorlauf%%'"'*}

    warmwasser=$(curl http://###.###.###.###:8080/user/var/120/10111/0/0/12271)
    warmwasser=${warmwasser#*strValue=}
    warmwasser=${warmwasser:1}
    warmwasser=${warmwasser%%'"'*}

    zirkulation=$(curl http://###.###.###.###:8080/user/var//120/10111/0/0/12273)
    zirkulation=${zirkulation#*strValue=}
    zirkulation=${zirkulation:1}
    zirkulation=${zirkulation%%'"'*}

    pufferoben=$(curl http://###.###.###.###:8080/user/var/120/10251/0/0/12242)
    pufferoben=${pufferoben#*strValue=}
    pufferoben=${pufferoben:1}
    pufferoben=${pufferoben%%'"'*}

    pufferunten=$(curl http://###.###.###.###:8080/user/var/120/10251/0/0/12244)
    pufferunten=${pufferunten#*strValue=}
    pufferunten=${pufferunten:1}
    pufferunten=${pufferunten%%'"'*}

    verbrauch=$(curl http://###.###.###.###:8080/user/var//40/10021/0/0/12016)
    verbrauch=${verbrauch#*strValue=}
    verbrauch=${verbrauch:1}
    verbrauch=${verbrauch%%'"'*}
    
    zeit=`date +%H:%M`
    ausgabe="$zeit"$'\t'"$ausentemp"$'\t'"$pumpe"$'\t'"$vorlauf"$'\t'"$warmwasser"$'\t'"$zirkulation"$'\t'"$pufferoben"$'\t'"$pufferunten"$'\t'"$verbrauch"
    #ausgabe=$'$ausentemp\t$pumpe'
    d=`date +%Y-%m-%d`
    echo "$ausgabe" >> $d
    echo "$d"
    echo "$ausentemp" 
    echo "$pumpe"
    echo "$vorlauf"
    echo "$warmwasser"
    echo "$zirkulation"
    echo "$pufferoben"
    echo "$pufferunten"
    echo "$verbrauch"

    sleep 120
done

Das Script liegt auf einem NAS, das unter

 /home/pi/NAS/Heizungsdaten/

liegt.

Ich wollte es nach der Anleitung starten:

 https://tutorials-raspberrypi.de/raspberry-pi-autostart-programm-skript/ 

Manuelles Starten den Scripts funktioniert, ich bekomme auch die Ausgabe, aber die Datei für den Log wird nicht angelegt. Ich vermute mal eine Rechte Geschichte, aber letztendlich bin ich auf Eure wohlwollende Hilfe angewiesen smile

Wie würdet Ihr das anstellen?

Danke und viele Grüße

_Ardbeg_

Fußzeile des Forums

Powered by FluxBB