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. Starthilfe ? Create state aus JSON, update state (name) + read value = action

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    22
    1
    1.1k

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.4k

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

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
5 Beiträge 3 Kommentatoren 3.0k 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 Online
    DutchmanD Online
    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 Online
      DutchmanD Online
      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: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

        1 Antwort Letzte Antwort
        0
        • HomoranH Nicht stören
          HomoranH Nicht stören
          Homoran
          Global Moderator Administrators
          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 - es gibt fast nichts, was nicht auch für andere interessant ist.

          Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

          der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

          1 Antwort Letzte Antwort
          0
          • DutchmanD Online
            DutchmanD Online
            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
            Antworten
            • In einem neuen Thema antworten
            Anmelden zum Antworten
            • Älteste zuerst
            • Neuste zuerst
            • Meiste Stimmen


            Support us

            ioBroker
            Community Adapters
            Donate

            504

            Online

            32.5k

            Benutzer

            81.7k

            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