Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Datenpunkt erzeugen

    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

    Datenpunkt erzeugen

    This topic has been deleted. Only users with topic management privileges can see it.
    • A
      Ahnungsbefreit @Guest last edited by

      @kilian-z Das sind keine Funktionen, sondern Eigenschaften des Datenpunkts wie z.B. der Typ (number/boolean/string/...) oder für number die Einheit (%/°C/...). Damit kannst Du beim Anlegen das Verhalten des DPs definieren

      1 Reply Last reply Reply Quote 0
      • A
        Ahnungsbefreit @Guest last edited by

        @kilian-z said in Datenpunkt erzeugen:

        Gibt es im Blockly eine Möglichkeit vor dem erstellen abzufragen ob der Datenpunkt schon vorhanden ist?

        Das ist nicht nötig. Wenn der DP schon existiert, passiert einfach nix. Wenn Du aber die Info trotzdem brauchst, ob der DP existiert, könnte man das über eine Javascript Funktion realisieren.

        ? 1 Reply Last reply Reply Quote 0
        • ?
          A Former User @Ahnungsbefreit last edited by

          @ahnungsbefreit
          Vielen Dank. Hat alles funktioniert. 👍

          A 1 Reply Last reply Reply Quote 0
          • A
            Ahnungsbefreit @Guest last edited by

            @kilian-z Der Vollständigkeit halber: Mit diesem Einzeiler kann man die Überprüfung machen, ob ein DP existiert:

            dc28478f-d2d7-4763-8fa5-18453c0c6e1d-image.png

            return existsObject(id);
            
            B 1 Reply Last reply Reply Quote 0
            • B
              Bavarian @Ahnungsbefreit last edited by

              Kann man die Objekt ID auch mit einer Variablen angeben?
              So wie ich das im Blockly sehe ist die per Hand fest zu vergeben.

              Ich möchte zB. einen DP anlegen für den jeweils aktuellen Monat.
              Dazu sollte der DP dann idealerweise auch den Monatsnamen bekommen.
              Beispiel:
              0_userdata.0."aktuelles Jahr"."Monat"

              paul53 1 Reply Last reply Reply Quote 0
              • paul53
                paul53 @Bavarian last edited by paul53

                @bavarian sagte: Kann man die Objekt ID auch mit einer Variablen angeben?

                Wobei?

                B 1 Reply Last reply Reply Quote 0
                • B
                  Bavarian @paul53 last edited by

                  @paul53
                  Bei dem oben gezeigten Blockly Datenpunktbaustein.
                  1628057033255-241964fa-4fe1-4776-9780-7f4846b30103-image.png

                  paul53 1 Reply Last reply Reply Quote 0
                  • paul53
                    paul53 @Bavarian last edited by

                    @bavarian sagte: Bei dem oben gezeigten Blockly Datenpunktbaustein.

                    Nein, man benötigt eine Javascript-Funktion.

                    Atifan 1 Reply Last reply Reply Quote 0
                    • Atifan
                      Atifan @paul53 last edited by

                      Hallo, hänge mich hier mal dran. Möchte auch einen Datenpunkt unter "mqtt" erzeugen. Das Blockly funktioniert zwar, aber der Datenpunkt wird unter "javascript.0...." erzeugt und nicht unter "mqtt.0....."
                      Geht das nicht?

                      2b21b908-3c41-4209-8afe-4e0fee8c4668-image.png

                      A paul53 2 Replies Last reply Reply Quote 0
                      • A
                        Ahnungsbefreit @Atifan last edited by

                        @atifan Eigene Datenpunkte können und sollen nur unter JavaScript und unter userdata angelegt werden.

                        Atifan 1 Reply Last reply Reply Quote 0
                        • Atifan
                          Atifan @Ahnungsbefreit last edited by

                          @ahnungsbefreit Hi ja ich weiß, mache ich normal auch so. Aber in dem Fall MUSS der DB unter mqtt damit das NSPanel funktioniert.
                          Da ich den mqtt-Objektbaum aber öfter mal manuell lösche, möchte ich dass ein Script mir dann automatisch den DB wieder erstellt, damit das NSPanel wieder funktioniert.

                          1 Reply Last reply Reply Quote 0
                          • paul53
                            paul53 @Atifan last edited by

                            @atifan sagte: Datenpunkt wird unter "javascript.0...." erzeugt und nicht unter "mqtt.0....."

                            Das geht unter "mqtt.0" nur mit setObject().

                            Atifan 1 Reply Last reply Reply Quote 0
                            • Atifan
                              Atifan @paul53 last edited by

                              @paul53 Hi Danke! Gibts dafür auch ein Blockly-Funktion? Oder geht das dann nur über JavaScript?

                              paul53 1 Reply Last reply Reply Quote 0
                              • paul53
                                paul53 @Atifan last edited by paul53

                                @atifan sagte: Gibts dafür auch ein Blockly-Funktion?

                                Nein, absichtlich nicht, denn damit kann man einiges kaputt machen.
                                Man muss ein komplexes Objekt übergeben, wofür Blockly auch keine Funktion bereit stellt.

                                EDIT: Man kann sich mit einer Javascript-Funktion behelfen:

                                Bild_2022-09-14_212130853.png

                                Inhalt der Funktion createNSPaneCmd(Typ, Name, Rolle, Default):

                                const obj = {
                                    type: 'state',
                                    native: {},
                                    common: {
                                        type: Typ,
                                        name: Name,
                                        role: Rolle
                                    }
                                };
                                if(Default != undefined) obj.common.def = Default;
                                const path = 'mqtt.0.NsPanel.cmd.';
                                if(!existsObject(path + Name)) setObject(path + Name, obj);
                                
                                Atifan 1 Reply Last reply Reply Quote 0
                                • Atifan
                                  Atifan @paul53 last edited by

                                  @paul53 Danke habe es hinbekommen, musste zwar bisschen rumprobieren aber irgendwann ging es 🙂
                                  Außerdem muss man im Javascript Adapter das Häkchen setzen, dass die Funktion setObject ausgeführt werden darf.

                                  e096172e-7da4-4f72-9e38-4fc3156b6217-image.png

                                  bab57a25-b77b-4e7d-b9de-8d4b31bf7d63-image.png

                                  const obj = {
                                      type: 'state',
                                      native: {},
                                      common: {
                                          type: 'string',
                                          name: 'CustomSend',
                                          role: 'state',
                                      }
                                  };
                                  if(!existsObject('mqtt.0.NsPanel.cmnd.CustomSend')) setObject('mqtt.0.NsPanel.cmnd.CustomSend', obj);
                                  
                                  paul53 1 Reply Last reply Reply Quote 0
                                  • paul53
                                    paul53 @Atifan last edited by

                                    @atifan
                                    Es gibt nur einen Datenpunkt, der per Blockly erzeugt werden muss?

                                    Atifan 1 Reply Last reply Reply Quote 0
                                    • Atifan
                                      Atifan @paul53 last edited by

                                      @paul53 Ja, ich brauche nur den einen Datenpunkt mit dem Namen "CustomSend".
                                      Normalerweise muss man diesen Datenpunkt unter MQTT manuell anlegen, damit das NSPanel funktioniert.

                                      Das Problem ist aber, dass ich öfter mal den ganzen Objektbaum unter MQTT lösche, weil dort Geräte mit Hyroglyphen im Namen auftauchen, vermutlich wegen Verbindungsproblemen oder so. Dann wäre der Datenpunkt "CustomSend" auch jedes Mal weg und ich müsste immer daran denken diesen wieder manuell anzulegen, weil ohne den funktioniert das NSPanel nicht.
                                      Deswegen wollte ich das ganze über ein Script lösen.

                                      So wie ich es jetzt gemacht hab funktioniert es jedenfalls wie es soll, habs getestet 🙂

                                      1 Reply Last reply Reply Quote 0
                                      • David G.
                                        David G. @paul53 last edited by David G.

                                        @paul53 sagte in Datenpunkt erzeugen:

                                        @PatrickFro sagte:

                                        Es geht um Anlage des States als Number

                                        Common muss im JSON-Format übergeben werden. Beispiel für Typ "number":

                                        Blockly_temp.JPG

                                        Hallo,

                                        versuche grad auch einen DP anzulegen.
                                        So ganz klappt noch nicht wie ich möchte.

                                        Generiere mir folgenden String für common:

                                        {"type":"number","states":"0:Sa 06.05.;86400000:So 07.05.;172800000:Mo 08.05."}
                                        

                                        Der DP der generiert wird sieht wie folgt aus:

                                        {
                                          "common": {
                                            "type": "number",
                                            "states": "0:Sa 06.05.;86400000:So 07.05.;172800000:Mo 08.05.",
                                            "name": "0_userdata.0.aber",
                                            "role": "state"
                                          },
                                          "native": {
                                            "type": "number",
                                            "states": "0:Sa 06.05.;86400000:So 07.05.;172800000:Mo 08.05.",
                                            "name": "0_userdata.0.aber",
                                            "role": "state"
                                          },
                                          "type": "state",
                                          "from": "system.adapter.javascript.0",
                                          "user": "system.user.admin",
                                          "ts": 1683359916588,
                                          "_id": "0_userdata.0.aber",
                                          "acl": {
                                            "object": 1636,
                                            "state": 1636,
                                            "owner": "system.user.admin",
                                            "ownerGroup": "system.group.administrator"
                                          }
                                        }
                                        

                                        Wenn ich mir den DP unter Objekten anschaue stürzt das Browserfenster ab.

                                        Kleine Zusatzfrage.
                                        Der Block scheint den DP nicht zu überschreiben, wenn ich den DP mit anderen Werten nochmal anlege. Kann man das umgehen?

                                        1 Reply Last reply Reply Quote 0
                                        • First post
                                          Last post

                                        Support us

                                        ioBroker
                                        Community Adapters
                                        Donate

                                        818
                                        Online

                                        31.7k
                                        Users

                                        79.9k
                                        Topics

                                        1.3m
                                        Posts

                                        blockly
                                        10
                                        43
                                        13120
                                        Loading More Posts
                                        • Oldest to Newest
                                        • Newest to Oldest
                                        • Most Votes
                                        Reply
                                        • Reply as topic
                                        Log in to reply
                                        Community
                                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                        The ioBroker Community 2014-2023
                                        logo