NEWS
Bekomme einfache Berechnung nicht hin.
-
Hallo,
die Skriptprogrammierung ist für mich noch Neuland. Ich wurstel mich so durch einige How To`s durch.
Leider bekomme ich die Berechnung für meinen Zisternen Füllstandsmesser nicht zum laufen. Der sensor gibt mir einen ziemlich genauen Wert für die entfernung bis zum Wasser. Jetzt möchte ich das Ganze in Prozent umrechnen. Leider funktioniert hier schon der erste Schritt nich. Die Berechnung des Wasserstandes. Die volle höhe beträgt in diesem Fall 152 cm. Es sollen die 152cm - (des abstandes vom sensor zum Wasser) berechnet werden.
Kann mir einer sagen was ich falsch machen ?
Danke.
-
@timredlich Damit der Zieldatenpunkt einen Wert erhält, muss der Distanz-Wert aktualisiert werden, während das Skript aktiv ist.
-
Entfernung _invertiert und Prozent sind doch eigene, selbst angelegte Objekte, oder?
Diese sollten entweder unter javascript.0 oder in eigene Objekte angelegt werden. Ob das auch der Grund für das nicht-Schreiben ist, weiß ich nicht.Enrico
-
@RappiRN
Die Punkte liegen laut Screenshot unter MQTT. 0
Das sollte aber kein Problem sein, wenn die Pfade im blockly stimmen.Entscheidend ist, ob der wert von ...Distance aktualisiert wird.
@timredlich
Was sagt der timestamp?
Was sagt das log?
Welcher Typ ist der wert, der von MQTT kommt?
Welcher Typ sind die Datenpunkte?Bau doch mal debug Bausteine ein.
-
Also wie gesagt ich stehe noch am Anfang.
Der Wert von Distance wird doch alle 10 sec. von der NodeMCU aktualisiert. Zumindest wird dieser Wert zeitnah im IOBroker dargestellt. Auch nach veränderung Distanz wird kein wert berechnet.
-
Was mir gerade auffällt, wie ist denn dein Objekt Entfernung_invertiert eingestellt? Auf den Standart beim Erstellen? Dann ist kein Wert von unter "0" möglich. Bei deinem Beispiel kommt ja ein negativer Wert (152-39)raus!
Enrico
-
@RappiRN sagte in Bekomme einfache Berechnung nicht hin.:
Was mir gerade auffällt, wie ist denn dein Objekt Entfernung_invertiert eingestellt? Auf den Standart beim Erstellen? Dann ist kein Wert von unter "0" möglich. Bei deinem Beispiel kommt ja ein negativer Wert (152-39)raus!
Enrico
Das Ergebnis von 152-39 ist bei mir positiv.
Ich stehe allerdings auch noch am Anfang einer hoffentlich irgendwann routinierten Behandlung von Blockly.
Daher weiß ich auch den Unterschied zwischen "aktualisiere" und "steuere" nicht genau zu sagen.
Was ich allerdings bei mir immer wieder festgestellt habe ist, dass "aktualisiere" in den meisten Fällen, wo es mir logisch erschien es anzuwenden, nicht funktioniert hat und ich "steuere" nehmen musste, damit am Datenpunkt ein Ergebis vom Skript ankommt.Vielleicht probierst Du das einfach mal aus.
Ansonsten wäre ich auch von den Wissenden über eine Aufklärung des Unterschieds in der Interpretation durch Blockly von "aktualisiere" und "steuere" interessiert.
-
@mehrwiedu sagte in Bekomme einfache Berechnung nicht hin.:
Daher weiß ich auch den Unterschied zwischen "aktualisiere" und "steuere" nicht genau zu sagen.
aktualisiere sendet ein ACK=true, steuere ein ACK=false, was den Empfänger veranlasst den Wert zu übernehemen und dann erst ACK=true zu setzen.
@timredlich sagte in Bekomme einfache Berechnung nicht hin.:
Also wie gesagt ich stehe noch am Anfang
Es wäre schön, wenn du miene Fraggen beantworten würdest, dann könnte ich gezielter helfen.
Insbesondere der Einsatz von debug-Blöcken mit einer sinnvollen Ausgabe würde dazugehören -
@Homoran sagte in Bekomme einfache Berechnung nicht hin.:
aktualisiere sendet ein ACK=true, steuere ein ACK=false, was den Empfänger veranlasst den Wert zu übernehemen und dann erst ACK=true zu setzen.
Hehe...ok, danke. ACK = Acknowledgement, richtig?
Aber das bedeutet in diesem konkreten Fall, bei dem er das Ergebnis aus 152-39 = 113 in einen Datenpunkt schreiben will, genau was?
Mit "aktualisiere" sollte also 113 in dem Datenpunkt stehen, der dann mit true bestätigt ist und mit steuere steht die 113 dann in dem Datenpunkt, allerdings bestätigt mit false.
Wenn das so ist, verstehe ich den Unterschied für weitere Vorgehensweisen, bei dem der Wert bestätigt sein muss um weiterhin etwas mit ihm machen zu können, sofern darauf abgefragt wird. Für die reine Anzeige des Wertes, bzw. die weitere Berechnung in % spielt das aber doch keine Rolle.Bedeutet aber, "aktualisiere" und "steuere" sind beides identische Befehle mit unterschiedlicher Ausprägung, die im ersten Schritt aber doch dann auf jeden Fall zunächst das Ergebnis in den Datenpunkt schreiben sollten.
Warum genau bekomme ich dann mit "aktualisiere" so gut wie nie einen Datenpunkt aus einem Skript heraus gefüllt und muss "steuere" stattdessen wählen? Ich vermutete jetzt tatsächlich, dass es sich um unterschiedliche Interpreter handeln muss.
Oder ich habe das jetzt doch nicht verstanden!
-
@mehrwiedu sagte in Bekomme einfache Berechnung nicht hin.:
Warum genau bekomme ich dann mit "aktualisiere" so gut wie nie einen Datenpunkt aus einem Skript heraus gefüllt
Sollte aber immer klappen...
Der Wert wird in den Datenpunkt eingetragen, erscheint dabei kurz in grün dann ändert sich die Schriftfarbe in schwarz.Anders bei Steuere...
Der Wert wird in den Datenpunkt eingetragen, erscheint dabei kurz in grün und wird dann für immer rot bleiben. Erst wenn er von dem Empfänger abgeholt wird und dieser ihn bestätigt wird ändert sich die Schriftfarbe in schwarz.Selbst angelegte Datenpunkte, die als reine Systemvariablen gedacht sind müssen sogar mit aktualisiere befüllt werden
Wenn du jetzt mit "aktualisiere" einen Datenpunkt eines Gerätes/Adapters befüllst erhält der Empfänger jedoch keine Info, dass dieser Wert für ihn ist und überschreibt postwendend den Wert wieder
-
darf ich dich fragen, mit was du die Distanz misst, ich würde gerne ähnliches für die Senkgrube benötigen! thx
-
@mehrwiedu
stimmt natürlich!Aber der Wert ist über 100, also mein angesprochenes Problem ist das Gleiche! Standart für ein Zahlenobjekt ist 0-100 (%) also, wenn der Wert über 100 ist, wird er auch nicht geschrieben!
Enrico
-
@MyzerAT Ich habe folgende Komponeneten benutzt:
https://www.amazon.de/gp/product/B072L3ZKWZ/ref=ppx_yo_dt_b_asin_title_o01_s00?ie=UTF8&psc=1
Habe anfänlich nach diesem How to gearbeitet:
https://arduino-projekte.info/zisterne-fuellstandsanzeige/
es gibt aber noch andere. Ich habe aber einen NodeMCU genommen und diesen mit ESPeasy geflasht.
-
Leute fragt nicht wie. Aber ich habe es hin bekommen.
Aktuell sieht es bei mir so aus:
Ich glaube das ich ein Grundsätzliches Problem habe. Ich habe IOBroker auf einem BananaPi neben Openmediavault installiert. Ich habe oft komplette Systemabstürze. Ich glaube das meine Installation nicht OK ist. Als ich die Scripte auf gerufen habe stand oben die Instanz läuft nicht. Obwohl die JavaScript Engine Grün war. ich werde mir wohl doch noch einen Zusätzlichen RaspberryPi anschaffen und alles Ordentlich neu aufsetzen.
Als nächstes werde ich versuchen Die Prozentabfrage über Alexa hin zu bekommen.
Ich möchte mich bei allen bedanken. Wird nicht das letzte mal gewesen sein das ich um Hilfe frage.
Gruß
Tim
-
@Homoran sagte in Bekomme einfache Berechnung nicht hin.:
@mehrwiedu sagte in Bekomme einfache Berechnung nicht hin.:
Warum genau bekomme ich dann mit "aktualisiere" so gut wie nie einen Datenpunkt aus einem Skript heraus gefüllt
Sollte aber immer klappen...
Der Wert wird in den Datenpunkt eingetragen, erscheint dabei kurz in grün dann ändert sich die Schriftfarbe in schwarz.Anders bei Steuere...
Der Wert wird in den Datenpunkt eingetragen, erscheint dabei kurz in grün und wird dann für immer rot bleiben. Erst wenn er von dem Empfänger abgeholt wird und dieser ihn bestätigt wird ändert sich die Schriftfarbe in schwarz.Selbst angelegte Datenpunkte, die als reine Systemvariablen gedacht sind müssen sogar mit aktualisiere befüllt werden
Wenn du jetzt mit "aktualisiere" einen Datenpunkt eines Gerätes/Adapters befüllst erhält der Empfänger jedoch keine Info, dass dieser Wert für ihn ist und überschreibt postwendend den Wert wieder
Ich muss mich entschuldigen, aber ich habe das leider immer noch nicht verstanden. insbesondere den Teil, an dem sich der "Empfänger" die Info abholt, bzw. keine Info bekommt, weil er nicht weiß, dass der Wert für ihn ist.
In Verbindung mit meinem aktuellen Kenntnisstand kriege ich da keine Logik rein. Was der Unterschied zwischen "aktualisiere" und "steuere" zu sein scheint, habe ich, so wie ich glaube, verstanden. Einmal wird der Wert bestätigt, und einmal eben nicht. Zeigt sich bei mir überall an den Punkten, wo ich die Werte mit "steuere" an den Datenpunkt übergebe eben so:
Ich habe "unwahr" mit steuere übergeben und der Wert ist nicht bestätigt. Aber was hat das für Konsequenzen, bzw. Auswirkungen?
Ein Beispiel, woran man mir das vielleicht erklären kann und ich lerne, was ich hier falsch mache:
Ich habe eine Lampe, die ich getriggert nach Astrozeit, oder aber mittels Sprachbefehl über Alexa als Nachtlicht nutze.
Hier der Datenpunkt, den ich über die Skripte fülle, oder von Alexa füllen lasse.
Wenn ich also sage "Alexa, Nachtlicht an", wechselt dieser Datenpunkt auf "true", bleibt aber unbestätigt, demnach rot und es wird folgendes Skript ausgeführt.
Ebenso bei "Alexa, Nachtlicht aus", nur dass hier dann der "sonst falls" Block im Skript ausgeführt wird.Ich muss aber die Datenpunkte hier im Skript mit "steuere" ansprechen, weil sonst an der Lampe nichts passiert. "aktualisiere" hat hier keine Auswirkung.
Getriggert auf die Astrozeit werden die Datenpunkte der Lampe "Nachtlicht_" nun nicht durch den Sprachbefehl und somit durch das Skript oben gefüllt, sondern direkt an den Datenpunkten der Lampe.
Aber auch hier muss ich "steuere" wählen, weil sonst die Werte nicht dort ankommen.
Das morgendliche Ausschalten vom Nachtlicht, passiert dann über eine festgelegte Zeit. Hier nutze ich dann wieder das Skript von ganz oben, aber der Auslöser ist dann hier nicht der Sprachbefehl, sondern eben der Datenpunkt selbst. Ebenfalls, wie man sieht, mit "steuere", weil "aktualisiere" nicht zum Ziel führt.
Nun schreibst Du, dass man für erstellte Datenpunkte "aktualisiere" nehmen muss. Warum? Und vor allem, wieso kann ich es faktisch nicht nehmen, weil sonst meine Skripte nicht ausgeführt werden, bzw. die von den Skripten gewünschten Werte nicht im Datenpunkt ankommen?
Die Datenpunkte der Lampe, die ich auch mit "steuere" über das obige Skript setze, sind i. Ü. nach Ausführung des Skripts bestätigt, demnach schwarz.
-
@mehrwiedu sagte:
dass man für erstellte Datenpunkte "aktualisiere" nehmen muss.
Für selbst erstellte (virtuelle) Datenpunkte (normalerweise unter javascript.N) sollte man aktualisiere nehmen. Für Datenpunkte, die außerhalb von ioBroker eine Reaktion auslösen sollen, muss man steuere nehmen.
-
@mehrwiedu sagte in Bekomme einfache Berechnung nicht hin.:
Nun schreibst Du, dass man für erstellte Datenpunkte "aktualisiere" nehmen muss.
Da fehlt was
@Homoran sagte in Bekomme einfache Berechnung nicht hin.:
Selbst angelegte Datenpunkte, die als reine Systemvariablen gedacht sind müssen
@mehrwiedu sagte in Bekomme einfache Berechnung nicht hin.:
Hier der Datenpunkt, den ich über die Skripte fülle
Hängt da ein Gerät hinter?
oder ist das eine "Systemvariable"?@mehrwiedu sagte in Bekomme einfache Berechnung nicht hin.:
Ich muss aber die Datenpunkte hier im Skript mit "steuere" ansprechen, weil sonst an der Lampe nichts passiert.
Dem entnehme ich, dass da wirklich eine Lampe dranhängt, folglich ist "steuere" ein Muss.
-
@paul53 sagte in Bekomme einfache Berechnung nicht hin.:
@mehrwiedu sagte:
dass man für erstellte Datenpunkte "aktualisiere" nehmen muss.
Für selbst erstellte (virtuelle) Datenpunkte (normalerweise unter javascript.N) sollte man aktualisiere nehmen. Für Datenpunkte, die außerhalb von ioBroker eine Reaktion auslösen sollen, muss man steuere nehmen.
Ja, das hat ja @Homoran schon gesagt, aber ich verstehe nicht warum, und die Auswirkung der Syntax dahinter. Und wie man sieht, habe ich mich hier ja definitiv nicht an die muss Bedingung gehalten und die Skripte laufen wie gewünscht.
Ich mag doch nur die Logik dahinter verstehen.@Homoran
Ich habe in meinem obigen Post noch etwas aktualisiert. Da hatte ich die Bilder zu den Texten vertauscht.Zu Deiner Frage: Ja, hinter dem Datenpunkt "Nachtlicht_" steckt nur ein virtuelles Gerät, damit ich es mit Alexa steuern kann. Ich nutze diesen Datenpunkt aber auch als Auslöser für die Skripte, bzw. steuere diesen Datenpunkt über die obigen Skripte.
-
@mehrwiedu sagte:
Ich mag doch nur die Logik dahinter verstehen
Lies das.
steuere: ack = false,
aktualisiere: ack = true. -
@mehrwiedu sagte:
Ich habe "unwahr" mit steuere übergeben und der Wert ist nicht bestätigt. Aber was hat das für Konsequenzen, bzw. Auswirkungen?
Da es sich um einen virtuellen Datenpunkt handelt, hat es keine Konsequenzen, außer dass der Wert im Reiter "Objekte" immer rot (nicht bestätigt) dargestellt wird.