Ankündigung

Einklappen
Keine Ankündigung bisher.

Anfängerfragen

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

    Anfängerfragen

    Hallo,

    ich habe seit kurzem SmartHome auf einem Raspy laufen und will ein paar Logiken schreiben, dazu habe ich mal folgende Fragen:

    Aufgabe: Eine Steckdose soll max alle 50 Minuten geschalten werden, kann aber auch durch ein anderes Ereignis früher geschalten werden.

    GA in .conf-Datei:
    Code:
    [teich]
        [[trommler]]
            [[[s]]]
                visu_acl = rw
                type = bool
                knx_dpt = 1
                knx_send = 2/6/40
                knx_listen = 2/6/40
    teich_keine_spuelung.conf-Datei für Werte:
    Code:
    [teich]
        name = Teich
            [[keine_spuelung]]
                name = Keine Spülung
                notice = Zu lange keine Spülung des Trommelfilters
                log = yes
                [[[interval]]] # max Zeit für nächste Spülung
                    name = maximales Intervall
                    type = num
                    value = 50 # min
                [[[time]]] # Laufzeit für Spülung
                    name = Laufzeit
                    type = num
                    value = 2 # min
                [[[alarm]]] # Alarm ausgeben
                    name = Alarm
                    type = bool
                    value = 0
    teich_spuelung.py für Funktion:
    Code:
    # ------------------ vars -------------------
    
    trom_item = sh.teich.trommler
    prob_item = sh.teich.keine_spuelung
    duration = prob_item.time * 60        # Dauer Spülvorgang
    interval = prob_item.interval * 60        # nächster Spülvorgang
    
    # ------------------ code -------------------
    
    if not trom_item.s():                 # Trommler läuft nicht
        trom_item.s(1)
        trom_item.s.timer(duration, 0)
        sh.teich_spuelung.cycle(interval)
    logic.conf:
    Code:
    [teich_spuelung]
        filename = teich_spuelung.py
        cycle = sh.teich.keine_spuelung.interval * 60
    Kann man einem item eigene Parameter hinzufügen, auf die man zugreifen kann zB sh.teich.keine_spuelung.notice (vermutlich nicht)?

    Ist es möglich cycle zur Laufzeit mit einem neuen Wert zu versehen, so wie ich das gemacht habe?

    Ich würde gerne noch Log-Funktion schreiben, um mir die Daten später auf der Visu ausgeben zu lassen und eine Alarm-Funktion für Pushs auf das Handy. Hier würde ich gerne die 'notice' ausgeben, wenn ich es so lösen würde:
    Code:
    [log]
        filename = log.py
        watch_item = teich.trommler.s
    dann könnte ich nicht auf das aufrufende item zurückgreifen. Zusätzlich soll geloggt werden, wenn der Timer die Steckdose wieder abschaltet.

    Wie kann ich meinen Code am besten Debuggen (so könnte ich einige Fragen vermutlich selbst durch testen beantworten)?

    Vielen Dank für Eure Hilfe!!

    #2
    Hi,

    ich mach auch gerade meine ersten Schritte mit smarthome.py, versuche aber mal Deine Fragen zu beantworten...

    Zitat von Hahn Beitrag anzeigen
    Kann man einem item eigene Parameter hinzufügen, auf die man zugreifen kann zB sh.teich.keine_spuelung.notice (vermutlich nicht)?
    EIDT: Hatte das hier falsch verstanden, deswegen zuerst falsch geantwortet... Wenn Du notice änderbar haben willst, mach doch daraus ein Sub-Item.

    Zitat von Hahn Beitrag anzeigen
    Ist es möglich cycle zur Laufzeit mit einem neuen Wert zu versehen, so wie ich das gemacht habe?
    Hab ich noch nicht gebraucht, müsste aber gehen - nur nicht in der logic.conf, sondern in der Logik selbst. Die logic.conf wird nur einmalig beim Start eingelesen.

    Zitat von Hahn Beitrag anzeigen
    Wie kann ich meinen Code am besten Debuggen (so könnte ich einige Fragen vermutlich selbst durch testen beantworten)?
    Ich mal immer smarthome.py -d oder nehme das CLI plugin.

    Gruß, Waldemar

    Kommentar


      #3
      Du kannst beliebige Attribute an ein Item hängen, die du dann auch in Logiken abfragen und verändern kannst.

      Um die Zykluszeit in einer Logik zu ändern kannst du sh.scheduler.change() verwenden.
      Mit freundlichen Grüßen
      Niko Will

      Logiken und Schnittstelle zu anderen Systemen: smarthome.py - Visualisierung: smartVISU
      - Gira TS3 - iPhone & iPad - Mobotix T24 - ekey - Denon 2313 - Russound C5 (RIO over TCP Plugin) -

      Kommentar


        #4
        Danke für Eure Hilfe!

        Prima, wenn ich es richtig verstanden habe, kann ich den Zyklus via sh.scheduler.change('teich_spuelung', cycle=interval) ändern.

        Wie ist das bei einer Zyklusänderung, fängt dieser dann wieder bei 0 an, oder updatet sich dieser erst nach dem ausstehenden Aufruf des alten Zyklus? Bei letzterem müßte ich diesen dann vermutlich vorher erst resetten/deaktivieren.

        Kommentar


          #5
          Zitat von 2ndsky Beitrag anzeigen
          Du kannst beliebige Attribute an ein Item hängen, die du dann auch in Logiken abfragen und verändern kannst.
          Hmm, das hatte ich probiert, aber nicht hinbekommen - deswegen bin ich dann auf ein Sub-Item ausgewichen. Kannst Du mir einen Tip geben, wie ich ein Attribut in einer Logik verändere?

          Danke und Gruß,
          Waldemar

          Kommentar


            #6
            Das sollte eigentlich mit

            Code:
            item_name.attribute_name = 3
            gehen, wenn mich nicht alles täuscht.
            Mit freundlichen Grüßen
            Niko Will

            Logiken und Schnittstelle zu anderen Systemen: smarthome.py - Visualisierung: smartVISU
            - Gira TS3 - iPhone & iPad - Mobotix T24 - ekey - Denon 2313 - Russound C5 (RIO over TCP Plugin) -

            Kommentar


              #7
              Hatte ich auch vermutet, aber immer ne Meldung bekommen, dass das für das Item item_name das Attribut attribute_name nicht definiert ist.

              Ich werde es aber heute Abend nochmal ausprobieren, wenn es gehen soll, dann werde ich es irgendwie hinbekommen...

              Gruß Waldemar

              Kommentar


                #8
                Es muss aber halt wirklich das Item sein und nicht der String mit dem Itemnamen. Was auf jeden Fall gehen sollte ist

                Code:
                item.conf['attribut'] = 3
                Mit freundlichen Grüßen
                Niko Will

                Logiken und Schnittstelle zu anderen Systemen: smarthome.py - Visualisierung: smartVISU
                - Gira TS3 - iPhone & iPad - Mobotix T24 - ekey - Denon 2313 - Russound C5 (RIO over TCP Plugin) -

                Kommentar

                Lädt...
                X