[GELÖST] Systemvariablen werden nicht gefüllt (Zisterne+Brunnen)

Einrichtung, Nutzung und Hilfe zu RaspberryMatic (OCCU auf Raspberry Pi)

Moderatoren: jmaus, Co-Administratoren

Benutzeravatar
Black
Beiträge: 5480
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 424 Mal
Danksagung erhalten: 1074 Mal
Kontaktdaten:

Re: Systemvariablen werden nicht gefüllt (Zisterne+Brunnen)

Beitrag von Black » 24.04.2022, 16:05

wenn du das script Benutzt:

Code: Alles auswählen

! configuration
var rangeBegin=100.0; ! minimaler Füllstand bei 0V
var rangeEnd= 0.0; ! maximaler Füllstand bei 10V
var sysVarName="Füllgrad ZISTERNE";

! 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();
    val=(((rangeEnd-rangeBegin)*val)/1000.0)+rangeBegin;
    sv.State(val);
}
Aber src weist du ja so zu:

var src=dom.GetObject("BidCos-Wired.LEQ0975591:21.VALUE").Value();

Damit ist src wohl vom Tp integer oder real (je nach Datenpunkt). EIn besserer Editor hätte das auch angezeigt.

so und wenn du mit src.State() versucht, die Methode State () auf ein Int oder ein real anzuwenden knallt es, aber ein object ist es ja definitiv nicht.



black

probiers mal so

Code: Alles auswählen

! configuration
var rangeBegin=100.0; ! minimaler Füllstand bei 0V
var rangeEnd= 0.0; ! maximaler Füllstand bei 10V
var sysVarName="Füllgrad ZISTERNE";

! read device data point and update system variable
var sv=dom.GetObject(ID_SYSTEM_VARIABLES).Get(sysVarName); 
var val=dom.GetObject("BidCos-Wired.LEQ0975591:21.VALUE").Value();
if (sv) {
    val=(((rangeEnd-rangeBegin)*val)/1000.0)+rangeBegin;
    sv.State(val);
}
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

Benutzeravatar
NilsG
Beiträge: 1702
Registriert: 09.08.2013, 23:44
System: CCU
Hat sich bedankt: 385 Mal
Danksagung erhalten: 30 Mal
Kontaktdaten:

Re: Systemvariablen werden nicht gefüllt (Zisterne+Brunnen)

Beitrag von NilsG » 24.04.2022, 16:13

Hi Black!

Ich habe das jetzt 10x gelesen :(
Checke es aber nicht!

Wenn ich das richtig lese, übergebe ich "src" den Ist-Wert hier bereits:

Code: Alles auswählen

var src=dom.GetObject("BidCos-Wired.LEQ0975591:21.VALUE").Value();
Und hier versucht das Script das nochma in einer nicht mehr passenden Art&Weise?!

Code: Alles auswählen

var val=src.State();
Grüße und DANKE! 🍻

Nils

-----------------------------------------
CCU3 + 2x LAN-Gateway

Benutzeravatar
NilsG
Beiträge: 1702
Registriert: 09.08.2013, 23:44
System: CCU
Hat sich bedankt: 385 Mal
Danksagung erhalten: 30 Mal
Kontaktdaten:

Re: Systemvariablen werden nicht gefüllt (Zisterne+Brunnen)

Beitrag von NilsG » 24.04.2022, 16:16

Black hat geschrieben:
24.04.2022, 16:05

probiers mal so

Code: Alles auswählen

! configuration
var rangeBegin=100.0; ! minimaler Füllstand bei 0V
var rangeEnd= 0.0; ! maximaler Füllstand bei 10V
var sysVarName="Füllgrad ZISTERNE";

! read device data point and update system variable
var sv=dom.GetObject(ID_SYSTEM_VARIABLES).Get(sysVarName); 
var val=dom.GetObject("BidCos-Wired.LEQ0975591:21.VALUE").Value();
if (sv) {
    val=(((rangeEnd-rangeBegin)*val)/1000.0)+rangeBegin;
    sv.State(val);
}
BINGO!

Dankeschön :D
Grüße und DANKE! 🍻

Nils

-----------------------------------------
CCU3 + 2x LAN-Gateway

Benutzeravatar
jmaus
Beiträge: 9862
Registriert: 17.02.2015, 14:45
System: Alternative CCU (auf Basis OCCU)
Wohnort: Dresden
Hat sich bedankt: 464 Mal
Danksagung erhalten: 1880 Mal
Kontaktdaten:

Re: Systemvariablen werden nicht gefüllt (Zisterne+Brunnen)

Beitrag von jmaus » 24.04.2022, 16:28

NilsG hat geschrieben:
24.04.2022, 16:13
Ich habe das jetzt 10x gelesen :(
Checke es aber nicht!

[…]

Code: Alles auswählen

var src=dom.GetObject("BidCos-Wired.LEQ0975591:21.VALUE").Value();
Nur damit du es auch wirklich "checkst" was du hier falsch gemacht hast: Du hast hinten dran ja ein Value() und damit ist das Ergebnis das in "var src" landet wie Black versucht hat dir zu erklären kein Objekt mehr auf das du dann im folgenden ein State() anwenden kannst, sondern eben ein reiner Integer, d.h. Ein Einfacher Zahlenwert für den es eben logischerweise keine State() Methode gibt die man aufrufen kann, denn für Methodenaufrufe braucht es immer ein Objekt in der jeweiligen Variable (hier eben 'src').

Hoffe nun ist es abschließend auch klarer für dich was du falsch gemacht hast und wie du solche Skriptentwicklung in Zukunft besser angehen kannst.
RaspberryMatic 3.75.7.20240420 @ ProxmoxVE – ~200 Hm-RF/HmIP-RF/HmIPW Geräte + ioBroker + HomeAssistant – GitHub / Sponsors / PayPal / ☕️

Benutzeravatar
NilsG
Beiträge: 1702
Registriert: 09.08.2013, 23:44
System: CCU
Hat sich bedankt: 385 Mal
Danksagung erhalten: 30 Mal
Kontaktdaten:

Re: Systemvariablen werden nicht gefüllt (Zisterne+Brunnen)

Beitrag von NilsG » 24.04.2022, 16:51

NilsG hat geschrieben:
24.04.2022, 16:16
Black hat geschrieben:
24.04.2022, 16:05

probiers mal so

Code: Alles auswählen

! configuration
var rangeBegin=100.0; ! minimaler Füllstand bei 0V
var rangeEnd= 0.0; ! maximaler Füllstand bei 10V
var sysVarName="Füllgrad ZISTERNE";

! read device data point and update system variable
var sv=dom.GetObject(ID_SYSTEM_VARIABLES).Get(sysVarName); 
var val=dom.GetObject("BidCos-Wired.LEQ0975591:21.VALUE").Value();
if (sv) {
    val=(((rangeEnd-rangeBegin)*val)/1000.0)+rangeBegin;
    sv.State(val);
}
BINGO!

Dankeschön :D

Kurze Ergänzung:

So muss der Part mit der Formel lauten, damit die wieder passt.

Code: Alles auswählen

if (sv && src) {
    var val=src;
    val=(((rangeEnd-rangeBegin)*val)/1000.0)+rangeBegin;
    sv.State(val);
}

Also der Teil

Code: Alles auswählen

var val=src;
muss zwingend rein!
Grüße und DANKE! 🍻

Nils

-----------------------------------------
CCU3 + 2x LAN-Gateway

Antworten

Zurück zu „RaspberryMatic“