Ankündigung

Einklappen
Keine Ankündigung bisher.

openhab2.3 onewire1 > knx2 - Problem

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

    openhab2.3 onewire1 > knx2 - Problem

    Hallo Zusammen,

    aktuell werden keine Werte von meinem onewire1 binding zum knx2 channel übertragen...
    Irgendwo scheint in der Konfiguration ein Fehler zu sein den ich nicht finde...

    Thing:
    Code:
    Bridge knx:ip:bridge [ 
        ipAddress="172.27.4.1", 
        portNumber=3671, 
        localIp="172.27.1.10", 
        type="TUNNEL", 
        readingPause=50, 
        responseTimeout=10, 
        readRetriesLimit=3, 
        autoReconnectPeriod=1,
        localSourceAddr="15.15.242"
    ] {
        Thing device onewire [
            fetch=false,
            pingInterval=300,
            readInterval=0
        ] {
            Type contact       : egWindowBueroTilt          "Fenster Büro (gekippt)"                   [ ga="0/2/120" ]
        }
    }
    Item:
    Code:
    Contact Window_EG_Buero_Tilt            "Fenster Büro (gekippt)"                (Group_Window_Contact,Fenster_Tilted)    { onewire="deviceId=uncached/s_buero;propertyName=sensed.B;refreshinterval=1;invert", channel="knx:device:bridge:onewire:egWindowBueroTilt" }
    Der Wert vom onewire kommt an und wird auch korrekt dargestellt... nur warum wird der Wert nicht an's knx geschrieben?

    Mit dem knx1 binding hat das funktioniert...

    ...die bridge und das device sind auch i.O da andere Items darin funktionieren...

    Viele Grüsse
    pegleg
    Zuletzt geändert von pegleg; 18.09.2018, 12:04.

    #2
    Könnte es sein, dass Du contact-control verwenden musst?

    Ach so... fetch und pingInterval kannst Du getrost weg lassen (benötigen address), und da readInterval=0 default ist, kann dieser Parameter ebenfalls weg gelassen werden.
    Zuletzt geändert von udo1toni; 18.09.2018, 17:19.

    Kommentar


      #3
      contact-control scheint ein Schritt in die richtige Richtung zu sein... kanns mir nicht 100%ig erklären da ja auch auch beim contact ein update stattfindet der an den 2. channel weiter gegeben werden sollte - aber ok.

      Nun habe ich jedoch das Problem das mir das onewire-binding meinen knx Bus flutet...

      die Fensterkontakte werden im Sekundenintervall vom Bus gelesen was auch so gewollt ist.

      onewire.cfg
      Code:
      # only changed values are posted to the event-bus, (optional, defaults to true - values true or false)
      post_only_changed_values=true
      dies scheint nicht zu funktionieren da der wert trotzdem jede sekunde auf dem event-bus und somit im knx landet...

      hier zu sehen
      Code:
      06:13:01.355 [INFO ] [smarthome.event.ItemStateEvent       ] - Window_EG_Buero_Tilt updated to CLOSED                
      06:13:02.347 [INFO ] [smarthome.event.ItemStateEvent       ] - Window_EG_Buero_Tilt updated to CLOSED                
      06:13:03.355 [INFO ] [smarthome.event.ItemStateEvent       ] - Window_EG_Buero_Tilt updated to CLOSED                
      06:13:04.347 [INFO ] [smarthome.event.ItemStateEvent       ] - Window_EG_Buero_Tilt updated to CLOSED                
      06:13:05.356 [INFO ] [smarthome.event.ItemStateEvent       ] - Window_EG_Buero_Tilt updated to CLOSED                
      06:13:06.349 [INFO ] [smarthome.event.ItemStateEvent       ] - Window_EG_Buero_Tilt updated to CLOSED                
      06:13:07.357 [INFO ] [smarthome.event.ItemStateEvent       ] - Window_EG_Buero_Tilt updated to CLOSED                
      06:13:08.350 [INFO ] [smarthome.event.ItemStateEvent       ] - Window_EG_Buero_Tilt updated to CLOSED
      DEBUG log für ein Item update
      Code:
      2018-09-19 08:25:15.181 [DEBUG] [nal.scheduler.OneWireUpdateScheduler] - Autorefresh: Adding 1 item(s) with refresh time 1 to reader queue.
      2018-09-19 08:25:15.182 [DEBUG] [nal.scheduler.OneWireUpdateScheduler] - Update Task isAlive: true
      2018-09-19 08:25:15.183 [DEBUG] [nal.scheduler.OneWireUpdateScheduler] - add item Window_EG_Essen_Sued_Open to updateQueue
      2018-09-19 08:25:15.184 [DEBUG] [internal.scheduler.OneWireUpdateTask] - Autorefresh: got new item Window_EG_Essen_Sued_Open in update queue
      2018-09-19 08:25:15.185 [DEBUG] [internal.scheduler.OneWireUpdateTask] - Autorefresh: Trying to update Item: Window_EG_Essen_Sued_Open
      2018-09-19 08:25:15.186 [DEBUG] [ding.onewire.internal.OneWireBinding] - Item Window_EG_Essen_Sued_Open wants update!
      2018-09-19 08:25:15.187 [DEBUG] [nternal.connection.OneWireConnection] - trying to read from 'uncached/s_essen/sensed.A', read attempt=1
      2018-09-19 08:25:15.193 [DEBUG] [nternal.connection.OneWireConnection] - check if device exists 'uncached': 
      2018-09-19 08:25:15.373 [DEBUG] [nternal.connection.OneWireConnection] - Read value '1' from uncached/s_essen/sensed.A, read attempt=1
      2018-09-19 08:25:15.374 [DEBUG] [ctOneWireDevicePropertyBindingConfig] - type of uncached/s_essen/sensed.A before modifier:Invert OpenCloseType modifier for OnOffType type=OPEN
      2018-09-19 08:25:15.375 [DEBUG] [ctOneWireDevicePropertyBindingConfig] - type of uncached/s_essen/sensed.A after modifier:Invert OpenCloseType modifier for OnOffType type=CLOSED
      2018-09-19 08:25:15.378 [DEBUG] [internal.scheduler.OneWireUpdateTask] - Autorefresh: Waiting for new item in update queue
      jemand eine Idee?

      Viele Grüsse
      pegleg
      Zuletzt geändert von pegleg; 19.09.2018, 09:36.

      Kommentar


        #4
        Ich versteh's nicht... der Cache wird zu keinem Zeitpunkt geleert. und PostOnlyChangedValue ist korrekt gesetzt...

        Der Code darf eigentlich gar nicht zum postUpdate kommen...
        Weder im master noch in 1.12.0 kann ich etwaige Probleme erkennen.

        Ich habe wohl Tomaten auf den Augen... kann mal jemand? :-)

        OneWireBinding.java:
        Code:
            private void postUpdate(Item pvItem, Type pvNewType) {
                synchronized (pvItem) {
                    State lvNewState = (State) pvNewType;
                    State lvCachedState = ivCacheItemStates.get(pvItem.getName());
                    if (!ivPostOnlyChangedValues || !lvNewState.equals(lvCachedState)) {
                        ivCacheItemStates.remove(pvItem.getName());
                        ivCacheItemStates.put(pvItem.getName(), lvNewState);
                        eventPublisher.postUpdate(pvItem.getName(), lvNewState);
                    } else {
                        logger.debug("didn't post update to eventPublisher, because state did not change for item {}",
                                pvItem.getName());
                    }
                }
            }
        Zuletzt geändert von pegleg; 19.09.2018, 11:34.

        Kommentar


          #5
          So! Ich habe den Bug gefunden... remote-debugging sei Dank! Aus meiner Sicht hat das noch nie richtig funktioniert :-/

          OneWireBinding.java
          Code:
          @Override
              public void updated(Dictionary<String, ?> pvConfig) throws ConfigurationException {
                  if (pvConfig != null) {
                      // Basic config
                      String lvPostOnlyChangedValues = Objects.toString(pvConfig.get("post_only_changed_values"), null);
                      if (StringUtils.isNotBlank(lvPostOnlyChangedValues)) {
                          ivPostOnlyChangedValues = Boolean.getBoolean(lvPostOnlyChangedValues);
                      }
          
                      // Connection config
                      OneWireConnection.updated(pvConfig);
                  }
          
                  for (OneWireBindingProvider lvProvider : providers) {
                      scheduleAllBindings(lvProvider);
                  }
          
              }
          Boolean.getBoolean("true") liefert false!!! Was der Author hier versucht ist eigneltich ein Boolean.valueOf("true")

          Lösen lässt sich das ganze indem man in userdata/etc/system.properties ein System Property mit dem value "true" erstellt

          Code:
          onewire.post_only_changed_values = true
          und dieses dann referenziert.

          Code:
          # only changed values are posted to the event-bus, (optional, defaults to true - values true or false)
          post_only_changed_values=onewire.post_only_changed_values
          Zum Problem wurde das ganze erst nachdem ich im PaperUI den Wert einmal geändert habe...
          Damit war er dann nämlich nie mehr <leer> und wurde somit immer zu false...

          Kommentar

          Lädt...
          X