Windgeschwindigkeit von KNX in OH
-
- Beiträge: 5
- Registriert: 9. Dez 2020 12:47
Windgeschwindigkeit von KNX in OH
Hallo in die Runde,
ich habe bereits eine funktionierende KNX Steuerung und bin nun dabei das ganze in OpenHAB zu verwirklichen.
Ich habe bereits Jalousie auf/ab
Temperaturdaten auslesen und auch paar Charts die Temperaturdaten anzeigen. Gespeichert wird das ganze in einer MariaDB.
Ich stehe nun aber vor einem wahrscheinlich wirklich kleinen Problem aber ich komm nicht drauf.
Ich würde gerne den KNX Wert der Windgeschwindigkeit in kmh abbilden lassen.
das ganze sieht bei mir so aus
items:
Number Windgeschwindigkeit "Windgeschwindigkeit[JS(windspeed.js):%s km/h]" <wind> {channel="knx:device:bridge:generic:Windgeschwindigkeit"}
windspeed.js in scripts
(function(i){
return i*3.6;
})(input)
}
sitemap
Text label="Wetterdaten" icon="sun_clouds"
{
Text item=Windgeschwindigkeit icon="wind"
Chart item=Windgeschwindigkeit period=h service="mysql" legend=true refresh=300000
}
Ich benutzte das Item Windgeschwindigkeit auch für die Speicherung im Persistance File.
im Log sehe ich folgende Zeile:
org.eclipse.smarthome.core.transform.TransformationException: An error occurred while loading JavaScript. /volume1/@appstore/openHAB/conf/transform/windspeed.js (No such file or directory)
speichere ich nun das windspeed.js in den Pfad bekomme ich bei der ausgabe ein "NaN"
sonst liefert es mir den KNX Wert ohne Umrechnung.
Bitte um eure Hilfe bzw. Unterstützung. Danke schon mal
lg
ich habe bereits eine funktionierende KNX Steuerung und bin nun dabei das ganze in OpenHAB zu verwirklichen.
Ich habe bereits Jalousie auf/ab
Temperaturdaten auslesen und auch paar Charts die Temperaturdaten anzeigen. Gespeichert wird das ganze in einer MariaDB.
Ich stehe nun aber vor einem wahrscheinlich wirklich kleinen Problem aber ich komm nicht drauf.
Ich würde gerne den KNX Wert der Windgeschwindigkeit in kmh abbilden lassen.
das ganze sieht bei mir so aus
items:
Number Windgeschwindigkeit "Windgeschwindigkeit[JS(windspeed.js):%s km/h]" <wind> {channel="knx:device:bridge:generic:Windgeschwindigkeit"}
windspeed.js in scripts
(function(i){
return i*3.6;
})(input)
}
sitemap
Text label="Wetterdaten" icon="sun_clouds"
{
Text item=Windgeschwindigkeit icon="wind"
Chart item=Windgeschwindigkeit period=h service="mysql" legend=true refresh=300000
}
Ich benutzte das Item Windgeschwindigkeit auch für die Speicherung im Persistance File.
im Log sehe ich folgende Zeile:
org.eclipse.smarthome.core.transform.TransformationException: An error occurred while loading JavaScript. /volume1/@appstore/openHAB/conf/transform/windspeed.js (No such file or directory)
speichere ich nun das windspeed.js in den Pfad bekomme ich bei der ausgabe ein "NaN"
sonst liefert es mir den KNX Wert ohne Umrechnung.
Bitte um eure Hilfe bzw. Unterstützung. Danke schon mal
lg
Das geht so nicht. Die einzige (vorgesehene) Möglichkeit, Daten über die Persistence zu speichern, ist, die Daten in ein Item zu speichern. Dein Problem ist, dass die Daten über knx rein kommen. knx bietet keinen Transformation Service beim Input. Das bedeutet, Du musst zwingend ein zweites Item anlegen und die Transformation über eine Rule vornehmen. So:
Dazu ist zu bemerken, dass die Prüfung auf einen gültigen Wert (ist eine Zahl) sehr wichtig ist, damit es nicht zu einer Exception kommt. Ob man dann den Transformation Service nutzt, oder gleich den Wert berechnet, ist bei dieser Berechnung keine Frage
Es gibt andere Addons, die das Einbinden im Link bzw. direkt im Channel erlauben, damit kann man sich dann die Rule komplett sparen.
Es gibt noch eine weitere Option, die leider bisher nicht gut dokumentiert ist, das ist das Erstellen eine Profiles. Als Beispiel nenne ich hier das Offset Profile, welches man nutzen könnte, um einem Wert einen Offset hinzuzurechnen, also z.B. bekomst Du die Temperatur in Kelvin angeliefert, möchtest aber °Celsius haben, dann setzt Du für das Item das Profile [profile="offset", offset="-273.15"] und schon wird statt 300 der Wert 26.85 ins Item gespeichert. Und das funktioniert ganz ohne Rule!
Leider wird (bisher) kein Profile "factor" mitgeliefert, es sollte aber kein Problem sein, das selbst anzulegen, wenn man mal herausgefunden hat, wie man ein eigenes Profile entwickelt. Bis dahin ist aber die oben gezeigte Rule und ein zweites Item die einzige sinnvolle Möglichkeit, die bereits transformierten Werte zu persistieren.
Gehe zur vollständigen AntwortCode: Alles auswählen
rule "wind umrechnen"
when
Item WindgeschwindigkeitIN received update // Eingang
then
if(WindgeschwindigkeitIN.state instanceof Number)
WindgeschwindigkeitOUT.postUpdate(transform("JS","windspeed.js",WindgeschwindigkeitIN.state.toString))
end

Code: Alles auswählen
rule "wind umrechnen"
when
Item WindgeschwindigkeitIN received update // Eingangswert
then
if(WindgeschwindigkeitIN.state instanceof Number) // ist Eingangswert eine Zahl?
WindgeschwindigkeitOUT.postUpdate((WindgeschwindigkeitIN.state as Number)*3.6) // Ausgangswert aus Eingangswert
end
Es gibt noch eine weitere Option, die leider bisher nicht gut dokumentiert ist, das ist das Erstellen eine Profiles. Als Beispiel nenne ich hier das Offset Profile, welches man nutzen könnte, um einem Wert einen Offset hinzuzurechnen, also z.B. bekomst Du die Temperatur in Kelvin angeliefert, möchtest aber °Celsius haben, dann setzt Du für das Item das Profile [profile="offset", offset="-273.15"] und schon wird statt 300 der Wert 26.85 ins Item gespeichert. Und das funktioniert ganz ohne Rule!
Leider wird (bisher) kein Profile "factor" mitgeliefert, es sollte aber kein Problem sein, das selbst anzulegen, wenn man mal herausgefunden hat, wie man ein eigenes Profile entwickelt. Bis dahin ist aber die oben gezeigte Rule und ein zweites Item die einzige sinnvolle Möglichkeit, die bereits transformierten Werte zu persistieren.
-
- Beiträge: 99
- Registriert: 30. Jul 2016 19:51
- Wohnort: östlich von Hamburg, südlich von Lübeck, nördlich von Geesthacht
Re: Windgeschwindigkeit von KNX in OH
Ist da nicht ein "}" zu viel in deinem .js File?
Gruß iBot
Gesendet von meinem ONEPLUS A6013 mit Tapatalk
Gruß iBot
Gesendet von meinem ONEPLUS A6013 mit Tapatalk
-
- Beiträge: 5
- Registriert: 9. Dez 2020 12:47
Re: Windgeschwindigkeit von KNX in OH
Danke für die Rückmeldung. Da hatte ich einen Kopierfehler.
so sieht die aus:
(function(i){
return i*3.6;
})(input)
so sieht die aus:
(function(i){
return i*3.6;
})(input)
- udo1toni
- Beiträge: 15269
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Windgeschwindigkeit von KNX in OH
windspeed.js gehört in das Verzeichnis transform/ und nicht in scripts/
JS ist ein Transformation Service... 


openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet
-
- Beiträge: 5
- Registriert: 9. Dez 2020 12:47
Re: Windgeschwindigkeit von KNX in OH
Danke udo,
das war es
.
Gestern leider kein wind darum konnte ich es nicht wirklich testen. Aber heute sieht es gut aus und es schreibt auch die richtigen Werte.
Ich hätte jetzt noch eine weitere Frage:
unter meiner gerechneten Windgeschwindigkeit, habe ich ein Chart auf dem die Windgeschwindigkeit von KNX angezeigt wird. Aber natürlich auch wieder in m/s weil dort das Item Windgeschwindigkeit gespeichert und verwendet wird und nicht der Wert nach dem umrechnen mit der windspeed.js
wie wäre hier der richtige Weg um die Werte ins jdbc.persist file zu bekommen. Das ganze sieht zur zeit so aus:
Strategies {
everyMinute : "0 * * * * ?"
everyHour : "0 0 * * * ?"
everyDay : "0 0 0 * * ?"
default = everyChange
}
Items {
Temperatur_Aussen : strategy = everyChange, restoreOnStartup
Windgeschwindigkeit : strategy = everyChange, restoreOnStartup <-- kann ich hier irgendwie die windspeed.js hinterlegen? bzw. den Wert der dort berechnet wird?
//Regen : strategy = everyChange, restoreOnStartup
Hier ein Screenshot um sich das vorzustellen:
vielen dank
grüße mex
das war es

Gestern leider kein wind darum konnte ich es nicht wirklich testen. Aber heute sieht es gut aus und es schreibt auch die richtigen Werte.
Ich hätte jetzt noch eine weitere Frage:
unter meiner gerechneten Windgeschwindigkeit, habe ich ein Chart auf dem die Windgeschwindigkeit von KNX angezeigt wird. Aber natürlich auch wieder in m/s weil dort das Item Windgeschwindigkeit gespeichert und verwendet wird und nicht der Wert nach dem umrechnen mit der windspeed.js
wie wäre hier der richtige Weg um die Werte ins jdbc.persist file zu bekommen. Das ganze sieht zur zeit so aus:
Strategies {
everyMinute : "0 * * * * ?"
everyHour : "0 0 * * * ?"
everyDay : "0 0 0 * * ?"
default = everyChange
}
Items {
Temperatur_Aussen : strategy = everyChange, restoreOnStartup
Windgeschwindigkeit : strategy = everyChange, restoreOnStartup <-- kann ich hier irgendwie die windspeed.js hinterlegen? bzw. den Wert der dort berechnet wird?
//Regen : strategy = everyChange, restoreOnStartup
Hier ein Screenshot um sich das vorzustellen:
vielen dank
grüße mex
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
- udo1toni
- Beiträge: 15269
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Windgeschwindigkeit von KNX in OH
Das geht so nicht. Die einzige (vorgesehene) Möglichkeit, Daten über die Persistence zu speichern, ist, die Daten in ein Item zu speichern. Dein Problem ist, dass die Daten über knx rein kommen. knx bietet keinen Transformation Service beim Input. Das bedeutet, Du musst zwingend ein zweites Item anlegen und die Transformation über eine Rule vornehmen. So:
Dazu ist zu bemerken, dass die Prüfung auf einen gültigen Wert (ist eine Zahl) sehr wichtig ist, damit es nicht zu einer Exception kommt. Ob man dann den Transformation Service nutzt, oder gleich den Wert berechnet, ist bei dieser Berechnung keine Frage
Es gibt andere Addons, die das Einbinden im Link bzw. direkt im Channel erlauben, damit kann man sich dann die Rule komplett sparen.
Es gibt noch eine weitere Option, die leider bisher nicht gut dokumentiert ist, das ist das Erstellen eine Profiles. Als Beispiel nenne ich hier das Offset Profile, welches man nutzen könnte, um einem Wert einen Offset hinzuzurechnen, also z.B. bekomst Du die Temperatur in Kelvin angeliefert, möchtest aber °Celsius haben, dann setzt Du für das Item das Profile [profile="offset", offset="-273.15"] und schon wird statt 300 der Wert 26.85 ins Item gespeichert. Und das funktioniert ganz ohne Rule!
Leider wird (bisher) kein Profile "factor" mitgeliefert, es sollte aber kein Problem sein, das selbst anzulegen, wenn man mal herausgefunden hat, wie man ein eigenes Profile entwickelt. Bis dahin ist aber die oben gezeigte Rule und ein zweites Item die einzige sinnvolle Möglichkeit, die bereits transformierten Werte zu persistieren.
Code: Alles auswählen
rule "wind umrechnen"
when
Item WindgeschwindigkeitIN received update // Eingang
then
if(WindgeschwindigkeitIN.state instanceof Number)
WindgeschwindigkeitOUT.postUpdate(transform("JS","windspeed.js",WindgeschwindigkeitIN.state.toString))
end

Code: Alles auswählen
rule "wind umrechnen"
when
Item WindgeschwindigkeitIN received update // Eingangswert
then
if(WindgeschwindigkeitIN.state instanceof Number) // ist Eingangswert eine Zahl?
WindgeschwindigkeitOUT.postUpdate((WindgeschwindigkeitIN.state as Number)*3.6) // Ausgangswert aus Eingangswert
end
Es gibt noch eine weitere Option, die leider bisher nicht gut dokumentiert ist, das ist das Erstellen eine Profiles. Als Beispiel nenne ich hier das Offset Profile, welches man nutzen könnte, um einem Wert einen Offset hinzuzurechnen, also z.B. bekomst Du die Temperatur in Kelvin angeliefert, möchtest aber °Celsius haben, dann setzt Du für das Item das Profile [profile="offset", offset="-273.15"] und schon wird statt 300 der Wert 26.85 ins Item gespeichert. Und das funktioniert ganz ohne Rule!
Leider wird (bisher) kein Profile "factor" mitgeliefert, es sollte aber kein Problem sein, das selbst anzulegen, wenn man mal herausgefunden hat, wie man ein eigenes Profile entwickelt. Bis dahin ist aber die oben gezeigte Rule und ein zweites Item die einzige sinnvolle Möglichkeit, die bereits transformierten Werte zu persistieren.
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet
-
- Beiträge: 5
- Registriert: 9. Dez 2020 12:47
Re: Windgeschwindigkeit von KNX in OH
Wahnsinn - vielen dank. Das ist genau das was ich benötigt habe und funktioniert auf anhieb.
So macht das ganze wirklich Freude. Ich denke ich werde hier eventuell noch die eine oder andere Frage stellen.
Nochmals vielen dank udo1toni - ich bin begeistert
So macht das ganze wirklich Freude. Ich denke ich werde hier eventuell noch die eine oder andere Frage stellen.
Nochmals vielen dank udo1toni - ich bin begeistert
- udo1toni
- Beiträge: 15269
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Windgeschwindigkeit von KNX in OH
Immer gerne 
Gesendet von iPad mit Tapatalk

Gesendet von iPad mit Tapatalk
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet
-
- Beiträge: 5
- Registriert: 9. Dez 2020 12:47
Re: Windgeschwindigkeit von KNX in OH
Hallo nochmal,
ich hab jetzt ein weniger herumprobiert und wollte fragen ob es eine Möglichkeit gibt den Zeitstempel in die Ausgabe mitzunehmen.
meine rule sieht jetzt so aus:
rule "Update Aussen max and min temperatures"
when
Item Temperatur_Aussen changed or
Time cron "0 0 0 * * ?" or
System started
then
postUpdate(Temperatur_AussenMax24h, Temperatur_Aussen.maximumSince(now.withTimeAtStartOfDay).state).
postUpdate(Temperatur_AussenMin24h, Temperatur_Aussen.minimumSince(now.withTimeAtStartOfDay).state)
postUpdate(Temperatur_AussenMax1w, Temperatur_Aussen.maximumSince(now.minusWeeks(1)).state)
postUpdate(Temperatur_AussenMin1w, Temperatur_Aussen.minimumSince(now.minusWeeks(1)).state)
postUpdate(Temperatur_AussenMax1m, Temperatur_Aussen.maximumSince(now.withTimeAtStartOfDay.withDayOfMonth(1)).state)
postUpdate(Temperatur_AussenMin1m, Temperatur_Aussen.minimumSince(now.withTimeAtStartOfDay.withDayOfMonth(1)).state)
sitemap
Text item=Temperatur_AussenMax24h icon="sun"
Text item=Temperatur_AussenMin24h icon="snow"
Text item=Temperatur_AussenMax1w icon="sun"
Text item=Temperatur_AussenMin1w icon="snow"
Text item=Temperatur_AussenMax1m icon="sun"
Text item=Temperatur_AussenMin1m icon="snow"
das ganze funktioniert auch aber ich komm nicht drauf wie ich in der Ausgabe den Timestamp reinbekomme. In der DB sehe ich den Zeitstempel ja.
mfg
mex
ich hab jetzt ein weniger herumprobiert und wollte fragen ob es eine Möglichkeit gibt den Zeitstempel in die Ausgabe mitzunehmen.
meine rule sieht jetzt so aus:
rule "Update Aussen max and min temperatures"
when
Item Temperatur_Aussen changed or
Time cron "0 0 0 * * ?" or
System started
then
postUpdate(Temperatur_AussenMax24h, Temperatur_Aussen.maximumSince(now.withTimeAtStartOfDay).state).
postUpdate(Temperatur_AussenMin24h, Temperatur_Aussen.minimumSince(now.withTimeAtStartOfDay).state)
postUpdate(Temperatur_AussenMax1w, Temperatur_Aussen.maximumSince(now.minusWeeks(1)).state)
postUpdate(Temperatur_AussenMin1w, Temperatur_Aussen.minimumSince(now.minusWeeks(1)).state)
postUpdate(Temperatur_AussenMax1m, Temperatur_Aussen.maximumSince(now.withTimeAtStartOfDay.withDayOfMonth(1)).state)
postUpdate(Temperatur_AussenMin1m, Temperatur_Aussen.minimumSince(now.withTimeAtStartOfDay.withDayOfMonth(1)).state)
sitemap
Text item=Temperatur_AussenMax24h icon="sun"
Text item=Temperatur_AussenMin24h icon="snow"
Text item=Temperatur_AussenMax1w icon="sun"
Text item=Temperatur_AussenMin1w icon="snow"
Text item=Temperatur_AussenMax1m icon="sun"
Text item=Temperatur_AussenMin1m icon="snow"
das ganze funktioniert auch aber ich komm nicht drauf wie ich in der Ausgabe den Timestamp reinbekomme. In der DB sehe ich den Zeitstempel ja.
mfg
mex
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
- udo1toni
- Beiträge: 15269
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Windgeschwindigkeit von KNX in OH
Es gibt dazu zwei Möglichkeiten. Das eine wäre ein eigenes Item für den Zeitstempel (böte sich an, wenn Dir ein Zeitstempel für alle Items reicht), das zweite wäre, statt Number Items String Items zu verwenden und dann den Zeitstempel gemeinsam mit dem Wert im String speichern. Wie es besser ist, musst Du selbst entscheiden 
Gesendet von iPad mit Tapatalk

Gesendet von iPad mit Tapatalk
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet