Seite 1 von 1

Zahlenwert invertieren

Verfasst: 15. Jul 2023 19:03
von tanzehn
Hallo Leute, ich brauche eure Hilfe,

gibt es eine einfache Methode in opeHAB zahlen zu invertieren.

Ich habe einen Regensensor der einen Analogenwert von 1024 anzeigt ich hätte aber gerne das er 0 anzeigt wenn kein Regen ist und bei Regen dann ansteigt also 1024 -> 0, 1023->1, 1022->2, 1021->3, 1020->4 usw.

Ich habe mal eine Rule erstellt für eine Rollo da musste ich auch den Wert invertieren 100->0, 90->10 usw.

Code: Alles auswählen

rule "Wohnrollo rechts invert"

when
 
    Item WohnrolloRechtsStart received update

then

        if(WohnrolloRechts.state == 0 ){
            WohnrolloRechtsBrunt.sendCommand(100)
            }
        if(WohnrolloRechts.state == 10 ){
            WohnrolloRechtsBrunt.sendCommand(90)
            }
        if(WohnrolloRechts.state == 20 ){
            WohnrolloRechtsBrunt.sendCommand(80)
            }
        if(WohnrolloRechts.state == 30 ){
            WohnrolloRechtsBrunt.sendCommand(70)
            }
        if(WohnrolloRechts.state == 40 ){
            WohnrolloRechtsBrunt.sendCommand(60)
            }
        if(WohnrolloRechts.state == 50 ){
            WohnrolloRechtsBrunt.sendCommand(50)
            }
        if(WohnrolloRechts.state == 60 ){
            WohnrolloRechtsBrunt.sendCommand(40)
            }
        if(WohnrolloRechts.state == 70 ){
            WohnrolloRechtsBrunt.sendCommand(30)
            }
        if(WohnrolloRechts.state == 80 ){
            WohnrolloRechtsBrunt.sendCommand(20)
            }
        if(WohnrolloRechts.state == 90 ){
            WohnrolloRechtsBrunt.sendCommand(10)
            }
        if(WohnrolloRechts.state == 100 ){
            WohnrolloRechtsBrunt.sendCommand(0)
            }

end
In 10er Schritten geht das ja noch aber bei 1er Schritten dauert das ja ewig

Gibt es da eine komfortablere Möglichkeit mit einer Rule oder ähnlichem ??

Danke im voraus

Re: Zahlenwert invertieren

Verfasst: 15. Jul 2023 19:38
von Harka
Moin,
1024-1=1023, 1024-1020=4, … 1024-1024=0
100-0=100, 100-90=10, …

Re: Zahlenwert invertieren

Verfasst: 16. Jul 2023 00:17
von violine21
tanzehn hat geschrieben: 15. Jul 2023 19:03
Gibt es da eine komfortablere Möglichkeit mit einer Rule oder ähnlichem ??

Danke im voraus
Hallo,
ich würde den Wert skalieren.

Code: Alles auswählen

y = -x + 1024
y möchtest du haben und x ist der Wert vom Regensensor.
Diesen musst du mit (-1) multiplizieren, damit er negativ wird und anschliessend 1024 hinzu addieren.

Re: Zahlenwert invertieren

Verfasst: 16. Jul 2023 08:48
von udo1toni
Ist eigentlich eine ganz einfache Rechenanweisung :)

Code: Alles auswählen

rule "Wohnrollo rechts invert"
when
    Item WohnrolloRechtsStart received update
then
    val pos = (WohnrolloRechts.state as Number).intValue // hole die Position
    val neg = 100 - pos                                  // bilde negierten Wert

    if((WohnrolloRechtsBrunt.state as Number) != neg)    // falls aktuelle Position abweicht
        WohnrolloRechtsBrunt.sendCommand(neg)            // senden
end
Falls Du mehrere Rollläden auf die Weise steuern musst, kommen noch weitere 3 oder vier Anweisungen dazu, ab da ist es dann egal, wie viele Rollläden das betrifft (unter der Voraussetzung, dass die Rollläden vernünftig organisiert sind)

Übrigens sollte es eigentlich nicht nötig sein, solche Klimmzüge zu machen (es sei denn, der Rollladen ist falsch angeschlossen). Geöffnet ist 0, geschlossen ist 100, alles andere ist Unfug.

Re: Zahlenwert invertieren

Verfasst: 16. Jul 2023 19:24
von tanzehn
Hallo, vielen Dank für eure Hilfe und die Lösungsansätze. Ich werde es mal probieren. :idea: