Things für Gerät erstellen in OH3

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Johannes911
Beiträge: 81
Registriert: 17. Aug 2020 08:02
Answers: 0

Things für Gerät erstellen in OH3

Beitrag von Johannes911 »

Hallo zusammen,
ich sehe es einfach nicht!
Ich habe keine Ahnung was da mit dem JSONPATH passiert.


Ich möchte ein neues Gerät einbinden:


# Der Aufruf erfolgt z.B. durch:
# http://123.123.123.123/?export=1

Als Ausgabe kommt:

Date: 28.05.2023
Time: 22:44:07
DeviceName: SCHLAFZIMMER
MAC: xxxxxxxxxx
LocalIP: 123.123.123.123
RSSI: -70
FW_MainController: 1838000A
FW_WiFi: WS181130
SystemMode: Behaglichkeitsmode
Speed_In: 10
Speed_Out: 10
Speed_AntiFreeze: 00
Temp_In: 20,8
Temp_Out: 21,0
Temp_Fresh: 20,5
rel_Humidity_In: 37,3
rel_Humidity_Out: 58,7
abs_Humidity_In: 6,8
abs_Humidity_Out: 10,8
Efficiency: 55,4
Humidity_Transport: -1935
SystemOn = 1
AntiFreeze = 0
Fixed_Speed = 0
Defrosting = 0
Landlord_Mode = 0
Cross_Ventilation = 0
Timer_active = 0

Code: Alles auswählen

# http binding
timeout=120000
granularity=5000
format=true


BayLuft_SZ.url=http://123.123.123.123/?export=1
BayLuft_SZ.updateInterval=30000
Die Things-Datei sieht so aus:

Code: Alles auswählen

Thing network:url:BayLu_SZ "BaySZ"@"EG_BAD"  
    [ baseURL="http//123.123.123.123/?export=1",
    refresh= "60",
    fetch= "false" 
    ]
    {
        Channels:
        Type string: Temp_In: "Temp_In " [
            mode = "readonly",
            statetransformation = "JSONPATH:$.[0].value"
        ]
    }

was zu folgender Fehlermeldung im Log führt:

Configuration model '0_bayernluft.things' has errors, therefore ignoring it: [8,29]: mismatched input ':' expecting '}'
[9,13]: no viable alternative at input 'mode'
[10,13]: no viable alternative at input 'statetransformation'

Erste Frage: warum ist da ein "mismatched input"? fehlt mir da ein Argument?
bzw. wie müsste die Zeile richtig aussehen.
Als Zweites würde ich natürlich gern eine Zahl = NUMBER erhalten, aber da stört das Komma in der Zahl! Wie bekomme ich das hin?
und als letztes: wie müsse es dann für die Zustände 0 und 1 (die letzten Werte) aussehen?

danke schon jetzt

Pepe1907
Beiträge: 167
Registriert: 1. Jun 2020 17:29
Answers: 2

Re: Things für Gerät erstellen in OH3

Beitrag von Pepe1907 »

Du hast in deiner Things Datei nach deinem http keinen ":" gesetzt. Evtl könnte es daran liegen

Gesendet von meinem SM-S901B mit Tapatalk


Benutzeravatar
udo1toni
Beiträge: 15247
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Things für Gerät erstellen in OH3

Beitrag von udo1toni »

Mehrere Punkte:

Punkt eins: Bitte nach Möglichkeit Dateinamen nicht mit einer Zahl beginnen, das ist außerhalb der Namenskonventionen in openHAB. Es wird hier keinen Fehler verursachen, ist aber schlechter Stil.

Punkt zwei: Du hast eine http.cfg angelegt. Lösche diese Datei bitte (es sei denn, Du nutzt noch openHAB2.x, dann allerdings kannst Du das Thing vergessen). Unter OH3 gibt es keine http.cfg, unter OH2 gibt es keine http Things.

Punkt drei: Die Antwort ist kein JSON. Eventuell kannst Du das Format auf JSON umstellen, das geht dann aus der Dokumentation zum Gerät hervor (z.B. &format=json anhängen oder sowas... Probieren lohnt aber nicht, schau ins Handbuch der Hardware) Alternativ so (ohne Gewähr, da der Output vielleicht ganz anders aussieht, Du müsstest das hier als Code einfügen):

Code: Alles auswählen

Thing http:url:BayLu_SZ "BaySZ"@"EG_BAD" [
    baseURL="http://123.123.123.123/?export=1",
    refresh= "60",
    fetch= "false" 
    ] {
    Channels:
        Type number : Temp_In      "Temp_In"      [ stateTransformation = "REGEX:.*Temp_In\: ([-]*[\d]+,[\d]*).*∩JS:comma2dot.js", mode = "readonly" ]
        Type switch : Timer_active "Timer_active" [ stateTransformation = "REGEX:.*Timer_active\: ([0|1]).*", onValue="1", offValue="0" ]
    }
Für das Komma brauchst Du noch die Datei comma2dot.js, die im Verzeichnis /etc/openhab/transform/ gespeichert sein muss, Inhalt:

Code: Alles auswählen

(function(i) {
  return i.toString().replace(',', '.'); // replaces comma by dot
})(input)
Kann allerdings sein, dass das JS nicht korrekt ist (hab ich jetzt nur auf die Schnelle hingerotzt...).
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Johannes911
Beiträge: 81
Registriert: 17. Aug 2020 08:02
Answers: 0

Re: Things für Gerät erstellen in OH3

Beitrag von Johannes911 »

erst einmal Danke für eure Antworten!
@Pepe1907: das mit dem fehlenden : ist mir tatsächlich nicht mehr aufgefallen
@udo1toni:
zu Punkt eins: das werde ich ändern, spätestens wenn mein Testscenario läuft und als Produktivsystem laufen soll
zu Punkt zwei: dann kann die hier http.cfg in die Tonne
zu Punkt drei: dass die Ausgabe meines Gerätes kein JSON ist habe ich in der Zwischenzeit auch herausgefunden, der Fehler saß einen guten halben Meter vor dem Bildschirm
Danke für den Code-Schnipsel, damit kann ich jetzt weiter probieren, wenn ich damit nicht weiter komme melde ich mich bestimmt noch mal

Johannes911
Beiträge: 81
Registriert: 17. Aug 2020 08:02
Answers: 0

Re: Things für Gerät erstellen in OH3

Beitrag von Johannes911 »

Ich bin es leider schon wieder.

diese Things-Datei wird geladen

Code: Alles auswählen

Thing network:url:BayLu_SZ "BaySZ"@"EG_BAD"  
    [ baseURL="http://123.123.123.123/?export=1",
    refresh= "60",
    fetch= "false" 
    ]
    {
    Channels:
//        Type number : Temp_In: "Temp_In " [ mode = "readonly", statetransformation = "REGEX:.*Temp_In: ([-]*[\d]+,[\d]*).*∩JS:comma2dot.js" ]
        Type switch : Timer_active  "Timer_active " [statetransformation = "REGEX:.*Timer_active: ([0|1]).*",onValue="1",offValue="0"]
       
    }
wenn ich die Zeile mit Type number drin lasse bekomme ich folgende Fehlermeldung:
- Loading model 'aa_bayernluft.things'
2023-05-29 03:51:51.828 [WARN ] [el.core.internal.ModelRepositoryImpl] - Configuration model 'aa_bayernluft.things' has errors, therefore ignoring it: [8,30]: mismatched input ':' expecting '}'
[8,45]: no viable alternative at input 'mode'
[8,64]: no viable alternative at input 'statetransformation'
[8,86]: mismatched character 'd' expecting set null
[8,117]: no viable alternative at input 'd'
[8,136]: mismatched input '.' expecting ':'
[8,137]: no viable alternative at input 'js'
[9,38]: no viable alternative at input 'Timer_active'
[9,83]: mismatched input '.' expecting RULE_ID
[9,85]: extraneous input 'Timer_active' expecting ':'
[9,100]: extraneous input '[' expecting RULE_ID
[9,102]: mismatched input '|' expecting ':'
[9,103]: no viable alternative at input '1'
[9,119]: no viable alternative at input '1'
[9,132]: no viable alternative at input '0'

wenn ich den störenden Doppelpunkt hinter Temp_IN lösche kommt folgende Fehlermeldung, ich denke weil die REGEX nicht aufgelöst werden kann, allerdings zeigt der VSC dann Temp_In auch genau wie Timer_Active in blau statt weiß an

die Frage jetzt wie bekomme den Doppelpunkt hinter Temp_In weg? bzw. warum meckert OH3 ab dem Anführungszeichen vor dem REGEX?
- Loading model 'aa_bayernluft.things'
2023-05-29 03:44:05.293 [WARN ] [el.core.internal.ModelRepositoryImpl] - Configuration model 'aa_bayernluft.things' has errors, therefore ignoring it: [8,85]: mismatched character 'd' expecting set null
[8,111]: no viable alternative at input ']'
[8,112]: mismatched input '+' expecting '}'
[8,116]: no viable alternative at input 'd'
[8,135]: mismatched input '.' expecting ':'
[8,136]: no viable alternative at input 'js'
[9,38]: no viable alternative at input 'Timer_active'
[9,83]: mismatched input '.' expecting RULE_ID
[9,85]: extraneous input 'Timer_active' expecting ':'
[9,100]: extraneous input '[' expecting RULE_ID
[9,102]: mismatched input '|' expecting ':'
[9,103]: no viable alternative at input '1'
[9,119]: no viable alternative at input '1'
[9,132]: no viable alternative at input '0'

Benutzeravatar
udo1toni
Beiträge: 15247
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Things für Gerät erstellen in OH3

Beitrag von udo1toni »

Ja, das sind einige Typos, die ich übersehen habe... UIDs verwenden den : als Trennzeichen, der darf im Namen nicht vorkommen. Hier:

Code: Alles auswählen

Type number : Temp_In: "Temp_In " [ mode = "readonly", statetransformation = "REGEX:.*Temp_In: ([-]*[\d]+,[\d]*).*∩JS:comma2dot.js" ]
                     ^
gehört er nicht hin. Das Leerzeichen hinten im Label ergibt keinen Sinn. es heißt stateTransformation (großes T mittendrin)

Eventuell muss der Doppelpunkt im REGEX Ausdruck escaped werden, so:

Code: Alles auswählen

Type number : Temp_In "Temp_In" [ mode = "readonly", stateTransformation = "REGEX:.*Temp_In\: ([-]*[\d]+,[\d]*).*∩JS:comma2dot.js" ]
                     ^        ^                           ^                                ^
Noch ein Fehler, der mir oben durchgerutscht ist: Das Addon heißt http, nicht network. Das network Addon kümmert sich um die Erreichbarkeit einer IP und um WOL eines Geräts über die MAC.

Allgemein: UID (die ID von Bridges, Things, Channels, Rules usw, strenggenommen sind auch Itemnamen UIDs, nur ohne Hierarchie) dürfen ausschließlich die Buchstaben des englischen Alphabets, die arabischen Ziffern und den Unterstrich enthalten. Das jeweils erste Zeichen muss ein Buchstabe sein. Allgemein wird in openHAB camelCase angewendet, also der erste Buchstabe klein, bei jedem neuen Wort der Anfangsbuchstabe groß, das ist aber nur "allgemein üblich".
openHAB hält sich übrigens selbst nicht zu 100% an die Regeln, es erzeugt UIDs mit Ziffern als erstem Zeichen. Das sollte eine aber nicht davon abhalten, selbst ausschließlich mit Buchstaben zu beginnen. Es gab schon mehrfach Probleme, wenn Namen mit einer Ziffer anfingen, insbesondere bei Items. Solche Fehler sind oft schwer zu finden, weil man zunächst nach anderen Ursachen sucht...

Also erlaubt: http:url:BayLu_SZ:Temp_In
Nicht erlaubt: http:url:1Bay-Lu_SZ:Temp_In: (drei Fehler, führende Ziffer, Minuszeichen und Doppelpunkt in der UID

Guter Stil: http:url:bayLuSZ:tempIn

EDIT: Ich habe die Fehler oben beseitigt...
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Johannes911
Beiträge: 81
Registriert: 17. Aug 2020 08:02
Answers: 0

Re: Things für Gerät erstellen in OH3

Beitrag von Johannes911 »

danke erst einmal, allerdings leider noch ohne Erfolg
Thing geändert: (erst mal nur die number betrachten)

Code: Alles auswählen

Thing http:url:bayLu_SZ "BaySZ"@"EG_Bed"  
    [ baseURL="http://123.123.123.123/?export=1",
    refresh= 60,
    fetch= false 
    ]
    {
    Channels:
        Type number : Temp_In            "Temp_In"              [stateTransformation = "REGEX:.*Temp_In\: ([-]*[\d]+,[\d]*).*∩JS:comma2dot.js", mode = "readonly" ]
    }
/*        Type switch : SystemOn           "SystemON_ "           [statetransformation = "REGEX:.*SystemON ([0|1]).*",onValue="1",offValue="0"]
        Type switch : AntiFreeze         "AntiFreeze_ "         [statetransformation = "REGEX:.*AntiFreeze ([0|1]).*",onValue="1",offValue="0"]
        Type switch : Fixed_Speed        "Fixed_Speed_ "        [statetransformation = "REGEX:.*Timer_active  ([0|1]).*",onValue="1",offValue="0"]
        Type switch : Defrosting         "Defrosting_ "         [statetransformation = "REGEX:.*Fixed_Speed  ([0|1]).*",onValue="1",offValue="0"]
        Type switch : Landlord_Mode      "Landlord_Mode_ "      [statetransformation = "REGEX:.*Landlord_Mode  ([0|1]).*",onValue="1",offValue="0"]
        Type switch : Cross_Ventilation  "Cross_Ventilation_  " [statetransformation = "REGEX:.*Cross_Ventilation  ([0|1]).*",onValue="1",offValue="0"]
        Type switch : Timer_active       "Timer_active "        [statetransformation = "REGEX:.*Timer_active: ([0|1]).*",onValue="1",offValue="0"]
 */    
 
führt ab dem REGEX zu Mecker:
2023-05-29 11:24:50.104 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'aa_bayernluft.things'
2023-05-29 11:24:50.125 [WARN ] [el.core.internal.ModelRepositoryImpl] - Configuration model 'aa_bayernluft.things' has errors, therefore ignoring it: [8,88]: mismatched character ':' expecting set null
[8,107]: no viable alternative at input '('
[8,111]: mismatched input '*' expecting '}'
[8,114]: no viable alternative at input 'd'
[8,120]: no viable alternative at input 'd'
[8,139]: mismatched input '.' expecting ':'
[8,140]: no viable alternative at input 'js'
[8,153]: no viable alternative at input 'readonly'
[10,45]: no viable alternative at input 'SystemON_'
[10,97]: mismatched input '.' expecting RULE_ID
[10,99]: missing ':' at 'SystemON'
[10,109]: extraneous input '[' expecting RULE_ID
[10,111]: mismatched input '|' expecting ':'
[10,112]: no viable alternative at input '1'
[10,128]: no viable alternative at input '1'
[10,141]: no viable alternative at input '0'
[11,43]: no viable alternative at input 'AntiFreeze_'
[11,95]: mismatched input '.' expecting RULE_ID
[11,97]: missing ':' at 'AntiFreeze'
[11,109]: extraneous input '[' expecting RULE_ID
[11,111]: mismatched input '|' expecting ':'
[11,112]: no viable alternative at input '1'
[11,128]: no viable alternative at input '1'
[11,141]: no viable alternative at input '0'
[12,43]: no viable alternative at input 'Fixed_Speed_'
[12,95]: mismatched input '.' expecting RULE_ID
[12,97]: missing ':' at 'Timer_active'
[12,112]: extraneous input '[' expecting RULE_ID
[12,114]: mismatched input '|' expecting ':'
[12,115]: no viable alternative at input '1'
[12,131]: no viable alternative at input '1'
[12,144]: no viable alternative at input '0'
[13,43]: no viable alternative at input 'Defrosting_'
[13,95]: mismatched input '.' expecting RULE_ID
[13,97]: missing ':' at 'Fixed_Speed'
[13,111]: extraneous input '[' expecting RULE_ID
[13,113]: mismatched input '|' expecting ':'
[13,114]: no viable alternative at input '1'
[13,130]: no viable alternative at input '1'
[13,143]: no viable alternative at input '0'
[14,43]: no viable alternative at input 'Landlord_Mode_'
[14,95]: mismatched input '.' expecting RULE_ID
[14,97]: missing ':' at 'Landlord_Mode'
[14,113]: extraneous input '[' expecting RULE_ID
[14,115]: mismatched input '|' expecting ':'
[14,116]: no viable alternative at input '1'
[14,132]: no viable alternative at input '1'
[14,145]: no viable alternative at input '0'
[15,43]: no viable alternative at input 'Cross_Ventilation_'
[15,95]: mismatched input '.' expecting RULE_ID
[15,97]: missing ':' at 'Cross_Ventilation'
[15,117]: extraneous input '[' expecting RULE_ID
[15,119]: mismatched input '|' expecting ':'
[15,120]: no viable alternative at input '1'
[15,136]: no viable alternative at input '1'
[15,149]: no viable alternative at input '0'
[16,43]: no viable alternative at input 'Timer_active'
[16,95]: mismatched input '.' expecting RULE_ID
[16,97]: extraneous input 'Timer_active' expecting ':'
[16,112]: extraneous input '[' expecting RULE_ID
[16,114]: mismatched input '|' expecting ':'
[16,115]: no viable alternative at input '1'
[16,131]: no viable alternative at input '1'
[16,144]: no viable alternative at input '0'
[16,145]: mismatched character '<EOF>' expecting '"'

Benutzeravatar
udo1toni
Beiträge: 15247
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Things für Gerät erstellen in OH3

Beitrag von udo1toni »

Jepp... Der Fehler rührt daher, dass aus irgendeinem Grund das Escape-Zeichen doppelt angegeben werden muss. Strange...
Da sind aber noch weitere Fehler in Deiner Definition, deshalb hier die funktionierende Konfiguration:

Code: Alles auswählen

Thing http:url:bayLu_SZ "BaySZ"@"EG_Bed"  [
    baseURL="http://123.123.123.123/?export=1",
    refresh= 60
    ] {
    Channels:
        Type number : Temp_In           "Temp_In"           [ stateTransformation = "REGEX:.*Temp_In: ([-]*[\\d]+,[\\d]*).*∩JS:comma2dot.js", mode = "READONLY" ]
        Type switch : SystemOn          "SystemON"          [ stateTransformation = "REGEX:.*SystemOn = ([0|1]).*",onValue="1",offValue="0"]
        Type switch : AntiFreeze        "AntiFreeze"        [ stateTransformation = "REGEX:.*AntiFreeze = ([0|1]).*",onValue="1",offValue="0"]
        Type switch : Fixed_Speed       "Fixed Speed"       [ stateTransformation = "REGEX:.*Timer_active = ([0|1]).*",onValue="1",offValue="0"]
        Type switch : Defrosting        "Defrosting"        [ stateTransformation = "REGEX:.*Fixed_Speed = ([0|1]).*",onValue="1",offValue="0"]
        Type switch : Landlord_Mode     "Landlord Mode"     [ stateTransformation = "REGEX:.*Landlord_Mode = ([0|1]).*",onValue="1",offValue="0"]
        Type switch : Cross_Ventilation "Cross Ventilation" [ stateTransformation = "REGEX:.*Cross_Ventilation = ([0|1]).*",onValue="1",offValue="0"]
        Type switch : Timer_active      "Timer active"      [ stateTransformation = "REGEX:.*Timer_active = ([0|1]).*",onValue="1",offValue="0"]
 }
funktionierend in dem Sinne, dass ich Deinen Text, so wie Du ihn oben gepostet hast, als Textdatei auf dem Webserver von openHAB abgelegt habe und die passende URL bei mir konfiguriert habe. Ich habe also bei mir verifiziert, dass die Konfiguration so funktioniert.

Sollte der gelieferte Text nicht genau so aussehen (freilich mit evtl unterschiedlichen Werten...) dann wird es nicht funktionieren.
REGEX matcht grundsätzlich auf die exakte Schreibweise, das heißt z.B., dass SystemON etwas anderes ist als SystemOn :), die Anzahl der Leerzeichen muss stimmen und ein = ist ein =. Gibt es Stellen, bei denen es variable Werte gibt (z.B. Anzahl Leerzeichen) dann muss der Match entsprechend angepasst werden, z.B. bla +bli matcht auf die Zeichenfolge

Code: Alles auswählen

bla bli
genauso wie auf

Code: Alles auswählen

bla    bli
, nicht aber auf

Code: Alles auswählen

blabli
, weil das + bedeutet, dass das vorangestellte Zeichen mindestens einmal an dieser Stelle stehen muss.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Johannes911
Beiträge: 81
Registriert: 17. Aug 2020 08:02
Answers: 0

Re: Things für Gerät erstellen in OH3

Beitrag von Johannes911 »

Danke!
das Thing und meine Items werden jetzt übernommen / angezeigt.
Die Transformation will aber noch nicht.

Ich habe deine Funktion ins Verzeichnis ./conf/transform als comma2dot.js kopiert, bekomme aber leider im log:
2023-05-29 13:16:10.801 [WARN ] [.transform.SingleValueTransformation] - Transformation service REGEX for pattern .*Temp_In: ([-]*[\d]+,[\d]*).* not found!
2023-05-29 13:16:10.802 [WARN ] [.transform.SingleValueTransformation] - Transformation service REGEX for pattern .*Cross_Ventilation = ([0|1]).* not found!
2023-05-29 13:16:10.803 [WARN ] [.transform.SingleValueTransformation] - Transformation service REGEX for pattern .*SystemOn = ([0|1]).* not found!
2023-05-29 13:16:10.804 [WARN ] [.transform.SingleValueTransformation] - Transformation service REGEX for pattern .*AntiFreeze = ([0|1]).* not found!
2023-05-29 13:16:10.805 [WARN ] [.transform.SingleValueTransformation] - Transformation service REGEX for pattern .*Timer_active = ([0|1]).* not found!
2023-05-29 13:16:10.806 [WARN ] [.transform.SingleValueTransformation] - Transformation service REGEX for pattern .*Timer_active = ([0|1]).* not found!
2023-05-29 13:16:10.806 [WARN ] [.transform.SingleValueTransformation] - Transformation service REGEX for pattern .*Fixed_Speed = ([0|1]).* not found!
2023-05-29 13:16:10.807 [WARN ] [.transform.SingleValueTransformation] - Transformation service REGEX for pattern .*Landlord_Mode = ([0|1]).* not found!
muss ich da noch irgendetwas zusätzlich einbauen / als Service bereitstellen? Javascript?

Benutzeravatar
udo1toni
Beiträge: 15247
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Things für Gerät erstellen in OH3

Beitrag von udo1toni »

Du hast kein REGEX installiert. Alle Services, die Du verwenden willst, musst Du auch installieren, das http Addon genauso wie REGEX Transformation und JavaScript Transformation (bitte nicht mit JavaScript Scripting verwechseln)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten