NEWS
zeitliche Ausnahme bei Steckdosenschaltung
-
Hallo zusammen,
Ich überwache mit dem fullykiosk Adapter das Baterielevel meines Tablets und lasse die Tasmota Schaltsteck bei 20% oder weniger einschalten und bei 80% oder mehr ausschalten. Soweit so gut.
Da ich nachts ein automatisches Backup meines iobroker pi durchführe, das mind. eine Stunde dauert, ist es schon vor gekommen, dass der Strom am Tablet zu der Zeit aus war, iobroker lief nicht und hat den Strom nicht eingeschaltet. Das Tablet war am Morgen leer. Das möchte ich vermeiden.
Anforderung ist also, dass zwischen z.B: 0 Uhr und 3 Uhr die Steckdose auf jeden Fall eingeschaltet sein soll, danach wieder mit o.g. Logik.
Ich habe es wie folgt umgesetzt, was aber nicht funktioniert.
<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="trv$uyYCiS,qS6A(Xd)$">BatteryLevel</variable> <variable id="GjzYplH_dd.|oM}2^z:)">SchaltSteckANAUSStatus</variable> </variables> <block type="comment" id="cjhq6NmJ!IgWeNVsBy`|" x="-962" y="-137"> <field name="COMMENT">Schaltsteck VIS Samsung Tablet bei <= 20% anschalten, bei >=80% aus</field> <next> <block type="comment" id="a2q[vsGImjVo4GKt5eye"> <field name="COMMENT">nicht von 3-0 ausschalten da Backup gezogen wird und iobroker aus ist</field> <next> <block type="controls_if" id="LpWL`E_u}gs{4i,LxfTN"> <mutation elseif="1"></mutation> <value name="IF0"> <block type="time_compare" id="yk`/@9k]P#3J8ety2A$7"> <mutation xmlns="http://www.w3.org/1999/xhtml" end_time="true"></mutation> <field name="OPTION">between</field> <field name="START_TIME">03:00</field> <field name="END_TIME">00:00</field> </block> </value> <statement name="DO0"> <block type="on" id="M/1I0JFtwMgk.h56XQDa"> <field name="OID">fullybrowser.0.192_168_253_58.Info.batteryLevel</field> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <statement name="STATEMENT"> <block type="variables_set" id="_r]}Vk}MEQB(lJWm/E):"> <field name="VAR" id="trv$uyYCiS,qS6A(Xd)$">BatteryLevel</field> <value name="VALUE"> <block type="get_value" id="2#I:^JH(G^ofayTg]5uZ"> <field name="ATTR">val</field> <field name="OID">fullybrowser.0.192_168_253_58.Info.batteryLevel</field> </block> </value> <next> <block type="variables_set" id="aOJB29]*j|#HQeqNS*.2"> <field name="VAR" id="GjzYplH_dd.|oM}2^z:)">SchaltSteckANAUSStatus</field> <value name="VALUE"> <block type="get_value" id="Bqz45,_@k3@tY}$?#aOA"> <field name="ATTR">val</field> <field name="OID">sonoff.0.TasmotaSteckVIS.POWER</field> </block> </value> <next> <block type="controls_if" id="S+umOpA1!*-,2rOB]fZf"> <mutation elseif="2"></mutation> <value name="IF0"> <block type="logic_operation" id="NQZWE{X(Q`yz8n+B-,qi"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id="VsECD,Jn;|$fzg}eSJh%"> <field name="OP">GTE</field> <value name="A"> <block type="variables_get" id="ox[49$~wy4]n2O{WYsP$"> <field name="VAR" id="trv$uyYCiS,qS6A(Xd)$">BatteryLevel</field> </block> </value> <value name="B"> <block type="math_number" id="0eZx6Q;H#yI^/eLTK4F#"> <field name="NUM">80</field> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="`sd]n/hYwq3m[:eK[Nu!"> <field name="OP">EQ</field> <value name="A"> <block type="variables_get" id="Lc/82@R-*JsRrkMt1a#J"> <field name="VAR" id="GjzYplH_dd.|oM}2^z:)">SchaltSteckANAUSStatus</field> </block> </value> <value name="B"> <block type="logic_boolean" id="^]NmbW5m0ckZWH8|Gl*T"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="control" id="~8o,B[GqEH+PLyh/EY^X"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">sonoff.0.TasmotaSteckVIS.POWER</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="dXB1j-~$[ID({-)m0|Lm"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="telegram" id="+;7!R0k:!lwUf2s2;wFL"> <field name="INSTANCE"></field> <field name="LOG"></field> <field name="SILENT">FALSE</field> <field name="PARSEMODE">default</field> <value name="MESSAGE"> <shadow type="text" id="iYLGT^x=FnA:iF`D49L:"> <field name="TEXT">text</field> </shadow> <block type="text" id="}FD;%S~NSM#iT1^xw9hZ"> <field name="TEXT">VIS Tablet Batterie bei über 80%. Schalte Strom aus.</field> </block> </value> </block> </next> </block> </statement> <value name="IF1"> <block type="logic_operation" id="#O;O`c{IJW#HP]@AgI|a"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id="D+SL)3+_DC}=Z|-_F`r8"> <field name="OP">LTE</field> <value name="A"> <block type="variables_get" id="C~9w_ujw}%$^,(QZ{5Iq"> <field name="VAR" id="trv$uyYCiS,qS6A(Xd)$">BatteryLevel</field> </block> </value> <value name="B"> <block type="math_number" id="7|(86eTz/C{rPvk=R*s;"> <field name="NUM">20</field> </block> </value> </block> </value> <value name="B"> <block type="logic_compare" id="V,irmDTWGR?SQuv4~n%|"> <field name="OP">EQ</field> <value name="A"> <block type="variables_get" id="I5aQV?H:$L*pl@JYy:2]"> <field name="VAR" id="GjzYplH_dd.|oM}2^z:)">SchaltSteckANAUSStatus</field> </block> </value> <value name="B"> <block type="logic_boolean" id="iHW;W-{VNI~55Ld~EWK6"> <field name="BOOL">FALSE</field> </block> </value> </block> </value> </block> </value> <statement name="DO1"> <block type="control" id=",N}^}`V[}||kn#p9N?sJ"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">sonoff.0.TasmotaSteckVIS.POWER</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="wT,h5m!RIU]gewP?|XPX"> <field name="BOOL">TRUE</field> </block> </value> <next> <block type="telegram" id="uR2o@KVkF.?Az-.j5u$y"> <field name="INSTANCE"></field> <field name="LOG"></field> <field name="SILENT">FALSE</field> <field name="PARSEMODE">default</field> <value name="MESSAGE"> <shadow type="text"> <field name="TEXT">text</field> </shadow> <block type="text" id="I5Kb@z+SQ38rf8tP8Xe#"> <field name="TEXT">VIS Tablet Batterie bei unter 20%. Schalte Strom an.</field> </block> </value> </block> </next> </block> </statement> <value name="IF2"> <block type="logic_compare" id="7b,?HC?8P2b7Fpdv;,r#"> <field name="OP">LTE</field> <value name="A"> <block type="variables_get" id="xI,1BGm(`BjSmk^+q%/["> <field name="VAR" id="trv$uyYCiS,qS6A(Xd)$">BatteryLevel</field> </block> </value> <value name="B"> <block type="math_number" id="vzDe%ZbE8LhZKpk5Lic;"> <field name="NUM">5</field> </block> </value> </block> </value> <statement name="DO2"> <block type="telegram" id="Yr9)gKs;#Xu,L!n`3D-C"> <field name="INSTANCE"></field> <field name="LOG"></field> <field name="SILENT">FALSE</field> <field name="PARSEMODE">default</field> <value name="MESSAGE"> <shadow type="text"> <field name="TEXT">text</field> </shadow> <block type="text" id="$fdrw|e)4]Fk9xjL{fG="> <field name="TEXT">VIS Tablet hat weniger als 5% Batterieladung!</field> </block> </value> </block> </statement> </block> </next> </block> </next> </block> </statement> </block> </statement> <value name="IF1"> <block type="time_compare" id=".SLY~l6N2AP/V]vU8o63"> <mutation xmlns="http://www.w3.org/1999/xhtml" end_time="true"></mutation> <field name="OPTION">between</field> <field name="START_TIME">00:01</field> <field name="END_TIME">02:59</field> </block> </value> <statement name="DO1"> <block type="comment" id="A@yvzNZb,XqShRI#WoA8"> <field name="COMMENT">während iobroker Backup an</field> <next> <block type="variables_set" id="12kYkO^2}UxL!O*?j7Qz"> <field name="VAR" id="GjzYplH_dd.|oM}2^z:)">SchaltSteckANAUSStatus</field> <value name="VALUE"> <block type="get_value" id="$p9PWn}Zlh98_Q!+s`[/"> <field name="ATTR">val</field> <field name="OID">sonoff.0.TasmotaSteckVIS.POWER</field> </block> </value> <next> <block type="variables_set" id="H0vBILc2#Dee#41vGb[["> <field name="VAR" id="trv$uyYCiS,qS6A(Xd)$">BatteryLevel</field> <value name="VALUE"> <block type="get_value" id="O=M5=-q_.~P;dynkq:`H"> <field name="ATTR">val</field> <field name="OID">fullybrowser.0.192_168_253_58.Info.batteryLevel</field> </block> </value> <next> <block type="telegram" id="=AH-MP0U-;a|*#UAn`u$"> <field name="INSTANCE"></field> <field name="LOG"></field> <field name="SILENT">FALSE</field> <field name="PARSEMODE">default</field> <value name="MESSAGE"> <shadow type="text" id="^.Fb}gR!h(Zi+|%0OpM,"> <field name="TEXT">text</field> </shadow> <block type="text_join" id="xnAWHDg1@gv%#{[mS$_/"> <mutation items="7"></mutation> <value name="ADD0"> <block type="text" id="@:Hg^7(+1Er[ig/8IL~@"> <field name="TEXT">zwischen 0 und 3 Uhr</field> </block> </value> <value name="ADD1"> <block type="text_newline" id="!M|yQOh;6(CoDiuhC}uQ"> <field name="Type">\n</field> </block> </value> <value name="ADD2"> <block type="variables_get" id="9)mfkp1LQ~oR!St,bJ%@"> <field name="VAR" id="trv$uyYCiS,qS6A(Xd)$">BatteryLevel</field> </block> </value> <value name="ADD3"> <block type="text" id="~7|gbwm|cqia)ILE(,G~"> <field name="TEXT">%</field> </block> </value> <value name="ADD4"> <block type="text_newline" id="D:aTxXfJ2Q`}r_SiaG(b"> <field name="Type">\n</field> </block> </value> <value name="ADD5"> <block type="text" id="){b/V#q;6TQcVaT9tP7u"> <field name="TEXT">Steckdose </field> </block> </value> <value name="ADD6"> <block type="variables_get" id="v0qv.:Mwt92)h:^b7S6Q"> <field name="VAR" id="GjzYplH_dd.|oM}2^z:)">SchaltSteckANAUSStatus</field> </block> </value> </block> </value> <next> <block type="control" id="Z-$NIAazfT3o1R{xPlEm"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">sonoff.0.TasmotaSteckVIS.POWER</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="0(=j6+(i]a(ZBgpHy1LY"> <field name="BOOL">TRUE</field> </block> </value> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </next> </block> </next> </block> </xml>
Hier ein Ausschnitt des Blockly:
Was mache ich falsch?
Danke!
-
@mading Dein Skript greift nur, wenn du es zu diesen Zeiten startest. Du brauchst einen Cron-Trigger.
Den Teil außerhalb der Zeit, also bei niedrigem Batteriestand, lässt du wie gehabt.
-
@dr-bakterius danke dir. nur im Missverständnisse zu vermeiden: ich möchte dass zwischen 0 und 3 Uhr der Strom an ist und zwischen 3:01 und 23:59 die Logik zieht dass bei 20% Batterielevel der Strom an geschaltet wird etc. Der Trigger für die Zeit zwischen 3 Uhr und 23:59 Uhr fehlt doch dann, oder?
-
@mading sagte in zeitliche Ausnahme bei Steckdosenschaltung:
Der Trigger für die Zeit zwischen 3 Uhr und 23:59 Uhr fehlt doch dann, oder?
Ich würde die cron-trigger mit deinem Skript kombinieren, da der iobroker ja nicht drei Stunden-Backups macht, er kann die Energieversorgung dann übernehmen, wenn er wieder on ist.
-
@mading schalte doch einfach 1 oder 2 Stunden vor deinem Backup per cron die Steckdose an, dann ist genug Zeit zum laden bis zum Backup.
anders gefragt, warum funktioniert die Logik des Adapters nicht während deines Backups? -
@crunchip ich stoppe iobroker während des Backups, um sicher zu gehen, dass es konsistent ist. Das Backup mache ich mit dd.
-
@mading Außerhalb der drei Stunden macht das Skript das du bisher hattest seinen Dienst. Aber @Meister-Mopper hat recht. Schalte doch den Strom ein bevor ioBroker gestoppt wird und nach dem Neustart einfach wieder aus. Dann ist das Tablet genau während des Backup versorgt.
-
@mading
Was machst Du falsch:- Die Zeitbedingung passt nicht. Der Baustein
Zeit zwischen A und B
erwartet das A < B. Diese Regel verletzt du in deinem Falls. Besser wäre hier gewesen:nicht
Zeit zwischen 0:00 und 3:00 Uhr
- die zusätzliche Abfrage im Sonst-Falls ist unnötig, ein "Sonst" hätte gereicht (wenn das Falls denn ok gewesen wäre.
- Die Falls Bedingung wird nur beim Start des Skriptes überprüft, sprich welchen Zweig der Bedingung du ausführst hängt nur davon ab wann das Skript gestartet wird.
- Die Variable
BatterieLevel
ist unnötig. Du kannst an Stelle dieser Variablen den Baustein aus dem Trigger-Bereich nutzen, der mit "Object ID" vorbelegt ist, sofern du diesen auf "Wert" umstellst. - Die Sondermeldung bei Batterie < 5 % ist ungünstig in einem
sonst Falls
verbaut. Das führt dazu das wenn die Batterie unter 5% und die Ladesteckdose noch aus ist keine Warnmeldung das die Batterie so niedrig ist ausgegeben wird Ich würde auf eine gesonderte Meldung verzichten und statt dessen den Text in der Meldung über Bausteine aus dem Textbereich so zusammen setzen:
erstelle Text aus
Vis Tablett Batterie auf
BatterieLevel
%. Schalte Strom ein.
Dabei hat der Erstelle Text aus Baustein 3 Knoten an denen die 3 folgenden Bausteine angedockt sind.
Generell gilt:
Trigger (auch Cron Trigger) machen hinter Falls Abfragen nur in Sonderfällen Sinn. Meistens ist es besser, den Trigger allgemein zu definieren und mit einer Falls Abfrage innerhalb des Triggers Zusatzbedingungen (wie die Uhrzeit) abzuprüfen.Was du brauchst:
-
Im Trigger eine Abfrage auf die Uhrzeit, die verhindert das die Steckdose zwischen 0 und 3 Uhr abgeschaltet wird.
-
Einen cron Trigger, der die Steckdose um 0:00 Uhr auf jeden Fall einschaltet.
A.
p.s. Ich hasse Autokorrektur, insbesondere wenn sie verschlimmbessert. - Die Zeitbedingung passt nicht. Der Baustein