Shop-Wechsel

Der Warenkorb wird nicht übernommen.

Zum Privatkunden Shop

Software

Aktualisierung von Systemvariablen per Script

Liebe ELVforum-Community, mit dem heutigen Tag informieren wir Sie darüber, dass dieses Forum demnächst eingestellt wird. Alle weiteren Informationen zu diesem Schritt und welche Alternative wir planen, entnehmen Sie bitte dem angepinnten Forumsbeitrag.
Beiträge zu diesem Thema: 12
Für Aktionen im ELV-Technik-Netzwerk müssen Sie sich ein Profil erstellen
Aktualisierung von Systemvariablen per Script
Antwort als hilfreich markieren
0Positive Markierungen
Antwort als nicht hilfreich markieren
0Negative Markierungen
Melden Sie diesen Beitrag
19.05.2023, 07:55
Hallo zusammen,

habe vorletzte Woche einen digitalen Stromzähler erhalten und daher in der Zäherstandserfassung auf IEC Sensor umgestellt. Daten kommen auch tadellos. Probleme gibt es allerdings, wenn das Script bei Änderungen den Zählerstand sowie aktuelle Tages-/Wochenverbräuche usw. in Sytemvariablen übertragen soll. Das funktioniert komischer Weise nur, wenn ich das Script manuell in der WebUi starte. Bei automatisch ausgelöstem Script über Zähleränderung zeigt die Programmausführung den korrekten Zeitpunkt der Ausführung an, der letzte Änderungszeitpunkt der Systemvariablen ist aber Stunden her ( obwohl Status protokolliert). Löse ich dann das Script manuell aus, werden die Systemvariablen auch aktualisiert. Das kann eigentlich nicht sein, das das Ergebnis zwischen manuell und automatisch gestartetem Programm unterschiedlich ausfällt. Leider habe ich gleichzeitig auf die neueste CCU Version 3.69.7 upgedatet. Kann es sein, dass hier ein Bug drin ist? Hat jemand eine Idee, warum das nicht funktioniert?
Aw: Aktualisierung von Systemvariablen per Script
Antwort als hilfreich markieren
0Positive Markierungen
Antwort als nicht hilfreich markieren
0Negative Markierungen
Melden Sie diesen Beitrag
19.05.2023, 08:13
Nein, ein Bug sollte nicht drin sein. Jedenfalls funktioniert die Aktualisierung div. Systemvariablen per Script hier einwandfrei.

Ggf. mal dein Script zeigen

https://justpaste.it/
Christian
Aw: Aktualisierung von Systemvariablen per Script
Antwort als hilfreich markieren
0Positive Markierungen
Antwort als nicht hilfreich markieren
0Negative Markierungen
Melden Sie diesen Beitrag
19.05.2023, 08:32
Voila. Im Orginal sind die Seriennumern des Geräts hinterlegt, hier habe ich das ausgeixt.


object oP = dom.GetObject("BidCos-RF.NEQ0xxxxxx:1.IEC_POWER");
object oE = dom.GetObject("BidCos-RF.NEQ0xxxxxx:1.IEC_ENERGY_COUNTER");
var zA = dom.GetObject("Strom Zaehler");
var aA = dom.GetObject("Strom Leistung");
var vTz = dom.GetObject("Strom Zaehler Tag");
var vTg = dom.GetObject("Strom Tagesverbrauch");
var vWz = dom.GetObject("Strom Zaehler Woche");
var vWg = dom.GetObject("Strom Wochenverbrauch");
var vMz = dom.GetObject("Strom Zaehler Monat");
var vMg = dom.GetObject("Strom Monatsverbrauch");
var vJz = dom.GetObject("Strom Zaehler Jahr");
var vJg = dom.GetObject("Strom Jahresverbrauch");
zA.State(oE.State().Round(3));
aA.State(oP.State().Round(3));
vTg.State((zA.State() - vTz.State()).Round(1));
vWg.State((zA.State() - vWz.State()).Round(1));
vMg.State((zA.State() - vMz.State()).Round(1));
vJg.State((zA.State() - vJz.State()).Round(1));
Aw: Aktualisierung von Systemvariablen per Script
Antwort als hilfreich markieren
0Positive Markierungen
Antwort als nicht hilfreich markieren
0Negative Markierungen
Melden Sie diesen Beitrag
19.05.2023, 08:41
Letzter Stand Sytemvariablen am 19.05.23 um 1:24Uhr. Da wurde manuell ausgelöst. Drücke ich auf Programm starten wird der Wert aktualisiert und letzte Änderung der 6 Sytemvariablen sind aktuell. Zusätzlich wird im Sytemprotokoll auch ein Eintrag gefunden.
Aw: Aktualisierung von Systemvariablen per Script
Antwort als hilfreich markieren
0Positive Markierungen
Antwort als nicht hilfreich markieren
0Negative Markierungen
Melden Sie diesen Beitrag
19.05.2023, 09:24
Sieht jetzt nicht komplex aus...

Wie sieht die Auslösung aus (Zähleränderung)?

Warum nicht eine Zeitsteuerung, jeden Tag um 23:50?
Christian
Aw: Aktualisierung von Systemvariablen per Script
Antwort als hilfreich markieren
0Positive Markierungen
Antwort als nicht hilfreich markieren
0Negative Markierungen
Melden Sie diesen Beitrag
19.05.2023, 15:42
Das Script wird angestoßen bei 0,1 kWh Änderung des Zählerstands. Kann in der Nacht also pro Stunde liegen und bei hohem Verbrauch bei wenigen Minuten. Funktioniert aber weder tags noch nachts. Letzte Änderung aller errechneten Systemvariablen ist über 12Stunden her, damals war das Script letztmalig von Hand angestoßen. Wenn ich die Sytemvariable des Zählerstands dem Gerät zuordne, zeigt die SV inzwischen 6KWh Unterschied zum Zählerstand des Geräts an. Konsequent ist konsequent.

Kann man irgendwo erkennen, was hier nicht funktioniert? Beim manuellen Start kommt wenigstens im Systemprotokoll eine Meldung, bei automatisiertem Start wird in der Bedienung Programme das korrekte aktuelle Datum angezeigt, nur eben es werden die Variablen nicht verändert. Script wird also auch im automatischen Modus ausgeführt, aber der Variableninhalt wird nicht gesetzt. Kann man einen Abbruch eines Scriptes irgendwo erkennen?
Aw: Aktualisierung von Systemvariablen per Script
Antwort als hilfreich markieren
0Positive Markierungen
Antwort als nicht hilfreich markieren
0Negative Markierungen
Melden Sie diesen Beitrag
19.05.2023, 16:01
Ja,

/var/log/messages

stehen Fehler drin
Christian
Aw: Aktualisierung von Systemvariablen per Script
Antwort als hilfreich markieren
0Positive Markierungen
Antwort als nicht hilfreich markieren
0Negative Markierungen
Melden Sie diesen Beitrag
20.05.2023, 21:46
Ok. Fehler gefunden. Es lag an der Auslösebedingung. Stand auf "Bei Änderung auslösen". Ist für einen Zähler natürlich nonsens.
Die Bedingung war quasi immer wahr. Auf die Idee, dass Änderung nicht Änderung des Zahlenwertes sondern Änderung der Bedingung bedeutet, bin ich erstmal nicht gekommen. Was natürlich auch blöd ist, dass das Script in der Bedienung mit aktueller Uhrzeit als zuletzt ausgeführt angezeigt wird. Script wurde zwar ausgeführt, Bedingung aber falsch, ergo wurde nix gemacht. Wie man bei dieser verquerten Programmierlogik eine Auslöebedingung kreiert, die ausschließlich bei geändertem Zäherstandszahlenwert auslöst, ist mir ein Rätsel. Geht wahrscheinlich gar nicht. Intuitiv sieht anders aus...
Aw: Aktualisierung von Systemvariablen per Script
Antwort als hilfreich markieren
0Positive Markierungen
Antwort als nicht hilfreich markieren
0Negative Markierungen
Melden Sie diesen Beitrag
21.05.2023, 06:56
Deswegen die Frage

Wie sieht die Auslösung aus (Zähleränderung)?
Christian
Aw: Aktualisierung von Systemvariablen per Script
Antwort als hilfreich markieren
0Positive Markierungen
Antwort als nicht hilfreich markieren
0Negative Markierungen
Melden Sie diesen Beitrag
27.05.2023, 12:17
Der Trigger muss auf "Aktualisierung" stehen .
Aw: Aktualisierung von Systemvariablen per Script
Antwort als hilfreich markieren
0Positive Markierungen
Antwort als nicht hilfreich markieren
0Negative Markierungen
Melden Sie diesen Beitrag
27.05.2023, 12:49
Seltsam, er hatte den Fehler gefunden.

Bei "Aktualisierung" wird immer ausgelöst, egal ob der Wert sich geändert hat. Das ist in den seltensten Fällen erwünscht
Christian
Aw: Aktualisierung von Systemvariablen per Script
Antwort als hilfreich markieren
0Positive Markierungen
Antwort als nicht hilfreich markieren
0Negative Markierungen
Melden Sie diesen Beitrag
27.05.2023, 14:45
Hallo Roland,

so wie ich verstehe soll Dein script nur getriggert/angestossen werden, wenn ein entsprechender Unterschied (neu…alt) im Zählerstand erkannt wurde.

Dann probiere einmal folgendes:
  • Systemvariable von Typ Logik erstellen: - Sys-Bezeichnung: TEST (1/0)
  • Generierung dieser Systemvariablen, z.B. wenn die Erhöhung ( hier grösser +1) erfolgte
Mit dieser Systemvariablen kann man später das eigentliche Skript starten.

Für den Versuch die Systemvariable TEST auf protokollieren setzen…WebUI-Programm erstellen:


Wenn: Bedingung --- dein Zähler – bei Aktualisierung auslösen
Dann: object dp = dom.GetObject("$src$");
if (dp) {if (dp.Value() > (dp.LastValue()+1.0)){dom.GetObject("TEST").State(1);}
else
{dom.GetObject("TEST").State(0);}}

Wenn dies Deinen Vorstellungen entspricht, kann man diesen script-Teil vor Deinem script setzen…damit hat man nur einen Ablauf. Damit wird Dein script immer nur dann gestartet, wenn die Änderung zwischen zwei Einlesevorgänge grösser +1.0 ist
Viele Grüße..elkotek
Profil erstellen