Analogwert in Prozent umrechnen - MQTT
-
- Beiträge: 10
- Registriert: 26. Jun 2022 14:02
Analogwert in Prozent umrechnen - MQTT
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
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
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:
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 AntwortWohl 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)
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.
- udo1toni
- Beiträge: 15247
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Analogwert in Prozent umrechnen - MQTT
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:
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.
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)
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
-
- Beiträge: 10
- Registriert: 26. Jun 2022 14:02
Re: Analogwert in Prozent umrechnen - MQTT
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
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
-
- Beiträge: 10
- Registriert: 26. Jun 2022 14:02
Re: Analogwert in Prozent umrechnen - MQTT
Ha ich habe eine Lösung!
Jedoch ist mir dieses Zeichen was die beiden Ausdrücke verbindet noch nie in den letzten 27 Jahren am Computer untergekommen?!
Code: Alles auswählen
JSONPATH:$.ANALOG.A0∩JS:percenttrans.js
- udo1toni
- Beiträge: 15247
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Analogwert in Prozent umrechnen - MQTT
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.
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
-
- Beiträge: 10
- Registriert: 26. Jun 2022 14:02
Re: Analogwert in Prozent umrechnen - MQTT
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
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
- udo1toni
- Beiträge: 15247
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Analogwert in Prozent umrechnen - MQTT
Na, dann muss die Formel den Wert halt noch von 100 abziehen:
Rest identisch...
Code: Alles auswählen
var myVal = 100 - (i - 448)/416*100;
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet