Betriebsstundenzähler Heizung

Hallo,

gibt es eine Funktionierende Anwendung, wo Betriebstunden( bei mir der Kessel) aufgezeichtet und zur Auswertung abgespeichert werden?

Im GitHub gibt es eine Funktion und auch im Forum verschiedene Ansätze die aber leider bei mir nicht zum laufen kommen.

Da ich in IPS noch nicht so sattelfest bin, wäre eine einfache Lösung von Vorteil;)

Steve

Welche Heizung hast du?
Ich habe meine Öl Heizung vor kurzer Zeit umgerüstet und funktioniert super.
Hast du Daten von der Heizung?
Oder einfach Fotos hochladen
Mfg
Maxx

Ich benutze dieses Script, was ich im Forum irgendwo mal gefunden hatte.

<?
//$starttime = strtotime("today 00:00"); // Startzeit der Auswertung in dem Fall heute 0 Uhr muss angepasst werden.
$starttime = strtotime("24.01.2020"); // Startzeit der Auswertung in dem Fall heute 0 Uhr muss angepasst werden.
$ArchiveID = IPS_GetInstanceListByModuleID('{43192F0B-135B-4CE7-A0A7-1475603F3060}')[0]; // Archiv Handler ID wird automatisch ausgelesen 
$State_VarID = 21125 /*[EG\heizraum\heizung\Brenner]*/; // Objekt ID der geloggten Boolean Schaltvariable
 //Alle heutigen Datensätze abfragen
$LogDatenAR = AC_GetLoggedValues($ArchiveID, $State_VarID, $starttime, time(), 0);

$Count = 0; 
$duration = 0;
$timestampon = 0;
$timestampoff = 0;
foreach ($LogDatenAR as $LogWert)
 { 
        $timestampcurrent = $LogWert['TimeStamp'];
    
    if ($LogWert['Value'] == 1)
    {    
       $timestampon = $timestampcurrent;
       if ($duration == 0 && $timestampoff == 0)
       {
               $timestampoff = time();
       }
       $intervall = abs($timestampoff - $timestampon);
       $duration = $duration + $intervall;
       $Count++;
       $timestampon = 0;
       $timestampoff = 0;  
    }
    elseif ($LogWert['Value'] == 0 && $timestampon != 0)
    {
       $intervall = abs($timestampcurrent - $timestampon);
       $duration = $duration + $intervall;
    }
    elseif ($LogWert['Value'] == 0 && $timestampon == 0)
    {
       $timestampoff = $timestampcurrent;
    }
} 

function intervall($sek) {
    $i = sprintf('%d Tag%s, %d Stunde%s,'.
            ' %d Minute%s und %d Sekunde%s',
            $sek / 86400,
            floor($sek / 86400) != 1 ? 'e':'',
            $sek / 3600 % 24,
            floor($sek / 3600 % 24) != 1 ? 'n':'',
            $sek / 60 % 60,
            floor($sek / 60 % 60) != 1 ? 'n':'',
            $sek % 60,
            floor($sek % 60) != 1 ? 'n':''
         );
    return $i;
}

$formattedduration = intervall($duration);

echo "Es wurden ".$Count." Schaltvorgänge registriert.
 Die Anschaltzeit hatte eine Gesamtdauer von ".$formattedduration." (= ".$duration." Sekunden).
"; 

// Verbrauch 1,15l/h.

$consumption = $duration * (1.15 / 3600);

echo "Es wurden ".round($consumption, 2)." Liter Gas verbraucht."; 

SetValue(22321 /*[EG\heizraum\heizung\Verbrauch]*/, $consumption);
SetValue(43864 /*[EG\heizraum\heizung\Laufzeit]*/, $formattedduration);
setvalue(55976 /*[EG\heizraum\heizung\Brennerstarts]*/, $Count);

?>

Brauchst halt nur eine Bool Variable die geloggt wird.

cu.
uriel2006

#Maxx
Also ich habe einen Vissmann-Trimatik Öl-Kessel der 25jahre super seinen Dienst verrichtet. Jedoch habe ich bei Stromausfällen öfters Probleme( Einstellungen gehen verloren).
Von daher nutze ich die geniale Integration von Siemens LOGO8 um eine alternative Steuereinheit zu meiner Trimatik aufzubauen.
Ich habe zwischen der Trimatik und den Aktoren (Mischer/Pumpen) eine LOGO8/230V verbaut wo grundsätzlich die Ansteuerungen von der Trimatik zu den Aktoren weiter gegeben werden.
Parallel dazu erstelle ich ein Programm in der LOGO als Reserve zur Steuerung der Heizung. Damit habe ich die Möglichkeit drei Betriebsarten(über IPS)zu wählen:

  1. Regelung über Viessmann-Trimatik
  2. Regelung über die Siemens LOGO,
  3. Handsteuerung über IPS.

Für 2. habe ich jetzt Dank der Hilfe im Forum die Möglichkeit, meine Temperaturdaten von den DS18B20-Sensoren an die LOGO zu übermitteln.

Das ist die Basis, um später auch noch alternative Energiequellen ( Photovoltaik u.ä.) mit meiner jetzigen Heizung zu vereinen.

Und jetzt zum eigentlichen Anliegen;)

Für den ganzen Zauber brauche ich natürlich noch Betriebsstundenzähler um das Zusammenspiel zu optimieren. Dafür habe ich den Feuerungsautomaten vom Brenner angezapft um die Information zu bekommen, wann genau Öl eingespritzt wird. Die Ölmenge habe ich mit einem Versuch genau ausgelitert um den Verbrauch genau zu ermitteln.

#uriel2016- vielen Dank schon mal, werde das Skript heut Abend ausprobieren. Verstehe ich richtig, dass ich ein Skript erstelle und dann deine Variante hinein kopiere oder läuft das über ein Ereignis?
So wie ich erkennen kann, brauche ich dann noch drei Variablen für die Ausgabe.

Ich logge bei mir wann der Brenner aktiv ist.
Das Script läuft aller 5 min.
Ich brauche es damit ich eine ca. ahnung habe wie voll mein Gastank noch ist.
Nach jeder Füllung gebe ich das Datum neu an.

$starttime = strtotime("24.01.2020");

Den verbrauch L /h Trägst du ein bei:

$consumption = $duration * (1.15 / 3600);

Bei mir sind es ca. 1,15L Flüssiggas was sie pro Betriebssunde benötigt.

SetValue(22321 /*[EG\heizraum\heizung\Verbrauch]*/, $consumption); //Gesamter Verbrauch in Liter seit Datum
SetValue(43864 /*[EG\heizraum\heizung\Laufzeit]*/, $formattedduration); //Gesammte Brennerlaufzeit D:h:m:s seit datum
setvalue(55976 /*[EG\heizraum\heizung\Brennerstarts]*/, $Count); //wie oft wurde der brenner gestartet seit Datum

cu.
uriel2006

kurze Frage, dabei mir nichts zählt.
Muss das Skript angeschoben werden in dem es mit einem Ereignis verbunden werden muss?

Also hat deine Trimatik doch länger durchgehalten als meine:confused:.
Ich habe die komplette Steuereung über einen Pi2 mit IPS nachgebaut, und auch die Laufzeiten des Brenners drin.
Am Brennerstecker ist ein Ausgang (230 Volt) für Betriebsstunden, den auf aine Relais legen und über dein Hardwarewahl in IPS bringen. Bei mir ist es ein Binäreingang über LCN, aber auch mit Logo sollte es so gehen. Wenn der Eingang kommt, zählt ein Skript die Sekunden und errechent über die Zeit ( Angaben vom Brenner, Verbrauch pro Stunde ) den Verbrauch hoch. Das klappt recht gut, und die Laufzeiten vom Brenner sind auch zu sehen.
Die alte Trimatik werkelt bei mir nicht mehr, lasse das ganze jetzt seit Jahren über den Pi mit IPS laufen, und bin zufrieden, da auch der Ölverbrauch runter gegangen ist. Hier werkeln auch nur noch DS12x20 und Relais am PI, die Logik liegt bei mir im IPS, aber das sollte auch mit einer Logo gehen.
Das ganze habe ich auch für eineVaillant Therme (bei meiner Tochter) mal über einen Pi und IPS gebaut, und siehe da, der Gasverbrauch ist gesunken, Nachteil beider Steuerungen, wenn der Pi oder IPS den Geist aufgibt, geht nix mehr. Aber da sehe ich mittlerweile kein Problem mehr, da die original Steuerungen auch keine Haltbarkeit mehr haben.
Beispiel die alte Trimatik, die hat eine Batterie(nicht wechselbar) verbaut, wenn die nach 10 Jahren platt ist, geht nix mehr(ausser man kommt an Daten ran !) Aber die sind schwer zu bekommen, wenn man selber die Batterie ersetzen kann.

#Thomas- ich habe zum Glück alle möglichen Unterlagen von der Trimatik und kann die Einstellungen wiederherstellen.

Noch mal die Frage in die Runde, wie ich das Skript von Uriel umsetze. Bis jetzt habe ich ein leeres Skript erstellt und habe hinein kopiert und die Variablen erstellt und entsprechend eingegeben mit den Bool das ausgewertet werden soll. Es wird aber nichts gezählt bzw.ausgewertet.

Folgende Meldungen werden angezeigt:

Warning: Logging is not available for this variable in /var/lib/symcon/scripts/50841.ips.php on line 7

Warning: Invalid argument supplied for foreach() in /var/lib/symcon/scripts/50841.ips.php on line 13
Es wurden 0 Schaltvorgänge registriert.
Die Anschaltzeit hatte eine Gesamtdauer von 0 Tage, 0 Stunden, 0 Minuten und 0 Sekunden (= 0 Sekunden).
Es wurden 0 Liter Gas verbraucht.

Steve

Das Script lasse ich automatisch aller 5 min. starten.
Das Logging muss für die Bool aktiv sein. Dann funktioniert das auch.
cu.

Vielen Dank für die Unterstützung, es funktioniert perfekt.

Es sind die kleinen Dinge, die entscheidend sind;)…das Logging hatte ich nicht aktiviert.

Die Anzeige der Variablen habe ich auch hin bekommen. Die müssen halt auf String eingestellt sein um eine Sinnvolle Anzeige zu bekommen.

Steve

hallo zusammen.
Wie kann ich einen Sting erzeugen „Letzter Brenner Start“ „Letzter Brenner Stop“ jeweils Uhrzeit und „Letzte Laufzeit“ in Minuten
und mit den entsprechenden Daten füttern?
Dann würde ich gerne die Werte für Gesamtlaufzeit an jedem Monatsende abspeichern
und das am liebsten in eine Datei die nicht auf dem IPS Rechner liegt.

Bernd

Den Ansatz finde ich grundsätzlich merkwürdig. Du hast doch alle Daten in IPS im Archiv und kannst die völlig nach belieben und Zeit auswerten. Monatlich, Täglich, Jährlich.

Gesendet von iPhone XS mit Tapatalk

Das mag für jemanden der sich sehr gut auskennt, kein Problem sein.
Für mich ist es eine senkrechte Mauer, die ich mit meinem geringen Wissen nicht erklimmen kann.
Bestehende Scipte einbauen und evtl. leicht anpassen, schaffe ich noch, solange ich verstehe was die überhaupt machen.
Was bei den meisten Scripten nicht der Fall ist.
Ich suche meist recht lange in Forum nach irgendwelchen Lösungen die andere gefunden haben.

Ansonsten würde ich nicht Fragen…
Also wenn du mir helfen könntest wie ich an diese Daten „einfach“ kommen, wäre ich schon einen Schritt weiter.
Ich finde nämlich keinen Ansatz die Uhrzeiten aus den Daten zu finden.

Bernd

Das war nicht böse gemeint. Ich hab mir angeschaut, dass Du seit 2006 Mitglied bist.

Ich bin nun auch nicht der Coder aber für mich ist das Archiv der Speicherort aller Daten. Zumal man die Datenbank, sogar monats- oder jahrweise(wie auch immer)wegsichern kann, da es cvs Dateien sind.

Es gibt zur Aufbereitung ja viele Ansätze (auch in der Doku zum Archiv). Ich bin damals (noch ohne viel Ahnung )für die Heizung simpel vorgegangen. Brennerstarts zählen und Laufzeit zählen. Um Mitternacht übertrage ich die Tageswerte in die Variable Brennerstarts gestern und Laufzeit gestern. Beide nulle ich um Mitternacht. Ölverbrauch gestern und gesamt errechne ich aus der Laufzeit.
Das ist ja einfach ohne große Programmierung zu machen.
Man kann das auch direkt aus dem Archiv auslesen. Siehe Doku.
Es gibt auch ein fertiges Modul, da kannst Du Dir Archivdaten einer Variablen von Datum bis Datum anzeigen lassen.
Instanz „Verbrauch in Zeitspanne“ anlegen. Variable auswählen. Fertig. Die angelegten Variablen „Start-Datum“, End-Datum“ und Verbrauch verlinks Du im WebFront und kannst dort direkt die Daten auswählen.
Alles fertig.

Gesendet von iPhone XS mit Tapatalk

Ja schon lange Mitglied.
Aber erst nach Defekt der alten Hardware gezwungen auf 5.x upzudaten.
Frag nicht was so lange galaufen hat.
Dementsprechend unwissend und ratlos seteh ich vor dem neuen…

Ich werde mich mal über die näöchsten Wochen einlesen.
Jetzt steht erstmal stabiler Betreib der wichtigsten Funktionen im Vordergrund.

Bernd

Grins.

Ja, so läuft das manchmal. Zur Zeit hat man ja Zeit.

Gesendet von iPhone XS mit Tapatalk

Hallo
Ich hab mir die Lösung selbst zusammengefummelt…, musste ja nur etwas löschen.
und für die Jahreswerte das Script verdoppeln und den Startzeitpunkt ändern.

function intervall($sek) {
//   $i = sprintf('%d Tag%s, %d Stunde%s,'.
//            ' %d Minute%s und %d Sekunde%s',
   $i = sprintf('%d Stunde%s,'.
            ' %d Minute%s und %d Sekunde%s',
//            $sek / 86400,
//            floor($sek / 86400) != 1 ? 'e':'',
            $sek / 3600,
            floor($sek / 3600) != 1 ? 'n':'',
            $sek / 60 % 60,
            floor($sek / 60 % 60) != 1 ? 'n':'',
            $sek % 60,
            floor($sek % 60) != 1 ? 'n':''
         );
    return $i;
}

Aber wie kann ich die bereits vorhandene Laufzeit vor dem mitloggen der Starts hinzurechnen?
Da fehlt es wieder am Wissen…
Hilfe ist sehr willkommen

Bernd