Letzte Aktualisierung ermitteln

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

moecki
Beiträge: 25
Registriert: 19.12.2012, 22:01

Re: Letzte Aktualisierung ermitteln

Beitrag von moecki » 14.03.2013, 22:02

Hast Du das gesondert getestet oder nur in Deinem Skript geändert?
Bei letzterem musst Du alle State-Abfragen durch die o. g. Value-Zugriffe ersetzen.
Du hast dort einige drin. Die ändern dann den Timestamp bevor Du ihn ausgeben lässt.
Ursache für das unzutreffende Abfrageergebnis war ja nicht die Timestamp-Abfrage selbst, sondern das vorher durch State() der Timestamp neu gesetzt wurde.
Grüße
moecki

tunecase
Beiträge: 27
Registriert: 31.10.2012, 09:23

Re: Letzte Aktualisierung ermitteln

Beitrag von tunecase » 15.03.2013, 09:07

moecki hat geschrieben:Hast Du das gesondert getestet oder nur in Deinem Skript geändert?
Bei letzterem musst Du alle State-Abfragen durch die o. g. Value-Zugriffe ersetzen.
Du hast dort einige drin. Die ändern dann den Timestamp bevor Du ihn ausgeben lässt.
Ursache für das unzutreffende Abfrageergebnis war ja nicht die Timestamp-Abfrage selbst, sondern das vorher durch State() der Timestamp neu gesetzt wurde.
Ja, das habe ich versuchsweise ohne andere Calls getestet.

Selbst wenn es funktioniert, wie bleibt denn der Timestamp gleich, wenn ich den State auch abfragen muss (das Script soll ja minütlich prüfen, ob Türen etc. länger als eine def. Zeit offen sind)?
Beste Grüße
tunecase

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: Letzte Aktualisierung ermitteln

Beitrag von alchy » 15.03.2013, 18:03

Sorry, aber der von mir veröffentlichte Code fragt den Timestamp ab und zeigt Ihn an.
Da ich das gestern nur so schnell hingepinselt hatte, habe ich mich schon erschrocken.
Habe das gerade nochmals gegengecheckt, es wird genau die Zeit ausgegeben bei meinen HM-Sec-RHS, welche auch die WebUI anzeigt als letzte Aktualisierung. Der Fehler liegt alsowie mein Vorredner schon bemerkte in deinem Script.

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: Letzte Aktualisierung ermitteln

Beitrag von alchy » 15.03.2013, 20:52

Brauchts Du noch ein passendes Script ? hab grad Zeit :shock:

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

paul53
Beiträge: 2554
Registriert: 26.04.2012, 20:42
Wohnort: Berlin
Danksagung erhalten: 15 Mal

Re: Letzte Aktualisierung ermitteln

Beitrag von paul53 » 15.03.2013, 22:16

Auszug aus dem Script, das den falschen Timestamp erzeugt:

Code: Alles auswählen

   WriteLine("Kanal " # channel # " - Zustand: " # channel.State() # " - Letzte Aenderung: " # channel.Timestamp());
   
   if (channel.State() <> 0)
    {
    !Moment merken
    ...
Erforderliche Änderung:

Code: Alles auswählen

WriteLine("Kanal " # channel # " - Zustand: " # channel.Value() # " - Letzte Aenderung: " # channel.Timestamp());
   
   if (channel.Value() <> 0)
    {
    !Moment merken
    ...
Versionen: HM-CC-TC 2.1, HM-LC-Sw1 1.9, HM-CC-RT-DN 1.1, HM-MOD-RPI-PCB 1.2.1 (keine CCU)

tunecase
Beiträge: 27
Registriert: 31.10.2012, 09:23

Re: Letzte Aktualisierung ermitteln

Beitrag von tunecase » 16.03.2013, 12:20

Hi paul53!

Nach der Änderung bleibt es trotzdem bei dem Ergebnis:

Code: Alles auswählen

Kanal BidCos-RF.xxx:1.STATE - Zustand: 0 - Letzte Aenderung: 2013-03-16 12:18:01
Kanal BidCos-RF.xxx:1.STATE - Zustand: false - Letzte Aenderung: 2013-03-16 12:18:03
Kanal BidCos-RF.xxx:1.STATE - Zustand: false - Letzte Aenderung: 2013-03-16 12:18:52
Kanal BidCos-RF.xxx:1.STATE - Zustand: 0 - Letzte Aenderung: 2013-03-16 12:18:01
Kanal BidCos-RF.xxx:1.STATE - Zustand: 0 - Letzte Aenderung: 2013-03-16 12:18:01
Kanal BidCos-RF.xxx:1.STATE - Zustand: 0 - Letzte Aenderung: 2013-03-16 12:18:01
Kanal BidCos-RF.xxx:1.STATE - Zustand: 0 - Letzte Aenderung: 2013-03-16 12:18:01
Kanal BidCos-RF.xxx:1.STATE - Zustand: 0 - Letzte Aenderung: 2013-03-16 12:18:01
Kanal BidCos-RF.xxx:1.STATE - Zustand: false - Letzte Aenderung: 2013-03-16 12:18:01
Kann die Zeile

Code: Alles auswählen

string channel_name = interface_name # "." # device_address # ":1.STATE";
schon einen Refresh triggern?

Beste Grüße und ein schönes WE!
Beste Grüße
tunecase

paul53
Beiträge: 2554
Registriert: 26.04.2012, 20:42
Wohnort: Berlin
Danksagung erhalten: 15 Mal

Re: Letzte Aktualisierung ermitteln

Beitrag von paul53 » 16.03.2013, 14:25

Warum arbeitest Du nicht mit den Kanalnamen ? Die sagen bei sinnvoller Namensvergabe viel mehr aus als die Kanaladressen.
Ich habe Dein Script einmal entsprechend abgewandelt:

Code: Alles auswählen

!Script zum Pruefen von offenen Tueren und Temperaturverlusten

!Check open doors

var myAssembly = dom.GetObject("Verschluß");

!------------------------------------------------------------------------------
! Schleife, die alle Kanäle des Gewerkes "Verschluß" abfragt
!------------------------------------------------------------------------------
string name;
foreach(name, myAssembly.EnumUsedNames())
{
    var dp = dom.GetObject(name).DPByHssDP("STATE");
    var zustand = dp.Value();
    var schaltpunkt = dp.Timestamp();

   integer jetzt;        ! aktuelle Zeit in s
   integer zeitdiff;     ! Zeitdifferenz in Minuten 
   !Zeit in sec merken
   jetzt = system.Date("%F %X").ToTime().ToInteger();
   
   
   WriteLine("Kanal " # name # " \t- Zustand: " # zustand # " - Letzte Aenderung: " # schaltpunkt);
   
   if (zustand)
   {
    !Moment merken
    schaltpunkt = schaltpunkt.ToInteger();

    ! Differenz in Minuten
    zeitdiff = (jetzt - schaltpunkt) / 60;   
    WriteLine("Offen seit "#zeitdiff);
    ! letzte Aktion länger als 5 Minuten her?
    if (zeitdiff > 5)
      {
      !Mail senden
      }
   }
}
Ein Test des Scriptes hat die richtigen Timestamps geliefert.
Versionen: HM-CC-TC 2.1, HM-LC-Sw1 1.9, HM-CC-RT-DN 1.1, HM-MOD-RPI-PCB 1.2.1 (keine CCU)

dzvo
Beiträge: 131
Registriert: 17.07.2012, 18:15

Re: Letzte Aktualisierung ermitteln

Beitrag von dzvo » 14.10.2013, 11:32

Hallo,

ich muss das Thema noch mal hochholen.
Wie komme ich an den Timestamp der letzten Änderung, so wie im Web GUI heran? Alle Ausgaben sind nur die aktuelle Zeit, bzw. die Zeit wann der TFK das letzte Mal abgefragt wurde, jedoch nicht wann die letzte Änderung stattgefunden hat.

Code: Alles auswählen

var x = dom.GetObject("BidCos-RF.JEQ0041500:1.STATE");
var s = x.Value();
var t = x.Timestamp();
WriteLine("Timestamp: " #t);
WriteLine("Zustand: " #s);
Liefert:
Timestamp: 2013-10-14 11:15:02
Zustand: 0

Sollte eigendlich sein:
Büro Fenster TFK | Batterie Verschluss | 14.10.2013 10:40:32

Auch mit dem Script über die Namen wird nicht die richtige letzte Änderungszeit angezeigt.

Code: Alles auswählen

    !Script zum Pruefen von offenen Tueren und Temperaturverlusten

    !Check open doors

    var myAssembly = dom.GetObject("Verschluss");

    !------------------------------------------------------------------------------
    ! Schleife, die alle Kanäle des Gewerkes "Verschluß" abfragt
    !------------------------------------------------------------------------------
    string name;
    foreach(name, myAssembly.EnumUsedNames())
    {
        var dp = dom.GetObject(name).DPByHssDP("STATE");
        var zustand = dp.Value();
        var schaltpunkt = dp.Timestamp();

       integer jetzt;        ! aktuelle Zeit in s
       integer zeitdiff;     ! Zeitdifferenz in Minuten
       !Zeit in sec merken
       
       WriteLine("Kanal " # name # "\t - Zustand: " # zustand # " - Letzte Aenderung: " # schaltpunkt);
       
    }

Liefert:
Kanal Büro Fenster TFK - Zustand: 0 - Letzte Aenderung: 2013-10-14 11:15:02
Kanal Küche Fenster TFK - Zustand: 0 - Letzte Aenderung: 2013-10-14 11:19:00

nach einen Zeitraum von 10 Minuten meldet sich der TFK scheinbar wieder und übermittelt den Zustand...

Kanal Büro Fenster TFK - Zustand: 0 - Letzte Aenderung: 2013-10-14 11:25:00
Kanal Küche Fenster TFK - Zustand: 0 - Letzte Aenderung: 2013-10-14 11:29:00

Nur ich möchte ja den Timesstamp der letzten Änderung haben und nicht wissen wann dieser den gleichen Zustand aktualisiert hat.

Grüße
dzvo
--------------------------------------------
168 Kanäle in 77 Geräten:
5x HM-CC-TC, 6x HM-LC-Dim1PWM-CV, 5x HM-CC-VD, 2x HM-PB-2-WM55, 1x HM-PB-4Dis-WM, 2x HM-SCI-3-FM, 1x HM-Sen-RD-O, 3x HM-WDS30-OT2-SM, 1x HM-WDS100-C6-O, 1x HM-Sen-MDIR-SM, 10x HM-ES-PMSw1-Pl, 6x HM-Sec-RHS, 1x HM-Sec-Sir-WM, 1x HM-Sen-MDIR-O, 1x HM-OU-LED16, 1x HM-Sec-SC, 1x HM-Sec-Key-S, 1x HM-Sen-DB-PCB, 2x HM-LC-Sw1-Ba-PCB, 1x HM-LC-Sw4-WM, 1x HM-Sen-MDIR-WM55, 1x HM-RC-Key4-2, 2x HM-RC-Key3-B, 1x HM-Sec-MDIR, 1x HM-Sec-WDS-2, 1x HM-LC-Sw1-Pl-2, 1x HM-PB-6-WM55, 2x HM-PB-2-WM, 1x HM-CC-SCD, 2x HM-LC-Dim1T-Pl-2, 5x HM-LC-Dim1T-Pl, 3x HM-LC-Bl1PBU-FM, 1x HM-RC-19-B, 1x HM-LC-Sw1-Pl, 1x HM-LC-Sw4-DR, 1x HM-Sec-Win
--------------------------------------------

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: Letzte Aktualisierung ermitteln

Beitrag von alchy » 14.10.2013, 13:24

Häng ich mal kurz rein, nun aber richtig.
Hatte den Thread ganz vergessen. :oops:

Versuch mal folgendes:

Code: Alles auswählen

string alchy = dom.GetObject(12345).LastTimestamp().ToString("%d-%m-%y %H:%M-Uhr");
WriteLine(alchy);

Wobei 12345 die ID des entspechenden KANALS ist.


Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: Letzte Aktualisierung ermitteln

Beitrag von alchy » 14.10.2013, 22:37

Viele Zugriffe, aber kein weiterer Kommentar.
Also gehe ich mal davon aus daß meine Lösung das Problem entsprechend löst?!?
Damit sollte auch das leiidige Thema ' wie langer steht das Fenster schon auf" einfacher zu lösen sein.

Alchy
Unterwegs getippelt

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

Antworten

Zurück zu „HomeMatic Zentrale (CCU / CCU2 / CCU3 / Charly)“