Skip to content
  • 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
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Fehler bei per script angelegten Datenpunkten (gelöst)

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.1k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.9k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.1k

Fehler bei per script angelegten Datenpunkten (gelöst)

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
3 Beiträge 2 Kommentatoren 240 Aufrufe 1 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.
  • M Offline
    M Offline
    Mottimuc
    schrieb am zuletzt editiert von Mottimuc
    #1

    Hi zusammen,

    ich möchte regelmäßig eine Reihe (28) Datenpunkte in einer Struktur anlegen.
    Klappt insoweit, dass die DP im ObjectBrowser dargestellt werden, aber ich kann weder per Script noch manuell hier Werte setzen.

    Prozess:
    Ich fange von hinten an:
    In einer Funktion ist ein JScript hinterlegt. Ich hab das hier gefunden, es umgeht schonmal einige "Risiken":

    Script Anlage Datenpunkte

    async function _createObject(id, typ, name='', desc='') {
       try {
           if(existsObject(id)) log('Objekt: ' + id + ' existiert bereits!', 'warn');
           else {
               const obj = {
                   type: typ,
                   common: {
                       name: name,
                       desc: desc
                   },
                   native: {}
               }
               if (!id || typeof id !== 'string') {
                   throw new Error('Fehler in _createObject Parameter 1 ist kein string')
               }
               if (!(id.startsWith('alias.0') || id.startsWith('0_userdata.0') || id.startsWith('mqtt'))) {
                   throw new Error('Fehler in _createObject Parameter 1: ' + id.split('.').slice(0,2).join('.') + ' nicht erlaubt')
               } 
               await setObjectAsync(id, obj);
           }
           return Promise.resolve(true);
       } catch (error) {
           log(error + '!', 'error')
       }
       return Promise.resolve(false);
    

    In einem Blockly berechne ich verschiedene Dinge und habe in einer weiteren Funktion den Aufruf des o.g. Scrips abgelegt:

    let v_Pfad_p = "0_userdata.0.Calendar.Aufgaben.PENDING"
    var v_Pfad_s
    v_Pfad_s = v_ID
    v_Pfad = v_Pfad_p + "." + v_Pfad_s
    
    _createObject(v_Pfad, v_Type, name=v_Name, desc=v_Desc)
    

    ich lege mir im Blockly eine Liste der DP an und arbeite die mittels Schleife (auch in einer Funktion) ab.
    In der Funktion bereite ich die zu übergebenden Parameter auf:


    23-10-2024_14-15-57.jpg

    So schauen die DP aus:


    23-10-2024_14-18-52.jpg

    und so im Detail:

     {
      "type": "",
      "common": {
        "name": "AKTIV",
        "desc": "Daten-Punkt für Aufgabe #22"
      },
      "native": {},
      "from": "system.adapter.javascript.0",
      "user": "system.user.admin",
      "ts": 1729638974887,
      "_id": "0_userdata.0.Calendar.Aufgaben.PENDING.LORENZ.A22_LORENZ_23_10_24.AKTIV",
      "acl": {
        "object": 1636,
        "owner": "system.user.admin",
        "ownerGroup": "system.group.administrator"
      }
    

    Was mir auffällt:
    Wenn ich den Punkt manuell anlege, sieht er so aus:

    {
     "common": {
       "name": "AKTIV",
       "desc": "Manuell erzeugt",
       "role": "state",
       "type": "boolean",
       "read": true,
       "write": true,
       "def": false
     },
     "type": "state",
     "native": {},
     "from": "system.adapter.admin.0",
     "user": "system.user.admin",
     "ts": 1729535227931,
     "_id": "0_userdata.0.Calendar.Aufgaben.STEUERUNG.VIS.INPUTMASK.AKTIV",
     "acl": {
       "object": 1636,
       "state": 1636,
       "owner": "system.user.admin",
       "ownerGroup": "system.group.administrator"
     }
    

    Was fehlt ? Wo liegt denn das Problem? Mehr Parameter für die Funktion, welche in der Vorlage nicht waren?

    Viele Grüße
    und Danke vorab!

    Michael

    Viele Grüße
    Michael

    paul53P 1 Antwort Letzte Antwort
    0
    • M Mottimuc

      Hi zusammen,

      ich möchte regelmäßig eine Reihe (28) Datenpunkte in einer Struktur anlegen.
      Klappt insoweit, dass die DP im ObjectBrowser dargestellt werden, aber ich kann weder per Script noch manuell hier Werte setzen.

      Prozess:
      Ich fange von hinten an:
      In einer Funktion ist ein JScript hinterlegt. Ich hab das hier gefunden, es umgeht schonmal einige "Risiken":

      Script Anlage Datenpunkte

      async function _createObject(id, typ, name='', desc='') {
         try {
             if(existsObject(id)) log('Objekt: ' + id + ' existiert bereits!', 'warn');
             else {
                 const obj = {
                     type: typ,
                     common: {
                         name: name,
                         desc: desc
                     },
                     native: {}
                 }
                 if (!id || typeof id !== 'string') {
                     throw new Error('Fehler in _createObject Parameter 1 ist kein string')
                 }
                 if (!(id.startsWith('alias.0') || id.startsWith('0_userdata.0') || id.startsWith('mqtt'))) {
                     throw new Error('Fehler in _createObject Parameter 1: ' + id.split('.').slice(0,2).join('.') + ' nicht erlaubt')
                 } 
                 await setObjectAsync(id, obj);
             }
             return Promise.resolve(true);
         } catch (error) {
             log(error + '!', 'error')
         }
         return Promise.resolve(false);
      

      In einem Blockly berechne ich verschiedene Dinge und habe in einer weiteren Funktion den Aufruf des o.g. Scrips abgelegt:

      let v_Pfad_p = "0_userdata.0.Calendar.Aufgaben.PENDING"
      var v_Pfad_s
      v_Pfad_s = v_ID
      v_Pfad = v_Pfad_p + "." + v_Pfad_s
      
      _createObject(v_Pfad, v_Type, name=v_Name, desc=v_Desc)
      

      ich lege mir im Blockly eine Liste der DP an und arbeite die mittels Schleife (auch in einer Funktion) ab.
      In der Funktion bereite ich die zu übergebenden Parameter auf:


      23-10-2024_14-15-57.jpg

      So schauen die DP aus:


      23-10-2024_14-18-52.jpg

      und so im Detail:

       {
        "type": "",
        "common": {
          "name": "AKTIV",
          "desc": "Daten-Punkt für Aufgabe #22"
        },
        "native": {},
        "from": "system.adapter.javascript.0",
        "user": "system.user.admin",
        "ts": 1729638974887,
        "_id": "0_userdata.0.Calendar.Aufgaben.PENDING.LORENZ.A22_LORENZ_23_10_24.AKTIV",
        "acl": {
          "object": 1636,
          "owner": "system.user.admin",
          "ownerGroup": "system.group.administrator"
        }
      

      Was mir auffällt:
      Wenn ich den Punkt manuell anlege, sieht er so aus:

      {
       "common": {
         "name": "AKTIV",
         "desc": "Manuell erzeugt",
         "role": "state",
         "type": "boolean",
         "read": true,
         "write": true,
         "def": false
       },
       "type": "state",
       "native": {},
       "from": "system.adapter.admin.0",
       "user": "system.user.admin",
       "ts": 1729535227931,
       "_id": "0_userdata.0.Calendar.Aufgaben.STEUERUNG.VIS.INPUTMASK.AKTIV",
       "acl": {
         "object": 1636,
         "state": 1636,
         "owner": "system.user.admin",
         "ownerGroup": "system.group.administrator"
       }
      

      Was fehlt ? Wo liegt denn das Problem? Mehr Parameter für die Funktion, welche in der Vorlage nicht waren?

      Viele Grüße
      und Danke vorab!

      Michael

      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von paul53
      #2

      @mottimuc sagte: Wo liegt denn das Problem?

      Du musst "type" und "common.type" unterscheiden. Ein Datenpunkt ist immer vom Typ "state" und "common.type" enthält den Datenpunkt-Typ ("string", "number", "boolean", ...).
      Weshalb verwendest du nicht createState() zur Erstellung der Datenpunkte?

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      M 1 Antwort Letzte Antwort
      0
      • paul53P paul53

        @mottimuc sagte: Wo liegt denn das Problem?

        Du musst "type" und "common.type" unterscheiden. Ein Datenpunkt ist immer vom Typ "state" und "common.type" enthält den Datenpunkt-Typ ("string", "number", "boolean", ...).
        Weshalb verwendest du nicht createState() zur Erstellung der Datenpunkte?

        M Offline
        M Offline
        Mottimuc
        schrieb am zuletzt editiert von
        #3

        @paul53

        D A N K E!!! Das war es!!

        Viele Grüße
        Michael

        1 Antwort Letzte Antwort
        0
        Antworten
        • In einem neuen Thema antworten
        Anmelden zum Antworten
        • Älteste zuerst
        • Neuste zuerst
        • Meiste Stimmen


        Support us

        ioBroker
        Community Adapters
        Donate

        301

        Online

        32.4k

        Benutzer

        81.4k

        Themen

        1.3m

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

        • Du hast noch kein Konto? Registrieren

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