NEWS
Sleeptimer mit Countdown
-
Gibt es eine Möglichkeit einen Sleeptimer in Node-Red zu realisieren und einen Countdown in Vis darzustellen?
Hier mal mein Ansatz:
~~http://www.a-flow.de/bilder/timer1.jpg" />
~~http://www.a-flow.de/bilder/timer2.jpg" />
Der Code im
! [
! {
! "id": "66aeffbc.22a79",
! "type": "delay",
! "z": "7ecc9457.f59cbc",
! "name": "30 Minuten verzögern",
! "pauseType": "delay",
! "timeout": "3",
! "timeoutUnits": "seconds",
! "rate": "1",
! "rateUnits": "second",
! "randomFirst": "1",
! "randomLast": "5",
! "randomUnits": "seconds",
! "drop": false,
! "x": 339,
! "y": 82,
! "wires": [
! [
! "34cad756.0c1138"
! ]
! ]
! },
! {
! "id": "34cad756.0c1138",
! "type": "ioBroker out",
! "z": "7ecc9457.f59cbc",
! "name": "Steckdose-Küchenlicht.STATE",
! "topic": "hm-rpc.0.LEQ0475700.1.STATE",
! "ack": "false",
! "autoCreate": "false",
! "x": 625,
! "y": 82,
! "wires": []
! },
! {
! "id": "e3c4a37b.baee8",
! "type": "ioBroker in",
! "z": "7ecc9457.f59cbc",
! "name": "_30minuten",
! "topic": "node-red.0._30minuten",
! "payloadType": "value",
! "onlyack": "",
! "func": "all",
! "gap": "",
! "x": 108,
! "y": 83,
! "wires": [
! [
! "66aeffbc.22a79"
! ]
! ]
! },
! {
! "id": "7006e5c1.7b0d5c",
! "type": "delay",
! "z": "7ecc9457.f59cbc",
! "name": "60 Minuten verzögern",
! "pauseType": "delay",
! "timeout": "60",
! "timeoutUnits": "minutes",
! "rate": "1",
! "rateUnits": "second",
! "randomFirst": "1",
! "randomLast": "5",
! "randomUnits": "seconds",
! "drop": false,
! "x": 338,
! "y": 152,
! "wires": [
! [
! "151f3d73.cac1b3"
! ]
! ]
! },
! {
! "id": "151f3d73.cac1b3",
! "type": "ioBroker out",
! "z": "7ecc9457.f59cbc",
! "name": "Steckdose-Küchenlicht.STATE",
! "topic": "hm-rpc.0.LEQ0475700.1.STATE",
! "ack": "false",
! "autoCreate": "false",
! "x": 624,
! "y": 152,
! "wires": []
! },
! {
! "id": "9569dfee.a697d",
! "type": "ioBroker in",
! "z": "7ecc9457.f59cbc",
! "name": "_60minuten",
! "topic": "node-red.0._60minuten",
! "payloadType": "value",
! "onlyack": "",
! "func": "all",
! "gap": "",
! "x": 107,
! "y": 153,
! "wires": [
! [
! "7006e5c1.7b0d5c"
! ]
! ]
! }
! ]Vg
Andi~~~~
-
Sehr schöne mobile View! Kannst du mehr zeigen?
Pix
-
Gefällt mir auch sehr gut!
Gesendet von meinem iPhone mit Tapatalk
-
@pix und simpixo: Ich freue mich, dass euch meine View gefällt. Die Oberfläche und Möglichkeiten von Homematic haben mich einfach nur genervt. Vor ein paar Tagen habe ich mich dann an ioBroker gewagt und das sind jetzt meine ersten Gehversuche. Sobald es etwas ausgereifter ist, veröffentliche ich es sehr gerne hier im Forum.
Bei dem Timer habe ich mich jetzt für einen Kreis entschieden.
~~http://www.a-flow.de/bilder/timer3.jpg" />
Bei der technischen Umsetzung hapert es allerdings sehr. Es wäre schön, wenn mir da jemand unter die Arme greift… Bei einem Klick auf 30 Min oder 60 Min soll der Timer starten und ein Countdown runterlaufen. Visuell soll der Countdown über den Kreis dargestellt werden. Bei einem erneuten Klick auf einen der beiden Buttons soll der Timer gestoppt werden. Klickt man anschließend wieder auf einen der Buttons soll der Timer wieder gestartet werden.~~
-
Hallo Andi,
ich habe mal schnell ein Skript von mir umgebogen. Es ist noch nicht ganz so, wie du es willst. Kann aber nicht mehr weitermachen, Familie meckert
Vier Widgets:
!
[{"tpl":"tplHqCircle","data":{"visibility-cond":">","visibility-val":"0","oid":"javascript.2.Countdown.Sleeptimer.countdown_seconds","min":"0","max":"{javascript.2.Countdown.Sleeptimer.countdown_seconds}","step":"1","displayPrevious":true,"readOnly":true,"unit":" s","visibility-oid":"","name":"Countdown","caption":"bis zur Aktivierung","hideNumber":false,"color":"#ffffff","thickness":"0.15","cursor":"","bgcolor":"#f00f36","linecap":true,"anticlockwise":false,"oid-working":"javascript.2.Countdown.Sleeptimer.countdown_seconds","oid-signal":"","angleArc":"360","angleOffset":"0","comment":"","digits":"0","is_comma":"true","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false},"style":{"left":"823px","top":"433px","width":"200px","height":"200px","z-index":"80","text-align":"center","color":"#e7f5f9","font-family":"","font-style":"","font-weight":"","font-size":"","background-color":"rgba(0,140,200,1)","border-radius":"490px"},"widgetSet":"hqwidgets"},{"tpl":"tplValueStringRaw","data":{"oid":"javascript.2.Countdown.Sleeptimer.countdown","visibility-cond":"==","visibility-val":1,"signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false},"style":{"left":"1032px","top":"475px","z-index":"20","color":"white","width":"137px","height":"32px"},"widgetSet":"basic"},{"tpl":"tplJquiButtonState","data":{"oid":"javascript.2.Countdown.Sleeptimer.trigger30min","visibility-cond":"==","visibility-val":1,"buttontext":"30","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"value":"true"},"style":{"left":"1043px","top":"536px"},"widgetSet":"jqui"},{"tpl":"tplJquiButtonState","data":{"oid":"javascript.2.Countdown.Sleeptimer.trigger60min","visibility-cond":"==","visibility-val":1,"buttontext":"60","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"value":"true"},"style":{"left":"1043px","top":"581px"},"widgetSet":"jqui"}] !
Skript:
! ````
/* Countdown
! 01.08.2016 pix
! */
! var interval = null;
var countdown = 60 * 1000; // 60min * 60s * 1000ms
! createState('Countdown.Sleeptimer.countdown', seconds2text(countdown), {name: 'Sleeptimer Countdown / Restzeit', type: 'string'});
createState('Countdown.Sleeptimer.countdown_seconds', countdown, {name: 'Sleeptimer Countdown / Restzeit in s', type: 'number', def: countdown});
createState('Countdown.Sleeptimer.afterCount', {name: 'Sleeptimer Countdown / afterCount', type: 'boolean', def: false});
createState('Countdown.Sleeptimer.countTrigger', {name: 'Sleeptimer Countdown / countTrigger', type: 'boolean', def: false});
! var idCountdown = 'javascript.'+ instance +'.Countdown.Sleeptimer.countdown',
idCountdown_sec = 'javascript.'+ instance +'.Countdown.Sleeptimer.countdown_seconds',
idAfterCount = 'javascript.'+ instance +'.Countdown.Sleeptimer.afterCount',
idTrigger = 'javascript.'+ instance +'.Countdown.Sleeptimer.countTrigger';
! // SPEZIFISCHE UMSETZUNG für a-flow
createState('Countdown.Sleeptimer.trigger30min', {name: 'Sleeptimer 30min Timer', type: 'boolean', def: false});
createState('Countdown.Sleeptimer.trigger60min', {name: 'Sleeptimer 60min Timer', type: 'boolean', def: false});
! var id30min = 'javascript.'+ instance +'.Countdown.Sleeptimer.trigger30min',
id60min = 'javascript.'+ instance +'.Countdown.Sleeptimer.trigger60min';
! // Countdown
! function seconds2text(_seconds) {
var sec_num = parseInt(_seconds, 10); // don't forget the second param
var hours = Math.floor(sec_num / 3600);
var minutes = Math.floor((sec_num - (hours * 3600)) / 60);
var seconds = sec_num - (hours * 3600) - (minutes * 60);
! var time;
if (hours > 0) {
// if (hours < 10) {hours = "0" + hours;}
if (minutes < 10) {minutes = "0" + minutes;}
if (seconds < 10) {seconds = "0" + seconds;}
// time = hours + ' Stunden, ' + minutes + ' Minuten und ' + seconds + ' Sekunden'; // original
time = hours + ':' + minutes + ':' + seconds + ' Std.';
} else if (minutes > 0) {
if (minutes < 10) {minutes = "0" + minutes;}
if (seconds < 10) {seconds = "0" + seconds;}
// time = minutes + ' Minuten und ' + seconds + ' Sekunden'; // original
time = minutes + ':' + seconds + 'min';
} else {
if (seconds < 10) {seconds = "0" + seconds;}
// time = seconds + ' Sekunden'; // original
time = seconds + ' s';
}
return time;
}
! function count() {
// remove trigger
if (getState(idTrigger).val) setState(idTrigger, false);
! // Abbruch bei Knopfdruck
if ( getState(id30min).val || getState(id60min).val ) {
setState(idCountdown, 0);
setState(idAfterCount, false);
clearInterval(interval);
interval = null;
}if (countdown > 1) { setState(idCountdown_sec, parseInt(countdown,10)); setState(idCountdown, seconds2text(--countdown)); } else { clearInterval(interval); interval = null; setState(idCountdown_sec, 0); setState(idCountdown, seconds2text(0)); setState(idAfterCount, true); }
}
! on(idTrigger, function (obj) {
if (obj.state.val) {
setState(idCountdown_sec, parseInt(countdown,10));
setState(idCountdown, seconds2text(countdown));
setState(idAfterCount, false);
if (!interval) {
count();
interval = setInterval(count, 1000);
}
}
});
// wenn idAfterCount true wird, kann eine Aktion ausgeführt werden
on(idAfterCount, function (obj) {
if (obj.state.val) {
log('Countdown abgelaufen');
// weitere Aktionen einfügen
}
});
! // Taster für VIS
! createState('Countdown.Sleeptimer.trigger30min', {name: 'Sleeptimer 30min Timer', type: 'boolean', def: false});
createState('Countdown.Sleeptimer.trigger60min', {name: 'Sleeptimer 60min Timer', type: 'boolean', def: false});
! var id30min = 'javascript.'+ instance +'.Countdown.Sleeptimer.trigger30min',
id60min = 'javascript.'+ instance +'.Countdown.Sleeptimer.trigger60min';
! function sleeptimer(dauer) {
if (interval) { // wenn Countdown schon läuft
clearInterval(interval);
interval = null;
setState(idCountdown_sec, parseInt(0,10));
setState(idCountdown, seconds2text(0));
log(dauer + 'min Sleeptimer gestoppt');
} else {
countdown = dauer * 60; // Dauer festlegen (in Minuten)
setState(idTrigger, true); // Countdown starten
log(dauer + 'min Sleeptimer gestartet');
}
}
! on(id30min, function (obj) { // bei jeder Änderung
if (obj.state.val) {
sleeptimer(30); // 30min Zeit übergeben
setStateDelayed(id30min, false, 250); // nach viertel Sekunde wieder auf false
}
});
! on(id60min, function (obj) { // bei jeder Änderung
if (obj.state.val) {
sleeptimer(60); // 60min Zeit übergeben
setStateDelayed(id60min, false, 250); // nach viertel Sekunde wieder auf false
}
});
! ````
Kurz erklärt, wie es läuft:
Die beiden Knöpfe 30 und 60 sind booleans und werden bei Druck auf true gesetzt (danach automatisch nach einer Viertlsekunde wieder auf false). Wenn einer von beiden auf true geht, wird eine Funktion (sleeptimer) gestartet und entweder 30 oder 60 mit übergeben.
Wenn der Countdown schon läuft, wird er gestoppt und auf 0 gesetzt (interval = null), wenn er nicht läuft, wird er auf 30 bzw. 60min gesetzt und gestartet.
Die Restzeit wird im Countdown Widget noch in Sekunden angezeigt. Das schaffe ich heut nicht mehr zu ändern. Ein Widget daneben zeigt die Zeit formatiert [hh:][mm:]ss
Ich hoffe, du meintest mit "Anhalten" auch wirklich den Reset auf 0. Denn Anhalten und dann weiterlaufen lassen, kann ich (noch) nicht.
Dieser Fehler ist bekannt:
Countdown.Sleeptimer.countdown: "number". Please fix, while deprecated and will not work in next versions.
Nur wenn der Countdown regulär abgelaufen ist, wird das Objekt idAfterCount auf true gesetzt. Im Skript ist schon eine passende Subscription vorbereitet. Da hinein kannst du dann eine Aktion packen, zum Beispiel setState('Multimedia', false);
Das Skript läuft in allen Javascript Instanzen, die Widgets sind auf Instanz 2 eingestellt.
Probier mal aus!
Gruß
Pix
-
@Pix: Genial… Vielen Dank für Deine Mühe!
Ich werde das heute Abend mal testen. Wo und wie muss ich das Skript speichern? Ich habe bisher immer nur mit Node-Red gearbeitet und von Java habe ich keine Ahnung.
Gesendet von meinem F5121 mit Tapatalk
-
das Vorgehen ist hier auf der Javascript-Adapter-Doku auf iobroker.net beschrieben:
http://www.iobroker.net/docu/?page_id=156&lang=de
Gruß
Pix
-
Daumen hoch - gleich geklaut und eingebaut.
Funktioniert perfekt. Ich weiß noch nicht wofür, aber ich werde es sicher irgendwo brauchen.
-
Das freut mich sehr!
Man kann einiges damit machen:
- automatisch abschalten lassen (eine Art https://de.wikipedia.org/wiki/Totmanneinrichtung) * Ventilator
* Lötkolben * Fernseher (Begrenzung für Kinder) * Bügeleisen * Zeit am Computer
- sich erinnern lassen
-
wird vom Wecker gestartet und läuft rückwärts bis zum Aufstehen (Sleeptimer eben)
-
Arbeit erledigen und Restzeit als Pause nutzen
-
Zeit bis Sonnenuntergang (wenn bei astro mit shift -60min / -30min gestartet)
-
Einige der Anwendungen passen nicht so ganz. Wenn man den Timer anhalten kann, zählt er ggf. auch nicht genau bis 0. Das lässt sich aber alles einstellen.
Ich habe beim Start meiner alten Spülmaschine zurückzähöen lassen. Die lief immer gleich lang. Die neue hat den Countdown im Display.
Gruß
Pix
-
-
Ich habe das Skript zum Laufen gebracht und das Widget importiert. Im Widget habe ich dann auch die Verknüpfungen zum Skript erneuert. Leider funktioniert das Teil bei mir dennoch nicht…
Hat da jemand eine Idee?
-
Hallo,
Ich komme da absolut nicht weiter. Kann mir bitte jemand helfen…
Danke!
Gesendet von meinem F5121 mit Tapatalk
-
würde dir ja gerne helfen, zumal es bei mir direkt funktionierte.
Aber ohne zu wissen was genau nicht funktioniert ist das schwer.
Was genau funktioniert denn nicht? gibt es Einträge im Log?
Eventuell helfen auch Screenshots weiter?
-
Exportiere mal dein Widget hier rein.
-
Hier meine Widgets… Sie unterscheiden sich aber fast gar nicht von deinen!
! ````
[{"tpl":"tplHqCircle","data":{"visibility-cond":">","visibility-val":"0","oid":"javascript.0.Countdown.Sleeptimer.countdown_seconds","min":"0","max":"javascript.0.Countdown.Sleeptimer.countdown_seconds","step":"1","displayPrevious":true,"readOnly":true,"unit":" s","visibility-oid":"","name":"Countdown","caption":"bis zur Aktivierung","hideNumber":false,"color":"#ffffff","thickness":"0.15","cursor":"","bgcolor":"#f00f36","linecap":true,"anticlockwise":false,"oid-working":"javascript.0.Countdown.Sleeptimer.countdown_seconds","oid-signal":"","angleArc":"360","angleOffset":"0","comment":"","digits":"0","is_comma":"true","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false},"style":{"left":"450px","top":"170px","width":"200px","height":"200px","z-index":"80","text-align":"center","color":"#e7f5f9","font-family":"","font-style":"","font-weight":"","font-size":"","background-color":"rgba(0,140,200,1)","border-radius":"490px"},"widgetSet":"hqwidgets"},{"tpl":"tplValueStringRaw","data":{"oid":"javascript.0.Countdown.Sleeptimer.countdown","visibility-cond":"==","visibility-val":1,"signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false},"style":{"left":"650px","top":"210px","z-index":"20","color":"white","width":"137px","height":"32px"},"widgetSet":"basic"},{"tpl":"tplJquiButtonState","data":{"oid":"javascript.0.Countdown.Sleeptimer.trigger30min","visibility-cond":"==","visibility-val":1,"buttontext":"30","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"value":"true"},"style":{"left":"670px","top":"270px"},"widgetSet":"jqui"},{"tpl":"tplJquiButtonState","data":{"oid":"javascript.0.Countdown.Sleeptimer.trigger60min","visibility-cond":"==","visibility-val":1,"buttontext":"60","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"value":"true"},"style":{"left":"670px","top":"310px"},"widgetSet":"jqui"}]Das Java-Skript habe ich unter folgendem Pfad abgelegt: /global/sleeptimer/. Im Skript selbst habe ich gar nichts geändert.
-
eines ganz schnell vorweg…
Scripte die unter "global" liegen werden an alle anderen scripte angehängt. Es dort abzulegen ist sicher "suboptimal"
-
sieht das bei dir unter Objekte –> Javascript.0 (außer den bose-Punkten) genauso aus?
-
und das script ist auch gestartet?
-
@htrecksler: Danke für Deine Mühe! Ich habe das Skript jetzt von GLOBAL nach COMMON gepackt. Alles andere, was du geschrieben hast, habe ich kontrolliert. Was mir nur aufgefallen ist, dass mir der Unterordner "1" im Ordner "Countdown" fehlt. Bei mir ist da lediglich der Ordner "Sleeptimer" aufgeführt.
LEIDER läuft der Countdown immer noch nicht
-
@htrecksler: Danke für Deine Mühe! Ich habe das Skript jetzt von GLOBAL nach COMMON gepackt. Alles andere, was du geschrieben hast, habe ich kontrolliert. Was mir nur aufgefallen ist, dass mir der Unterordner "1" im Ordner "Countdown" fehlt. Bei mir ist da lediglich der Ordner "Sleeptimer" aufgeführt.
LEIDER läuft der Countdown immer noch nicht
`
Hallo Pix,
super Arbeit.
Dieser Unterordner wurde bei mir auch nicht angelegt. Versuche ich nacher mal per Hand. Unter Vis läuft soweit der Counter.
Würde evt. die Möglichkeit bestehen einen 3 ten Button wo eine individuelle Zeit möglich ist einzufügen?
mfg
Armin