Einschaltzeit bei "Stromstoß" messen

Anbindung von FS20-Komponenten, ELV-Wetterstationen, EnOcean und DMX an HomeMatic

Moderator: Co-Administratoren

Benutzeravatar
HM-Villa
Beiträge: 507
Registriert: 24.01.2022, 10:13
System: CCU
Hat sich bedankt: 29 Mal
Danksagung erhalten: 119 Mal

Re: Einschaltzeit bei "Stromstoß" messen

Beitrag von HM-Villa » 05.07.2022, 21:49

Das ist ganz einfach: stufen_p ist ein Listenfeld, in dem die Leistungen der einzelnen Pumpenstufen definiert sind. Mit der while-Schleife wird das daraufhin "abgeklappert", dass wenigstens noch 50 W (Variable p_ueber) übrig sind, wenn man von der Überschussleistung die Pumpenleistung der jeweiligen Stufe subtrahiert. Wenn die Schleifenbedingung nicht mehr erfüllt wird, war der vorherige Durchlauf der mit der max. Stufe für 50 W Rest.
______________________________________________________
950 Kanäle in 201 Geräten und 39 CUxD-Kanäle in 5 CUxD-Geräten

MichaelN
Beiträge: 9649
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 697 Mal
Danksagung erhalten: 1617 Mal

Re: Einschaltzeit bei "Stromstoß" messen

Beitrag von MichaelN » 05.07.2022, 21:50

HM-Villa hat geschrieben:
05.07.2022, 21:23
@MichaelN: Ja, das ist auch ein Ansatz. Ich funke halt nicht gern, das hat bei meiner relativ großen Installation Priorität. Deshalb ist das Schalten vom Script aus besser, weil das weiß (wissen kann), welche Stufe vorher eingeschaltet war und ich nur diese zum Ausschalten anfunken müsste, nicht alle.
Guter Einwand. Kann man natürlich auch alles im Skript abbilden.
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

7thguest
Beiträge: 83
Registriert: 06.02.2015, 21:32
System: CCU
Wohnort: Niedersachsen
Hat sich bedankt: 5 Mal

Re: Einschaltzeit bei "Stromstoß" messen

Beitrag von 7thguest » 05.07.2022, 21:55

Also auch wenn es klingt, als ob ich jetzt sagen will "Baut mir mal was!"...
Genau das wollte ich nicht.
Aber ich kann euch bei einigen Dingen nur schwer und langsam folgen und beim "Skripten" bin ich zu 99% raus.

Das, was ich da stehen habe, ist fast alles aus dem Netz und dem Forum zusammengesucht und dann try-and-error.
Deshalb auch die vielen "WriteLine()" - ich muss sehen, was passiert, wenn ich das mache...

Und bei Schleifen, Listen usw. bin ich raus :-(

Benutzeravatar
HM-Villa
Beiträge: 507
Registriert: 24.01.2022, 10:13
System: CCU
Hat sich bedankt: 29 Mal
Danksagung erhalten: 119 Mal

Re: Einschaltzeit bei "Stromstoß" messen

Beitrag von HM-Villa » 05.07.2022, 22:23

Man kann das aber lernen! Du bist in der glücklichen Lage, dass Du ein konkretes eigenes kleines Beispiel hast und über das Forum hier verfügst, wo man alles nachlesen und (nahezu) alles fragen kann. Allerdings reicht es nicht, sich nur die Scripte heraus zu picken und die dann irgendwie zu verwursten - meist gibt es hier eine ganze Menge Text ringsherum. Den zu lesen, auch wenn es aufwendig ist, bringt meist noch eine ganze Menge Erkenntnisgewinn. Trau Dich einfach.

Übrigens: Die while-Schleife ist eine sog. abweisende Schleife, d. h. die Bedingung wird am Anfang geprüft. Wenn die nicht erfüllt ist, wird die Schleife garnicht erst durchlaufen. Deshalb muss auch vor der Schleife schon das erste Listenelement ausgelesen werden. Solche Schleifen nimmt man, wenn man nicht genau weiß, wieviele Durchläufe erforderlich sind, bis man das Ergebnis hat. Hier hängt es ja davon ab, wie hoch die Überschussleistung ist, welche Stufe letztlich ausgewählt wird.

Na dann gutes Nächtle!
______________________________________________________
950 Kanäle in 201 Geräten und 39 CUxD-Kanäle in 5 CUxD-Geräten

7thguest
Beiträge: 83
Registriert: 06.02.2015, 21:32
System: CCU
Wohnort: Niedersachsen
Hat sich bedankt: 5 Mal

Re: Einschaltzeit bei "Stromstoß" messen

Beitrag von 7thguest » 06.07.2022, 10:29

Hallo HM-Villa,

ich habe mir dein Skript noch einmal angesehen...

Soweit ich das verstehe, funktioniert das aber nur, solange die Pumpe aus ist.

Wenn die Pumpe läuft, dann ist der derzeitige Verbrauch der Pumpe ja bereits in dem "MEAN" mit drin. (MEAN ist das, was nach dem Abzug ALLER derzeitigen Verbräuche - also auch inkl. laufender Pumpe - bei mir im Haus noch frei verfügbar ist.)
Soll heißen, dass wenn sie von Stufe 2 auf Stufe 3 schaltet, nur ein Mehrverbrauch von 325 Watt entsteht (Delta zwischen 550 und 875).
Andersrum beim Runterschalten dann auch von Stufe 2 auf Stufe 1 ist ein Delta von 250 Watt.

Gruß und n netten Tag euch allen!!!

Benutzeravatar
HM-Villa
Beiträge: 507
Registriert: 24.01.2022, 10:13
System: CCU
Hat sich bedankt: 29 Mal
Danksagung erhalten: 119 Mal

Re: Einschaltzeit bei "Stromstoß" messen

Beitrag von HM-Villa » 06.07.2022, 12:40

Ja, Du hast natürlich recht. Bestimmt gibt es dafür auch eine elegante Lösung. Ich schaue mal...

Code: Alles auswählen

string stufen_p = "0,300,550,875";   ! Leistungen der einzelnen Pumpenstufen
integer i = 0;                       ! Zählvariable für Schleife
integer stufe_akt;                   ! Pumpenstufe aktuell
integer stufe_neu = 0;               ! Pumpenstufe neu
integer p_ueber = 50;                ! (verbleibende) Überschussleistung
var p_akt;                           ! Leistung Pumpe aktuell
var p;                               ! Leistung der Pumpenstufe
var ue_mess = dom.GetObject("CUxD.CUX9000001:1.MEAN").Value();  ! gemessene Überschussleistung (Deine var ueberschuss_gemittelt)

stufe_akt = dom.GetObject(ID_SYSTEM_VARIABLES).Get("Poolpumpe Stufe").Value().ToInteger();
p_akt = stufen_p.StrValueByIndex(",", stufe_akt).ToFloat();

! erstes Listenelement für Schleife auslesen
p = stufen_p.StrValueByIndex(",", i).ToFloat();

while (((ue_mess + p_akt - p) >= p_ueber) && (i <= 3))
   {
   stufe_neu = i;
   i = i + 1;
   p = stufen_p.StrValueByIndex(",", i).ToFloat();
   }

WriteLine("Stufe aktuell: "#stufe_akt#"\tStufe neu: "#stufe_neu);

! geänderte Schaltstufe in SV schreiben
if (stufe_neu <> stufe_akt) { dom.GetObject(ID_SYSTEM_VARIABLES).Get("Poolpumpe Stufe").State(stufe_neu); }
So sollte es funktionieren, ist allerdings mangels CCU ungetestet. In der Bedingung der While-Schleife wird jetzt die Leistung der aktuellen Pumpenstufe hinzugerechnet. Die Formel kennst Du aus Deinem Script. :wink: Natürlich muss vorher die aktuelle Stufe ermittelt werden und die zugehörige Leistung gesucht werden (Zeilen 10 und 11). Die letzte Zeile ist auch etwas anders, aber sicher selbsterklärend.
Zuletzt geändert von HM-Villa am 06.07.2022, 19:16, insgesamt 22-mal geändert.
______________________________________________________
950 Kanäle in 201 Geräten und 39 CUxD-Kanäle in 5 CUxD-Geräten

MichaelN
Beiträge: 9649
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 697 Mal
Danksagung erhalten: 1617 Mal

Re: Einschaltzeit bei "Stromstoß" messen

Beitrag von MichaelN » 06.07.2022, 13:36

Du musst halt prüfen welche Stufe gerade aktiv ist und den Wert dann wieder aufaddieren.
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

7thguest
Beiträge: 83
Registriert: 06.02.2015, 21:32
System: CCU
Wohnort: Niedersachsen
Hat sich bedankt: 5 Mal

Re: Einschaltzeit bei "Stromstoß" messen

Beitrag von 7thguest » 06.07.2022, 19:03

Müsste es in der 10. Zeile dann nicht

p_akt = stufen_p.StrValueByIndex(",", stufe_akt).ToFloat();

sein?

Deswegen war mein "Skript" hier etwas länger - ich habe auch versucht, das aktuelle Laufen der Pumpe zu berücksichtigen:
viewtopic.php?p=724078#p724078

Benutzeravatar
HM-Villa
Beiträge: 507
Registriert: 24.01.2022, 10:13
System: CCU
Hat sich bedankt: 29 Mal
Danksagung erhalten: 119 Mal

Re: Einschaltzeit bei "Stromstoß" messen

Beitrag von HM-Villa » 06.07.2022, 19:14

Ja, richtig. Das kommt davon, wenn man 1.) Variablen umbenennt und 2.) nicht testen kann. Du brauchst also Dein Licht nicht unter den Scheffel zu stellen - scheint ja langsam Spaß zu machen. :) Hab's oben korrigiert.
Zuletzt geändert von HM-Villa am 06.07.2022, 19:17, insgesamt 1-mal geändert.
______________________________________________________
950 Kanäle in 201 Geräten und 39 CUxD-Kanäle in 5 CUxD-Geräten

7thguest
Beiträge: 83
Registriert: 06.02.2015, 21:32
System: CCU
Wohnort: Niedersachsen
Hat sich bedankt: 5 Mal

Re: Einschaltzeit bei "Stromstoß" messen

Beitrag von 7thguest » 06.07.2022, 19:16

HM-Villa hat geschrieben:
06.07.2022, 19:14
Ja, richtig. Das kommt davon, wenn man 1.) Variablen umbenennt und 2.) nicht testen kann. Du brauchst also Dein Licht nicht unter den Scheffel zu stellen. :) Hab's oben korrigiert.
Also nicht, dass ich das jetzt zu 100% nachvollziehen kann (geschweige denn selbst ausdenken)...
Ich konnte nur keine Variable "stufe" finden.

Antworten

Zurück zu „CUxD“