Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Hardware
    4. Brenner Zustand abgreifen

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Brenner Zustand abgreifen

    This topic has been deleted. Only users with topic management privileges can see it.
    • joergeli
      joergeli @cainam last edited by

      @cainam

      Hier meine "Hardware"-Lösung:

      Ich wollte ebenfalls (bereits bevor ich ioBroker eingesetzt habe) den Brenner-Zustand loggen.
      Da ich in Sachen Heizungstechnik Laie bin, bzw. keinen Eingriff in die Heizungselektronik vornehmen wollte, habe ich folgende Lösung realisiert.
      Ich weiß, daß in unserer Öl-Heizung ein sog. Flammen-Wächter verbaut ist.
      Dieser hat die Aufgabe, die Flammen in der Brennerkammer zu "beobachten" und im Falle einer Störung entspr. abzuschalten.
      Warum also nicht einen zweiten Flammenwächter verwenden, der nur die Zustände "Flammen in Brennerkammer vorhanden", oder "Keine Flammen in Brennerkammer" zu erfassen.
      Dazu habe ich mir ein sog. IR Flammensensor-Modul für Arduino besorgt:
      flammensensor-modul.jpg
      An dem Modul habe ich die IR-Diode mit einem Kabel verlängert und die Diode einfach neben den vorhandenen Flammenwächter gesteckt (das weisse Kabel).
      Fremdlicht kann hier nicht eindringen, weil noch eine Abdeckhaube über den kpl. Brenner gestülpt ist, die ich nur für das Foto abgenommen habe:
      flammenwaechter.jpg
      Das Modul habe ich dann mit einer NodeMCU (ESP8266) "verheiratet" und die NodeMCU sendet seither jede Minute per WLAN den Brennerzustand ( an/aus).

      Ich wollte das gerne haben, um mögl. alle Zustände meiner Solarthermie-Anlage zu visualisieren:
      tagesverlauf.jpg
      In dieser Grafik kann man erkennen, wann der Brenner angesprungen ist (rote Balken am unteren Bildrand).
      Die obere rote Kurve zeigt den Temperaturverlauf des Warmwasser-Speichers.
      Die erste Aufheizung erfolgte hier ca. um 09:20 Uhr, die zweite gegen 13:35 Uhr, wobei man auch sieht, daß da der Brenner angesprungen ist.

      Der Brenner springt natürlich auch an, um das Haus zu beheizen, das kann man an den Zeitpunkten der roten Balken erkennen, wo keine Aufheizung des Warmwasser-Speichers erfolgte.

      Wie gesagt, ich habe das bereits vor meiner ioBroker-Zeit gebastelt und die Grafik wird seither alle 5 Min. auf einem Windows-PC mittels gnuplot erstellt und auf meine Wetterstations-Seite übertragen.
      Das näher zu erläutern würde hier aber zu weit führen.

      Ich wollte hier nur zeigen, daß man auch ohne elekrischen Eingriff in die Heizung dort Daten abgreifen kann.

      Gruß
      Jörg

      1 Reply Last reply Reply Quote 1
      • C
        cainam last edited by

        So, abgreifen tue ich es mit einem Shelly EM - bisher scheint das zu funktionieren.

        Mein Code für die Berechnungen (Hab es in Blockly gemacht, aber keine ahnung wie ich das reinkopiere):

        Was meint ihr dazu? Fehler?

        var GelaufenD, Betriebsstunden_Brenner, gelaufenF, GelaufenM, GelaufenJ, Tankinhalt, Einschaltsdauer_in_ms, Einschaltzeit, Einschaltdauer_in_h, Ausschaltzeit, Verbrauch_KG_h, kg_in_l_umrechnungsfaktor;
        
        // Beschreibe diese Funktion …
        async function Einschaltdauer() {
          // Addieren zu vorhanden
          Einschaltsdauer_in_ms = Ausschaltzeit - Einschaltzeit;
          Einschaltdauer_in_h = Einschaltsdauer_in_ms / 3600000;
        }
        
        // Beschreibe diese Funktion …
        async function laufender_Tag_aktuallisieren() {
          GelaufenD = getState("EigeneDatenpunkte.0.Heizung.Brenner_Betriebsstunden_heute").val + Einschaltdauer_in_h;
          setState("EigeneDatenpunkte.0.Heizung.Brenner_Betriebsstunden_heute"/*Brenner_Betriebsstunden_heute*/, GelaufenD, true);
          setState("EigeneDatenpunkte.0.Heizung.Brenner_Verbrauch_heute"/*Brenner_Verbrauch_heute*/, (GelaufenD * Verbrauch_KG_h * kg_in_l_umrechnungsfaktor), true);
        }
        
        // Beschreibe diese Funktion …
        async function Betriebsstunden_aktuallisieren() {
          Betriebsstunden_Brenner = getState("EigeneDatenpunkte.0.Heizung.Brenner_Betriebstunden_Total").val + Einschaltdauer_in_h;
          setState("EigeneDatenpunkte.0.Heizung.Brenner_Betriebstunden_Total"/*Brenner_Betriebstunden_Total*/, Betriebsstunden_Brenner, true);
        }
        
        // Beschreibe diese Funktion …
        async function Seit_letzter_Fuellung_aktualisieren() {
          gelaufenF = getState("EigeneDatenpunkte.0.Heizung.Brenner_Betriebsstunden_seit_letzter_Fuellung").val + Einschaltdauer_in_h;
          setState("EigeneDatenpunkte.0.Heizung.Brenner_Betriebsstunden_seit_letzter_Fuellung"/*Brenner_Betriebsstunden_seit_letzter_Fuellung*/, gelaufenF, true);
          setState("EigeneDatenpunkte.0.Heizung.Brenner_Verbrauch_seit_letzter_Fuellung"/*Brenner_Verbrauch_seit_letzter_Fuellung*/, (gelaufenF * Verbrauch_KG_h * kg_in_l_umrechnungsfaktor), true);
        }
        
        // Beschreibe diese Funktion …
        async function laufender_Monat_aktuallisieren() {
          GelaufenM = getState("EigeneDatenpunkte.0.Heizung.Brenner_Betriebsstunden_laufender_Monat").val + Einschaltdauer_in_h;
          setState("EigeneDatenpunkte.0.Heizung.Brenner_Betriebsstunden_laufender_Monat"/*Brenner_Betriebsstunden_laufender_Monat*/, GelaufenM, true);
          setState("EigeneDatenpunkte.0.Heizung.Brenner_Verbrauch_laufender_Monat"/*Brenner_Verbrauch_laufender_Monat*/, (GelaufenM * Verbrauch_KG_h * kg_in_l_umrechnungsfaktor), true);
        }
        
        // Beschreibe diese Funktion …
        async function laufendes_Jahr_aktuallisieren() {
          GelaufenJ = getState("EigeneDatenpunkte.0.Heizung.Brenner_Betriebsstunden_laufendes_Kalenderjahr").val + Einschaltdauer_in_h;
          setState("EigeneDatenpunkte.0.Heizung.Brenner_Betriebsstunden_laufendes_Kalenderjahr"/*Brenner_Betriebsstunden_laufendes_Kalenderjahr*/, GelaufenJ, true);
          setState("EigeneDatenpunkte.0.Heizung.Brenner_Verbrauch_laufendes_Kalenderjahr"/*Brenner_Verbrauch_laufendes_Kalenderjahr*/, (GelaufenJ * Verbrauch_KG_h * kg_in_l_umrechnungsfaktor), true);
        }
        
        // Beschreibe diese Funktion …
        async function Tankinhalt2() {
          Tankinhalt = getState("EigeneDatenpunkte.0.Heizung.Tankinhalt_nach_letzter_fuellung").val - getState("EigeneDatenpunkte.0.Heizung.Brenner_Verbrauch_seit_letzter_Fuellung").val;
          setState("EigeneDatenpunkte.0.Heizung.Tankinhalt_aktuell"/*Tankinhalt_aktuell*/, Tankinhalt, true);
        }
        
        // Beschreibe diese Funktion …
        async function Telegrammeldung() {
          sendTo("telegram", "send", {
              text: (['Brenner ist gelaufen für:  ',Math.round(Einschaltdauer_in_h*100)/100,'\n','Verbrauch: ',Math.round((Einschaltdauer_in_h * Verbrauch_KG_h * kg_in_l_umrechnungsfaktor)*100)/100,'\n','Total Betriebsstunden heute: ',Math.round(GelaufenD*100)/100].join(''))
          });
          console.debug("telegram: " + (['Brenner ist gelaufen für:  ',Math.round(Einschaltdauer_in_h*100)/100,'\n','Verbrauch: ',Math.round((Einschaltdauer_in_h * Verbrauch_KG_h * kg_in_l_umrechnungsfaktor)*100)/100,'\n','Total Betriebsstunden heute: ',Math.round(GelaufenD*100)/100].join('')));
        }
        
        
        // Shellystatus an BrennerStatus übergeben
        on({id: "shelly.0.SHEM#062243#1.Emeter0.Power"/*Power*/, change: "ne"}, async function (obj) {
          var value = obj.state.val;
          var oldValue = obj.oldState.val;
          if ((obj.state ? obj.state.val : "") >= 150) {
            setState("EigeneDatenpunkte.0.Heizung.Brenner_Status"/*Brenner_Status*/, true);
          }
          if ((obj.state ? obj.state.val : "") < 150) {
            setState("EigeneDatenpunkte.0.Heizung.Brenner_Status"/*Brenner_Status*/, false);
          }
        });
        
        schedule('{"time":{"exactTime":true,"start":"00:00"},"period":{"days":1}}', async function () {
          setState("EigeneDatenpunkte.0.Heizung.Brenner_Betriebsstunden_heute"/*Brenner_Betriebsstunden_heute*/, 0, true);
          setState("EigeneDatenpunkte.0.Heizung.Brenner_verbrauch_heute", 0, true);
        });
        
        on({id: "EigeneDatenpunkte.0.Heizung.Brenner_Status"/*Brenner_Status*/, change: "ne"}, async function (obj) {
          var value = obj.state.val;
          var oldValue = obj.oldState.val;
          // Brenner Ein
          if ((obj.state ? obj.state.val : "") == true) {
            Einschaltzeit = (new Date().getTime());
            setState("EigeneDatenpunkte.0.Heizung.Brenner_last_on"/*Brenner_last_on*/, formatDate(getDateObject(Einschaltzeit), "JJJJ.MM.TT SS:mm:ss.sss"), true);
          }
          // Brenner aus
          if ((obj.state ? obj.state.val : "") == false) {
            // Variabeln setzen
            Verbrauch_KG_h = 1.68;
            kg_in_l_umrechnungsfaktor = 1.197;
            // Kommentar
            Ausschaltzeit = (new Date().getTime());
            setState("EigeneDatenpunkte.0.Heizung.Brenner_last_off"/*Brenner_last_off*/, formatDate(getDateObject(Ausschaltzeit), "JJJJ.MM.TT SS:mm:ss.sss"), true);
            await Einschaltdauer();
            await Seit_letzter_Fuellung_aktualisieren();
            await Tankinhalt2();
            await laufendes_Jahr_aktuallisieren();
            await laufender_Monat_aktuallisieren();
            await laufender_Tag_aktuallisieren();
            await Betriebsstunden_aktuallisieren();
            await Telegrammeldung();
          }
        });
        
        schedule("0 0 30 * *", async function () {
          setState("EigeneDatenpunkte.0.Heizung.Brenner_Betriebsstunden_laufender_Monat"/*Brenner_Betriebsstunden_laufender_Monat*/, 0, true);
          setState("EigeneDatenpunkte.0.Heizung.Brenner_Verbrauch_laufender_Monat"/*Brenner_Verbrauch_laufender_Monat*/, 0, true);
        });
        
        schedule("0 0 31 12 *", async function () {
          setState("EigeneDatenpunkte.0.Heizung.Brenner_Betriebsstunden_laufendes_Kalenderjahr"/*Brenner_Betriebsstunden_laufendes_Kalenderjahr*/, 0, true);
          setState("EigeneDatenpunkte.0.Heizung.Brenner_Verbrauch_laufendes_Kalenderjahr"/*Brenner_Verbrauch_laufendes_Kalenderjahr*/, 0, true);
        });
        
        
        
        1 Reply Last reply Reply Quote 0
        • D
          danzlrobert @cainam last edited by

          @cainam hallo, kannst du mir bitte helfen?
          Ich habe an meinem Brenner ein Koppel-Relaise direkt am Brenner, also wenn der einschaltet zieht das Koppel-Relaise an,
          nun würd ich gerne damit die Laufzeiten in IOBroker weitergeben mit einem Wemos D1. Hab da dein Bild gesehen
          und dachte mir das wäre etwas.

          https://forum.iobroker.net/assets/uploads/files/1604490837562-finder-49.52.8.230.0060-relaisbaustein-nennspannung-230-v-ac-schaltstrom-max.8a-2-wechsler-1st..jpg

          Hättest du dazu ein Programm für den Wemos D1 damit ich die Laufzeiten in den IOBroker bekomme?
          Vielen Dank für deine Hilfe!

          Chaot 1 Reply Last reply Reply Quote 0
          • Chaot
            Chaot @danzlrobert last edited by

            @danzlrobert Wenn du ein Koppelrelais hast brauchst du doch kein weiteres Relais.
            Das Relais wird (wenn es wirklich potentialfrei ist) am Wemos D1 mini an einem der GPIOs angeschlossen gegen GND.
            Welche Firmware du auf dem Wemos hast ist zunächst egal, ob Tasmota oder irgendwas anderes. Hauptsache du bekommst die Daten über MQTT ins Netzwerk versendet.

            Im ioBroker nimmst du dann entweder den MQTT Adapter oder den Sonoff (wenn Tasmota) und schreibst dor den Datenpunkt in eine Datenbank.

            Steigerung der Aktion wäre dann noch zwei DS18B20 Sensoren an den anderen GPIOs um Vor- und Rücklauftemperatur zu loggen 😊

            D 1 Reply Last reply Reply Quote 0
            • D
              danzlrobert @Chaot last edited by

              @chaot Erstmals vielen Dank für die schnelle Antwort.
              Ich meinte ja das ich den Kontakt von meinem Koppel-Relaise an den WemosD1 hänge.
              Was muss ich nun machen einen GPIO gegen GND oder 5V? An welchen GPIO?
              Hab am Wemos Tasmota laufen (Generic18) was muss ich dort einstellen?
              Hatte auch einige DS18B20 (vergossen) bei mir rumliegen, wo müsste ich die dranhängen und wie
              bekomm ich das ganze in den IOBroker, hab dort MQTT auch laufen.
              Wie muss ich das ganze dann einstellen?

              Chaot 1 Reply Last reply Reply Quote 0
              • Chaot
                Chaot @danzlrobert last edited by Chaot

                @danzlrobert Ach so.

                Das Relais sollte idealerweise den GPIO gegen GND schalten. Manchmal funktioniert das nicht, dann kannst du auch 3,3V als Schaltspannung nehmen. Die 5V solltest du am GPIO nicht verwenden. Der sollte das zwar abkönnen, aber da würde ich nicht zu 100% darauf vertrauen.

                In der Weboberfläche bei Tasmota gehst du auf Einstellungen - Gerät konfigurieren
                Dort wählst du den passenden GPIO aus auf dem dein Relais schaltet und wählst dort SWITCH1 (oder andere Nummer). Ich würde GPIO 0,2 und 15 nicht zur Verwendung empfehlen solange du andere frei hast. Die haben besondere Funktionen oder reagieren speziell wenn sie beim Start auf LOW liegen.
                Beim DS18B20 machst du im Grunde das selbe. Mit mehreren zusammen habe ich keine Erfahrung, da müsstest du selbst mal in der Tasmota Wiki nachschauen wie die dann verschaltet werden.

                Dann gehst du auf den Reiter MQTT konfigurieren.
                Hier gibst du ein:
                Host: - deine IP Adresse vom ioBroker
                Port:-1883 wenn du den MQTT Adapter in der Grundeinstellung verwendest. Solltest du den Sonoff Adapter verwenden wäre es ratsam einen anderen Port zu wählen. Ich verwende hier 1500
                Client:-Hier gibst du dem Ding einen sinnvollen Namen. Brennerkontrolle z.B.
                Benutzer:-Der Benutzername den du im Adapter angegeben hast
                Passwort:- Logisch! das zugehörige Passwort
                topic und full_topic musst du nicht unbedingt verändern.

                D 1 Reply Last reply Reply Quote 0
                • D
                  danzlrobert @Chaot last edited by

                  @chaot said in Brenner Zustand abgreifen:

                  @danzlrobert Ach so.

                  Das Relais sollte idealerweise den GPIO gegen GND schalten. Manchmal funktioniert das nicht, dann kannst du auch 3,3V als Schaltspannung nehmen. Die 5V solltest du am GPIO nicht verwenden. Der sollte das zwar abkönnen, aber da würde ich nicht zu 100% darauf vertrauen.

                  In der Weboberfläche bei Tasmota gehst du auf Einstellungen - Gerät konfigurieren
                  Dort wählst du den passenden GPIO aus auf dem dein Relais schaltet und wählst dort SWITCH1 (oder andere Nummer). Ich würde GPIO 0,2 und 15 nicht zur Verwendung empfehlen solange du andere frei hast. Die haben besondere Funktionen oder reagieren speziell wenn sie beim Start auf LOW liegen.
                  Beim DS18B20 machst du im Grunde das selbe. Mit mehreren zusammen habe ich keine Erfahrung, da müsstest du selbst mal in der Tasmota Wiki nachschauen wie die dann verschaltet werden.

                  Dann gehst du auf den Reiter MQTT konfigurieren.
                  Hier gibst du ein:
                  Host: - deine IP Adresse vom ioBroker
                  Port:-1883 wenn du den MQTT Adapter in der Grundeinstellung verwendest. Solltest du den Sonoff Adapter verwenden wäre es ratsam einen anderen Port zu wählen. Ich verwende hier 1500
                  Client:-Hier gibst du dem Ding einen sinnvollen Namen. Brennerkontrolle z.B.
                  Benutzer:-Der Benutzername den du im Adapter angegeben hast
                  Passwort:- Logisch! das zugehörige Passwort
                  topic und full_topic musst du nicht unbedingt verändern.

                  VIELEN DANK!

                  Chaot 1 Reply Last reply Reply Quote 0
                  • Chaot
                    Chaot @danzlrobert last edited by

                    @danzlrobert Ein kleiner Trick noch:
                    Ich ordne einem Switch immer ein Relais zu. Auch wenn das so nicht vorhanden ist kannst du ja auf einen GPIO ein Relais angeben.
                    Also z.B. GPIO4 Switch1; GPIO5 Relais1
                    Im ioBroker greife ich dann den Schaltzustand von dem Relais ab (Datenpunkt Power). Da ist noch der Schalter gleich mit entprellt.

                    1 Reply Last reply Reply Quote 0
                    • C
                      Cumulus 0 @cainam last edited by

                      @cainam Viele Feuerungsautomaten Wechseln den Anschluss B4 zwischen N und L. Der Anschluss SW des Shelly schaltet bei L als auch bei N. Darum wird das so nicht funktionieren.

                      C 1 Reply Last reply Reply Quote 0
                      • C
                        Cumulus 0 @Cumulus 0 last edited by

                        https://creationx.blog/news/details/der-neue-shelly-1-open-source-v3-13

                        So sieht es scheinbar aus.

                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        769
                        Online

                        31.7k
                        Users

                        79.8k
                        Topics

                        1.3m
                        Posts

                        heizung iobroker verbrauch ölstand
                        11
                        44
                        6131
                        Loading More Posts
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes
                        Reply
                        • Reply as topic
                        Log in to reply
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                        The ioBroker Community 2014-2023
                        logo