Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. einfacher Matrix Chat Client

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    3.5k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.1k

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.5k

einfacher Matrix Chat Client

Scheduled Pinned Locked Moved JavaScript
3 Posts 3 Posters 912 Views 5 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • P Offline
    P Offline
    powo01
    wrote on last edited by powo01
    #1

    Hallo,

    ich habe mit Hilfe der "matrix-js-sdk" ein einfaches Typescript erstellt was Nachrichten in einen Raum
    innerhalb des matrix.org Netzwerk schicken

    namespace matrixClient {
        const matrixJsSdk = require('matrix-js-sdk')
        
        const configPrefix:string = '0_userdata.0.matrix'
        const serverUrl:string = getState(configPrefix + 'Url'/*matrixUrl*/).val
        const testRoomId:string = getState(configPrefix + 'Room'/*matrixRoom*/).val
        const loginData:object = JSON.parse(getState(configPrefix + 'Login'/*matrixLogin*/).val)
        
        const matrixMessage: string = 'matrixMessage'
        const eventType:string = 'm.room.message'
        const messageType:string = 'm.text'
    
        const matrixClient = matrixJsSdk.createClient(serverUrl)
    
        const eventReceiverCallback = function(event, room, toStartOfTimeline):void {
            if (event.getType() != eventType &&
                event.getRoomId() != testRoomId &&
                event.getContent().msgtype != messageType) {
                return;
            }
    
            log(event.getContent().body)
        }
    
        const sendMessageToMatrix = function (data: string): any {
            const content: object = {
                "msgtype": messageType,
                "body": data
            }
    
            matrixClient.sendEvent(testRoomId, eventType, content, "").then((res) => {
            }).catch((err) => {
                log(err)
            })
    
            
            return(Date.now())
        }
    
        onStop(() => {
            onMessageUnregister(matrixMessage)
            matrixClient.stopClient()
            matrixClient.logout()
        })
    
        matrixClient.login("m.login.password", loginData).then((response) => {
            // matrixClient.initCrypto()
            matrixClient.startClient()
    
            matrixClient.once('sync', function (state, prevState, res) {
                console.log(state) // state will be 'PREPARED' when the client is ready to use
    
                matrixClient.on("Room.timeline", eventReceiverCallback)
                onMessage(matrixMessage, sendMessageToMatrix)
            })
        })
    }
    

    zum Senden über diesen Client benutze ich die folgende Funktion, die bei mir in global liegt und damit allen scripts zur Verfügung steht

    /**
     * send message to matrix messager
     * 
     * @param message Message to send
     */
    const sendMessageToMatrix = function(message:string, prefix:string = scriptName + ": ") {
        if(isScriptActive('script.js.test.matrix-client')) {
            messageTo('matrixMessage', prefix + message)
        }
    }
    

    Vielleicht kann jemand etwas damit angefangen

    VG,
    powo01

    UncleSamU 1 Reply Last reply
    1
    • P powo01

      Hallo,

      ich habe mit Hilfe der "matrix-js-sdk" ein einfaches Typescript erstellt was Nachrichten in einen Raum
      innerhalb des matrix.org Netzwerk schicken

      namespace matrixClient {
          const matrixJsSdk = require('matrix-js-sdk')
          
          const configPrefix:string = '0_userdata.0.matrix'
          const serverUrl:string = getState(configPrefix + 'Url'/*matrixUrl*/).val
          const testRoomId:string = getState(configPrefix + 'Room'/*matrixRoom*/).val
          const loginData:object = JSON.parse(getState(configPrefix + 'Login'/*matrixLogin*/).val)
          
          const matrixMessage: string = 'matrixMessage'
          const eventType:string = 'm.room.message'
          const messageType:string = 'm.text'
      
          const matrixClient = matrixJsSdk.createClient(serverUrl)
      
          const eventReceiverCallback = function(event, room, toStartOfTimeline):void {
              if (event.getType() != eventType &&
                  event.getRoomId() != testRoomId &&
                  event.getContent().msgtype != messageType) {
                  return;
              }
      
              log(event.getContent().body)
          }
      
          const sendMessageToMatrix = function (data: string): any {
              const content: object = {
                  "msgtype": messageType,
                  "body": data
              }
      
              matrixClient.sendEvent(testRoomId, eventType, content, "").then((res) => {
              }).catch((err) => {
                  log(err)
              })
      
              
              return(Date.now())
          }
      
          onStop(() => {
              onMessageUnregister(matrixMessage)
              matrixClient.stopClient()
              matrixClient.logout()
          })
      
          matrixClient.login("m.login.password", loginData).then((response) => {
              // matrixClient.initCrypto()
              matrixClient.startClient()
      
              matrixClient.once('sync', function (state, prevState, res) {
                  console.log(state) // state will be 'PREPARED' when the client is ready to use
      
                  matrixClient.on("Room.timeline", eventReceiverCallback)
                  onMessage(matrixMessage, sendMessageToMatrix)
              })
          })
      }
      

      zum Senden über diesen Client benutze ich die folgende Funktion, die bei mir in global liegt und damit allen scripts zur Verfügung steht

      /**
       * send message to matrix messager
       * 
       * @param message Message to send
       */
      const sendMessageToMatrix = function(message:string, prefix:string = scriptName + ": ") {
          if(isScriptActive('script.js.test.matrix-client')) {
              messageTo('matrixMessage', prefix + message)
          }
      }
      

      Vielleicht kann jemand etwas damit angefangen

      VG,
      powo01

      UncleSamU Offline
      UncleSamU Offline
      UncleSam
      Developer
      wrote on last edited by
      #2

      @powo01 Cool, was du da programmiert hast! Wärst du bereit, daraus einen Adapter zu machen? Das ist absolut kein Hexenwerk. Damit könnten andere ohne grossen Aufwand (und Programmierkenntnisse) den Chat Client auch verwenden.

      Falls du Tipps brauchst oder Fragen hast zur Adapter Entwicklung, stell sie einfach hier; es findet sich immer jemand, der deine Fragen beantworten kann.

      Bitte bei Problemen mit meinen Adaptern, Issue auf GitHub erfassen: Loxone | I2C | Luxtronik2
      ♡-lichen Dank an meine Sponsoren

      1 Reply Last reply
      0
      • D Offline
        D Offline
        Dave83
        wrote on last edited by Dave83
        #3

        Hallo, da ich diesen Artikel merhmals bei Google gefunden habe, wollte ich an dieser Stelle fragen.

        Gibt es einen ausgereiften MatrixChat Adapter? Weil dann würde ich auf Telegram verzichten und mir Nachrichten vom SmartHome selber darüber senden.

        Ich frage hier, weil dann vermutlich viele andere das ebenfalls über Google finden werden und noch besser weiterwissen.

        PS: Naja, wer Matrix im Adapter Fenster reingibt, findet sofort: =D
        Bildschirmfoto 2023-10-05 um 21.43.23.png

        1 Reply Last reply
        1
        Reply
        • Reply as topic
        Log in to reply
        • Oldest to Newest
        • Newest to Oldest
        • Most Votes


        Support us

        ioBroker
        Community Adapters
        Donate

        296

        Online

        32.7k

        Users

        82.4k

        Topics

        1.3m

        Posts
        Community
        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
        ioBroker Community 2014-2025
        logo
        • Login

        • Don't have an account? Register

        • Login or register to search.
        • First post
          Last post
        0
        • Home
        • Recent
        • Tags
        • Unread 0
        • Categories
        • Unreplied
        • Popular
        • GitHub
        • Docu
        • Hilfe