cron Uhrzeit überprüfen nach reboot

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo Community,

    ich bin ein Fan Eurer Community und ein Raspberry-Newbie, nun habe ich mein Projekt: "Aquariumsteuerung" mit der USB-Steckdosenleiste und einer 8er Relaiskarte umgesetzt. Das klappte soweit ganz gut. Die Ein- und Ausschaltzeiten sind in der crontab definiert. Nun meine Frage: Wenn nun der Raspberry Pi B, Rev 2, z.B. nach Stromausfall, neu bootet, dann sind meine GPIO`s (Pin 11,12,13,15,16,18,19,22), zur Sicherheit, im Zustand 0, also ausgeschaltet. Wenn nun aber, ohne reboot, das jeweilige Relais, laut crontab, eingeschaltet sein sollte, bleibt es dennoch aus! Genau das ist mein Problem wie kann ich beim reboot prüfen welchen Schaltzustand das Relais um diese Uhrzeit haben sollte? Bei SPS Steuerungen, z.Bsp. Siemens Logo können das. Ich wollte mein Projekt aber mit dem Raspberry verwirklichen, da meine Logo leider defekt ist und eine neue Logo teuer ist und weniger fun beim umsetzen des Projektes macht.
    Sorry, wenn es zu diesem Thema schon Fragen hab aber ich habe schon Tage lang gegoogelt aber zu diesem Problem nichts gefunden - leider. Evtl. benutze ich die falschen Suchworte.
    Weiter hoffe ich, daß ich das Problem genau genug beschreiben konnte.

    Vielen Dank für die Hilfe / Denkansätze.

    LG

    Jochen

    Wer einen Schreibfehler findet darf ihn behalten!
    Adler-Suchsystem ist auch nicht ganz einfach zu handhaben...

    In einem wankenden Schiff fällt um, wer stillesteht, nicht wer sich bewegt.
    (Ludwig Börne)

  • Danke für die schnelle Antwort. So ähnlich (Tabelle / Datenbank) habe ich mir das mschon gedacht. Hat halt den nachteil, daß ich die zeiten doppelt führen muß und bei Änderungen nichts übersehen darf.
    Hast Du noch Schlagworte mit denen ich die Umsetzung ergooglen kann? Ehrlich gesagt weiß ich nicht wie ich eine Datenbank / Tabelle erstelle und auch auslese...

    Danke im Voraus.

    Wer einen Schreibfehler findet darf ihn behalten!
    Adler-Suchsystem ist auch nicht ganz einfach zu handhaben...

    In einem wankenden Schiff fällt um, wer stillesteht, nicht wer sich bewegt.
    (Ludwig Börne)

  • Ich benutze zur Zeit Python. Wobei ich nur die Befehle ind einzelne .sh Skripte geschriben habe. In der crontab rufe ich dann das jeweilig Skript auf. Darum dachte ich, ich muß alles doppelt führen, weil die crontab, meines Wissens nach, nicht auf die Datenbank zugreifen kann (also wegen der Zeiten). Hier mal ein Beispiel für die USB Steckdose (crontab):


    #***Schaltbefehle USB STeckdose Anfang***
    # Nachtlicht, Steckdose #2 1.EIN!
    15 5 * * * /home/pi/usbdose2ein.sh
    # Nachtlicht, Steckdose #2 1.AUS!
    1 9 * * * /home/pi/usbdose2aus.sh
    # Tageslicht, Steckdose #1 EIN!
    0 9 * * * /home/pi/usbdose1ein.sh
    # Tageslicht, Steckdose #1 AUS!
    0 20 * * * /home/pi/usbdose1aus.sh
    # Nachfüllanlage, Steckdose #3 EIN!
    5 9,16,22 * * * /home/pi/usbdose3ein.sh
    # Nachfüllanlage, Steckdose #3 AUS!
    7 9,16,22 * * * /home/pi/usbdose3aus.sh
    # Nachtlicht, Steckdose #2 2.EIN!
    59 19 * * * /home/pi/usbdose2ein.sh
    # Nachtlicht, Steckdose #2 2.AUS!
    30 22 * * * /home/pi/usbdose2aus.sh
    #***Schaltbefehle USB Steckdose Ende***


    Für die Relais sieht das ähnlich aus. Vielleicht habe ich ja einfach einen Denkfehler, bzw. versteh nicht wie Du den Aufbau genau vorhast. Bin aber für jede Hilfe dankbar.
    Google gerade über SQLlite - das könnte eine Hilfe für mein Vorhaben sein???

    Wer einen Schreibfehler findet darf ihn behalten!
    Adler-Suchsystem ist auch nicht ganz einfach zu handhaben...

    In einem wankenden Schiff fällt um, wer stillesteht, nicht wer sich bewegt.
    (Ludwig Börne)

    Einmal editiert, zuletzt von janzeitler (21. Dezember 2015 um 13:25)

  • Du hast eine Datenbank, in der der Status zu jeder Zeit enthalten ist.
    Du hast dann nicht unterschiedliche Crontab-Einträge, die zu dieser, oder jeden Zeit, diese oder jene Steckdose schaltet, sondern einen,d er regelmäßig nach sieht (z.B. stündlich oder halbstündlich) was geschaltet sein sollte, und dieses dann durchführt.
    So musst du, nach einem Neustart, nur nachsehen (lassen) was zum aktuellen Zeitpunkt an und aus sein sollte, und hast den Soll-Status schnell auf den Ist-Status abgebildet.

    Computer ..... grrrrrr

  • Klingt gut! Also sollte ich mich in SQLlite einlesen und mein Vorhaben:


    Du hast eine Datenbank, in der der Status zu jeder Zeit enthalten ist.
    Du hast dann nicht unterschiedliche Crontab-Einträge, die zu dieser, oder jeden Zeit, diese oder jene Steckdose schaltet, sondern einen,d er regelmäßig nach sieht (z.B. stündlich oder halbstündlich) was geschaltet sein sollte, und dieses dann durchführt.
    So musst du, nach einem Neustart, nur nachsehen (lassen) was zum aktuellen Zeitpunkt an und aus sein sollte, und hast den Soll-Status schnell auf den Ist-Status abgebildet.

    damit umsetzen? Leider habe ich bis jetzt keinen Schimmer wie ich das in die Tat umsetzen soll. Verstanden habe ich zumindest was Du meinst. Aber mir fehlt der Ansatz zur Durchführung. Was mir noch unklar ist:
    Wenn der Crontab-Eintrag nur halbstündig nachsieht, dann habe ich, im schlimmsten Fall halbstündige Genauigkeit - oder merkt sich der Cronjob was er in, sagen wir mal 20 Min tun soll?
    Sorry bin Newbie und muß noch vieles lernen! Aber ich bin gerne dazu bereit.

    Wer einen Schreibfehler findet darf ihn behalten!
    Adler-Suchsystem ist auch nicht ganz einfach zu handhaben...

    In einem wankenden Schiff fällt um, wer stillesteht, nicht wer sich bewegt.
    (Ludwig Börne)

    • Offizieller Beitrag

    So siehst aus ;). stehen in den .sh scripten dann aufrufe zu Python scripten drin?
    Edit: du kannst ihn auch jede Minute über die db laufen lassen ;)

    Edit2: Obwohl ich persönlich die Scripte zusammenfassen würde. Ich krieg bei den Dateinamen schon Knoten im Kopf ;). Sprich 1 Script für Steckdosen, eins für Releais

  • Poste mal deine bisherigen Scripts - bitte in CODE oder PHP Blöcken.

    Soweit ich das bisher beurteilen kann, kann man alles in einem einzigen Script zusammen fassen. Dann hätte man 2 Möglichkeiten:
    1. Die Schaltzeiten in einer Datenbank-Tabelle hinterlegen welche dann vom Script abgerufen werden.
    2. Die Schaltzeiten weiterhin von crontab behandeln lassen.

    Bei der 1. Möglichkeit bräuchte man dann nur einen Crontab Eintrag welcher jede Minute ausgeführt wird. Das Script holt sich dann die Zeit und den jeweiligen Zustand der jeweiligen Steckdose aus der Datenbank und verfährt dann entsprechend. Das könnte man aber auch im Script hinterlegen.

    Bei der 2. Möglichkeit übergibt man dann dem einen Script 2 Parameter: Steckdosen# und Schaltzustand

  • Hallo,

    also ich bin ehrlich gesagt froh, daß ich das Schalten über die Befehle zusammengebracht habe und es funktioniert. Ich programmiere beruflich auch CNC Maschinen variabel und weiß, daß meine ersten Gehversuche nicht schön sind und man es sicher viel besser machen kann. Aber ehrlich gesagt ich keine Ahnung wie! Darum versuche ich meine Wünsche so gut ich es kann umzusetzen. Und bisher habe ich schon einiges dabei gelernt. Einen Raspberry Pi zur Prozesssteuerung zu benutzen anscheinend nicht so einfach wie eine SPS zu programmieren. ABER ich will es lernen und bin um jede Hilfe, bzw Denkansatz dankbar. Ich verlange ja gar nicht, daß mir jemand ein Skript schreibt - ich benötige nur die Ansätze, bzw. Befehle mit deren Möglichkeiten.

    Hier das Schaltscript für die Steckdose 4 (alle anderen sehn gleich aus, beim Einschaltscript ist nur der Befehl anders...)

    #!/bin/bash
    # Steckdose #4 AUS!

    LOGFILE=/home/pi/aquarium/log/steuerung.log
    RETAIN_NUM_LINES=50
    #
    sudo sispmctl -f 4
    #
    echo "$(date "+%m%d%Y %T") : usb-Steckdose 4 ausgeschaltet" >> $LOGFILE 2>&1

    exit

    Hier das Schaltscript für das Relais 6 (alle anderen sehn gleich aus, beim Einschaltscript ist nur der Befehl anders...)

    #!/bin/bash
    # Relais #6 AUS!

    LOGFILE=/home/pi/aquarium/log/steuerung.log
    RETAIN_NUM_LINES=50
    #
    sudo gpio write 4 0
    #
    echo "$(date "+%m%d%Y %T") : Relais 6 ausgeschaltet" >> $LOGFILE 2>&1

    exit

    Vielen Dank für Eure Mühen im Voraus.

    Wer einen Schreibfehler findet darf ihn behalten!
    Adler-Suchsystem ist auch nicht ganz einfach zu handhaben...

    In einem wankenden Schiff fällt um, wer stillesteht, nicht wer sich bewegt.
    (Ludwig Börne)

    Einmal editiert, zuletzt von janzeitler (21. Dezember 2015 um 15:35)

  • Aha, du verwendest also ein Logfile in dem die Ist-Zustände drin stehen. Eigentlich bräuchte man dann gar keine Datenbank mehr, da solch ein Logfile bereits als eine Datenbank betrachtet werden könnte :fies:

    Aber erst mal zum zusammenführen der Scripts:

    Wie auch bei Konsolen-Befehlen werden Parameter / Argumente anhand eines Leerzeichens voneinander getrennt. So wäre zum Beispiel "ls" der Befehl und "-la" das erste Parameter/Argument: "ls -la".
    In einem bash Script sind die einzelnen Parameter/Argumente anhand $1 fürs erste, $2 fürs zweite, $3 fürs dritte usw abrufbar.
    Beispiel:
    Script Datei heißt usbdose.sh und diesem übergeben wir 2 Parameter/Argumente: 1 aus
    Der Aufruf sähe dann also so aus:

    Code
    /home/pi/usbdose.sh 1 aus


    Im Script würde dann also in $1 eine "1" und in $2 würde "aus" drin stehen.

    Nun würde ich das so machen das eine if Abfrage den Text fürs Logfile sowie die Parameter/Argumente für den sispmctl Befehl erstellt:

    Code
    if [ $2 = "aus" ]; then
        Status="-f $1"
        StatusText="ausgeschaltet"
    elif [ $2 = "ein" ]; then
        Status="-o $1"
        StatusText="eingeschaltet"
    fi

    Man könnte 'StatusText' aber auch einfach wie folgt machen:

    Code
    StatusText=${2}geschaltet

    Dort würde dann einfach "aus" oder "ein" an den Anfang von "geschaltet" eingesetzt werden.

    Man sollte dann aber allgemein sicherstellen das dem Script auch wirklich 2 Parameter/Argumente übergeben wurden - sicher ist sicher:

    Code
    if [ -z "$1" ] || [ -z "$2" ]; then
        echo "Usage: $0 number state"
        exit 1
    fi

    $0 beinhaltet dabei den Namen des Scripts.
    || steht hierbei für ODER, && würde für UND stehen.

    Vollständig sähe das Script dann wie folgt aus:

    Und die Crontab Einträge sähen wie folgt aus:

  • Hallo meigrafd,

    ja jetzt verstehe ich was Du meinst. Sicher ändert sich nur der Zustand und die Adresse der Steckdose, bzw. des Relais. Somit ist ein Skript ausreichend. Mir hat einfach der Denkansatz gefehlt. Vielen Dank für Deine Mühe und die ausführliche Auskunft. Jetzt bin ich einen Schritt weiter.
    Was mir jetzt noch nicht klar ist: Beim reboot bleibt noch das Problem mit demSchaltzustand zu bestimmten Uhrzeiten abfragen oder nicht? Also müsste ich doch eine Tabelle benutzen und die Schaltzustände mit den -zeiten dort überprüfen, bzw. abgleichen? Oder ginge die Abfrage der Uhrzeit und ob ein Schaltbefehl während der Raspi offline war nicht ausgeführt wurde bei deiner Methode und meinem Logfile auch?

    Wer einen Schreibfehler findet darf ihn behalten!
    Adler-Suchsystem ist auch nicht ganz einfach zu handhaben...

    In einem wankenden Schiff fällt um, wer stillesteht, nicht wer sich bewegt.
    (Ludwig Börne)

  • Naja du hast eine Logdatei in der alle Schaltzustände eingetragen werden.

    Angenommen crontab schaltet Relais #6 um 20 Uhr aus (gpio = 1), aber um 21 Uhr gibts einen Stromausfall, der Pi startet neu und das Relais wird fälschlicherweise wieder eingeschaltet weil gpio = 0.

    Ins Logfile wurde aber rein geschrieben dass "Relais 6 ausgeschaltet" wurde - man müsste dann also nur einen @reboot Crontabeintrag erstellen über den im Fall eines Systemstarts ein Script ausgeführt wird und in diesem Script prüft man dann einfach alle Logeinträge in dem "Relais" vor kommt sowie vom heutigen Tag und setzt dann die GPIOs entsprechend der letzten Einträge.

    Beispielsweise würde folgendes im Logfile stehen:

    Code
    12202015 20:00:00 : Relais 6 ausgeschaltet
    12212015 16:46:00 : Relais 6 eingeschaltet
    12212015 16:56:00 : usb-Steckdose 4 ausgeschaltet
    12202015 16:56:02 : Relais 3 eingeschaltet
    12212015 20:00:00 : Relais 6 ausgeschaltet

    Wenn wir jetzt den LETZTEN Zustand von Relais 6 aus dem Logfile abrufen wollen kann man folgenden Befehl anwenden:

    Code
    grep "Relais 6" /home/pi/aquarium/log/steuerung.log | tail -1


    Ausgabe:

    Code
    12212015 20:00:00 : Relais 6 ausgeschaltet

    Zur Sicherheit könnte man jetzt noch sicherstellen dass das Datum auch wirklich von heute ist, zerlegt man die Zeile anhand der Leerzeichen und greift sich das 1.Argument sowie vergleicht es mit dem Datum von heute:

    Code
    LastLine=$(grep "Relais 6" /home/pi/aquarium/log/steuerung.log | tail -1)
    LastDate=$(echo $LastLine | awk '{print $1}')
    if [ "$LastDate" = "$(date "+%m%d%Y")" ]; then
        StatusText="Letzter Schaltzustand von relais 6 ist von Heute ..."
    fi

    Der Trick hierbei ist das von diesem Script nicht "Relais" ins Logfile geschrieben wird sondern kleingeschrieben "relais", weil der grep Befehl case-sensitiv ist, also GROSS-/kleinschreibung beachtet und somit diese Zeilen ignorieren würde. (Ins Logfile schreiben wir später, siehe unten)

    Als nächstes analysiert man dann einfach das zu erwartende Argument in dem der StatusText stehen sollte und verfährt dann entsprechend ob "eingeschaltet" oder "ausgeschaltet da drin steht:

    Code
    if [ "$(echo $LastLine | awk {'print $6'}" = "eingeschaltet" ]; then
        Status="-o 6"
    elif [ "$(echo $LastLine | awk {'print $6'}" = "ausgeschaltet" ]; then
        Status="-f 6"
    fi

    Wenn man das jetzt alles in ein Script packen will, setzt man dort am besten eine Liste mit allen zu prüfenden Nummern rein:

    Code
    Relais="2 3 4 5 6"
    Steckdosen="1 2 3 4"

    Und nutzt dann eine 'for'-Schleife um jeden Argument in der Liste durchzugehen:

    Code
    for n in $Relais; do
        echo "Pruefe Relais $n ..."
    end

    Das Script könnte dann also vollständig wie folgt aussehen:

    Und in Crontab wird's dann so eingetragen:

    Code
    @reboot    /home/pi/regain.sh

    Das müsste es dann eigentlich gewesen sein ;)

  • Klingt super!!! Und im Grunde so einfach.
    Hab vielen vielen Dank.
    Ich werde mir das nochmal in Ruhe ansehen und ausprobieren. Dann melde ich mich wieder.
    Vorerst tausend Dank dafür.

    Wer einen Schreibfehler findet darf ihn behalten!
    Adler-Suchsystem ist auch nicht ganz einfach zu handhaben...

    In einem wankenden Schiff fällt um, wer stillesteht, nicht wer sich bewegt.
    (Ludwig Börne)

    Einmal editiert, zuletzt von janzeitler (21. Dezember 2015 um 22:20)

  • Hallo meigrafd

    Ich habe seit gestern Abend Dein Skript "usbdose.sh" am Start und teste es mal durch...
    Update 22.12.02015, 7h01: Es funktioniert!!! Passt perfekt - Super Arbeit.

    Mit dem regain.sh Skript habe ich allerdings noch Probleme - ich bekomme immer die Fehlermeldung:

    ./regain.sh: Zeile 35: Dateiende beim Suchen nach `"' erreicht.
    ./regain.sh: Zeile 40: Syntax Fehler: Unerwartetes Dateiende.

    Habe den Code mit der Maus markiert und über strg+c kopiert, dann in nano eingefügt weil ich mit dem Button "alles markieren" + strg+c keinerlei Reaktion hatte und auch nichts eingefügt wurde.
    Das Skript habe ich mit chmod u+x ausführbar gemacht und dann beim Ausführen obige Fehlermeldungen erhalten.


    Ich habe gestern 1 Stunde Dein Skript regain.sh versucht zu verstehen in der Hinsicht wo die Überprüfung der Crontab Zeiten stehen aber nicht finden können. Fehlt ein Eintrag wird die entsprechnde Aktion "nachgeholt" - soweit klar. Abgesehen von der Fehlermeldung bim Ausführen.
    Für mich ist noch folgende Situation unklar:
    Annahme das Tageslicht ) Steckdose 1 wurde um 9h eingeschaltet -> Eintrag im LOGFILE=/home/pi/aquarium/log/steuerung.log erstellt. Nehmen wir an es ist ein Stromausfall / reboot um 10h dann wird doch beim reboot der Eintrag
    12212015 09:00:00 : usb-Steckdose 1 eingeschaltet
    erstellt. Nach dem reboot dieser Eintrag auf Vorhandensein überprüft - ist er da scheint alles in Ordnung und es wird nichts getan.

    Habe ich das so richtig verstanden??? Oder prüft Dein Skript auch die Zeiten zwischen ein- und ausschalten und ermittelt welcher Schaltzustand vorhanden sein müsste und schaltet dann diesen ein / aus?
    Sorry, daß ich so lästig bin aber ich bin einfach noch blutiger Anfänger.

    Vielen Dank für Dein Verständnis.

    Wer einen Schreibfehler findet darf ihn behalten!
    Adler-Suchsystem ist auch nicht ganz einfach zu handhaben...

    In einem wankenden Schiff fällt um, wer stillesteht, nicht wer sich bewegt.
    (Ludwig Börne)

    Einmal editiert, zuletzt von janzeitler (22. Dezember 2015 um 07:25)


  • Mit dem regain.sh Skript habe ich allerdings noch Probleme - ich bekomme immer die Fehlermeldung:

    ./regain.sh: Zeile 35: Dateiende beim Suchen nach `"' erreicht.
    ./regain.sh: Zeile 40: Syntax Fehler: Unerwartetes Dateiende.

    Ahja entschuldige, ich hab jeweils ein ) vergessen in den Zeilen:

    Richtig wäre:

    Hab das in Beitrag#13 korrigiert.


    Ich habe gestern 1 Stunde Dein Skript regain.sh versucht zu verstehen in der Hinsicht wo die Überprüfung der Crontab Zeiten stehen aber nicht finden können. Fehlt ein Eintrag wird die entsprechnde Aktion "nachgeholt" - soweit klar. Abgesehen von der Fehlermeldung bim Ausführen.
    Für mich ist noch folgende Situation unklar:
    Annahme das Tageslicht ) Steckdose 1 wurde um 9h eingeschaltet -> Eintrag im LOGFILE=/home/pi/aquarium/log/steuerung.log erstellt. Nehmen wir an es ist ein Stromausfall / reboot um 10h dann wird doch beim reboot der Eintrag
    12212015 09:00:00 : usb-Steckdose 1 eingeschaltet
    erstellt. Nach dem reboot dieser Eintrag auf Vorhandensein überprüft - ist er da scheint alles in Ordnung und es wird nichts getan.

    Habe ich das so richtig verstanden???

    Ja. Wobei der Eintrag "12212015 09:00:00 : usb-Steckdose 1 eingeschaltet" nicht erst durch den Reboot erstellt wird sondern bereits vorher. Wenn usbdose.sh ausgeführt wird schreibt das ja in die Logdatei.

    Oder prüft Dein Skript auch die Zeiten zwischen ein- und ausschalten und ermittelt welcher Schaltzustand vorhanden sein müsste und schaltet dann diesen ein / aus?

    Nein. Es liest nur die letzte Zeile aus dem Logfile aus in dessen Zeile der erforderliche Kram steht. Siehe Anfang von Beitrag#13.

  • OK. Es beruhigt mich, daß ich die Arbeitsweise des Skriptes verstanden habe. :thumbs1:
    Nochmals vielen Dank für Deine Mühen. Du hast mir sehr geholfen.
    Noch eine Frage zum Schluß: Wäre die Überprüfung der Zeiträume zwischen Einschalt -/ Auschaltzeile beim reboot mit SQLlite und einer deisbezüglichen Tabelle möglich? Also was ich gehnau wissen möchte ist - kann SQLlite mit Zeiträumen zwischen Start- und Endzeit umgehen?
    Dann müsste ich ja nur Deine Skripte in diese Richtung anpassen / ändern.

    Wer einen Schreibfehler findet darf ihn behalten!
    Adler-Suchsystem ist auch nicht ganz einfach zu handhaben...

    In einem wankenden Schiff fällt um, wer stillesteht, nicht wer sich bewegt.
    (Ludwig Börne)

    Einmal editiert, zuletzt von janzeitler (22. Dezember 2015 um 15:44)

  • Ja ;)

    Zu beachten wäre das du dann die Zeiträume als sog. UNIXTIME speichern solltest - damit wäre der Umgang am einfachsten. Unixtime ist eine weltweit standardisierte Zeitbemessung, welche die vergangenen Sekunden seit dem 1.1.1970 beziffert. Auch bekannt als "epoch" oder "unixepoch".

    Also zunächst mal solltest du dir überlegen in welcher Sprache du das umsetzen willst: bash, python, php...

    Dann solltest du über eine effektive Datenbankstruktur nachdenken.
    Denkbar wären zum Beispiel 3 Tabellen: Typ, Status, Vorgang.
    - "Typ" besteht aus 2 Spalten: id und Bezeichnung. id ist fortlaufend eindeutig und Bezeichnung beinhaltet jeweils "Nachtlicht", "Tageslicht" usw
    - "Status" besteht aus 2 Spalten: id und Bezeichnung. Hier gäbe es nur 2 Einträge: id=1, Bezeichnung=An ... id=2, Bezeichnung=Aus
    - "Vorgang" besteht aus 3 Spalten: id, id_Typ, id_Status und Zeit. id ist fortlaufend eindeutig, id_Typ enthält die jeweilige id aus der "Typ" Tabelle ebenso wie id_Status und Zeit ist der Timestamp wann geschaltet wurde.

    Das wirkt auf den ersten Blick vielleicht etwas kompliziert, ist aber gängige Praxis ;)
    Der Sinn dahinter ist das man im Prinzip nur die erste Tabelle anpassen brauch falls sich mal was ändern sollte. Die "Status" Tabelle hat wie gesagt nur 2 Einträge und "Vorgang" ist quasi deine Logdatei.
    Desweiteren verbrauch solch eine Datenbankstruktur weniger Speicher und ist schneller, als wenn überall Text drin stehen würde. Insbesondere "Vorgang" lässt sich dadurch schneller analysieren und verursacht nicht so viel CPU/RAM- Last..

    In SQL für MySQL sähe das erstellen sowie Grundgerüst wie folgt aus:

    Aber das ist nur ein Beispiel - du musst es nicht so machen :fies:

  • Hey meigrafd Du bist mein Mann!
    Super was Du alles weißt!
    Ich wollte es mit SQLlite umsetzen weil ich meinem Raspberry für diese Projekt nur eine 4GB Karte gegönnt habe und SQL ein größeres Paket als SQLlite ist. Aber nach Weihnachten werde ich vielleicht meinem Raspberry eine 8GB Karte gönnen und dann setze ich es genauso um wie Du es vorgeschlagen hast.
    Wenn es für Dich interessant ist werde ich dann von meinen Misserfolgen / Erfolgen berichten.
    Schon jetzt wünsche ich Dir frohe Weihnachten und nochmals vielen Dank für Deine Mühen – Du bist echt klasse! Danke nochmals.

    Wer einen Schreibfehler findet darf ihn behalten!
    Adler-Suchsystem ist auch nicht ganz einfach zu handhaben...

    In einem wankenden Schiff fällt um, wer stillesteht, nicht wer sich bewegt.
    (Ludwig Börne)

  • Hallo meigrafd,

    habe jetzt einiges ausprobiert. Dein regain.sh skript ( alles markiert und reinkopiert) wirft mir folgende Fehlermeldung aus:

    Code
    awk: line 1: syntax error at or near print
    awk: line 1: syntax error at or near print
    awk: line 1: syntax error at or near print
    awk: line 1: syntax error at or near print

    habs gefunden - liegt am awk-Aufruf im unteren Abschnitt. Da ist Dir ein $-zeichen reingerutscht. Habe ich bei mir geändert. Soweit läufts jetzt. Habe Deine Versoin abgeänderte (wegen den GPIO-Nummern) die läuft - ich hoffe auch zuverlässig ... :blush:
    Hier hab ich mein geändertes Skript (nur der Teil mit den GPIO-Definitionen ist anders, der Rest Original) zum Anschauen:


    Vielleicht kannt Du mal drüber scheuen ob das so passt, bzw. hast wieder eine tolle Idee was man da verbessern kann.
    Auf alle Fälle habe ich die Relais-skript und eines das meine Dosierpumpen als solche anspricht dank deiner Vorlage :bravo2: erstellt und alles funzt. Jetzt probier ich dann mal SQL / SQLlite aus... Mal sehen wie es dann damit läuft. :D

    LG

    Wer einen Schreibfehler findet darf ihn behalten!
    Adler-Suchsystem ist auch nicht ganz einfach zu handhaben...

    In einem wankenden Schiff fällt um, wer stillesteht, nicht wer sich bewegt.
    (Ludwig Börne)

    Einmal editiert, zuletzt von janzeitler (4. Januar 2016 um 18:52)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!