Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Praktische Anwendungen (Showcase)
  4. WW Zirkulationspumpe bedarfsgerecht ein- und ausschalten

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.4k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.3k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.6k

WW Zirkulationspumpe bedarfsgerecht ein- und ausschalten

Geplant Angeheftet Gesperrt Verschoben Praktische Anwendungen (Showcase)
esp8266 projektjavasriptjson stringmqtt-broker-client-adapternodemcu tasmota mqttrelay-switchtasmota 1wire
45 Beiträge 19 Kommentatoren 11.6k Aufrufe 28 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • alkA alk

    Anwendungsbeschreibung
    Komponenten

    • Brauchwasserspeicher (Warmwasser)
    • Zirkulationspumpe in der Steigleitung
    • NodeMCU V2.0 (ESP8266) OS:tasmota Doris 8.1
    • 3x Temperaturfühler DS18B20 (1wire) zum Messen von der Vorlauftemperatur
    • Relaismodul zum Schalten der Zirkulationspumpe

    Ziel
    Ich möchte mit der Steuerung Energiekosten sparen. Der aktuell Aufbau startet die Zirkulationspumpe mit einer Zeitschaltuhr, z.B. Morgens 30min, Mittag 30min und Abends 30min. Der Aufbau ist wohl sehr weit verbreitet und ist mir schon eine ganze Weile in Dorn im Auge weil wenig innovativ.

    Die Zirkulationspumpe soll bedarfsgerecht eingeschaltet werden und die aktuelle Zeitschaltuhr kommt weg. Bedarfsgerecht meint beim Aufdrehen vom Warmwasser im Gebäude soll die Zirkulationspumpe starten und die Steigleitung mit Warmwasser befüllen. Damit ist das Warmwasser schneller an der Bedarfsstelle im Bad/WC.

    Kurzbeschreibung der Steuerhardware
    Ein 5V Netzteil versorgt den NodeMCU und das Relaismodul mit 5.0V Spannung. Auf dem NodeMCU steht eine geregelte 3.3.V Versorgung für die DS18B20 zur Verfügung.
    Als Betriebssystem für den NodeMCU verwende ich tasmota in einer damals neuen Version 8.1. Alle Hardwarekomponenten sind günstig und leicht am Markt verfügbar.
    Begonnen habe ich drei Temperatursensoren einzusetzen - ich wusste noch nicht so genau wie es werden wird. Am Ende braucht man nur einen Sensor am Heizungsrohr für den Warmwasservorlauf vom Brauchwasserspeicher in die Steigleitung.
    Wichtig: Der NodeMCU ist echt billig gemacht und verträgt wenig Spannungsschwankungen. Schon beim Einschalten des Radios gibt es den einen oder anderen Effekt und tasmota hängt sich auf. Also umbedingt reichlich (~2) Cbulk ~330uF außen an die 3.3V Versorgungspins anschließen.

    Kurzbeschreibung der Steuersoftware auf dem NodeMCU
    Tasmota bietet eine schicke Möglichkeit mit "Rules" direkt und schnell auf Events zu reagieren und neue Events auszulösen. Damit lässt sich eine tolle Steuerung umsetzen. Inspiriert hat mich ein Beispiel in der Tasmotat Dokumentation der eine Poolheizung realisiert hat. Dazu gibt es noch Variablen (var) und Konstante (mem) für mehr Transparenz des Ganzen nach außen.

    Tasmota rule1
    Der Thermostat
    Nachdem die Zirkulationsregelung gestartet ist stellt sich der Thermostat auf die aktuellen Temperaturen des Vorlauf ( DS18B20_2) und Rücklauf ( DS18B20_1 )ein. Es werden Grenzen zum Einschalten der Pumpe festgelegt um zu erkennen wenn Warmwasser entnommen wird. Dann erwärmt sich das Vorlaufrohr nach dem Brauchwasserspeicher, der Vorlaufsensor signalisiert einen Temperaturanstieg.

    Event

    • DS18B20_2:
      -- Obere Vorlaufgrenze (UpperVL): var1
      -- Untere Vorlaufgrenze (LowerVL): var2
    • DS18B20_1: Aktuell nicht benutzt, LowerRL Limit: var3
    ------------------------------------------------------------------
    -- rule1 Thermostat und Regelung. Entscheidung ob Pumpe eingeschaltet werden soll.
    -- 
    -- Rücklauf DS18B20-1#temperature  
    -- Vorlauf  DS18B20-2#temperature  
    -- Intern   DS18B20-3#temperature  
    --
    -- var1 obere Temperaturschwelle Vorlauf (VL)
    -- var2 untere Temperaturschwelle Vorlauf (VL)
    -- var3 maximale Rücklaufschwelle (RL)
    -- Löse event aus wenn Vorlauf temp ausserhalb oberer (var1) und unterer (var2) Schwelle, Pumpe an.
    rule1
    on system#boot do Backlog var1 26; var2 25; var3 25 endon
    on DS18B20_2#temperature>%var1% do Backlog var1 %value%;var2 %value%;add1 0.5;sub2 0.5;var3 %value%;sub3 5;event UpperVL=%value% endon
    on DS18B20_2#temperature<%var2% do Backlog var2 %value%;var1 %value%;add1 0.5;sub2 0.5;var3 %value%;sub3 5;event LowerVL=%value% endon
    

    590ca147-9635-4d3a-9bfe-433e1f634e00-grafik.png

    Es wird Warmwasser entnommen
    Die Zirkulationsregelung läuft und hat die obere und untere Vorlauftemperaturgrenzen ( DS18B20_2 ) eingestellt, die Pumpe ist aus ( power1 0 ).
    Es wird Warmwasser aus dem Brauchwasserspeicher entnommen und das Vorlaufrohr erwärmt sich. Der Vorlaufsensor signalisiert einen Temperaturanstieg und die obere Vorlauftemperaturgrenze ( DS18B20_2 ) wird überschritten.
    Beim Überschreiten wird der Thermostat neu definiert und eine Event ausgelöst UpperVL der die Pumpe einschalten soll.
    Die Pumpe wird über rule2 gesteuert. Wenn die Zirkulationspumpe eine definierte Zeit ( mem5 ) gelaufen ist gibt es eine Wartezeit vor dem nächsten Pumpenanlauf ( mem4 ) um eine schnelles Ein-/Ausschalten zu vermeiden.

    Tasmota rule1

    Event

    • UpperVL: Event zum einschalten der Pumpe für eine bestimmte Zeit.
    • LowerVL: Event Pumpe aus
    • LowerRL: Event Pumpe aus
    • PumpOn=0: Pumpe/Power1 aus.
    • PumpOn>0: Entscheiden ob und wie lange die Pumpe power1 eingeschaltet werden soll.
    • Var4: Pumpenfreigabe in minuten, zählt von 0 aufwärts.
    • Mem4: Grenze in Minuten wann die Pumpe wieder freigegeben wird und einschalten darf.
    ------------------------------------------------------------------
    -- rule2 	Controller: Pumpe einschalten und ausschalten
    -- rule2 1	Regel einschalten
    -- rule2 0	Regel ausschalten
    --
    -- Pumpe einschalten, delay %value%, Pumpe abschalten.
    -- PumpOn=0 	Pumpe aus
    -- PumpOn=10	Pumpe an, setze timer zum ausschalten
    -- PumpOn=180	Pumpe an, setze timer zum ausschalten
    -- 
    -- Benutze Rule timer zum abschalten der pumpe
    -- RuleTimer2 60		60sec
    -- on Rules#Timer=2 o 		when countdown RuleTimer2 expires
    -- var4		Wird beim löschen von power verwendet und es wird das wiedereinschalten verzögert. Die Einheit ist minuten.
    --              Jede Minute zählt var4 im eines hoch. Nach z.B. 5 minuten kann die Pumpe wieder eingeschaltet werden.
    -- mem4	45	Warte mem4 Minuten bis wiedereinschalten, e.g. 45 (Minuten)
    -- mem5	19	Pumpenlaufzeit in sekunden, e.g. 19 (Sekunden)
    rule2
     on system#boot do Backlog var4 0.0 ; ruletimer2 0 endon
     on event#UpperVL do event PumpOn=1 endon
     on event#LowerVL do event PumpOn=0 endon
     on event#PumpOn=0 do power1 off endon  
     on event#PumpOn>0 do event ChkWait=%var4% endif endon  
     on event#ChkWait>%mem4% do Backlog var4 0; ruletimer2 %mem5%; power1 on endon
     on Rules#Timer=2 do power1 off endon 
     on Time#Minute|1 do add4 1 endon
     on var4#state==3 do power1 off endon
    

    Sperrzeit nach einem Pumpenlauf / Pumpenfreigabe
    Pause für die Pumpe nach einer Zirkulationspumpzeit. Hier wird verhindert, dass die Pumpe rythmisch wieder ein und ausgeschaltet wird.

    Event

    • event#PumpOn>0:
      -- Wenn die Pumpe über var4 freigegeben ist:
      if (%var4%>=%mem4%)
    • Time#Minute|1
      -- Vorwärtszählen der Pumpenfreigabe pro Minute.
    rule2
    ...
    on event#PumpOn>0 do if (%var4%>=%mem4%) power1 on; ruletimer2 %value%; var4 0.0 endif endon
    ...
    on Time#Minute|1 do add4 1 endon
    ...
    

    MQTT Verbindung in der Applikation mit Tasmota

    ------------------------------------------------------------------
    -- MQTT Verbindung über rule3
    -- 
    -- Vorlauf  DS18B20-2#temperature  
    -- var1
    -- var4
    rule3
    on tele-DS18B20_2#temperature do Backlog publish stat/zirkulation/vlUpper %var1%; publish stat/zirkulation/PumpWait %var4% endon
    on power1#state do Backlog publish stat/zirkulation/Pump %value% endon 
    

    Konfiguration der Applikation in Tasmota

    -- SetOption53 1 Display hostname and IP address in GUI 0=default
    -- SetOption0 0  Save power state and use after restart (=SaveState) 1=default
    -- SetOption64 1   Switch between - or _ as sensor name separator, 0 = sensor name index separator is - (hyphen) (default), 1 = sensor name index separator is _ (underscore)
    -- mem4 legt die Wartezeit bis zum Wiedereinschalten der Pumpe fest. Bei mir 45Minuten. Gerne auch anpassen.
    -- mem5 legt die Laufzeit der Pumpe fest. Bei mir reichen 19Sekunden. Gerne auch anpassen.
    
    Backlog PowerOnState 0; TelePeriod 61; rule3 1; rule1 1; rule2 1; SetOption0 0; SetOption53 1; SetOption64 1; mem4 45; mem5 19
    

    Und wie läuft das Ganze jetzt los?
    Mit dem folgende Kommando wird alle 61Sekunden eine Messung der Sensoren an den MQTT Broker geschickt:.

    TelePeriod 61
    

    Davor ist die Option 64 wichtig, die einfach ein Problem (im iobroker) behebt, wenn man ein Eventnamen ein Bindestrich enthalten ist ;-). Daran kann man verzweifeln.

    SetOption64 1;
    

    Und folgend werden die rules aktiviert, damit es auch eine Steuerung gibt:

    rule3 1; rule1 1; rule2 1;
    

    Typischer Log aus der Tasmota console

    8:50:57 MQT: tele/zirkulation/STATE = {"Time":"2020-03-01T18:50:57","Uptime":"0T02:27:12","UptimeSec":8832,"Heap":23,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":1,"POWER1":"OFF","POWER2":"OFF","Wifi":{"AP":1,"SSId":"blabla","BSSId":"Z0:B0:VV:3K:D6:20","Channel":11,"RSSI":100,"Signal":-50,"LinkCount":1,"Downtime":"0T00:00:06"}}
    
    18:50:57 MQT: tele/zirkulation/SENSOR = {"Time":"2020-03-01T18:50:57","DS18B20_1":{"Id":"01143B9799AA","Temperature":26.1},"DS18B20_2":{"Id":"01143BDE6DAA","Temperature":33.9},"DS18B20_3":{"Id":"03209779E6D3","Temperature":22.1},"TempUnit":"C"}
    
    18:50:57 RUL: TELE-DS18B20_1#TEMPERATURE performs "Backlog publish stat/zirkulation/rl 26.1; publish stat/zirkulation/rlUpper 29.100"
    
    18:50:57 RUL: TELE-DS18B20_2#TEMPERATURE performs "Backlog publish stat/zirkulation/vl 33.9; publish stat/zirkulation/vlUpper 34.600; publish stat/zirkulation/vlLower 33.600"
    
    18:50:57 RUL: TELE-DS18B20_3#TEMPERATURE performs "publish stat/zirkulation/int 22.1"
    18:50:57 MQT: stat/zirkulation/int = 22.1
    18:50:57 MQT: stat/zirkulation/rl = 26.1
    18:50:58 MQT: stat/zirkulation/rlUpper = 29.100
    18:50:58 MQT: stat/zirkulation/vl = 33.9
    18:50:58 MQT: stat/zirkulation/vlUpper = 34.600
    18:50:58 MQT: stat/zirkulation/vlLower = 33.600
    18:51:00 RUL: TIME#MINUTE|1 performs "add4 1"
    18:51:00 MQT: stat/zirkulation/RESULT = {"Add4":"31.000"}
    18:51:00 RUL: VAR4#STATE performs "publish stat/zirkulation/PumpWait 31.000"
    18:51:00 MQT: stat/zirkulation/PumpWait = 31.000
    

    Kurzbeschreibung iobroker
    Info

        Plattform: linux
        Betriebssystem: linux
        Die Architektur: arm
        CPUs: 4
        Geschwindigkeit: 1500 MHz
        Modell: ARMv7 Processor rev 3 (v7l)
        RAM: 3.7 GB
        System-Betriebszeit: 19 T. 00:08:11
        Node.js: v12.22.6
        NPM: 6.14.15
        Datenträgergröße: 29.0 GiB
        Datenträger verfügbar: 26.0 GiB
        Adapter-Anzahl: 362
        Betriebszeit: 16 T. 00:39:00
        Aktive Instanzen: 17
        location: /opt/iobroker/
    

    JS zirkulation ZirkParseSTATE
    Bei mir heisst der Tasmota MQTT client "zirkulation". Damit kommt der Name relativ oft in dem JS vor.
    Hier werden die vom MQTT Client/Server glieferten Daten vom Tasmota client verarbeitet und umgewandelt. Das liegt daran dass ich keinen besseren Weg gefunden habe die Daten im VIS json table vom tasmota client zu bekommen.

    Hier nun das JS:

    //
    const util = require('util');
    // STATE
    // {"Time":"2020-06-06T15:19:52","Uptime":"0T21:11:25","UptimeSec":76285,"Heap":25,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":3,"POWER":"OFF","Wifi":{"AP":1,"SSId":"Kreuzspitz","BSSId":"F0:B0:14:3F:D6:20","Channel":1,"RSSI":78,"Signal":-61,"LinkCount":1,"Downtime":"0T00:00:03"}}
    //
    createState('zirkulation.TimeStampSTATE'); 
    createState('zirkulation.UpTimeSTATE'); 
    
    createState('zirkulation.jsonSENSOR'); 
    createState('zirkulation.jsonSTATE'); 
    
    // prepare tasmota format for json format
    createState('zirkulation.PowerSTATE'); 
    
    //////////////////////////////////////////////////////////////////////////
    // Convert map to JSON string
    // https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
    // 
    // @param 
    // @return 
    function mapToJson(map) {
      return JSON.stringify([...map]);
    }
    
    //////////////////////////////////////////////////////////////////////////
    // convert JSON string key value pairs to Map key value pairs
    // https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse
    //
    // @param jsonStr key value pairs
    // @return map converted from jsonStr to map key value pairs.
    function jsonToMap(jsonStr) {
      return new Map(JSON.parse(jsonStr));
    }
    
    on({id: 'mqtt.0.tele.zirkulation.STATE', change: "any"}, function (obj) {
    
    var jsonSensorText = '';
    jsonSensorText = obj.state.val;
    
    // {"Time":"2020-06-06T15:19:52","Uptime":"0T21:11:25","UptimeSec":76285,"Heap":25,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":3,"POWER":"OFF","Wifi":{"AP":1,"SSId":"Kreuzspitz","BSSId":"F0:B0:14:3F:D6:20","Channel":1,"RSSI":78,"Signal":-61,"LinkCount":1,"Downtime":"0T00:00:03"}}
    try {obj = JSON.parse(jsonSensorText);
       } catch (e) {
               console.error('Cannot parse: ' + getState('mqtt.0.tele.zirkulation.STATE').val);
               return;
        }
    
    //console.debug( util.inspect(jsonSensorText, {showHidden:true, depth: null}) );
    
    var sTimeStamp =    obj.Time;
    var fUptimeSec =    obj.UptimeSec;
    var sPOWER =        obj.POWER;       // "POWER":"OFF"
    var fPOWER = 0;
    
    if (sPOWER == "OFF") {
        fPOWER = 0;
    } else {
        fPOWER = 1;
    }
    
    setState('javascript.0.zirkulation.TimeStampSTATE', sTimeStamp , true);
    setState('javascript.0.zirkulation.UpTimeSTATE', fUptimeSec , true);
    setState('javascript.0.zirkulation.PowerSTATE', fPOWER , true);
    
    });
    
    
    /////////////////////////////////////////////////////////////////////////
    // preapre tasmota json format to use in iobroker vis jason table
    // {"Time":"2021-08-17T16:04:47","Uptime":"16T23:08:54","UptimeSec":1465734,"Heap":26,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":30,"POWER":"OFF","Wifi":{"AP":1,"SSId":"Kreuzspitz","BSSId":"3C:A6:2F:26:25:8B","Channel":11,"RSSI":88,"Signal":-56,"LinkCount":24,"Downtime":"0T00:01:15"}}
    on({id: 'mqtt.0.tele.zirkulation.STATE', change: "any"}, function (obj) {
    
        var jsonSensorText = '';
        jsonSensorText = obj.state.val;
    
        var myMap = new Map();
        
        try {obj = JSON.parse(jsonSensorText);
            } catch (e) {
               console.error('Cannot parse: ' + getState('mqtt.0.tele.zirkulation.STATE').val);
               return;
            }
    
        // {"Time":"2021-08-17T16:04:47","Uptime":"16T23:08:54","UptimeSec":1465734,"Heap":26,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":30,"POWER":"OFF","Wifi":{"AP":1,"SSId":"Kreuzspitz","BSSId":"3C:A6:2F:26:25:8B","Channel":11,"RSSI":88,"Signal":-56,"LinkCount":24,"Downtime":"0T00:01:15"}}
        for (let [key, value] of Object.entries(obj)) {
            
            if ( typeof value === 'object' ) {
                // iterate one level down
                for (let [key2, value2] of Object.entries(value)) {
                    // log level 2
                    // console.log(key + ":" + key2 + "=" + value2);
                    myMap.set(key + ":" + key2, value2);
                }
            } else {
                // log level 1
                // console.log(key + "=" + value);
                myMap.set(key , value);
            }       
    
        }
        
        var jsonString = mapToJson(myMap);
        //console.log( util.inspect(myMap, {showHidden:true, depth: null}) );
        //console.log( util.inspect(jsonSENSOR, {showHidden:true, depth: null}) );
    
        setState('javascript.0.zirkulation.jsonSTATE', jsonString , true);
    
    });
    
    /////////////////////////////////////////////////////////////////////////
    // preapre tasmota json format to use in iobroker vis jason table
    // {"Time":"2021-08-17T16:05:48","DS18B20_1":{"Id":"01143B9799AA","Temperature":24.1},"DS18B20_2":{"Id":"01143BDE6DAA","Temperature":37.9},"DS18B20_3":{"Id":"03209779E6D3","Temperature":25.2},"TempUnit":"C"}
    on({id: 'mqtt.0.tele.zirkulation.SENSOR', change: "any"}, function (obj) {
    
        var jsonSensorText = '';
        jsonSensorText = obj.state.val;
    
        var myMap = new Map();
        
        try {obj = JSON.parse(jsonSensorText);
            } catch (e) {
               console.error('Cannot parse: ' + getState('mqtt.0.tele.zirkulation.SENSOR').val);
               return;
            }
    
        // {"Time":"2021-08-17T16:05:48","DS18B20_1":{"Id":"01143B9799AA","Temperature":24.1},"DS18B20_2":{"Id":"01143BDE6DAA","Temperature":37.9},"DS18B20_3":{"Id":"03209779E6D3","Temperature":25.2},"TempUnit":"C"}
        for (let [key, value] of Object.entries(obj)) {
            
            if ( typeof value === 'object' ) {
                // iterate one level down
                for (let [key2, value2] of Object.entries(value)) {
                    // log level 2
                    // console.log(key + ":" + key2 + "=" + value2);
                    myMap.set(key + ":" + key2, value2);
                }
            } else {
                // log level 1
                // console.log(key + "=" + value);
                myMap.set(key , value);
            }       
    
        }
        
        var jsonString = mapToJson(myMap);
        //console.log( util.inspect(myMap, {showHidden:true, depth: null}) );
        //console.log( util.inspect(jsonSENSOR, {showHidden:true, depth: null}) );
    
        setState('javascript.0.zirkulation.jsonSENSOR', jsonString , true);
    
    });
    
    

    JS zirkulation ZirkParseSENSOR
    Hier wirkt nun die spezielle Option aus der Tasmota Konfiguration um das "-" in ein "_" zu wandeln.

    //
    const util = require('util');
    // SENSOR
    // {"Time":"2020-03-28T19:07:12","DS18B20_1":{"Id":"01143B9799AA","Temperature":30.4},"DS18B20_2":{"Id":"01143BDE6DAA","Temperature":36.1},"DS18B20_3":{"Id":"03209779E6D3","Temperature":24.6},"TempUnit":"C"}
    // 
    createState('zirkulation.TimeStampSENSOR'); 
    createState('zirkulation.VorlaufTempSENSOR');
    createState('zirkulation.RuecklaufTempSENSOR');
    createState('zirkulation.InnerhalbTempSENSOR');
    
    on({id: 'mqtt.0.tele.zirkulation.SENSOR', change: "any"}, function (obj) {
    
    var jsonSensorText = '';
    jsonSensorText = obj.state.val;
    
    try {obj = JSON.parse(jsonSensorText);
       } catch (e) {
               console.error('Cannot parse: ' + getState('mqtt.0.tele.zirkulation.SENSOR').val);
               return;
        }
    //console.debug( util.inspect(jsonSensorText, {showHidden:true, depth: null}) );
    
    // {"Time":"2020-06-06T15:11:44","DS18B20_1":{"Id":"01143B9799AA","Temperature":21.8},"DS18B20_2":{"Id":"01143BDE6DAA","Temperature":35.1},"DS18B20_3":{"Id":"03209779E6D3","Temperature":22.6},"TempUnit":"C"}   
    var fRLTemp = obj.DS18B20_1.Temperature; // RL
    var fVLTemp = obj.DS18B20_2.Temperature; // VL
    var fINTemp = obj.DS18B20_3.Temperature; // IN
    var sTimeStamp = obj.Time;
    
    setState('javascript.0.zirkulation.TimeStampSENSOR', sTimeStamp , true);
    setState('javascript.0.zirkulation.InnerhalbTempSENSOR', fINTemp , true);
    setState('javascript.0.zirkulation.VorlaufTempSENSOR', fVLTemp   , true);
    setState('javascript.0.zirkulation.RuecklaufTempSENSOR', fRLTemp , true);
    
    
    });
    
    
    
    AndreiosA Offline
    AndreiosA Offline
    Andreios
    Forum Testing
    schrieb am zuletzt editiert von
    #11

    Sehr interessant, hier zu lesen.
    Ich bin gerade dabei, meine eigene Heizung(über)steuerung zu bauen und da soll auch die Zirkulation mit einbezogen werden.
    Wie bei vielen Anderen hängt die bei mir aktuell auch an einer Zeitschaltuhr und das ist mir schon lange ein Dorn im Auge.

    Die Idee zur eigenen Heizungssteuerung habe ich auch schon etwas länger.
    Um das Verhalten der Heizung und die Änderung im Verhalten durch den Einbau der automatischen Heizungsventile (Zuerst Max!, inzwischen Homematic) zu beobachten hatte ich schon Temperaturen über DS18B20-Sensoren an einem Arduino gemessen und ioBroker (früher FHEM) per MQTT übermittelt und dort auch die Historie aufgezeichnet.
    Wie man an dem "früher" sieht, beschäftige ich mich nicht erst ein paar Tage mit dem Thema.

    Zum Thema Zirkulationspumpe bin ich mir aber noch nicht so richtig einig, wie ich diese sinnvoll schalte.

    Ein paar Parameter/Ideen dazu:

    • Die Anwesenheit von Personen im Haushalt wird festgestellt. Falls also niemand im/am Haus ist, kann die Pumpe erst einmal aus bleiben. Einziges Problem ist, wenn andere Personen im Haus sind, die nicht durch die alktuelle Erkennung erkannt werden (Erkennung geht aktuell über die Mobiltelefone).

    • Wenn jemand im Haus ist, kann eine Nachtzeit eingeplant werden, so dass zu normalen Schlafenszeiten die Pumpe auch aus bleibt.

    • Vor- und Rücklauf wird gemessen, bei kleiner Differenz kann die Pumpe aus bleiben.
      (Hier muss ich noch sehen, ob ich den Vorlauf-Sensor weiter vom Speicher entfernt montieren kann. Dann könnte ich feststellen, ob genügend Wasser entnommen wird, um warm zu bleiben. Da jedoch die Zirkulationsleitung keine Ringleitung ist, sondern sich, weiter entfernt und wahrscheinlich nicht erreichbar, in verschiedene Richtungen teilt, kann es auch sein, dass nur eine Zapfstelle noch warmes Wasser hat und die anderen bleiben kalt.)

    • Wegen dem Salmonellenthema muss die Leitung regelmäßig gespült werden, es darf also nicht passieren, dass die Pumpe dauerhaft aus bleibt.

    • Was ich nicht so prickelnd finde ist, wenn zuerst Wasser verbraucht werden muss, damit die Pumpe anspringt. Das entspricht nicht dem normalen Gebrauch, weil man dann ja warmes Wasser entnehmen will und dann lässt man das so lange laufen, bis es warm wird. Das widerspricht dem (Komfort-)Gedanken bei der Zirkulationspumpe.

    Fazit:

    Eine Anwesenheitserkennung auch für Haushaltsfremde muss einfach auf den Datenpunkt "Jemand anwesend" geführt werden. Dies kann auch später nachgerüstet werden, wenn ich dafür eine handlebare Lösung habe.

    Vielleicht läuft die Pumpe dann öfter, als sie wirklich muss, aber ich denke, der Start der Zirkulationspumpe wird aus der Anwesenheit, der Nachtzeit und der Temperaturdifferenz Vor-/Rücklauf erfolgen.
    Der Fetenschalter kann da auch noch mit einfliessen und die Nachtzeit übersteuern.

    Ich denke, damit läuft es immer noch deutlich besser, als über die Zeitschaltuhr!

    Schöne Grüße
    Andreas

    ioBroker auf Raspberry 4 mit SSD. Homematik IP mit CCU 3. Shelly. MySQL. Arduino. ...

    Meine Posts sind subjektiv und manipulativ, erheben Anspruch auf Allwissenheit und können Spuren von Ironie oder Sarkasmus enthalten. ;-)

    HomoranH 1 Antwort Letzte Antwort
    0
    • AndreiosA Andreios

      Sehr interessant, hier zu lesen.
      Ich bin gerade dabei, meine eigene Heizung(über)steuerung zu bauen und da soll auch die Zirkulation mit einbezogen werden.
      Wie bei vielen Anderen hängt die bei mir aktuell auch an einer Zeitschaltuhr und das ist mir schon lange ein Dorn im Auge.

      Die Idee zur eigenen Heizungssteuerung habe ich auch schon etwas länger.
      Um das Verhalten der Heizung und die Änderung im Verhalten durch den Einbau der automatischen Heizungsventile (Zuerst Max!, inzwischen Homematic) zu beobachten hatte ich schon Temperaturen über DS18B20-Sensoren an einem Arduino gemessen und ioBroker (früher FHEM) per MQTT übermittelt und dort auch die Historie aufgezeichnet.
      Wie man an dem "früher" sieht, beschäftige ich mich nicht erst ein paar Tage mit dem Thema.

      Zum Thema Zirkulationspumpe bin ich mir aber noch nicht so richtig einig, wie ich diese sinnvoll schalte.

      Ein paar Parameter/Ideen dazu:

      • Die Anwesenheit von Personen im Haushalt wird festgestellt. Falls also niemand im/am Haus ist, kann die Pumpe erst einmal aus bleiben. Einziges Problem ist, wenn andere Personen im Haus sind, die nicht durch die alktuelle Erkennung erkannt werden (Erkennung geht aktuell über die Mobiltelefone).

      • Wenn jemand im Haus ist, kann eine Nachtzeit eingeplant werden, so dass zu normalen Schlafenszeiten die Pumpe auch aus bleibt.

      • Vor- und Rücklauf wird gemessen, bei kleiner Differenz kann die Pumpe aus bleiben.
        (Hier muss ich noch sehen, ob ich den Vorlauf-Sensor weiter vom Speicher entfernt montieren kann. Dann könnte ich feststellen, ob genügend Wasser entnommen wird, um warm zu bleiben. Da jedoch die Zirkulationsleitung keine Ringleitung ist, sondern sich, weiter entfernt und wahrscheinlich nicht erreichbar, in verschiedene Richtungen teilt, kann es auch sein, dass nur eine Zapfstelle noch warmes Wasser hat und die anderen bleiben kalt.)

      • Wegen dem Salmonellenthema muss die Leitung regelmäßig gespült werden, es darf also nicht passieren, dass die Pumpe dauerhaft aus bleibt.

      • Was ich nicht so prickelnd finde ist, wenn zuerst Wasser verbraucht werden muss, damit die Pumpe anspringt. Das entspricht nicht dem normalen Gebrauch, weil man dann ja warmes Wasser entnehmen will und dann lässt man das so lange laufen, bis es warm wird. Das widerspricht dem (Komfort-)Gedanken bei der Zirkulationspumpe.

      Fazit:

      Eine Anwesenheitserkennung auch für Haushaltsfremde muss einfach auf den Datenpunkt "Jemand anwesend" geführt werden. Dies kann auch später nachgerüstet werden, wenn ich dafür eine handlebare Lösung habe.

      Vielleicht läuft die Pumpe dann öfter, als sie wirklich muss, aber ich denke, der Start der Zirkulationspumpe wird aus der Anwesenheit, der Nachtzeit und der Temperaturdifferenz Vor-/Rücklauf erfolgen.
      Der Fetenschalter kann da auch noch mit einfliessen und die Nachtzeit übersteuern.

      Ich denke, damit läuft es immer noch deutlich besser, als über die Zeitschaltuhr!

      HomoranH Nicht stören
      HomoranH Nicht stören
      Homoran
      Global Moderator Administrators
      schrieb am zuletzt editiert von
      #12

      @andreas-5 sagte in WW Zirkulationspumpe bedarfsgerecht ein- und ausschalten:

      Wegen dem Salmonellenthema

      nix Salmo, Legio!

      kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

      Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

      der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

      AndreiosA 1 Antwort Letzte Antwort
      0
      • HomoranH Homoran

        @andreas-5 sagte in WW Zirkulationspumpe bedarfsgerecht ein- und ausschalten:

        Wegen dem Salmonellenthema

        nix Salmo, Legio!

        AndreiosA Offline
        AndreiosA Offline
        Andreios
        Forum Testing
        schrieb am zuletzt editiert von
        #13

        @homoran sagte in WW Zirkulationspumpe bedarfsgerecht ein- und ausschalten:

        @andreas-5 sagte in WW Zirkulationspumpe bedarfsgerecht ein- und ausschalten:

        Wegen dem Salmonellenthema

        nix Salmo, Legio!

        Uuuppsss. Na, dann muss ich halt Eier durch die Leitung schicken. ;-)

        Schöne Grüße
        Andreas

        ioBroker auf Raspberry 4 mit SSD. Homematik IP mit CCU 3. Shelly. MySQL. Arduino. ...

        Meine Posts sind subjektiv und manipulativ, erheben Anspruch auf Allwissenheit und können Spuren von Ironie oder Sarkasmus enthalten. ;-)

        1 Antwort Letzte Antwort
        1
        • Oliver HirschO Offline
          Oliver HirschO Offline
          Oliver Hirsch
          schrieb am zuletzt editiert von
          #14

          vielen Dank für die tolle Anleitung, ich möchte genau dies umsetzen.
          Ich verwende aktuell einen ESP32 mit dem ich auch schon einige Versuche gemacht habe.
          Leider hat er kein Script Feld nur dieses Berry Scritping Console.
          Die Zeilen aus deinem Programm, Rules kann ich nur einzeln in die Console eintragen, so funktioniert es aber nicht?
          Sehe ich das richtig?
          Wäre super wenn mir jemand ein paar Tipps geben könnte.
          Ich bin leider Anfänger.

          Viele Grüße
          Oliver

          alkA 1 Antwort Letzte Antwort
          0
          • M Offline
            M Offline
            mading
            schrieb am zuletzt editiert von mading
            #15

            Ich hoffe ich schiebe das Thema nicht zu weit mit meinem Post in eine etwas andere Richtung, möchte aber dennoch den Tipp geben: wer eine Wilo Zirkulationspumpe hat (die m.W.n recht weit verbreitet ist), kann statt der Verkabelung zur Heizung ein Kabel mit Schukostecker anbringen. Mit einer Schaltsteckdose und z.B. einem Homematic Taster im Bad lässt sich dann die ZP einschalten, da sie läuft, wenn sie Strom bekommt. Ein einfaches Blockly mit Timeout ermöglicht ein Bedarfsgerechtes Einschalten. Ich plane einen homematic Taster (Aufputz) anzubringen, damit die ZP eingeschaltet werden kann.

            Beispiel ZP von Wilo (man beachte den Stecker unten, der einfach raus gezogen werden kann):

            0A17679C-0217-493F-A7E4-037F39815711.jpeg

            Und das Kabel: https://www.heiz24.de/Wilo-Elektrisches-Zubehoer-Connector-NEU?curr=EUR&gclid=Cj0KCQjwhY-aBhCUARIsALNIC06gspkP9luaXC_5Y0oVk1ULUGd2xwHOsL3tzYE_mYYKPe0GCmSD4JsaAjAZEALw_wcB

            Das Kabel ist nicht billig, ein Elektriker wäre aber teurer, wenn er was an der Verkabelung ändern müsste.

            1 Antwort Letzte Antwort
            0
            • Oliver HirschO Oliver Hirsch

              vielen Dank für die tolle Anleitung, ich möchte genau dies umsetzen.
              Ich verwende aktuell einen ESP32 mit dem ich auch schon einige Versuche gemacht habe.
              Leider hat er kein Script Feld nur dieses Berry Scritping Console.
              Die Zeilen aus deinem Programm, Rules kann ich nur einzeln in die Console eintragen, so funktioniert es aber nicht?
              Sehe ich das richtig?
              Wäre super wenn mir jemand ein paar Tipps geben könnte.
              Ich bin leider Anfänger.

              Viele Grüße
              Oliver

              alkA Offline
              alkA Offline
              alk
              schrieb am zuletzt editiert von alk
              #16

              @oliver-hirsch Servus Oliver,
              Ich kann dir nur beim Einsatz von Tasmota weiterhelfen. Das gibt es auch für den ESP32, wenn ich nicht irre. Und dafür kannst du die Script Beschreibung oben in den schwarzen Feldern als copy & paste verwenden. Und genau so einfach jede rule in die Script Console von Tasmota kopieren. Mit einem anschließenden Enter wird das Kommando übernommen.
              Z.b. Wie aus der Beschreibung ist dies in die Tasmota Konsole für die erste rule komplett zu kopieren:

              rule1
              on system#boot do Backlog var1 26; var2 25; var3 25 endon
              on DS18B20_2#temperature>%var1% do Backlog var1 %value%;var2 %value%;add1 0.5;sub2 0.5;var3 %value%;sub3 5;event UpperVL=%value% endon
              on DS18B20_2#temperature<%var2% do Backlog var2 %value%;var1 %value%;add1 0.5;sub2 0.5;var3 %value%;sub3 5;event LowerVL=%value% endon
              

              Das wars für rule1. Und dann rule2 und rule3 gleich hinterher kopieren.

              Alle Zeilen mit

              — kannst du weglassen, nur Kommentar
              

              Dann alles starten mit diesem Kommando:

              Backlog PowerOnState 0; TelePeriod 61; rule3 1; rule1 1; rule2 1; SetOption0 0; SetOption53 1; SetOption64 1; mem4 45; mem5 19
              

              Dann läuft die Nummer auf dem ESP8266 oder ESP32.

              Ich hoffe das hat Dir weiter geholfen ?

              LG
              alk

              • DIY Electronics that do their job
              • EV, WB, PV + Battery and optimized charging ;-)
              1 Antwort Letzte Antwort
              0
              • alkA alk

                Anwendungsbeschreibung
                Komponenten

                • Brauchwasserspeicher (Warmwasser)
                • Zirkulationspumpe in der Steigleitung
                • NodeMCU V2.0 (ESP8266) OS:tasmota Doris 8.1
                • 3x Temperaturfühler DS18B20 (1wire) zum Messen von der Vorlauftemperatur
                • Relaismodul zum Schalten der Zirkulationspumpe

                Ziel
                Ich möchte mit der Steuerung Energiekosten sparen. Der aktuell Aufbau startet die Zirkulationspumpe mit einer Zeitschaltuhr, z.B. Morgens 30min, Mittag 30min und Abends 30min. Der Aufbau ist wohl sehr weit verbreitet und ist mir schon eine ganze Weile in Dorn im Auge weil wenig innovativ.

                Die Zirkulationspumpe soll bedarfsgerecht eingeschaltet werden und die aktuelle Zeitschaltuhr kommt weg. Bedarfsgerecht meint beim Aufdrehen vom Warmwasser im Gebäude soll die Zirkulationspumpe starten und die Steigleitung mit Warmwasser befüllen. Damit ist das Warmwasser schneller an der Bedarfsstelle im Bad/WC.

                Kurzbeschreibung der Steuerhardware
                Ein 5V Netzteil versorgt den NodeMCU und das Relaismodul mit 5.0V Spannung. Auf dem NodeMCU steht eine geregelte 3.3.V Versorgung für die DS18B20 zur Verfügung.
                Als Betriebssystem für den NodeMCU verwende ich tasmota in einer damals neuen Version 8.1. Alle Hardwarekomponenten sind günstig und leicht am Markt verfügbar.
                Begonnen habe ich drei Temperatursensoren einzusetzen - ich wusste noch nicht so genau wie es werden wird. Am Ende braucht man nur einen Sensor am Heizungsrohr für den Warmwasservorlauf vom Brauchwasserspeicher in die Steigleitung.
                Wichtig: Der NodeMCU ist echt billig gemacht und verträgt wenig Spannungsschwankungen. Schon beim Einschalten des Radios gibt es den einen oder anderen Effekt und tasmota hängt sich auf. Also umbedingt reichlich (~2) Cbulk ~330uF außen an die 3.3V Versorgungspins anschließen.

                Kurzbeschreibung der Steuersoftware auf dem NodeMCU
                Tasmota bietet eine schicke Möglichkeit mit "Rules" direkt und schnell auf Events zu reagieren und neue Events auszulösen. Damit lässt sich eine tolle Steuerung umsetzen. Inspiriert hat mich ein Beispiel in der Tasmotat Dokumentation der eine Poolheizung realisiert hat. Dazu gibt es noch Variablen (var) und Konstante (mem) für mehr Transparenz des Ganzen nach außen.

                Tasmota rule1
                Der Thermostat
                Nachdem die Zirkulationsregelung gestartet ist stellt sich der Thermostat auf die aktuellen Temperaturen des Vorlauf ( DS18B20_2) und Rücklauf ( DS18B20_1 )ein. Es werden Grenzen zum Einschalten der Pumpe festgelegt um zu erkennen wenn Warmwasser entnommen wird. Dann erwärmt sich das Vorlaufrohr nach dem Brauchwasserspeicher, der Vorlaufsensor signalisiert einen Temperaturanstieg.

                Event

                • DS18B20_2:
                  -- Obere Vorlaufgrenze (UpperVL): var1
                  -- Untere Vorlaufgrenze (LowerVL): var2
                • DS18B20_1: Aktuell nicht benutzt, LowerRL Limit: var3
                ------------------------------------------------------------------
                -- rule1 Thermostat und Regelung. Entscheidung ob Pumpe eingeschaltet werden soll.
                -- 
                -- Rücklauf DS18B20-1#temperature  
                -- Vorlauf  DS18B20-2#temperature  
                -- Intern   DS18B20-3#temperature  
                --
                -- var1 obere Temperaturschwelle Vorlauf (VL)
                -- var2 untere Temperaturschwelle Vorlauf (VL)
                -- var3 maximale Rücklaufschwelle (RL)
                -- Löse event aus wenn Vorlauf temp ausserhalb oberer (var1) und unterer (var2) Schwelle, Pumpe an.
                rule1
                on system#boot do Backlog var1 26; var2 25; var3 25 endon
                on DS18B20_2#temperature>%var1% do Backlog var1 %value%;var2 %value%;add1 0.5;sub2 0.5;var3 %value%;sub3 5;event UpperVL=%value% endon
                on DS18B20_2#temperature<%var2% do Backlog var2 %value%;var1 %value%;add1 0.5;sub2 0.5;var3 %value%;sub3 5;event LowerVL=%value% endon
                

                590ca147-9635-4d3a-9bfe-433e1f634e00-grafik.png

                Es wird Warmwasser entnommen
                Die Zirkulationsregelung läuft und hat die obere und untere Vorlauftemperaturgrenzen ( DS18B20_2 ) eingestellt, die Pumpe ist aus ( power1 0 ).
                Es wird Warmwasser aus dem Brauchwasserspeicher entnommen und das Vorlaufrohr erwärmt sich. Der Vorlaufsensor signalisiert einen Temperaturanstieg und die obere Vorlauftemperaturgrenze ( DS18B20_2 ) wird überschritten.
                Beim Überschreiten wird der Thermostat neu definiert und eine Event ausgelöst UpperVL der die Pumpe einschalten soll.
                Die Pumpe wird über rule2 gesteuert. Wenn die Zirkulationspumpe eine definierte Zeit ( mem5 ) gelaufen ist gibt es eine Wartezeit vor dem nächsten Pumpenanlauf ( mem4 ) um eine schnelles Ein-/Ausschalten zu vermeiden.

                Tasmota rule1

                Event

                • UpperVL: Event zum einschalten der Pumpe für eine bestimmte Zeit.
                • LowerVL: Event Pumpe aus
                • LowerRL: Event Pumpe aus
                • PumpOn=0: Pumpe/Power1 aus.
                • PumpOn>0: Entscheiden ob und wie lange die Pumpe power1 eingeschaltet werden soll.
                • Var4: Pumpenfreigabe in minuten, zählt von 0 aufwärts.
                • Mem4: Grenze in Minuten wann die Pumpe wieder freigegeben wird und einschalten darf.
                ------------------------------------------------------------------
                -- rule2 	Controller: Pumpe einschalten und ausschalten
                -- rule2 1	Regel einschalten
                -- rule2 0	Regel ausschalten
                --
                -- Pumpe einschalten, delay %value%, Pumpe abschalten.
                -- PumpOn=0 	Pumpe aus
                -- PumpOn=10	Pumpe an, setze timer zum ausschalten
                -- PumpOn=180	Pumpe an, setze timer zum ausschalten
                -- 
                -- Benutze Rule timer zum abschalten der pumpe
                -- RuleTimer2 60		60sec
                -- on Rules#Timer=2 o 		when countdown RuleTimer2 expires
                -- var4		Wird beim löschen von power verwendet und es wird das wiedereinschalten verzögert. Die Einheit ist minuten.
                --              Jede Minute zählt var4 im eines hoch. Nach z.B. 5 minuten kann die Pumpe wieder eingeschaltet werden.
                -- mem4	45	Warte mem4 Minuten bis wiedereinschalten, e.g. 45 (Minuten)
                -- mem5	19	Pumpenlaufzeit in sekunden, e.g. 19 (Sekunden)
                rule2
                 on system#boot do Backlog var4 0.0 ; ruletimer2 0 endon
                 on event#UpperVL do event PumpOn=1 endon
                 on event#LowerVL do event PumpOn=0 endon
                 on event#PumpOn=0 do power1 off endon  
                 on event#PumpOn>0 do event ChkWait=%var4% endif endon  
                 on event#ChkWait>%mem4% do Backlog var4 0; ruletimer2 %mem5%; power1 on endon
                 on Rules#Timer=2 do power1 off endon 
                 on Time#Minute|1 do add4 1 endon
                 on var4#state==3 do power1 off endon
                

                Sperrzeit nach einem Pumpenlauf / Pumpenfreigabe
                Pause für die Pumpe nach einer Zirkulationspumpzeit. Hier wird verhindert, dass die Pumpe rythmisch wieder ein und ausgeschaltet wird.

                Event

                • event#PumpOn>0:
                  -- Wenn die Pumpe über var4 freigegeben ist:
                  if (%var4%>=%mem4%)
                • Time#Minute|1
                  -- Vorwärtszählen der Pumpenfreigabe pro Minute.
                rule2
                ...
                on event#PumpOn>0 do if (%var4%>=%mem4%) power1 on; ruletimer2 %value%; var4 0.0 endif endon
                ...
                on Time#Minute|1 do add4 1 endon
                ...
                

                MQTT Verbindung in der Applikation mit Tasmota

                ------------------------------------------------------------------
                -- MQTT Verbindung über rule3
                -- 
                -- Vorlauf  DS18B20-2#temperature  
                -- var1
                -- var4
                rule3
                on tele-DS18B20_2#temperature do Backlog publish stat/zirkulation/vlUpper %var1%; publish stat/zirkulation/PumpWait %var4% endon
                on power1#state do Backlog publish stat/zirkulation/Pump %value% endon 
                

                Konfiguration der Applikation in Tasmota

                -- SetOption53 1 Display hostname and IP address in GUI 0=default
                -- SetOption0 0  Save power state and use after restart (=SaveState) 1=default
                -- SetOption64 1   Switch between - or _ as sensor name separator, 0 = sensor name index separator is - (hyphen) (default), 1 = sensor name index separator is _ (underscore)
                -- mem4 legt die Wartezeit bis zum Wiedereinschalten der Pumpe fest. Bei mir 45Minuten. Gerne auch anpassen.
                -- mem5 legt die Laufzeit der Pumpe fest. Bei mir reichen 19Sekunden. Gerne auch anpassen.
                
                Backlog PowerOnState 0; TelePeriod 61; rule3 1; rule1 1; rule2 1; SetOption0 0; SetOption53 1; SetOption64 1; mem4 45; mem5 19
                

                Und wie läuft das Ganze jetzt los?
                Mit dem folgende Kommando wird alle 61Sekunden eine Messung der Sensoren an den MQTT Broker geschickt:.

                TelePeriod 61
                

                Davor ist die Option 64 wichtig, die einfach ein Problem (im iobroker) behebt, wenn man ein Eventnamen ein Bindestrich enthalten ist ;-). Daran kann man verzweifeln.

                SetOption64 1;
                

                Und folgend werden die rules aktiviert, damit es auch eine Steuerung gibt:

                rule3 1; rule1 1; rule2 1;
                

                Typischer Log aus der Tasmota console

                8:50:57 MQT: tele/zirkulation/STATE = {"Time":"2020-03-01T18:50:57","Uptime":"0T02:27:12","UptimeSec":8832,"Heap":23,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":1,"POWER1":"OFF","POWER2":"OFF","Wifi":{"AP":1,"SSId":"blabla","BSSId":"Z0:B0:VV:3K:D6:20","Channel":11,"RSSI":100,"Signal":-50,"LinkCount":1,"Downtime":"0T00:00:06"}}
                
                18:50:57 MQT: tele/zirkulation/SENSOR = {"Time":"2020-03-01T18:50:57","DS18B20_1":{"Id":"01143B9799AA","Temperature":26.1},"DS18B20_2":{"Id":"01143BDE6DAA","Temperature":33.9},"DS18B20_3":{"Id":"03209779E6D3","Temperature":22.1},"TempUnit":"C"}
                
                18:50:57 RUL: TELE-DS18B20_1#TEMPERATURE performs "Backlog publish stat/zirkulation/rl 26.1; publish stat/zirkulation/rlUpper 29.100"
                
                18:50:57 RUL: TELE-DS18B20_2#TEMPERATURE performs "Backlog publish stat/zirkulation/vl 33.9; publish stat/zirkulation/vlUpper 34.600; publish stat/zirkulation/vlLower 33.600"
                
                18:50:57 RUL: TELE-DS18B20_3#TEMPERATURE performs "publish stat/zirkulation/int 22.1"
                18:50:57 MQT: stat/zirkulation/int = 22.1
                18:50:57 MQT: stat/zirkulation/rl = 26.1
                18:50:58 MQT: stat/zirkulation/rlUpper = 29.100
                18:50:58 MQT: stat/zirkulation/vl = 33.9
                18:50:58 MQT: stat/zirkulation/vlUpper = 34.600
                18:50:58 MQT: stat/zirkulation/vlLower = 33.600
                18:51:00 RUL: TIME#MINUTE|1 performs "add4 1"
                18:51:00 MQT: stat/zirkulation/RESULT = {"Add4":"31.000"}
                18:51:00 RUL: VAR4#STATE performs "publish stat/zirkulation/PumpWait 31.000"
                18:51:00 MQT: stat/zirkulation/PumpWait = 31.000
                

                Kurzbeschreibung iobroker
                Info

                    Plattform: linux
                    Betriebssystem: linux
                    Die Architektur: arm
                    CPUs: 4
                    Geschwindigkeit: 1500 MHz
                    Modell: ARMv7 Processor rev 3 (v7l)
                    RAM: 3.7 GB
                    System-Betriebszeit: 19 T. 00:08:11
                    Node.js: v12.22.6
                    NPM: 6.14.15
                    Datenträgergröße: 29.0 GiB
                    Datenträger verfügbar: 26.0 GiB
                    Adapter-Anzahl: 362
                    Betriebszeit: 16 T. 00:39:00
                    Aktive Instanzen: 17
                    location: /opt/iobroker/
                

                JS zirkulation ZirkParseSTATE
                Bei mir heisst der Tasmota MQTT client "zirkulation". Damit kommt der Name relativ oft in dem JS vor.
                Hier werden die vom MQTT Client/Server glieferten Daten vom Tasmota client verarbeitet und umgewandelt. Das liegt daran dass ich keinen besseren Weg gefunden habe die Daten im VIS json table vom tasmota client zu bekommen.

                Hier nun das JS:

                //
                const util = require('util');
                // STATE
                // {"Time":"2020-06-06T15:19:52","Uptime":"0T21:11:25","UptimeSec":76285,"Heap":25,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":3,"POWER":"OFF","Wifi":{"AP":1,"SSId":"Kreuzspitz","BSSId":"F0:B0:14:3F:D6:20","Channel":1,"RSSI":78,"Signal":-61,"LinkCount":1,"Downtime":"0T00:00:03"}}
                //
                createState('zirkulation.TimeStampSTATE'); 
                createState('zirkulation.UpTimeSTATE'); 
                
                createState('zirkulation.jsonSENSOR'); 
                createState('zirkulation.jsonSTATE'); 
                
                // prepare tasmota format for json format
                createState('zirkulation.PowerSTATE'); 
                
                //////////////////////////////////////////////////////////////////////////
                // Convert map to JSON string
                // https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
                // 
                // @param 
                // @return 
                function mapToJson(map) {
                  return JSON.stringify([...map]);
                }
                
                //////////////////////////////////////////////////////////////////////////
                // convert JSON string key value pairs to Map key value pairs
                // https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse
                //
                // @param jsonStr key value pairs
                // @return map converted from jsonStr to map key value pairs.
                function jsonToMap(jsonStr) {
                  return new Map(JSON.parse(jsonStr));
                }
                
                on({id: 'mqtt.0.tele.zirkulation.STATE', change: "any"}, function (obj) {
                
                var jsonSensorText = '';
                jsonSensorText = obj.state.val;
                
                // {"Time":"2020-06-06T15:19:52","Uptime":"0T21:11:25","UptimeSec":76285,"Heap":25,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":3,"POWER":"OFF","Wifi":{"AP":1,"SSId":"Kreuzspitz","BSSId":"F0:B0:14:3F:D6:20","Channel":1,"RSSI":78,"Signal":-61,"LinkCount":1,"Downtime":"0T00:00:03"}}
                try {obj = JSON.parse(jsonSensorText);
                   } catch (e) {
                           console.error('Cannot parse: ' + getState('mqtt.0.tele.zirkulation.STATE').val);
                           return;
                    }
                
                //console.debug( util.inspect(jsonSensorText, {showHidden:true, depth: null}) );
                
                var sTimeStamp =    obj.Time;
                var fUptimeSec =    obj.UptimeSec;
                var sPOWER =        obj.POWER;       // "POWER":"OFF"
                var fPOWER = 0;
                
                if (sPOWER == "OFF") {
                    fPOWER = 0;
                } else {
                    fPOWER = 1;
                }
                
                setState('javascript.0.zirkulation.TimeStampSTATE', sTimeStamp , true);
                setState('javascript.0.zirkulation.UpTimeSTATE', fUptimeSec , true);
                setState('javascript.0.zirkulation.PowerSTATE', fPOWER , true);
                
                });
                
                
                /////////////////////////////////////////////////////////////////////////
                // preapre tasmota json format to use in iobroker vis jason table
                // {"Time":"2021-08-17T16:04:47","Uptime":"16T23:08:54","UptimeSec":1465734,"Heap":26,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":30,"POWER":"OFF","Wifi":{"AP":1,"SSId":"Kreuzspitz","BSSId":"3C:A6:2F:26:25:8B","Channel":11,"RSSI":88,"Signal":-56,"LinkCount":24,"Downtime":"0T00:01:15"}}
                on({id: 'mqtt.0.tele.zirkulation.STATE', change: "any"}, function (obj) {
                
                    var jsonSensorText = '';
                    jsonSensorText = obj.state.val;
                
                    var myMap = new Map();
                    
                    try {obj = JSON.parse(jsonSensorText);
                        } catch (e) {
                           console.error('Cannot parse: ' + getState('mqtt.0.tele.zirkulation.STATE').val);
                           return;
                        }
                
                    // {"Time":"2021-08-17T16:04:47","Uptime":"16T23:08:54","UptimeSec":1465734,"Heap":26,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":30,"POWER":"OFF","Wifi":{"AP":1,"SSId":"Kreuzspitz","BSSId":"3C:A6:2F:26:25:8B","Channel":11,"RSSI":88,"Signal":-56,"LinkCount":24,"Downtime":"0T00:01:15"}}
                    for (let [key, value] of Object.entries(obj)) {
                        
                        if ( typeof value === 'object' ) {
                            // iterate one level down
                            for (let [key2, value2] of Object.entries(value)) {
                                // log level 2
                                // console.log(key + ":" + key2 + "=" + value2);
                                myMap.set(key + ":" + key2, value2);
                            }
                        } else {
                            // log level 1
                            // console.log(key + "=" + value);
                            myMap.set(key , value);
                        }       
                
                    }
                    
                    var jsonString = mapToJson(myMap);
                    //console.log( util.inspect(myMap, {showHidden:true, depth: null}) );
                    //console.log( util.inspect(jsonSENSOR, {showHidden:true, depth: null}) );
                
                    setState('javascript.0.zirkulation.jsonSTATE', jsonString , true);
                
                });
                
                /////////////////////////////////////////////////////////////////////////
                // preapre tasmota json format to use in iobroker vis jason table
                // {"Time":"2021-08-17T16:05:48","DS18B20_1":{"Id":"01143B9799AA","Temperature":24.1},"DS18B20_2":{"Id":"01143BDE6DAA","Temperature":37.9},"DS18B20_3":{"Id":"03209779E6D3","Temperature":25.2},"TempUnit":"C"}
                on({id: 'mqtt.0.tele.zirkulation.SENSOR', change: "any"}, function (obj) {
                
                    var jsonSensorText = '';
                    jsonSensorText = obj.state.val;
                
                    var myMap = new Map();
                    
                    try {obj = JSON.parse(jsonSensorText);
                        } catch (e) {
                           console.error('Cannot parse: ' + getState('mqtt.0.tele.zirkulation.SENSOR').val);
                           return;
                        }
                
                    // {"Time":"2021-08-17T16:05:48","DS18B20_1":{"Id":"01143B9799AA","Temperature":24.1},"DS18B20_2":{"Id":"01143BDE6DAA","Temperature":37.9},"DS18B20_3":{"Id":"03209779E6D3","Temperature":25.2},"TempUnit":"C"}
                    for (let [key, value] of Object.entries(obj)) {
                        
                        if ( typeof value === 'object' ) {
                            // iterate one level down
                            for (let [key2, value2] of Object.entries(value)) {
                                // log level 2
                                // console.log(key + ":" + key2 + "=" + value2);
                                myMap.set(key + ":" + key2, value2);
                            }
                        } else {
                            // log level 1
                            // console.log(key + "=" + value);
                            myMap.set(key , value);
                        }       
                
                    }
                    
                    var jsonString = mapToJson(myMap);
                    //console.log( util.inspect(myMap, {showHidden:true, depth: null}) );
                    //console.log( util.inspect(jsonSENSOR, {showHidden:true, depth: null}) );
                
                    setState('javascript.0.zirkulation.jsonSENSOR', jsonString , true);
                
                });
                
                

                JS zirkulation ZirkParseSENSOR
                Hier wirkt nun die spezielle Option aus der Tasmota Konfiguration um das "-" in ein "_" zu wandeln.

                //
                const util = require('util');
                // SENSOR
                // {"Time":"2020-03-28T19:07:12","DS18B20_1":{"Id":"01143B9799AA","Temperature":30.4},"DS18B20_2":{"Id":"01143BDE6DAA","Temperature":36.1},"DS18B20_3":{"Id":"03209779E6D3","Temperature":24.6},"TempUnit":"C"}
                // 
                createState('zirkulation.TimeStampSENSOR'); 
                createState('zirkulation.VorlaufTempSENSOR');
                createState('zirkulation.RuecklaufTempSENSOR');
                createState('zirkulation.InnerhalbTempSENSOR');
                
                on({id: 'mqtt.0.tele.zirkulation.SENSOR', change: "any"}, function (obj) {
                
                var jsonSensorText = '';
                jsonSensorText = obj.state.val;
                
                try {obj = JSON.parse(jsonSensorText);
                   } catch (e) {
                           console.error('Cannot parse: ' + getState('mqtt.0.tele.zirkulation.SENSOR').val);
                           return;
                    }
                //console.debug( util.inspect(jsonSensorText, {showHidden:true, depth: null}) );
                
                // {"Time":"2020-06-06T15:11:44","DS18B20_1":{"Id":"01143B9799AA","Temperature":21.8},"DS18B20_2":{"Id":"01143BDE6DAA","Temperature":35.1},"DS18B20_3":{"Id":"03209779E6D3","Temperature":22.6},"TempUnit":"C"}   
                var fRLTemp = obj.DS18B20_1.Temperature; // RL
                var fVLTemp = obj.DS18B20_2.Temperature; // VL
                var fINTemp = obj.DS18B20_3.Temperature; // IN
                var sTimeStamp = obj.Time;
                
                setState('javascript.0.zirkulation.TimeStampSENSOR', sTimeStamp , true);
                setState('javascript.0.zirkulation.InnerhalbTempSENSOR', fINTemp , true);
                setState('javascript.0.zirkulation.VorlaufTempSENSOR', fVLTemp   , true);
                setState('javascript.0.zirkulation.RuecklaufTempSENSOR', fRLTemp , true);
                
                
                });
                
                
                
                C Offline
                C Offline
                Cumulus 0
                schrieb am zuletzt editiert von
                #17

                @alk
                Das Problem dieser Lösung ist doch, dass warmes Wasser zu spät kommt. Wenn ich warmes Wasser brauche, dann in dem Augenblick, wenn ich den Hahn öffne. Das Warmwasser kommt aber erst zwei Minuten später. Gut, man kann ja auch mal kalt duschen. Tut aber der Scheidungsquote nicht gut.
                Ich habe eine Funklösung realisiert, die wunderbar funktioniert. Im Bad und am Zugang zur Küche sind Taster, die die Umwälzpumpe einschalten. Das passt zeitlich fast immer. Und die Lösung ist käuflich und Plug'nPlay. Übrigens hatte ich eine manuelle Lösung ca. 20 Jahre drahtgebunden realisiert.

                Und in der Gästetoilette ist ein 16 A Klein-Durchlauferhitzer installiert. Der funktioniert sehr gut und ist kompatibel mit einer normalen Steckdose da nur Kurzzeitbetrieb. Eine sehr energiesparende Lösung, die auch einfach zu installieren ist, wenn eine Steckdose vorhanden ist.

                alkA 1 Antwort Letzte Antwort
                1
                • alkA alk

                  Anwendungsbeschreibung
                  Komponenten

                  • Brauchwasserspeicher (Warmwasser)
                  • Zirkulationspumpe in der Steigleitung
                  • NodeMCU V2.0 (ESP8266) OS:tasmota Doris 8.1
                  • 3x Temperaturfühler DS18B20 (1wire) zum Messen von der Vorlauftemperatur
                  • Relaismodul zum Schalten der Zirkulationspumpe

                  Ziel
                  Ich möchte mit der Steuerung Energiekosten sparen. Der aktuell Aufbau startet die Zirkulationspumpe mit einer Zeitschaltuhr, z.B. Morgens 30min, Mittag 30min und Abends 30min. Der Aufbau ist wohl sehr weit verbreitet und ist mir schon eine ganze Weile in Dorn im Auge weil wenig innovativ.

                  Die Zirkulationspumpe soll bedarfsgerecht eingeschaltet werden und die aktuelle Zeitschaltuhr kommt weg. Bedarfsgerecht meint beim Aufdrehen vom Warmwasser im Gebäude soll die Zirkulationspumpe starten und die Steigleitung mit Warmwasser befüllen. Damit ist das Warmwasser schneller an der Bedarfsstelle im Bad/WC.

                  Kurzbeschreibung der Steuerhardware
                  Ein 5V Netzteil versorgt den NodeMCU und das Relaismodul mit 5.0V Spannung. Auf dem NodeMCU steht eine geregelte 3.3.V Versorgung für die DS18B20 zur Verfügung.
                  Als Betriebssystem für den NodeMCU verwende ich tasmota in einer damals neuen Version 8.1. Alle Hardwarekomponenten sind günstig und leicht am Markt verfügbar.
                  Begonnen habe ich drei Temperatursensoren einzusetzen - ich wusste noch nicht so genau wie es werden wird. Am Ende braucht man nur einen Sensor am Heizungsrohr für den Warmwasservorlauf vom Brauchwasserspeicher in die Steigleitung.
                  Wichtig: Der NodeMCU ist echt billig gemacht und verträgt wenig Spannungsschwankungen. Schon beim Einschalten des Radios gibt es den einen oder anderen Effekt und tasmota hängt sich auf. Also umbedingt reichlich (~2) Cbulk ~330uF außen an die 3.3V Versorgungspins anschließen.

                  Kurzbeschreibung der Steuersoftware auf dem NodeMCU
                  Tasmota bietet eine schicke Möglichkeit mit "Rules" direkt und schnell auf Events zu reagieren und neue Events auszulösen. Damit lässt sich eine tolle Steuerung umsetzen. Inspiriert hat mich ein Beispiel in der Tasmotat Dokumentation der eine Poolheizung realisiert hat. Dazu gibt es noch Variablen (var) und Konstante (mem) für mehr Transparenz des Ganzen nach außen.

                  Tasmota rule1
                  Der Thermostat
                  Nachdem die Zirkulationsregelung gestartet ist stellt sich der Thermostat auf die aktuellen Temperaturen des Vorlauf ( DS18B20_2) und Rücklauf ( DS18B20_1 )ein. Es werden Grenzen zum Einschalten der Pumpe festgelegt um zu erkennen wenn Warmwasser entnommen wird. Dann erwärmt sich das Vorlaufrohr nach dem Brauchwasserspeicher, der Vorlaufsensor signalisiert einen Temperaturanstieg.

                  Event

                  • DS18B20_2:
                    -- Obere Vorlaufgrenze (UpperVL): var1
                    -- Untere Vorlaufgrenze (LowerVL): var2
                  • DS18B20_1: Aktuell nicht benutzt, LowerRL Limit: var3
                  ------------------------------------------------------------------
                  -- rule1 Thermostat und Regelung. Entscheidung ob Pumpe eingeschaltet werden soll.
                  -- 
                  -- Rücklauf DS18B20-1#temperature  
                  -- Vorlauf  DS18B20-2#temperature  
                  -- Intern   DS18B20-3#temperature  
                  --
                  -- var1 obere Temperaturschwelle Vorlauf (VL)
                  -- var2 untere Temperaturschwelle Vorlauf (VL)
                  -- var3 maximale Rücklaufschwelle (RL)
                  -- Löse event aus wenn Vorlauf temp ausserhalb oberer (var1) und unterer (var2) Schwelle, Pumpe an.
                  rule1
                  on system#boot do Backlog var1 26; var2 25; var3 25 endon
                  on DS18B20_2#temperature>%var1% do Backlog var1 %value%;var2 %value%;add1 0.5;sub2 0.5;var3 %value%;sub3 5;event UpperVL=%value% endon
                  on DS18B20_2#temperature<%var2% do Backlog var2 %value%;var1 %value%;add1 0.5;sub2 0.5;var3 %value%;sub3 5;event LowerVL=%value% endon
                  

                  590ca147-9635-4d3a-9bfe-433e1f634e00-grafik.png

                  Es wird Warmwasser entnommen
                  Die Zirkulationsregelung läuft und hat die obere und untere Vorlauftemperaturgrenzen ( DS18B20_2 ) eingestellt, die Pumpe ist aus ( power1 0 ).
                  Es wird Warmwasser aus dem Brauchwasserspeicher entnommen und das Vorlaufrohr erwärmt sich. Der Vorlaufsensor signalisiert einen Temperaturanstieg und die obere Vorlauftemperaturgrenze ( DS18B20_2 ) wird überschritten.
                  Beim Überschreiten wird der Thermostat neu definiert und eine Event ausgelöst UpperVL der die Pumpe einschalten soll.
                  Die Pumpe wird über rule2 gesteuert. Wenn die Zirkulationspumpe eine definierte Zeit ( mem5 ) gelaufen ist gibt es eine Wartezeit vor dem nächsten Pumpenanlauf ( mem4 ) um eine schnelles Ein-/Ausschalten zu vermeiden.

                  Tasmota rule1

                  Event

                  • UpperVL: Event zum einschalten der Pumpe für eine bestimmte Zeit.
                  • LowerVL: Event Pumpe aus
                  • LowerRL: Event Pumpe aus
                  • PumpOn=0: Pumpe/Power1 aus.
                  • PumpOn>0: Entscheiden ob und wie lange die Pumpe power1 eingeschaltet werden soll.
                  • Var4: Pumpenfreigabe in minuten, zählt von 0 aufwärts.
                  • Mem4: Grenze in Minuten wann die Pumpe wieder freigegeben wird und einschalten darf.
                  ------------------------------------------------------------------
                  -- rule2 	Controller: Pumpe einschalten und ausschalten
                  -- rule2 1	Regel einschalten
                  -- rule2 0	Regel ausschalten
                  --
                  -- Pumpe einschalten, delay %value%, Pumpe abschalten.
                  -- PumpOn=0 	Pumpe aus
                  -- PumpOn=10	Pumpe an, setze timer zum ausschalten
                  -- PumpOn=180	Pumpe an, setze timer zum ausschalten
                  -- 
                  -- Benutze Rule timer zum abschalten der pumpe
                  -- RuleTimer2 60		60sec
                  -- on Rules#Timer=2 o 		when countdown RuleTimer2 expires
                  -- var4		Wird beim löschen von power verwendet und es wird das wiedereinschalten verzögert. Die Einheit ist minuten.
                  --              Jede Minute zählt var4 im eines hoch. Nach z.B. 5 minuten kann die Pumpe wieder eingeschaltet werden.
                  -- mem4	45	Warte mem4 Minuten bis wiedereinschalten, e.g. 45 (Minuten)
                  -- mem5	19	Pumpenlaufzeit in sekunden, e.g. 19 (Sekunden)
                  rule2
                   on system#boot do Backlog var4 0.0 ; ruletimer2 0 endon
                   on event#UpperVL do event PumpOn=1 endon
                   on event#LowerVL do event PumpOn=0 endon
                   on event#PumpOn=0 do power1 off endon  
                   on event#PumpOn>0 do event ChkWait=%var4% endif endon  
                   on event#ChkWait>%mem4% do Backlog var4 0; ruletimer2 %mem5%; power1 on endon
                   on Rules#Timer=2 do power1 off endon 
                   on Time#Minute|1 do add4 1 endon
                   on var4#state==3 do power1 off endon
                  

                  Sperrzeit nach einem Pumpenlauf / Pumpenfreigabe
                  Pause für die Pumpe nach einer Zirkulationspumpzeit. Hier wird verhindert, dass die Pumpe rythmisch wieder ein und ausgeschaltet wird.

                  Event

                  • event#PumpOn>0:
                    -- Wenn die Pumpe über var4 freigegeben ist:
                    if (%var4%>=%mem4%)
                  • Time#Minute|1
                    -- Vorwärtszählen der Pumpenfreigabe pro Minute.
                  rule2
                  ...
                  on event#PumpOn>0 do if (%var4%>=%mem4%) power1 on; ruletimer2 %value%; var4 0.0 endif endon
                  ...
                  on Time#Minute|1 do add4 1 endon
                  ...
                  

                  MQTT Verbindung in der Applikation mit Tasmota

                  ------------------------------------------------------------------
                  -- MQTT Verbindung über rule3
                  -- 
                  -- Vorlauf  DS18B20-2#temperature  
                  -- var1
                  -- var4
                  rule3
                  on tele-DS18B20_2#temperature do Backlog publish stat/zirkulation/vlUpper %var1%; publish stat/zirkulation/PumpWait %var4% endon
                  on power1#state do Backlog publish stat/zirkulation/Pump %value% endon 
                  

                  Konfiguration der Applikation in Tasmota

                  -- SetOption53 1 Display hostname and IP address in GUI 0=default
                  -- SetOption0 0  Save power state and use after restart (=SaveState) 1=default
                  -- SetOption64 1   Switch between - or _ as sensor name separator, 0 = sensor name index separator is - (hyphen) (default), 1 = sensor name index separator is _ (underscore)
                  -- mem4 legt die Wartezeit bis zum Wiedereinschalten der Pumpe fest. Bei mir 45Minuten. Gerne auch anpassen.
                  -- mem5 legt die Laufzeit der Pumpe fest. Bei mir reichen 19Sekunden. Gerne auch anpassen.
                  
                  Backlog PowerOnState 0; TelePeriod 61; rule3 1; rule1 1; rule2 1; SetOption0 0; SetOption53 1; SetOption64 1; mem4 45; mem5 19
                  

                  Und wie läuft das Ganze jetzt los?
                  Mit dem folgende Kommando wird alle 61Sekunden eine Messung der Sensoren an den MQTT Broker geschickt:.

                  TelePeriod 61
                  

                  Davor ist die Option 64 wichtig, die einfach ein Problem (im iobroker) behebt, wenn man ein Eventnamen ein Bindestrich enthalten ist ;-). Daran kann man verzweifeln.

                  SetOption64 1;
                  

                  Und folgend werden die rules aktiviert, damit es auch eine Steuerung gibt:

                  rule3 1; rule1 1; rule2 1;
                  

                  Typischer Log aus der Tasmota console

                  8:50:57 MQT: tele/zirkulation/STATE = {"Time":"2020-03-01T18:50:57","Uptime":"0T02:27:12","UptimeSec":8832,"Heap":23,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":1,"POWER1":"OFF","POWER2":"OFF","Wifi":{"AP":1,"SSId":"blabla","BSSId":"Z0:B0:VV:3K:D6:20","Channel":11,"RSSI":100,"Signal":-50,"LinkCount":1,"Downtime":"0T00:00:06"}}
                  
                  18:50:57 MQT: tele/zirkulation/SENSOR = {"Time":"2020-03-01T18:50:57","DS18B20_1":{"Id":"01143B9799AA","Temperature":26.1},"DS18B20_2":{"Id":"01143BDE6DAA","Temperature":33.9},"DS18B20_3":{"Id":"03209779E6D3","Temperature":22.1},"TempUnit":"C"}
                  
                  18:50:57 RUL: TELE-DS18B20_1#TEMPERATURE performs "Backlog publish stat/zirkulation/rl 26.1; publish stat/zirkulation/rlUpper 29.100"
                  
                  18:50:57 RUL: TELE-DS18B20_2#TEMPERATURE performs "Backlog publish stat/zirkulation/vl 33.9; publish stat/zirkulation/vlUpper 34.600; publish stat/zirkulation/vlLower 33.600"
                  
                  18:50:57 RUL: TELE-DS18B20_3#TEMPERATURE performs "publish stat/zirkulation/int 22.1"
                  18:50:57 MQT: stat/zirkulation/int = 22.1
                  18:50:57 MQT: stat/zirkulation/rl = 26.1
                  18:50:58 MQT: stat/zirkulation/rlUpper = 29.100
                  18:50:58 MQT: stat/zirkulation/vl = 33.9
                  18:50:58 MQT: stat/zirkulation/vlUpper = 34.600
                  18:50:58 MQT: stat/zirkulation/vlLower = 33.600
                  18:51:00 RUL: TIME#MINUTE|1 performs "add4 1"
                  18:51:00 MQT: stat/zirkulation/RESULT = {"Add4":"31.000"}
                  18:51:00 RUL: VAR4#STATE performs "publish stat/zirkulation/PumpWait 31.000"
                  18:51:00 MQT: stat/zirkulation/PumpWait = 31.000
                  

                  Kurzbeschreibung iobroker
                  Info

                      Plattform: linux
                      Betriebssystem: linux
                      Die Architektur: arm
                      CPUs: 4
                      Geschwindigkeit: 1500 MHz
                      Modell: ARMv7 Processor rev 3 (v7l)
                      RAM: 3.7 GB
                      System-Betriebszeit: 19 T. 00:08:11
                      Node.js: v12.22.6
                      NPM: 6.14.15
                      Datenträgergröße: 29.0 GiB
                      Datenträger verfügbar: 26.0 GiB
                      Adapter-Anzahl: 362
                      Betriebszeit: 16 T. 00:39:00
                      Aktive Instanzen: 17
                      location: /opt/iobroker/
                  

                  JS zirkulation ZirkParseSTATE
                  Bei mir heisst der Tasmota MQTT client "zirkulation". Damit kommt der Name relativ oft in dem JS vor.
                  Hier werden die vom MQTT Client/Server glieferten Daten vom Tasmota client verarbeitet und umgewandelt. Das liegt daran dass ich keinen besseren Weg gefunden habe die Daten im VIS json table vom tasmota client zu bekommen.

                  Hier nun das JS:

                  //
                  const util = require('util');
                  // STATE
                  // {"Time":"2020-06-06T15:19:52","Uptime":"0T21:11:25","UptimeSec":76285,"Heap":25,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":3,"POWER":"OFF","Wifi":{"AP":1,"SSId":"Kreuzspitz","BSSId":"F0:B0:14:3F:D6:20","Channel":1,"RSSI":78,"Signal":-61,"LinkCount":1,"Downtime":"0T00:00:03"}}
                  //
                  createState('zirkulation.TimeStampSTATE'); 
                  createState('zirkulation.UpTimeSTATE'); 
                  
                  createState('zirkulation.jsonSENSOR'); 
                  createState('zirkulation.jsonSTATE'); 
                  
                  // prepare tasmota format for json format
                  createState('zirkulation.PowerSTATE'); 
                  
                  //////////////////////////////////////////////////////////////////////////
                  // Convert map to JSON string
                  // https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
                  // 
                  // @param 
                  // @return 
                  function mapToJson(map) {
                    return JSON.stringify([...map]);
                  }
                  
                  //////////////////////////////////////////////////////////////////////////
                  // convert JSON string key value pairs to Map key value pairs
                  // https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse
                  //
                  // @param jsonStr key value pairs
                  // @return map converted from jsonStr to map key value pairs.
                  function jsonToMap(jsonStr) {
                    return new Map(JSON.parse(jsonStr));
                  }
                  
                  on({id: 'mqtt.0.tele.zirkulation.STATE', change: "any"}, function (obj) {
                  
                  var jsonSensorText = '';
                  jsonSensorText = obj.state.val;
                  
                  // {"Time":"2020-06-06T15:19:52","Uptime":"0T21:11:25","UptimeSec":76285,"Heap":25,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":3,"POWER":"OFF","Wifi":{"AP":1,"SSId":"Kreuzspitz","BSSId":"F0:B0:14:3F:D6:20","Channel":1,"RSSI":78,"Signal":-61,"LinkCount":1,"Downtime":"0T00:00:03"}}
                  try {obj = JSON.parse(jsonSensorText);
                     } catch (e) {
                             console.error('Cannot parse: ' + getState('mqtt.0.tele.zirkulation.STATE').val);
                             return;
                      }
                  
                  //console.debug( util.inspect(jsonSensorText, {showHidden:true, depth: null}) );
                  
                  var sTimeStamp =    obj.Time;
                  var fUptimeSec =    obj.UptimeSec;
                  var sPOWER =        obj.POWER;       // "POWER":"OFF"
                  var fPOWER = 0;
                  
                  if (sPOWER == "OFF") {
                      fPOWER = 0;
                  } else {
                      fPOWER = 1;
                  }
                  
                  setState('javascript.0.zirkulation.TimeStampSTATE', sTimeStamp , true);
                  setState('javascript.0.zirkulation.UpTimeSTATE', fUptimeSec , true);
                  setState('javascript.0.zirkulation.PowerSTATE', fPOWER , true);
                  
                  });
                  
                  
                  /////////////////////////////////////////////////////////////////////////
                  // preapre tasmota json format to use in iobroker vis jason table
                  // {"Time":"2021-08-17T16:04:47","Uptime":"16T23:08:54","UptimeSec":1465734,"Heap":26,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":30,"POWER":"OFF","Wifi":{"AP":1,"SSId":"Kreuzspitz","BSSId":"3C:A6:2F:26:25:8B","Channel":11,"RSSI":88,"Signal":-56,"LinkCount":24,"Downtime":"0T00:01:15"}}
                  on({id: 'mqtt.0.tele.zirkulation.STATE', change: "any"}, function (obj) {
                  
                      var jsonSensorText = '';
                      jsonSensorText = obj.state.val;
                  
                      var myMap = new Map();
                      
                      try {obj = JSON.parse(jsonSensorText);
                          } catch (e) {
                             console.error('Cannot parse: ' + getState('mqtt.0.tele.zirkulation.STATE').val);
                             return;
                          }
                  
                      // {"Time":"2021-08-17T16:04:47","Uptime":"16T23:08:54","UptimeSec":1465734,"Heap":26,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":30,"POWER":"OFF","Wifi":{"AP":1,"SSId":"Kreuzspitz","BSSId":"3C:A6:2F:26:25:8B","Channel":11,"RSSI":88,"Signal":-56,"LinkCount":24,"Downtime":"0T00:01:15"}}
                      for (let [key, value] of Object.entries(obj)) {
                          
                          if ( typeof value === 'object' ) {
                              // iterate one level down
                              for (let [key2, value2] of Object.entries(value)) {
                                  // log level 2
                                  // console.log(key + ":" + key2 + "=" + value2);
                                  myMap.set(key + ":" + key2, value2);
                              }
                          } else {
                              // log level 1
                              // console.log(key + "=" + value);
                              myMap.set(key , value);
                          }       
                  
                      }
                      
                      var jsonString = mapToJson(myMap);
                      //console.log( util.inspect(myMap, {showHidden:true, depth: null}) );
                      //console.log( util.inspect(jsonSENSOR, {showHidden:true, depth: null}) );
                  
                      setState('javascript.0.zirkulation.jsonSTATE', jsonString , true);
                  
                  });
                  
                  /////////////////////////////////////////////////////////////////////////
                  // preapre tasmota json format to use in iobroker vis jason table
                  // {"Time":"2021-08-17T16:05:48","DS18B20_1":{"Id":"01143B9799AA","Temperature":24.1},"DS18B20_2":{"Id":"01143BDE6DAA","Temperature":37.9},"DS18B20_3":{"Id":"03209779E6D3","Temperature":25.2},"TempUnit":"C"}
                  on({id: 'mqtt.0.tele.zirkulation.SENSOR', change: "any"}, function (obj) {
                  
                      var jsonSensorText = '';
                      jsonSensorText = obj.state.val;
                  
                      var myMap = new Map();
                      
                      try {obj = JSON.parse(jsonSensorText);
                          } catch (e) {
                             console.error('Cannot parse: ' + getState('mqtt.0.tele.zirkulation.SENSOR').val);
                             return;
                          }
                  
                      // {"Time":"2021-08-17T16:05:48","DS18B20_1":{"Id":"01143B9799AA","Temperature":24.1},"DS18B20_2":{"Id":"01143BDE6DAA","Temperature":37.9},"DS18B20_3":{"Id":"03209779E6D3","Temperature":25.2},"TempUnit":"C"}
                      for (let [key, value] of Object.entries(obj)) {
                          
                          if ( typeof value === 'object' ) {
                              // iterate one level down
                              for (let [key2, value2] of Object.entries(value)) {
                                  // log level 2
                                  // console.log(key + ":" + key2 + "=" + value2);
                                  myMap.set(key + ":" + key2, value2);
                              }
                          } else {
                              // log level 1
                              // console.log(key + "=" + value);
                              myMap.set(key , value);
                          }       
                  
                      }
                      
                      var jsonString = mapToJson(myMap);
                      //console.log( util.inspect(myMap, {showHidden:true, depth: null}) );
                      //console.log( util.inspect(jsonSENSOR, {showHidden:true, depth: null}) );
                  
                      setState('javascript.0.zirkulation.jsonSENSOR', jsonString , true);
                  
                  });
                  
                  

                  JS zirkulation ZirkParseSENSOR
                  Hier wirkt nun die spezielle Option aus der Tasmota Konfiguration um das "-" in ein "_" zu wandeln.

                  //
                  const util = require('util');
                  // SENSOR
                  // {"Time":"2020-03-28T19:07:12","DS18B20_1":{"Id":"01143B9799AA","Temperature":30.4},"DS18B20_2":{"Id":"01143BDE6DAA","Temperature":36.1},"DS18B20_3":{"Id":"03209779E6D3","Temperature":24.6},"TempUnit":"C"}
                  // 
                  createState('zirkulation.TimeStampSENSOR'); 
                  createState('zirkulation.VorlaufTempSENSOR');
                  createState('zirkulation.RuecklaufTempSENSOR');
                  createState('zirkulation.InnerhalbTempSENSOR');
                  
                  on({id: 'mqtt.0.tele.zirkulation.SENSOR', change: "any"}, function (obj) {
                  
                  var jsonSensorText = '';
                  jsonSensorText = obj.state.val;
                  
                  try {obj = JSON.parse(jsonSensorText);
                     } catch (e) {
                             console.error('Cannot parse: ' + getState('mqtt.0.tele.zirkulation.SENSOR').val);
                             return;
                      }
                  //console.debug( util.inspect(jsonSensorText, {showHidden:true, depth: null}) );
                  
                  // {"Time":"2020-06-06T15:11:44","DS18B20_1":{"Id":"01143B9799AA","Temperature":21.8},"DS18B20_2":{"Id":"01143BDE6DAA","Temperature":35.1},"DS18B20_3":{"Id":"03209779E6D3","Temperature":22.6},"TempUnit":"C"}   
                  var fRLTemp = obj.DS18B20_1.Temperature; // RL
                  var fVLTemp = obj.DS18B20_2.Temperature; // VL
                  var fINTemp = obj.DS18B20_3.Temperature; // IN
                  var sTimeStamp = obj.Time;
                  
                  setState('javascript.0.zirkulation.TimeStampSENSOR', sTimeStamp , true);
                  setState('javascript.0.zirkulation.InnerhalbTempSENSOR', fINTemp , true);
                  setState('javascript.0.zirkulation.VorlaufTempSENSOR', fVLTemp   , true);
                  setState('javascript.0.zirkulation.RuecklaufTempSENSOR', fRLTemp , true);
                  
                  
                  });
                  
                  
                  
                  I Offline
                  I Offline
                  Ingmar
                  schrieb am zuletzt editiert von
                  #18

                  @alk ich habe ein Sonoff Pow R2 mit Tasmota vor die Zirkulationspumpe gesetzt. Jetzt kann ich über die Zeitschaltuhr (Tasmota Funktion) zu den tapischen Zeiten die Pumpe ein oder aus schalten. Mit dem Handy kann ich die Zeitschaltuhr übersteuern und wenn ich in der Küche bin und zwischendrinnen (Kuchen backen etc.) warmes Wasser für den Abwasch brauche die Pumpe einfach einschalten....
                  Das funktioniert ganz gut und jeder im Haushalt kann so mit dem eigenen Smartphone die Pumpe wenn nötig einschalten...

                  1 Antwort Letzte Antwort
                  0
                  • D Offline
                    D Offline
                    disaster123
                    schrieb am zuletzt editiert von
                    #19

                    Wie messt Ihr denn vernünftig die Temperatur an einem Kupferrohr? Ich habe das bisher mit Zigbee Funkfühlern nicht hinbekommen....

                    A BananaJoeB 2 Antworten Letzte Antwort
                    0
                    • D disaster123

                      Wie messt Ihr denn vernünftig die Temperatur an einem Kupferrohr? Ich habe das bisher mit Zigbee Funkfühlern nicht hinbekommen....

                      A Offline
                      A Offline
                      AndyGR42
                      schrieb am zuletzt editiert von AndyGR42
                      #20

                      So wirklich smart wird das mit BWM. Da wir faktisch überall das Licht per Hue Motion Sensoren steuern wird dies im neuen Haus auch die Zirkulationspumpe aktivieren.

                      Ach ja, die Legionellenspülung mit hoher Temperatur 1x die Woche kann man da auch automatisieren. Ich weiß ja, wann der Kessel hochheizt.

                      wendy2702W 1 Antwort Letzte Antwort
                      0
                      • D disaster123

                        Wie messt Ihr denn vernünftig die Temperatur an einem Kupferrohr? Ich habe das bisher mit Zigbee Funkfühlern nicht hinbekommen....

                        BananaJoeB Offline
                        BananaJoeB Offline
                        BananaJoe
                        Most Active
                        schrieb am zuletzt editiert von BananaJoe
                        #21

                        @disaster123 sagte in WW Zirkulationspumpe bedarfsgerecht ein- und ausschalten:

                        Wie messt Ihr denn vernünftig die Temperatur an einem Kupferrohr? Ich habe das bisher mit Zigbee Funkfühlern nicht hinbekommen....

                        So etwas wie ein Wemos D1 Mini + DS18B20 Temperaturfühlern wäre dein Freund.

                        Auf den Wemos kannst du einfach Tasmota aufspielen, den Wemos selbst per USB-Netzteil mit Strom versorgen.
                        Du kannst bei Tasmota dann bis zu 8 dieser Temperatursensoren anschließen, die werden alle parallel geschaltet, du brauchst einmal einen 4.7K Wiederstand zusätzlich. Also ein Wemos misst dann 8 Temperaturen gleichzeitig.
                        Die Daten landen per MQTT am ioBroker, alternativ mit dem Sonoff-Adapter.
                        https://tasmota.github.io/docs/DS18x20/

                        Die Temperaturfühler gibt es in 2 Bauarten, du willst die mit langem Kabel + Metallkapsel, z.B. https://www.amazon.de/gp/product/B07KNQJ3D7

                        Die kannst du einfach mit Kabelbinder, Klebeband usw. (gerne etwas wärmeleitendes wie Metallkabelbinder) an den Kupferrohren befestigen (ggf. unter der Isolierung).

                        Als Gehäuse für den Wemos mit den Kabeln reicht zur Not auch eine Abzeigdose.

                        ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 9 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV 750W kaskadiert || Creality CR-10 SE 3D-Drucker

                        1 Antwort Letzte Antwort
                        0
                        • A AndyGR42

                          So wirklich smart wird das mit BWM. Da wir faktisch überall das Licht per Hue Motion Sensoren steuern wird dies im neuen Haus auch die Zirkulationspumpe aktivieren.

                          Ach ja, die Legionellenspülung mit hoher Temperatur 1x die Woche kann man da auch automatisieren. Ich weiß ja, wann der Kessel hochheizt.

                          wendy2702W Online
                          wendy2702W Online
                          wendy2702
                          schrieb am zuletzt editiert von wendy2702
                          #22

                          @andygr42 sagte in WW Zirkulationspumpe bedarfsgerecht ein- und ausschalten:

                          So wirklich smart wird das mit BWM.

                          Hmm,

                          hatte ich auch mal überlegt aber auch dann dauert es immer noch ziemlich bis das Wasser einmal durchgewältzt wurde und auch an der entferntesten Zapfstelle sofort warmes wasser kommt.

                          Ein weiterer Nachteil: jedes mal wenn jemand den Raum betrifft springt die Pumpe an, egal ob Warmwasser benötigt wird oder nicht oder wie willst du das verhindern?

                          Das einzige was für mich "Bedarfsgerecht" ist, ist die Anforderung per manuellem Befehl. Sei es per Taster, Sprache oder einer anderen menschlichen Aktion.

                          Bei der Steuerung per Temp Fühler habe ich nicht wirklich verstanden was es bringen soll. Bis da ein nennenswerter Unterschied festgestellt wird, sei es durch Öffnen des Hahnes oder wenn die Temp des Wassers sinkt/steigt will ich schon Warmwasser haben. Wenn dann erst die Pumpe anspringt kann ich auch solange laufen lassen.

                          Aber vielleicht verstehe ich das auch nur falsch und mich kann jemand erleuchten.

                          Only my 2cents

                          Bitte keine Fragen per PN, die gehören ins Forum!

                          Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                          A 1 Antwort Letzte Antwort
                          0
                          • wendy2702W wendy2702

                            @andygr42 sagte in WW Zirkulationspumpe bedarfsgerecht ein- und ausschalten:

                            So wirklich smart wird das mit BWM.

                            Hmm,

                            hatte ich auch mal überlegt aber auch dann dauert es immer noch ziemlich bis das Wasser einmal durchgewältzt wurde und auch an der entferntesten Zapfstelle sofort warmes wasser kommt.

                            Ein weiterer Nachteil: jedes mal wenn jemand den Raum betrifft springt die Pumpe an, egal ob Warmwasser benötigt wird oder nicht oder wie willst du das verhindern?

                            Das einzige was für mich "Bedarfsgerecht" ist, ist die Anforderung per manuellem Befehl. Sei es per Taster, Sprache oder einer anderen menschlichen Aktion.

                            Bei der Steuerung per Temp Fühler habe ich nicht wirklich verstanden was es bringen soll. Bis da ein nennenswerter Unterschied festgestellt wird, sei es durch Öffnen des Hahnes oder wenn die Temp des Wassers sinkt/steigt will ich schon Warmwasser haben. Wenn dann erst die Pumpe anspringt kann ich auch solange laufen lassen.

                            Aber vielleicht verstehe ich das auch nur falsch und mich kann jemand erleuchten.

                            Only my 2cents

                            A Offline
                            A Offline
                            AndyGR42
                            schrieb am zuletzt editiert von
                            #23

                            @wendy2702 Ich denke, das hängt auch vom Einzelfall ab. Ein manuelles Einschalten kommt für mich nicht in Frage. Der WAF ist definitiv zu niedrig und wenn Du dann noch Kinder hast, wird das mal gar nix. Da würde ich lieber bei Zeitschaltuhr morgens und abends bleiben.

                            Im aktuellen Haus kann ich in der Küche darauf komplett verzichten. Die Spüle ist praktisch direkt über der TWWP und es ist schnell warm. Im Gäste WC verzichten wir fast ganz auf warmes Wasser (am Eckventil ziemlich abgedreht). Wäre aber auch schnell da. Das Duschbad unten wird kaum genutzt. Bleibt noch das Bad oben. Da möchte ich (fast) immer warmes Wasser haben. Egal ob nur jemand kurz auf dem Klo war oder duschen möchte, es wird fast immer benötigt.

                            Im neuen Haus könnte es auch für die Küche interessant werden. Hier wäre z.B. denkbar, an Stelle eines BWM einen Präsenzsensor zu nutzen und die Pumpe erst zeitverzögert einzuschalten. Damit halt nicht jedes Mal, wenn jemand zum Kühlschrank latscht, das Wasser zirkuliert. Wenn jemand länger in der Küche ist, steigt auch die Wahrscheinlichkeit, dass er warmes Wasser benötigt. Eben die Finger waschen oder einen Apfel abspülen geht auch mit kaltem Wasser.

                            Am Ende müsste man tatsächlich mal über einen längeren Zeitraum den Energieverbrauch messen und entschieden, was besser ist.

                            JLegJ 1 Antwort Letzte Antwort
                            0
                            • A AndyGR42

                              @wendy2702 Ich denke, das hängt auch vom Einzelfall ab. Ein manuelles Einschalten kommt für mich nicht in Frage. Der WAF ist definitiv zu niedrig und wenn Du dann noch Kinder hast, wird das mal gar nix. Da würde ich lieber bei Zeitschaltuhr morgens und abends bleiben.

                              Im aktuellen Haus kann ich in der Küche darauf komplett verzichten. Die Spüle ist praktisch direkt über der TWWP und es ist schnell warm. Im Gäste WC verzichten wir fast ganz auf warmes Wasser (am Eckventil ziemlich abgedreht). Wäre aber auch schnell da. Das Duschbad unten wird kaum genutzt. Bleibt noch das Bad oben. Da möchte ich (fast) immer warmes Wasser haben. Egal ob nur jemand kurz auf dem Klo war oder duschen möchte, es wird fast immer benötigt.

                              Im neuen Haus könnte es auch für die Küche interessant werden. Hier wäre z.B. denkbar, an Stelle eines BWM einen Präsenzsensor zu nutzen und die Pumpe erst zeitverzögert einzuschalten. Damit halt nicht jedes Mal, wenn jemand zum Kühlschrank latscht, das Wasser zirkuliert. Wenn jemand länger in der Küche ist, steigt auch die Wahrscheinlichkeit, dass er warmes Wasser benötigt. Eben die Finger waschen oder einen Apfel abspülen geht auch mit kaltem Wasser.

                              Am Ende müsste man tatsächlich mal über einen längeren Zeitraum den Energieverbrauch messen und entschieden, was besser ist.

                              JLegJ Offline
                              JLegJ Offline
                              JLeg
                              schrieb am zuletzt editiert von
                              #24

                              @andygr42 sagte in WW Zirkulationspumpe bedarfsgerecht ein- und ausschalten:

                              @wendy2702 Ich denke, das hängt auch vom Einzelfall ab. Ein manuelles Einschalten kommt für mich nicht in Frage. Der WAF ist definitiv zu niedrig und wenn Du dann noch Kinder hast, wird das mal gar nix. Da würde ich lieber bei Zeitschaltuhr morgens und abends bleiben.

                              nach einigem Herumprobieren auch mit kommerziellen Automatik-Lösungen haben wir jetzt beides - Zeitschaltung morgend u. abends, plus an den "Hauptzapfstellen" Taster, die für 5 Minuten die Circopumpe laufen lassen. Das klappt insgesamt jetzt gut, und sogar Kinder verstehen das sehr schnell... :)

                              1 Antwort Letzte Antwort
                              0
                              • wendy2702W Online
                                wendy2702W Online
                                wendy2702
                                schrieb am zuletzt editiert von
                                #25

                                @jleg sagte in WW Zirkulationspumpe bedarfsgerecht ein- und ausschalten:

                                nach einigem Herumprobieren auch mit kommerziellen Automatik-Lösungen haben wir jetzt beides - Zeitschaltung morgend u. abends, plus an den "Hauptzapfstellen" Taster, die für 5 Minuten die Circopumpe laufen lassen. Das klappt insgesamt jetzt gut, und sogar Kinder verstehen das sehr schnell...

                                So habe ich das auch.

                                Bitte keine Fragen per PN, die gehören ins Forum!

                                Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                                1 Antwort Letzte Antwort
                                0
                                • HomoranH Nicht stören
                                  HomoranH Nicht stören
                                  Homoran
                                  Global Moderator Administrators
                                  schrieb am zuletzt editiert von
                                  #26

                                  ich werf da mal was in den Ring

                                  https://www.stall.biz/project/wiffi-pump-4-energiesparende-steuerung-der-zirkulationspumpe-mit-heizungsueberwachung

                                  kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                                  Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                                  der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                                  wendy2702W 1 Antwort Letzte Antwort
                                  1
                                  • HomoranH Homoran

                                    ich werf da mal was in den Ring

                                    https://www.stall.biz/project/wiffi-pump-4-energiesparende-steuerung-der-zirkulationspumpe-mit-heizungsueberwachung

                                    wendy2702W Online
                                    wendy2702W Online
                                    wendy2702
                                    schrieb am zuletzt editiert von
                                    #27

                                    @homoran Hattest du eine Seite vorher schon :grinning:

                                    Frage mich welche Hochleistungszirkulationspumpe da zum Einsatzkommen muss damit das Warme wasser schneller am Hahn ist.

                                    Hat da jemand Erfahrungswerte?

                                    Bitte keine Fragen per PN, die gehören ins Forum!

                                    Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                                    JLegJ alkA 2 Antworten Letzte Antwort
                                    0
                                    • wendy2702W wendy2702

                                      @homoran Hattest du eine Seite vorher schon :grinning:

                                      Frage mich welche Hochleistungszirkulationspumpe da zum Einsatzkommen muss damit das Warme wasser schneller am Hahn ist.

                                      Hat da jemand Erfahrungswerte?

                                      JLegJ Offline
                                      JLegJ Offline
                                      JLeg
                                      schrieb am zuletzt editiert von
                                      #28

                                      @wendy2702 sagte in WW Zirkulationspumpe bedarfsgerecht ein- und ausschalten:

                                      @homoran Hattest du eine Seite vorher schon :grinning:

                                      Frage mich welche Hochleistungszirkulationspumpe da zum Einsatzkommen muss damit das Warme wasser schneller am Hahn ist.

                                      Hat da jemand Erfahrungswerte?

                                      unsere vermutlich nicht ungewöhnliche Stratos Eco-Z lässt sich von 6 - 60W einstellen. Und 60W ballern schon ganz gut ;) - im Timerbetrieb reichen bei uns 10-12W völlig…

                                      wendy2702W 1 Antwort Letzte Antwort
                                      1
                                      • JLegJ JLeg

                                        @wendy2702 sagte in WW Zirkulationspumpe bedarfsgerecht ein- und ausschalten:

                                        @homoran Hattest du eine Seite vorher schon :grinning:

                                        Frage mich welche Hochleistungszirkulationspumpe da zum Einsatzkommen muss damit das Warme wasser schneller am Hahn ist.

                                        Hat da jemand Erfahrungswerte?

                                        unsere vermutlich nicht ungewöhnliche Stratos Eco-Z lässt sich von 6 - 60W einstellen. Und 60W ballern schon ganz gut ;) - im Timerbetrieb reichen bei uns 10-12W völlig…

                                        wendy2702W Online
                                        wendy2702W Online
                                        wendy2702
                                        schrieb am zuletzt editiert von
                                        #29

                                        @jleg sagte in WW Zirkulationspumpe bedarfsgerecht ein- und ausschalten:

                                        Stratos Eco-Z

                                        OK.

                                        Dann muss ich wohl auch mal in eine neue Pumpe investieren damit das Wasser schneller an der richtigen Stelle warm ist.

                                        Bitte keine Fragen per PN, die gehören ins Forum!

                                        Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                                        1 Antwort Letzte Antwort
                                        0
                                        • wendy2702W wendy2702

                                          @homoran Hattest du eine Seite vorher schon :grinning:

                                          Frage mich welche Hochleistungszirkulationspumpe da zum Einsatzkommen muss damit das Warme wasser schneller am Hahn ist.

                                          Hat da jemand Erfahrungswerte?

                                          alkA Offline
                                          alkA Offline
                                          alk
                                          schrieb am zuletzt editiert von alk
                                          #30

                                          @wendy2702 Habe hier eininge Versuche gemacht und in einem typischen Haushalt/Haus mit Brauchwasserspeicher im Keller und Bäder im EG, OG, DG braucht eine typische Umwäzpumpe ca. 20sec und die Leitung ist genügend voll mit warmem Wasser. Von nun an kommt ja auch, ohne Pumpe, genügend warmes Wasser nach.

                                          • DIY Electronics that do their job
                                          • EV, WB, PV + Battery and optimized charging ;-)
                                          1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          804

                                          Online

                                          32.5k

                                          Benutzer

                                          81.7k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe