Ankündigung

Einklappen
Keine Ankündigung bisher.

sitemaps mapping feature

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

    sitemaps mapping feature

    Hallo,

    ich bräuchte bei den Mappings ein Sonderzeichen. Eine möglicher Wert eines Items ist "SAT/CBL". Ein Mapping wie folgt geht nicht und scheitert am "/":
    Code:
    Switch	 	item=Denon_Source mappings=[SAT/CBL="medio", GAME="wii", MPLAY="mac", CD="sonos", PHONO="squeezebox"]
    Welche Möglichkeiten habe ich? Folgendes klappt nicht:
    Code:
    Switch	 	item=Denon_Source mappings=["SAT/CBL"="medio", GAME="wii", MPLAY="mac", CD="sonos", PHONO="squeezebox"]
    Mein nächster Schritt wäre zwei Items die über rules miteinander verbunden sind und sich gegenseitig updaten. Den einen zeige ich an, mit dem anderen steure ich das externe device.

    Any other advise?

    Viele Grüße
    Ralf

    #2
    Auch wenns keine hilfe ist ...

    ich habe es auch nicht geschafft.
    Nur so wie mit dem Volume bei mir umgesetzt, was deiner idee mit zwei items entspricht.

    Code:
    rule "DENON Master Input"
    	when
    		Item Denon_Master_InputTXT received update
    	then
    		if (Denon_Master_InputTXT.state.toString == "SAT/CBL") sendCommand(Denon_Master_Input, "SATCBL")
    		else sendCommand(Denon_Master_Input, Denon_Master_InputTXT.state.toString)
    	end

    Kommentar


      #3
      Ich hab ein ähnliches Probleme mit dem Denn gelöst indem ich per Exec Bindung ein Wrapper-Skript aufrufe, dass dann die störenden Strings umsetzt und an den Denn schickt. Eine direkte Lösung habe ich auch nicht gefunden.

      Kommentar


        #4
        Hallo,

        ich verzweifle jedes mal mit sendCommand, posUpdate, sendCommand. Verstehe die Unterschiede nicht.

        Ich habe mit der folgenden IMplementierung irgendwie ein "Ping Pong" implementiert.
        Code:
        rule "Denon_SourceTXT updated"
        when
        	Item Denon_SourceTXT changed
        then
        	switch Denon_SourceTXT.state {
        		case Denon_SourceTXT.state == "medio"      : postUpdate(Denon_Source, "SAT/CBL")
        		case Denon_SourceTXT.state == "wii"        : postUpdate(Denon_Source, "GAME")
        		case Denon_SourceTXT.state == "sonos"      : postUpdate(Denon_Source, "CD")
        		case Denon_SourceTXT.state == "mac"   	   : postUpdate(Denon_Source, "MPLAY")
        //		case Denon_SourceTXT.state == "squeezebox" : postUpdate(Denon_Source, "PHONO")
        	}
        end
        
        
        rule "Denon_Source updated"
        when
        	Item Denon_Source changed
        then
        	switch Denon_Source.state {
        		case Denon_Source.state == "SAT/CBL"    	: postUpdate(Denon_SourceTXT, "medio")
        		case Denon_Source.state == "GAME"        	: postUpdate(Denon_SourceTXT, "wii")
        		case Denon_Source.state == "CD"      		: postUpdate(Denon_SourceTXT, "sonos")
        		case Denon_Source.state == "MPLAY"      	: postUpdate(Denon_SourceTXT, "mac")
        //		case Denon_Source.state == "PHONO" 			: postUpdate(Denon_SourceTXT, "squeezebox")
        	}
        end
        Help.

        Viele Grüße
        Ralf

        Kommentar


          #5
          Das Pingpong ist doch logisch, ein Update von Denon_SourceTXT löst die erste Regel aus, die dann Denon_Source ändert, was wiederum die zweite Regel auslöst die dann Denon_SourceTXT ändert usw. ...

          Was Du machen könntest, je nachdem was erreicht werden soll:

          - Den Status direkt zuweisen also z.B. Denon_Source.state = "CD", damit wird der Weg über den Event-Bus umgangen.

          - Zwischen sendCommand und postUpdate unterscheiden, ersteres sendet ein Kommando auf den Bus das eine Aktion auslöst, also z.B. "Schalte Licht aus", zweiteres informiert über den aktuellen Zustand "Licht ist aus". Im KNX-Binding sind die unterschiede aber wohl nicht so stringent gehandhabt. Triggern kannst Du dann z.B. auch auf Item xy received command

          - Eine zusätzliche If-Abfrage die ein postUpdate nur dann auslöst wenn sich der Status der Items wirklich unterscheidet.

          - Das zusätzliche Atem vermeiden und mit einem Wrapper-Skript arbeiten das dann die Befehle am Ende an den Receiver sendet.

          Kommentar


            #6
            Danke. Ich hatte deshalb die Rule getriggert mit "Changed" und dann den jeweils anderen Item mit postUpdate geändert.

            Wenn ich einen Item mit postUpdate ändere greift dann die "changed" rule?

            Kommentar


              #7
              Wenn es beim Update geändert wurde dann sicher, wenn der gleiche Wert wieder gesendet wird bin ich mir nicht sicher.

              Kommentar

              Lädt...
              X