Ankündigung

Einklappen
Keine Ankündigung bisher.

Anfängerprobleme mit Openhab

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

    Anfängerprobleme mit Openhab

    Hallo Gemeinde,

    erstmal Respekt welches KnowHow in diesen Forum steckt!

    Ich bin seit kurzen Besitzer von zwei Raspberry und bin erstaunt was mit den Dingern alles machbar ist.

    Der erste läuft als Druckserver für meinen 3D Drucker, und der zweite soll meine Garagentore steuern.

    Nun zu meinen Problem, an dem ich mir die Zähne derzeitig ausbeisse.

    Wie bringe ich meine Schalter (die funktionieren), dazu als Taster zu funktionieren?
    Ich hab in euren Forum schon etwas gelesen, blick es aber nicht... Sorry

    Hier mein Schalter Item

    Switch Schalter "Garage" { exec="ON:sudo /opt/openhab/scripte/on-off.py 17 0 , OFF:sudo /opt/openhab/scripte/on-off.py 17 1 " }

    wo muß autoupdate="false rein? Wie kann ich den delay einstellen?

    Mein zweites Problem, ich möchte mit einen Reedkontakt den Torstatus angezeigt haben (offen geschlossen)

    Wie kann ich mir das im openhab anzeigen lassen?

    Vielen Dank schon mal & ein schönes Wochende

    Hans

    #2
    Das autoupdate="false" gehört mit in die Sitemap.

    Wie läuft die Steuerung denn genau?
    Wenn das Script eine 1 sendet, fährt das Tor auf, wenn das Script eine 0 sendet, fährt das Tor zu?
    Oder wird vom Pi nur kurz ein Impuls ans Tor geschickt, der dann Auf-Stop-Zu steuert, je nachdem, in welche Richtung das Tor zuletzt fuhr?
    Im ersten Fall wären zwei Schaltflächen so machbar:
    Code:
    Switch item Schalter autoupdate="false" mappings={OFF="Zu",ON="Auf"}
    Falls der Kontakt nur für eine kurze Zeit geschlossen sein soll, müsstest Du eine Rule laufen lassen, die den Switch wieder auf OFF setzt. Dann reicht inder Sitemap:
    Code:
    Switch item Schalter autoupdate="false" mappings={ON="Los!"}
    und als rule:
    Code:
    import org.joda.time.DateTime
    
    
    rule "Schalter Auto-Off"
       when
          Item Schalter received update ON
       then
          createtimer(now.plusMillis(1000))[|
              Schalter.SendCommand(OFF)]
    end
    Das setzt dann nach 1000 Millisekunden den Schalter automatisch wieder auf OFF zurück. Diese Zeitspanne wäre natürlich auch anpassbar.
    Du könntest natürlich das on-off-Script anpassen, dass es den OFF-Befehl selbsttätig schreibt, dann bräuchtest Du das nicht per rule zu erledigen.

    Kommentar


      #3
      Ach so... die Reedkontakte...
      Vermutlich müsstest Du die Kontakte von openHAB aus auch aktiv abfragen, was halt, damit es hinreichend genau ist, ordentlich Last erzeugt.
      Besser wäre es, dass der Pi bei Änderugen am betreffenden Eingang den Contact z.B. mit der RestAPI gezielt setzt und löscht. Hab ich noch nicht realisiert.

      Kommentar


        #4
        Hi udo1toni

        hier ist meine default.sitemap
        Code:
        itemap default label="Main Menu"
        {
                Frame label="Garagensteuerung" icon="garage"  {
                        Switch item=Schalter label="Lichtschalter"
                        Switch item=SchalterGarageLinks label="Garage links" icon="garagedoor" rules=Schalter autoupdate="false" mappings={ON="Los!"}
                }
        }
        leider funktioniert es nicht
        ich hab dein Code in die default.rules eingetragen.

        Der erste Schalter funktioniert, der zweite leider nicht.
        Bin anscheinend zu doof den Fehler zu finden.

        Eine Frage zu dem Editor, wenn ich vi benutze sehe ich immer diese Sonderzeichen ^M im Text, mit nano nicht.
        Wie kommt das Zustande?


        Danke schon mal für deine Hilfe
        Hans



        [/QUOTE]

        Kommentar


          #5
          Naja, das kann ja nicht funktionieren

          Switch item=SchalterGarageLinks label="Garage links" icon="garagedoor" rules=Schalter autoupdate="false" mappings=[ON="Los!"]

          Das mit dem rules=Schalter gehört da nicht hin. Die Rule reagiert darauf, dass das Item Schalter ein Update auf den Wert ON erfährt.
          Wenn jetzt das Item plötzlich SchalterGarageLinks heißt, musst Du das anpassen.
          Ebenso natürlich beim SendCommand, da muss es dann auch SchalterGarageLinks heißen.
          Außerdem habe ich mich vertippt, die hinteren Klammern müssen diese hier [] sein

          Kommentar


            #6
            Hi udo1toni,

            danke für die schnelle Hilfe!

            Nun eine Verständnisfrage.

            Um die GPIO zu steuern brauche ich doch ein Script.
            Das heisst bei mir /opt/openhab/scripte/on-off.py
            Code:
            import wiringpi2 as wiringpi
            import sys
            
            # Pruefen, ob min. 2 Uebergabeparameter vorhanden sind
            if len(sys.argv) > 1:
              # Variablen fuer die Parameter setzten
              pin = int(sys.argv[1])
              mode = int(sys.argv[2])
              # GPIOs initialisieren
              wiringpi.wiringPiSetupGpio()
              # Pin auf Ausgang setztn
              wiringpi.pinMode(pin, 1)
              # Pin Modus aendern
              wiringpi.digitalWrite(pin, mode)
            
            exit()
            In den ITEMS hab ich danach meine Schalter mit
            SchalterGarageLinks.items, SchalterGarageMitte.items, SchalterGarageRechts.items, Schalter.items angelegt.
            Inhalt
            Code:
            Switch  Schalter        "Garage"        { exec="ON:sudo /opt/openhab/scripte/on-
            off.py 6 0 , OFF:sudo /opt/openhab/scripte/on off.py 6 1 " }
            in jeder Item hab ich die GPIO Ports angepasst.

            Wenn ich dich richtig verstehe soll bzw. kann ich das aber mit einer Rule "Schalter" umsetzen.
            Kannst du mir bitte auf die Sprünge helfen?
            Vielen Dank!!!

            Hans

            Kommentar


              #7
              Also, Du hast Dir aber schon mal die Demo angeschaut?

              Unter openHAB muss jedes Item einen eindeutigen Namen haben. Du hast also z.B. vier Items. Die werden alle in einer einzigen Datei angelegt, z.B. pi.items:
              Code:
              Switch Garage_links  "Garage links"  <garagedoor> { exec="ON:'sudo /opt/openhab/scripte/on-off.py 6 0' , OFF:'sudo /opt/openhab/scripte/on-off.py 6 1'" }
              Switch Garage_mitte  "Garage mitte"  <garagedoor> { exec="ON:'sudo /opt/openhab/scripte/on-off.py 5 0' , OFF:'sudo /opt/openhab/scripte/on-off.py 5 1'" }
              Switch Garage_rechts "Garage rechts" <garagedoor> { exec="ON:'sudo /opt/openhab/scripte/on-off.py 4 0' , OFF:'sudo /opt/openhab/scripte/on-off.py 4 1'" }
              Switch Garage_Licht  "Garage Licht"               { exec="ON:'sudo /opt/openhab/scripte/on-off.py 3 0' , OFF:'sudo /opt/openhab/scripte/on-off.py 3 1'" }
              Achte auch auf die ' um die Befehle, die werden gebraucht, weil die Befehlszeile Leerzeichen enthält.

              Nochmal um Verständnis: Da jedes Item eindeutig sein muss, können alle in einer einzigen Datei angelegt sein. Zu jedem Item gehört
              1. die Art des Items, also ob es ein Schalter, ein Kontakt, ein Dimmer, ein Rollladen, ein Text, ein Datum usw. ist.
              2. der Standard-Text, der angezeigt werden soll.
              3. das Standard-Icon.
              4. die Gruppe(n) zu der/denen das Item gehört.
              5. das zugehörige Binding

              2 und 3 können auch in der Sitemap definiert werden, aber in der .items-Datei wird es global definiert, wenn Du z.B. mehrere Sitemaps hast, musst Du die Definition nur einmal machen, kannst aber in einzelnen Sitemaps Änderungen vornehmen. Das Default-Icon für den Switch ist die Birne, so dass es garnicht angegeben werden muss.


              Dazu gehört eine Ansicht, z.B. default.sitemap:
              Code:
              Sitemap default label="Main Menu" 
              {
                  Frame label="Garagensteuerung" icon="garage"  {
                     Switch item=Garage_Licht
                     Switch item=Garage_links  autoupdate="false" mappings={ON="Los!"}
                     Switch item=Garage_mitte  autoupdate="false" mappings={ON="Los!"}
                     Switch item=Garage_rechts autoupdate="false" mappings={ON="Los!"}
                 }
              }
              Und für jedes Item eine Rule, gemeinsam in einer einzigen Datei, z.B. pi.rule:
              Code:
              import org.joda.time.DateTime
                 
              rule "Garage_links Auto-Off"
                 when
                   Item Garage_links received update ON
                 then
                     createtimer(now.plusMillis(1000))[|
                         Garage_links.SendCommand(OFF)] 
              end
              
              rule "Garage_mitte Auto-Off"
                 when
                   Item Garage_mitte received update ON
                 then
                     createtimer(now.plusMillis(1000))[|
                         Garage_mitte.SendCommand(OFF)] 
              end
              
              rule "Garage_rechts Auto-Off"
                 when
                   Item Garage_rechts received update ON
                 then
                     createtimer(now.plusMillis(1000))[|
                         Garage_rechts.SendCommand(OFF)] 
              end
              Wie bei den Items gilt: Alle Rules müssen eindeutige Namen besitzen! Jede Rule hat einen oder mehrere Trigger, die sie starten. In unserem Fall reagieren die Rules auf die Änderung genau eines Items, aber nur, wenn die Änderung nach ON erfolgt.
              Aber Achtung! Wenn Du den Los!-Knopf drückst, während der Ausgang noch gesetzt ist, wird einfach ein 2. Timer gestart, der den Kontakt nochmals zurücksetzt. Wenn Du z.B. einen Licht-Aus-Timer einrichtest, und die Laufzeit verlängern willst, musst Du den alten Timer löschen (das ist bei dieser Anwendung aber irrelevant, die Tasten werden ja schon nach einer Sekunde zurückgesetzt und müssen nicht retriggert werden.)

              Wenn alle drei Dateien in openHAB angelegt sind und das exec-Binding im addons-Ordner liegt, sollten beim Aufruf der openHAB-default-Ansicht ein Lichtschalter und drei Knöpfe auf der Oberfläche auftauchen.

              Wenn Du den Schalter umlegst, sollte das Script den Ausgang 3 umschalten.

              Wenn Du einen der Los!-Knöpfe drückst, wird der entsprechende Ausgang 4,5 oder 6 geschaltet. Nach jeweils einer Sekunde wird der entsprechende Ausgang dann automatisch wieder zurückgesetzt.

              Kommentar


                #8
                Hi udo1toni,



                danke für die ausführliche Erklärung.
                Es läuft jetzt perfekt!!

                Vielen Dank!!

                Hast ein Bier gut!!

                VG
                Hans

                Kommentar


                  #9
                  Na denn Prost

                  Kommentar

                  Lädt...
                  X