XML API Statusänderung Timestamp auslesen

diverse Zusatzsoftware

Moderator: Co-Administratoren

Antworten
Optimist
Beiträge: 10
Registriert: 11.01.2016, 19:36

XML API Statusänderung Timestamp auslesen

Beitrag von Optimist » 28.06.2016, 22:49

Hallo Zusammen,

ich möchte mir eine "Miniapp" via php bzw. jquery mobile schreiben.

Das klappt auch alles soweit, sodass ich einzelne Geräte, Systemvariablen auslesen und auch setzen kann.

Nun möchte ich, dass bei den Verschlüssen angezeigt wird, wann die letzte Statusänderung war. Jedoch wird bei allen Geräten der gleiche Timestamp angezeigt. Sobald ich an irgendeinem Verschluss den Status ändere (Fenster öffnen/schließen), dann ändert sich der Timestamp bei allen Verschlüssen. Ist dort ein Bug in der API oder habe ich einen Fehler bei der Abfrage?

Bug in der API möchte ich schon ausschließen, da eine IOS-APP die per XML-API auf die HomeMatic zugreift die Zeitstempel richtig ausliest.

Code: Alles auswählen

<?php
   $homematic_ip = '127.0.0.1';
   $homematic = 'http://'.$homematic_ip.'/config/xmlapi/';
   $state_cgi = $homematic."statelist.cgi";
   $data = file_get_contents($state_cgi);
   $xml_system = simplexml_load_string($data);
   foreach ($xml_system->device as $device) 
   {
      foreach($device->children() as $channel)
      {
         $channelname = $channel['name'];
         foreach($channel->children() as $datapoint)
         {
            if($datapoint['type']=="STATE")
            {
               if($datapoint['value'] == "false")
               {
                  $ItemStateOpenText = $ItemStateOpenText.'<tr><td>'.$channelname.'-'.date('d.m.Y H:i:s',intval($datapoint['timestamp'])).'</td></tr>';
               }
               else
               {
                  $ItemStateAlertText = $ItemStateAlertText.'<tr><td>'.$channelname.'-'.date('d.m.Y H:i:s',intval($datapoint['timestamp'])).'</td></tr>';
               }
            }
         }
      }
   }

Wäre klasse, wenn ihr dazu eine Idee hättet.

Mit freundlichen Grüßen
der Optimist

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

Re: XML API Statusänderung Timestamp auslesen

Beitrag von alchy » 29.06.2016, 15:07

Den Timestamp des STATE Datenpunktes darfst du dafür nicht nehmen. Reicht das >> H I E R << zur Erklärung?

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.

Optimist
Beiträge: 10
Registriert: 11.01.2016, 19:36

Re: XML API Statusänderung Timestamp auslesen

Beitrag von Optimist » 29.06.2016, 20:49

Hallo alchy,

vielen Dank für die Antwort. Leider reicht mir das noch nicht ganz. Zwar weiß ich nun um einiges mehr (Doppelte Kanalnamen und Sonderzeichen in Kanalnamen vermeiden) aber leider noch nicht wie ich per XML-API den "LastTimestamp" ermitteln kann.

Grundsätzlich müsste das gehen, da meine IOS-APP anscheinend auch per XML-API an diese Info rankommt.


Natürlich könnte ich den "LastTimestamp" auch ein eine Systemvariable bei Änderung schreiben. Aber diesen Umweg der doppelten Datenhaltung möchte ich eigentlich nicht gehen.

Gruß
Optimist

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

Re: XML API Statusänderung Timestamp auslesen

Beitrag von alchy » 30.06.2016, 16:11

Dein php Script ist so direkt lauffähig und gibt etwas aus?
Ich habe es nicht probiert, da ich nicht rankomme im Moment, hab es nur gelesen.

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.

Optimist
Beiträge: 10
Registriert: 11.01.2016, 19:36

Re: XML API Statusänderung Timestamp auslesen

Beitrag von Optimist » 30.06.2016, 16:54

Ja, das Skript läuft und gibt auch die richtigen Kanalnamen und den jeweils richtigen Status aus.

Nur der Timestamp entspricht nicht dem Timestamp der letzten Statusänderung (Fenster öffnen / schließen).


Evtl. muss das ja auch von einer anderen Stelle ausgelesen werden, allerdings finde ich diese Stelle nicht :)

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

Re: XML API Statusänderung Timestamp auslesen

Beitrag von alchy » 30.06.2016, 19:37

Dann wirst du sicher eine Raspi-ccu verwenden, da du im Script auf 127.0.0.1 verweist. Den alten PHP Server der auf der CCU lief, wirst du wohl nicht verwenden?
Hab mal das Script auf PHP fähigen Server imNetzwerk geschoben, und erhalte keine Ausgabe. Ist mir aber per VPN zu mühselig.
Sei es wie es sei, die Statement.cgi zeigt den Lasttimestamp des Kanales eh nicht an.
Weiter schauen, kann ich wohl erst @home

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.

Optimist
Beiträge: 10
Registriert: 11.01.2016, 19:36

Re: XML API Statusänderung Timestamp auslesen

Beitrag von Optimist » 30.06.2016, 19:59

Hi,

vielen Dank für deine Bemühungen. Ich verwende eine CCU2 mit XML-API 1.10.
Der Webserver ist eine NAS. Als dieses Thema erstellt habe, habe ich den Code etwas gekürzt und die IP angepasst.

Stimmt "statelist.cgi" gibt den LastTimestamp nicht aus. Ist halt die Frage, wie die IOS App "@Home" an diese Info kommt. Denn diese App greift nur per XML-Api auf die CCU2 zu und ermittelt für alle Verschlüsse den richtigen "LastTimestamp"

Unten steht der Code, sodass auch eine gültige Tabelle rauskommt.

Code: Alles auswählen

<?php
   $ItemStateOpenText = '<table width="100%" style="border:1px solid"><tr><th style="border:1px solid; background-color: lightgreen;" colspan="2">Geschlossen</th></tr>';
   $ItemStateAlertText = '<table width="100%" style="border:1px solid"><tr><th style="border:1px solid; background-color: red;" colspan="2">Offen</th></tr>';

   $homematic_ip = '192.168.0.101';
   $homematic = 'http://'.$homematic_ip.'/config/xmlapi/';
   $state_cgi = $homematic."statelist.cgi";
   $data = file_get_contents($state_cgi);
   $xml_system = simplexml_load_string($data);
   foreach ($xml_system->device as $device)
   {
      foreach($device->children() as $channel)
      {
         $channelname = $channel['name'];
         foreach($channel->children() as $datapoint)
         {
            if($datapoint['type']=="STATE")
            {
               if($datapoint['value'] == "false")
               {
                  $ItemStateOpenText = $ItemStateOpenText.'<tr><td>'.$channelname.'-'.date('d.m.Y H:i:s',intval($datapoint['timestamp'])).'</td></tr>';
               }
               else
               {
                  $ItemStateAlertText = $ItemStateAlertText.'<tr><td>'.$channelname.'-'.date('d.m.Y H:i:s',intval($datapoint['timestamp'])).'</td></tr>';
               }
            }
         }
      }
   }
   
   echo $ItemStateOpenText.'</table>';
   echo $ItemStateAlertText.'</table>';

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

Re: XML API Statusänderung Timestamp auslesen

Beitrag von alchy » 30.06.2016, 23:30

Hast eine PN. Hab mal was probiert, damit sollte es gehen.

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.

lufee
Beiträge: 1
Registriert: 04.03.2018, 00:40

Re: XML API Statusänderung Timestamp auslesen

Beitrag von lufee » 04.03.2018, 00:42

Gibt es nun eine Lösung per xmlapi den "lasttimestamp" zu bekommen?

Antworten

Zurück zu „Sonstige Addons“