individueller Countdown-Timer möglich?

Haussteuerung mittels mediola

Moderator: Co-Administratoren

Antworten
Kurzschlusselektriker
Beiträge: 101
Registriert: 22.09.2014, 15:58
Hat sich bedankt: 2 Mal

individueller Countdown-Timer möglich?

Beitrag von Kurzschlusselektriker » 18.04.2017, 21:46

Hallo zusammen,
ich würde gerne für einen Aktor (HM-LC-Sw1PBU-FM oder HM-LC-Sw1-FM) eine Art individuellen Countdown-Timer in Mediola Neo erstellen.
Ziel des ganzen soll in etwa sein, das ich bspw. in ein Textfeld welches mit "min" beschriftet ist, eine Zahl eintippe/auswähle, dann auf "Start" gehe und der entsprechende Aktor dann für eben diese Zeit aktiv ist. Ist der Timer abgelaufen, schaltet sich der Aktor wieder aus.
Ist sowas möglich, am besten auch dann mit einer "Live-Anzeige" der Restminuten?

Grüße
Kurzschlusselektriker

Gerti
Beiträge: 3024
Registriert: 28.01.2016, 18:06
System: CCU
Wohnort: Hürth
Hat sich bedankt: 16 Mal
Danksagung erhalten: 268 Mal

Re: individueller Countdown-Timer möglich?

Beitrag von Gerti » 19.04.2017, 09:02

Hi!

Kannst Du mit dem CUxD Timer machen.

Gruß,
Gerti

Cash
Beiträge: 1184
Registriert: 09.01.2016, 17:42
Wohnort: Sauerland
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Re: individueller Countdown-Timer möglich?

Beitrag von Cash » 19.04.2017, 09:25

Mit der Liveanzeige wird das wohl eher schwierig.

Der Timer ist mit Cuxd und ein paar Zeilen Script möglich. Ich nutze ein Textfeld als Uhrzeit zu der Morgens das Licht im Schlafzimmer angehen soll. Mein Lichtwecker...

Kurzschlusselektriker
Beiträge: 101
Registriert: 22.09.2014, 15:58
Hat sich bedankt: 2 Mal

Re: individueller Countdown-Timer möglich?

Beitrag von Kurzschlusselektriker » 19.04.2017, 10:23

Alles klar - Danke für die Antworten. Dann werde ich mich wohl mal mit CUxD beschäftigen (müssen)....

Fonzo
Beiträge: 6722
Registriert: 22.05.2012, 08:40
System: CCU
Hat sich bedankt: 25 Mal
Danksagung erhalten: 479 Mal

Re: individueller Countdown-Timer möglich?

Beitrag von Fonzo » 19.04.2017, 11:31

Da NEO nach wie vor noch nicht mal die Eingabe in ein Formularfeld unterstützt geht das nur wenn Du Dir eine eigene Webseite baust am besten mit jquery oder ähnlichem. Diese kannst Du als Webseitenelement einbinden und dort dann auch etwas Eingeben. Die Webseite triggert dann den Aktor. Entweder bastelt Du Dir so was selber oder Du nutzt dafür eine Hausautomationssoftware dann hast Du zumindest etwas weniger Arbeit.

Noch einfacher geht das natürlich mit alternativen Visualisierungslösungen die einfach so was banales wie eine Text / Zahleneingabe in ein Feld unterstützten und damit eine Variable direkt verändert werden kann, dann ist der Umweg über eine eigene Webseite nicht notwendig.

MiBu
Beiträge: 18
Registriert: 11.01.2017, 18:24
Wohnort: Sassenburg bei Wolfsburg
Hat sich bedankt: 2 Mal

Re: individueller Countdown-Timer möglich?

Beitrag von MiBu » 20.04.2017, 08:01

Hallo,
Ja das ist möglich.
habe vor einiger Zeit so etwas ähnliches schon einmal umgesetzte.
Über einen Nummernblock 0-9, Stern und Raute.
Jede Nummer erweitert eine Variable die auch auf dem Tablet/Handy/NEO ausgegeben wird.
Stern löscht. Raute ist wie Enter und soll eine Auswertung anstoßen. einen Aktor (HM-LC-Sw1PBU-FM oder HM-LC-Sw1-FM).

Nach der Auswertung wird der Variable gelöscht.
In deinem Fall würde ich die Variable an einen Aktor (HM-LC-Sw1PBU-FM oder HM-LC-Sw1-FM) übergeben. Das über eine eigens Programmierte Taste auf dem Tablet/Handy/NEO ausgelöst wird.

Aufwand: Mindestens 12 Homematic Programme für die Tasten. Mindestens eine Systemvariable erstellen. Auf NEO 12 Button, Nummernblock 0-9, Stern und Raute und das Anzeigefeld für die Zahlen.

Beispiel:

Code: Alles auswählen

!  -- Taste 0 ---
var x;
object obj = dom.GetObject('code');
x=obj.State(obj.State()+'0');

!  -- Taste 1 ---
var x;
object obj = dom.GetObject('code');
x=obj.State(obj.State()+'1');
… und so weiter.

Das Programm taste_raute ist da schon etwas schwieriger:

Code: Alles auswählen

string alarmcode="112233";
var x;
object obj = dom.GetObject('code');
!! Beispiel für Alarm aus -----------------------------------
if(obj.State()==alarmcode) 
{
x=obj.State('');
dom.GetObject("Alarmanlage").State(off);
}
Für Dein Projekt müsstest du das ON_TIME Objekt mit der Variable füllen und ausführen.
Beispiel:

Code: Alles auswählen

dom.GetObject("BidCos-RF.IEQxxxxxxx:1.ON_TIME").State(45);
dom.GetObject("BidCos-RF.IEQxxxxxxx:1.STATE").State(true);
In diesem Beispiel ist der Aktor für 45 Sekunden eingeschaltet.

Sorry, für die sehr kurze Anleitung. Werde später mal eine Anleitung dazu schreiben und das unter den Projektvorstellungen einstellen.

Gruß
Michael
über 100 angelernten Komponente, Mediola NEO, RaspberryPi 3, IOBroker, VIS

33zdenko
Beiträge: 343
Registriert: 21.12.2013, 16:50
Danksagung erhalten: 4 Mal

Re: individueller Countdown-Timer möglich?

Beitrag von 33zdenko » 23.04.2017, 12:30

Hallo
Da MiBu schon die idee mit ccu umgesetzt hat, habe ich einwenig mit dem Automation Manager von Neo gespielt und das mit dem Keypad umgesetzt. Der zähler ist auch im neo live zu sehen.
Ich habe Keypad eingesetzt, möglich wäre auch zwei buttons zu verwenden, +/- und die Minuten einzustellen in schritten.
Was man braucht sind:
2 variablen vom typ string auf dem Gateway erzeugen, zuerst einen raum anlegen mit dem namen CountdownTimer
dann die variable mit dem namen MinutenTimer vom typ string
sofort nach anlegen dieser variable , einen button im neo anlegen, aktion Variable MinutenTimer wert setzen 0 (null)

und noch eine hilfsvariable mit dem namen TasteTimer.
so:
Bildschirmfoto 2017-04-23 um 11.45.52.png
Bildschirmfoto 2017-04-23 um 11.45.52.png (22.89 KiB) 10711 mal betrachtet
Dann brauchen wir eine Makro gruppe mit dem Namen Keypad
und dort die makros von 0-9 sowie * und #
zum testen habe ich nur die keys 0,1,2 stern und raute angelegt, wer das ganze will muss die makros dann erweitern, sowie den task auch, dazu aber später noch.
so z.b.
Bildschirmfoto 2017-04-23 um 11.53.10.png
Die taste stern setzt die minuten auf null, falls man sich vertippt hat, und sendet noch einen http befehl auf neo server, welcher den task mit dem namen timer auf inaktiv schaltet.
und sieht so aus, immer die im des neo servers anpassen

Code: Alles auswählen

http://192.168.1.20:8088/tm/http?timer=off&auth=Passwort
im makro für die stern taste gibt es diese befehle:
variable TasteTimer auf on
und http befehl:

Code: Alles auswählen

http://192.168.1.20:8088/tm/http?timer=on&auth=Passwort
für das makro raute taste gibt es die folgenden befehle
variable TasteTimer auf on
den http befehl

Code: Alles auswählen

http://192.168.1.20:8088/tm/http?timer=on&auth=Passwort
und den eigentlichen befehl den man schalten will, also schalter oder was auch immer auf on
bei mir ist das die variable on/off auf on
Bildschirmfoto 2017-04-23 um 13.12.00.png





die tasten 0-2 bzw. wer den ganzen keypad erweitern will sehen so aus
für 0:
variable TasteTimer auf 0 setzen
und http befehl:

Code: Alles auswählen

http://192.168.1.20:8088/tm/http?taste=0&auth=Passwort
mit dem http befehl wird im task reagiert
dazu noch das script taste0:

Code: Alles auswählen

getDeviceStatus(
    "CountdownTimer",
    "MinutenTimer",
    {"value":"state"},

    function(err, status) {
        if(!err) {
           
               if (status == "0") {
                  status = '';
               }  
               status = status + '0';
              
                    executeDeviceCommand(
                        "CountdownTimer",
                        "MinutenTimer",
                        {"value":"setValue","ext":status},
                        function(err) {
                        err && console.error(err);
                        }
                    );
       
            
        }
    }
);
für jede zahl braucht man einen script, nur in der zeile

Code: Alles auswählen

status = status + '0';
tauscht man die 0 gegen die tasten nummer, z.b. für taste 1 wäre die zeile dann

Code: Alles auswählen

status = status + '1';
und legt neues script mit dem namen taste1 bzw. bis 9

Dann legen wir einen neuen task mit dem namen Keypad der dann so aussieht
Bildschirmfoto 2017-04-23 um 12.56.07.png
in sobald block bei http befehlen für tasten so eintragen

Code: Alles auswählen

http://192.168.1.20:8088/tm/http?taste=0&auth=Passwort
also für alle 9 nummerntasten musste dann im sobald block ein http stehen, und dann nur taste=0 mit der nummer ersetzen
Bildschirmfoto 2017-04-23 um 13.48.38.png
Bildschirmfoto 2017-04-23 um 13.48.38.png (21.85 KiB) 10693 mal betrachtet
bei timer=on und timer off folgendes eintragen

Code: Alles auswählen

http://192.168.1.20:8088/tm/http?timer=on&auth=Passwort

Code: Alles auswählen

http://192.168.1.20:8088/tm/http?timer=off&auth=Passwort
IMMER die ipadresse eueren neo server

für weitere tasten 3-9 muss man dementsprechend die falls blöcke einfügen, nach taste 2
für diese dann die scripte taste3 - taste9 anlegen und im falls blöcken in dann teil zuweisen.



unten bei abfrage der variable TasteTimer auf den wert on ist http befehl (GET) mit folgender url drin

Code: Alles auswählen

http://192.168.1.20:8088/cmd?XC_FNC=setTaskActive&id=5&active=true
und wird gesendet sobald man die raute taste klickt, dann wird die minutenzahl übernommen und der task timer aktiviert

bei abfrage auf off wert der TasteTimer wird diese http befehl eingefügt

Code: Alles auswählen

http://192.168.1.20:8088/cmd?XC_FNC=setTaskActive&id=5&active=false
WICHTIG: die id= anpassen, diese ist die id des tasks timer, bei mir ist das die 5, bei euch hängt es von anzahl der tasks im AM
das kann man hier sehen:
bei task übersicht:
Bildschirmfoto 2017-04-23 um 13.05.45.png
Bildschirmfoto 2017-04-23 um 13.05.45.png (9.07 KiB) 10698 mal betrachtet



Dieser task, timer sieht so aus, also den so wie im bild anlegen mit dem namen timer:
Bildschirmfoto 2017-04-23 um 12.06.47.png
also in sobald block benutzen wir das neue interval block, es zählt die zeit und immer wenn die angegebene zeit vergeht, führt das was im dann block ist.
und hier ist im dann block das script mit dem namen MinutenDown, also ein script mit dem namen erstellen und diesen code einfügen:

MinutenDown

Code: Alles auswählen

// diese funktion sendet ein http befehl und wird unten benutzt aus dem script einen task activ/inactiv zu schalten
const getContent = function(url) {
  
  return new Promise((resolve, reject) => {
    
    const lib = url.startsWith('https') ? require('https') : require('http');
    const request = lib.get(url, (response) => {
      
      if (response.statusCode < 200 || response.statusCode > 299) {
         reject(new Error('Failed to load page, status code: ' + response.statusCode));
       }
      
      const body = [];
      
      response.on('data', (chunk) => body.push(chunk));
     
      response.on('end', () => resolve(body.join('')));
    });
    
    request.on('error', (err) => reject(err));
    });
};



// inhalt der Variable MinutenTimer geprüft
getDeviceStatus(
    "CountdownTimer",  //raumname
    "MinutenTimer",  //variablenname
    {"value":"state"},

    function(err, status) {
        if(!err) {
           
            //minuten zahl wird jede 60 sekunden um 1 veringert
            status = parseFloat( status ) - 1;   
            
             if  (status === 0) {
                 // hier ist die aufruf der funktion oben um den task mit id=5 auf inaktiv zu schalten, sobald die minuten auf null sind 
                 getContent('http://192.168.1.20:8088/cmd?XC_FNC=setTaskActive&id=5&active=false')
                .then((html) => console.log(html))
                .catch((err) => console.error(err));
                // hier wird der schalter oder variable wieder auf off geschaltet wenn die zeit abgelaufen ist
                // in meinem fall einfach eine variable vom typ on/off
                
                executeDeviceCommand(
                    "mediola",
                    "ONOFF [0A]",
                    {"value":"off"},
                    function(err) {
                        err && console.error(err);
                    }
                );
             
             
             }
                        //hier werden die minuten wieder in die Variable MinutenTimer geschrieben
                        executeDeviceCommand(
                        "CountdownTimer",
                        "MinutenTimer",
                        {"value":"setValue","ext":status},
                        function(err) {
                        err && console.error(err);
                        }
                    );
       
            
        }
    }
);
diesen teil von code ersetzt man mit einem eigenem codesnippet aus dem script editor, je nach dem was geschaltet worden ist in dem makro für raute taste (oben bei mir war es die variable ON/OFF

Code: Alles auswählen

// hier wird der schalter oder variable wieder auf off geschaltet wenn die zeit abgelaufen ist
                // in meinem fall einfach eine variable vom typ on/off
                
                executeDeviceCommand(
                    "mediola",
                    "ONOFF [0A]",
                    {"value":"off"},
                    function(err) {
                        err && console.error(err);
                    }
                );
             
und den snippet erzeugt man dan so:
am besten neues script erstellen, spaichern braucht man nicht
und den erzeugten code, oben ersetzen
Bildschirmfoto 2017-04-23 um 13.21.50.png

so den task abspeichern und alles auf neo server übertragen.

Im neo legt man jetzt einen Keypad und einen text mit dem status der variable MinutenTimer, jeder taste des keypads einen makro als aktion zuweisen
wie im bld
Bildschirmfoto 2017-04-23 um 13.29.02.png
Bildschirmfoto 2017-04-23 um 13.28.51.png
wenn man die fernbedienung startet und z.b. 1 klickt und dann nochmal 1, werden dann 11 angezeigt, dann die raute klickt wird der countdown gestartet und nach eine minute musst die anzeige dann
10 sein bis auf 0, bei null wird dann das entsprechende auf off gehen.
Wie gesagt das was man schalten will muss in dem raute makro auf on geschaltet werden
und dann auf off in MinutenDown script auf off.

Hoffe das ich nicht etwas vergessen habe :)

Kurzschlusselektriker
Beiträge: 101
Registriert: 22.09.2014, 15:58
Hat sich bedankt: 2 Mal

Re: individueller Countdown-Timer möglich?

Beitrag von Kurzschlusselektriker » 24.04.2017, 21:25

Ihr seid der Wahnsinn Jungs!!!!
Tausenddank für die verschiedenen Möglichkeiten. Ich werde mich die Tage mal hinsetzten und versuchen das umzusetzen. Eigentlich dachte ich als ich mir das so überlegt habe, das dies eine gaaanz einfache Sache wäre, aber das da jetzt so ein Programmieraufwand getrieben werden muss, hätte ich im Leben nicht gedacht.

Nochmals vielen vielen Dank für die sehr ausführlichen Beschreibungen incl. Screenshots!!!!

Kurzschlusselektriker

33zdenko
Beiträge: 343
Registriert: 21.12.2013, 16:50
Danksagung erhalten: 4 Mal

Re: individueller Countdown-Timer möglich?

Beitrag von 33zdenko » 27.04.2017, 07:55

Kurzschlusselektriker hat geschrieben:aber das da jetzt so ein Programmieraufwand getrieben werden muss, hätte ich im Leben nicht gedacht.
wäre viel einfacher wenn mediola in der app, eine text eingabe ermöglichen wurde, diese dann in ccu variable oder gateway variable schreiben könnte :)

hier noch einmal einfachere lösung ohne den keypad, mit eingabe der stunden und minuten über buttons im neo:
5 buttons, 2 für minuten und 2 für stunden, die buttons lösen makro aus, ein button um den timer zu starten, nach eingabe von stunden und minuten.
so z.b.
Bildschirmfoto 2017-04-27 um 06.56.47.png
Bildschirmfoto 2017-04-27 um 06.56.47.png (15.07 KiB) 10602 mal betrachtet
2 variablen wie oben in meinem thread
eine makrogruppe mit 5 makros:
min+
min-
std+
std-
start

die makros einzeln:
min+
variable TasteTimer wert setzen min+
http befehl

Code: Alles auswählen

http://192.168.1.20:8088/tm/http?taste=min%2B&auth=Passwort
min-
variable TasteTimer wert setzen min-
http befehl

Code: Alles auswählen

http://192.168.1.20:8088/tm/http?taste=min-&auth=Passwort
std+
variable TasteTimer wert setzen std+
http befehl

Code: Alles auswählen

http://192.168.1.20:8088/tm/http?taste=std%2B&auth=Passwort
std-
variable TasteTimer wert setzen std-
http befehl

Code: Alles auswählen

http://192.168.1.20:8088/tm/http?taste=std-&auth=Passwort
start
schalter licht auf on //der leuchten soll, variable oder was auch immer
http befehl

Code: Alles auswählen

http://192.168.1.20:8088/cmd?XC_FNC=setTaskActive&id=5&active=true
//schaltet einen task aktiv im neo server, id=5 task 5

task 5 ist wieder ein interval von 60 sekunden, der das script aufruft:

MinutenDown script:

Code: Alles auswählen

// diese funktion sendet ein http befehl und wird unten benutzt aus dem script einen task activ/inactiv zu schalten
const getContent = function(url) {
  
  return new Promise((resolve, reject) => {
    
    const lib = url.startsWith('https') ? require('https') : require('http');
    const request = lib.get(url, (response) => {
      
      if (response.statusCode < 200 || response.statusCode > 299) {
         reject(new Error('Failed to load page, status code: ' + response.statusCode));
       }
      
      const body = [];
      
      response.on('data', (chunk) => body.push(chunk));
     
      response.on('end', () => resolve(body.join('')));
    });
    
    request.on('error', (err) => reject(err));
    });
};

// abfrage der gesetzten zeit, stunden und minuten
getDeviceStatus(
    "CountdownTimer",
    "MinutenTimer",
    {"value":"state"},
    function(err, status) {
        if(!err) {
            
            
            var zeit = status.split(':', 2); //Rückgabe der variable MinutenTimer in 2 Teile (arrays) ohne (:) 
            var std = zeit[0]; //stunden teil
            var min = zeit[1]; // minutenteil
            var minZahl = parseFloat( min ); // minuten aus dem string in zahl, um damit zu arbeiten
            var stdZahl = parseFloat( std );
            minZahl = minZahl - 1;
                if (minZahl < 0) {
                    minZahl = 59;  
                    stdZahl = stdZahl - 1;
                        if (stdZahl <= 9) {
                            std = '0' + stdZahl;
                        }
                    std = stdZahl; 
                }
            
            
            zeit = std + ':' + minZahl;
               if (minZahl <= 9) {
                  zeit = std + ':0' + minZahl;
               }  
               
                    if  (zeit == '00:00') { // wenn timer auf 00:00 ankommt ist abgelaufen
                       
                        // hier wird der schalter oder variable wieder auf off geschaltet wenn die zeit abgelaufen ist
                        // in meinem fall einfach eine variable vom typ on/off
                        // für einen schalter hier einen snippet im script einfügen und meinen löschen
                        executeDeviceCommand(
                            "mediola",
                            "ONOFF [0A]",
                            {"value":"off"},
                            function(err) {
                                err && console.error(err);
                            }
                        );
                       
                       
                       
                       
                       
                        // hier ist die aufruf der funktion oben um den task mit id=5 auf inaktiv zu schalten, sobald die minuten auf null sind 
                        // id=9 mit eigenem task id ersetzen
                        getContent('http://192.168.1.20:8088/cmd?XC_FNC=setTaskActive&id=9&active=false')
                        .then((html) => console.log(html))
                        .catch((err) => console.error(err));
                    
                    }
                    
                    
                   
                    // schreibe bei jedem durchlauf die restliche zeit in die variable MinutenTimer
                    executeDeviceCommand(
                        "CountdownTimer",
                        "MinutenTimer",
                        {"value":"setValue","ext":zeit},
                        function(err) {
                        err && console.error(err);
                        }
                    );
       
            
        }
    }
);
dazu ist wichtig bei dem script MinutenDown, den schalter welcher im makro start eingeschaltet wird,
dieses zu ersetzen mit eigenem snippet für den schalter:

Code: Alles auswählen

                        // hier wird der schalter oder variable wieder auf off geschaltet wenn die zeit abgelaufen ist
                        // in meinem fall einfach eine variable vom typ on/off
                        // für einen schalter hier einen snippet im script einfügen und meinen löschen
                        executeDeviceCommand(
                            "mediola",
                            "ONOFF [0A]",
                            {"value":"off"},
                            function(err) {
                                err && console.error(err);
                            }
                        );
so:
Bildschirmfoto 2017-04-27 um 07.49.21.png
Bildschirmfoto 2017-04-27 um 07.49.21.png (16.77 KiB) 10602 mal betrachtet
Bildschirmfoto 2017-04-27 um 07.49.35.png
Bildschirmfoto 2017-04-27 um 07.49.35.png (22.93 KiB) 10602 mal betrachtet
und stat meinem an der stelle einfügen.



der task dazu, die id nach anlegen beachten und im script ersetzen:
Bildschirmfoto 2017-04-27 um 07.16.47.png
Bildschirmfoto 2017-04-27 um 07.16.47.png (18.69 KiB) 10602 mal betrachtet
jetzt scripts anlegen für die tasten/makros:
min+

Code: Alles auswählen

getDeviceStatus(
    "CountdownTimer",
    "MinutenTimer",
    {"value":"state"},
    function(err, status) {
        if(!err) {
            
            
            var zeit = status.split(':', 2); 
            var std = zeit[0]; 
            var min = zeit[1]; 
            var minZahl = parseFloat( min ); 
            minZahl = minZahl + 1;
                if (minZahl > 59) {
                    minZahl = 0;   
                }
            
            
            zeit = std + ':' + minZahl;
               if (minZahl <= 9) {
                  zeit = std + ':0' + minZahl;
               }    
                
              
                    executeDeviceCommand(
                        "CountdownTimer",
                        "MinutenTimer",
                        {"value":"setValue","ext":zeit},
                        function(err) {
                        err && console.error(err);
                        }
                    );
       
            
        }
    }
);
min-

Code: Alles auswählen

getDeviceStatus(
    "CountdownTimer",
    "MinutenTimer",
    {"value":"state"},
    function(err, status) {
        if(!err) {
            
            
            var zeit = status.split(':', 2);  
            var std = zeit[0]; 
            var min = zeit[1]; 
            var minZahl = parseFloat( min ); 
            minZahl = minZahl - 1;
                if (minZahl < 0) {
                    minZahl = 59;   
                }
            
            
            zeit = std + ':' + minZahl;
               if (minZahl <= 9) {
                  zeit = std + ':0' + minZahl;
               }  
              
                    
                
              
                    executeDeviceCommand(
                        "CountdownTimer",
                        "MinutenTimer",
                        {"value":"setValue","ext":zeit},
                        function(err) {
                        err && console.error(err);
                        }
                    );
       
            
        }
    }
);
std+

Code: Alles auswählen

getDeviceStatus(
    "CountdownTimer",
    "MinutenTimer",
    {"value":"state"},
    function(err, status) {
        if(!err) {
            
            
            var zeit = status.split(':', 2); 
            var std = zeit[0]; 
            var min = zeit[1]; 
            var stdZahl = parseFloat( std ); 
            stdZahl = stdZahl + 1;
                if (stdZahl > 23) {
                    stdZahl = 0;   
                }
            
            
            zeit = stdZahl + ':' + min;
               if (stdZahl <= 9) {
                  zeit = '0' + stdZahl + ':' + min;
               }    
                
              
                    executeDeviceCommand(
                        "CountdownTimer",
                        "MinutenTimer",
                        {"value":"setValue","ext":zeit},
                        function(err) {
                        err && console.error(err);
                        }
                    );
       
            
        }
    }
);
std-

Code: Alles auswählen

getDeviceStatus(
    "CountdownTimer",
    "MinutenTimer",
    {"value":"state"},
    function(err, status) {
        if(!err) {
            
            
            var zeit = status.split(':', 2);
            var std = zeit[0]; 
            var min = zeit[1]; 
            var stdZahl = parseFloat( std ); 
            stdZahl = stdZahl - 1;
                if (stdZahl < 0) {
                    stdZahl = 23;   
                }
            
            
            zeit = stdZahl + ':' + min;
               if (stdZahl <= 9) {
                  zeit = '0' + stdZahl + ':' + min;
               }  
              
                    
                
              
                    executeDeviceCommand(
                        "CountdownTimer",
                        "MinutenTimer",
                        {"value":"setValue","ext":zeit},
                        function(err) {
                        err && console.error(err);
                        }
                    );
       
            
        }
    }
);
jetzt noch der task welcher alles steuert:
Bildschirmfoto 2017-04-27 um 07.26.07.png
also im sobald block die http befehle abfragen, welche in makros für min+,min-,std+ und std- eingegeben wurden
z.b. für min+ so:
Bildschirmfoto 2017-04-27 um 07.29.06.png
Bildschirmfoto 2017-04-27 um 07.29.06.png (20.63 KiB) 10602 mal betrachtet
das zeichen + ist der code hier: %2B und ist nur für das zeichen +, das minus zeichen wird normal als - dargestellt und im code auch verwendet, aber ist hier nicht von bedeutung, nur als hinweis

die buttons erstellen wie ganz oben im bild
min+,min-,std+,std- tasten die entsprechenden makros als aktion zuweisen, genauso der start taste, dem textfeld den status der variable MinutenTimer zuweisen

so jetzt befor man ales testet, noch einen button erstellen, um die variable MinutenTimer auf 00:00 zu stellen, einmalig, diesen button kannst du später löschen
remote starten diesen button klicken, dann musste der status der variable jetzt auf 00:00 stehen
nun kann man mit den buttons minuten, bzw. stunden einstellen...bei minuten bis 59 bei stunden bis 23
nun z.b. auf 00:02 einstellen und start klicken
jetzt musste das licht angehen, welches in dem makro start eingetragen ist als aktion, der task intervall wird aktiv, nach einer minute musste die anzeige dann 00:01 sein
noch eine minute und dann 00:00, das licht musste dann ausschalten.
der timer ist jetzt abgelaufen und der task inaktiv.

mediman^
Beiträge: 1
Registriert: 12.07.2017, 20:46

Re: individueller Countdown-Timer möglich?

Beitrag von mediman^ » 15.07.2017, 16:09

Hallo,
ich habe einen längeren Chat mit Zdenko geführt, da ich seinen Timer nicht zum Laufen gekriegt habe.
Dabei hat er festgestellt, dass ihm ein kleiner Fehler unterlaufen ist. Man muss folgende Änderungen in der Programmierung des Timers vornehmen.

Wir brauchen noch eine Hilfsvariable zusätzlich. Also im Gerätemanager noch eine Hilfsvariable mit dem Namen „Hilfsvariable“ anlegen.

Dann muss im Makroeditor für die Nummern oder je nach Variante +/- Tasten die Änderung des Befehls „TasteTimer“ in den Befehl „Hilfsvariable“ vorgenommen werden.
Makro.png
und zusätzlich dann im Task für das Keypad im Fallsblock noch die Bedingung "TasteTimer" gegen „Hilfsvariable“ getauscht werden.
Task.png
Jetzt funktioniert alles bestens.

Hier nochmal einen großen Dank an Zdenko, der sich viel Mühe gemacht hat mir zu helfen.

Beste Grüße

Antworten

Zurück zu „mediola“