Du kannst nicht einfach schreiben, was Du willst, es gibt genaue Regeln, wie eine Definition aussieht.
In Textdateien definierte Items müssen so definiert werden:
Code: Alles auswählen
itemtype itemname "labeltext [stateformat]" <iconname> (group1, group2, ...) ["tag1", "tag2", ...] {bindingconfig} // Reihenfolge muss eingehalten werden!
Dabei gilt: itemtype ist der Itemtyp, exakt einer aus einer Liste:
Code: Alles auswählen
Call
Color
Contact
DateTime
Dimmer
Group
Group:<itemtype>
Group:<itemtype>:<function>
Image
Location
Number
Number:<dimension>
Player
Rollershutter
String
Switch
Wenn Du also ein Group Item definierst, kannst Du optional diesem Group Item einen Itemtyp verpassen. Außerdem kannst Du einem typisierten Group Item auch noch Funktion zum zusammenfassen der Daten mitgeben.
Wenn Du ein Number Item hast, kannst Du die Dimension mit angeben. Das funktionert auch bei Group:Number Items, und auch bei Group:Number:<dimension> Items kannst Du eine Funktion mitgeben.
Die Funktion errechnet den Status für das Group Item anhand deren Member. Wenn Du z.B. ein Group:Number Item hast und die zwei Items Item1 und Item2 Member dieser Group sind, und Item1 den Wert 0 hält und Item2 den Wert 10, dann kannst Du mit der Funktion MIN als Wert 0 erhalten, mit der Funktion MAX bekommst Du 10, mit der Funktion AVG erhältst Du 5.
Weiterhin gibt es die Funktion COUNT, die kann z.B. bei einer Gruppe Contact ITems interessant sein, sie gibt Dir dann aus, wie viele der Member einen bestimmten Status haben (also z.B. Group:Contact:COUNT(OPEN) ergibt 3, weil von den 7 Membern drei den Status OPEN haben)
Und es gibt noch EQUALITY, was den Status der Items ergibt, sofern alle Member den gleichen Status haben, ansonsten aber UNDEF, sowie
EARLIEST und LATEST, was den Status des Items liefert, welches den ältesten/jüngsten Status hat.
itemname ist die ID des Items. es gilt, dass itemname nur die Zeichen des englischen Alphabets, die arabischen Ziffern sowie den Unterstrich enthalten dürfen. Groß/Kleinschreibung zählt für jedes Zeichen, das erste Zeichen muss zwingend ein Buchstabe sein. Erlaubt: Ein_tollerName_FUER__1_Item (auch wenn das ein Widerspruch in sich ist...) Nicht erlaubt: 1-Item (und zwar gleich doppelt...)
labeltext ist das angezeigte Label, [stateformat] bestimmt die Darstellung in einer Sitemap (und nur dort!).
iconname ist der Name des (evtl. dynamischen) Icons, welches in einer Sitemap oder auch in der Main UI gerendert werden soll, wenn ein Widget das Item verwendet.
group1 ist ein Group Item, ein Item kann beliebig vielen Groups zugeordnet werden, allerdings darf nur maximal eines dieser Group Items Teil des Semantic Model sein.
tag1 ist ein Tag (Schildchen), es gibt verschiedene Tags innerhalb openHAB, heutzutage sind sie meist Bestandteil des Semantic Model, womit openHAB dann verstehen kann, was das Item repräsentiert (z.B. ein Messwert, ein Steuersignal, ein Raum usw.)
bindingconfig schließlich gibt an, wie das Item mit einem oder mehreren Channels interagiert. Ein ITem muss nicht zwingend einem Channel zugeordnet sein. Außerdem können hier Metadaten für das Item definiert werden, z.B. bei Number:<dimension> Items die Unit, in der der Wert gespeichert wird und das Statusformat.
Exakt so ist es korrekt:
Code: Alles auswählen
Number:Energy Energyin "Energiebezug" <energy> (Energy) ["Measurement","Energy"] { channel="smartmeter:meter:hausanschluss:1-0_1-8-0", unit="Wh", stateDescription=""[pattern="%.1f kWh"] }
Number:Energy Energyout "Energieeinspeisung" <energy> (Energy) ["Measurement","Energy"] { channel="smartmeter:meter:hausanschluss:1-0_2-8-0", unit="Wh", stateDescription=""[pattern="%.1f kWh"] }
Die Doppelpunkte haben eine Bedeutung und sind nicht optional, die Schlüsselworte müssen exakt so geschrieben werden, Du kannst lediglich den Itemanmen ändern (Energyin bzw. Energyout), das Label ändern, ein anderes als das energy Icon wählen, die Gruppenzugehörigkeit ändern oder auch das Statusformat (stateDescrption=""[pattern="...")
Wenn man Items definiert, dann sind nicht alle Parameter verbindlich, lediglich itemtype und itemname müssen zwingend angegeben werden. Alle anderen Parameter können - auch einzeln - entfallen, jedoch ist die Reihenfolge immer einzuhalten. Hast Du also ein Item ohne Gruppenzugehörigkeit definiert, so musst Du die Gruppe vor den Tags und nach dem Icon einfügen. Fehlen diese Elemente, so musst Du den Platz so wählen, dass Du diese Elemente ebenfalls ohne gegen die Regeln zu verstoßen einfügen könntest.
Die Fehlermeldungen haben nichts mit den veränderten Items zu tun. Du hast das openHAB Plugin in Visual Studio Code falsch konfiguriert, das ist alles.
dadurch funktionieren Itemliste und Thingliste nicht, außerdem kann das Plugin den Code von Rules nicht auf Fehler untersuchen oder inline aktuelle Status und Gruppenzugehörigkeiten der Items anzeigen.
Allerdings wird der fehlende Dopelpunkt dennoch weitreichende Folgen haben, dann damit ist die items-Datei ungültig. Entweder werden nur die ITems bis zu dem falsch definierten eingelesen, oder evtl. auch gar nicht (steht im openhab.log. Sinngemäß: ... loading <dateiname>.items -> ... has errors, therfor ignoring it )