Telegram Actions

openHAB 4.1.1

when I use blockly rule to determine thing status and send notification to telegram I have a problem

Script execution of rule with UID ‘scratchpad’ failed: org.graalvm.polyglot.PolyglotException: TypeError: invokeMember (getThing) on org.openhab.core.model.script.actions.Things failed due to: Unknown identifier: getThing

Generated code is here

var currentState;

var things = Java.type('org.openhab.core.model.script.actions.Things');


currentState = things.getThing('yandexstation:scenarios:71769518f3:7f3fda28b7').status;
if (currentState == 'ONLINE') {
  things.getActions('telegram', 'telegram:telegramBot:ce29dc2f29').sendTelegram('✅ Яндекс-сценарии [1] доступны');
} else {
  things.getActions('telegram', 'telegram:telegramBot:ce29dc2f29').sendTelegram('‼️❌ Яндекс-сценарии [1] не доступны');
}

The problem is here

var things = Java.type('org.openhab.core.model.script.actions.Things');

Telegram block generates variable things which already exists in openhab-js and has different methods.

  utilities:
    - component: UtilityJavaType
      config:
        javaClass: org.openhab.core.model.script.actions.Things
        name: things

I renamed the variable to thingsHelper and put it everywhere in {{utility:things}} instead of things
{{utility:things}}

new block code is here

uid: telegram
tags:
  - marketplace:130507
props:
  parameters: []
  parameterGroups: []
timestamp: Jan 11, 2024, 12:07:39 PM
component: BlockLibrary
config:
  name: Telegram
slots:
  blocks:
    - component: BlockType
      config:
        args0:
          - name: MESSAGE
            type: input_value
          - name: BOT
            type: input_value
        colour: "#2ea5d8"
        helpUrl: ""
        inputsInline: true
        lastDummyAlign0: right
        message0: send on Telegram %1 from bot %2
        nextStatement: ""
        previousStatement: ""
        tooltip: ""
        type: message
      slots:
        code:
          - component: BlockCodeTemplate
            config:
              template: >
                {{utility:thingsHelper}}.getActions('telegram', {{input:BOT}}).sendTelegram({{input:MESSAGE}});
        toolbox:
          - component: PresetInput
            config:
              fields:
                TEXT: What's up?
              name: MESSAGE
              shadow: true
              type: text
          - component: PresetInput
            config:
              name: BOT
              shadow: true
              type: oh_thing
    - component: BlockType
      config:
        args0:
          - name: ATTACHMENT_TYPE
            type: field_dropdown
            align: right
            options:
              - - photo
                - Photo
              - - animation
                - Animation
              - - video
                - Video
          - name: URL
            type: input_value
            align: right
          - name: CAPTION
            type: input_value
            align: right
          - name: BOT
            type: input_value
            align: right
        lastDummyAlignRight0: true
        colour: "#2ea5d8"
        helpUrl: ""
        inputsInline: false
        lastDummyAlign0: right
        message0: send %1 on Telegram %2 with caption %3 from bot %4
        nextStatement: ""
        previousStatement: ""
        tooltip: ""
        type: message_attachment
      slots:
        code:
          - component: BlockCodeTemplate
            config:
              template: >
                {{utility:thingsHelper}}.getActions('telegram', {{input:BOT}}).sendTelegram{{field:ATTACHMENT_TYPE}}({{input:URL}}, {{input:CAPTION}});
        toolbox:
          - component: PresetInput
            config:
              fields:
                TEXT: URL or filename
              name: URL
              shadow: true
              type: text
          - component: PresetInput
            config:
              fields:
                TEXT: caption
              name: CAPTION
              shadow: true
              type: text
          - component: PresetInput
            config:
              name: BOT
              shadow: true
              type: oh_thing
    - component: BlockType
      config:
        args0:
          - name: URL
            type: input_value
            align: right
          - name: USERNAME
            type: input_value
            align: right
          - name: PASSWORD
            type: input_value
            align: right
          - name: CAPTION
            type: input_value
            align: right
          - name: BOT
            type: input_value
            align: right
        lastDummyAlignRight0: true
        colour: "#2ea5d8"
        helpUrl: ""
        inputsInline: false
        lastDummyAlign0: right
        message0: send photo on Telegram %1 username %2 password %3 with caption %4 from bot %5
        nextStatement: ""
        previousStatement: ""
        tooltip: ""
        type: message_attachment_photo_with_creds
      slots:
        code:
          - component: BlockCodeTemplate
            config:
              template: >
                {{utility:thingsHelper}}.getActions('telegram', {{input:BOT}}).sendTelegramPhoto({{input:URL}}, {{input:CAPTION}}, {{input:USERNAME}}, {{input:PASSWORD}});
        toolbox:
          - component: PresetInput
            config:
              fields:
                TEXT: URL or filename
              name: URL
              shadow: true
              type: text
          - component: PresetInput
            config:
              fields:
                TEXT: caption
              name: CAPTION
              shadow: true
              type: text
          - component: PresetInput
            config:
              fields:
                TEXT: user
              name: USERNAME
              shadow: true
              type: text
          - component: PresetInput
            config:
              fields:
                TEXT: pass
              name: PASSWORD
              shadow: true
              type: text
          - component: PresetInput
            config:
              name: BOT
              shadow: true
              type: oh_thing
    - component: Separator
      config:
        gap: 48
    - component: BlockType
      config:
        args0:
          - name: MESSAGE
            type: input_value
            align: right
          - name: BOT
            type: input_value
            align: right
          - name: REPLY_ID
            type: input_value
            align: right
          - name: BUTTONS
            type: field_input
            align: right
        lastDummyAlignRight0: true
        colour: "#2ea5d8"
        helpUrl: ""
        inputsInline: false
        lastDummyAlign0: right
        message0: ask on Telegram %1 from bot %2 use reply id %3 with buttons %4
        nextStatement: ""
        previousStatement: ""
        tooltip: ""
        type: query
      slots:
        code:
          - component: BlockCodeTemplate
            config:
              template: >
                {{utility:thingsHelper}}.getActions('telegram', {{input:BOT}}).sendTelegramQuery({{input:MESSAGE}}, {{input:REPLY_ID}}, {{field:BUTTONS}});
        toolbox:
          - component: PresetInput
            config:
              fields:
                TEXT: Turn off the lights?
              name: MESSAGE
              shadow: true
              type: text
          - component: PresetField
            config:
              name: BUTTONS
              value: "'Yes', 'No'"
          - component: PresetInput
            config:
              fields:
                TEXT: replyId
              name: REPLY_ID
              shadow: true
              type: text
          - component: PresetInput
            config:
              name: BOT
              shadow: true
              type: oh_thing
    - component: BlockType
      config:
        args0:
          - name: MESSAGE
            type: input_value
            align: right
          - name: REPLY_ID
            type: input_value
            align: right
          - name: BOT
            type: input_value
            align: right
        lastDummyAlignRight0: true
        colour: "#2ea5d8"
        helpUrl: ""
        inputsInline: false
        lastDummyAlign0: right
        lastDummyAlign1: right
        message0: reply on Telegram %1 to reply id %2 from bot %3
        nextStatement: ""
        previousStatement: ""
        tooltip: ""
        type: answer
      slots:
        code:
          - component: BlockCodeTemplate
            config:
              template: >
                {{utility:thingsHelper}}.getActions('telegram', {{input:BOT}}).sendTelegramAnswer({{input:REPLY_ID}}, {{input:MESSAGE}});
        toolbox:
          - component: PresetInput
            config:
              fields:
                TEXT: Ok!
              name: MESSAGE
              shadow: true
              type: text
          - component: PresetInput
            config:
              fields:
                TEXT: replyId
              name: REPLY_ID
              shadow: true
              type: text
          - component: PresetInput
            config:
              name: BOT
              shadow: true
              type: oh_thing
  utilities:
    - component: UtilityJavaType
      config:
        javaClass: org.openhab.core.model.script.actions.Things
        name: thingsHelper