Ankündigung

Einklappen
Keine Ankündigung bisher.

Umstellunge Szenen auf yaml

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

    Umstellunge Szenen auf yaml

    Hallo wenn ich meine beiden Szenen Definitionen von .conf auf .yaml umstelle erhalte ich beim Neustart von SHNG eine exception.
    es schein aber, dass alles richtig verarbeitet wurde, weil die Aktionen vollständig und richtig im Backend erscheinen.
    Hier mal die Fehlermeldung:
    Code:
    2018-08-27  14:50:54 ERROR    __main__          Unhandled exception: return_logic() missing 1 required positional argument: 'name'
    <class 'TypeError'>
      File "smarthome.py", line 1150, in <module>
        sh.start()
      File "smarthome.py", line 496, in start
        lib.scene.Scenes(self)
      File "/usr/local/smarthome/lib/scene.py", line 92, in __init__
        action.get('learn', ''), scene_file_yaml[state].get('name', ''))
      File "/usr/local/smarthome/lib/scene.py", line 269, in _add_scene_entry
        ditem = Logics.return_logic(ditemname)
    leider kann ich den Code in scene.py nicht nachvollziehen.
    Die Syntax der Definitionen ist m.E. in Ordnung; auch der syntax checker erkennt keine Fehler.
    es entspr. m.E. auch genau der Dokumentation:

    Code:
    %YAML 1.1
    ---
    1:
        name: Beginn
        actions:
          - item: EG.Wohnen.blind.down
            value: false
            learn: false

    #2
    whe hast du den conf->yaml konverter im backend bemüht? Wie hast du umgestellt? händisch? die liste bei actions sieht mir auf den ersten blick falsch aus.. wie sieht das CONF original aus

    Kommentar


      #3
      das kann der Konverter nicht konvertieren,
      die Daten habe ich zu Fuss erstellt lt. Dokumentation.
      meine alte .conf ist sehr einfach:

      Code:
      ## Terrasse Szene Party beginnt
      1 EG.Wohnen.blind.down false
      1 EG.Wohnen.blind.up true
      1 EG.Diele.blind.down false
      1 EG.Diele.blind.up true
      1 EG.Essen.blindW.down false
      1 EG.Essen.blindW.up true
      1 EG.Essen.blindD.down false
      1 EG.Essen.blindD.up true
      1 Garten.LichtL1 on
      1 Garten.LichtL2 on
      1 Garten.LichtL3 on
      1 Garten.LichtGS on
      1 Garten.LichtRV on
      1 Garten.LichtRH on

      Kommentar


        #4
        Fehlen da nicht die geschweiften Klammern vor Item und am Ende sowie die Kommatas zwischen den Werten des Items?
        Also so bspw.?
        Code:
        3:
            name: Essen
            actions:
             - {item: EG.Wohnzimmer.Wandlampe.switch, value: false, learn: true}
             - {item: EG.Wohnzimmer.Stehlampe.switch, value: True, learn: true}

        Kommentar


          #5
          ja, so scheint es zu gehen.
          aber die geschweiften Klammern stehen so nicht grundsätzlich in der Doku:
          Code:
          <Status>:
              name: <Status Name>
              actions:
                - item: <Ziel Item 1>
                  value: <Wert für Ziel 1>
                  learn: <true|false>
                - item: <Ziel Item 2>
                  value: <Wert für Ziel 2>
                - item: <Ziel Item 3>
                  value: <Wert für Ziel 3>
                  learn: <true|false>
               # ...

          Kommentar


            #6
            Die geschweiften Klammern sind auch nicht unbedingt notwendig. Sie erleichtern jedoch das Lesen und sind aber hilfreich bei richtigen Formatierung. Man kann dicts auch durch Einrüchung in einer Liste formulieren. Man muss dabei nur sehr genau auf die Anzehl der Leerzeichen bei den Einrückungnen der List-Elemente und der Dict-Elemente achten, sonst interpretiert yaml etwas anderes aus der Datei.

            Aus Handhabbarkeitsgründen würde ich immer die Form mit geschweiften Klammern empfehlen.
            Viele Grüße
            Martin

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

            Kommentar


              #7
              Der Fehler lag wohl an einer anderen Stelle in der Syntax.
              die habe ich dadurch lokalisiert, dass im Backend wohl doch items fehlten.
              der log Eintrag ist wohl wenig hilfreich.

              Kommentar


                #8
                Was meinst Du damit:
                Zitat von whe Beitrag anzeigen
                der log Eintrag ist wohl wenig hilfreich.
                ?
                Viele Grüße
                Martin

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

                Kommentar


                  #9
                  die Fehlermeldung aus #1

                  Kommentar


                    #10
                    Hallo,

                    ich hatte auch gerade den Fehler und möchte anregen, das Fehlerhandling bei Szenen zu verbessern.

                    Ist in einer scene.yaml ein nicht existierendes Item verwendet, kommt im Log folgende Fehlermeldung:
                    Code:
                    2018-12-11  13:13:52 ERROR    Main         Unhandled exception: return_logic() missing 1 required positional argument: 'name'
                    <class 'TypeError'>
                      File "/usr/local/smarthome/bin/smarthome.py", line 1150, in <module>
                        sh.start()
                      File "/usr/local/smarthome/bin/smarthome.py", line 496, in start
                        lib.scene.Scenes(self)
                      File "/usr/local/smarthome/lib/scene.py", line 92, in __init__
                        action.get('learn', ''), scene_file_yaml[state].get('name', ''))
                      File "/usr/local/smarthome/lib/scene.py", line 269, in _add_scene_entry
                        ditem = Logics.return_logic(ditemname)
                    Vielleicht ist es möglich, dass die Einträge mit nicht vorhandenen Einträgen beim Einlesen der Szene einfach übersprungen werden bzw. dass im Log eine entsprechende Nachricht erzeugt wird.

                    Was meint ihr?

                    Kommentar


                      #11
                      Ich kann Deine Beschreibung (fehlendes Item) nicht mit der Exception Meldung zu „return_logic()“ zusammenbringen. Kanns t Du zu der Fehlermeldung die Szenendefinition posten?
                      Viele Grüße
                      Martin

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

                      Kommentar


                        #12
                        Klar!
                        Gleiches Verhalten (aus Scene angesprochenes Item existiert nicht) wurde in diesem Thread schon mal weiter oben beschrieben, mit eben dieser cryptischen Fehlermeldung.

                        Die unten stehenden Daten von mir funktionieren so.
                        Die Fehlermeldung kam, da ich in den actions: ein Item adressiert habe, das es nicht mehr gab. Dieses habe ich schon entfernt bzw. richtig benannt.

                        \items\scenen.yaml
                        Code:
                        %YAML 1.1
                        ---
                        Szenen:
                            Haus:
                                type: scene
                            Wohnzimmer:
                                type: scene
                            Esszimmer:
                                type: scene
                            Kueche:
                                type: scene
                        \scenes\Haus.yaml
                        Code:
                        0:
                            name: Aus
                            actions:
                             - {item: Licht.Esszimmer.Esstisch.OnOff, value: 0, learn: false}
                             - {item: Licht.Esszimmer.Suedwand_links.OnOff, value: 0, learn: false}
                             - {item: Licht.Esszimmer.Suedwand_mitte.OnOff, value: 0, learn: false}
                             - {item: Licht.Esszimmer.Panoramafenster.OnOff, value: 0, learn: false}
                             - {item: Licht.Esszimmer.Traeger.OnOff_DALI, value: 0, learn: false}
                             - {item: Licht.Esszimmer.Bodenleuchte.OnOff, value: false, learn: false}
                             - {item: Licht.Esszimmer.Leseleuchte.OnOff, value: false, learn: false}
                             - {item: Licht.Kueche.Deckenleuchten.OnOff, value: false, learn: false}
                             - {item: Licht.Kueche.Deckenfluter.OnOff_DALI, value: false, learn: false}
                             - {item: Licht.Kueche.Regalleuchte.OnOff, value: false, learn: false}
                             - {item: Licht.Kueche.Hochschrank.OnOff, value: false, learn: false}
                             - {item: Licht.Wohnzimmer.DeckenAmbiLight.OnOff, value: false, learn: false}
                             - {item: Licht.Wohnzimmer.Stedo_WZ.OnOff, value: false, learn: false}
                             - {item: Licht.Wohnzimmer.Wandleuchten.OnOff, value: false, learn: false}
                             - {item: Licht.Wohnzimmer.Vorsatz_weiss.OnOff_DALI, value: false, learn: false}
                             - {item: Licht.Wohnzimmer.Vorsatz_farbe.OnOff_DALI, value: false, learn: false}
                             - {item: Licht.Wohnzimmer.Vorsatz_nische.OnOff, value: false, learn: false}
                             - {item: Licht.Wohnzimmer.Wandschrank_oben.OnOff, value: false, learn: false}
                             - {item: Licht.Wohnzimmer.Wandschrank_unten.OnOff, value: false, learn: false}     
                             - {item: Licht.Wohnzimmer.TVWand_LED.OnOff, value: false, learn: false}     
                        
                        1:
                            name: Alles
                            actions:
                             - {item: Licht.Esszimmer.Esstisch.dimmen, value: 0, learn: true}
                             - {item: Licht.Esszimmer.Suedwand_links.dimmen, value: 0, learn: true}
                             - {item: Licht.Esszimmer.Suedwand_mitte.dimmen, value: 0, learn: true}
                             - {item: Licht.Esszimmer.Panoramafenster.dimmen, value: 0, learn: true}
                             - {item: Licht.Esszimmer.Traeger.dimmen, value: 255, learn: true}
                             - {item: Licht.Esszimmer.Bodenleuchte.OnOff, value: false, learn: true}
                             - {item: Licht.Esszimmer.Leseleuchte.OnOff, value: false, learn: true}
                             - {item: Licht.Esszimmer.Bodenleuchte.OnOff, value: true, learn: true}
                             - {item: Licht.Esszimmer.Leseleuchte.OnOff, value: true, learn: true}
                             - {item: Licht.Kueche.Deckenleuchten.OnOff, value: true, learn: true}
                             - {item: Licht.Kueche.Deckenfluter.OnOff_DALI, value: true, learn: true}
                             - {item: Licht.Kueche.Regalleuchte.OnOff, value: true, learn: true}
                             - {item: Licht.Kueche.Hochschrank.OnOff, value: true, learn: true}
                             - {item: Licht.Wohnzimmer.DeckenAmbiLight.OnOff, value: true, learn: true}
                             - {item: Licht.Wohnzimmer.Stedo_WZ.OnOff, value: true, learn: true}
                             - {item: Licht.Wohnzimmer.Wandleuchten.dimmen, value: 255, learn: true}
                             - {item: Licht.Wohnzimmer.Vorsatz_weiss.OnOff_DALI, value: true, learn: true}
                             - {item: Licht.Wohnzimmer.Vorsatz_farbe.OnOff_DALI, value: true, learn: true}
                             - {item: Licht.Wohnzimmer.Vorsatz_nische.OnOff, value: true, learn: true}
                             - {item: Licht.Wohnzimmer.Wandschrank_oben.OnOff, value: true, learn: true}
                             - {item: Licht.Wohnzimmer.Wandschrank_unten.OnOff, value: true, learn: true}
                             - {item: Licht.Wohnzimmer.TVWand_LED.OnOff, value: true, learn: true}
                        
                        2:
                            name: Zwei
                            actions:
                             - {item: Licht.Esszimmer.Esstisch.dimmen, value: 255, learn: true}
                             - {item: Licht.Esszimmer.Suedwand_links.dimmen, value: 255, learn: true}
                             - {item: Licht.Esszimmer.Suedwand_mitte.dimmen, value: 255, learn: true}
                             - {item: Licht.Esszimmer.Panoramafenster.dimmen, value: 255, learn: true}
                             - {item: Licht.Esszimmer.Traeger.dimmen, value: 255, learn: true}
                             - {item: Licht.Kueche.Deckenleuchten.OnOff, value: true, learn: true}
                             - {item: Licht.Kueche.Deckenfluter.OnOff_DALI, value: true, learn: true}
                             - {item: Licht.Kueche.Regalleuchte.OnOff, value: true, learn: true}
                             - {item: Licht.Kueche.Hochschrank.OnOff, value: true, learn: true}
                             - {item: Licht.Wohnzimmer.DeckenAmbiLight.OnOff, value: true, learn: true}
                             - {item: Licht.Wohnzimmer.Stedo_WZ.OnOff, value: true, learn: true}
                             - {item: Licht.Wohnzimmer.Wandleuchten.dimmen, value: 255, learn: true}
                             - {item: Licht.Wohnzimmer.Vorsatz_weiss.OnOff_DALI, value: true, learn: true}
                             - {item: Licht.Wohnzimmer.Vorsatz_farbe.OnOff_DALI, value: true, learn: true}
                             - {item: Licht.Wohnzimmer.Vorsatz_nische.OnOff, value: true, learn: true}
                             - {item: Licht.Wohnzimmer.Wandschrank_oben.OnOff, value: true, learn: true}
                             - {item: Licht.Wohnzimmer.Wandschrank_unten.OnOff, value: true, learn: true}
                             - {item: Licht.Wohnzimmer.TVWand_LED.OnOff, value: true, learn: true}
                        
                        3:
                            name: Essen
                            actions:
                             - {item: Licht.Esszimmer.Esstisch.dimmen, value: 255, learn: true}
                             - {item: Licht.Esszimmer.Suedwand_links.dimmen, value: 255, learn: true}
                             - {item: Licht.Esszimmer.Suedwand_mitte.dimmen, value: 255, learn: true}
                             - {item: Licht.Esszimmer.Panoramafenster.dimmen, value: 255, learn: true}
                             - {item: Licht.Esszimmer.Traeger.dimmen, value: 255, learn: true}
                             - {item: Licht.Kueche.Deckenleuchten.OnOff, value: true, learn: true}
                             - {item: Licht.Kueche.Deckenfluter.OnOff_DALI, value: true, learn: true}
                             - {item: Licht.Kueche.Regalleuchte.OnOff, value: true, learn: true}
                             - {item: Licht.Kueche.Hochschrank.OnOff, value: true, learn: true}
                             - {item: Licht.Wohnzimmer.DeckenAmbiLight.OnOff, value: true, learn: true}
                             - {item: Licht.Wohnzimmer.Stedo_WZ.OnOff, value: true, learn: true}
                             - {item: Licht.Wohnzimmer.Wandleuchten.dimmen, value: 255, learn: true}
                             - {item: Licht.Wohnzimmer.Vorsatz_weiss.OnOff_DALI, value: true, learn: true}
                             - {item: Licht.Wohnzimmer.Vorsatz_farbe.OnOff_DALI, value: true, learn: true}
                             - {item: Licht.Wohnzimmer.Vorsatz_nische.OnOff, value: true, learn: true}
                             - {item: Licht.Wohnzimmer.Wandschrank_oben.OnOff, value: true, learn: true}
                             - {item: Licht.Wohnzimmer.Wandschrank_unten.OnOff, value: true, learn: true}
                             - {item: Licht.Wohnzimmer.TVWand_LED.OnOff, value: true, learn: true}
                        
                        4:
                            name: Party
                            actions:
                             - {item: Licht.Esszimmer.Esstisch.dimmen, value: 255, learn: true}
                             - {item: Licht.Esszimmer.Suedwand_links.dimmen, value: 255, learn: true}
                             - {item: Licht.Esszimmer.Suedwand_mitte.dimmen, value: 255, learn: true}
                             - {item: Licht.Esszimmer.Panoramafenster.dimmen, value: 255, learn: true}
                             - {item: Licht.Esszimmer.Traeger.dimmen, value: 255, learn: true}
                             - {item: Licht.Kueche.Deckenleuchten.OnOff, value: true, learn: true}
                             - {item: Licht.Kueche.Deckenfluter.OnOff_DALI, value: true, learn: true}
                             - {item: Licht.Kueche.Regalleuchte.OnOff, value: true, learn: true}
                             - {item: Licht.Kueche.Hochschrank.OnOff, value: true, learn: true}
                             - {item: Licht.Wohnzimmer.DeckenAmbiLight.OnOff, value: true, learn: true}
                             - {item: Licht.Wohnzimmer.Stedo_WZ.OnOff, value: true, learn: true}
                             - {item: Licht.Wohnzimmer.Wandleuchten.dimmen, value: 255, learn: true}
                             - {item: Licht.Wohnzimmer.Vorsatz_weiss.OnOff_DALI, value: true, learn: true}
                             - {item: Licht.Wohnzimmer.Vorsatz_farbe.OnOff_DALI, value: true, learn: true}
                             - {item: Licht.Wohnzimmer.Vorsatz_nische.OnOff, value: true, learn: true}
                             - {item: Licht.Wohnzimmer.Wandschrank_oben.OnOff, value: true, learn: true}
                             - {item: Licht.Wohnzimmer.Wandschrank_unten.OnOff, value: true, learn: true}
                             - {item: Licht.Wohnzimmer.TVWand_LED.OnOff, value: true, learn: true}
                        Msinn Kannst Du das nachvollziehen?

                        Kommentar


                          #13
                          Ja,

                          das Problem auf, wenn das existierende Handling für nicht existierende Items griff. In diesem Fall sollte geprüft werden, ob es denn eine Logik mit dem angegebenen Namen gibt, um dann diese Logik mit der Szene zu verknüpfen. Dieses Handling hatte einen Fehler.

                          Ist jetzt im develop gefixt.
                          Viele Grüße
                          Martin

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

                          Kommentar

                          Lädt...
                          X