Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • 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. Starthilfe ? Create state aus JSON, update state (name) + read value = action

NEWS

  • Der neue Monatsrückblick für Mai und Juni 2026 ist online!
    BluefoxB
    Bluefox
    8
    1
    1.1k

  • wichtiges UPDATE für controller 7.2.2 im stable
    HomoranH
    Homoran
    10
    1
    3.6k

  • Neues YouTube-Video: Visualisierung im Devices-Adapter
    BluefoxB
    Bluefox
    16
    1
    6.2k

Starthilfe ? Create state aus JSON, update state (name) + read value = action

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
5 Beiträge 3 Kommentatoren 3.1k Aufrufe
  • Ä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.
  • DutchmanD Offline
    DutchmanD Offline
    Dutchman
    Developer Most Active Administrators
    schrieb am zuletzt editiert von
    #1

    Hi there,

    Ich brauechte da ein bischschen hilfe um werte aus zu lesen und dem entprechend eine actions aus zu loesen.

    Use Case:

    Per MQTT werden mir ID's, gerate name und stats uebermitteld. Mit diesem input erstellen ich mir variablen middels create state:

    ! ````
    //Read value at update on MQTT trigger
    on({id: 'mqtt.0.domoticz.out', change: "any"}, function (obj) {
    var value = obj.state.val;
    ! //Get Value & translate to data point
    var state;
    var device;
    var channel;

    //JSON values to memory
    try {
    obj = JSON.parse(getState('mqtt.0.domoticz.out').val);
    } catch (e) {
    console.error('Cannot parse: ' + getState('mqtt.0.domoticz.out').val);
    return;
    }
    channel = obj.idx;
    state = obj.nvalue;
    device = obj.name;

    ! //Log values
    log(channel);
    log(device);
    log(state);

    //Create states
    createState('domoticz.' +  channel, {
        name: 'Domoticz ' + device,
        type: 'number',
        role: 'switch',
    });
    

    ! ````

    979_read_stats.jpg

    Darunter schreibe ich dan de state weg (kommt aus de JSON tabellen)

    ! //Update state with value from MQTT setState('domoticz.' + channel, state, true); !

    Das klappt auch so weit ganz gut, jedoch 2 problemen:

    1. Wen der state noch nicht da war wird kein wert weggeschrieben, beim 2ten read klappt das dan. Wie kan man den fehler umgehen ?

    2. Die unique ID bleibt immer gleich aber "name" kan sich aendern. Ich habe keine routine gefunden wie ich den "name" des states aendern kann auser state loeschen und neu erstellen. Wie kan man einen namen updaten ?

    Jetzt kommt die naeste frage. Ich moechte alle werte ueberwachten und wen ein status dieser variablen sich aendert ein HTML commando uerbermitteln.

    Dazu brauche ich die ID + wert damit ich das HTML commando bauwen kan.

    Also, ich habe diese werte

    | ID | Name | Value |

    | 3 | Name 1 | 0 |

    | 5 | Name 2 | 0 |

    usw

    Jetzt wird ID 3 von 0 auf 1 geschalted, diesen event muss ich erkennen und dan brauche ich die ID + Value zum aufbauen des schalt commandos.

    Das gleiche wen eine andere ID sich aendert. Ich brauche immer nur den wert der geaender wurden und nicht alle variable in dieser gruppe.

    Zudem sollte es nur getriggerd werden wen der wert aus iobroker geupdated wird (variable kan durch MQTT oder iObroker aendern, trigger nur wen source iObroker)

    Kan mir jemand auf die sprunge helfen ?

    1 Antwort Letzte Antwort
    0
    • DutchmanD Offline
      DutchmanD Offline
      Dutchman
      Developer Most Active Administrators
      schrieb am zuletzt editiert von
      #2

      ok problem 1 habe ich geloest, wen trigger kommt dan will ich die ID vom geraet wissen welches ihn verursacht hat.

      var value = obj.id;
      

      Damit schreibe ich die ID in eine variable um sie spaeter in einer funtion nutzen zu koennen, 2 offenen sachen noch:

      1. Wie kan ich nach einen create state den namen wieder aendern

      2. Wie kan ich auf alle werte unnerhalb einer structur triggern lassen

      Waere toll wen jemand ne antwort hat, inzwischen suche/probieren ich mal weiter

      1 Antwort Letzte Antwort
      0
      • paul53P Offline
        paul53P Offline
        paul53
        schrieb am zuletzt editiert von
        #3

        @Dutchman:

        1. Wie kan ich nach einen create state den namen wieder aendern `
        var obj = getObject(id);
        obj.common.name = "neuer_name";
        setObject(obj);
        

        @Dutchman:

        1. Wie kan ich auf alle werte unnerhalb einer structur triggern lassen `
          Mit https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/RegExp in on().

        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
        Produktiv: Asus PN 42 / N100 / 8 GB / 500 GB; Proxmox mit 2 VM (iob / openCCU)

        1 Antwort Letzte Antwort
        0
        • HomoranH Nicht stören
          HomoranH Nicht stören
          Homoran
          schrieb am zuletzt editiert von
          #4

          @Dutchman:

          Waere toll wen jemand ne antwort hat, `
          Ich meine das war vor gar nicht so langer Zeit eine vergleichbare frage.

          Trigger mit mehreren on () oder so ähnlich.

          Ich meine damals hätte @Bluefox und noch jemand geantwortet.

          @pix, @ruhr70 oder @paul53

          Ihr Skriptprofis seid gefragt!

          Edit: paul53 ist schon da!

          Gruß

          Rainer

          kein Support per PN! - Fragen im Forum stellen - Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
          Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton oben rechts. Danke!
          der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

          1 Antwort Letzte Antwort
          0
          • DutchmanD Offline
            DutchmanD Offline
            Dutchman
            Developer Most Active Administrators
            schrieb am zuletzt editiert von
            #5

            @paul53:

            @Dutchman:

            1. Wie kan ich nach einen create state den namen wieder aendern `
            var obj = getObject(id);
            obj.common.name = "neuer_name";
            setObject(obj);
            

            @Dutchman:

            1. Wie kan ich auf alle werte unnerhalb einer structur triggern lassen Mit [https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/RegExp](https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/RegExp) in on().

            danke dir Paul das hilft weiter auf jeden fall habe ich das mit dem namen hinbekommen.

            Regexp verstehe ich wie im beispiel ;

            on(/^ping\.0\.Iobroker-Server\.(192.xxx.xxx.xx1|192.xxx.xxx.xx2)
            

            Nur hierin sind ja auch werte definiert, bei mir sollte er triggern auf alles in dem baum (in die variabelen werden dynamisch erzeugt, kan diese also nicht vorab festlegen.)

            oder verstehe ich das jetzt falsch ?

            Kanst du mir eventueel auf die sprunge helfen diesen ON richtig um zu stellen ? (der RegExp ist bestimmt falsch da war ein versuch)

            on({id: "javascript.0.domoticz.7", change: "any", RegExp}, function (obj) {
                var value = obj.id;
                log (value);
            

            anstatt der ID 7 sollte er halt auf alle ID in dieser structur triggeren.

            Mit denm obj.id sehe ich ja welche ID getriggerd hat um dan das URL commando zu bauen

            Edit: Geschafft ! Die loesung war:

            on({id: RegExp("javascript.0.domoticz."), change: "any"}, function (obj) {
                var value = obj.id;
                log (value);
            });
            
            1 Antwort Letzte Antwort
            0

            Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

            Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

            Mit deinem Input könnte dieser Beitrag noch besser werden 💗

            Registrieren Anmelden
            Antworten
            • In einem neuen Thema antworten
            Anmelden zum Antworten
            • Älteste zuerst
            • Neuste zuerst
            • Meiste Stimmen


            Support us

            ioBroker
            Community Adapters
            Donate

            405

            Online

            33.0k

            Benutzer

            83.6k

            Themen

            1.3m

            Beiträge
            Community
            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
            ioBroker Community 2014-2026
            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