Hierfür wird mittels openhab-cli die installierte Version ermittelt, und via http-Thing und Javascript die letzte verfügbare Version.
Anschließend gleicht die Rule Stelle für Stelle der Versionen ab.
oh_version.sh
Code: Alles auswählen
#! /bin/bash
LINE=`openhab-cli info | grep Version`
VERSION=`echo ${LINE} | cut -d' ' -f2`
echo ${VERSION}
Code: Alles auswählen
Thing exec:command:openhab_ver "openHAB version" [command="/home/oh_version.sh"]
Code: Alles auswählen
UID: http:url:OH_Version
label: "openHAB: aktuellste Version verfügbar"
thingTypeUID: http:url
configuration:
authMode: BASIC
ignoreSSLErrors: false
baseURL: https://api.github.com/repos/openhab/openhab-core/tags
delay: 0
stateMethod: GET
refresh: 3600
commandMethod: GET
contentType: application/json
timeout: 3000
bufferSize: 2048
channels:
- id: last-failure
channelTypeUID: http:request-date-time
label: Last Failure
configuration: {}
- id: last-success
channelTypeUID: http:request-date-time
label: Last Success
configuration: {}
- id: ohversionjsonrawdata
channelTypeUID: http:string
label: OH Version RAW
configuration:
mode: READONLY
- id: ohversionlatest
channelTypeUID: http:string
label: OH Version Latest
configuration:
mode: READONLY
stateTransformation:
- JS:latest.js
Code: Alles auswählen
(function(input) {
try {
// Versuche, den JSON-String in ein JavaScript-Objekt umzuwandeln
var inputData = JSON.parse(input);
// Überprüfe, ob inputData ein Array ist
if (!Array.isArray(inputData)) {
return "Invalid input: inputData must be an array";
}
// Filtere die Objekte mit gültigen Zahlen im "name"-Eigenschaft
var numbersOnly = inputData
.filter(function(obj) {
return typeof obj.name === "string" && !isNaN(parseFloat(obj.name));
})
.map(function(obj) {
return obj.name;
});
// Überprüfe, ob numbersOnly leer ist
if (numbersOnly.length === 0) {
return "No valid numbers found in the inputData";
}
// Sortiere das numbersOnly-Array in absteigender Reihenfolge (höchste Zahl zuerst)
numbersOnly.sort(function(a, b) {
return b.localeCompare(a, undefined, { numeric: true, sensitivity: 'base' });
});
// Gib die höchste Zahl als Ergebnis zurück
return numbersOnly[0];
} catch (error) {
return "Error parsing input: " + error.message;
}
})(input);
Code: Alles auswählen
Switch OH_ver_run {channel="exec:command:openhab_ver:run", autoupdate="false"}
String OH_Version "Version [%s]" {channel="exec:command:openhab_ver:output"}
String OH_Version_Latest {channel="http:url:OH_Version:ohversionlatest"}
Code: Alles auswählen
rule "openHAB Update-Check"
when
Time cron "0 0 19 * * ? *" or
Item OH_Version_Latest changed or
System started
then
val OH_installed = OH_Version.state.toString.replace(".","#").split("#")
val OH_latest = OH_Version_Latest.state.toString.replace(".","#").split("#")
var x = 0
var y = 0
var boolean update_available = false
var i = 0
while (i < 3) {
x = Integer::parseInt(OH_installed.get(i))
y = Integer::parseInt(OH_latest.get(i))
if (y > x)
update_available = true
i += 1
}
if (update_available)
sendNotification("me@mail.de", "Update für openHAB verfügbar. Installiert: " + OH_Version.state.toString + ". Verfügbar: " + OH_Version_Latest.state.toString)
end