Analogwert in Prozent umrechnen - MQTT

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Acrobat88
Beiträge: 10
Registriert: 26. Jun 2022 14:02
Answers: 0

Analogwert in Prozent umrechnen - MQTT

Beitrag von Acrobat88 »

Moin Community,

ich habe shcon sie Suche damit beauftragt aber aus keinem thread wurde ich schlau. Ich habe einen Sensor der mir einen Analogwert per MQTT über den ESP32 an OH3 gibt. Nun würde ich gerne die Analogranche 448-864 in Prozent angezeigt haben. Ich habe das Item schon als Percent item angelegt ich kann ja dann auch minimal und maximal angeben jedoch hat das nur eimen unter 1% tigen Shiet angezeigt.
Hat jemand eine leichte Umsetzung ohne irgendwelche Dateien anzulegen oder andere Items?!

Beste

Karl
von udo1toni » 17. Jul 2022 20:55
So geht das nicht. Minimum und Maximum sind Werte für das Senden von Werten. Der Empfang kann ja nicht beeinflusst werden. Es ist auch nicht so, dass Du eine Range vorgeben kannst und dann daraus automatisch 100 % werden.
Wohl aber kannst Du ein JavaScript Script anlegen, was das für Dich erledigt.

Du konfigurierst dafür eine incomingValueTransformation und setzt dort JS:dateiname.js als Wert ein.

JS steht für die JavaScript Transformation, welche Du verständlicherweise aus den Addons installieren musst.

dateiname.js bezeichnet die Datei mit diesem Namen, welche im Ordner /etc/openhab/transform/ liegen muss. Der Dateiname muss auf .js enden. Wie immer gilt, dass Groß/Kleinschreibung beachtet wird, Datei.js ist eine andere Datei als dAtei.js.

Inhalt der Datei:

Code: Alles auswählen

(function(i) {
    var myVal = (i - 448)/416*100; 
    if(myVal < 0) {
        myVal = 0;
    }
    if(myVal > 100) {
        myVal = 100;
    }
    return Math.round(myVal);
})(input)
448 ist dabei der Minimalwert, der dann als 0 % angezeigt werden soll. 416 ergibt sich aus 864-448, das ist also der Maximalwert, der als 100 dargestellt werden soll. Deshalb wird der aktuelle Wert durch 416 geteilt und anschließend mit 100 multipliziert. Kommt bei der Berechnung ein negativer Wert raus, wird der Wert auf 0 korrigiert, kommt ein Wert über 100 raus, wird der Wert auf 100 korrigiert. Abschließend wird der gerundete Wert ausgegeben.
Weil der Wert über die incomingValueTransformation bearbeitet wird, landet der Wert exakt so im Channel, als Wert 0 - 100. Von dort aus geht der Wert in das Number Item der Wahl.
Gehe zur vollständigen Antwort

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

Re: Analogwert in Prozent umrechnen - MQTT

Beitrag von udo1toni »

So geht das nicht. Minimum und Maximum sind Werte für das Senden von Werten. Der Empfang kann ja nicht beeinflusst werden. Es ist auch nicht so, dass Du eine Range vorgeben kannst und dann daraus automatisch 100 % werden.
Wohl aber kannst Du ein JavaScript Script anlegen, was das für Dich erledigt.

Du konfigurierst dafür eine incomingValueTransformation und setzt dort JS:dateiname.js als Wert ein.

JS steht für die JavaScript Transformation, welche Du verständlicherweise aus den Addons installieren musst.

dateiname.js bezeichnet die Datei mit diesem Namen, welche im Ordner /etc/openhab/transform/ liegen muss. Der Dateiname muss auf .js enden. Wie immer gilt, dass Groß/Kleinschreibung beachtet wird, Datei.js ist eine andere Datei als dAtei.js.

Inhalt der Datei:

Code: Alles auswählen

(function(i) {
    var myVal = (i - 448)/416*100; 
    if(myVal < 0) {
        myVal = 0;
    }
    if(myVal > 100) {
        myVal = 100;
    }
    return Math.round(myVal);
})(input)
448 ist dabei der Minimalwert, der dann als 0 % angezeigt werden soll. 416 ergibt sich aus 864-448, das ist also der Maximalwert, der als 100 dargestellt werden soll. Deshalb wird der aktuelle Wert durch 416 geteilt und anschließend mit 100 multipliziert. Kommt bei der Berechnung ein negativer Wert raus, wird der Wert auf 0 korrigiert, kommt ein Wert über 100 raus, wird der Wert auf 100 korrigiert. Abschließend wird der gerundete Wert ausgegeben.
Weil der Wert über die incomingValueTransformation bearbeitet wird, landet der Wert exakt so im Channel, als Wert 0 - 100. Von dort aus geht der Wert in das Number Item der Wahl.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Acrobat88
Beiträge: 10
Registriert: 26. Jun 2022 14:02
Answers: 0

Re: Analogwert in Prozent umrechnen - MQTT

Beitrag von Acrobat88 »

Lieber udo1toni,

vielen Dank das du mir wieder mal weiter hilfst!
Leider ist das Feld schon mit dem Befehl "JSONPATH:$.ANALOG.A0" besetzt...Wie kann ich beide Befehle dnen in ein Feld schreiben?

Beste

Karl

Acrobat88
Beiträge: 10
Registriert: 26. Jun 2022 14:02
Answers: 0

Re: Analogwert in Prozent umrechnen - MQTT

Beitrag von Acrobat88 »

Ha ich habe eine Lösung!

Code: Alles auswählen

JSONPATH:$.ANALOG.A0∩JS:percenttrans.js
Jedoch ist mir dieses Zeichen was die beiden Ausdrücke verbindet noch nie in den letzten 27 Jahren am Computer untergekommen?!

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

Re: Analogwert in Prozent umrechnen - MQTT

Beitrag von udo1toni »

Genau.
Super, dass Du es sogar selbst rausgefunden hast. Es handelt sich um das mathematische Zeichen für "Schnittmenge", was naturgemäß auf der normalen Tastatur nicht vorhanden ist.
Der einfachste Weg ist, das Zeichen aus dem Hilfstext in der UI zu kopieren, wo der Trick mit dem Verketten mehrerer Transformations auch anhand eines Beispiels erklärt wird.

Es hätte übrigens noch eine weitere Möglichkeit gegeben, und zwar kann man im Link zwischen Channel und Item ebenfalls die Transformations nutzen, dort über das "Profile" des Links. Auch dort hättest Du also das JavaScript Script unterbringen können.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Acrobat88
Beiträge: 10
Registriert: 26. Jun 2022 14:02
Answers: 0

Re: Analogwert in Prozent umrechnen - MQTT

Beitrag von Acrobat88 »

ich habe da doch noch eine Frage:

ich hab das Problem das die Prozent genau falsch herum sind. Es sind jetzt 100% bei vollkommener Trockenheit und 0% bei kompletter Nässe. Wie bekomme ich den Wert denn negiert?...Umkehrbruch?!?

Beste Grüße und großen Dank

Karl

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

Re: Analogwert in Prozent umrechnen - MQTT

Beitrag von udo1toni »

Na, dann muss die Formel den Wert halt noch von 100 abziehen:

Code: Alles auswählen

var myVal = 100 - (i - 448)/416*100; 
Rest identisch...
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten