Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
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
    14
    1
    213

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    1.8k

einfacher Matrix Chat Client

Geplant Angeheftet Gesperrt Verschoben JavaScript
3 Beiträge 3 Kommentatoren 893 Aufrufe 5 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • P Offline
    P Offline
    powo01
    schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
    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
      schrieb am zuletzt editiert von
      #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 Antwort Letzte Antwort
      0
      • D Offline
        D Offline
        Dave83
        schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
        1
        Antworten
        • In einem neuen Thema antworten
        Anmelden zum Antworten
        • Älteste zuerst
        • Neuste zuerst
        • Meiste Stimmen


        Support us

        ioBroker
        Community Adapters
        Donate

        838

        Online

        32.5k

        Benutzer

        81.8k

        Themen

        1.3m

        Beiträge
        Community
        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
        ioBroker Community 2014-2025
        logo
        • Anmelden

        • Du hast noch kein Konto? Registrieren

        • Anmelden oder registrieren, um zu suchen
        • Erster Beitrag
          Letzter Beitrag
        0
        • Home
        • Aktuell
        • Tags
        • Ungelesen 0
        • Kategorien
        • Unreplied
        • Beliebt
        • GitHub
        • Docu
        • Hilfe