Blockly: Anhebung der Warmwassertemperatur bei PV_Überschuss

Fragen zum Skripten mit ioBroker.javascript
Benutzeravatar
wendy2702
guru
Beiträge: 3103
Registriert: 18.01.2016, 22:12
Wohnort: Herzogenrath

Blockly: Anhebung der Warmwassertemperatur bei PV_Überschuss

Beitrag von wendy2702 » 20.04.2018, 09:36

Hi,

ich würde gerne mit Blockly / Javascript folgendes umsetzen.

Bei Überschußeinspeisung meiner PV-Anlage um Wert X soll die Warmwassertemperatur von 45 Grad auf 60 Grad angehoben werden. Anheben der WW-Temp bewirkt ein einschalten des Kompressors und erhöht damit meinen Eigenverbrauch. (ich erhalte leider für den verkauften Strom nicht mehr soviel)

Ich betreibe eine Waterkotte Wärmepumpe welche ich Seriel Ansteuern und auslesen kann. Mit diesem Script und dem HEX String kann ich die WW-Temp auf 60 grad stellen:
Spoiler: Show hidden text

Code: Alles auswählen

createState('Waterkotte.Daten.WW_TEMP_Change_feedback');

// To use the `ByteLength` parser:
const SerialPort = require('serialport');
const ByteLength = SerialPort.parsers.ByteLength;

var buffer = new Buffer(14);
buffer[0] = 0x10;
buffer[1] = 0x02;
buffer[2] = 0x01;
buffer[3] = 0x13;
buffer[4] = 0x01;
buffer[5] = 0x3b;
buffer[6] = 0x00;
buffer[7] = 0x00;
buffer[8] = 0x70;
buffer[9] = 0x42;
buffer[10] = 0x10;
buffer[11] = 0x03;
buffer[12] = 0xd0;
buffer[13] = 0x77;
const port = new SerialPort("/dev/ttyUSB0", {
    baudRate: 9600,
    dataBits : 8,
    parity : 'none',
    stopBits: 1
//  flowControl : false
}, function (err) {
    if (err) {
//        port.close();
        return console.log('Error1: ', err.message);
    }

    const parser = port.pipe(new ByteLength({ length: 11 }));
    parser.on('data', function (data) {
		console.log('Data received: ' + data.toString('hex'));
		var daten = data.toString('hex');
		setState('Waterkotte.Daten.WW_TEMP_Change_feedback', daten, true);
		//port.close();
	});

	// Flush input
	port.flush();

	// send Data
	    port.write(buffer, function(err) {
		    if (err) {
			    return console.log('Error on write: ', err.message);
		    }
    
		    console.log('Daten send');
// 		    port.close();
        });
    });
    
port.on('open', function() {
	console.log('Connected');
});

port.on('error', function(err) {
	console.log('Error2: ', err.message);
//	port.close();
});

// close port if the script stopped (to be able to open it again)
onStop(function (callback) {
	if (port && port.isOpen) {
		port.close();
		console.log('port closed');
	}
});
Mit diesem Script welches jede Minute zur 12 Sekunde ausgeführt wird lese ich etliche Daten aus der Wärmepumpe aus:
Spoiler: Show hidden text

Code: Alles auswählen

createState('Waterkotte.Daten.Abfrage_Rohdaten');

// To use the `ByteLength` parser:
const SerialPort = require('serialport');
const ByteLength = SerialPort.parsers.ByteLength;

var buffer = new Buffer(12);
buffer[0] = 0x10;
buffer[1] = 0x02;
buffer[2] = 0x01;
buffer[3] = 0x15;
buffer[4] = 0x00;
buffer[5] = 0x00;
buffer[6] = 0x00;
buffer[7] = 0xf3;
buffer[8] = 0x10;
buffer[9] = 0x03;
buffer[10] = 0x7c;
buffer[11] = 0x32;
const port = new SerialPort("/dev/ttyUSB0", {
    baudRate: 9600,
    dataBits : 8,
    parity : 'none',
    stopBits: 1
//  flowControl : false
}, function (err) {
    if (err) {
//        port.close();
        return console.log('Error1: ', err.message);
    }

    const parser = port.pipe(new ByteLength({ length: 253 }));
    parser.on('data', function (data) {
		console.log('Data received: ' + data.toString('hex'));
		var daten = data.toString('hex');
		setState('Waterkotte.Daten.Abfrage_Rohdaten', daten, true);
		//port.close();
	});

	// Flush input
	port.flush();

	// send Data
	    port.write(buffer, function(err) {
		    if (err) {
			    return console.log('Error on write: ', err.message);
		    }
    
		    console.log('Daten send');
// 		    port.close();
        });
    });
    
port.on('open', function() {
	console.log('Connected');
});

port.on('error', function(err) {
	console.log('Error2: ', err.message);
//	port.close();
});

// close port if the script stopped (to be able to open it again)
onStop(function (callback) {
	if (port && port.isOpen) {
		port.close();
		console.log('port closed');
	}
});
Startet man jetzt beide Scripte zufällig Gleichzeitig oder das eine während das andere noch aktiv ist bekomme ich den Serialport nicht mehr geschlossen und muss den PI rebooten.

Damit das nicht so schnell passiert habe ich mal angefangen ein Blockly zu bauen:
WW_60_PV_Ueberschuss.jpg
Allerdings fällt mir gerade nicht ein wie ich es anstellen muss damit:

a) das Script zur Temp Anhebung nicht zufällig aktiviert wird kurz bevor die Abfrage läuft. Aktuell Prüfe ich ja nur ob es Aktiv ist oder nicht.

b) ein toggeln verhindern kann denn wenn z.B. die Einspeisung länger als 5 Minuten unter den Wert x fällt soll die Temp mit einem weiteren Script wieder auf 45 Grad gesetzt werden.

Grundsätzliche Frage: Kann man in Blockly den Serial Port direkt ansprechen und dann z.B. auch den Hex String senden?

Bin für jegliche Hilfe dankbar.
Bitte keine Fragen per PN, die gehören ins Forum!

Benutzeravatar
wendy2702
guru
Beiträge: 3103
Registriert: 18.01.2016, 22:12
Wohnort: Herzogenrath

Re: Blockly: Anhebung der Warmwassertemperatur bei PV_Überschuss

Beitrag von wendy2702 » 03.05.2018, 13:21

OK.

Da ich hier nicht weitergekommen bin und es zeitweise immer noch passiert das der Port nicht sauber geschlossen wird eine andere Frage.

Wenn der Port "offen" bleibt kommt im Logfile dieser Eintrag:

Code: Alles auswählen

Error1:
Das ganze kann ich wie schon geschrieben durch einen restart des PI beseitigen aber scheinbar auch durch einen restart der Javascript instanz.

Wie kann ich das logfile auf diesen Eintrag überwachen und im Falle das der Fehler auftritt die JS-Instanz neu starten?
Bitte keine Fragen per PN, die gehören ins Forum!

Karl_999
professional
Beiträge: 121
Registriert: 21.11.2017, 22:09

Re: Blockly: Anhebung der Warmwassertemperatur bei PV_Überschuss

Beitrag von Karl_999 » 03.05.2018, 17:53

Wenn die Skripte nicht gleichzeitig laufen dürfen / sollen, empfiehlt es sich eine Hilfsvariable (genauer ein Semaphor https://de.wikipedia.org/wiki/Semaphor_(Informatik)) einzuführen (z.B. Skript_x_aktiv).
Das Semaphor fragt man dann einfach ab und setzt sie dann im Skript entsprechend

Code: Alles auswählen

Skript_2:
if not (Skript_1_aktiv) {
	Skript_2_aktiv = true;
	... // hier wird vieles gemacht 
	Skript_2_aktiv = false; // wenn alles durch ist
	}
Dabei ist aber wichtig, dass auch die Ausnahmen sauber abgefangen und die dort ebenfalls die Aktiv-Kennung zurückgesetzt wird.
Das Ganze dann in gleicher Form für das zweite Skript.

Natürlich lässt sich das auch in Blockly umsetzen.

Benutzeravatar
wendy2702
guru
Beiträge: 3103
Registriert: 18.01.2016, 22:12
Wohnort: Herzogenrath

Re: Blockly: Anhebung der Warmwassertemperatur bei PV_Überschuss

Beitrag von wendy2702 » 03.05.2018, 18:05

Danke für deine Antwort.

Das muss ich mir mal ansehen. Mein erster Blockly Versuch hat noch nicht so geklappt.
Bitte keine Fragen per PN, die gehören ins Forum!

Benutzeravatar
Dutchman
guru
Beiträge: 3569
Registriert: 07.01.2016, 23:42

Blockly: Anhebung der Warmwassertemperatur bei PV_Überschuss

Beitrag von Dutchman » 03.05.2018, 21:59

wendy2702 hat geschrieben:Danke für deine Antwort.

Das muss ich mir mal ansehen. Mein erster Blockly Versuch hat noch nicht so geklappt.
Mit blockly währe wohl die einfachste Lösung ein object zu erstellen was dir sagt ob der port besetzt ist oder nicht.

zB:

- object 1 : Port_Blocked_Script_1
- object 2 : Port_Blocked_Script_2

Wird Script 1 aktiviert setzt du erst das object auf true, ist das Script fertig und schließt den Port wieder auf false

Das 2te Script könnte durch Trigger false ausgelöst werden und setzt Dan dan das andere object auf true und wen es fertig ist mit einer Verzögerung auf false. Damit triggerst du Dan wieder das erste Script.

Mal als idee


-------------------------
Send from mobile device
Das schöne ios hat Auto Korrektur zum k****

Wer Schreibfehler findet darf sie behalten oder auf eBay verkaufen, mindest Umsatz 10% für die community

Benutzeravatar
wendy2702
guru
Beiträge: 3103
Registriert: 18.01.2016, 22:12
Wohnort: Herzogenrath

Re: Blockly: Anhebung der Warmwassertemperatur bei PV_Überschuss

Beitrag von wendy2702 » 04.05.2018, 07:58

Ich werde mir mal was zusammen klicken, testen und zu 99,9% wieder fragen :D
Bitte keine Fragen per PN, die gehören ins Forum!

Benutzeravatar
wendy2702
guru
Beiträge: 3103
Registriert: 18.01.2016, 22:12
Wohnort: Herzogenrath

Re: Blockly: Anhebung der Warmwassertemperatur bei PV_Überschuss

Beitrag von wendy2702 » 20.06.2018, 10:34

Hallo,

so... hat ein bisschen gedauert aber ich bin etwas weitergekommen.

Mein Aktuelles Blockly sieht so aus:
Blocky_WW_Umschaltung.jpg
Meine WP benötigt zur WW Erzeugung ca. 3,8kw deshalb dachte ich mir mit dem ersten Block eine Variable setzen falls Einspeisung >=3800,

mit dem zweiten Block die Variable zurücksetzen wenn der Bezug >500 ist mit Zeitverzögerung (30sekunden zum Testen) damit es nicht permanent toggelt wenn gerade mal eine Wolke durchzieht.

Allerdings weiß ich nicht ob man das noch besser lösen könnte z.B. im ersten Block erst auf "true" setzen wenn die 3800 länger als eine bestimmte Zeit eingespeist werden!?

Da die Abfrage der Daten der WP und das Umschalten Seriell erfolgt muss ich im untereren Teil dafür sorgen das nicht zeitgleich ein anderes Script den Port belegt da sich sonst der Port verabschiedet und ich den JS Adapter erst neu starten muss.

Vielleicht hat dazu auch jemand eine Idee wie man das Automatisieren könnte.

Wenn der Port nicht mehr reagiert erscheint im Log des Datenabfrage Scriptes ein "Error 1" Eintrag.

EDIT:gerade passiert und sieht im log dann so aus:

Code: Alles auswählen

javascript.2	2018-06-20 11:37:16.021	info	Stop script script.js.Waterkotte.Abfrage_Waterkotte
javascript.2	2018-06-20 11:37:13.042	info	script.js.Waterkotte.Abfrage_Waterkotte: Error1:
javascript.2	2018-06-20 11:37:13.037	info	script.js.Waterkotte.Abfrage_Waterkotte: registered 0 subscriptions and 0 schedules
javascript.2	2018-06-20 11:37:13.026	info	Start javascript script.js.Waterkotte.Abfrage_Waterkotte
[/color]

Im Prinzip sehen die Scripte zur WP Steuerung aktuell so aus:
Waterkotte_Scripte.jpg
Abfrage Waterkotte --> wird jede Minute einmal gestartet und liest einen HEX String Serial aus der WP aus.
Auswertung Waterkotte --> läuft ständig und wandelt den HEX String in einzelne Datenpunkte um und schreibt diese
Restart Abfrage Waterkotte --> setzt das erste Script einmal pro Minute für 5 Sekunden auf enabled.
WW_Temp_45 --> script um die Warmwasser Temp auf 45 Grad zu stellen
WW_Temp_60 --> script um die Warmwasser Temo auf 60 Grad zu stellen
WW_Temp_Umschaltung_PV_Ueberschuß --> mein Blockly von oben zum umschalten der Warmwasser Temperatur

Anbei noch das Blockly als Export
Spoiler: Show hidden text

Code: Alles auswählen

<xml xmlns="http://www.w3.org/1999/xhtml">
  <block type="on_ext" id="+CU7DBqPN-:BXdUoO+nm" x="-487" y="63">
    <mutation items="1"></mutation>
    <field name="CONDITION">ne</field>
    <field name="ACK_CONDITION"></field>
    <value name="OID0">
      <shadow type="field_oid" id="-dyEvB_T{Oif?o=FpqC8">
        <field name="oid">javascript.0.PV_Anlage.Wirkenergie_Einspeisung</field>
      </shadow>
    </value>
    <statement name="STATEMENT">
      <block type="controls_if" id="SX;8~,KESeTeG1|YOp2Y">
        <value name="IF0">
          <block type="logic_compare" id="o#(;6hyhUyy{Tv4_vXkv">
            <field name="OP">GT</field>
            <value name="A">
              <block type="get_value" id="JW#gBtZdpmHx!m5|)tYq">
                <field name="ATTR">val</field>
                <field name="OID">javascript.0.PV_Anlage.Wirkenergie_Einspeisung</field>
              </block>
            </value>
            <value name="B">
              <block type="math_number" id="^JD~A^^vtI4:aDiU~MYs">
                <field name="NUM">3800</field>
              </block>
            </value>
          </block>
        </value>
        <statement name="DO0">
          <block type="control" id="X:!J{M}Fd4xE`An#hzO[">
            <mutation delay_input="false"></mutation>
            <field name="OID">javascript.0.PV_Anlage.Einspeisung_3800</field>
            <field name="WITH_DELAY">FALSE</field>
            <value name="VALUE">
              <block type="logic_boolean" id="g|JX0*bh+XYLjH[/b0@P">
                <field name="BOOL">TRUE</field>
              </block>
            </value>
          </block>
        </statement>
      </block>
    </statement>
  </block>
  <block type="on_ext" id="l/sO`Mmg#3?E_,:aD_#5" x="-487" y="288">
    <mutation items="1"></mutation>
    <field name="CONDITION">ne</field>
    <field name="ACK_CONDITION"></field>
    <value name="OID0">
      <shadow type="field_oid" id="e5eyn}olm?FlJe@hIU~V">
        <field name="oid">javascript.0.PV_Anlage.Wirkenergie_Bezug</field>
      </shadow>
    </value>
    <statement name="STATEMENT">
      <block type="controls_if" id="si_XTC747[al^gX0YC!R">
        <value name="IF0">
          <block type="logic_compare" id="n2q67+OVsF.C14ve9go)">
            <field name="OP">GT</field>
            <value name="A">
              <block type="get_value" id="KYLeNK4mE?-Kf6;#WE#H">
                <field name="ATTR">val</field>
                <field name="OID">javascript.0.PV_Anlage.Wirkenergie_Bezug</field>
              </block>
            </value>
            <value name="B">
              <block type="math_number" id="F~ubKW`y}A(i*h}er@QP">
                <field name="NUM">500</field>
              </block>
            </value>
          </block>
        </value>
        <statement name="DO0">
          <block type="control" id="i_^QxI,D*lKrmMm/OgR8">
            <mutation delay_input="true"></mutation>
            <field name="OID">javascript.0.PV_Anlage.Einspeisung_3800</field>
            <field name="WITH_DELAY">TRUE</field>
            <field name="DELAY_MS">30</field>
            <field name="UNIT">sec</field>
            <field name="CLEAR_RUNNING">FALSE</field>
            <value name="VALUE">
              <block type="logic_boolean" id="t[u{-w_(z}*G}bw[K#M9">
                <field name="BOOL">FALSE</field>
              </block>
            </value>
          </block>
        </statement>
      </block>
    </statement>
  </block>
  <block type="on_ext" id="V6BqryszrMeeFX,Sy%xw" x="-487" y="513">
    <mutation items="1"></mutation>
    <field name="CONDITION">ne</field>
    <field name="ACK_CONDITION"></field>
    <value name="OID0">
      <shadow type="field_oid" id="=M47K)L7rrxsX8pLE9})">
        <field name="oid">javascript.0.PV_Anlage.Einspeisung_3800</field>
      </shadow>
    </value>
    <statement name="STATEMENT">
      <block type="debug" id="B1S7oi%8O+cxM6SLtU!Q">
        <field name="Severity">log</field>
        <value name="TEXT">
          <shadow type="text" id=";g|kjZWh]2RXP;a@G_uk">
            <field name="TEXT">Einspeisung wurde geändert</field>
          </shadow>
        </value>
        <next>
          <block type="controls_if" id=".t=J|`_6J8VOJ?~8|7qA">
            <mutation elseif="1"></mutation>
            <value name="IF0">
              <block type="logic_operation" id="*xiaqyx**4fSL*m^q,`o" inline="false">
                <field name="OP">AND</field>
                <value name="A">
                  <block type="logic_compare" id="Mq3mkgQTGSL9XAlw*^Oz">
                    <field name="OP">EQ</field>
                    <value name="A">
                      <block type="get_value" id="#pTy1/ou8`patf9EW/*3">
                        <field name="ATTR">val</field>
                        <field name="OID">javascript.0.PV_Anlage.Einspeisung_3800</field>
                      </block>
                    </value>
                    <value name="B">
                      <block type="logic_boolean" id="Z4G({IB7kYV(o=q)U8{t">
                        <field name="BOOL">TRUE</field>
                      </block>
                    </value>
                  </block>
                </value>
                <value name="B">
                  <block type="logic_operation" id="Id9-8}n38iefU10~6QMr" inline="false">
                    <field name="OP">AND</field>
                    <value name="A">
                      <block type="logic_compare" id="wEy4d/,l-bZNx+YdNIvd">
                        <field name="OP">EQ</field>
                        <value name="A">
                          <block type="get_value" id="pBh2S(ANz-IS27mpCuL9">
                            <field name="ATTR">val</field>
                            <field name="OID">javascript.2.Waterkotte.Daten.Temp_WW_Soll</field>
                          </block>
                        </value>
                        <value name="B">
                          <block type="math_number" id="TP6vX3vX/,dYJ+E!}Aj1">
                            <field name="NUM">45</field>
                          </block>
                        </value>
                      </block>
                    </value>
                    <value name="B">
                      <block type="logic_compare" id="SMX!U:BxiHQDGwOmwkid">
                        <field name="OP">EQ</field>
                        <value name="A">
                          <block type="get_value" id="5SG1UhY^/l#Js(TLKYMC">
                            <field name="ATTR">val</field>
                            <field name="OID">javascript.0.scriptEnabled.Waterkotte.Abfrage_Waterkotte</field>
                          </block>
                        </value>
                        <value name="B">
                          <block type="logic_boolean" id="Zbu%BV(R+_r07A^j]vxU">
                            <field name="BOOL">FALSE</field>
                          </block>
                        </value>
                      </block>
                    </value>
                  </block>
                </value>
              </block>
            </value>
            <statement name="DO0">
              <block type="debug" id="+R/OA%?:XzdKh^hPD)sY">
                <field name="Severity">log</field>
                <value name="TEXT">
                  <shadow type="text" id="/zY7KYx1kC[cVbDn5s_S">
                    <field name="TEXT">WW_Temp auf 60 Grad</field>
                  </shadow>
                </value>
                <next>
                  <block type="control" id=".U5ip()a_nO9Ll5E6G]j">
                    <mutation delay_input="false"></mutation>
                    <field name="OID">javascript.2.scriptEnabled.Waterkotte.WW_Temp_60</field>
                    <field name="WITH_DELAY">FALSE</field>
                    <value name="VALUE">
                      <block type="logic_boolean" id="9Y*u49L6eUCE?20o`@#!">
                        <field name="BOOL">TRUE</field>
                      </block>
                    </value>
                    <next>
                      <block type="control" id="lxL)IzsNK-y@gnE_e3_w">
                        <mutation delay_input="true"></mutation>
                        <field name="OID">javascript.2.scriptEnabled.Waterkotte.WW_Temp_60</field>
                        <field name="WITH_DELAY">TRUE</field>
                        <field name="DELAY_MS">2</field>
                        <field name="UNIT">sec</field>
                        <field name="CLEAR_RUNNING">FALSE</field>
                        <value name="VALUE">
                          <block type="logic_boolean" id="TH[QO~20P~4TTb95Bw;n">
                            <field name="BOOL">FALSE</field>
                          </block>
                        </value>
                        <next>
                          <block type="telegram" id="%X.W)i7u8GeMt#fiMRx;">
                            <field name="INSTANCE">.0</field>
                            <field name="LOG"></field>
                            <value name="MESSAGE">
                              <shadow type="text" id="7}fojKny.rPqem.5aqT:">
                                <field name="TEXT">Warmwasser auf 60 Grad</field>
                              </shadow>
                            </value>
                          </block>
                        </next>
                      </block>
                    </next>
                  </block>
                </next>
              </block>
            </statement>
            <value name="IF1">
              <block type="logic_operation" id="gVEJ=XAwJlH:iV;A:DBE" inline="false">
                <field name="OP">AND</field>
                <value name="A">
                  <block type="logic_compare" id="cVt(gMvq6EY?}DIetmrJ">
                    <field name="OP">EQ</field>
                    <value name="A">
                      <block type="get_value" id="xDgZNG=yLZcZc#Pq{^tD">
                        <field name="ATTR">val</field>
                        <field name="OID">javascript.0.PV_Anlage.Einspeisung_3800</field>
                      </block>
                    </value>
                    <value name="B">
                      <block type="logic_boolean" id="/2EI%RN+~.c0x@PGvrHH">
                        <field name="BOOL">FALSE</field>
                      </block>
                    </value>
                  </block>
                </value>
                <value name="B">
                  <block type="logic_operation" id=",4eHLc6AlyD}+*Dl|@|f" inline="false">
                    <field name="OP">AND</field>
                    <value name="A">
                      <block type="logic_compare" id="f?;c7E)+SLgLa-{J26)2">
                        <field name="OP">EQ</field>
                        <value name="A">
                          <block type="get_value" id="/rHPckIaJ(O/4uOp0gWQ">
                            <field name="ATTR">val</field>
                            <field name="OID">javascript.2.Waterkotte.Daten.Temp_WW_Soll</field>
                          </block>
                        </value>
                        <value name="B">
                          <block type="math_number" id="@z0UegGcE:Kd^)f(DizY">
                            <field name="NUM">60</field>
                          </block>
                        </value>
                      </block>
                    </value>
                    <value name="B">
                      <block type="logic_compare" id="xc;VK/Jb]VbTZKUl)Vz=">
                        <field name="OP">EQ</field>
                        <value name="A">
                          <block type="get_value" id="H9O)m1_/Y7V,v{asICQh">
                            <field name="ATTR">val</field>
                            <field name="OID">javascript.0.scriptEnabled.Waterkotte.Abfrage_Waterkotte</field>
                          </block>
                        </value>
                        <value name="B">
                          <block type="logic_boolean" id="lq@#3W%Oz_qU/*Ir-4D-">
                            <field name="BOOL">FALSE</field>
                          </block>
                        </value>
                      </block>
                    </value>
                  </block>
                </value>
              </block>
            </value>
            <statement name="DO1">
              <block type="debug" id="ZrP*jfWeO*s6g+kL^tkL">
                <field name="Severity">log</field>
                <value name="TEXT">
                  <shadow type="text" id="@{3v:Uo?[a5]ByUs_8=O">
                    <field name="TEXT">WW_Temp auf 45 Grad</field>
                  </shadow>
                </value>
                <next>
                  <block type="control" id="u5A[p?6K04J^,vkG1B}e">
                    <mutation delay_input="false"></mutation>
                    <field name="OID">javascript.0.scriptEnabled.Waterkotte.WW_Temp_45</field>
                    <field name="WITH_DELAY">FALSE</field>
                    <value name="VALUE">
                      <block type="logic_boolean" id="=BnP!y4via/aVR6;2|fF">
                        <field name="BOOL">TRUE</field>
                      </block>
                    </value>
                    <next>
                      <block type="control" id="nKR}PhGhwIcUCor]+9Qb">
                        <mutation delay_input="true"></mutation>
                        <field name="OID">javascript.0.scriptEnabled.Waterkotte.WW_Temp_45</field>
                        <field name="WITH_DELAY">TRUE</field>
                        <field name="DELAY_MS">2</field>
                        <field name="UNIT">sec</field>
                        <field name="CLEAR_RUNNING">FALSE</field>
                        <value name="VALUE">
                          <block type="logic_boolean" id="S2Oei^q~5RKWlV.?1!uW">
                            <field name="BOOL">FALSE</field>
                          </block>
                        </value>
                        <next>
                          <block type="telegram" id="{)gyzCn_JPH)`^~{aZy|">
                            <field name="INSTANCE">.0</field>
                            <field name="LOG"></field>
                            <value name="MESSAGE">
                              <shadow type="text" id="S[hZ_Enkhgjy|,Az%Z0`">
                                <field name="TEXT">Warmwasser auf 45 Grad</field>
                              </shadow>
                            </value>
                          </block>
                        </next>
                      </block>
                    </next>
                  </block>
                </next>
              </block>
            </statement>
          </block>
        </next>
      </block>
    </statement>
  </block>
</xml>
Manchmal funktioniert die Umschaltung relativ gut und dann kommt per Telegram plötzlich so etwas:
Warmwasser telegram.jpg
oder auch in die andere Richtung:
Spoiler: Show hidden text

Code: Alles auswählen

11:43:54.056	[info]	javascript.2 script.js.Waterkotte.WW_Temp_Umschaltung_PV_Ueberschuß: Einspeisung wurde geändert
11:43:55.174	[info]	javascript.2 script.js.Waterkotte.WW_Temp_Umschaltung_PV_Ueberschuß: Einspeisung wurde geändert
11:43:55.176	[info]	javascript.2 script.js.Waterkotte.WW_Temp_Umschaltung_PV_Ueberschuß: WW_Temp auf 45 Grad
11:43:55.505	[info]	javascript.2 script.js.Waterkotte.WW_Temp_Umschaltung_PV_Ueberschuß: Einspeisung wurde geändert
11:43:56.700	[info]	javascript.2 script.js.Waterkotte.WW_Temp_Umschaltung_PV_Ueberschuß: Einspeisung wurde geändert
11:43:56.701	[info]	javascript.2 script.js.Waterkotte.WW_Temp_Umschaltung_PV_Ueberschuß: WW_Temp auf 45 Grad
11:43:56.812	[info]	javascript.2 script.js.Waterkotte.WW_Temp_Umschaltung_PV_Ueberschuß: Einspeisung wurde geändert
11:43:57.683	[info]	javascript.2 script.js.Waterkotte.WW_Temp_Umschaltung_PV_Ueberschuß: Einspeisung wurde geändert
11:43:57.687	[info]	javascript.2 script.js.Waterkotte.WW_Temp_Umschaltung_PV_Ueberschuß: WW_Temp auf 45 Grad
11:43:57.863	[info]	javascript.2 script.js.Waterkotte.WW_Temp_Umschaltung_PV_Ueberschuß: Einspeisung wurde geändert
11:43:58.866	[info]	javascript.2 script.js.Waterkotte.WW_Temp_Umschaltung_PV_Ueberschuß: Einspeisung wurde geändert
11:43:58.866	[info]	javascript.2 script.js.Waterkotte.WW_Temp_Umschaltung_PV_Ueberschuß: WW_Temp auf 45 Grad
11:43:59.057	[info]	javascript.2 script.js.Waterkotte.WW_Temp_Umschaltung_PV_Ueberschuß: Einspeisung wurde geändert
11:44:10.501	[info]	javascript.2 script.js.Waterkotte.WW_Temp_Umschaltung_PV_Ueberschuß: Einspeisung wurde geändert
11:44:10.501	[info]	javascript.2 script.js.Waterkotte.WW_Temp_Umschaltung_PV_Ueberschuß: WW_Temp auf 45 Grad
11:44:10.660	[info]	javascript.2 script.js.Waterkotte.WW_Temp_Umschaltung_PV_Ueberschuß: Einspeisung wurde geändert
11:44:11.683	[info]	javascript.2 script.js.Waterkotte.WW_Temp_Umschaltung_PV_Ueberschuß: Einspeisung wurde geändert
11:44:11.684	[info]	javascript.2 script.js.Waterkotte.WW_Temp_Umschaltung_PV_Ueberschuß: WW_Temp auf 45 Grad
11:44:11.829	[info]	javascript.2 script.js.Waterkotte.WW_Temp_Umschaltung_PV_Ueberschuß: Einspeisung wurde geändert
11:44:12.863	[info]	javascript.2 script.js.Waterkotte.WW_Temp_Umschaltung_PV_Ueberschuß: Einspeisung wurde geändert
11:44:13.015	[info]	javascript.2 script.js.Waterkotte.WW_Temp_Umschaltung_PV_Ueberschuß: Einspeisung wurde geändert
11:44:14.042	[info]	javascript.2 script.js.Waterkotte.WW_Temp_Umschaltung_PV_Ueberschuß: Einspeisung wurde geändert
11:44:16.855	[info]	javascript.2 script.js.Waterkotte.WW_Temp_Umschaltung_PV_Ueberschuß: Einspeisung wurde geändert
11:44:17.864	[info]	javascript.2 script.js.Waterkotte.WW_Temp_Umschaltung_PV_Ueberschuß: Einspeisung wurde geändert
11:44:17.864	[info]	javascript.2 script.js.Waterkotte.WW_Temp_Umschaltung_PV_Ueberschuß: WW_Temp auf 45 Grad
11:44:18.031	[info]	javascript.2 script.js.Waterkotte.WW_Temp_Umschaltung_PV_Ueberschuß: Einspeisung wurde geändert
11:44:19.052	[info]	javascript.2 script.js.Waterkotte.WW_Temp_Umschaltung_PV_Ueberschuß: Einspeisung wurde geändert
11:44:19.053	[info]	javascript.2 script.js.Waterkotte.WW_Temp_Umschaltung_PV_Ueberschuß: WW_Temp auf 45 Grad
11:44:19.495	[info]	javascript.2 script.js.Waterkotte.WW_Temp_Umschaltung_PV_Ueberschuß: Einspeisung wurde geändert
11:44:20.504	[info]	javascript.2 script.js.Waterkotte.WW_Temp_Umschaltung_PV_Ueberschuß: Einspeisung wurde geändert
11:44:20.504	[info]	javascript.2 script.js.Waterkotte.WW_Temp_Umschaltung_PV_Ueberschuß: WW_Temp auf 45 Grad
11:44:20.735	[info]	javascript.2 script.js.Waterkotte.WW_Temp_Umschaltung_PV_Ueberschuß: Einspeisung wurde geändert
11:44:21.700	[info]	javascript.2 script.js.Waterkotte.WW_Temp_Umschaltung_PV_Ueberschuß: Einspeisung wurde geändert
11:44:21.701	[info]	javascript.2 script.js.Waterkotte.WW_Temp_Umschaltung_PV_Ueberschuß: WW_Temp auf 45 Grad
11:44:21.834	[info]	javascript.2 script.js.Waterkotte.WW_Temp_Umschaltung_PV_Ueberschuß: Einspeisung wurde geändert

Ich bin kein JS und Blockly experte und es geht bestimmt auch eleganter aber ich komme halt nicht drauf.

Wäre nett wenn mir jemand bei der Verbesserung weiterhelfen könnte.

Danke und Gruß

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

RappiRN
professional
Beiträge: 978
Registriert: 22.02.2017, 16:31
Wohnort: Rathenow

Re: Blockly: Anhebung der Warmwassertemperatur bei PV_Überschuss

Beitrag von RappiRN » 20.06.2018, 13:29

Du hast die "interne" Verzögerung im steuere-Block verwendet, nicht dass du da mehrere Verzögerungen aufrufts und die dann dieses Verhalten provozieren.
Probiere doch mal stattdessen timeout-Blöcke zu verwenden und diese dann auch an den richtigen Stellen wieder beenden.
Ich würde jetzt grob sagen, einen timeout-Block um "steuere Einspeisung unwahr" dann gleich darunter, in den Timeout ein timeout-beenden und dann noch einen timeout-beenden Block bei "steuere Einspeisung wahr".

Enrico

Benutzeravatar
wendy2702
guru
Beiträge: 3103
Registriert: 18.01.2016, 22:12
Wohnort: Herzogenrath

Re: Blockly: Anhebung der Warmwassertemperatur bei PV_Überschuss

Beitrag von wendy2702 » 21.06.2018, 12:21

Hi Enrico,

kannst du mir mal auf die Sprünge helfen wie du das meinst?

Ich habe da noch ein Verständnis Problem :oops:

Danke

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

Benutzeravatar
AlCalzone
guru
Beiträge: 2407
Registriert: 01.03.2016, 15:16

Re: Blockly: Anhebung der Warmwassertemperatur bei PV_Überschuss

Beitrag von AlCalzone » 21.06.2018, 12:50

Dein zweiter Trigger (Wirkenergie_Bezug > 500) setzt jedesmal einen State verzögert, wenn er ausgelöst wird. Eine mehrfache Änderung der Wirkenergie jenseits von 500 sorgt nun dafür, dass jeweils 30s nach dieser Änderung der State Einspeisung_3800 gesetzt wird, auch wenn dies gar nicht mehr nötig und sinnvoll ist. Du fängst das zwar eigentlich ab, aber möglicherweise verwirrt der mehrfache Timeout irgendwas.

Enricos Vorschlag sieht wie folgt aus (in Pseudocode):

Code: Alles auswählen

Wenn Wirkenergie_Bezug > 500:
    timeout1 löschen
    timeout1 erstellen mit 30s Verzögerung:
        Einspeisung_3800 auf unwahr setzen
        
Wenn Wirkenergie_Einspeisung > 3800:
    timeout1 löschen (damit die Variable nicht unnötig mit unwahr überschrieben wird)
    Einspeisung_3800 auf wahr setzen
    
Rest wie gehabt
Meine Adapter:
IKEA Trådfri: GitHub | Test & Hilfe
G-Homa: GitHub | Test & Hilfe

Benutzeravatar
wendy2702
guru
Beiträge: 3103
Registriert: 18.01.2016, 22:12
Wohnort: Herzogenrath

Re: Blockly: Anhebung der Warmwassertemperatur bei PV_Überschuss

Beitrag von wendy2702 » 21.06.2018, 13:03

OK.

Meint ihr so!?
Umschaltung_WW_neu.jpg
Bitte keine Fragen per PN, die gehören ins Forum!

RappiRN
professional
Beiträge: 978
Registriert: 22.02.2017, 16:31
Wohnort: Rathenow

Re: Blockly: Anhebung der Warmwassertemperatur bei PV_Überschuss

Beitrag von RappiRN » 21.06.2018, 13:12

So in etwa, bin mir jetzt nicht ganz sicher bei dem unteren Stop, ob so, wie du den gelegt hast, oder in den timeout rein nach dem steuere.
Auf jeden Fall sollte der timeout so immer sicher beendet werden. Probiers doch mal aus. :D

Enrico

Benutzeravatar
wendy2702
guru
Beiträge: 3103
Registriert: 18.01.2016, 22:12
Wohnort: Herzogenrath

Re: Blockly: Anhebung der Warmwassertemperatur bei PV_Überschuss

Beitrag von wendy2702 » 21.06.2018, 13:57

So hat es nicht funktioniert. Bei Bezug >500 wurde nicht wieder auf "unwahr" gewechselt.

Habe es mal so geändert:
Umschaltung_WW_neu_1.jpg
Das erste steuere nur um nach Script neustart den DP sicher auf false zu setzen.

Jetzt mal ein paar Wolken abwarten.
Bitte keine Fragen per PN, die gehören ins Forum!

RappiRN
professional
Beiträge: 978
Registriert: 22.02.2017, 16:31
Wohnort: Rathenow

Re: Blockly: Anhebung der Warmwassertemperatur bei PV_Überschuss

Beitrag von RappiRN » 21.06.2018, 14:54

Du hast bei 500 auch ein größer als drin, dann klappt das nicht. Entweder machst du da ein kleiner als rein, oder du verwendest als Hysterese einen Wert von vielleicht kleiner als 1500 dann würde das Abschalten der Erwärmung auch wieder Sinn machen.

Enrico

Benutzeravatar
wendy2702
guru
Beiträge: 3103
Registriert: 18.01.2016, 22:12
Wohnort: Herzogenrath

Re: Blockly: Anhebung der Warmwassertemperatur bei PV_Überschuss

Beitrag von wendy2702 » 21.06.2018, 16:12

Hi Enrico,

Kann es sein das du was verwechselt? Bei den >500 schaue ich ja auf den Bezug (vom Netzbetreiber) und bei den >3800 auf meine Einspeisung. Oder habe ich noch einen Gedanken Fehler.

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

RappiRN
professional
Beiträge: 978
Registriert: 22.02.2017, 16:31
Wohnort: Rathenow

Re: Blockly: Anhebung der Warmwassertemperatur bei PV_Überschuss

Beitrag von RappiRN » 21.06.2018, 19:06

Hast Recht, ich hab mich da verwirren lassen! :?

Enrico

RappiRN
professional
Beiträge: 978
Registriert: 22.02.2017, 16:31
Wohnort: Rathenow

Re: Blockly: Anhebung der Warmwassertemperatur bei PV_Überschuss

Beitrag von RappiRN » 21.06.2018, 19:11

Setz doch mal noch zwei debug-Blöcke ein. Einen in den timeout und einen einen unter falls (beim unteren Teil) um zu sehen, was bzw. ob da was passiert. Kannst du denn ausschließen, dass die Einspeisung in den 30sec timeout nicht wieder über 3800 gegangen ist? Wenn nicht, du weißt ja, debug-Blöcke wirken manchmal Wunder! :D

Enrico

Benutzeravatar
wendy2702
guru
Beiträge: 3103
Registriert: 18.01.2016, 22:12
Wohnort: Herzogenrath

Re: Blockly: Anhebung der Warmwassertemperatur bei PV_Überschuss

Beitrag von wendy2702 » 21.06.2018, 19:50

Gute Idee. Werde ich morgen machen.

Die 30sekunden sind jetzt nur zum testen. Will das eigentlich so auf 5 Minuten stellen damit das nicht hin und her schaltet.


Gesendet von iPhone mit Tapatalk Pro
Bitte keine Fragen per PN, die gehören ins Forum!

rantanplan
guru
Beiträge: 1516
Registriert: 10.08.2014, 19:15

Re: Blockly: Anhebung der Warmwassertemperatur bei PV_Überschuss

Beitrag von rantanplan » 21.06.2018, 20:35

Hallo wendy2702

In Deinem Blockly oben, hättest Du bei den Verzögerungen, eigentlich nur ein Häkchen bei "löschen falls lauft" setzen müssen.

Grüße
Rantanplan
CCU2 (2.31.25) / Host Win10/64 bit(VM) / js-controller v.1.4.2 / JS Script Engine v.3.6.4 / node v.6.12.3 / npm v.3.10.10
Scripten mit Blockly

RappiRN
professional
Beiträge: 978
Registriert: 22.02.2017, 16:31
Wohnort: Rathenow

Re: Blockly: Anhebung der Warmwassertemperatur bei PV_Überschuss

Beitrag von RappiRN » 21.06.2018, 20:38

Damit kannst du den Timer aber nicht stoppen, wenn der obere Trigger reagiert, oder sehe ich das falsch?

Enrico

Antworten