
immer dran denken, es handelt sich um Java, das ist komplett unabhängig vom Betriebssystem. Wenn openHAB per apt installiert ist (openHABian nutzt apt), dann sind die entsprechenden Ordner wie gewohnt verteilt, das heißt, es gibt unter
/etc/ verschiedene Dinge, in
/etc/openhab/ befindet sich die Textkonfiguration (bis auf die Main UI kann man eigentlich alles komplett über Textdateien konfigurieren) und unter
/etc/default/ gibt es eine Datei
openhab, die das Startverhalten beeinflusst (welche Ports, wie viel RAM, welche Schnittstellen...). Außerdem gibt es natürlich noch eine
openhab.service Datei unter
/etc/systemd/system/, weil openHAB ja als Dienst läuft.
Die veränderlichen Dateien befinden sich entsprechend unter
/var/lib/openhab/, hier findest Du auch die Dateien, welche für die Things zuständig sind (im Unterverzeichnis
jsondb, denn openHAB speichert seine Konfiguration als JSON).
Allerdings möchte ich dringend davon abraten, die Dateien direkt zu manipulieren, denn dann müsstest Du openHAB jedes Mal neu starten, openHAB überwacht diese Dateien nicht auf Veränderungen.
Es gibt stattdessen eine
REST API, über die Du das Thing steuern kannst. openHAB bringt über die UI sogar eine Swagger-Dokumentation mit (Main UI->Administration->Entwickler-Tools->API Explorer), Du kannst also direkt herausfinden, welchen Aufruf Du tätigen musst, um die aktuelle Konfiguration auszulesen - z.B. bei mir
Code: Alles auswählen
curl -X 'GET' \
'https://openhabian:8443/rest/things/openweathermap%3Aweather-and-forecast%3Abridge%3Alocal' \
-H 'accept: application/json' \
-H 'Authorization: Bearer <mein Token>'
was dann eine json Antwort liefert:
Code: Alles auswählen
{
"channels": [
{
"linkedItems": [
"WetterDa_StationId"
],
"uid": "openweathermap:weather-and-forecast:bridge:local:station#id",
"id": "station#id",
"channelTypeUID": "openweathermap:station-id",
"itemType": "String",
"kind": "STATE",
"label": "Station-ID",
"description": "Zeigt die ID der Wetterstation oder des Ortes an.",
"defaultTags": [],
"properties": {},
"configuration": {}
},
{
"linkedItems": [],
"uid": "openweathermap:weather-and-forecast:bridge:local:forecastHours24#snow",
"id": "forecastHours24#snow",
"channelTypeUID": "openweathermap:forecasted-snow",
"itemType": "Number:Length",
"kind": "STATE",
"label": "Vorhergesagter Schnee",
"description": "Zeigt die vorhergesagte Schneemenge an.",
"defaultTags": [],
"properties": {},
"configuration": {}
}
],
"statusInfo": {
"status": "ONLINE",
"statusDetail": "NONE"
},
"editable": false,
"label": "Wetter Darmstadt",
"bridgeUID": "openweathermap:weather-api:bridge",
"configuration": {
"step": 3,
"location": "49.91,8.66",
"forecastHours": 24,
"forecastDays": 0
},
"properties": {},
"UID": "openweathermap:weather-and-forecast:bridge:local",
"thingTypeUID": "openweathermap:weather-and-forecast"
}
Ich habe die Ausgabe hier mal stark verkürzt

denn der einzig interessante Teil ist ja ganz am Ende der Ausgabe, die ca. 120 Channel sind eher uninteressant.
Um die Location zu ändern, müsste dann ein Aufruf der Form
Code: Alles auswählen
curl -X 'PUT' \
'https://openhabian:8443/rest/things/openweathermap%3Aweather-and-forecast%3Abridge%3Alocal' \
-H 'accept: */*' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <mein Token>' \
-d '{
"label": "Wetter anderswo",
"configuration": {
"location": "50.91,9.66"
},
"UID": "openweathermap:weather-and-forecast:bridge:local",
"thingTypeUID": "openweathermap:weather-and-forecast"
}'
ausreichen, es kann sogar sein, dass man UID und thingTypeUID sowie (sehr sicher) das Label weg lassen kann. Das JSON kann natürlich auch ohne Zeilenumbrüche und Leerbereiche gesendet werden, hier nur für die Lesbarkeit mit Formatierung.
Ich habe das bei mir nicht ausprobiert, denn wenn Du oben das JSON anschaust, wirst Du feststellen, dass dort das Flag
editable auf false steht. Das liegt daran, dass ich mein Wetter Thing über die Textkonfiguration angelegt habe

Dies ist die andere Möglichkeit, die nicht offiziell empfohlen wird, aber was soll's
Du legst das Thing STATT über die UI, über Text an, und zwar mittels einer Datei
/etc/openhab/things/irgendwas.things:
Code: Alles auswählen
Bridge openweathermap:weather-api:bridge "openweatherMap Api" [ apikey="<API-Key>", refreshInterval=10, language="de" ] {
Thing weather-and-forecast local "Wetter Darmstadt" [ forecastDays=0, forecastHours=24, step=3, location="49.91,8.66" ]
}
und hier kannst Du die Werte natürlich genauso beeinflussen. openHAB liest diese Datei automatisch ein, sobald sie geändert wurde.
ABER.
Es reicht nicht, die Werte zu tauschen. Entweder, Du änderst die UID mit, oder Du leerst die Datei und speicherst sie und setzt anschließend den Wert wieder. Der Punkt ist, dass das Thing für openHAB entfernt und neu erstellt werden muss, damit die Konfiguration sicher neu geladen wird. Du musst also auf jeden Fall zwei Änderungen an der Datei vornehmen, damit es wirklich klappt. Das liegt daran, dass es nicht vorgesehen ist, Things zu bearbeiten. Man hat nur daran gedacht, Things/Channel zu erzeugen oder zu entfernen, nicht, diese anders zu konfigurieren.
Zum manuellen Bearbeiten der Daten ist die Textdatei eleganter, einen Buchstaben an die UID anzuhängen, auf Speichern zu klicken, den Buchstaben wieder zu entfernen und erneut zu speichern ist schnell erledigt, wenn man jedoch ein Programm schreibt, welches das automatisch erledigt, ist der curl-Aufruf mit minimalem Aufwand verbunden.
Wenn es um genau bekannte Standorte geht, kann man natürlich auch für jeden Standort ein Thing anlegen und dieses Thing schlafen schicken

auch das geht bequem über die API (pausieren deshalb, damit man nicht über die erlaubte Anzahl API Calls für openweathermap kommt - oder man verringert die Anzahl Abrufe pro Tag - kommt ja vor allem drauf an, um wie viele Standorte es geht)