NEWS
Blockly Frage zum loggen von Zuständen
-
Ich möchte die Dauer eines Zustandes loggen, um es mit history zu visualisieren. Einzelheiten zum Vorhaben http://forum.iobroker.net/viewtopic.php … 074#p55182
Mein erster Versuch mit Blockly sieht nun so aus, daß ich den timestamp beim Starten und beim Stoppen in zwei Variablen schreibe. TimeStart und TimeStop.
Jetzt möchte ich im nächsten Schritt die Variable "DauerFahrt" aus TimeStop minus TimeStart berechnen.
Welches Blöckchen muß ich dafür verwenden?
Danke und Grüße
Andreas
Die Objekt-ID heißt im Moment noch "Kellertürkontakt", weil der TFK noch dort verbaut ist.
1884_blockly_maehroboter.jpg -
Hallo weimaraner
Mit dem timestamp müssten noch einige Konvertierungen gemacht werden.
Eine einfache Lösung könnte so aussehen.
Die Berechnung funktioniert allerdings nicht über einen Tageswechsel hinaus!
Dann wird das ganze wieder komplexer.
Hier noch der Export
! ````
<xml xmlns="http://www.w3.org/1999/xhtml"><block type="on_ext" id=";HVkIK%xDV*hfg5kGhZK" x="-1387" y="-662"><mutation items="1"></mutation>
<field name="CONDITION">ne</field><value name="OID0"><shadow type="field_oid" id="`h{W|EEJ_2vq}hmhx[S/"><field name="oid">javascript.1.bolTest01</field></shadow></value> <statement name="STATEMENT"><block type="controls_if" id="y,)_no9bSoe+qt#3^Y}H"><mutation else="1"></mutation> <value name="IF0"><block type="logic_compare" id="~ajXk0%CiC`QN86X?(CJ"><field name="OP">EQ</field> <value name="A"><block type="get_value" id="VT1Pj)5C7:n;w3z5JZ23"><field name="ATTR">val</field> <field name="OID">javascript.1.bolTest01</field></block></value> <value name="B"><block type="logic_boolean" id="B(Y7/,N|SMqnfh]6;%)V"><field name="BOOL">TRUE</field></block></value></block></value> <statement name="DO0"><block type="variables_set" id="p?oe83FptKFq,K*YT;a4"><field name="VAR">TimeStart</field> <value name="VALUE"><block type="time_get" id="Yftzf+X9i2YJD}YpN??|"><mutation format="false" language="false"></mutation> <field name="OPTION">sid</field></block></value></block></statement> <statement name="ELSE"><block type="variables_set" id="hfKNl]+nTN3RN3wj%qXM"><field name="VAR">TimeStop</field> <value name="VALUE"><block type="time_get" id="|Yr~}d{|jmkg6mKE%4ME"><mutation format="false" language="false"></mutation> <field name="OPTION">sid</field></block></value> <next><block type="variables_set" id="+Y~vjk`Hv8}[6qVJhtOY"><field name="VAR">TimeDiff</field> <value name="VALUE"><block type="math_arithmetic" id="gkY(egaQS,%tf6iaH}/."><field name="OP">MINUS</field> <value name="A"><shadow type="math_number" id="lXZR6{CRHSk1iZDT3oO/"><field name="NUM">1</field></shadow> <block type="variables_get" id="WYs:bX7BZKath^oFSXrY"><field name="VAR">TimeStop</field></block></value> <value name="B"><shadow type="math_number" id="{b%.79|%M%x7m+D:_P9?"><field name="NUM">1</field></shadow> <block type="variables_get" id="1FeI#T(Je3V.Xq(5cujG"><field name="VAR">TimeStart</field></block></value></block></value> <next><block type="debug" id="x)M[!d}o@`N9+;mY8c,g"><field name="Severity">log</field> <value name="TEXT"><shadow type="text" id="POVS+U[=i]S%2WLeMN.9"><field name="TEXT">test</field></shadow> <block type="text_join" id="KK!Ge-G[]lp4ynS`0eAW"><mutation items="2"></mutation> <value name="ADD0"><block type="variables_get" id="Lx7(:Ql@0+Tnh3=3)=tO"><field name="VAR">TimeDiff</field></block></value> <value name="ADD1"><block type="text" id="[UYujye7FkQD*Bw2QxnM"><field name="TEXT"> Sekunden</field></block></value></block></value></block></next></block></next></block></statement></block></statement></block></xml>
Grüße
-
Vielen Dank, Rantanplan!
Das werde ich gleich morgen mal ausprobieren. Über den Tageswechsel dürfte vielleicht gar kein Problem sein, da ich nachts ja nicht mähe und mich die Ruhepause nicht interessiert.
Mal schauen, wie ich das dann in history dargestellt bekomme.
Ich werde weiter berichten (und fragen ).
Grüße Andreas
-
So, ich habe nun Rantanplans Skript angepaßt und gleich noch ein zweites "spiegelverkehrtes" für den jeweils anderen Zustand erstellt.
Mähen:
Laden:
Nun tut sich wieder ein bunter Straus an Fragen auf.
Ich habe die Skripte in einer weiteren JavaSkript-Instanz laufen lassen, da ich im Forum gelesen hatte, daß man das zum Testen tuen soll. Also die "1" gewählt (siehe Bilder oben)
Warum sehe ich aber im Reiter Objekte die Skripte unter javascript.0 ?
siehe hier:
Nächste Frage: Wo finde ich die geloggten Zeiten meiner Zustände? Unter Objekte?
Ich habe auf dieser Seite das Zahnrad ganz rechts geklickt. Da komme ich in den history-Adapter. Dort auf "aktiviert". Es passiert aber nichts. Der Kontakt wurde mehrmals bedient, aber ich sehe keine Dauern.
Und noch eine generelle Frage: Könnte ich beide Skripte zu einem Skript zusammen fassen? Hätte das Vor- oder Nachteile?
Danke und viele Grüße
Andreas
-
Nun tut sich wieder ein bunter Straus an Fragen auf. `
Ich habe es befürchtet
Ich habe die Skripte in einer weiteren JavaSkript-Instanz laufen lassen, da ich im Forum gelesen hatte, daß man das zum Testen tuen soll. Also die "1" gewählt (siehe Bilder oben)
Warum sehe ich aber im Reiter Objekte die Skripte unter javascript.0 ? `
Ja, sollte man so machen. Ich habe die 0 für produktiv und die 1 zum Testen.Das die Scripte manchmal in der falschen Instanz angezeigt werden ist bei mir auch so. Reorganiesiert sich aber irgenwann.
Und noch eine generelle Frage: Könnte ich beide Skripte zu einem Skript zusammen fassen? Hätte das Vor- oder Nachteile? `
Ja könntest Du. Ein Blockly kann mehrere Trigger beinhalten.Dann solltest Du aber zusätzliche lokale Variablen nehmen. z.B. TimerStartMaehen, TimerStopMaehen. TimerStartLaden, TimerStopLaden
Und die Trigger nicht auf "Änderung" sondern jeweils auf "wahr" oder "unwahr" reagieren lassen.
Nächste Frage: Wo finde ich die geloggten Zeiten meiner Zustände? Unter Objekte?
Ich habe auf dieser Seite das Zahnrad ganz rechts geklickt. Da komme ich in den history-Adapter. Dort auf "aktiviert". Es passiert aber nichts. Der Kontakt wurde mehrmals bedient, aber ich sehe keine Dauern. `
In Deinem Screenshot hast Du das Script selbst ausgewählt.Ein Script kennt nur 2 Zustände. Läuft oder läuft nicht.
Da würde also nur geloggt wann Du das Script startest und wann Du auf Pause klickst.
Ich habe immer geflissentlich überlesen, dass Du mit "History" loggen willst :oops: :roll:
Dafür brauchst Du kein Blockly.
Geh unter Objekte, wähle den STATE von dem Adapter aus und dann das "Zahnrädchen".
History zeigt Dir dann wie lange das Teil offen oder zu war.
Das hat aber alles nichts mehr mit Blockly zutun.
Kurz zum Verständnis.
Wenn Du dies mit Blockly lösen wolltest, müsstest Du
1. Ein Objekt/Datenpunkt anlegen, Typ Logikwert, Bezeichnung "LadenAktiv" (lokale Variablen kannst Du nicht unter Objekte finden!)
2. Ein Blockly, wo der Datenpunkt "LadenAktiv" auf "wahr" oder "unwahr" gesetzt wird.
3. "LadenAktiv" unter Objekte auswählen und mit "History" verbinden.
Grüße
-
Okay, blockly war ein Irrweg. Aber ich habe was gelernt.
Bei history habe ich geschaut, aber die geloggten Uhrzeiten über history lassen sich aber irgenwie nicht gut darstellen.
Meine Idee ist ein Graph in einem Koordinatensystem, wobei auf der X-Achse die (Uhr)Zeit ist und auf der Y-Achse der Zustand 0=Laden, 1=Mähen.
I-Tüpfelchen wäre dann eine Warnmeldung, wenn die Mähdauer eine Zeit x überschreitet, weil festgefahren, umgekippt, geklaut…
Deshalb wollte ich aus den Uhrzeiten ja anfänglich die Dauer des Zustandes ermitteln. Daher kam ich zu blockly. Du siehst der Kreis schließt sich.
Grüße Andreas
-
Okay, blockly war ein Irrweg. Aber ich habe was gelernt. `
Jeder Tag an dem man etwas lernt ist ein guter Tag.
@weimaraner:Bei history habe ich geschaut, aber die geloggten Uhrzeiten über history lassen sich aber irgenwie nicht gut darstellen.
Meine Idee ist ein Graph in einem Koordinatensystem, wobei auf der X-Achse die (Uhr)Zeit ist und auf der Y-Achse der Zustand 0=Laden, 1=Mähen. `
Da gibt es bestimmt Möglichkeiten. Mach doch einen neuen Fred auf.Hier gibt es bestimmt jemanden, der Dir weiterhelfen kann.
I-Tüpfelchen wäre dann eine Warnmeldung, wenn die Mähdauer eine Zeit x überschreitet, weil festgefahren, umgekippt, geklaut… `
Na, da kann ich wieder versuchen Dir zu helfen.
Der Import:
! <xml 1999/xmlns="<URL url=" http:/www.w3.org/xhtml"="">http://www.w3.org/1999/xhtml">
! <block type="on_ext" id="hWe3oOsT9qm9n2FDJ^" x="-112" y="38"><mutation items="1"></mutation>
! <field name="CONDITION">ne</field>
! <value name="OID0"><shadow type="field_oid" id="Rcde!sY/svk9PIQLQZ^;"><field name="oid">default</field></shadow></value>
! <statement name="STATEMENT"><block type="controls_if" id="0Ob]KV][t6rD5_#FX~Tt"><mutation else="1"></mutation>
! <value name="IF0"><block type="logic_compare" id="[mb4E5oRS;wD}!LxvcRw"><field name="OP">EQ</field>
! <value name="A"><block type="get_value" id="Wc?S@q%|PQBr;y=fnp(M"><field name="ATTR">val</field>
! <field name="OID">ID auswählen</field></block></value>
! <value name="B"><block type="logic_boolean" id="4Ay!O+qV!O^G;vp|gQ99"><field name="BOOL">TRUE</field></block></value></block></value>
! <statement name="DO0"><block type="pushover" id="s{f8]F),e==dhjq,kI^"><field name="PRIORITY">0</field> ! <value name="MESSAGE"><shadow type="text" id="]hr~.X}J_r:THi68IF_;"><field name="TEXT">Hey Boss, beginne meinen schlecht bezahlten Job!</field></shadow></value> ! <value name="TITLE"><block type="text" id="z2Y,NPD4{[[U4NPGY+Pu"><field name="TEXT">Vom Rasen-Sklaven</field></block></value> ! <next><block type="timeouts_settimeout" id="1+SYeYF_P:RxreH=7L^@"><field name="NAME">timeout</field> ! <field name="DELAY">1800000</field> ! <statement name="STATEMENT"><block type="comment" id="e7yoscMDR(@+P4:?X8#E"><field name="COMMENT">Nach 30 Minuten</field> ! <next><block type="pushover" id="GBHg_}E~kV|i
~/GrZ@9"><field name="PRIORITY">0</field>
! <value name="MESSAGE"><shadow type="text" id="h9WKC=fHrkIp[N[vz_7x"><field name="TEXT">Hey Boss, brauche Hilfe!!!</field></shadow></value>
! <value name="TITLE"><block type="text" id="g{2bJ|Tr|eskt:}6lcdt"><field name="TEXT">Vom Rasen-Sklaven</field></block></value></block></next></block></statement></block></next></block></statement>
! <statement name="ELSE"><block type="timeouts_cleartimeout" id="AeHq]M4eR):X_f2-I?.t"><field name="NAME">timeout</field>
! <next><block type="pushover" id="4IkGMCW#)A,Oq-N-|;Kd"><field name="PRIORITY">0</field>
! <value name="MESSAGE"><shadow type="text" id="-BIt^-hW9Y%pHxVGBa"><field name="TEXT">Hey Boss, mache Pause!</field></shadow></value>
! <value name="TITLE"><block type="text" id="I@2lY3Q]%,QP=(E;,X3("><field name="TEXT">Vom Rasen-Sklaven</field></block></value></block></next></block></statement></block></statement></block></xml>
@weimaraner:Daher kam ich zu blockly. Du siehst der Kreis schließt sich. `
Gut soGrüße
-
Schönes Blockly!
Werde ich morgen mal umsetzen.
Ich berichte!
Danke und Grüße
Andreas