Seite 1 von 6

HTTP Umstellung V1 => V3

Verfasst: 3. Jan 2021 22:05
von int5749
Hallo zusammen,

bei den Vorbereitungen zur Umstellung auf OH3 versuche ich mich gerade an den Strings für die Abfallerkennung

Abfrage unter OH1, direkt im Item

Code: Alles auswählen

String ABF1_NAME	{ http="<[https://www.umwelt-webmedia.de/caldownload/bc250e0a4bc5b857abc79441b0f524c9.ics:360000:JS(abfall_naechste_abholung_name.js)]" }
abfall_naechste_abholung_name.js
liegt natürlich auch bei OH3 bereits unter transform

Konfiguration unter OH3

Code: Alles auswählen

UID: http:url:eaca737ff5
label: HTTP URL Thing
thingTypeUID: http:url
configuration:
  authMode: BASIC
  ignoreSSLErrors: false
  baseURL: https://www.umwelt-webmedia.de/caldownload/bc250e0a4bc5b857abc79441b0f524c9.ics
  refresh: 360
  commandMethod: GET
  contentType: application/json
  timeout: 3000
  bufferSize: 2048
channels:
  - id: AB_Name
    channelTypeUID: http:string
    label: AB_Name_LAbel
    description: ""
    configuration:
      mode: READONLY
      stateTransformation: JSONPATH:abfall_naechste_abholung_name.js
Wenn ich bei stateTransformation "JASONPATH:" weglasse, hagelt es Fehler. Mit bleibt das Item "NULL"

Habe diverse Samples gelesen und hier geschaut, finde aber nicht den Fehler :roll:

Viele Grüße

Re: HTTP Umstellung V1 => V3

Verfasst: 3. Jan 2021 23:15
von udo1toni
Du musst schon JS angeben, wenn Du JavaScript verwendest.

Code: Alles auswählen

stateTransformation: JS:abfall_naechste_abholung_name.js

Re: HTTP Umstellung V1 => V3

Verfasst: 3. Jan 2021 23:45
von int5749
udo1toni hat geschrieben: 3. Jan 2021 23:15 Du musst schon JS angeben, wenn Du JavaScript verwendest.
Und dann noch Javascript Transformation installieren hilft auch :roll:

DANKE, so viel getestet heute, scheinbar etwas zu viel :|

Re: HTTP Umstellung V1 => V3

Verfasst: 4. Jan 2021 01:06
von mcdandrew
Ich bekomme es bei mir einfach nicht hin...

abfall.things

Code: Alles auswählen

Thing http:url:abfall "Abfall" [ 
    baseURL="http://192.168.10.100/entsorgungstermine-2021.ics",
    refresh=60
    ] {
    Channels: 
		Type string : ABFALL_ICAL_heute 	"Abfall heute" 		[stateTransformation= "JS:abfall_heute.js"]
		Type string : ABFALL_ICAL_morgen 	"Abfall morgen" 	[stateTransformation= "JS:abfall_morgen.js"]
		Type string : ABF1_NAME 			"Abfall next" 		[stateTransformation= "JS:abfall_naechste_abholung_name.js"]
		Type datetime: ABF1_DATE		"Abfall next Date"	[stateTransformation= "JS:abfall_naechste_abholung_datum.js"]
		}
	
abfall.items

Code: Alles auswählen

String 			ABFALL_ICAL_heute 				{ channel="http:url:abfall:ABFALL_ICAL_heute" } 
Switch 			ABFALL_AKTIV_heute
String 			ABFALL_NAME_heute

String 			ABFALL_ICAL_morgen				{ channel="http:url:abfall:ABFALL_ICAL_morgen" } 
Switch 			ABFALL_AKTIV_morgen 
String			ABFALL_NAME_morgen

String 			ABF1_NAME						{ channel="http:url:abfall:ABF1_NAME" } 
DateTime 		ABF1_DATE						{ channel="http:url:abfall:ABF1_DATE" } 
Das Thing wird zwar als Online angezeigt. Die Items besitzen allerdings den Wert NULL

Re: HTTP Umstellung V1 => V3

Verfasst: 4. Jan 2021 11:08
von int5749
mcdandrew hat geschrieben: 4. Jan 2021 01:06 Ich bekomme es bei mir einfach nicht hin...
Hmmm, weird. Ich sehe da so auch keinen Fehler, vorausgesetzt das die angegebene URL über einen Browser erreichbar ist??
Ich nutzte dies komplett online um etwaige Änderungen auch live mitzubekommen.

Hier einmal mein Konfig, welche ich heute morgen (gestern war dann zu spät) in eine Datei überführt habe und welche so online ist, mit befüllten Items

Things

Code: Alles auswählen

Bridge http:url:abfallkalender "Abfallkalender" @ "Internet" [
	baseURL="https://www.umwelt-webmedia.de/caldownload/bc250e0a4bc5b857abc79441b0f524c9.ics",
	  refresh=360,
	  ignoreSSLErrors=false,
	  commandMethod="GET",
	  timeout=3000,
	  bufferSize=2048
	] {
		Channels:
			Type string : ABF1_NAME	"Nächste Abholung"	[ stateTransformation="JS:abfall_naechste_abholung_name.js", mode="READONLY"]
			Type datetime : ABF1_DATE "Datum nächste Abholung"	[ stateTransformation="JS:abfall_naechste_abholung_datum.js", mode="READONLY"]
			Type string : ABFALL_ICAL_heute	"Abholung heute"	[ stateTransformation="JS:abfall_heute.js", mode="READONLY"]
			Type string : ABFALL_ICAL_morgen	"Abholung morgen"	[ stateTransformation="JS:abfall_morgen.js", mode="READONLY"]
		}
Items

Code: Alles auswählen

//Abfallkalender
// Nächste Abholung
String ABF1_NAME	        {channel="http:url:abfallkalender:ABF1_NAME"}
DateTime ABF1_DATE      	{channel="http:url:abfallkalender:ABF1_DATE"}

//Abfall heute
String ABFALL_ICAL_heute	{channel="http:url:abfallkalender:ABFALL_ICAL_heute"}
Switch ABFALL_AKTIV_heute
String ABFALL_NAME_heute

//Abfall morgen
String ABFALL_ICAL_morgen	{channel="http:url:abfallkalender:ABFALL_ICAL_morgen"}
Switch ABFALL_AKTIV_morgen
String ABFALL_NAME_morgen

Re: HTTP Umstellung V1 => V3

Verfasst: 6. Jan 2021 15:03
von mcdandrew
Plötzlich wird mir nun angezeigt was abgeholt wird, allerdings bleibt das Datum undefiniert.
Hmmm, weird. Ich sehe da so auch keinen Fehler, vorausgesetzt das die angegebene URL über einen Browser erreichbar ist??
Ich nutzte dies komplett online um etwaige Änderungen auch live mitzubekommen.
Ich habe nun mal zum Test deine URL genutzt, auch hier das selbe Problem.
Könntest du bitte noch dir Javascript Files zur Verfügung stellen?

Re: HTTP Umstellung V1 => V3

Verfasst: 6. Jan 2021 22:17
von int5749
mcdandrew hat geschrieben: 6. Jan 2021 15:03 Könntest du bitte noch dir Javascript Files zur Verfügung stellen?
Sicher, siehe anbei als zip.

Re: HTTP Umstellung V1 => V3

Verfasst: 7. Jan 2021 23:31
von mcdandrew
Danke für die Skript Files....jetzt funktioniert es :D

Re: HTTP Umstellung V1 => V3

Verfasst: 9. Jan 2021 16:01
von wosch
Hallo zusammen,

ich hänge mich mal an das Thema ran - zum Einen weil die Ursprungsfrage gelöst scheint, zum Anderen weil das Topic perfekt passt. Sollte es gewünscht sein, bei solchen Themen lieber einen neuen Thread zu eröffnen, dann bitte um kurzen Hinweis, dann mache ich das in Zukunft gerne auch so :) Das Thema wird ja in jedem Forum etwas anders gehandhabt.

Ich habe unter OH2.5 bisher einige Items folgendermaßen definiert:

Code: Alles auswählen

String CamGarageStatus              "Status [%s]"       {http="<[http://MEINE-IP:7080/api/2.0/camera/MEINE-CAM-ID?apiKey=MEIN-API-KEY:60000:JSONPATH($.data[0].state)]"}
Der State ist "CONNECTED" oder "DISCONNECTED".

In OH3 zeigen mir alle entsprechenden Items NULL an. Ich habe dann ein http-Thing angelegt und Channel bzw. Item über die UI angelegt (analog der Config oben) und bekomme dann schon mal in der UI das CONNECTED angezeigt und auch in VSC zeigt es das CONNECTED in dem neuangelegten Item an, wenn ich mit der Maus drüberfahre.

Nun meine Fragen:
1) gibt es beim 3er http-binding eine andere Syntax in den Items oder warum sind meine bisherigen Items alle "NULL", in der UI (url, transformation usw. alles gleich) aber den Status korrekt dargestellt?

2) auch mit dem UI-angelgten Item, das den Status ja korrekt bekommt, wird in einer Sitemap (über *.sitemap file) trotzdem nichts angezeigt. Nur um es klar auszudrücken: ich meine damit es steht einfach nichts hinter dem Status, wo ja eigentlich CONNECTED stehen sollte.

Code: Alles auswählen

Text item=CamGarage_Status
Ich habe es dann auch mal mit einer Sitemap, die ich in der UI erstellt habe probiert, allerdings bleibt auch da der Status "leer"...
Ich gebe offen zu, dass ich mit der UI-basierten Konfiguration noch stark fremdle, und vermutlich irgendwas falsch mache. Aber ich komme echt nicht drauf :(

3) nur als kleine Frage am Rande: wie kann ich meine Test-Sitemap wieder löschen? Ich habe hier nichts gefunden und würde die gerne wieder loswerden :?:

4) ein weiteres Item soll das Datum der letzten Aufnahme beinhalten. Der Code bisher war:

Code: Alles auswählen

Number CamGarageLastRecording       "Letzte Aufnahme [%d]"  {http="<[http://WIE-OBEN:60000:JSONPATH($.data[0].lastRecordingStartTime)]"}
Hier ist der Wert eine Zahl (epoc format), das in OH2.5 dann noch über eine rule umgewandelt wurde. Hier hapert es aber schon beim Item, den auch bei Anlage in der UI bekomme ich hier nur "UNDEF" angezeigt. Selbstredend habe ich alles wie beim vorigen Item gemacht, bei dem es ja funktioniert hat... Unter dem gleichen http-Thing einen weiteren Channel (dieses Mal Number) und diesen mit einem neuen Item verlinkt. Wo liegt hier der Fehler?

Danke schon einmal vorab!

P.S.: wenn ihr was aus der Item-Definition in der UI braucht, bitte einfach bescheid geben.

Re: HTTP Umstellung V1 => V3

Verfasst: 9. Jan 2021 21:54
von udo1toni
In openHAB2 hast Du htt1 genutzt, welches grundsätzlich anders zu konfigurieren ist als http2 (oder meinetwegen http3). Alle openHAB3-kompatiblen Bindings nutzen das Thing-Modell, das bedeutet, es gibt nur noch Links zu channels, andere Links (z.B. http="...") sind nicht mehr zulässig.
Du musst also das Item zwingend mit dem Channel verknüpfen, der sich auf das http Thing bezieht. Das sieht dann als Code für CamGarageStatus so aus:

Code: Alles auswählen

UID: http:url:camGarage
label: Camera Garage
thingTypeUID: http:url
configuration:
  authMode: BASIC
  ignoreSSLErrors: false
  baseURL: http://MEINE-IP:7080/api/2.0/camera/MEINE-CAM-ID?apiKey=MEIN-API-KEY
  refresh: 30
  commandMethod: GET
  timeout: 3000
  bufferSize: 2048
channels:
  - id: status
    channelTypeUID: http:switch
    label: Status
    description: ""
    configuration:
      onValue: CONNECTED
      offValue: DISCONNECTED
      stateTransformation: JSONPATH:$.data[0].state
  - id: datum
    channelTypeUID: http:datetime
    label: Zeitstempel
    description: ""
    configuration:
      stateTransformation: JSONPATH:$.data[0].lastRecordingStartTime
Hier sind gleich ein paar Dinge bemerkenswert: 1. gibt es plötzlich eine refresh Rate. Das liegt daran, dass http2 zwingend einen Cache nutzt. bei http1 stand der auch zur Verfügung, man musste ihn aber über http.cfg konfigurieren.
2. Der Channeltyp ist switch, nicht etwa string.
3. Es gibt die Felder für onValue und offValue, in denen die gelieferten Strings stehen. Somit steht für die Oberfläche nun ein Switch zur Verfügung. Dieser kann selbstverständlich auch CONNECTED und DISCONNECTED anzeigen (wenn man es entsprechend parametriert). ON und OFF dürfte aber sinnvoller sein. Wenn Du es lieber als string haben willst, geht das natürlich auch...
Das zugehörige Item sieht dann in OH1-Notation so aus:

Code: Alles auswählen

Switch CamGarageStatus "Status [%s]" {channel="http:url:camGarage:status"}
Sinnvoller wäre es natürlich, das Item direkt aus der Main UI heraus zu erstellen.
Nicht vergessen: Ein Switch Item muss nicht zwingend schreibbar sein, man kann es auch read only konfigurieren.
4. Huch, da ist ja noch ein 2. Channel...
Der ist natürlich für Punkt 4 Deiner Liste. Das passende Item sähe dann entsprechend so aus:

Code: Alles auswählen

DateTime CamGarageLastRecording "Letzte Aufnahme"  {channel="http:url:camGarage:datum"}
Voraussetzung ist natürlich, dass es sich um einen Zeitstempel handelt. Wenn es stattdessen nur die Sekunden(-bruchteile) seit einem Zeitpunkt x sind (z.B. 1.1.1970, 00:00:00 Uhr), wirst Du doch wieder auf Number als Format ausweichen müssen.

Und hier sieht man auch sehr schön, warum das http2 Binding dem http1 Binding überlegen ist: Die Konfiguration ist besser strukturiert und es gibt nur einen Zugriff auf die Camera, obwohl zwei voneinander unabhängige Items gefüllt werden (das ging allerdings auch schon mit http1)