Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Hasejs

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    H
    • Profile
    • Following 0
    • Followers 0
    • Topics 4
    • Posts 22
    • Best 0
    • Groups 1

    Hasejs

    @Hasejs

    Starter

    0
    Reputation
    4
    Profile views
    22
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    Hasejs Follow
    Starter

    Latest posts made by Hasejs

    • RE: JS Script Shelly3EM Pro MQTT Fehlermeldung

      @mickym

      Danke für den Anstoß....
      Habe schon die letzten Tage schauen wollen, was ich damals für einen Datentyp eingestellt habe.
      Bin immer daran hängen geblieben, daß ich nichts ändern konnte bzw. die Einstellungen nicht öffnen konnte.

      Habe gerade bemerkt, daß ich nicht im Expertenmodus war.
      So geht's wenn man nicht wirklich im Thema ist bzw. die Bedienung nicht intus hat.

      Scheint jetzt zu funktionieren ohne Fehlermeldung... Danke

      posted in JavaScript
      H
      Hasejs
    • JS Script Shelly3EM Pro MQTT Fehlermeldung

      Re: Script um shellyplus und das addon dazu auszulesen (mqtt)

      Hallo Forum

      Hatte damals (siehe oben) ein Script von @ticaki integriert.

      Nun bekomme ich folgenden Fehler:
      Fehler mqtt1.PNG

      Hier meine Objektübersicht:

      Objekt mqtt1.PNG

      Da ich kein Java kann , bitte ich um Hilfe.

      const prefix = '0_userdata.0.MQTT' // darunter wird gespeichert
      const suchPrefix = `mqtt.0.shellypro3em-c8f09e88da8c` // hier kommen die Daten her und begrenzen das ganze auf einen subtopic... Einfach das was im Topic bei allen Shellies gleich ist, muß hier stehen und davor die mqtt instanz
      const topicPrefix = 'shellypro3em-c8f09e88da8c' // hier muss der Teil von suchPrefix stehen der im Topic der shellys enthalten ist. Ohne die mqtt instanz
      
      const DEBUG = false
      
      async function setValues(json, srcID) {
          let result = null
          let id = prefix
          if (json.hasOwnProperty('id')) {
              id += '.' + srcID
              result = json['result']
              if (json['id'] == 1) {
                  if(!result.hasOwnProperty('id')) return
                  id+='.switch:'+result["id"]
              } else if (json['id'] == 3) {
                  result["device-id"] = json['src']
                  result["source-dp"] = suchPrefix+'.' + srcID
              } else {
                  //log(json)
                  return
              }
          } else if (json.hasOwnProperty('params')){
              id += '.' + srcID
              result = json['params']
          }
          
          setKeys(id, result)
      
          async function setKeys(id, result) {
              if (result === null) return
              if (typeof(result) === 'object') {
                  if (result.isArray) {
                      for (let a = 0; a<result.length; a++) {
                          setKeys(id+'.'+a, result[a])
                      }
                  } else {
                      for (let key in result) {
                          setKeys(id+'.'+key, result[key])
                      }
                  }
              } else {
                  let temp = id.split('.')
                  let popName = temp[temp.length-1];
                  if (!stateDefintion.hasOwnProperty(popName) ) popName = ''
                  if (popName && stateDefintion[popName]["read"]!== undefined) {
                          result = stateDefintion[popName]["read"](result)
                  } 
                  if (existsState(id)) {
                      setState(id, result, true)
                  } else {
                      let common = {name:'no name', type:typeof(result), write:false}
                      if (popName) {
                          let def = stateDefintion[popName]
                          for (let d in def.common) {
                              common[d] = def.common[d] 
                          }
                      }
                      try {
                          await createStateAsync(id, result,common)
                      } catch(e) {log(e)}
                  }
              }
          }
      }
      
      const stateDefintion = {
          "output": {
              "common": {
                  "name": "Schalter1",
                  "write": true,
                  "role": "switch",
              },
              "trigger": true,
              "write": '"method":"Switch.Set",  "params":{"id":0,"on":$VALUE$}}',
      
          },
          "tC": {
              "common": {
                  "name": "Temperatur",
                  "role": "value.temperature",
                  "unit": "C°",
              },
              "trigger": false,
          },
          "ts": {
              "common": {
                  "name": "seit letztem Reset",
                  "role": "value.datetime",
                  "type": "string",
              },
              "trigger": false,
              "read": function(r){return Math.round(r/1000)+' s'},
          },
      }
      for (let d in stateDefintion) {
          if (stateDefintion[d].hasOwnProperty('trigger') && stateDefintion[d]["trigger"]) {
              let r = prefix
              let reg = '^'+regexEscape(r)+'.*\.'+d+'$'
              const regex = new RegExp(reg, 'g');
              on({id:regex, ack:false}, function (obj) {
                  let id = ''
                  let aid = obj.id.split('.')
                  let a = aid.length-1
                  while(a-- >= 0) {
                      aid.splice(a,Infinity)
                      let t = aid.join('.')+'.source-dp'
                      log(t)
                      if (existsState(t)) {
                          id = getState(t).val
                          break;
                      }
                  }
                  if (id) {
                      id = id.replace(suchPrefix,'')
                      id = topicPrefix + id
                      id = id.split('.').join('/')
                      let v = obj.state.val
                      let s = obj.id.split('.').pop()
                      let msg = {topic: id+'/rpc', message: '{"id":4, "src":"'+id+'/events/response", '+stateDefintion[s]['write'].replace('$VALUE$',v)}
                      sendTo('mqtt.0', 'sendMessage2Client', msg);
                      if (DEBUG) log(msg)
                  }
              });
          }
      }
      { 
          let r = suchPrefix
          let reg = '^'+regexEscape(r)+'.*events.*rpc$'
          const regex = new RegExp(reg, 'g');
          on({id:regex, change:'ne'}, function (obj) {
              if (!obj.state.val) return
              //if (obj.id.lastIndexOf('events.rpc') !== -1) return
              let j = JSON.parse(obj.state.val)
              let id = obj.id.replace(suchPrefix,'')
              let aId = id.split('.')
              for (let a = 0; a < aId.length; a++) {
                  if (!aId[a]) aId.splice(a,1)
                  if (aId[a] == 'events') aId.splice(a,Infinity)
              }
              id = aId.join('.')
              if (DEBUG) log('id: ' + id + ' - ' +JSON.stringify(j))
              setValues(j, id)
          });
      }
      schedule('4 */20 * * * *',getStatus) 
      
      function getStatus() {
          let s = $('state(id='+suchPrefix+'.*.events.rpc)')
          s.each(id =>  {
              let path  = id.split('.').slice(0,-2).join('.')
              let topic = topicPrefix ? topicPrefix+'.' : '' 
              topic += path.replace(suchPrefix+'.','')
              topic = topic.replaceAll('.','/') 
              let to = topic + '/events/response'
              topic +='/rpc'
              sendTo('mqtt.0', 'sendMessage2Client', {topic: topic, message: '{"id":3, "src":"'+to+'", "method":"Shelly.GetStatus", "params":{"id":0}}'});  
          })
      }
      //on(/^system\.adapter\..*\.\d+\.memRss$/
      function regexEscape(str) {
          return str.replace(/[-\/\\^$*+?.()|[]{}]/g, '\\$&')
      }
      getStatus()
      

      Danke im Vorraus

      posted in JavaScript
      H
      Hasejs
    • RE: Script um shellyplus und das addon dazu auszulesen (mqtt)

      @ticaki
      Alles Gut... mir reichts auch.

      Bin Dir ehedem sehr Dankbar für deine Super Unterstützung.

      posted in JavaScript
      H
      Hasejs
    • RE: Script um shellyplus und das addon dazu auszulesen (mqtt)

      @ticaki

      Ja, die 3 Werte habe ich.
      Momentan addiere ich sie in einem Blockly Skript.

      posted in JavaScript
      H
      Hasejs
    • RE: Script um shellyplus und das addon dazu auszulesen (mqtt)

      @ticaki

      Danke hat funktioniert.
      Die ObjektID`s sind angelegt und werden aktualisiert.

      Wie kann ich die Gesamtleistung abfragen?

      2c7994ff-0c93-4bab-968c-65869826d476-grafik.png

      posted in JavaScript
      H
      Hasejs
    • RE: Script um shellyplus und das addon dazu auszulesen (mqtt)

      @hasejs
      32e85811-bd78-46b8-9ffc-6a328464d2b7-grafik.png

      9bdfb41d-1d46-4edb-b702-77fbea11f116-grafik.png

      Jetzt geht es.... Forumseite aktualisiert.

      posted in JavaScript
      H
      Hasejs
    • RE: Script um shellyplus und das addon dazu auszulesen (mqtt)

      @hasejs

      Kann ich hier auch einen Snip einfügen ? Bei mir kommt immer ein Error

      posted in JavaScript
      H
      Hasejs
    • RE: Script um shellyplus und das addon dazu auszulesen (mqtt)

      @hasejs

      Ok !! Hab jetzt Zeile 1-3 nach meinen Bedürfnissen angepasst.

      Bekomme jetzt 2 Fehler (rote Wellenlinien)

      Zeile 122 " if (DEBUG) log(msg)" (unter "msg" rote Wellenlinie)
      Zeile 154 " topic = topic.replaceAll('.','/') " (ReplaceAll rote Wellenlinie)

      Skript wurde nur gespeichert, noch nicht gestartet.

      posted in JavaScript
      H
      Hasejs
    • RE: Script um shellyplus und das addon dazu auszulesen (mqtt)

      @ticaki
      Sorry, klar .... Ich Idiot

      posted in JavaScript
      H
      Hasejs
    • RE: Script um shellyplus und das addon dazu auszulesen (mqtt)

      @ticaki
      Hallo danke für deine Info`s aber ich bekomme dein Skript nicht in den Editor vom Iobroker.
      Rechte Maustaste oder Ctrl + P geht im Editor nicht. Muß ich etwas umstellen?

      Gruß Joachim

      posted in JavaScript
      H
      Hasejs
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo