Zahlenwert invertieren

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
tanzehn
Beiträge: 21
Registriert: 15. Dez 2020 10:03
Answers: 0

Zahlenwert invertieren

Beitrag 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

Harka
Beiträge: 489
Registriert: 30. Apr 2021 13:13
Answers: 19

Re: Zahlenwert invertieren

Beitrag von Harka »

Moin,
1024-1=1023, 1024-1020=4, … 1024-1024=0
100-0=100, 100-90=10, …

violine21
Beiträge: 600
Registriert: 20. Sep 2019 05:49
Answers: 7

Re: Zahlenwert invertieren

Beitrag 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.

Benutzeravatar
udo1toni
Beiträge: 15247
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Zahlenwert invertieren

Beitrag 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.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

tanzehn
Beiträge: 21
Registriert: 15. Dez 2020 10:03
Answers: 0

Re: Zahlenwert invertieren

Beitrag von tanzehn »

Hallo, vielen Dank für eure Hilfe und die Lösungsansätze. Ich werde es mal probieren. :idea:

Antworten