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. Blockly
  5. Rechnen mit Datenpunkte und/oder Variablen

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.3k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    793

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.0k

Rechnen mit Datenpunkte und/oder Variablen

Geplant Angeheftet Gesperrt Verschoben Blockly
7 Beiträge 3 Kommentatoren 614 Aufrufe 3 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.
  • J Offline
    J Offline
    judisi
    schrieb am zuletzt editiert von judisi
    #1

    gemischte Rechnungen
    Macht es einen Unterschied, ob ich direkt mit den Datenpunkten rechne oder deren Wert vorher in Variablen schreibe und dann mit diesen rechne?
    Kann es passieren, dass bei "gemischten Rechnungen", also wo beides verwendet wird, noch mit dem alten Datenpunktwert gerechnet wird, weil der neue Wert noch nicht gespeichert wurde (da asynchron gespeichert wird)?

    Variablenwert merken
    Was passiert mit Variablen bei einem Script, das z. B. stündlich wiederholt wird. Merkt sich blockly den letzten Wert oder muss ich den Wert der Variablen jedesmal neu definieren?

    CodierknechtC 1 Antwort Letzte Antwort
    0
    • J judisi

      gemischte Rechnungen
      Macht es einen Unterschied, ob ich direkt mit den Datenpunkten rechne oder deren Wert vorher in Variablen schreibe und dann mit diesen rechne?
      Kann es passieren, dass bei "gemischten Rechnungen", also wo beides verwendet wird, noch mit dem alten Datenpunktwert gerechnet wird, weil der neue Wert noch nicht gespeichert wurde (da asynchron gespeichert wird)?

      Variablenwert merken
      Was passiert mit Variablen bei einem Script, das z. B. stündlich wiederholt wird. Merkt sich blockly den letzten Wert oder muss ich den Wert der Variablen jedesmal neu definieren?

      CodierknechtC Online
      CodierknechtC Online
      Codierknecht
      Developer Most Active
      schrieb am zuletzt editiert von
      #2

      @judisi sagte in Rechnen mit Datenpunkte und/oder Variablen:

      Variablenwert merken
      Was passiert mit Variablen bei einem Script, das z. B. stündlich wiederholt wird. Merkt sich blockly den letzten Wert oder muss ich den Wert der Variablen jedesmal neu definieren?

      Ein Script wird nicht in diesem Sinne "wiederholt".
      Es läuft ja permanent. Was sich wiederholt (oder besser formuliert: Mehrfach aufgerufen wird), ist der Code innerhalb einer Ereignisbehandlung (Trigger/Zeitplan).
      Variablen gelten für die gesamte Laufzeit eines Script. Solange das Script nicht neu gestartet wird, behalten sie ihren Wert.
      Darum setzt man Variablen beim Start eines Script üblicherweise auch auf einen definierten Wert, falls man mit ihnen zu arbeiten gedenkt.

      gemischte Rechnungen
      Macht es einen Unterschied, ob ich direkt mit den Datenpunkten rechne oder deren Wert vorher in Variablen schreibe und dann mit diesen rechne?
      Kann es passieren, dass bei "gemischten Rechnungen", also wo beides verwendet wird, noch mit dem alten Datenpunktwert gerechnet wird, weil der neue Wert noch nicht gespeichert wurde (da asynchron gespeichert wird)?

      Von der reinen Berechnung macht es keinen Unterschied.
      Man sollte Variablen dort einsetzen, wo man einen Wert ansonsten mehrfach aus einem DP lesen müsste.
      Und was man auf keinen Fall machen sollte: In einem DP-Trigger nimmt man aus dem Bereich "Trigger" den Block "Objekt ID" und ändert den auf "Wert", wenn man mit dem Wert des triggernden DP rechnen möchte.
      Man liest in diesem Fall nicht den Wert nochmals mit "Wert von" ein.

      "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

      Proxmox 9.1.1 LXC|8 GB|Core i7-6700
      HmIP|ZigBee|Tasmota|Unifi
      Zabbix Certified Specialist
      Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

      R 1 Antwort Letzte Antwort
      0
      • CodierknechtC Codierknecht

        @judisi sagte in Rechnen mit Datenpunkte und/oder Variablen:

        Variablenwert merken
        Was passiert mit Variablen bei einem Script, das z. B. stündlich wiederholt wird. Merkt sich blockly den letzten Wert oder muss ich den Wert der Variablen jedesmal neu definieren?

        Ein Script wird nicht in diesem Sinne "wiederholt".
        Es läuft ja permanent. Was sich wiederholt (oder besser formuliert: Mehrfach aufgerufen wird), ist der Code innerhalb einer Ereignisbehandlung (Trigger/Zeitplan).
        Variablen gelten für die gesamte Laufzeit eines Script. Solange das Script nicht neu gestartet wird, behalten sie ihren Wert.
        Darum setzt man Variablen beim Start eines Script üblicherweise auch auf einen definierten Wert, falls man mit ihnen zu arbeiten gedenkt.

        gemischte Rechnungen
        Macht es einen Unterschied, ob ich direkt mit den Datenpunkten rechne oder deren Wert vorher in Variablen schreibe und dann mit diesen rechne?
        Kann es passieren, dass bei "gemischten Rechnungen", also wo beides verwendet wird, noch mit dem alten Datenpunktwert gerechnet wird, weil der neue Wert noch nicht gespeichert wurde (da asynchron gespeichert wird)?

        Von der reinen Berechnung macht es keinen Unterschied.
        Man sollte Variablen dort einsetzen, wo man einen Wert ansonsten mehrfach aus einem DP lesen müsste.
        Und was man auf keinen Fall machen sollte: In einem DP-Trigger nimmt man aus dem Bereich "Trigger" den Block "Objekt ID" und ändert den auf "Wert", wenn man mit dem Wert des triggernden DP rechnen möchte.
        Man liest in diesem Fall nicht den Wert nochmals mit "Wert von" ein.

        R Offline
        R Offline
        Reini 0
        schrieb am zuletzt editiert von
        #3

        @codierknecht
        Hallo,
        ich bin neue hier, begrüße alle und habe eine Frage.
        Kann es sein, dass wenn man im Script einen Wert in einen Datenpunkt schreibt und in der nächsren Zeile den Wert dieses Dantenpunktes in einer Rechnung wieder ausliest, dass dieser noch gar nicht geänedert wurde, dass die Zeit dafür zu kurz war.
        Grüße Reinhard

        CodierknechtC 1 Antwort Letzte Antwort
        0
        • R Reini 0

          @codierknecht
          Hallo,
          ich bin neue hier, begrüße alle und habe eine Frage.
          Kann es sein, dass wenn man im Script einen Wert in einen Datenpunkt schreibt und in der nächsren Zeile den Wert dieses Dantenpunktes in einer Rechnung wieder ausliest, dass dieser noch gar nicht geänedert wurde, dass die Zeit dafür zu kurz war.
          Grüße Reinhard

          CodierknechtC Online
          CodierknechtC Online
          Codierknecht
          Developer Most Active
          schrieb am zuletzt editiert von
          #4

          @reini-0
          Ja - ist so. Die sogenannte "Asynchron-Falle".

          Aber warum willst Du den in der nächste Zeile lesen, wenn Du den Wert bereits kennst?

          Also: Zeigen!
          https://forum.iobroker.net/topic/51555/hinweise-für-gute-forenbeiträge

          "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

          Proxmox 9.1.1 LXC|8 GB|Core i7-6700
          HmIP|ZigBee|Tasmota|Unifi
          Zabbix Certified Specialist
          Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

          R 1 Antwort Letzte Antwort
          0
          • CodierknechtC Codierknecht

            @reini-0
            Ja - ist so. Die sogenannte "Asynchron-Falle".

            Aber warum willst Du den in der nächste Zeile lesen, wenn Du den Wert bereits kennst?

            Also: Zeigen!
            https://forum.iobroker.net/topic/51555/hinweise-für-gute-forenbeiträge

            R Offline
            R Offline
            Reini 0
            schrieb am zuletzt editiert von
            #5

            @codierknecht
            Sorry, wusste nicht, dass ich einen neuen Beitrag hätte eröffnen sollen. Werde ich in Zukunft machen.
            Danke für die Antwort. Hilft mir. Werde eine Pause einbauen. Vielleicht auch besser mit Variablen statt Dtenpunkten zu arbeiten.

            CodierknechtC 1 Antwort Letzte Antwort
            0
            • R Reini 0

              @codierknecht
              Sorry, wusste nicht, dass ich einen neuen Beitrag hätte eröffnen sollen. Werde ich in Zukunft machen.
              Danke für die Antwort. Hilft mir. Werde eine Pause einbauen. Vielleicht auch besser mit Variablen statt Dtenpunkten zu arbeiten.

              CodierknechtC Online
              CodierknechtC Online
              Codierknecht
              Developer Most Active
              schrieb am zuletzt editiert von Codierknecht
              #6

              @reini-0 sagte in Rechnen mit Datenpunkte und/oder Variablen:

              Werde eine Pause einbauen. Vielleicht auch besser mit Variablen statt Dtenpunkten zu arbeiten

              Pause ist eher suboptimal. Also besser mit Variablen arbeiten.
              Erstens weißt Du nicht, wann der Wert tatsächlich in den DP geschrieben wurde. Das können 10 ms oder auch 20 Sekunden sein.
              Und zweitens verbrätst Du damit unnötig Ressourcen.

              Und nochmal: ZEIGEN!

              "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

              Proxmox 9.1.1 LXC|8 GB|Core i7-6700
              HmIP|ZigBee|Tasmota|Unifi
              Zabbix Certified Specialist
              Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

              1 Antwort Letzte Antwort
              0
              • R Offline
                R Offline
                Reini 0
                schrieb am zuletzt editiert von
                #7

                @codierknecht

                Danke. Ich habe es verstanden. Werde mit Variablen arbeiten.
                Ich habe eine zusätzliche kleine PV Anlage die mein Meerwasseraquarium versorgt. Mit dem Script ermittle ich den Tagesverbrauch. Gleichzeitig ermittle ich wie viel die kleine Anlage Ertrag hat (Differenz PV-in zu PV-out). Der Gesamtzählerstand witd von Shellys ausgelesen und die Differenz aktuell zum Vortag berechnet. Die Beleuchtung ist extra und nicht an die kleine PV Anlage angeschlossen. (Steckdose_Aquarium) Der Gesamtverbrauch wird dann ermittel, Hier hatte ich das Problem, dass der Wert des Datenpunktes nicht aktualisiert war. Dewshalb habe ich die Pause eingebaut. Das ist nicht die Lösung. Ich mache es neu mit Variablen.

                schedule('{"time":{"exactTime":true,"start":"23:56"},"period":{"days":1}}', async () => {
                setState('0_userdata.0.PVin_Tag' /* PVin_Tag /, (getState('shelly.2.shellyplus1pm#08b61fd7afe0#1.Relay0.Energy').val - getState('0_userdata.0.PVin_gestern').val), true);
                setState('0_userdata.0.PVout_Tag' /
                PVout_Tag /, (getState('shelly.2.shellyplus1pm#a8032abbfe18#1.Relay0.Energy').val - getState('0_userdata.0.PVout_gestern').val), true);
                await wait(200);
                setState('0_userdata.0.PV_Tag' /
                PV_Tag /, (getState('0_userdata.0.PVin_Tag').val - getState('0_userdata.0.PVout_Tag').val), true);
                setStateDelayed('0_userdata.0.Steckdose_Aquarium_Tag' /
                Steckdose_Aquarium_Tag /, (getState('shelly.2.shellyplusplugs#d4d4daed6068#1.Relay0.Energy').val - getState('0_userdata.0.Steckdose_Aquarium_gestern').val), true, 200, false);
                await wait(200);
                setState('0_userdata.0.Aquarium_Tag' /
                Aquarium_Tag /, (getState('0_userdata.0.PVin_Tag').val + getState('0_userdata.0.Steckdose_Aquarium_Tag').val), true);
                setState('0_userdata.0.PVin_gestern' /
                PVin_gestern /, getState('shelly.2.shellyplus1pm#08b61fd7afe0#1.Relay0.Energy').val, true);
                setState('0_userdata.0.PVout_gestern' /
                PVout_gestern /, getState('shelly.2.shellyplus1pm#a8032abbfe18#1.Relay0.Energy').val, true);
                setState('0_userdata.0.Steckdose_Aquarium_gestern' /
                Steckdose_Aquarium_gestern */, getState('shelly.2.shellyplusplugs#d4d4daed6068#1.Relay0.Energy').val, true);
                });

                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

                719

                Online

                32.6k

                Benutzer

                82.0k

                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