Einschaltzeit bei "Stromstoß" messen

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

Moderator: Co-Administratoren

MichaelN
Beiträge: 9650
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 » 03.07.2022, 12:13

Du sollst ja nicht die Länge des Stromstoß messen, sondern die Zeitspanne dazwischen.
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 » 03.07.2022, 13:56

GEVJan hat geschrieben:
03.07.2022, 11:28
Das wurde doch jetzt schon mehrfach gesagt! Systemvariable, Zeitstempel, Script -> Auswertung
Könnt ihr mir denn bei so einem Skript helfen?
Ich bin nicht der Programmier-Guru 🙈

DANKE!!!

Benutzeravatar
GEVJan
Beiträge: 101
Registriert: 28.04.2021, 18:40
System: CCU und Access Point
Wohnort: Köln
Hat sich bedankt: 30 Mal
Danksagung erhalten: 16 Mal

Re: Einschaltzeit bei "Stromstoß" messen

Beitrag von GEVJan » 03.07.2022, 15:56

Such mal nach der Script-Dokumentation und lies sie aufmerksam.
Dann könntest du z. B. aus Alchys Auslösescript den Teil mit dem Zeitstempel "rausklauen" und dir danach den Rest selber zudammen bauen.
Wird ne Zeit dauern, aber danach bist du schlauer und es fühlt sich einfach mega an das selber geschafft zu haben! :wink:

Gruß Jan
CCU3 mit Raspberrymatic -> Eingebunden: HUE-Bridge, Tasmota-Sonoffs, Alexa, Open Weather Map, Tasker, LG-TV

MichaelN
Beiträge: 9650
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 » 03.07.2022, 16:16

Das Betriebsstunden Zähler Skript sollte sich noch viel leichter anpassen lassen.

Aber dafür bräuchte man mehr input.Welches Skript wird derzeit verwendet, welche Kanäle werden angesteuert, ggf ein einfacher Programm Ablauf Plan.
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 » 04.07.2022, 12:43

Derzeit mache ich das über ein CUXD-Wrapper-Device.
Geraet_CUX.jpg
Der Zähler läuft, sobald das HmIP-MOD-OC8 (also die Seriennummer dessen) auf Kanal 13 eingeschaltet wird.
Geraet_CUX2.jpg
Auslesen kann ich die Betriebszeit dann im CUXD-Wrapper-Device über "Time_ON_Sum"

Der läuft aber eben nur, solange der Ch.13 auch "an" ist.
Geraet_CUX_Daten.jpg
Derzeit also fast ohne Skript - bis auf das Auslesen selbst.

Mein Gedankengang war jetzt folgender (um wenig ändern zu müssen):
Ich lege auf der CCU 4 virtuelle Schalter an (N1, N2, N3, Stop) und schalte die jeweils per Programm ein, wenn ich einen Stromstoß beim OC8 auslöse.
Das OC8 trennt dann wieder, der virtuelle Schalter bleibt geschlossen.
Im CUXD-Wrapper-Device ändere ich nur die zu überwachende Seriennummer auf die des virtuellen Schalters (und ggf. dessen Kanal).
Ich konnte aber auf der CCU bis jetzt nur virtuelle Taster (keine Schalter) anlegen und habe auch noch nicht herausgefunden, ob dass das Wrapper-Device dann loggen würde > das müsste ich probieren.

Benutzeravatar
uwe111
Beiträge: 4819
Registriert: 26.02.2011, 22:22
Hat sich bedankt: 3 Mal
Danksagung erhalten: 245 Mal
Kontaktdaten:

Re: Einschaltzeit bei "Stromstoß" messen

Beitrag von uwe111 » 04.07.2022, 15:19

7thguest hat geschrieben:
04.07.2022, 12:43
Mein Gedankengang war jetzt folgender (um wenig ändern zu müssen):
Ich lege auf der CCU 4 virtuelle Schalter an (N1, N2, N3, Stop) und schalte die jeweils per Programm ein, wenn ich einen Stromstoß beim OC8 auslöse.
Das OC8 trennt dann wieder, der virtuelle Schalter bleibt geschlossen.
Im CUXD-Wrapper-Device ändere ich nur die zu überwachende Seriennummer auf die des virtuellen Schalters (und ggf. dessen Kanal).
Das ist viel zu kompliziert gedacht.
Du könntest einfach 4 CUxD (90) State-Monitor Wrapper anlegen und den Status direkt über den Datenpunkt SET_STATE aus Deinem Script heraus setzen.
Dazu muss in den Geräteeinstellungen USE_HMDATAPT [ ] deaktiviert sein.

Viele Grüße

Uwe
Alle sagten: Das geht nicht. Dann kam einer, der wußte das nicht und hat's einfach gemacht.
SPENDEN :wink: Download: CUxD 2.11, SSH KeyDir

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 » 04.07.2022, 15:25

uwe111 hat geschrieben:
04.07.2022, 15:19
Das ist viel zu kompliziert gedacht.
Du könntest einfach 4 CUxD (90) State-Monitor Wrapper anlegen und den Status direkt über den Datenpunkt SET_STATE aus Deinem Script heraus setzen.
Dazu muss in den Geräteeinstellungen USE_HMDATAPT [ ] deaktiviert sein.
Das klingt gut - werde ich zu Hause sofort probieren.
Blöd, wenn man in dem Ganzen nicht so tief drin steckt und trotzdem (für mich schon) komplizierte Sachen machen will.

Danke schonmal…

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 » 04.07.2022, 17:38

@uwe111: Supereinfacher Betriebsstundenzähler, funktioniert prima. Danke, und danke für Dein tolles Addon. Ich sollte wirklich mal bei Gelegenheit (Zeit vorausgesetzt) die Doku von CUxD lesen. Das würde das (Programmier-)Leben erleichtern. :wink:
______________________________________________________
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 » 05.07.2022, 14:37

Hallo nochmal...

ich habe jetzt mit der Firma Speck telefoniert. Der Pumpe ist es also völlig egal, ob der Kontakt zur Drehzahlanwahl geschlossen bleibt oder nach dem Schließen wieder geöffnet wird. Wichtig ist einzig und allein, dass zur gleichen Zeit immer nur ein einziger Kontakt geschlossen sein darf.
Das erleichtert die Sache bezüglich des Betriebsstundenzählers ungemein.
Damit kann ich es handhaben wie bisher - 4 Wrapper-Devices und jedes tracked die Einschaltzeit eines Kanals vom HmIP-MOD-OC8. Problem gelöst.

Nun zu der Ansteuerung der Drehzahlen.

Ich habe ein Skript geschrieben, in dem ich den zur Verfügung stehenden Überschuss an Strom - abhängig von der derzeitigen Drehzahl der Pumpe - berechne und in 4 Systemvariablen schreibe. Das funktioniert auch soweit...

Code: Alles auswählen

! Verbrauch der Pumpe in den jeweiligen Drehzahlstufen
var p_n1 = 300; ! 300 Watt bei 1850rpm - 6 Kubik
var p_n2 = 550; ! 550 Watt bei 2400rpm - 8 Kubik
var p_n3 = 875; ! 875 Watt bei 2830rpm - 10 Kubik

! Variablen festlegen
var ueberschuss_gerechnet_N1;
var ueberschuss_gerechnet_N2;
var ueberschuss_gerechnet_N3;
var ueberschuss_gerechnet_Stop;

! Gemittelten Wert des SL-Überschuss auslesen

var ueberschuss_gemittelt;
ueberschuss_gemittelt = dom.GetObject("CUxD.CUX9000001:1.MEAN").State();
WriteLine("Überschuss gemittelt aktuell: " + ueberschuss_gemittelt);

! Status der Pumpe auslesen
var status_pumpe;
status_pumpe = dom.GetObject("Poolpumpe Stufe").State();
WriteLine("Status der Poolpumpe: " + status_pumpe);

if (status_pumpe == 0) {ueberschuss_gerechnet_N1 = ueberschuss_gemittelt - p_n1;
                        ueberschuss_gerechnet_N2 = ueberschuss_gemittelt - p_n2;
                        ueberschuss_gerechnet_N3 = ueberschuss_gemittelt - p_n3;
                        ueberschuss_gerechnet_Stop = ueberschuss_gemittelt;
                        WriteLine("Pumpe ist aus, gerechneter Überschuss bei N1: " + ueberschuss_gerechnet_N1);
                        WriteLine("Pumpe ist aus, gerechneter Überschuss bei N2: " + ueberschuss_gerechnet_N2);
                        WriteLine("Pumpe ist aus, gerechneter Überschuss bei N3: " + ueberschuss_gerechnet_N3);
                        WriteLine("Pumpe ist aus, gerechneter Überschuss bei Stop: " + ueberschuss_gerechnet_Stop);
                        dom.GetObject("Poolpumpe_Üb_N1").State(ueberschuss_gerechnet_N1);
                        dom.GetObject("Poolpumpe_Üb_N2").State(ueberschuss_gerechnet_N2);
                        dom.GetObject("Poolpumpe_Üb_N3").State(ueberschuss_gerechnet_N3);
                        dom.GetObject("Poolpumpe_Üb_Stop").State(ueberschuss_gerechnet_Stop);
                       };

if (status_pumpe == 1) {ueberschuss_gerechnet_N1 = ueberschuss_gemittelt;
                        ueberschuss_gerechnet_N2 = ueberschuss_gemittelt + p_n1 - p_n2;
                        ueberschuss_gerechnet_N3 = ueberschuss_gemittelt + p_n1 - p_n3;
                        ueberschuss_gerechnet_Stop = ueberschuss_gemittelt + p_n1;
                        WriteLine("Pumpe ist auf N1, gerechneter Überschuss bei N1: " + ueberschuss_gerechnet_N1);
                        WriteLine("Pumpe ist auf N1, gerechneter Überschuss bei N2: " + ueberschuss_gerechnet_N2);
                        WriteLine("Pumpe ist auf N1, gerechneter Überschuss bei N3: " + ueberschuss_gerechnet_N3);
                        WriteLine("Pumpe ist auf N1, gerechneter Überschuss bei Stop: " + ueberschuss_gerechnet_Stop);
                        dom.GetObject("Poolpumpe_Üb_N1").State(ueberschuss_gerechnet_N1);
                        dom.GetObject("Poolpumpe_Üb_N2").State(ueberschuss_gerechnet_N2);
                        dom.GetObject("Poolpumpe_Üb_N3").State(ueberschuss_gerechnet_N3);
                        dom.GetObject("Poolpumpe_Üb_Stop").State(ueberschuss_gerechnet_Stop);
                       };

if (status_pumpe == 2) {ueberschuss_gerechnet_N1 = ueberschuss_gemittelt + p_n2 - p_n1;
                        ueberschuss_gerechnet_N2 = ueberschuss_gemittelt + p_n2 - p_n2;
                        ueberschuss_gerechnet_N3 = ueberschuss_gemittelt + p_n2 - p_n3;
                        ueberschuss_gerechnet_Stop = ueberschuss_gemittelt + p_n2;
                        WriteLine("Pumpe ist auf N2, gerechneter Überschuss bei N1: " + ueberschuss_gerechnet_N1);
                        WriteLine("Pumpe ist auf N2, gerechneter Überschuss bei N2: " + ueberschuss_gerechnet_N2);
                        WriteLine("Pumpe ist auf N2, gerechneter Überschuss bei N3: " + ueberschuss_gerechnet_N3);
                        WriteLine("Pumpe ist auf N2, gerechneter Überschuss bei Stop: " + ueberschuss_gerechnet_Stop);
                        dom.GetObject("Poolpumpe_Üb_N1").State(ueberschuss_gerechnet_N1);
                        dom.GetObject("Poolpumpe_Üb_N2").State(ueberschuss_gerechnet_N2);
                        dom.GetObject("Poolpumpe_Üb_N3").State(ueberschuss_gerechnet_N3);
                        dom.GetObject("Poolpumpe_Üb_Stop").State(ueberschuss_gerechnet_Stop);
                       };

if (status_pumpe == 3) {ueberschuss_gerechnet_N1 = ueberschuss_gemittelt + p_n3 - p_n1;
                        ueberschuss_gerechnet_N2 = ueberschuss_gemittelt + p_n3 - p_n2;
                        ueberschuss_gerechnet_N3 = ueberschuss_gemittelt + p_n3 - p_n3;
                        ueberschuss_gerechnet_Stop = ueberschuss_gemittelt + p_n3;
                        WriteLine("Pumpe ist auf N3, gerechneter Überschuss bei N1: " + ueberschuss_gerechnet_N1);
                        WriteLine("Pumpe ist auf N3, gerechneter Überschuss bei N2: " + ueberschuss_gerechnet_N2);
                        WriteLine("Pumpe ist auf N3, gerechneter Überschuss bei N3: " + ueberschuss_gerechnet_N3);
                        WriteLine("Pumpe ist auf N3, gerechneter Überschuss bei Stop: " + ueberschuss_gerechnet_Stop);
                        dom.GetObject("Poolpumpe_Üb_N1").State(ueberschuss_gerechnet_N1);
                        dom.GetObject("Poolpumpe_Üb_N2").State(ueberschuss_gerechnet_N2);
                        dom.GetObject("Poolpumpe_Üb_N3").State(ueberschuss_gerechnet_N3);
                        dom.GetObject("Poolpumpe_Üb_Stop").State(ueberschuss_gerechnet_Stop);
                       };


! Ende
Nun will ich anhand dieser Werte in der GUI Programme erstellen, die darauf basierend dann die jeweilige Drehzahl der Pumpe schalten.
Das Programm für das Einschalten der Pumpe aus "Stop" heraus, würde so aussehen.
Poolpumpe_an_bei_Stop.pdf
(104.31 KiB) 16-mal heruntergeladen
Passt das denn mit der "Logik" der Bedingungen?
wenn der Überschuss für N1>50 Watt aber kleiner als 50 Watt für N2 und kleiner 50 Watt für N3 ist, dann N1
wenn der Überschuss für N2>50 Watt aber kleiner 50 Watt für N3 ist, dann N2
wenn der Überschuss für N3>50 Watt ist, dann N3

Bei den letzten beiden Bedingungen prüfe ich natürlich dann die jeweils kleinere(n) Drehzahl(en) nicht mehr - das ergibt sich ja.

Passt das denn soweit?

Dann würde ich jetzt die anderen 3 Programme für das Umschalten der Drehzahlen aus N1, N2 und N3 heraus im selben Schema erstellen.

VIELEN DANK mal wieder!!!

PS: Ich denke mal (weiß es nicht), dass das Ganze mit der Anwahl der Drehzahlen sicher auch einfacher und ggf. resourcenschonender zu lösen ist. Nur leider mangelt es mir da an entsprechenden Kenntnissen. :(

Hier das Programm als Bild(er)
0001.jpg
Teil 1
0002.jpg
Teil 2
Zuletzt geändert von 7thguest am 05.07.2022, 15:51, insgesamt 1-mal geändert.

MichaelN
Beiträge: 9650
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, 15:29

Bitte Programme als Screenshot direkt in den Beitrag laden. Das erhöht die Wahrscheinlichkeit massiv, dass die sich auch jemand anguckt.
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 +++

Antworten

Zurück zu „CUxD“