Ankündigung

Einklappen
Keine Ankündigung bisher.

Fehler seit/bei Zugriff auf crontab in logic.yaml

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Fehler seit/bei Zugriff auf crontab in logic.yaml

    Hallo,

    seit ich mich auf sunset und sunrise beziehe bekomme ich folgende Fehlermeldung:

    Code:
    2024-05-05  09:13:24 WARNING  lib.scheduler       Exception: definition of sunrise sunset was not successfully parsed! while searching scheduler for due tasks. Traceback: Traceback (most recent call last):
      File "/usr/local/smarthome/lib/scheduler.py", line 312, in run
        self._next_time(name)
      File "/usr/local/smarthome/lib/scheduler.py", line 636, in _next_time
        ct = self.crontabs.get_next(entry, now)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/usr/local/smarthome/lib/triggertimes.py", line 136, in get_next
        return tt.get_next(starttime)
               ^^^^^^^^^^^^^^^^^^^^^^
      File "/usr/local/smarthome/lib/triggertimes.py", line 883, in get_next
        raise ValueError(f"definition of {self._triggertime} was not successfully parsed!")
    ValueError: definition of sunrise sunset was not successfully parsed!​
    Die 'logic,yaml' wird auch nicht mehr geparst, meine Logiken verschwinden nämlich aus dem Admin WebIF und werden natürlich auch nicht mehr ausgeführt.

    Der Aufruf erfolgt in der 'logic.yaml'
    Code:
    %YAML 1.1
    ---
    #
    # etc/logic.yaml
    #
    check_items:
        logic_description: Logik die prüft, ob Items durch fehlerhafte Zuweisungen überschrieben wurden
        filename: check_items.py
        logic_groupname: tools
    
    ex_logging:
        logic_description: Beispiel-Logik welche zeigt, wie Logeinträge verschiedener Levels in die Logdateien eingetragen werden
        filename: example_logging.py
        logic_groupname: beispiele
    
    ex_persist:
        logic_description: Beispiel-Logik welche zeigt, wie Variablen definiert werden müssen, um den Lauf einer Logik zu überdauern
        filename: example_persistance.py
        logic_groupname: beispiele
    
    bewaessern:
        filename: bewaessern.py
        logic_groupname: plantpi
        watch_item:
        -   beet0.feuchtigkeit
        -   beet0.feuchtigkeit.schwelle
        -   beet0.feuchtigkeit.ueber
        crontab:
        -   * 6 * *
        -   * 22 * *
    
    belueften:
        filename: belueften.py
        logic_groupname: plantpi
        watch_item:
        -   beet0.temperatur
        -   beet0.temperatur.schwelle
    
    beleuchten:
        filename: beleuchten.py
        logic_groupname: plantpi
        watch_item:
        -   beet0.helligkeit
        -   beet0.helligkeit.schwelle
        crontab:
        -   sunrise
        -   sunset
    
    motor_steuerung:
        filename: vent.py
        logic_description: Setzt vent auf/zu in Befehle zur Motorsteuerung um
        logic_groupname: plantpi
        watch_item:
        -   beet0.vent
    
    sensorcycle:
        filename: sensorcycle.py
        logic_groupname: plantpi
        crontab:
        -   \*\/4 5-21 * *
    Klar ist: Ich habe etwas falsch gemacht. Ich finde jedoch leider den Fehler partout nicht... 🙄

    Beste Grüße

    Timo

    PS: Ich dachte zuerst an fehlende Koordinaten in der 'smarthome.yaml', aber da sind welche eingetragen.
    Zuletzt geändert von unknownuser; 06.05.2024, 19:43.

    #2
    Welche Version von SmartHomeNG nutzt Du denn?

    \*\/4 5-21 * * sieht mir nicht gesund aus.

    Ansonsten mal geschaut ob Du irgendein nicht sichtbares Zeichen in deiner Logic.yaml hast?

    Kannst Du isolieren ob Deine Logik beleuchten.py das Problem ist? Sprich ob es wirklich an sunrise und sunset liegt?

    Kommentar


      #3
      Welche Version von SmartHomeNG nutzt Du denn?
      Ich Schussel, das hätte ich natürlich dazu schreiben müssen... Eine aktuelle v1.10

      \*\/4 5-21 * * sieht mir nicht gesund aus.
      Da habe ich mich eigentlich an die Doku gehalten. https://smarthomeng.github.io/smarth...e/crontab.html

      ein Wertebereich, z.B. 1-5 → immer zwischen dem/der 1. und 5. Sekunde/Minute/Stunde/Tag/Monat/Wochentag
      einen Interval, z.B. \*\/4 → immer alle 4
      Ansonsten mal geschaut ob Du irgendein nicht sichtbares Zeichen in deiner Logic.yaml hast?
      Ja habe ich. Ich habe allerdings keines gefunden. Die Logik.yaml wurde ja auch weitestgehend von/über die Admin GUI erstellt, nur die crontabs habe ich zu Fuß eingetragen.

      Kannst Du isolieren ob Deine Logik beleuchten.py das Problem ist? Sprich ob es wirklich an sunrise und sunset liegt?
      Gute Frage, schau ich mit nachher zuhause an.

      Kommentar


        #4
        Die \ sind definitiv falsch. Da müssen wir die Doku anpassen ...

        Kommentar


          #5
          So, ich hatte, da es ja nicht funktionierte, alle crontabs der 'logic.yaml' auskommentiert. Nun habe ich alle Kommentare bis auf den "\*\/4....." entfernt.
          Die Logiken verschwinden wieder in der GUI, das log sagt:

          Code:
          2024-05-06  18:46:00 NOTICE   lib.smarthome       --------------------   SmartHomeNG restarting, initiated by admin interface   --------------------
          2024-05-06  18:46:17 NOTICE   lib.smarthome       --------------------   SmartHomeNG stopped   --------------------
          2024-05-06  18:46:19 NOTICE   lib.smarthome       --------------------   Init SmartHomeNG v1.10.0-master (4b25822a0)   --------------------
          2024-05-06  18:46:19 NOTICE   lib.smarthome       Running in Python interpreter 'v3.11.2 final' in virtual environment, from directory /usr/local/smarthome
          2024-05-06  18:46:19 NOTICE   lib.smarthome        - operating system 'Debian GNU/Linux 12 (bookworm)' (pid=12211)
          2024-05-06  18:46:19 NOTICE   lib.smarthome        - on 'Raspberry Pi (Rev. 902120)'
          2024-05-06  18:46:22 NOTICE   lib.smarthome        - Nutze Feiertage für Land 'DE', Provinz 'RP', 1 benutzerdefinierte(r) Feiertag(e) definiert
          2024-05-06  18:46:26 ERROR    lib.metadata        module 'mqtt': Found invalid value '' for parameter 'broker_host' (type ip) in /etc/module.yaml, using default value '127.0.0.1' instead
          2024-05-06  18:46:32 ERROR    lib.shyaml          YAML-file load error in /usr/local/smarthome/etc/logic.yaml:  
          while scanning an alias
            in "<unicode string>", line 15, column 9:
                  -   * 6 * *
                      ^ (line: 15)
          expected alphabetic or numeric character, but found ' '
            in "<unicode string>", line 15, column 10:
                  -   * 6 * *
                       ^ (line: 15)
          NOTE: Look for the error at the expected <block end>, near the second specified line number
          2024-05-06  18:46:33 NOTICE   lib.smarthome       --------------------   SmartHomeNG initialization finished   --------------------​
          Also habe ich die crontab Liste von bewässern.py angepasst. Statt des Formats, das durch die Admin GUI verwendet wurde [-,leer,leer,leer,crontab] habe ich mit an die der Doku [leer,leer,-,leer,crontab] ersetzt:

          Code:
              crontab:
                - * 6 * *
                - * 22 * *
          aber ohne Erfolg

          Code:
          2024-05-06  19:03:08 ERROR    lib.shyaml          YAML-file load error in /usr/local/smarthome/etc/logic.yaml:  
          while scanning an alias
            in "<unicode string>", line 15, column 9:
                    - * 6 * *
                      ^ (line: 15)
          expected alphabetic or numeric character, but found ' '
            in "<unicode string>", line 15, column 10:
                    - * 6 * *
                       ^ (line: 15)
          NOTE: Look for the error at the expected <block end>, near the second specified line number​
          Also wieder auskommentiert. Jetzt sind nurnoch sunrise und sunset aktiv. Jetzt funktioniert es. Die Probleme bestehen also mit den crontabs von 'bewaessern.py' und 'sensorcycle.py'

          Code:
          2024-05-06  19:06:32 NOTICE   lib.smarthome       --------------------   SmartHomeNG restarting, initiated by admin interface   --------------------
          2024-05-06  19:06:47 NOTICE   lib.smarthome       --------------------   SmartHomeNG stopped   --------------------
          2024-05-06  19:06:49 NOTICE   lib.smarthome       --------------------   Init SmartHomeNG v1.10.0-master (4b25822a0)   --------------------
          2024-05-06  19:06:49 NOTICE   lib.smarthome       Running in Python interpreter 'v3.11.2 final' in virtual environment, from directory /usr/local/smarthome
          2024-05-06  19:06:49 NOTICE   lib.smarthome        - operating system 'Debian GNU/Linux 12 (bookworm)' (pid=12674)
          2024-05-06  19:06:49 NOTICE   lib.smarthome        - on 'Raspberry Pi (Rev. 902120)'
          2024-05-06  19:06:51 NOTICE   lib.smarthome        - Nutze Feiertage für Land 'DE', Provinz 'RP', 1 benutzerdefinierte(r) Feiertag(e) definiert
          2024-05-06  19:06:55 ERROR    lib.metadata        module 'mqtt': Found invalid value '' for parameter 'broker_host' (type ip) in /etc/module.yaml, using default value '127.0.0.1' instead
          2024-05-06  19:07:02 NOTICE   lib.smarthome       --------------------   SmartHomeNG initialization finished   --------------------​
          Zuletzt geändert von unknownuser; 06.05.2024, 18:12.

          Kommentar


            #6
            Code:
                crontab:
                - * 6 * *
                - * 22 * *
            setze die crontab Einträge mal in Hochkomma so wie
            Code:
            '* 6 * * '
            , offensichtlich meckert der yaml Parser an das er das nicht als String erkennt.

            Kommentar


              #7
              Ein Asterix hat in yaml eine besondere Bedeutung. Deshalb müssen Strings, die mit einem Asterix beginnen in Anführungszeichen gesetzt werden.
              Viele Grüße
              Martin

              There is no cloud. It's only someone else's computer.

              Kommentar


                #8
                So. Zuerst mal vielen Dank für die Hilfe. Es funktioniert jetzt!

                Auch die fehlenden Hochkommata hatte ich der Doku aus diesem Beispiel entnommen:

                Code:
                crontab:
                  - 0 0 * * = 20
                  - sunrise
                Ich nehme an, o.g. funktioniert, da es kein führendes Asterisk gibt (?)

                Naja wie auch immer, ohne Bachslashes und mit Hochkomma funktioniert es. Dann kann ich mich ja bald dem nächsten Problem widmen, mein Service Script will nämlich auch nicht 😅

                Vielen Dank für die Hilfe!

                Kommentar


                  #9
                  In Yaml ist der führende Stern als Beginn einer Referenz reserviert. Daher muss man das in Hochkommata setzen damit der yaml Parser das als String erkennt. Wenn Du jeden crontab Eintrag also in Hochkommata setzt, bist Du auf der sicheren Seite.
                  Wenn ich mal Zeit habe ergänze ich das in der Doku und fixe den Fehler oben. mit dem \

                  Kommentar

                  Lädt...
                  X