Thema geschlossen
Ergebnis 1 bis 10 von 10
  1. #1
    Registriert seit
    Mar 2006
    Beiträge
    3,423

    Question DB-Logging -> Wert suchen und ausgeben

    Hi!

    Mir stellt sich gerade die Frage, wie ich ein Value aus der Datenbank lesen kann, was am nächsten an vor "mindestens vor einer Stunde gespeichert" liegt, oder anders erklärt (Hindergrund):

    Ich speichere den Luftdruck.
    Da der sich nicht bei jeder Sensorübermittlung (WS2000) geändert hat, wird dieser natürlich auch nicht regelmäßig gespeichert, sondern nur wenn tatsächlich eine Änderung stattfand.
    Nun möchte ich aber die Luftdrucktendenz über 1h, 3h usw. berechnen.
    Nehme den Wert der letzten Sensorübermittlung minus den Wert von vor min. 1Stunde bzw. 3 Stunden usw.

    Da ich aber nun keinen festen Zeitabschnitt zum Auslesen angeben kann...
    Wie komme ich an den Wert, der mindestens 1 Stunde alt ist, aber dann den nächstgelegenen?
    Gruß nancilla

  2. #2
    Registriert seit
    Jan 2007
    Ort
    Nidda(Hessen)
    Beiträge
    7,337

    z.B. so.

    PHP-Code:
    $time AC_GetLoggedValues(28761 /*[Archive Handler]*/35017 /*[Wetterstation\Nidda\Temperatur]*/0time(), 10);
    print_r($time); 
    musst halt noch umrechnen und raussuchen.
    Gruß Rainer


    Unmögliches wird sofort erledigt, Wunder dauern etwas länger.


  3. #3
    Registriert seit
    Mar 2006
    Beiträge
    3,423

    Hallo Rainer,

    so funktioniert's eben nicht.

    Limit kann ich keins angeben, weil ich ja garnicht weiss, wieviele Werte zwischen jetzt und dem letzten Wert vor mindestens einer Stunde liegen.

    Wenn ich das aber herausfinden kann, dann wäre das eine Lösung, an die ich auch schon dachte.

    Wichtig dabei ist aber die "Unkonstante" > letzter Wert vor min. 1 Stunde

    Mit Startzeit 0 geht natürlich garnicht, ohne ebenfalls das Limit ermittelt zu haben.

    Also entweder muss ich über die "Unkonstante" die Startzeit mit Limit 0 ermitteln, oder mit Startzeit 0 das entsprechende Limit.
    Gruß nancilla

  4. #4
    Registriert seit
    Jan 2007
    Ort
    Nidda(Hessen)
    Beiträge
    7,337

    Naja, dass es so nicht funktioniert, dachte ich war klar. Deswegen umrechnen und raussuchen.

    Du hast den Timestamp , LastTime im Array und mit getdate(LastTime) kann ich mir sehr wohl die Zeiten rausziehen und mit der aktuellen Zeit vergleichen.
    Gruß Rainer


    Unmögliches wird sofort erledigt, Wunder dauern etwas länger.


  5. #5
    Registriert seit
    Mar 2006
    Beiträge
    3,423

    OK... OK... du hast ja Recht Rainer
    Ich hoffte nur auf die Schnelle auf ein Ergebnis

    Dann habe ich mich mal selber "abgetan" und stelle mal mein Halbfertigprodukt (erstmal 1 Stunde) online:
    PHP-Code:
    <?
    /*
    *****************************************************
     Berechnet die Luftdrucktendenz über mehrere Stunden
    *****************************************************
    File     :  Luftdruck-Tendenz.ips.php
    Trigger  :  Variable: [-Wetter-\Luftdruck [relativ]
    Interval :  Bei Aktualisierung
    */

    $archiveID 30962 /*[Archive Handler]*/ ;   // Archive-Handler-ID
    $objectID 55112 /*[-Wetter-\Luftdruck [relativ]]*/ // Variablen-ID
    $ende time(); // JETZT
    $start_1h time()-(60*60); // Datenbank auslesen ab 1 Stunde vor JETZT
    $start_3h time()-(180*60); // Datenbank auslesen ab 3 Stunden vor JETZT

    echo date("H:i:s")."\r\n";

    // Abfrage 1 Stunde
    $buffer_1h AC_GetLoggedValues($archiveID$objectID$start_1h$ende0);
    //print_r(AC_GetLoggedValues($archiveID, $objectID, $start_1h, $ende, 0));
    $anzahl count($buffer_1h);
    $wert $buffer_1h[$anzahl-1];
    $ts $wert["TimeStamp"];
    $value $wert["Value"];
    echo 
    $value ."\r\n";

    if (
    $ts $start_1h)
    {
    $limit count($buffer_1h)+1;
    $buffer_1h AC_GetLoggedValues($archiveID$objectID0$ende$limit);
    $wert $buffer_1h[$limit-1];
    $value $wert["Value"];
    }
    echo 
    $value ."\r\n";
    ?>
    Irgendwie bin ich aber damit noch nicht wirklich zufrieden, auch wenn's nur ein "Halbfertigprodukt" ist... Irgendwas stört mich noch
    Geändert von nancilla (13.06.10 um 19:52 Uhr)
    Gruß nancilla

  6. #6
    Registriert seit
    Mar 2006
    Beiträge
    3,423

    Hab mich heute nochmal damit beschäftigt und dann doch ein für mich zufriedenstellendes Script erstellen können.
    Für die Nachwelt und wen's interessiert:

    PHP-Code:
    <?
    /*
    *****************************************************
     Berechnet die Luftdrucktendenz über mehrere Stunden
    *****************************************************
    File     :  Luftdruck-Tendenz.ips.php
    Trigger  :  Variable: -Wetter-\Luftdruck [relativ]
    Interval :  Bei Aktualisierung
    */

    $archiveID 30962 /*[Archive Handler]*/ ;   // Archive-Handler-ID
    $objectID 55112 /*[-Wetter-\Luftdruck [relativ]]*/ // Variablen-ID
    $ld GetValueFloat($objectID);    // Luftdruck aktuell
    $ende time(); // JETZT
    $stunden 60;    // 1 Stunde a 60 MInuten
    $start_1h time()-(1*$stunden*60); // Datenbank auslesen ab 1 Stunde vor JETZT
    $start_3h time()-(3*$stunden*60); // Datenbank auslesen ab 3 Stunden vor JETZT
    $start_12h time()-(12*$stunden*60); // Datenbank auslesen ab 12 Stunden vor JETZT
    $start_24h time()-(24*$stunden*60); // Datenbank auslesen ab 24 Stunden vor JETZT

    echo "Uhrzeit: "date('d.m.Y - H:i:s')."\r\n";

    // Abfrage 1 Stunde
    $buffer_1h AC_GetLoggedValues($archiveID$objectID$start_1h$ende0);
    $anzahl count($buffer_1h);
    $wert $buffer_1h[$anzahl-1];
    $ld_1h $wert['Value'];
    echo 
    "Luftdruck(1h): $ld_1h / ".date('d.m.Y - H:i:s',$wert['LastTime'])." Uhr" ."\r\n";

    // Abfrage 3 Stunden
    $buffer_3h AC_GetLoggedValues($archiveID$objectID$start_3h$ende0);
    $anzahl count($buffer_3h);
    $wert $buffer_3h[$anzahl-1];
    $ld_3h $wert['Value'];
    echo 
    "Luftdruck(3h): $ld_3h / ".date('d.m.Y - H:i:s',$wert['LastTime'])." Uhr" ."\r\n";

    // Abfrage 12 Stunden
    $buffer_12h AC_GetLoggedValues($archiveID$objectID$start_12h$ende0);
    $anzahl count($buffer_12h);
    $wert $buffer_12h[$anzahl-1];
    $ld_12h $wert['Value'];
    echo 
    "Luftdruck(12h): $ld_12h / ".date('d.m.Y - H:i:s',$wert['LastTime'])." Uhr" ."\r\n";

    // Abfrage 24 Stunden
    $buffer_24h AC_GetLoggedValues($archiveID$objectID$start_24h$ende0);
    $anzahl count($buffer_24h);
    $wert $buffer_24h[$anzahl-1];
    $ld_24h $wert['Value'];
    echo 
    "Luftdruck(24h): $ld_24h / ".date('d.m.Y - H:i:s',$wert['LastTime'])." Uhr" ."\r\n";

    // Luftdrucktendez
    $ldtendenz_1h round($ld $ld_1h,1);
    $ldtendenz_3h round($ld $ld_3h,1);
    $ldtendenz_12h round($ld $ld_12h,1);
    $ldtendenz_24h round($ld $ld_24h,1);
    echo 
    "Luftdrucktendenz (1h):$ldtendenz_1h (3h):$ldtendenz_3h (12h):$ldtendenz_12h (24h):$ldtendenz_24h"."\r\n";
    ?>
    Gruß nancilla

  7. #7
    Registriert seit
    Oct 2010
    Ort
    HH
    Beiträge
    4,613

    sehr cooles Script, prima!
    habs mal übernommen, mal schauen was man damit noch alles anstellen kann
    mit gebücktem Gruss
    Raketenschnecke
    IPS-Projekte und -Tools auf
    www.raketenschnecke.net

  8. #8
    Registriert seit
    Jan 2007
    Ort
    Ostseeküste, da wo der Strand am weißesten und am breitesten ist
    Beiträge
    632

    Sorry, aber bei allem Verneigen vor dem gemachten Aufwand, kann ich Lösungen, die das Rad nochmal erfinden, irgendwie nicht wirklich etwas abgewinnen. Das alles ist ureigenste und tausendfach erprobte Aufgabe einer Datenbank und dank Runtime-Versionen auch ohne einen Cent zu haben.

    Details dazu hier

    ...ich hoffe, das war nun auch für Schnelleser kurz und kompakt genug :-)
    V1 (60%), V2.5(40%), Kopplung per Client-/Server-Socket; MS-SQL; Server-OS: W7/64, XP, ~400 Komponenten (HM, EnOcean, HMS100, FS20, ISDN/GigaSet, Gardena, LevelJet, Wetter), PTZ-IP-CAMs; USV --- Interessen: Synerget. Anwendgn. (passive Klimatisierung, Szenarienerkennung und -steuerung, Look ahead, Datamining...), behindertenspezifische Unterstützungen und Absicherungen

  9. #9
    Registriert seit
    Aug 2005
    Ort
    Fürstenfeldbruck-Aich (Bayern)
    Beiträge
    4,052

    Sehr zeitnaher Kommentar.

    Ich denke Du durchsuchst heute das Forum um deinem Wunsch nach einer DB-Anbindung in IPS Nachdruck zu verleihen.

    Ich denke das Thema ist beiweitem ausgereitzt und sollte, anstatt das Forum mit deinem Kommentaren zu strapazieren, am Besten in einem direkten Kontakt mit dem IPS-HQ ablaufen.
    Gruß
    Werner

    Komponenten:: Homematic(CCU) 250DP, EATON-MOELLER, 1-Wire, WMRS200, 15" Touchdisplay
    Software::
    IPS V4.x, iMobile, WebFront, Logitech Media Server 7.8.x, SONOS
    Hardware:: IPS-Server: ESXi 6.x, Windows 10 Ent, 4 Kerne, 8GB RAM

  10. #10
    Registriert seit
    Mar 2006
    Beiträge
    3,423

    Zitat Zitat von wgreipl Beitrag anzeigen
    Sehr zeitnaher Kommentar.

    Ich denke Du durchsuchst heute das Forum um deinem Wunsch nach einer DB-Anbindung in IPS Nachdruck zu verleihen.

    Ich denke das Thema ist beiweitem ausgereitzt und sollte...
    ...in diesem thread nicht weiter besprochen werden... deshalb closed!
    Gruß nancilla

Ähnliche Themen

  1. IPS -> Bluetooth USB -> Bluetooth LS
    Von remote-it im Forum Audio & Video, TK-Anlagen, ISDN
    Antworten: 2
    Letzter Beitrag: 14.11.08, 10:06
  2. IPS_SENDER -> mit Wert WebInterface... Problem
    Von Hinti im Forum Allgemeine Diskussion
    Antworten: 5
    Letzter Beitrag: 04.11.07, 11:02
  3. Englisch -> Deutsch
    Von Torro im Forum IP-Symcon WIIPS für Version 1.0
    Antworten: 9
    Letzter Beitrag: 04.03.06, 22:23