HomeMatic CCU2 bei ELV bestellen

individueller Countdown-Timer möglich?

Haussteuerung mittels mediola

Werbung


individueller Countdown-Timer möglich?

Beitragvon 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
Kurzschlusselektriker
 
Beiträge: 39
Registriert: 22.09.2014, 15:58

Re: individueller Countdown-Timer möglich?

Beitragvon Gerti » 19.04.2017, 09:02

Hi!

Kannst Du mit dem CUxD Timer machen.

Gruß,
Gerti
Gerti
 
Beiträge: 487
Registriert: 28.01.2016, 19:06

Re: individueller Countdown-Timer möglich?

Beitragvon 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...
Cash
 
Beiträge: 741
Registriert: 09.01.2016, 18:42
Wohnort: Sauerland

Re: individueller Countdown-Timer möglich?

Beitragvon 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)....
Kurzschlusselektriker
 
Beiträge: 39
Registriert: 22.09.2014, 15:58

Re: individueller Countdown-Timer möglich?

Beitragvon 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.
Fonzo
 
Beiträge: 562
Registriert: 22.05.2012, 08:40

Re: individueller Countdown-Timer möglich?

Beitragvon 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 40 Geräte, Mediola NEO
MiBu
 
Beiträge: 4
Registriert: 11.01.2017, 19:24

Re: individueller Countdown-Timer möglich?

Beitragvon 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) 908-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) 890-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) 895-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 :)
33zdenko
 
Beiträge: 272
Registriert: 21.12.2013, 17:50

Re: individueller Countdown-Timer möglich?

Beitragvon 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
Kurzschlusselektriker
 
Beiträge: 39
Registriert: 22.09.2014, 15:58

Re: individueller Countdown-Timer möglich?

Beitragvon 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) 799-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) 799-mal betrachtet

Bildschirmfoto 2017-04-27 um 07.49.35.png
Bildschirmfoto 2017-04-27 um 07.49.35.png (22.93 KiB) 799-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) 799-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) 799-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.
33zdenko
 
Beiträge: 272
Registriert: 21.12.2013, 17:50

Re: individueller Countdown-Timer möglich?

Beitragvon 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
mediman^
 
Beiträge: 1
Registriert: 12.07.2017, 20:46


Zurück zu mediola

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste







© homematic-forum.de & Lizenzgebern. Alle Rechte vorbehalten. Alle Bilder & Texte auf dieser Seite sind Eigentum
der jeweiligen Besitzer und dürfen ohne deren Einwilligung weder kopiert noch sonstwie weiter verwendet werden.