"getActions" mit LCN funktioniert nicht mehr...

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
harteknut
Beiträge: 235
Registriert: 3. Dez 2019 08:21
Answers: 9

"getActions" mit LCN funktioniert nicht mehr...

Beitrag von harteknut »

Hallo zusammen,
ich habe heute ein kleines Update auf OH 4.0.3 gemacht, seitdem bekomme ich in allen Regeln Fehlermeldungen, die mit getActions auf dem LCN-Bus arbeiten:

Code: Alles auswählen

2023-10-23 23:44:00.140 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'anzeige-3' failed: Cannot invoke "org.openhab.binding.lcn.internal.LcnModuleActions.sendDynamicText(int, String)" because "actions" is null in anzeige
Hat jemand ein ähnliches Thema oder kann mir einen Tip geben, woran das liegen könnte?
Danke Euch schon mal
Simon
von harteknut » 25. Okt 2023 21:21
Krass, wie peinlich:
  • Import und globaler Timer sind vor der ersten Rule in der Datei definiert? -> aber klar
  • Hast Du openHAB mal neu gestartet?
    -> direkt, bevor der Fehler das erste Mal kam.
    Warte mal, ich machs nochmal... Fehler immer noch da.
    Jetzt nochmal... Fehler weg.
Verstehen tu ichs aber nicht...?
Wie auch immer: supervielen Dank, Du hast mich gerettet!
Gehe zur vollständigen Antwort

harteknut
Beiträge: 235
Registriert: 3. Dez 2019 08:21
Answers: 9

Re: "getActions" mit LCN funktioniert nicht mehr...

Beitrag von harteknut »

...zur Ergänzung hier die Einträge aus den Rules, die zu den Fehlern führen. Der Syntax stimmt m.E. 100% mit der Doku überein, ist auch die letzten Jahre problemlos so gelaufen:

getActions,um sendDynamicText zu nutzen:

Code: Alles auswählen

val actions = getActions("lcn","lcn:module:edb2e504:S000M019")
		val T_akt = String::format("%.1f",(OWMLocalWeatherAndForecastCurrentTemperature.state as QuantityType<Number>).floatValue)
		val T_max = String::format("%.1f",(OWMLocalWeatherAndForecastForecastTodayMaxTemperature.state as QuantityType<Number>).floatValue)
		val zeile_1 = (T_akt + " °C   (" + T_max + " °C)")
		actions.sendDynamicText(1, zeile_1)
getActions, um flickerOutput zu nutzen:

Code: Alles auswählen

val OG_M35_Blinken = getActions("lcn","lcn:module:edb2e504:S000M035")
	OG_M35_Blinken.flickerOutput(2, 2, 1, 1)
In beiden Fällen erhalte ich gleich lautende Fehlermeldungen "cannot invoke... because "actions" is null in..."

harteknut
Beiträge: 235
Registriert: 3. Dez 2019 08:21
Answers: 9

Re: "getActions" mit LCN funktioniert nicht mehr...

Beitrag von harteknut »

Ist da evtl. kürzlich was an der Rule-Engine (oder wie das Ding heißt) geändert worden?
Was mir auffällt: Die UID ist "anzeige-3", in der Fehlermeldung heißt es aber "...null in anzeige".
Bei der Spiegelheizung ist es ähnlich: Rule-UID "spiegelheizung-2", Fehlermeldung "null in spiegelheizung".

Kann das die Ursache sein...?

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

Re: "getActions" mit LCN funktioniert nicht mehr...

Beitrag von udo1toni »

harteknut hat geschrieben: 24. Okt 2023 07:28 Was mir auffällt: Die UID ist "anzeige-3", in der Fehlermeldung heißt es aber "...null in anzeige".
Bei der Spiegelheizung ist es ähnlich: Rule-UID "spiegelheizung-2", Fehlermeldung "null in spiegelheizung".
Das ist korrekt (und war unter OH3 anders), die UID wird bei dateibasierten Rules anhand des Dateinamens und der Position in der Datei erzeugt.
In der Fehlermeldung wird aber der Name der Rule verwendet (so wie man es eigentlich auch erwarten würde... und OH3 wurde einfach die UID ausgegeben)

Das hat aber nichts mit Deinem Fehler zu tun.
Wie ist das Thing definiert?

Bist Du sicher, dass die UID des Things stimmt?
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

harteknut
Beiträge: 235
Registriert: 3. Dez 2019 08:21
Answers: 9

Re: "getActions" mit LCN funktioniert nicht mehr...

Beitrag von harteknut »

Danke für die gewohnt schnelle Antwort!
Ja, da bin ich mir sehr sicher, aus folgenden Gründen: Ich habe an den Rules nix geändert, und alle Rules, die die Funktion getActions verwenden(unterschiedliche Rules in unterschiedlichen Dateien) werfen nach dem Update den gleichen Fehler.
Außerdem habe ich die UID mal im API-Explorer mal bei "actions" reinkopiert
Response bei "get" sieht m.E. gut aus:

Code: Alles auswählen

[
  {
    "actionUid": "lcn.beep",
    "label": "let the module's beeper beep",
    "description": "Lets the beeper connected to the LCN module beep",
    "inputs": [
      {
        "name": "volume",
        "type": "java.lang.Double",
        "label": "Sound Volume",
        "description": "The sound volume in percent.",
        "required": false,
        "tags": [],
        "reference": "",
        "defaultValue": ""
      },
      {
        "name": "tonality",
        "type": "java.lang.String",
        "label": "Tonality",
        "description": "Tonality (N, S, 1-7)",
        "required": false,
        "tags": [],
        "reference": "",
        "defaultValue": ""
      },
      {
        "name": "count",
        "type": "java.lang.Integer",
        "label": "Count",
        "description": "Number of beeps",
        "required": false,
        "tags": [],
        "reference": "",
        "defaultValue": ""
      }
    ],
    "outputs": []
  },
  {
    "actionUid": "lcn.hitKey",
    "label": "send a hit key command",
    "description": "Sends a \"hit key\" command to an LCN module.",
    "inputs": [
      {
        "name": "table",
        "type": "java.lang.String",
        "label": "Table",
        "description": "The key table (A-D)",
        "required": true,
        "tags": [],
        "reference": "",
        "defaultValue": ""
      },
      {
        "name": "key",
        "type": "java.lang.Integer",
        "label": "Key",
        "description": "The key number (1-8)",
        "required": true,
        "tags": [],
        "reference": "",
        "defaultValue": ""
      },
      {
        "name": "action",
        "type": "java.lang.String",
        "label": "Action",
        "description": "The action (HIT, MAKE, BREAK)",
        "required": true,
        "tags": [],
        "reference": "",
        "defaultValue": ""
      }
    ],
    "outputs": []
  },
  {
    "actionUid": "lcn.flickerOutput",
    "label": "flicker a dimmer output",
    "description": "Let a dimmer output flicker for a given count of flashes.",
    "inputs": [
      {
        "name": "output",
        "type": "java.lang.Integer",
        "label": "Output",
        "description": "The output number (1-4)",
        "required": true,
        "tags": [],
        "reference": "",
        "defaultValue": ""
      },
      {
        "name": "depth",
        "type": "java.lang.Integer",
        "label": "Depth",
        "description": "0=25% 1=50% 2=100%",
        "required": false,
        "tags": [],
        "reference": "",
        "defaultValue": ""
      },
      {
        "name": "ramp",
        "type": "java.lang.Integer",
        "label": "Ramp",
        "description": "0=2sec 1=1sec 2=0.5sec",
        "required": false,
        "tags": [],
        "reference": "",
        "defaultValue": ""
      },
      {
        "name": "count",
        "type": "java.lang.Integer",
        "label": "Count",
        "description": "Number of flashes (1-15)",
        "required": false,
        "tags": [],
        "reference": "",
        "defaultValue": ""
      }
    ],
    "outputs": []
  },
  {
    "actionUid": "lcn.sendDynamicText",
    "label": "send a custom text",
    "description": "Send custom text to an LCN-GTxD display.",
    "inputs": [
      {
        "name": "row",
        "type": "java.lang.Integer",
        "label": "Row",
        "description": "Display the text on the LCN-GTxD in the given row number (1-4)",
        "required": true,
        "tags": [],
        "reference": "",
        "defaultValue": ""
      },
      {
        "name": "text",
        "type": "java.lang.String",
        "label": "Text",
        "description": "The text to display (max. 60 chars/bytes)",
        "required": false,
        "tags": [],
        "reference": "",
        "defaultValue": ""
      }
    ],
    "outputs": []
  },
  {
    "actionUid": "lcn.startRelayTimer",
    "label": "start a relay timer",
    "description": "Start an LCN relay timer.",
    "inputs": [
      {
        "name": "relaynumber",
        "type": "java.lang.Integer",
        "label": "Relay Number",
        "description": "The relay number (1-8)",
        "required": true,
        "tags": [],
        "reference": "",
        "defaultValue": ""
      },
      {
        "name": "duration",
        "type": "java.lang.Double",
        "label": "Duration [ms]",
        "description": "The timer duration in milliseconds",
        "required": true,
        "tags": [],
        "reference": "",
        "defaultValue": ""
      }
    ],
    "outputs": []
  }
]
Response bei "post" verstehe ich nicht:

Code: Alles auswählen

 allow: DELETE,POST,GET,PUT,OPTIONS,HEAD 
 content-length: 0 
 date: Tue,24 Oct 2023 16:45:01 GMT 
 server: Jetty(9.4.50.v20221201) 
Hilft es Dir weiter?

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

Re: "getActions" mit LCN funktioniert nicht mehr...

Beitrag von udo1toni »

Wie sind die Rules genau definiert?
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

harteknut
Beiträge: 235
Registriert: 3. Dez 2019 08:21
Answers: 9

Re: "getActions" mit LCN funktioniert nicht mehr...

Beitrag von harteknut »

Die eine betrifft eine Spiegelheizung im Bad:

Code: Alles auswählen

var Timer tSpiegelheizung_OG = null

rule "Spiegelheizung OG Timer setzen"
when
    Item OG_Bad_Spiegelheizung changed from OFF to ON
then
	tSpiegelheizung_OG?.cancel												// zunächst eventuell laufende Timer entfernen
	val OG_M35_Blinken = getActions("lcn","lcn:module:edb2e504:S000M035")
	OG_M35_Blinken.flickerOutput(2, 2, 1, 1)
    tSpiegelheizung_OG = createTimer(now.plusSeconds(3600), [ |  				// Timer anlegen
		OG_Bad_Spiegelheizung.sendCommand(OFF)
		tSpiegelheizung_OG = null											// Timervariable deinitialisieren
	])
end
Die zweite betrifft die Anzeige auf einem Display und schickt jede Minute die richtige Zeit, außer wenn Mülltonnen rausmüssen, dann wird das angezeigt:

Code: Alles auswählen

import java.time.ZonedDateTime

rule "Anzeige Müllkalender (Zeile 3)"
	when
		Time cron "0 0/1 * * * ?" or // jede Minute
		Item Tonne_muss_raus changed
	then
		val actions = getActions("lcn","lcn:module:edb2e504:S000M019")
		val akt_Zeit = String::format( "%1$ta, %1$td. %1$tb %1$tk:%1$tM h", ZonedDateTime.now() )
		val nae_Muell = Ephemeris.getNextBankHoliday("/etc/openhab/services/muellkalender.xml")
		naechster_Feiertag.postUpdate(akt_Zeit) 
		if  ((Ephemeris.isBankHoliday(ZonedDateTime.now(), "/etc/openhab/services/muellkalender.xml")) && (Tonne_muss_raus.state == ON)) {
			actions.sendDynamicText(3, ("heute: " + nae_Muell))	}
		else {
			if  ((Ephemeris.isBankHoliday(ZonedDateTime.now().plusDays(1), "/etc/openhab/services/muellkalender.xml")) && (Tonne_muss_raus.state == ON) && (now.isAfter(ZonedDateTime.now().with(LocalTime.MIDNIGHT).plusMinutes(1140)))) {
				actions.sendDynamicText(3, ("morgen: " + nae_Muell)) }
			else {
				actions.sendDynamicText(3, (akt_Zeit) )}}
end

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

Re: "getActions" mit LCN funktioniert nicht mehr...

Beitrag von udo1toni »

Import und globaler Timer sind vor der ersten Rule in der Datei definiert?
(Der Import sollte außerdem unnötig sein, java.time.ZonedDateTime steht ohne Import zur Verfügung.)
Hast Du openHAB mal neu gestartet?
Hast Du das Thing mal pausiert und wieder aktiviert?
Hast Du die Rule mal pausiert (disabled) und wieder aktiviert?
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

harteknut
Beiträge: 235
Registriert: 3. Dez 2019 08:21
Answers: 9

[gelöst]vRe: "getActions" mit LCN funktioniert nicht mehr...

Beitrag von harteknut »

Krass, wie peinlich:
  • Import und globaler Timer sind vor der ersten Rule in der Datei definiert? -> aber klar
  • Hast Du openHAB mal neu gestartet?
    -> direkt, bevor der Fehler das erste Mal kam.
    Warte mal, ich machs nochmal... Fehler immer noch da.
    Jetzt nochmal... Fehler weg.
Verstehen tu ichs aber nicht...?
Wie auch immer: supervielen Dank, Du hast mich gerettet!

Antworten