Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem mit Logic

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

    Problem mit Logic

    Hi,

    ich will mir eine Steuerung zum automatischen hoch/runterfahren meines Rollos bauen... allerdings will die nicht so wie ich das will

    folgendes ist in der logic.conf
    Code:
    [RollosHoch]
        filename = rollos.py
        crontab = sunrise | 30 8 * *
        hoch = yes
    
    [RollosRunter]
        filename = rollos.py
        crontab = sunset+30m | 18 22 * *
        hoch = false
    folgendes steht in der rollos.py
    Code:
    #!/usr/bin/env python
    
    if logic.name == 'RollosHoch':
        sh.zentral.rollaeden.alle.move("off")
        logger.info("Rollos werden hoch gefahren") 
    else:
        sh.zentral.rollaeden.alle.move("on")
        logger.info("Rollos werden runter gefahren")
    und meine Objekte sind so definiert (gehen auch über die Visu)
    Code:
    [zentral]
        [[rollaeden]]
            [[[alle]]]
                [[[[move]]]]
                    type = bool
                    visu = yes
                    enforce_updates = yes
                    knx_dpt = 1
                    knx_send = 1/3/0
                [[[[pos]]]]
                    type = num
                    visu = yes
                    enforce_updates = yes
                    knx_dpt = 5
                    knx_send = 1/3/1
    Im Logfile sehe ich auch die Ausgabe, aber die Rollos bewegen sich nicht.

    Irgendeine Idee... ?

    PS: habe es auch schon mir dem pos Objekt versucht.. aber auch da Bewegte sich nichts...

    #2
    Mit Ausgabe meinst Du den sh.py Debug, oder den ETS Monitor?
    Hast Du mal beobachtet was passiert, wenn Du das Item per CLI mit 0 oder 1 beschreibst?

    Gruss
    Jochen.

    Kommentar


      #3
      ja sorry... hab das Problem gefunden... hatte vorher das Sperrobjekt Global aktiviert... die Visu hatte es aber wegen des fehlenden knx_listen auf die zweite GA nicht angezeigt.


      Ne andere Frage:

      wie komme ich an das ausgelöste Objekt in der logic, wenn ich viele watch_item's habe?

      Kommentar


        #4
        Problem mit Logic

        Wenn ich mich recht erinnere mit steht das im trigger dict unter value:

        trigger['value']
        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


          #5
          AW: Problem mit Logic

          Und wie arbeitet man dann mit dem Objekt um z.B. den Name (nicht ID) abzurufen?

          Also so in der Art:

          Obj = trigger['SRC']
          Um dann damit zu Arbeiten:
          Obj.name
          Obj.conf['variable']
          Usw..

          Gesendet von meinem GT-I9100 mit Tapatalk 2

          Kommentar


            #6
            Hallo,

            das geht so:

            Code:
            item = sh.return_item(trigger['source'])
            # item.name ...
            Bis bald

            Marcus

            Kommentar


              #7
              danke, genau was ich gesucht habe

              Gibt es auch eine Funktion mit der ich an den Parent eines Objekts komme?

              Gruß

              EDIT: ok ich habe einen einfachen weg gefunden:

              Code:
              src = trigger['source']
              src_item = sh.return_item(src)
              parent = src[:src.rfind('.')];
              parent_item = sh.return_item(parent)

              Kommentar


                #8
                Es gibt dafür eine Methode: ganz unten auf SmartHome.py - Configuration

                Bis bald

                Marcus

                Kommentar


                  #9
                  hmm.. und wieder ein problem
                  Code:
                  if parent == "zentral.feuer":
                      if src == "zentral.feuer.alarm":
                          subject = "Feueralarm"
                          if trigger['value'] == True:
                              sh.zentral.rollaeden.alle.lock("off")
                              sh.zentral.rollaeden.alle.lock("off")
                              sh.zentral.rollaeden.alle.move("off")
                              sh.zentral.rollaeden.alle.move("off")
                              txt = "Feueralarm aktiviert!"
                              logger.warning(txt)
                          else:
                              txt = "Feueralarm deaktiviert!"
                              logger.warning(txt)
                      else:
                          subject = "Störung Rachmelder"
                          if trigger['value'] == True:
                              txt = "Störung Rauchmelder aktiviert!"
                              logger.warning(txt)
                          else:
                              txt = "Störung Rauchmelder deaktiviert!"
                              logger.warning(txt)        
                  else:
                  Wenn Feueralarm ausgelöst wird, dann will ich alle Rollläden entriegeln und hochfahren...

                  Dazu habe ich die entsprechenden Zentralfunktionen... aber das entriegeln muss halt vorher abgesetzt werden... anscheinend Fehlt entweder sowas wie das flush um die Befehle abzusenden, oder es fehlt einfach ein sleep dazwischen... auf jeden fall Fahren nicht alle hoch, erst nach einem zweiten mal auslösen des Feueralarms... selbst der versuch es zwei mal hintereinander abzusetzten bringt nichts...

                  Irgend eine Idee?

                  Kommentar


                    #10
                    Zitat von TCr82 Beitrag anzeigen
                    oder es fehlt einfach ein sleep dazwischen
                    wieso probierst Du es nicht damit?

                    Bis bald

                    Marcus

                    Kommentar


                      #11
                      Je nach Aktor würde ich das eher über die Sicherheitsobjekte lösen. Meine BMS haben z.B. drei Sicherheitsobjekte und eine Automatiksperre. Die Sicherheitsobjekte sind priorisiert. Für den Feueralarm würde ich einfach das höchstpriore Sicherheitsobjekt des Aktors setzen. Dann sollte es egal sein ob diese anderweitig gesperrt wurden oder nicht. Außerdem bewirkt ein Zurücksetzen dieser Sicherheitssperre automatisch, dass die anderen Sperren wieder in kraft treten (falls es mal falscher Alarm war).

                      EDIT: damit kannst du dann auch die GA des Feueralarms direkt auf die Scheriheitsobjekte legen und musst im Falle des Falles nicht hoffen, dass die Logikengine auch wirklich das tut was sie soll. Ich mag sh.py und es läuft bei mir seither zuverlässig... aber bei Sicherheitsfunktionen würde ich nicht auf eine zentrale Komponente setzen.
                      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


                        #12
                        AW: Problem mit Logic

                        Finde den Beitrag nicht mehr in dem du das zu verwendende sleep erwähnt hattest ...

                        Gesendet von meinem GT-I9100 mit Tapatalk 2

                        Kommentar


                          #13
                          time.sleep(0.5)

                          Lange sollte man Logiken nicht schlafen legen, da dadurch die Threads belegt werden.

                          Bis bald

                          Marcus

                          Kommentar


                            #14
                            das ist eine gute Idee mit den Alarm-Objecten des Aktors... werd ich mal probieren...

                            Brauche das aber nochmal an einer anderen Stelle:

                            Wenn ich eine Tür öffne, soll diese entriegelt werden (Rolladen) und dann hochfahren...

                            Wegen dem sleep... irgendwo hier im Forum habe ich auch eine andere Funktion gesehen, welche du empfohlen hattest um Logiken schlafen zu legen... deswegen wollte ich eigentlich kein sleep nehmen...

                            Aber bei der kurzen Zeit macht's wahrscheinlich nichts...

                            PS: Nebenbei wäre es schön, wenn das Mail-Plugin das richtige encoding (UTF-8) der Mails setzt (für Betreff und Text)... dann werden auch Umlaute richtig dargestellt: http://stackoverflow.com/questions/5...d-utf-8-e-mail

                            Kommentar


                              #15
                              Zitat von TCr82 Beitrag anzeigen
                              Brauche das aber nochmal an einer anderen Stelle:

                              Wenn ich eine Tür öffne, soll diese entriegelt werden (Rolladen) und dann hochfahren...
                              Auch das habe ich mit den entsprechenden Sicherheitsobjekten im Aktor gelöst. Wenn die Tür offen ist und du bist auf der Terrasse, soll der Rollladen ja auch nicht runter fahren. Deshalb muss der entsprechende Kanal gesperrt werden. Ansonsten kann es passieren, dass irgendein Automatikprogramm deinen Rollladen wieder runter fährt und dich somit ausschließt.

                              EDIT: ohne dir zu Nahe treten zu wollen, aber du solltest dich zuerst mit den Möglichkeiten des Bus auseinander setzen bevor du sämtliche Sachen umständlich in Logiken löst.
                              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