NEWS
Bekomme einfache Berechnung nicht hin.
-
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.
-
@paul53 sagte in Bekomme einfache Berechnung nicht hin.:
@mehrwiedu sagte:
Ich mag doch nur die Logik dahinter verstehen
Lies das.
steuere: ack = false,
aktualisiere: ack = true.Ok, ich versuche mich mal.
Dort steht, dass "Command", also "Steuere" die Bestätigung (ACK - Acknowledgement) = false an den Datenpunkt übermittelt. So wie ich das dort verstehe, ist es also die einzige Möglichkeit für einen Benutzer über z. B. VIS oder ein Skript (Javascript-Adapter) ein physisches Gerät oder einen Adapter zu steuern.
Soweit hätte ich es also verstanden. Um meiner Lampe eine andere Helligkeit zu geben, muss also der Button in VIS oder das (wahlweise dahinterliegende) Skript den Wert unbestätigt übergeben, damit der entsprechende Adapter den Befehl ausführt.Und nun bitte helfen: Wenn also ein State ON/OFF = true an ein physisches Gerät übergeben wird, muss dies mit ACK= false geschehen, damit überhaupt geschaltet wird. Command ist in diesem Fall zunächst unbestätigt an den Adapter zu übergeben, der dies dann an die Lampe weitergibt und anschließend, wenn die Lampe ihren Status an den Adapter zurückliefert, überschreibt der den "Status" mit ACK = true und somit auch das Flag vom vorherigen Command.
Wird es aber bereits mit ACK = true, also mit "Status", sprich "aktualisiere" an den Adapter übergeben, wird dieser damit nichts anfangen, weil dieser "Status" vom Benutzer und nicht von dem physischen Gerät als Rückmeldung kommt. Respektive, weil der Adapter eine Rückmeldung nicht als Befehl ausführt, weil ACK = true ist. Somit bleibt die Lampe dunkel.
Ist das in etwa so richtig? Wenn ja, verstehe ich nun auch, warum virtuelle Datenpunkte mit "aktualisiere" geschaltet werden müssen, da es dahinter keine tatsächliche Rückmeldung gibt, die bestätigt werden könnte. Somit übergibt man sie bereits mit dem Flag ACK=true um dahinter liegenden Abhängigkeiten einen bestätigten Wert zu übergeben. Auch in etwa richtig? Wobei, wenn es keine Abhängigkeiten gibt, die unbedingt einen bestätigten Wert benötigen, ist es faktisch egal, ob der Datenpunkt ACK = true oder false hat.
Der Wert darin würde so oder so in VIS angezeigt, ein Skript ausführen, oder Teil einer Berechnung sein können.Wobei mir allerdings hier noch praktische Beispiele fehlen, wo es dann ein Muss ist, den Wert bestätigt zu haben. Das ist bisher nur Theorie. Hast Du ein Beispiel, wo es mit "steuere" bei virtuellen Datenpunkten, sprich unbestätigten Werten Probleme gibt?
@paul53 sagte in Bekomme einfache Berechnung nicht hin.:
@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.
Hier müsste ich dann doch nochmal ein Verständnisproblem versuchen zu klären.
Virtuelle Datenpunkte müssen also, wenn ich das wie oben richtig verstanden und mit meinen Worten richtig wiedergegeben habe, mit "aktualisiere" gesteuert werden, um einen bestätigten Wert zu erhalten, weil es keinen Adapter oder ein physisches Gerät gibt, der den Wert bestätigen kann.Hinter meinem Datenpunkt "Nachtlicht_" steht aber der IoT Adapter. Das virtuelle Gerät in Alexa dürfte doch dann auch bei Nutzung des Sprachbefehls ein ACK= true erhalten, oder?
-
@mehrwiedu sagte in Bekomme einfache Berechnung nicht hin.:
Wenn also ein State ON/OFF = true an ein physisches Gerät übergeben wird, muss dies mit ACK= false geschehen, damit überhaupt geschaltet wird. Command ist in diesem Fall zunächst unbestätigt an den Adapter zu übergeben, der dies dann an die Lampe weitergibt und anschließend, wenn die Lampe ihren Status an den Adapter zurückliefert, überschreibt der den "Status" mit ACK = true und somit auch das Flag vom vorherigen Command.
Wird es aber bereits mit ACK = true, also mit "Status", sprich "aktualisiere" an den Adapter übergeben, wird dieser damit nichts anfangen, weil dieser "Status" vom Benutzer und nicht von dem physischen Gerät als Rückmeldung kommt. Respektive, weil der Adapter eine Rückmeldung nicht als Befehl ausführt, weil ACK = true ist. Somit bleibt die Lampe dunkel.Korrekt.
@mehrwiedu sagte in Bekomme einfache Berechnung nicht hin.:
Virtuelle Datenpunkte müssen also, wenn ich das wie oben richtig verstanden und mit meinen Worten richtig wiedergegeben habe, mit "aktualisiere" gesteuert werden,
Nein, sie sollten mit "aktualisiere" gesetzt werden, wie ich bereits weiter oben geschrieben habe - es ist kein Muss !
-
@mehrwiedu sagte in Bekomme einfache Berechnung nicht hin.:
Ist das in etwa so richtig?
Ja!@mehrwiedu sagte in Bekomme einfache Berechnung nicht hin.:
Auch in etwa richtig?
Ja, wobei das "muss" sich ausschließlich auf die kosmetische Auswirkung bezieht, da sonst der Wert in den Objekten dauerhaft rot eingefärbt bleibt, was einem ordnungsliebenden Auge als Fehler vorkommen könnte.
-
@paul53 sagte in Bekomme einfache Berechnung nicht hin.:
Nein, sie sollten mit "aktualisiere" gesetzt werden, wie ich bereits weiter oben geschrieben habe - es ist kein Muss !
Ok, auch verstanden. Dann hatte ich die zuerst genannte Muss-Bedingung falsch eingeordnet.
Gibt es denn tatsächlich so aus dem Ärmel geschüttelt ein Szenario, wo ein bestätigter Wert in einer Variablen ein Muss ist und es dann mit "steuere" dabei ein Problem gibt?Ich meine, ich werde mir das dann wohl wirklich angewöhnen hierfür (virtuelle Geräte, Variablen) den "aktualisiere" Baustein zu nehmen, aber aus der Erfahrung, die ich damit gemacht hatte, hatte ich ihn quasi schon ausgemustert.
Ich denke, es muss da was geben, was den Baustein außer dem kosmetischen Einsatz rechtfertigt, aber auch jetzt nach der Erklärung, sofern sich da nicht tatsächlich noch ein zwingender Einsatzbereich für diesen Baustein ergeben wird, hätte ich ihn für überflüssig erklärt.