Script für gleitenden Mittelwert

Homematic-, TCL- und Shell-Script, Toolchain, C, etc.

Moderator: Co-Administratoren

MichaelN
Beiträge: 9534
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 692 Mal
Danksagung erhalten: 1604 Mal

Re: Script für gleitenden Mittelwert

Beitrag von MichaelN » 19.07.2020, 13:20

Aber wenn man doch eh CUxD am laufen hat - warum den nicht nutzen. Ich sehe eigentlich nur Vorteile bei der Lösung.
Man muss nur einmal durch die Konfiguration durchsteigen.

Aber: mal wieder sehr schöner, eleganter Code!
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 +++

dtp
Beiträge: 10655
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 320 Mal
Danksagung erhalten: 501 Mal

Re: Script für gleitenden Mittelwert

Beitrag von dtp » 20.07.2020, 07:30

MichaelN hat geschrieben:
19.07.2020, 13:20
Aber wenn man doch eh CUxD am laufen hat
Da hast du natürlich Recht, Michael. Hatte gestern nur mal Lust, ein Skript zu schreiben. ;)=
MichaelN hat geschrieben:
19.07.2020, 13:20
Aber: mal wieder sehr schöner, eleganter Code!
Danke. Allerdings ist mir aufgefallen, dass die Systemvariable mit der Werteliste so überläuft. Hab's noch mal geändert. Aber wie gesagt, ist ungetestet.
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

BoMa
Beiträge: 21
Registriert: 26.02.2022, 17:44
System: CCU

Re: Script für gleitenden Mittelwert

Beitrag von BoMa » 28.02.2022, 13:50

Hallo
ich verwende das von Belly vorgeschlagene Skript für den gleitenden Mittelwert.
Funktioniert für Helligkeit (ILLUMINATION) super
jetzt habe ich es angepasst für Wind - ich habe aber nicht herausgefunden, wie die Original Bezeichnungen für Wind heißen - mit WIND funktioniert es nicht.
Wie bekommt man das raus (Datenblatt sagt dazu nichts)
Bild7.gif
Code ist
object averageObject = dom.GetObject("Wind_avg");
real current = dom.GetObject("HmIP-RF.0017DBE99E90D3:1.WIND").Value();
real n = 5.0;
real average = (averageObject.Value() * (n - 1) / n) + (current / n);
averageObject.State(average);
WriteLine(average); ! Hier könnte eine Meldung via Messenger stehen


Kann mir jemand weiterhelfen?
Boris
CCU2, CCU3, HmIP-W, HmIP

MichaelN
Beiträge: 9534
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 692 Mal
Danksagung erhalten: 1604 Mal

Re: Script für gleitenden Mittelwert

Beitrag von MichaelN » 28.02.2022, 14:07

Das sollte in HmIP_Device_Documentation.pdf zu finden sein
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 +++

BoMa
Beiträge: 21
Registriert: 26.02.2022, 17:44
System: CCU

Re: Script für gleitenden Mittelwert

Beitrag von BoMa » 28.02.2022, 14:43

Super, danke für den Hinweis
mit

WIND_SPEED

funktioniert es

LG BOris
CCU2, CCU3, HmIP-W, HmIP

Chemieka
Beiträge: 649
Registriert: 03.01.2017, 17:39
Hat sich bedankt: 4 Mal
Danksagung erhalten: 9 Mal

Re: Script für gleitenden Mittelwert

Beitrag von Chemieka » 01.01.2023, 18:07

hanan hat geschrieben:
11.11.2016, 14:16
Hallo stephanw
Hier das Script welches ich durch die tollen Menschen in diesem Forum benutze...

Zwei Variablen anlegen:
- "AussenMittel" als "Zahl" und Masseinheit "°C"
- "AusssenTListe" als "Zeichenkette" und Masseinheit "°C"

Jetzt einmal folgender Skript unter "Skript tetsen" durchlaufen lassen, damit die Variable AussenTListe mit allen 8 Werten gefüllt wird.

Code: Alles auswählen

! Liste initialisieren
string raum = "Aussen";
integer n = 8;
string x = dom.GetObject(raum#".Sensor").DPByHssDP("TEMPERATURE").Value().ToString(1); 
string list = x;
integer i = 1;
while(i < n)
{list = list#","#x;
 i = i + 1;
}
dom.GetObject(raum#"TListe").State(list);
In einem Programm stündlich diesen Script ausführen lassen:

Code: Alles auswählen

! gleitender Mittelwert über n Werte
! Programm muß zyklisch per Zeitmodul ausgelöst werden

! Raumname ist Bestandteil des Kanalnamens (Raum.Sensor)
! und des Namens der Systemvariablen (RaumTListe)
string raum = "Aussen";

! Konstante: Anzahl Werte in der Liste
integer n = 8;

! Lokale Variablen
string  list;    ! Meßwertliste
integer len;     ! Element-Länge
real    s = 0.0; ! Summe

! Werte einlesen und verschieben
list = dom.GetObject(raum#"TListe").Value();
len = list.StrValueByIndex(",",0).Length() + 1;
list = list.Substr(len, list.Length() - len);

list = list#","#dom.GetObject(raum#".Sensor").DPByHssDP("TEMPERATURE").Value().ToString(1);
dom.GetObject(raum#"TListe").State(list);

string summand;
foreach(summand, list.Split(","))
{s = s + summand.ToFloat();
}

! Mittelwert in Systemvariable schreiben
dom.GetObject(raum#"Mittel").State(s / n);
Dieses ergibt eine durchschnittliche Temperatur der letzten 8 Stunden.

Gruess aus der Schweiz
Hallo muss hier mal nachfragen. Die beiden Systemvariablen sind angelegt:
1.jpg
Das Gerät Wetterstation habe ich im Script eingefügt. Und habe auch das Startscript einmal ausgeführt.
Würde jetzt das eigentliche Script jede Stunde einmal laufen lassen um einen Tagesdurchschnitt zu bekommen.

Code: Alles auswählen

! gleitender Mittelwert über n Werte
! Programm muß zyklisch per Zeitmodul ausgelöst werden

! Raumname ist Bestandteil des Kanalnamens (Raum.Sensor)
! und des Namens der Systemvariablen (RaumTListe)
string raum = "Aussen";

! Konstante: Anzahl Werte in der Liste
integer n = 24;

! Lokale Variablen
string  list;    ! Meßwertliste
integer len;     ! Element-Länge
real    s = 0.0; ! Summe

! Werte einlesen und verschieben
list = dom.GetObject(raum#"TListe").Value();
len = list.StrValueByIndex(",",0).Length() + 1;
list = list.Substr(len, list.Length() - len);

list = list#","#dom.GetObject(raum#".Wetterstation:3").DPByHssDP("TEMPERATURE").Value().ToString(1);
dom.GetObject(raum#"TListe").State(list);

string summand;
foreach(summand, list.Split(","))
{s = s + summand.ToFloat();
}

! Mittelwert in Systemvariable schreiben
dom.GetObject(raum#"Mittel").State(s / n);
2.jpg
Glaube aber irgendwas stimmt noch nicht. Die Variablen werden nicht richtig beschrieben
PI3+ mit RaspberryMatic; PI4 mit IOBroker; Samsung Tab A mit Mediola Visualisierung; Harmony Hub; Philips Hue; Drei IP Cams; Zwei Leseköpfe an den Stromzählern; Reedkontakt (Arduino) am Wasserzähler; Drucksensor (Arduino); CUL433 für Intertechno und Somfy RTS; Nuki Bridge

MichaelN
Beiträge: 9534
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 692 Mal
Danksagung erhalten: 1604 Mal

Re: Script für gleitenden Mittelwert

Beitrag von MichaelN » 01.01.2023, 18:24

Der Kanal der Wetterstation muss auch

Code: Alles auswählen

raum#".Wetterstation:3"
heißen. Da Du für raum

Code: Alles auswählen

string raum = "Aussen";
definiert hast also
Aussen.Wetterstation:3
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 +++


Chemieka
Beiträge: 649
Registriert: 03.01.2017, 17:39
Hat sich bedankt: 4 Mal
Danksagung erhalten: 9 Mal

Re: Script für gleitenden Mittelwert

Beitrag von Chemieka » 01.01.2023, 20:02

Nein stimmt es ist Kanal 1 und damit muss dort 001818A992BC16:1 rein.
Das Startprogramm schaut so aus:

Code: Alles auswählen

! Liste initialisieren
string raum = "Aussen";
integer n = 24;
string x = dom.GetObject(raum#".001818A992BC16:1").DPByHssDP("TEMPERATURE").Value().ToString(1); 
string list = x;
integer i = 1;
while(i < n)
{list = list#","#x;
 i = i + 1;
}
dom.GetObject(raum#"TListe").State(list);
Alles schon getestet aber die Systemvariablen ändern sich nicht. Leider.
PI3+ mit RaspberryMatic; PI4 mit IOBroker; Samsung Tab A mit Mediola Visualisierung; Harmony Hub; Philips Hue; Drei IP Cams; Zwei Leseköpfe an den Stromzählern; Reedkontakt (Arduino) am Wasserzähler; Drucksensor (Arduino); CUL433 für Intertechno und Somfy RTS; Nuki Bridge

Benutzeravatar
Henke
Beiträge: 1468
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 131 Mal
Danksagung erhalten: 300 Mal

Re: Script für gleitenden Mittelwert

Beitrag von Henke » 01.01.2023, 20:18

Chemieka hat geschrieben:
01.01.2023, 20:02
string x = dom.GetObject(raum#".001818A992BC16:1").DPByHssDP("TEMPERATURE").Value().ToString(1);
Sieht falsch aus. Trag hier mal den korrekten Wert ein. "HmIP-RF.001818A992BC16:1" ?

Antworten

Zurück zu „Softwareentwicklung für die HomeMatic CCU“