Betriebsstunden - Erfassung

Danke Rainer,
habe es so umgesezt. Es klappt wunderbar.

cu uwe

Hallo Uwe!
Ich verfolge den Tread schon länger.
Zeitmessung funktioniert auch ganz gut.:slight_smile:
Was mir dabei fehlt ist die fortlaufende Zeitanzeige während der Brenner läuft. Dann wärs perfekt.
Evtl. gibts da mal ein Brick??:cool:
Mit Auswertung: Pro Std, Tag Woche usw.
Wie lange ist der Brenner pro Einschaltung gelaufen, bei mir sinds oft nur 50 Sek. das krieg ich im Trend (WIIPS) gar nicht mit

Schönen Abend noch.

Leider gibts vom Usertreffen keine „Wasserstandsmeldungen“-sind wohl noch alle mit IPS zu Gange. :smiley:
Egon

…da bin ich aber froh, wenn ich nicht der Einzige bin, den das interessiert…

folgendes habe ich nicht verstanden:

Ich würde es für sinnvoll halten, dass das Script jede Minute läuft und dabei beim Zustand der BM_Kessel-Variablen ==True den Zeitwert um eine Minute erhöht.

Das heißt, die Laufzeit würde nur in vollen Minuten berechnet? Also die $BM-Abfrage nur jede Minute? Jetzt läuft der Brenner 1,5 Minuten…dann wird eine Minute erfasst und 30 Sekunden werden nicht erfasst? Ich habe das mal überschlagen und bin auf eine mögliche Abweichung von 80 litern in 5 Monaten gekommen. Dieser Fall wird zwar nicht eintreten (weil sich positive und negative Abweichung aufheben) - dennoch ist ein großer Unsicherheitsfaktor dabei.

Das script kann doch laufen, sobald der Brenner läuft, oder? OnEvent oder so (weiß jetzt nicht wie das geht). Das mit der triggerei hab ich noch gar nicht kapiert. Ich habe halt mal bei den Events den Timer interval auf 1sec. gesetzt, dann lief’s erstmal einwandfrei. (hat aber wohl keine Zukunft…)

Noch eine Frage: Ich habe versucht, meinen Verbrauch darzustellen (der Einfachheit vorerst Gesamtverbrauch). Das wären in 180 sec. 0,1 Liter. Oder 1/1800 Liter pro Sekunde.

$verbrauch=$told/1800

Ist das richtig?
Wie bekomme ich jetzt $verbrauch in den Designer?

SetValueFloat("verbrauch",$verbrauch); //Gesamtverbrauch in Gesamtlaufzeit

Ok?
jetzt noch auf zwei Nachkommastellen kürzen (weißnichwiegeht)
klasse…jetzt bräuchte ich noch eine Formel, die mir alle 24 Stunden in eine Variable ($Tagesverbrauch) schreibt und für die nächsten 24h wieder von vorne zählt…

danke Freunde, langsam komme ich hinter einiges:rolleyes:

P.s. sollte IPS nicht IKEA heißen? (kaufen…selber bauen…) - entdecke die Möglichkeiten !!!

Also, ich weiss nicht, ob ein Script im Sekundentakt nicht große Probleme erzeugt.
Heute abend ode morgen sind die Spezialisten wieder da, vielleicht kommt da noch was.

Wenn Du dir aber das Script durch „OnUpdate“ der Variablen laufen läßt, kannst Du die Zeitdiff. vielleicht etwas genauer erhalten. Wenn es aber irgendeine Verzögerung durch andere Scripte gibt, dann stimmt das ganze nicht mehr.

Für meinen Zweck reicht eine Bestandsfortschreibung minütlich aus.

Zum Designer: Hier solltest Du dir wirklich die Beschreibung des Designers etwas genauer ansehen. Dort ist alles beschrieben. Z.B. Label.

Zum Formatieren gibts bei PHP den Befehl „sprintf“ oder für die Zeit z.B. „strftime“. Mußt Du dir im PHP-Handbuch
http://www.php.net/manual/de/preface.php
mal ansehen.

Hi Ralf,

das Script wird wie schon geschrieben über „OnChange“ getriggert (findest du rechts oben unter Events) damit es startet und sich selbst auf 60 Sekunden Intervall setzt. Wenn die Betriebsmeldung des Kessels verschwindet wird das Scriptintervall auf 0 gesetzt (braucht ja dann auch nicht zu laufen).
Du kannst das Script ohne weiteres umbauen damit du auch Sekunden erfassen kannst aber ob das sinnvoll ist :confused:

Gruß
Thomas

Hallo Ralf,

die Laufzeitberechnung Deines Brenners ist ganz einfach. Du musst nur einige Voraussetzungen schaffen und ein kleines Skript schreiben:

Voraussetzungen:

  1. eine externe Variable vom Typ Boolean anlegen für den Brenner (z.B. „Brenner_EIN“); diese Variable muss den EIN/AUS-Zustand des Brenners wiederspiegeln
  2. eine externe Variable vom Typ Integer anlegen für die Laufzeit (z.B. „Brenner_Laufzeit“)
  3. eine externe Variable vom Typ Integer anlegen für die Startzeit (z.B. „Brenner_Startzeit“)
  4. mit der Variablen „Brenner_EIN“ das Skript OnChange triggern

Skript:

$brennerstatus = GetValueBoolean("Brenner_EIN");
if ($brennerstatus)                                  // Brenner schaltet ein
{
  SetValueInteger("Brenner_Startzeit", time());      // Einschaltzeit merken
}
else                                                 // Brenner schaltet wieder aus
{
  $laufzeit = GetValueInteger("Brenner_Laufzeit");   // bisherige Laufzeit
  $startzeit = GetValueInteger("Brenner_Startzeit"); // Startzeit holen
  $dauer = time() - $startzeit;                      // Dauer berechnen
  $laufzeit = $laufzeit + $dauer;                    // Dauer zur bisherigen Laufzeit hinzuaddieren
  SetValueInteger("Brenner_Laufzeit", $laufzeit);    // neue Brennerlaufzeit abspeichern
}

Die Laufzeiterfassung mit diesem Skript ist sekundengenau !!

Gruß
HJH

Danke HJH,
elegant gelöst

Klasse, danke HJ,

wieder ein Vorschlag mit Erklärung - da lernt sich’s besser!!

Ein kleines ABER hätte ich da noch… das script läuft, wenn Brenner_Ein = False ist (zumindest bei mir!?). Sollte eigentlich umgekehrt sein, oder?
Und wenn das script alle 10 sekunden läuft, werden zuerst 10, dann 30…60…100…150…210 sekunden gezählt. Nach zwei Minuten sind es 780.
(ok- künftig soll’s alle 60s laufen, dürfte aber keine Rolle spielen)

nu?:confused:

Hallo Ralf,

wenn bei Deiner Variablen TRUE und FALSE vertauscht zugeordnet sind, dann brauchst Du die Abfrage nur zu invertieren.
Dazu musst Du vor die Variable ein „!“ setzen:

if (!$brennerstatus)                                  // Brenner schaltet ein

Wenn Du eine fortlaufende Variable für eine Anzeige im Designer haben möchtest, kannst Du folgendes Skript verwenden:

switch ($IPS_SENDER)                                     // Ursache (Absender) des Triggers ermittlen
{
  case "Variable":                                       // Brennerstatus hat sich geändert
    $brennerstatus = GetValueBoolean("Brenner_EIN");
    if (!$brennerstatus)                                 // Brenner hat eingeschaltet
      IPS_SetScriptTimer($IPS_SELF, 1);                  // ScriptTimer einschalten (auf 1 Sekunde setzen)
    else                                                 // Brenner hat wieder ausgeschaltet
      IPS_SetScriptTimer($IPS_SELF, 0);                  // ScriptTimer wieder löschen
  break;
  
  case "TimerEvent":                                     // Timer hat getriggert
    $laufzeit = GetValueInteger("Brenner_Laufzeit");     // bisherige Laufzeit
    $laufzeit++;                                         // eine Sekunde aufaddieren
    SetValueInteger("Brenner_Laufzeit", $laufzeit);      // neue Brennerlaufzeit im Unix-Timestamp abspeichern
    $laufzeit_anzeige = date("H:i:s", $laufzeit);        // Laufzeit in Stunden:Minuten:Sekunden umrechnen
    SetValueString("Brenner_Laufzeit_Anzeige", $laufzeit_anzeige); // neue Brennerlaufzeit für die Anzeige abspeichern
  break;
}

Die Variable „Brenner_Laufzeit_Anzeige“ enthält die formatierte Laufzeit als String und ist somit für die Ausgabe im Designer geeignet (z.B. in einem Label).

Das Skript wird immer dann gestartet, wenn der Brenner anläuft, bzw. wenn er stoppt, also nicht in einem festen Zeitraster. Während der Brenner läuft wird das Skript jede Sekunde gestartet und somit die Variable im Sekundentakt hochgezählt.

Damit ist gewährleistet, dass auch hier sekundengenau gezählt wird!

Gruß
HJH

PS: Nicht vergessen die String-Variable „Brenner_Laufzeit_Anzeige“ anzulegen!

Super!! Es wird immer besser.

…nur… (sorry, ich habe schon wieder ein ABER)

Es war wieder True und False vertauscht:confused:
Ok - ich hab das „!“ weggelassen. Die Frage ist nur - wie war das jetzt? Das erste script lief bei False, obwohl die Bedingung nach der if-Anweisung doch nur bei True erfüllt wird!?

Ich habe mit dem $Brennerzustand OnChange getriggert, ist das richtig?

Für mich hab ich noch was angehängt:

    SetValueString("brennerlaufanzeige", $laufzeit_anzeige); // neue Brennerlaufzeit für die Anzeige abspeichern
    //Verbrauchsberechnung
    $verbrauch = $laufzeit/1800; // = 2,0 l/h
    SetValueFloat("verbrauch", $verbrauch);
    $tankinhalt = GetValueFloat("tankinhalt"); // akt. Inhalt vorher manuell setzen!
    $tankinhalt = $tankinhalt-(2/3600);
    SetValueFloat("tankinhalt", $tankinhalt);
  break;
}


weiß nicht, ob das elegant ist aber es funzt genau so, wie ich’s wollte.
Den Komfort (Setzen von Tankinhalt und Ausgabe Statistik) muß ich mir noch überlegen.

:DD A N K E:D

Hallo Ralf,

TRUE/FALSE:
Am Skript liegt es mit Sicherheit nicht. Du solltest evtl. noch einmal die Erzeugung des „Brenner“-Signals überprüfen.

Verbrauch und Tankinhalt:
Ich würde den verbleibenden Tankinhalt so berechnen:

verbleibender Tankinhalt = Tankvolumen - bisheriger Verbrauch

also etwa so:

$tankinhalt = $tankvolumen - $verbrauch;

$tankvolumen ist eine Konstante, die den maximalen Tankinhalt darstellt.

Auf diese Weise sparst Du Dir die ständige Addition von sehr kleinen Float-Werten. Nach längerer Zeit könnten sich sonst Rundungsfehler so aufsummieren, dass es zu Abweichungen kommen kann.

Gruß
HJH

Hallo HJH!
Vielen Dank für die Mühe.
Ich habe das obige Script laufen. Fast perfekt.:slight_smile:
In der Anzeige im Designer wird von Anfang an immer gleich 1 Std.angezeigt.
Das sieht dann Beispielsweise so aus: 01:00:22.
Hast du dafür eine erklärung?
Wenn ich „von Hand“ die Brenner_Laufzeit auf 0 setze, kommt biem Start des Scripts sofort wieder: 01:00:01 usw.

Mit einer kleinen Änderung habe ich noch ein Script gemacht das mir im Designer auch nur die jeweilige Brennerlaufzeit anzeigt.
Also habe ich die Gesamtlaufzeit und auch nur die jeweilige Einschaltzeit
else // Brenner hat wieder ausgeschaltet
IPS_SetScriptTimer($IPS_SELF, 0); // ScriptTimer wieder löschen
$ende=0; // setzt die Variable wieder auf 0
SetValueInteger(„Brenner_Laufzeit_kurz“, $ende); // Hält die jeweilige Brenndauer bis zum nächst. Start
break;
Noch ein kleiner Wunsch:
Ich brauche die Zeit des nächsten Brennerstarts.(durch die Wiedereinschaltsperre kann nur nach Ablauf von 10 Min. ein neuer Brennerstart erfolgen.
Beispiel:
Brenner lief 05:30 Minuten, dann soll die Zeit bis zum nächsten Start als Countdown im Designer ablaufen.
:smiley: Einfach zu rechnen: 10 Min- 5Min. Countdown soll von 04:30 auf 00:00 herunterzählen.
Ich kriegs leider nicht hin.:o
Vielen Dank im Voraus
Egon

Hallo Egon,

Du hast Recht. Ursache hierfür ist die Tatsache, dass die Funktion date(…) die lokale Zeitzone berücksichtigt.

Man sollte stattdessen besser die Funktion gmdate(…) verwenden. Diese bezieht sich immer auf Greenwich Mean Time (GMT). Damit tritt dann keine Abweichung auf.

Wiedereinschaltsperre:
Bist Du sicher, dass die Sperre sich auf den EINschaltzeitpunkt bezieht und nicht auf den AUSschaltzeitpunkt?
Ich glaube eher, dass der Brenner 10min lang AUSgeschaltet sein muss, bevor er erneut startet. Nach Deiner Rechnung würde er nach einer Laufzeit von 00:09:59 bereits nach 1 Sekunde wieder neu starten.

Gruß
HJH

Das denke ich aber auch! Zum Einen sollen wohl ganz kurze Brennertaktungen vermieden werden, zum Anderen könnte es vielleicht zu ungewollten Fehlzündungen kommen, wenn der Brennraum etc. heiß ist.

Man sollte stattdessen besser die Funktion gmdate(…) verwenden. Diese bezieht sich immer auf Greenwich Mean Time (GMT). Damit tritt dann keine Abweichung auf.
genau DAS hab ich noch gebraucht!!

Zu meinem script:

TRUE/FALSE:
Am Skript liegt es mit Sicherheit nicht. Du solltest evtl. noch einmal die Erzeugung des „Brenner“-Signals überprüfen.

Bei mir läuft’s noch im Testbetrieb und der Brennerlauf wird durch einen Button (sim.) gestartet. Die Variable zeigt mir auch True an, wenn der Brenner (sim.) läuft. Egal - ich weiß ja jetzt, wie man’s invertiert!

Ich würde den verbleibenden Tankinhalt so berechnen:

verbleibender Tankinhalt = Tankvolumen - bisheriger Verbrauch

Ok-An Rundungsfehler hab ich nicht gedacht! :rolleyes:Danke für den Tipp.
Ich habs auch schon mit $inhalt-$verbrauch probiert, jedoch mit dem bereits addierten Verbrauch, der jede Sekunde subtrahiert wurde. Is natürlich nix!

Bei

$tankinhalt = $tankvolumen - $verbrauch;

muss ich eben irgendwo eine Startmenge festlegen, da Volumen =3000l, Inhalt (Restmenge)= 1200l… Für die Startmenge brauche ich noch ein „Input“ (so hieß das mal beim Basic:)) damit ich nach dem Tanken die aktuelle Menge eingeben (setzen) kann. Naja, werd’s schon hinkriegen.

Danke großer Meister.

Ach ja, und wenn das Öl alle ist, heiße ich mit Holz weiter…

HAT JEMAND EINE HOLZVERBRAUCHSBERECHNUNG PARAT ?? :D:D

Uuppsss?!

Man sollte stattdessen besser die Funktion gmdate(…) verwenden. Diese bezieht sich immer auf Greenwich Mean Time (GMT). Damit tritt dann keine Abweichung auf.

Ääh… FAST keine Abweichung… bei mir sind’s mit gmdate(…) jetzt 12:00:00 Stunden Startzeit:confused:
Dann lieber nur eine Stunde:o
Oder hab ich was falsch gemacht??

Hallo Ralf!
Bei mir gehts jetzt mit gmdate Einwandfrei.:slight_smile:
Viel Spass beim weitertesten.

Meine Brennersperrzeit ist Tatsächlich so wie oben beschrieben.
Immer 10 Minuten, ausser der Brenner lief länger als die 10 Min…
Auch in diesem Fall erfolgt ein sofortiger Neustart-falls Istwert 4 Grad kleiner als Sollwert ist.
Gruß
Egon.

klar, bestimmt geht das bei jedem verdammten Rechner auf diesem Planeten - nur BEI MIR NICHT:mad:

Meine Brennersperrzeit ist Tatsächlich so wie oben beschrieben.
Immer 10 Minuten, ausser der Brenner lief länger als die 10 Min…
Auch in diesem Fall erfolgt ein sofortiger Neustart-falls Istwert 4 Grad kleiner als Sollwert ist.
Gruß
Egon.

Naja…eigentlich kann er nach dem Abschalten nicht neu starten, sonst wäre er ja ausgegangen, ohne seinen Sollwert zu erreichen…

Liebe leut : Wenn ihr mal im inneren ihren öl-offen reinschauen wurdest, gibt es ein ding die so zimmlich wichtig ist.
Verbrennung geht nur wenn luft und öl gemisch ubereinstimmt… (Wieso denkste das ein kaminofen so viel larm macht - luft gebläse). Die DUSE bestimmt das anzahl öl die reingespritzt wird und wird in Gallon/minute ausgedruckt. (Zufalligerweise mein nachname)
Wenn ihr eueres skript unter controlle bekommt - und das ist ein fakt - wenn ich sehe mit wieviel eifer daran gebastellt wird - - (wow eine zeile mit 2 denk striche - oder wie heissen diese dinger auf Deutsch-) könntet ihr - die tolleranz auf die duse in einspruch genommen - eueren verbrauch in liter öl berechnen.
Wie ist dass als denk anstoss :smiley:

Ihr braucht nur zu wissen was fuer eine duse montiert ist. 4 schrauben los, die duse raus und auf den rand steht die magische zahl.

Bitte

korrigiere geringfügig: …bestimmt geht das bei jedem verdammten Rechner auf diesem Planeten, der gmdate(„H:i:s“… da stehen hat, statt gmdate(„h:i:s“…:slight_smile:

Hallo GGGGGssss!

Oder ist da ein G oder s zuviel drin?:smiley:
Ich habe Gasbrenner!:stuck_out_tongue:
Gasverbrauch erfasse ich über die Gasuhr-mit Reedkontakt
Schönen Abend noch
Egon