Script ändern/anpassen, aber wie?

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

magnum1795
Beiträge: 268
Registriert: 13.05.2020, 17:56
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 48 Mal
Danksagung erhalten: 23 Mal

Script ändern/anpassen, aber wie?

Beitrag von magnum1795 » 01.06.2022, 17:04

Habe mir eine 4-20mA Füllstandsmessung gebaut und diese gibt zwischen 2 Volt - 10 Volt in eine SV aus. Getestet habe ich das erstmal in einen 10 L Eimer Wasser. Das klappt auch soweit ganz gut und es ändert sich die Spannung wenn ich die Sonde rausnehme. Nun möchte ich aber das Ergebnis nicht in Volt, sondern wenn möglich in % oder Liter haben.

Im I-net gestöbert und dieses Script gefunden.

Code: Alles auswählen

 ! configuration
var rangeBegin=0.0;
var rangeEnd=3927.0;
var precision=0;
var errorValue=-100.0;
var sysVarName="Fuellstand_1";

! read device data point and update system variable
var sv=dom.GetObject(ID_SYSTEM_VARIABLES).Get(sysVarName); 
var src=dom.GetObject("$src$");
if (sv && src) {
    var val=src.State();
    if (val==255) {
      sv.State(errorValue);
    } else {
      val=(((rangeEnd-rangeBegin)*val)/205.0)+rangeBegin;
      sv.State(val.Round(precision));
    }
} 
Dazu noch ein kleines Programm erstellt (siehe unten)


Auch das funktioniert soweit, die Systemvariable die zuvor neu erstellt wurde (Fuellstand_1) wird befüllt und zeigt auch was an. Allerdings stimmt der Wert so nicht. Vermutlich weil das Script für eine Spannung von 1 Volt bis 5 Volt ausgelegt ist.

Mein Brunnen ist etwa 5 Meter tief und 1 Meter im Durchmesser. Bei nun 2.29 Volt werden 44 Liter angezeigt.

Leider habe ich absolut keine Ahnung von Scripting und würde mich freuen wenn mir hier jemand weiter helfen kann. Auch wenn möglich noch in % erweitern

Vielen Dank
Dateianhänge
sv fuellstand spannung anzeige.jpg
programm fuellstand.jpg

MichaelN
Beiträge: 9681
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 700 Mal
Danksagung erhalten: 1626 Mal

Re: Script ändern/anpassen, aber wie?

Beitrag von MichaelN » 01.06.2022, 17:42

Das hat nicht viel mit Scripting zu tun. Du musst nur am Anfang die Werte anpassen.
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 +++

magnum1795
Beiträge: 268
Registriert: 13.05.2020, 17:56
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 48 Mal
Danksagung erhalten: 23 Mal

Re: Script ändern/anpassen, aber wie?

Beitrag von magnum1795 » 01.06.2022, 17:44

MichaelN hat geschrieben:
01.06.2022, 17:42
Das hat nicht viel mit Scripting zu tun. Du musst nur am Anfang die Werte anpassen.
Was genau müsste denn angepasst werden? Stehe gerade völlig auf den Schlauch. Danke

range end habe ich ja schon angepasst. Laut Mathepower (Internet) ist mein Volumen ja 3927 Liter bei ma. Voll, was aber in der Realität nie vorkommt.

Mathepower ( https://www.mathepower.com/zylinder.php) hat folgendes Ergebnis ausgespukt:
Volumen: 3927 Liter

schlichi
Beiträge: 395
Registriert: 26.08.2016, 19:26
System: Alternative CCU (auf Basis OCCU)
Wohnort: Erding
Hat sich bedankt: 61 Mal
Danksagung erhalten: 29 Mal

Re: Script ändern/anpassen, aber wie?

Beitrag von schlichi » 01.06.2022, 18:33

Hallo Magnum,

warum nicht gleich selbst die Quelle nennen, bzw. selbst suchen? Ich hab´s für dich (und ggf. weitere Mitleser) getan, und .. gefunden. Helfen kann man Dir nur, wenn Grundlagen klar sind.

Vergleiche mal das Script in diesem Beitrag mit Deinem.
Es ist dokumentiert, und daraus geht schon mal hervor, daß Deine Annahme zum Eintrag des Volumens falsch war. Das Volumen [mm³] ist am Ende nur noch die Multiplkation der Ist-Höhe [mm] mit der Bodenfläche [mm²]. Aber versuche erst mal selbst ,die Aufgabe unter Zuhilfenahme vom verlinkten Beitrag zu lösen.

... ich habe gar kein Auto :wink: ; (keine entsprechende Anlage); aber das wird. :)

Gruß
schlichi
Zuletzt geändert von schlichi am 01.06.2022, 20:07, insgesamt 1-mal geändert.
... inzwischen autodidakter, fortgeschrittener Anfänger mit bestandener Einstiegsprüfung für den Expertenmodus Teil 3 (erfahrener Anwender) :roll:

magnum1795
Beiträge: 268
Registriert: 13.05.2020, 17:56
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 48 Mal
Danksagung erhalten: 23 Mal

Re: Script ändern/anpassen, aber wie?

Beitrag von magnum1795 » 01.06.2022, 19:42

schlichi hat geschrieben:
01.06.2022, 18:33
Hallo Magnum,

warum nicht gleich selbst die Quelle nennen, bzw. selbst suchen? Ich hab´s für dich (und ggf. weitere Mitleser) getan, und .. gefunden.

Aber versuche erst mal selbst ,die Aufgabe unter Zuhilfenahme vom verlinkten Beitrag zu lösen.
Sorry, aber auf deinen verlinkten Beitrag kommt "Not Fund".
schlichi hat geschrieben:
01.06.2022, 18:33
Vergleiche mal das Script in diesem Beitrag mit Deinem.
...Aber versuche erst mal selbst ,die Aufgabe unter Zuhilfenahme vom verlinkten Beitrag zu lösen.
Die Seite kannte ich nicht und das Script ist auch nicht von dort, hatte es auf einen anderen Board gefunden. Werde aber mal versuchen mich auf deiner verlinkten Seite einzulesen.

Ich habe auch noch was anderes gefunden was eventuell zur Lösung beitragen könnte. Bin aber Softwaretechnisch eher eine Null und weiß auch nicht wie ich das umsetzen könnte.

> (V ist zwischen 2 bis 10 Volt und ist die Systemvariable "Fuellstandmessung-Brunnen-Spannung")

(V-2):0,047 ist in %
(V-2):4,7x3927 ist in L

(Brunnen 1 Meter Durchmesser und 5 Meter hoch und hat bei Voll 100% 3927 Liter)

So sähe die Liter-Berechnung inkl. Rundung auf eine Dezimalstelle aus:

{{round((2.5-0.6)/4.7*3927,1)}}

Wobei die 2.5 einen gewissen Pegelstand (Volt) simuliert und die 3927 sich auf einen 3927 Liter Brunnen bezieht. „round“ und die „,1“ runden das Ergebnis auf eine Dezimalstelle.
Die 2.5 müsste natürlich durch die SV (Fuellstandmessung-Brunnen-Spannung) ersetzt werden.

MichaelN
Beiträge: 9681
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 700 Mal
Danksagung erhalten: 1626 Mal

Re: Script ändern/anpassen, aber wie?

Beitrag von MichaelN » 01.06.2022, 20:28

Als allererstes musst du ermitteln, welcher Wert wird dir bei minimum und welcher bei maximum angezeigt (und wieviel Liter sind das jeweils). Danach ist es ein einfacher Dreisatz.
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 +++

schlichi
Beiträge: 395
Registriert: 26.08.2016, 19:26
System: Alternative CCU (auf Basis OCCU)
Wohnort: Erding
Hat sich bedankt: 61 Mal
Danksagung erhalten: 29 Mal

Re: Script ändern/anpassen, aber wie?

Beitrag von schlichi » 01.06.2022, 20:31

Hallo Magnum,

.... sorry :roll: , hab´s geändert.

Unabhängig davon, Du versuchst dich an Lösungen (script) die Du eigentlich einforderst und die auch ohne weitere Probleme für dich gelöst werden.

Da ich keinen Sensor (mit Werten) zur Verfügung habe, mußt Du entsprechende Daten liefern!
Die Wichtigsten sind die gemessenen Spannungen (V) beim Wert Höhe = 0 mm, und weil Drucksensor, am Boden der Zisterne Tiefe = 5000mm (gemessen?!).

Code: Alles auswählen

! configuration
var rangeBegin=0.0; 	! minimaler Füllstand, Boden bei 0V
var rangeEnd=5000.0; 	! maximaler Füllstand, Höhe [mm] bei 10V
var area= 785398.2; 	! Bodenfläche [mm²], 1m Durchmesser
var volume=0.0;
var sysVarName="Zisternenfüllstand";

! read device data point and update system variable
var sv=dom.GetObject(ID_SYSTEM_VARIABLES).Get(sysVarName); 
var src=dom.GetObject("$src$");
if (sv && src) {
    var val=src.Value();
    val=(((rangeEnd-rangeBegin)*val)/10.0)+rangeBegin;
    sv.State(val); ! Füllstand
	volume= ((val*area)/1000000); ! Inhalt
	
}
WriteLine(" bei n V " # val.ToString(0) # " mm");
WriteLine(" Inhalt " # volume.ToString(0) # " lr");  
SysVar-Name beachten! ohne_LR!

Den Mengeninhalt schreiben wir in eine eigene Sys-Variable ("Zisterneninhalt") (Zahl, Bereich von 0 bis 4000) Einheit = LR

Setze den Sensor ein, ändere die SysVar (Zahl, Bereich von 0 bis 5000) Einheit = mm; und führe mit "Script testen" ein paar Versuche durch. Durch Dokumentation und Veröffentlichen des Ergebnisses können wir dir weiterhelfen.

Gruß
schlichi

Michael war schneller, bestätigt aber meine Meinung.
Zuletzt geändert von schlichi am 01.06.2022, 21:04, insgesamt 1-mal geändert.
... inzwischen autodidakter, fortgeschrittener Anfänger mit bestandener Einstiegsprüfung für den Expertenmodus Teil 3 (erfahrener Anwender) :roll:

magnum1795
Beiträge: 268
Registriert: 13.05.2020, 17:56
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 48 Mal
Danksagung erhalten: 23 Mal

Re: Script ändern/anpassen, aber wie?

Beitrag von magnum1795 » 01.06.2022, 20:42

@ schlichi

vielen Dank. Werde es mal testen. Problem ist aber zur Zeit, der Füllstand im Brunnen ist jetzt knapp 1 Meter, also fast leer. Wir haben noch eine Regentonne die etwa 1,80 meter hoch ist und (zum Glück) auch gerade gefüllt ist. Ich könnte dort den Sensor mal rein tun.

Heute wird das aber nichts mehr, ich melde mich wieder wenn ich mehr rausgefunden habe. Danke

schlichi
Beiträge: 395
Registriert: 26.08.2016, 19:26
System: Alternative CCU (auf Basis OCCU)
Wohnort: Erding
Hat sich bedankt: 61 Mal
Danksagung erhalten: 29 Mal

Re: Script ändern/anpassen, aber wie?

Beitrag von schlichi » 01.06.2022, 20:53

Hallo Magnum,

... no problem, see you later. :wink:

Gruß
schlichi
... inzwischen autodidakter, fortgeschrittener Anfänger mit bestandener Einstiegsprüfung für den Expertenmodus Teil 3 (erfahrener Anwender) :roll:

Benutzeravatar
Baxxy
Beiträge: 10839
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 609 Mal
Danksagung erhalten: 2228 Mal

Re: Script ändern/anpassen, aber wie?

Beitrag von Baxxy » 02.06.2022, 00:29

Da @schlichi ein wenig mit seinem Beispielscript gepatzt hat ($src$ funktioniert nicht im Script testen) hier eine überarbeitete Version basierend darauf.

Code: Alles auswählen

! configuration
real volt_in    = 7.7;      ! theoretischer Wert in V des Sensors
real rangeBegin = 0.0; 	    ! minimaler Füllstand, Boden bei 0V
real rangeEnd   = 5000.0; 	! maximaler Füllstand, Höhe [mm] bei 10V
real area       = 785398.2; ! Bodenfläche [mm²], 1m Durchmesser

string SV_Name_Fuellstand = "Zisternenfüllstand";  !- Füllstand in mm
string SV_Name_Inhalt     = "Zisterneninhalt";     !- Volumen in l
string SV_Name_Level      = "Zisternen-Level";     !- Füllstand in %

! read device data point and update system variable
real volume; real fuellstand; string fuell_prozent;
object src = dom.GetObject("$src$");
if (src) { volt_in = src.Value(); }

    fuellstand    = (((rangeEnd - rangeBegin)*volt_in) / 10.0) + rangeBegin; !- Füllstand in mm
	volume        = ((fuellstand * area) / 1000000); !- Inhalt in Liter
    fuell_prozent = ((fuellstand * 100) / rangeEnd).ToString(0);

if (dom.GetObject(ID_SYSTEM_VARIABLES).Get(SV_Name_Fuellstand)) { dom.GetObject(ID_SYSTEM_VARIABLES).Get(SV_Name_Fuellstand).State(fuellstand); } ! Füllstand in mm in SysVar
if (dom.GetObject(ID_SYSTEM_VARIABLES).Get(SV_Name_Inhalt)) { dom.GetObject(ID_SYSTEM_VARIABLES).Get(SV_Name_Inhalt).State(volume.ToString(0)); } ! Volumen in l in SysVar
if (dom.GetObject(ID_SYSTEM_VARIABLES).Get(SV_Name_Level)) { dom.GetObject(ID_SYSTEM_VARIABLES).Get(SV_Name_Level).State(fuell_prozent); }        ! Füllstand in % in SysVar
WriteLine("Ergebnis: bei "# volt_in.ToString(1) #" V | " # fuellstand.ToString(0) # " mm | "# fuell_prozent #" % | "# volume.ToString(0) #" l" );
Hier kannst du im "Script testen" testen indem du "volt_in" (2.Zeile) anpasst.
Die WriteLine (letzte Zeile) gibt dann die berechneten Werte aus die du selbst auf Plausibilität prüfen musst.
Systemvariablen werden nur beschrieben wenn sie angelegt sind.
Im "Live-Betrieb" wird der Sensorwert als Input genommen.

Antworten

Zurück zu „HomeMatic Zentrale (CCU / CCU2 / CCU3 / Charly)“