Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Rechnen mit Datenpunkte und/oder Variablen

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    Rechnen mit Datenpunkte und/oder Variablen

    This topic has been deleted. Only users with topic management privileges can see it.
    • J
      judisi last edited by 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?

      Codierknecht 1 Reply Last reply Reply Quote 0
      • Codierknecht
        Codierknecht Developer Most Active @judisi last edited by

        @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 1 Reply Last reply Reply Quote 0
        • R
          Reini 0 @Codierknecht last edited by

          @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

          Codierknecht 1 Reply Last reply Reply Quote 0
          • Codierknecht
            Codierknecht Developer Most Active @Reini 0 last edited by

            @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 1 Reply Last reply Reply Quote 0
            • R
              Reini 0 @Codierknecht last edited by

              @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.

              Codierknecht 1 Reply Last reply Reply Quote 0
              • Codierknecht
                Codierknecht Developer Most Active @Reini 0 last edited by Codierknecht

                @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!

                1 Reply Last reply Reply Quote 0
                • R
                  Reini 0 last edited by

                  @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 Reply Last reply Reply Quote 0
                  • First post
                    Last post

                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  483
                  Online

                  32.0k
                  Users

                  80.4k
                  Topics

                  1.3m
                  Posts

                  3
                  7
                  391
                  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