Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - Verzweifel mit "taster" an meiner Wago

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

    - √ - Verzweifel mit "taster" an meiner Wago

    Hi, ich würde gerne einen Taster verwenden um Eingänge meiner WAGO mit einem Tastsignal zu beschicken.

    Alles was ich bis jetzt hinbekommen habe ist das dauerhafte Anlegen eines Signals, keinen Impuls.

    Da ich aber in der Logik der SPS sowohl auf Hardwaretaster reagieren will, muss ich analog zu einem "Stromstoß-Taster" agieren.

    ich habe also folgendes Versucht:
    Item Definition
    Code:
    [B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]
     Switch[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2][COLOR=#000000] MySwitch5 [/COLOR][/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"MySwitch5"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#000000] (ALL) {modbus=[/COLOR][/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"slave2:0"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#000000], autoupdate=[/COLOR][/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"false"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#000000]}[/COLOR]
     [/SIZE]
    Sitemap
    Code:
    [B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]
     Switch[/COLOR][/SIZE][/COLOR][/SIZE][/B][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]item=[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2][COLOR=#000000]MySwitch5 [/COLOR][/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]label=[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"MySwitch5"[/COLOR][/SIZE][/COLOR][/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]mappings=[[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2][COLOR=#000000]ON=[/COLOR][/SIZE][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"finalTest"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#000000]] [/COLOR]
     [/SIZE]
    Rule
    Code:
    [B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]
     [LEFT]Import [/LEFT][/COLOR][LEFT][/LEFT][/SIZE][LEFT][/LEFT][/COLOR][LEFT][/LEFT][/SIZE][LEFT][/LEFT][/B][LEFT][SIZE=2][COLOR=#000000]org.openhab.core.library.types.*[/COLOR][/SIZE][SIZE=2]
    [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]Import [/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2][COLOR=#000000]org.openhab.core.persistence.*[/COLOR][/SIZE][/LEFT]
    [B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055] [LEFT]Import [/LEFT][/COLOR][LEFT][/LEFT][/SIZE][LEFT][/LEFT][/COLOR][LEFT][/LEFT][/SIZE][LEFT][/LEFT][/B][LEFT][SIZE=2][COLOR=#000000]org.openhab.model.script.actions.*[/COLOR][/SIZE][/LEFT]
    [SIZE=2] [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]  [LEFT]rule[/LEFT][/COLOR][LEFT][/LEFT][/SIZE][LEFT][/LEFT][/COLOR][LEFT][/LEFT][/SIZE][LEFT][/LEFT][/B][LEFT][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"MySwitch5"[/COLOR][/SIZE][/COLOR][/SIZE][/LEFT]
    [B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055] [LEFT]when [/LEFT][/COLOR][LEFT][/LEFT][/SIZE][LEFT][/LEFT][/COLOR][LEFT][/LEFT][/SIZE][LEFT][/LEFT][/B][LEFT][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]Item[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2][COLOR=#000000] MySwitch5 [/COLOR][/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]received command[/COLOR][/SIZE][/COLOR][/SIZE][/B][/LEFT]
     [LEFT][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]then[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2][/SIZE][/LEFT][SIZE=2]
     [LEFT][I]postUpdate[/I](MySwitch5,OFF)[/LEFT]
    [/SIZE] [LEFT][SIZE=2][COLOR=#3f7f5f][SIZE=2][COLOR=#3f7f5f]//sendCommand(MySwitch5,OFF)[/COLOR][/SIZE][/COLOR][/SIZE][/LEFT]
    [SIZE=2] [LEFT][I]say[/I]([/LEFT][/SIZE][LEFT][SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"Good bye!"[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2]) [/SIZE][/LEFT]
     [B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]end
    [/COLOR][/SIZE][/COLOR][/SIZE][/B]
    Die Regel (wird durchlaufen, überprüft mittels "goodBye") mittels Post update bringt keinen Erfolg,
    verwende ich sendCommand, so renne ich in Java heap Errors da das gesendete Kommando erneut die regel triggert..... (logo)

    Ich blockiere mir aktuell mit der Verwendung der anliegenden Signale meine Hardwaretaster, die Logik in meiner WAGO kann ich leider nicht ändern...
    im Thread gefundene Anregungen haben mir leider nicht weitergeholfen.
    ich hoffe hier hat irgendwer noch den golden Tip für mich.
    wahrscheinlich ist es viel einfacher als ich denke *hoff*

    Danke & Gruß
    BrennyB

    #2
    Es sollte funktionieren wenn du die Regel nur auf ON triggerst:
    Code:
    [LEFT]when 
    [B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]Item[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2][COLOR=#000000] MySwitch5 [/COLOR][/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]changed to ON[/COLOR][/SIZE][/COLOR][/SIZE][/B]
    [B][COLOR=#7f0055]then[/COLOR][/B]
    [COLOR=#3f7f5f]sendCommand(MySwitch5,OFF)[/COLOR]
    [COLOR=#3f7f5f]end[/COLOR][/LEFT]
    oder du fragst in der Regel auf ON ab
    Code:
    when Item MySwitch5 received command  
    then 
    if (receivedCommand==ON)
        { 
    [LEFT][COLOR=#3f7f5f]      sendCommand(MySwitch5,OFF)[/COLOR][/LEFT]
        }
    end
    Holger

    Kommentar


      #3
      Danke

      Hi Holger,

      Danke für die schnelle Hilfe....
      es funktioniert.
      Is ja phänomenal, jetzt kann ich mich schön austoben.
      Die Dimmer-Regler und so weiter...
      ..da kommen sicherlich noch einige Fragen, aber alles zu seiner Zeit.


      Danke & Gruß

      BrennyB

      Kommentar


        #4
        Hallo,

        ich habe hier zu noch ein weiterführendes Problem. Ich möchte so wie BrennyB nur ein Tastsignal mittels Modbus an die Wago schicken.
        Wie von Holger beschrieben funktioniert das auch super.

        rule "Taster"
        when
        Item Taster received command
        then
        if (Taster.state == ON)
        {
        sendCommand(Taster, OFF)
        }
        end

        Jetzt wird in der WAGO dauerhaft mittels Stromstoß eine LED geschalten. Dies wird auf ein 2. Modbussignal zurückgegeben.

        Switch Taster "LED Taster" (ALL) {modbus="slave1:0"}
        Switch Led "LED" (ALL) {modbus="slave2:0"}

        Jetzt möchte ich, das der Taster auf ON geht, um zu signalisieren das die LED an ist, ohne noch einmal ein Signal zu senden.
        Dafür habe ich eine 2. Regel angelegt.

        rule "Led"
        when
        Item Led changed
        then
        if (Led.state == ON)
        {
        postUpdate(Taster, ON)
        } else
        end

        Leider funktioniert das nicht richtig. Der Taster schickt einfach nur ein dauerhaftes Signal und nicht einfach nur ein kurzes.
        Weiß vielleicht jemand was ich hier falsch mache?

        Grüße
        Christian

        Kommentar


          #5
          Als erstes würde ich das Autoupdate für Taster abschalten, indem Du in der Bnidingdefinition zusätzlich atoupdate="false" setzt:
          Code:
          Switch Taster "LED ist [%s]" {modbus="slave1:0", autoupdate="false" }
          Switch Led { modbus="slave2:0" }
          Und als weiteres muss die Rule zum "einschalten" des Tasters den Zustand auch aktiv wieder zurück schalten, also
          Code:
          rule "Led"
          when
              Item Led changed
          then
              if (Led.state == ON)
                  Taster.postUpdate(ON)
              else
                  Taster.postUpdate(OFF)
          end
          
          rule "Taster"
          when
              Item Taster received command ON
          then
              Taster.sendCommand(OFF)
          end
          Ich bevorzuge die objektorientierte Schreibweise, aber das ist ein Stück weit sicher Geschmackssache.
          Allerdings musst Du Dir darüber im Klaren sein, dass Du dann das Item Taster in der UI nicht richtig bedienen kannst. Sinnvoller wäre es also, das Item LED anzuzeigen, und wenn Du dieses Item in der UI schaltest, per Rule den Schalter kurz zweimal zu toggeln:
          Code:
          rule "Taster"
          when
              Item Led received command
          then
              Taster.sendCommand(ON)
              Thread::sleep(500)
              Taster.sendCommand(OFF)
          end
          Natürlich müsste man dabei noch abfangen, dass der Wechsel vom Bus auch als Command ankommt, man müsste also eine Totzeit einrichten, innerhalb derer die Rule den Trigger ignoriert.

          Kommentar


            #6
            Hi,

            vielen Dank hat super so funktioniert.

            Grüße
            Christian

            Kommentar

            Lädt...
            X