Seite 1 von 2

Things für Gerät erstellen in OH3

Verfasst: 28. Mai 2023 23:24
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

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

Verfasst: 28. Mai 2023 23:39
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


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

Verfasst: 29. Mai 2023 03:34
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...).

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

Verfasst: 29. Mai 2023 05:19
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

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

Verfasst: 29. Mai 2023 06:18
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'

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

Verfasst: 29. Mai 2023 12:20
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...

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

Verfasst: 29. Mai 2023 13:31
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 '"'

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

Verfasst: 29. Mai 2023 14:57
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.

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

Verfasst: 29. Mai 2023 15:25
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?

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

Verfasst: 29. Mai 2023 15:49
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)