Ankündigung

Einklappen
Keine Ankündigung bisher.

Logik für Smarthome.py, wie?

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

    Logik für Smarthome.py, wie?

    Hallo,
    ich hab smarthome.py und smartvisu laufen und das funktioniert super.
    Jetzt benötige ich noch einige Logiken für knx. z.B. wenn eine Lampe an geht, dann in 5 min wieder aus. Oder wenn Signal an Eingang xyz und Lichtschwellenmelder auf mind. 50% dann passiert das und das. Kann man das mit smarthome.py machen?
    Ich hab eine Documentation gesehen (Logics ? SmartHome.py 1.0 documentation) allerdings komme ich damit nicht klar.

    Gibt es irgendwo Beispiele? Am besten wo im Code dahinter eine kurze Beschreibung steht.

    Besten Dank
    Gruß Haxley

    #2
    Unter dem von dir angegebenen link sind doch Beispiele?

    Kann es sein, dass du (erstmal) nach einen Tutorial für Python suchst?

    Kommentar


      #3
      Ach herje unter Python läuft das alles? Kann man das auch unter PHP laufen lassen? Das kann ich wenigstens. Aber wegen den paar Logischen Bedingungen noch eine Programmiersprache lernen, vor allem so eine exotische... hmm hatte ich eigentlich nicht vor.
      Na ich wurschtel mich da schon irgenwie durch.

      Paar Fragen hätte ich zum Grundverständnis:
      1. Sehe ich das richtig das die Items von smarthome.py verwendet werden?

      2.Der Code kommt unter einem Namen in den Ordner /usr/local/smarthome/logics/ und wird dort automatisch ausgeführt oder muss der irgendwo aufgerufen bzw. noch angemeldet werden?

      3. Wie funktionieren Statusabfragen? Also ob ein Wert z.B. 1 ist. Ist da eine permanente Überwachung (welcher Rythmus) oder wird da nur der Datenstrom abgefangen und gecheckt ob eine Änderung kommt und die Bedingung stimmt oder auch nicht.?

      4. Um Durchläufe (oder Abläufe) zu machen werden Trigger verwendet richtig? Das heist es wird immer eine Zeile weitergeschalten und am Ende von vorn angefangen, wie eine Schleife oder?

      Wenn ich das Grundsystem verstanden hab komme ich dann schon alleine weiter.

      Danke Euch
      Gruß Haxley

      Kommentar


        #4
        Zitat von Haxley Beitrag anzeigen
        Ach herje unter Python läuft das alles?
        Sach' mal, kann es sein, dass du dich bis jetzt null komma garnicht mit smarthome.py beschäftigt hast? Was hast du denn gedacht, wofür das "*.py" steht?!

        Zitat von Haxley Beitrag anzeigen
        Kann man das auch unter PHP laufen lassen?
        Nein, man kann ein Python-Framework und Python-Klassenbibiliotheken nicht unter PHP laufen lassen.

        Zitat von Haxley Beitrag anzeigen
        Aber wegen den paar Logischen Bedingungen noch eine Programmiersprache lernen, vor allem so eine exotische...
        Bitte was? Python ist "exotisch"? Au Mann. Klarer Tip: Finger weg von smarthome.py.

        Zitat von Haxley Beitrag anzeigen
        Paar Fragen hätte ich zum Grundverständnis: (...)
        Da fällt mir neben einer Reihe sarkastischer Kommentare nur noch RTFM ein!

        EOD.

        Kommentar


          #5
          Danke für Deine lieben Infos.

          Ich gebe mir Mühe Python zu verstehen und würde mich freuen wenn Du die Fragen bitte noch beantworten könntest. Denn dann komme ich auch erstmal weiter.

          Danke
          Gruß Haxley

          Kommentar


            #6
            Hallo,
            gib doch einfach mal in die Forensuche bei smarthome.py, logik ein.

            Ich bin auch python noob, aber damit werden so zeimlich alle fragen beantwortet.

            Gruß Wolfi

            Kommentar


              #7
              Hallo DiMa,
              Deinen "Niederheinischen Frohsinn" versteht nicht jeder User. Ein wenig freundlicher - und nicht so überheblich - könnte man schon antworten. Dir wurde Python vermutlich mit der Muttermilch impliziert/apliziert?!
              Gruß von einem Anfänger, der höfliche Umgangsformen in solch einem bedeutenden Forum wie diesem, sehr schätzen würde!

              Kommentar


                #8
                Moin Haxley,

                >1. Sehe ich das richtig das die Items von smarthome.py verwendet werden?
                Ja. Items vom Smarthome.py können für die Visu freigegeben werden. Durch Nutzung des knx Plugins können Änderungen vom eibd empfangen bzw. den eibd gesendet werden.

                >2.Der Code kommt unter einem Namen in den Ordner /usr/local/smarthome/logics/
                Es gibt eine im etc Verzeichnis eine Logic.conf. Dort müssen die Logiken "bekannt" gemacht werden. Siehe Demo vom Raspi Image.

                >3. Wie funktionieren Statusabfragen?
                Vereinfacht hat ein item z.b. ein knx_listen = 1/2/3
                Damit wird bei Änderung des eibd dieses item aktualisiert.
                Zwischen smarthome.py und smartvisu gibt es eine tcp Verbindung. Wenn sich das item ändert, schickt smarthome.py über diese Verbindung die Info an die smartvisu.
                Und wenn die smartvisu einen Button gedrückt bekommt, dann sendet sie einen Datensatz über diese Verbindung an smarthome.py der dann das Item aktualisiert (wenn visu_acl = rw).

                >4. Um Durchläufe (oder Abläufe) zu machen werden Trigger verwendet richtig?
                Du meinst um Logiken auszuführen? Ja, dazu braucht es einen Trigger der eine Logik anstößt. Es muß ja einen Event bzw. Anlaß geben.
                In der Logik kann man dann feststellen, wer diesen Anlaß gegeben hat (als z.B. der eibd) und welches item die Ursache ist. Damit läßt sich dann über eine einzelne Logik eine Vielzahl von items bearbeiten.

                Gruß,
                Bernd

                Kommentar


                  #9
                  Hallo, ich taste mich gerade an die Logic von Smarthome.py heran und benötige noch etwas Hilfe.

                  Wenn ich bereits über die Wetterstation eine GA habe für die Tag- / Nachtfunkiton sollt es doch einfach möglich sein diese mit dem Dimmwert zu verbinden.

                  Präsenzmelder sendet 0/1 Smarthome überprüft ob Tag oder Nacht anhand der GA und sendet anschliessend Dimmwert (50 oder 100) an das Dali.

                  Jedoch fehlt mir etwas der Ansatz, kann mir hier bitte jemand weiterhelfen.
                  Könnte es in etwa so funktionieren?
                  if sh.TagNacht(1) AND sh.EG.Vorraum.pm_vorraum(1): EG.Vorraum.deckenspot_vorraum.Dimm_vorraum('50')
                  if sh.TagNacht(0) AND sh.EG.Vorraum.pm_vorraum(1): EG.Vorraum.deckenspot_vorraum.Dimm_vorraum('100')


                  Danke

                  Kommentar


                    #10
                    Hallo rok123

                    in einer xy_logic.py - Datei welche im logics-Ordner abgespeichert wird könnte dies so aussehen:
                    Code:
                    if sh.TagNacht() == 1 AND sh.EG.Vorraum.pm_vorraum() == 1:
                        sh.EG.Vorraum.deckenspot_vorraum.Dimm_vorraum(50)
                    else:
                        sh.EG.Vorraum.deckenspot_vorraum.Dimm_vorraum(0)
                    if sh.TagNacht() == 0 AND sh.EG.Vorraum.pm_vorraum() == 1:
                        sh.EG.Vorraum.deckenspot_vorraum.Dimm_vorraum(100)
                    else:
                        sh.EG.Vorraum.deckenspot_vorraum.Dimm_vorraum(0)
                    die Logik muss dann in /etc/logic.conf getriggert (=Ereignissabhängig ausgeführt ) werden
                    [xy_logic]
                    filename = xy_logic.py
                    watch_item = EG.Vorraum.pm_vorraum # die xy_logic.py Datei wird ausgeführt wenn sich das Item EG.Vorraum.pm_vorraum ändert

                    "einfache" Logiken kann man auch direkt in die items mit eval_trigger und eval einbauen..

                    Gruß Ivan
                    (PS ohne Gewähr)

                    Kommentar


                      #11
                      Danke für die Hilfe aber es funktioniert leider noch nicht.

                      Muss ich sonst noch eine Datei bearbeiten ausser die
                      usr/smarthome/logics/dimmen_TagNacht.py

                      und die
                      usr/smarthome/logics.conf

                      in der items/smartvisu.conf steht folgendes:

                      [EG]
                      [[Vorraum]]
                      [[[deckenspot_vorraum]]]
                      [[[[OnOff]]]]
                      type = bool
                      knx_dpt = 1
                      visu_acl = rw
                      knx_listen = 2/3/0
                      knx_send = 2/4/0
                      knx_init = 2/3/0
                      [[[[Dimm_vorraum]]]]
                      type = num
                      knx_dpt = 5
                      visu_acl = rw
                      knx_listen = 2/5/0
                      knx_send = 2/6/0
                      knx_init = 2/5/0


                      [[[pm_vorraum]]]
                      type = bool
                      knx_dpt = 1
                      visu_acl = rw
                      knx_listen = 2/4/0

                      Kommentar


                        #12
                        Hi,

                        bitte formatiere in Zukunft die Config und stelle es als Code ein.

                        usr/smarthome/logics.conf ist irrelevant. Das müsste in usr/smarthome/etc/logics.conf

                        Bis bald

                        Marcus

                        Kommentar


                          #13
                          Ich würde sogar stattdessen die /usr/smarthome/etc/logic.conf nehmen. [Schlaumeiermodus=OFF]

                          /tom

                          Kommentar


                            #14
                            Danke für Eure Geduld aber da muss noch ein Fehler versteckt sein.

                            usr/smarthome/etc/logic.conf
                            PHP-Code:
                            [TagNacht]
                                
                            filename dimmen_TagNacht.py
                                watch_item 
                            EG.Vorraum.pm_vorraum 
                            ust/smarthome/logics/dimmen_TagNacht.py
                            PHP-Code:
                            if sh.TagNacht() == AND sh.EG.Vorraum.pm_vorraum() == 1:
                                
                            sh.EG.Vorraum.deckenspot_vorraum.Dimm_vorraum(50)
                            else:
                                
                            sh.EG.Vorraum.deckenspot_vorraum.Dimm_vorraum(0)
                            if 
                            sh.TagNacht() == AND sh.EG.Vorraum.pm_vorraum() == 1:
                                
                            sh.EG.Vorraum.deckenspot_vorraum.Dimm_vorraum(100)
                            else:
                                
                            sh.EG.Vorraum.deckenspot_vorraum.Dimm_vorraum(0
                            usr/smarthome/etc/items/smartvisu.conf
                            PHP-Code:
                            [EG]
                                [[
                            Vorraum]]
                                    [[[
                            deckenspot_vorraum]]]
                                        [[[[
                            OnOff]]]]
                                            
                            type bool
                                            knx_dpt 
                            1
                                            visu_acl 
                            rw
                                            knx_listen 
                            2/3/0
                                            knx_send 
                            2/4/0
                                            knx_init 
                            2/3/0
                                        
                            [[[[Dimm_vorraum]]]]
                                            
                            type num
                                            knx_dpt 
                            5
                                            visu_acl 
                            rw
                                            knx_listen 
                            2/5/0
                                            knx_send 
                            2/6/0
                                            knx_init 
                            2/5/0
                                      
                                
                                
                            [[[pm_vorraum]]]     
                                    
                            type bool
                                            knx_dpt 
                            1
                                            visu_acl 
                            rw
                                            knx_listen 
                            2/4/16
                                       knx_send 
                            2/4/16
                                            knx_init 
                            2/4/16

                             
                            [TagNacht]   
                                   
                            type bool
                                   knx_dpt 
                            1
                                   visu_acl 
                            rw
                                   knx_listen 
                            4/2/1
                                   knx_init 
                            4/2/

                            Kommentar


                              #15
                              Meiner Meinung nach wirst Du mit der dimmen_TagNacht.py in jedem Fall immer 2 Schaltvorgänge auslösen, da bei einer IF-/ELSE-Anweisung definitiv einer der beiden Zweige abgearbeitet wird - und in Deinem Beispiel haben wir 2 davon hintereinander, so dass das zweite IF bzw. ELSE den Schaltvorgang aus dem ersten ggf. überschreibt.

                              Sofern zumindest die von Dir angedeutet Logik stimmig ist (habe ich jetzt nicht geprüft, sondern nur den Code angesehen), würde ich das so umschreiben, um definitiv nur einen einzigen Ast abzuarbeiten:

                              Code:
                              [FONT=Courier New]if sh.EG.Vorraum.pm_vorraum():
                                  if sh.TagNacht():
                                      sh.EG.Vorraum.deckenspot_vorraum.Dimm_vorraum(50)
                                  else:
                                      sh.EG.Vorraum.deckenspot_vorraum.Dimm_vorraum(100)
                              else:
                                  sh.EG.Vorraum.deckenspot_vorraum.Dimm_vorraum(0)[/FONT]
                              Weiterhin sieht die Einrückung des gesamten Blocks von von [[[pm_vorraum]]] etwas komisch aus - liegt's am Editor hier um Forum (mit dem prügel ich mich auch jedesmal), oder sieht es tatsächlich so aus? Weil es dann nicht funktioieren wird ...

                              Just my 2 cents, viel Erfolg,

                              /tom

                              Kommentar

                              Lädt...
                              X