Ankündigung

Einklappen
Keine Ankündigung bisher.

Typ "num" zu "bool"

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

    Typ "num" zu "bool"

    So,

    das eine Thema hab ich gelöst bekommen, jetzt hab ich direkt wieder was.


    Ich habe im gesamten OG Einbaustrahler verbaut, diese werden via DALI angesteuert und sind mit dem IPAS DALI Gateway ans KNX angeschlossen.

    Leider liefert das Gateway den aktuellen Status immer als %-Wert zurück ODER als 0/1 Wert. Aktuell ist das Gateway auf %-Werte parametriert.

    Meine Items dazu sehen folgendermaßen aus:

    Code:
    [og]
    	[[licht]]
    		[[[schlafzimmer]]]
    			[[[[decke]]]]
    				type = bool
    				knx_dpt = 1
    				knx_send = 3/1/1
    				knx_cache = 3/1/4
    				
    				[[[[[dimmen]]]]]
    					type = num
    					knx_dpt = 5
    					knx_send = 3/1/3
    					knx_cache = 3/1/4

    Jetzt bekomm ich logischerweise im SmartHome-Log die Info das ein Wert "140" nicht kompatibel zu bool ist.
    Füge ich die Zeile:

    Code:
    eval = value if value == 0 else 1
    hinzu klappt es ohne Fehlermeldung, aber dafür funktioniert dann das SmartVisu Widget "dimmer" nicht mehr vollständig.

    Es wird mir beim betätigen des Sliders das "Ein / Aus" Symbol korrekt aktualisiert, aber ich kann nicht mehr direkt "Ein" / "Aus" mittels Klick auf das Icon senden.

    Lasse ich das eval weg, so funktioniert das Klicken auf "Ein / Aus", aber bei Betätigung des Sliders aktualisiert sich der Zustand nicht mehr, was auch logisch ist da 140 erst einmal kein "bool" ist.

    Wenn ich das Gateway umparametriere geht mir die %-Wert Info verloren und das Dimmer-Widget ist irgendwie dahin, daher meine Frage wie ich dieses "Problem" am geschicktesten löse?


    Dimmer kann nur 2 Items entgegen nehmen, "Schalten" und "Dimmen", also müsste doch die Wert-Konvertierung irgendwie auf SmartHome.py Seite passieren, ohne aber die Funktionalität zu beeinträchtigen.

    Geht das überhaupt?


    Grüße,

    Lars

    #2
    Hat niemand eine Idee?
    Bei den ganzen Themen im Forum klingt mein "Problem" gradezu trivial. :-)

    Ich habe das Gateway mal für einen Kanal umparametriert um den Status Ein-/Aus zu bekommen, aber wie vermutet geht mir der Dimmen-Status verloren.

    Ich habe auch schon mal an knx_reply oder so gedacht, aber ich komme leider zu keinem guten Ergebnis.

    Ich habe schon dran gedacht das man evtl. ne Logik schreiben muss, hier fehlt mir aber der zündende Gedanke was eigentlich genau passieren muss / soll um aus meinen 3 GAs (Schalten 0/1, Wert schreiben, Wert Status) einen Dimmer mit einem Bool und einem Num Item zu basteln.


    Alternativ bleibt halt statt "device.dimmer" n "basic.slider", dann wäre das Schalten aber weniger komfortabel.

    Kommentar


      #3
      Hm.

      der Nachbarthread hat mich auf ne Idee gebracht. Müsste ne Logik nicht funktionieren?

      Code:
      #!usr/bin/env python
      
      if sh.og.schlafzimmer.decke.dimmen() > 0:
      	sh.og.schlafzimmer.decke(1)
      
      elif sh.og.schlafzimmer.decke.dimmen() == 0:
      	sh.og.schlafzimmer.decke(0)

      Und bei der Item.conf verzichte ich auf ein knx_cache / knx_listen bei meinem "Bool"?

      Oder würde das gleichzeitig noch mal die Werte 1 / 0 auf den Bus senden beim ausführen der Logik?

      Kommentar


        #4
        Ich verstehe das Problem nicht ganz: Wieso definierst du das item als "bool", wenn du gar keinen Bool-Wert sendest/liest?

        Kommentar


          #5
          Das DALI Gateway hat 1 Bool GA zum Ein- /Ausschalten, aber keine GA um den Status zu lesen.

          Daneben hat es 2 Num (DPT 5) GAs. Eine zum Setzen des Dimmwerts und eine zum lesen des Dimmwerts.


          Sende ich eine 1 auf die erste GA so Schaltet sich das Licht auf einen im Gateway parametrierten Wert ein (z.B 90%).


          Für die Visu würde ich gerne das Dimmer Widget verwenden. Der Slider funktioniert einwandfrei, weil das definierte Item (og.licht.schlafzimmer.decke.dimmen) vollständig ist. Der Schalter "funktioniert", zeigt aber beim verwenden des Sliders nicht "Ein" an, weil es keinen E/A Status GA gibt.

          Daher war meine Idee aus der DPT-5 GA per Logik / Eval einen "bool"-Status zu ermitteln.


          Nach ein wenig mehr basteln habe ich glaube ich eine Lösung gefunden:

          Ich setze über eine Logik mit "sh.KNX.groupwrite" eine "virtuelle Gruppenadresse" vom DPT 1 auf den gewünschten Wert (0 bei 0, 1 bei > 0) und in der Item.Conf hat das "Schalt"-Item nun halt "knx_listen = <virtuelle Adresse>"

          Hat zwar den Nachteil das die GA u.U. beim Starten von SmartHome nicht synchron mit dem Ist-Zustand sein kann, weil die Wert-GA nicht neu evaluiert wird (oder geht knx_init?).
          Außerdem muss ich für jeden Raum im OG der mit dem DALI-Gateway betrieben wird die Logik verwenden.

          Kommentar


            #6
            Mit der Logik und Dummy-GAs läuft es nun.
            Da meine Items in den Räumen die selbe Struktur aufweisen reicht mir auch ein einfacher Trigger mit Wildcard zum auslösen.

            Code:
            #!/usr/bin/env python
            
            # ermittelt zu dem auslösendem item, das elternelement 
            # und schreibt den wert 0 od. 1 in die dort konfigurierte listen gruppenadresse
            triggerItem = sh.return_item(trigger['source']);
            if triggerItem() > 0:
            	sh.KNX.groupwrite(triggerItem.return_parent().conf['knx_listen'], 1, '1')
            elif triggerItem() == 0:
            	sh.KNX.groupwrite(triggerItem.return_parent().conf['knx_listen'], 0, '1')

            Kommentar


              #7
              Hallo,

              das müsste deutlich einfacher gehen:
              Code:
              [og]
              	[[licht]]
              		[[[schlafzimmer]]]
              			[[[[decke]]]]
              				type = bool
              				knx_dpt = 1
              				knx_send = 3/1/1
              				eval = if sh.og.licht.schlafzimmer.decke.dimmen()>0: value=1 else value=0
              eval_trigger= og.licht.schlafzimmer.decke.dimmen
              				
              				[[[[[dimmen]]]]]
              					type = num
              					knx_dpt = 5
              					knx_send = 3/1/3
              					knx_cache = 3/1/4
              Bei der Syntax bin ich jetzt nicht ganz sicher, aber das Prinzip müsste funktionieren.
              Wichtig ist, dass du beim bool nicht vom knx liest sondern ein eval vom dimm-item machst.

              Gruß,
              Hendrik

              Kommentar


                #8
                Hey Hendrik,

                ja Du hast Recht, mit eval + eval_trigger funktioniert das wohl auch.

                Verwende aktuell die Logik, da ich dann auch aufm Bus, bzw. in der Theorie im Logik-Modul meines Gateways direkt n Bool-Wert habe.

                Grüße,

                Lars

                Kommentar


                  #9
                  Zitat von henfri Beitrag anzeigen
                  Code:
                  eval = if sh.og.licht.schlafzimmer.decke.dimmen()>0: value=1 else value=0
                  Bei der Syntax bin ich jetzt nicht ganz sicher ......
                  Scheint so, als ob der Syntax wirklich nicht ganz korrekt ist.
                  Hab schon einiges probiert, finde aber nicht die richtige Lösung.
                  Könnte mir da jemand weiterhelfen?
                  Danke

                  Kommentar


                    #10
                    Code:
                    eval = if sh.og.licht.schlafzimmer.decke.dimmen()>0: value=1 else value=0
                    ist Unsinn, wer hat dir denn das erzählt :-)

                    Code:
                    eval = 1 if sh.og.licht.schlafzimmer.decke.dimmen()>0  else 0
                    Könnte funktionieren.

                    Für mich ist die Syntax aber auch nicht ganz klar.
                    Diese Funktion wird intern genutzt, falls du nachlesen willst:
                    2. Built-in Functions ? Python v2.7.6 documentation

                    Value ist dabei der Wert den das Item gerade bekommen hat.

                    Gruß,
                    Hendrik

                    Kommentar

                    Lädt...
                    X