OH3 JavaScript built-in-Methoden nicht gefunden

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

wolfnic
Beiträge: 8
Registriert: 19. Feb 2021 15:56
Answers: 0

OH3 JavaScript built-in-Methoden nicht gefunden

Beitrag von wolfnic »

Hallo allerseits,

ich bin neu bei openHAB und hier im Forum.
Ich habe vor kurzem openHAB 3 auf einem RasPi installiert und war zunächst begeistert, wie schnell man da was zum Laufen kriegt.
Inzwischen ist bei mir ein gewisser Frust eingetreten (wie ich im Forum gesehen habe, bin ich da wohl nicht der einzige :( )
Umsomehr bin ich froh über dieses tolle Forum, vielen Dank allen Foristen!

Jetzt hänge ich an einem (vermutlich meiner Dämlichkeit geschuldetem) Problem.
Ich will die Werte von einem per HTTP erreichbarem Device (ein 3-fach S0-Zähler) auslesen (mit einem HTTP-Binding) und muss die erst mal konvertieren.
Dazu nutze ich in einer Rule in JavaScript String-Methoden, z.B. replace().
Die müsste doch eigentlich built-in sen, oder?

Das führt aber zu einem Fehler, hier aus dem Logging:
2021-03-25 18:26:12.080 [WARN ] [e.automation.internal.RuleEngineImpl] - Fail to execute action: 2
java.lang.AssertionError: unknown call type GET:METHOD|PROPERTY|ELEMENT:replace(Object)Object@jdk.nashorn.internal.scripts.Script$Recompilation$854$\^eval\_$cu1$restOf/0x905d9828
at jdk.nashorn.internal.runtime.linker.NashornBottomLinker.linkBean(NashornBottomLinker.java:126) ~[jdk.scripting.nashorn:?]
. . .


Hier der (bisherige) gesamte Code der Rule:

Code: Alles auswählen

var item = itemRegistry.getItem("IPswitchHTTPURLThing_WPVerbrauchText")
var rawValue = item.state.toString

// Hier tritt der Fehler auf, tritt aber genauso auch bei anderen Methoden auf, z.B. split())
var temp = rawValue.replace('IPswitch csv m2-0Hx,0,0,0,0,0,0,0,0,0.0,0.0,0.0,0,0,0,0,', '')
Was mach ich falsch?

Vielen Dank schon mal

oh73
Beiträge: 302
Registriert: 7. Mär 2021 14:49
Answers: 1

Re: OH3 JavaScript built-in-Methoden nicht gefunden

Beitrag von oh73 »

wie sieht denn die Ausgabe aus wenn du die Abfrage im Browser startest?
kommt da ein json String? oder oder nur reine Textausgabe?

bin auch nicht der Experte, hab aber für meine Thermostatventil Abfragen mir etas zusammen gebastelt.
ginge bestimmt einfacher aber es funktioniert!

also ich frage das Thermostat mit
ergebnis =sendHttpGetRequest("http://192.168.178,xxx/......) ab.
da kommt ein String mit jede Menge Daten,

Code: Alles auswählen

{XC_SUC}[{"type":"EVENT","adr":"FF","state":"0"},{"type":"WS300","adr":"71","state":"0000:0000:0000:0000:00"},{"type":"HMFHT","adr":"4CDDB701","state":"I:0:0000:0000:00:00"},{"type":"QA","adr":"FF","state":"FF:00"},{"type":"HMFHT","adr":"4CDDEB01","state":"I:0:00AA:00CC:00:00"},{"type":"CF4","adr":"000010","state":"00000000:FF:0:0"},{"type":"HMFHT","adr":"2247C401","state":"I:0:00B4:00DB:00:00"}]
den nehm ich dann auseinander, suche nach der Id von dem Thermostat, hier "4CDDEB01", teile den String, hole dann von die Werte der Temperatur in Hex, hier an Position 19 -19, rechne das dann um in Dezimal.

sieht dann so aus,

Code: Alles auswählen

ergebnis = ergebnis1.toString.split("4CDDEB01").get(1)
		//Temp_soll_hex = ergebnis.substring(15,19)
		//Temp_soll_dec = Integer::parseInt(Temp_soll_hex, 16)
		//nFloatValsoll = Temp_soll_dec.floatValue()  / 10
		nFloatValsoll = Integer::parseInt(ergebnis.substring(15,19), 16).floatValue()  / 10
		soll_kinderzimmer.postUpdate(nFloatValsoll)
das ausgeklammerte waren meine ersten Versuche, geht aber auch einfacher mit nur 1 Zeile!

nicht die schönste Lösung, aber es geht!
OH 4.3.0 auf HP 26o G1 Dm Mini Pc mit MX_Linux

wolfnic
Beiträge: 8
Registriert: 19. Feb 2021 15:56
Answers: 0

Re: OH3 JavaScript built-in-Methoden nicht gefunden

Beitrag von wolfnic »

Wenn ich die Abfrage im Browser ausführe, kommt ein Text zurück, hier der HTML-Quelltext:

Code: Alles auswählen

<html><head><title>IPswitch csv</title></head> <body>IPswitch csv m2-0Hx,0,0,0,0,0,0,0,0,0.0,0.0,0.0,0,0,0,0, 22000507, 151327, 1668711, 110,0,17, ,,, ,,, ,,, ,,, ,,,IPs14,,,<br>
sa 00-00-00 01:15:26.220<br> </body></html> 
Ich will die 3 ersten Zahlen nach den vielen 0.
oh73 hat geschrieben: 26. Mär 2021 11:22

Code: Alles auswählen

ergebnis = ergebnis1.toString.split("4CDDEB01").get(1)
Genau sowas ähnliches hab ich ja auch vor.

Es scheitert also beim Analysieren des zurückgelieferten Strings, egal ob ich split() oder replace() mache.
Hab jetzt probiert, diese Methoden auf einen lokalen Dummy-String anzu wenden, das geht.
Sehr seltsam.

Wenn ich, wie du in deinem Beispiel sendHttpGetRequest() aufrufe, kommt im Logfile folgende Fehlermeldung:

Code: Alles auswählen

Script execution of rule with UID 'b77d18ed06' failed: ReferenceError: "sendHttpGetRequest" is not defined in <eval> at line number 8
Muss ich da noch ein import-Statement einfügen?
Könntest du evtl. mal dein ganzes Script, oder noch besser, den Code der gesamten Rule posten?

oh73
Beiträge: 302
Registriert: 7. Mär 2021 14:49
Answers: 1

Re: OH3 JavaScript built-in-Methoden nicht gefunden

Beitrag von oh73 »

sieht mir aus als ob das Http Binding fehlt, ist das installiert?

dan hab ich noch von den Transformationen installiert:
Regex, JONSONPhath, Javascript, Exec und Binary to Jonson.

was da wirklich gebraucht wird?? ka.

hab mal einen Teil von meinem rules Script, aber ob dir das wirklich hilft? bin da immer noch viel am Versuchen!
und sieht viel nach Php aus, da ich meine Schalter mit meinem Php Programm geschaltet habe.
die meisten Schalter laufen bei mir über ein Mediola AIO Gateway. Funk 433 mhz, FS20 mit 886 Mhz, Homematic Thermostate, usw.
deshalb bin ich auf sendHttpGetRequest(... angewiesen, was soweit auch gut funktioniert.
nur bei manchen aufrufen geht auch schon mal was verloren, daher zum Teil Sicherheitsabfragen , ob auch wirklich was angekommen ist.

Code: Alles auswählen

var String ergebnis 
var String ergebnis1
var String Position 
var String Temp_soll_hex 
var Number Temp_soll_dec 
var String Temp_ist_hex 
var Number Temp_ist_dec 
var String State_hex 
var Number lang 
var Number nIntVal
var Number nFloatValsoll
var Number nIntValx
var Number nFloatValist
var Number soll
var String hexsoll
var String solldec
var String kueinst
var String temp_senden

/* Rule 1 */
//											******* FS20-3 *****
rule "FS20_3" 
    when Item FS20_3 received command 
then
    if (receivedCommand==ON)
{
    sendHttpGetRequest("http://192.168.178.xxx/command?XC_FNC=SendSC&type=FS20&data=xxxxxxxx") 
    }
    else if (receivedCommand==OFF)
{
    sendHttpGetRequest("http://192.168.178.xxx/command?XC_FNC=SendSC&type=FS20&data=xxxxxxxx")
}
//logInfo("Prognose_PV_Leistung",Prognose_PV_Leistung.toString)
end

/* Rule 2 */
//											******* FS20-4 *****************************************************
rule "FS20_4" 
    when Item FS20_4 received command 
then
    if (receivedCommand==ON)
{
    sendHttpGetRequest("http://192.168.178.xxx/command?XC_FNC=SendSC&type=FS20&data=xxxxxxxxxxxx") 
    }
    else if (receivedCommand==OFF)
{
    sendHttpGetRequest("http://192.168.178.xxx/command?XC_FNC=SendSC&type=FS20&data=xxxxxxxxxxxx)
	}
end

/* Rule 3 */
//											***** REV 1 *********************************************
rule "Rev_1" 
    when Item Rev_1 received command 
then
    if (receivedCommand==ON)
{
    sendHttpGetRequest("http://192.168.178.xxx/command?XC_FNC=Send2&type=CODE&code=190800810005001903004400e300d9004e0044090100010101000100010101000100010000000000000101000002") 
    }
    else if (receivedCommand==OFF)
{
    sendHttpGetRequest("http://192.168.178.xxx/command?XC_FNC=Send2&type=CODE&code=190800810005001903004400e300d600510044090100010101000100010101000100010000000000000000010102")
}

end
/* Rule 4 */
//											*******  REV 2 *******************************************
rule "Rev_2" 
    when Item Rev_2 received command 
then
    if (receivedCommand==ON)
{
    sendHttpGetRequest("http://192.168.178.xxx/command?XC_FNC=Send2&type=CODE&code=xxxxxxxxxxxxx") 
    }
    else if (receivedCommand==OFF)
{
    sendHttpGetRequest("http://192.168.178.xxx/command?XC_FNC=Send2&type=CODE&code=xxxxxxxxxxxxx")
}

end
/* Rule 5 */
//											******* REV 3 *********************************************
rule "Rev_3" 
    when Item Rev_3 received command 
then
    if (receivedCommand==ON)
{
    sendHttpGetRequest("http://192.168.178.xxx/command?XC_FNC=Send2&type=CODE&code=xxxxxxxxxxxxxx") 
    }
    else if (receivedCommand==OFF)
{
    sendHttpGetRequest("http://192.168.178.xxx/command?XC_FNC=Send2&type=CODE&code=xxxxxxxxxxxxxx")
}

end

//		Rule 6 	//							***** Temperatur Küche lesen *****************************
rule "Heizung Kueche"
	when Time cron "0 0/5 * * * ?"
then
	ergebnis = null
	Position = null
	ergebnis = sendHttpGetRequest("http://192.168.178.xxx/command?XC_FNC=GetStates")

	if (ergebnis == NULL) {
		Dummy.postUpdate("ergebnis "+Position)
	} else {
		lang = ergebnis.length - 1
		Position = ergebnis.substring(0,8) 
		ergebnis1 = ergebnis.substring(9,lang) 
	
		//if ( Position == "{XC_SUC}") {
			//Position = ergebnis1.toString.split("2247C401").get(0)
		ergebnis = ergebnis1.toString.split("2247C401").get(1)
		Temp_soll_hex = ergebnis.substring(15,19)
		Temp_soll_dec = Integer::parseInt(Temp_soll_hex, 16)
		nFloatValsoll = Temp_soll_dec.floatValue()  / 10
		Temp_ist_hex = ergebnis.substring(20,24)
		Temp_ist_dec = Integer::parseInt(Temp_ist_hex, 16)
		nFloatValist = Temp_ist_dec.floatValue()  / 10
		//Temp_lesen_ku.postUpdate("ist = "+nFloatValist+"°C")	
		soll_kueche.postUpdate(nFloatValsoll)
		ist_kueche.postUpdate(nFloatValist)
		//Temp_lesen_ku.postUpdate("Soll Temp = "+nFloatValsoll+"°C    Ist Temp = "+nFloatValist+"°C")
		Dummy.postUpdate("if "+Position)
			//logInfo("ergebnis",ergebnis)
			//logInfo("ergebnis_2",ergebnis1)
		//} else {
		//	Dummy.postUpdate("else "+Position)
		//}
	}
end

/* Rule 7 */
///											***** Temperatur Kinderzimmer lesen  *****	**********************
rule "Heizung Kinderzimmer"
	when Time cron "0 0/1 * * * ?"
then
	ergebnis = null
	Position = null
	ergebnis =sendHttpGetRequest("http://192.168.178.xxx/command?XC_FNC=GetStates")

	if (ergebnis == NULL) {
		Dummy_2.postUpdate("ergebnis "+Position)
	} else {
		lang = ergebnis.length - 1
		Position = ergebnis.substring(0,8) 
		ergebnis1 = ergebnis.substring(9,lang) 

	//if ( Position == "{XC_SUC}") {
		//Position = ergebnis1.toString.split("4CDDEB01").get(0)
		ergebnis = ergebnis1.toString.split("4CDDEB01").get(1)
		//Temp_soll_hex = ergebnis.substring(15,19)
		//Temp_soll_dec = Integer::parseInt(Temp_soll_hex, 16)
		//nFloatValsoll = Temp_soll_dec.floatValue()  / 10
		nFloatValsoll = Integer::parseInt(ergebnis.substring(15,19), 16).floatValue()  / 10
		
		Temp_ist_hex = ergebnis.substring(20,24)
		Temp_ist_dec = Integer::parseInt(Temp_ist_hex, 16)
		nFloatValist = Temp_ist_dec.floatValue()  / 10
		soll_kinderzimmer.postUpdate(nFloatValsoll)
		ist_kinderzimmer.postUpdate(nFloatValist)
		//Temp_lesen_ki.postUpdate("Soll Temp = "+nFloatValsoll+"°C    Ist Temp = "+nFloatValist+"°C")
		Dummy_2.postUpdate("if "+Position)
		//logInfo("ergebnis",ergebnis)
		//logInfo("ergebnis_2",ergebnis1)
	
	}
end
/* Rule 8 */
//											***** Systemstart ****
rule "Systemstart"
when
	System started 
then
	soll = 19  
	Tempkz.postUpdate(soll)
	
	soll = 21  
	Tempkueche.postUpdate(soll)	
end

/* Rule 9 */
//									***** Kinderzimmer Temperatur einstellen  mit Schiebe Regler *****
rule "Temperatur Kinderzimmer einstellen"
when 
	Item Tempkz changed
then
	soll = (Tempkz.state as DecimalType *2).intValue() 
	//logInfo("text-hex", String::format("As integer %d, as hex %s", soll, Integer::toHexString(soll)))
	//Dummy.postUpdate("Status = "+Integer::toHexString(soll))
	temp_senden = "http://192.168.178.xxx/command?XC_FNC=SendSC&type=HM&data=4CDDEB0111"+Integer::toHexString(soll)
	sendHttpGetRequest (temp_senden)
end

/* Rule 10 */
//								***** Küche Temperatur einstellen min Schiebe Regler ****2247C401*******************

rule "Temperatur Küche einstellen"
when 
	Item Tempkueche changed
then
	soll = (Tempkueche.state as DecimalType *2).intValue() 
	//logInfo("text-hex", String::format("As integer %d, as hex %s", soll, Integer::toHexString(soll)))
	//Dummy.postUpdate("Status = "+Integer::toHexString(soll))
	temp_senden = "http://192.168.178.xxx/command?XC_FNC=SendSC&type=HM&data=2247C40111"+Integer::toHexString(soll)
	sendHttpGetRequest (temp_senden)
end

////												****** zum Regler testen *************************
/* Rule 11 */
rule "Teste Regler"
when 
	Item Test changed
then
	soll = (Test.state as DecimalType ).intValue() 
	//logInfo("text-hex", String::format("As integer %d, as hex %s", soll, Integer::toHexString(soll)))
	//Dummy.postUpdate("Status = "+soll)
	
end

// ******************************************** Intertechno *****************************************************

// 											*** Steckdose 1 ***********
// nichts programmiert, ist Steckdose an der Spüle, darf nicht schlaten !!

// 											*** Steckdose 2 Reserve ***********
/* Rule 12 */
rule "IT Steckdose 2"
when 
	Item IT_ST_2 received command 
then
	if (receivedCommand==ON){
		sendHttpGetRequest("http://192.168.178.xxx/command?XC_FNC=SendSC&type=IT&data=01E") 
    }
    else if (receivedCommand==OFF) {
		sendHttpGetRequest("http://192.168.178.xxx/command?XC_FNC=SendSC&type=IT&data=016")
	}
end
// 											*** Steckdose 3 Flur DG ***********
/* Rule 13 */
rule "IT Steckdose 3"
when 
	Item IT_ST_3 received command 
then
	if (receivedCommand==ON){
		sendHttpGetRequest("http://192.168.178.xxx/command?XC_FNC=SendSC&type=IT&data=02E") 
    }
    else if (receivedCommand==OFF) {
		sendHttpGetRequest("http://192.168.178.xxx/command?XC_FNC=SendSC&type=IT&data=026")
	}
end
//
// Schalter 1 und 2 in Küche , dürfen nicht!! Schalter 3 = Reserve
// 											*** Schalter 1 Küche Decke ***********
/* Rule 14 */
rule "IT Schalter 1"
when 
	Item IT_Sch_1 received command 
then
	if (receivedCommand==ON){
		sendHttpGetRequest("http://192.168.178.xxx/darf nichr") 
    }
    else if (receivedCommand==OFF) {
		sendHttpGetRequest("http://192.168.178.xxx/darf nicht")
	}
end
//
// 											*** Schalter 2 Küche Decke ***********
/* Rule 15 */
rule "IT Schalter 2"
when 
	Item IT_Sch_2 received command 
then
	if (receivedCommand==ON){
		sendHttpGetRequest("http://192.168.178.xxx/darf nichr") 
    }
    else if (receivedCommand==OFF) {
		sendHttpGetRequest("http://192.168.178.xxx/darf nicht")
	}
end
//
// 											*** Schalter 3  Reserve ***********
/* Rule 16 */
rule "IT Schalter 3"
when 
	Item IT_Sch_3 received command 
then
	if (receivedCommand==ON){
		sendHttpGetRequest("http://192.168.178.xxx/command?XC_FNC=SendSC&type=IT&data=E2E") 
    }
    else if (receivedCommand==OFF) {
		sendHttpGetRequest("http://192.168.178.xxx/command?XC_FNC=SendSC&type=IT&data=E26")
	}
end
// 											*** Schalter 4 Garage ***********
/* Rule 17 */
rule "IT Schalter 4"
when 
	Item IT_Sch_4 received command 
then
	if (receivedCommand==ON){
		sendHttpGetRequest("http://192.168.178.xxx/command?XC_FNC=SendSC&type=IT&data=03E") 
    }
    else if (receivedCommand==OFF) {
		sendHttpGetRequest("http://192.168.178.xxx/command?XC_FNC=SendSC&type=IT&data=036")
	}
end
//		************************************    Server     ************************++
/* Rule 18 */
rule "Server"
when 
	Item Server received command 
then
	if (receivedCommand==ON){
		sendHttpGetRequest("http://192.168.178.22/msh/msh1.php?nn=80&was=red") 
    }
    else if (receivedCommand==OFF) {
		sendHttpGetRequest("http://192.168.178.22/msh/Zotac_aus_mit_function.php")
	}
end
OH 4.3.0 auf HP 26o G1 Dm Mini Pc mit MX_Linux

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

Re: OH3 JavaScript built-in-Methoden nicht gefunden

Beitrag von udo1toni »

oh73 hat geschrieben: 26. Mär 2021 11:22 also ich frage das Thermostat mit
ergebnis =sendHttpGetRequest("http://192.168.178,xxx/......) ab.
da kommt ein String mit jede Menge Daten,
Ich möchte die http Antwort mal anders formatieren:

Code: Alles auswählen

{XC_SUC}
[
	{
		"type": "EVENT",
		"adr": "FF",
		"state": "0"
	},
	{
		"type": "WS300",
		"adr": "71",
		"state": "0000:0000:0000:0000:00"
	},
	{
		"type": "HMFHT",
		"adr": "4CDDB701",
		"state": "I:0:0000:0000:00:00"
	},
	{
		"type": "QA",
		"adr": "FF",
		"state": "FF:00"
	},
	{
		"type": "HMFHT",
		"adr": "4CDDEB01",
		"state": "I:0:00AA:00CC:00:00"
	},
	{
		"type": "CF4",
		"adr": "000010",
		"state": "00000000:FF:0:0"
	},
	{
		"type": "HMFHT",
		"adr": "2247C401",
		"state": "I:0:00B4:00DB:00:00"
	}
]
Es ist so, dass hier zwei Antworten zusammen ausgeliefert werden. Zum einen der erste Teilstring {XC_SUC}, danach ein hübsches JSON Objekt. Es wäre an dieser Stelle also sinnvoll, das JSON von der http Anfrage mittels REGEX-Ausdruck ({XC_SUC}(.*)) abzutrennen. Anschließend kann man dann komfortabel per JSONPATH auf die einzelnen Status zugreifen.
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

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

Re: OH3 JavaScript built-in-Methoden nicht gefunden

Beitrag von udo1toni »

Was den Zugriff auf den Zähler betrifft, so möchte ich eine andere Vorgehensweise empfehlen. Installiere das http Binding.
Lege ein Thing mit der URL an. Lass Dir mit REGEX (.*<body>(.*)</body>.*) nur den Body in einen String Channel laden. das machst Du nun regelmäßig mittels der refresh time.
Bis zu diesem Punkt brauchtest Du noch keine Rule... :)
Den Channel verbindest Du mit einem String Item.
Anschließend kannst Du in einer Rule aus dem String eine Liste von Strings machen. Ich gehe davon aus, dass die Nullen immer gleich sind, bzw. die interessanten Zahlen immer an der gleichen Stelle stehen, das wäre dann nach dem 16. bis 18. Komma. So:

Code: Alles auswählen

rule "get counter data"
when
    Item CounterInput changed
then
    val MyList = CounterInput.state.toString.split(",")
    MyNumber1.postUpdate(MyList.get(16))
    MyNumber2.postUpdate(MyList.get(17))
    MyNumber3.postUpdate(MyList.get(18))
end
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

wolfnic
Beiträge: 8
Registriert: 19. Feb 2021 15:56
Answers: 0

Re: OH3 JavaScript built-in-Methoden nicht gefunden

Beitrag von wolfnic »

oh73 hat geschrieben: 26. Mär 2021 17:16 sieht mir aus als ob das Http Binding fehlt, ist das installiert?

dan hab ich noch von den Transformationen installiert:
Regex, JONSONPhath, Javascript, Exec und Binary to Jonson.
Das Http Binding funktioniert, das nutze ich an der Stelle auch.
Laut Logging kommt via itemRegistry.getItem().state.toString auch der erwartete HTML-Quelltext bei Änderung rein.

Aber offenbar kann keine Referenz aufgelöst werden.
Wenn ich ein logDebug() einfüge, gibt es auch eine Fehlermeldung:
[ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'b77d18ed06' failed: ReferenceError: "logDebug" is not defined in <eval> at line number 15
Keine Ahnung was da fehlt :cry:

Jetzt ist mir noch was aufgefallen:
Dein Code (vielen Dank erst mal dafür) enthält auch typisierte Variablendeklarationen, also z.B.

Code: Alles auswählen

var String ergebnis
Wenn ich das mache kommt auch eine Fehlermeldung:
[ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'b77d18ed06' failed: <eval>:3:11 Expected ; but found ergebnis
var String ergebnis
^ in <eval> at line number 3 at column number 11

Strenge Typisierung kann doch JavaScript gar nicht, oder?

Frage am Rand:
In deinem Code habe ich auch was mit FS20 gefunden.
Mit welcher Hardware hast du denn das angebunden?
Ich habe nämlich auch noch etliche alte FS20-Temperatur/Feuchtigkeits-Fühler und einen FHZ 1300 PC rumliegen.

wolfnic
Beiträge: 8
Registriert: 19. Feb 2021 15:56
Answers: 0

Re: OH3 JavaScript built-in-Methoden nicht gefunden

Beitrag von wolfnic »

udo1toni hat geschrieben: 26. Mär 2021 19:32 Installiere das http Binding.
Lege ein Thing mit der URL an.
So hab ich es ja gemacht.
Das mit dem REGEX ist eine gute Idee!
Trotzdem muss ich ja dann noch split() aufrufen, und da haut's mich dann auch auf die Schnauze:
java.lang.AssertionError: unknown call type GET:METHOD|PROPERTY|ELEMENT:split()
:?

Könnte ein import oder sowas ähnliches fehlen?
Weil ich weder die Runtime-Methoden noch logInfo() o.ä. nutzen kann :?:

Hier mal der Code der ganzen Rule (noch unvollständig und ohne REGEX):

Code: Alles auswählen

triggers:
  - id: "1"
    configuration:
      itemName: IPswitchHTTPURLThing_WPVerbrauchText
      state: ""
    type: core.ItemStateUpdateTrigger
conditions: []
actions:
  - inputs: {}
    id: "2"
    configuration:
      type: application/javascript
      script: >+
        
        var item = itemRegistry.getItem("IPswitchHTTPURLThing_WPVerbrauchText")
        var rawValue = item.state.toString

        // Hier krachts: 
        var fields = rawValue.split(",")

    type: script.ScriptAction
Mich wundert übrigens, dass da oben nicht "Rule" steht, sondern "Trigger"

oh73
Beiträge: 302
Registriert: 7. Mär 2021 14:49
Answers: 1

Re: OH3 JavaScript built-in-Methoden nicht gefunden

Beitrag von oh73 »

hallo udo1toni,
Es ist so, dass hier zwei Antworten zusammen ausgeliefert werden. Zum einen der erste Teilstring {XC_SUC}, danach ein hübsches JSON Objekt.
ist mir schon klar das der 2. Teil ein jonson Objekt ist, aber dafür hat mir eine richtige Anleitung gefehlt, oder bin ich zu doof dazu?
deshalb hab ich versucht es so zu machen wie auch bei meinemPhp Programm.
bin mir sicher das das auch einfacher geht, aber ich will ja noch lernen!

hallo wolfnick,

hatte ich oben schon mal geschrieben, FS20 und viele andere Funksteckdosen schalte ich alle mit einem Mediola AIO Gateway V4+
das what eine Api Schnittstelle wo ich alles mit http://192.168.178.xxx/command?.... schalten und und auch Temperatur auslesen und einstellen kann!

warum du schon Probleme hast die Variablen zu deklarieren ?? weiß ich jetzt auch nicht.
eine Vermutung , mit welchem Editor erstellst du deine rules Datei? sind da eventuell versteckte Zeichen drin die stören?
openhab ist da sehr empfindlich bei falschen Zeichen!
OH 4.3.0 auf HP 26o G1 Dm Mini Pc mit MX_Linux

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

Re: OH3 JavaScript built-in-Methoden nicht gefunden

Beitrag von udo1toni »

wolfnic hat geschrieben: 26. Mär 2021 20:02
udo1toni hat geschrieben: 26. Mär 2021 19:32 Installiere das http Binding.
Lege ein Thing mit der URL an.
So hab ich es ja gemacht.
Das mit dem REGEX ist eine gute Idee!
Trotzdem muss ich ja dann noch split() aufrufen, und da haut's mich dann auch auf die Schnauze:
java.lang.AssertionError: unknown call type GET:METHOD|PROPERTY|ELEMENT:split()
:?

Könnte ein import oder sowas ähnliches fehlen?
Weil ich weder die Runtime-Methoden noch logInfo() o.ä. nutzen kann :?:

Hier mal der Code der ganzen Rule (noch unvollständig und ohne REGEX):

Code: Alles auswählen

triggers:
  - id: "1"
    configuration:
      itemName: IPswitchHTTPURLThing_WPVerbrauchText
      state: ""
    type: core.ItemStateUpdateTrigger
conditions: []
actions:
  - inputs: {}
    id: "2"
    configuration:
      type: application/javascript
      script: >+
        
        var item = itemRegistry.getItem("IPswitchHTTPURLThing_WPVerbrauchText")
        var rawValue = item.state.toString

        // Hier krachts: 
        var fields = rawValue.split(",")

    type: script.ScriptAction
Mich wundert übrigens, dass da oben nicht "Rule" steht, sondern "Trigger"
Das Problem ist an dieser Stelle, dass ich Dir eine DSL Rule gepostet habe. Du legst aber Deine Rule über die UI an. Mein Tipp an dieser Stelle wäre tatsächlich: Probiere die Rule mal in einer *.rules Datei aus. Verwende die realen Itemnamen.
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Antworten