Leveljet Seriell angebunden, update Intervall ändern ?

Hallo,

ich habe seit kurzem einen Seriell angeschlossenen Leveljet zur Überwachung einer Zisterne.

Wenn diese einen bestimmten Füllstand unterschreitet wird per KNX Aktor eine Pumpe zum nachfüllen gestartet und diese
wird beim Überschreiten eines Wertes wieder abgeschaltet.

Grenzwerte sind: Pumpe an bei Unterschreiten von 3000l / Pumpe aus beim Überschreiten von 7000l

Ansich funktioniert das auch, nur abschalten tut die Pumpe meist erst wenn in Wirklichkeit schon 9000l in der Zisterne sind.

Grund dafür ist das die Variable mit dem Füllstand der Leveljet Instanz nicht oft genug aktualisiert wird.

Im Debug sehe ich das quasi sekündlich Daten vom Leveljet gesendet werden, ein neuer Füllstand wir in der Instanz aber erst nach geschätzt etwa 30 Minuten angezeigt.

Da das Füllen der Zisterne nur etwa 40 Minuten dauert gibt es dann den ordentlichen überschwinger.

Kann ich das Updateintervall der Instanz irgendwie ändern? Oder habt ihr sonst einen Tip für mich?

Danke, Gruß Martin

Hallo Martin,

Ich kann das nicht nachvollziehen. Bei mir wird der Wert in der Instanz auch Sekündlich aktualisiert und angezeigt.
Zumindest die Distance. Auf die Liter schau ich nicht, werden aber glaube ich auch alle Sekunden aktualisiert.

gruß garfi

Danke für deine Antwort.

Ich habe hier mal ein paar Screenschots meiner Konfiguration, vielleicht ist mein Fehler ja zu erkennen.

Der Graph zeigt einen Nachfüllvorgang. Ich war dabei anwesend. Das Wasser stieg ca. 40 Minuten an und plötzlich ging der Level in IPS
con ca. 3500 auf ca. 9700 obwohl auf dem Display des Leveljet der Anstieg sekündlich zu verfolgen war.

Die anderen Bilder zeigen Konfiguration und Debug der Instanz und des Seriellen Ports.

Gruß Martin

Hallo Martin,
wie startest Du Dein Script, welches die Steuerung übernimmt?

Gruß Helmut

Hallo,

den einzigen unterschied sehe ich, dass du im Debug immer eine Zeile mit 8 Byte empfängst, und dann eine mit 4 Byte.
Ich dagegen habe immer nur zeilen mit 12 Byte, siehe Screeshot.

Aber ich habe keine Ahnung, wieso dass so ist, könnte mir aber vorstellen, dass da der Fehler liegt. Die einstellungen der Seriellen schnittstelle sind gleich wie bei mir.

gruß garfi

Hallo Helmut,

Es gibt einfach 2 kleine Skripte (Pumpe AN/Pumpe Aus) die führen nur den KNX Befehl aus sonst nix.

Pumpe AN wird von einem Ereignis (Variable Füllstand unterschteitet Grenze) und Pumpe aus (Variable Füllstand überschreitet Grenze) getriggert.

Mehr nicht

Was die Byte Anzahl angeht muss ich mal in der Konfiguration des Leveljet selbst schauen wie der Serielle Port dort eingestellt ist.

Gruß Martin

Ich meinte:
Die Scripte solltest Du mit Variablenänderung triggern, dann bekommtst Du sicher eine schnellere Bearbeitung.
Ereignis hinzufügen, wodurch: Variablenänderung.

Die Schaltpunkte dann in einer Schleife abfragen, dabei lieber >,< oder =>,=< nehmen, nicht auf gleich prüfen.
Aber Du bist Profi, das weißt Du sicher.

Deshalb fragte ich um das Triggern.

Gruß Helmut

Hallo Helmut,
Das problem ist nicht die Reaktionszeit auf Werteänderung sondern das sich der füllstandswert gar nicht zeitnah aktualisiert.

Gruss Martin

Schon verstanden ;-.) Da es woanders funktioniert, und Du fast alles gepostet hast, ausser dem Script und die Triggerung, habe ich eben nach Diesem gefragt.
Gruß Helmut

Hallo Martin,

was für IPS Version nutzt du?
In IPS 2.7 gibt es auch eine „Pro Jet Gateway“ Instanz. Füg diese mal dazu ein, und verwende die Serielle Schnittstelle als übergeordnete Instanz. Und beim Leveljet nimm dann da Gateway als übergeordnete Instanz. Evtl wird es dann sekündlich aktualisert.

gruß garfi

Danke für den Hinweis, ich habe das mal getestet. Ich nutze die 2.7.

Hab das mit der Gateway Instanz auch mal versucht ohne Erfolg.

Hab mit das nun selber mit Register Variable gebaut und bekomme nun im Sekundentakt die Werte.

Danke jedenfalls für die Hilfe.

Gruß Martin

Das Problem kann ich bestätigen.

Mit einer neu angelegten Instanz (JKM-868(LevelJet) kommen keine aktuellen Werte.
Am Com-Port kommen die Daten sekündlich an.

Mit der alten Instanz LevelJet funktioniert es ohne Probleme.

Hallo,

ich habe heute meine neue LevelJet ST seriell angeschlossen und musste ein ähnliches Problem feststellen:

Die Variablen für Distanz und Füllmenge werden nur total unregelmäßig (mal jede Minute, mal 10 Stunden garnicht) geupdatet. Im Debug-Fenster habe ich auch 2 byte-Folgen, einmal mit 8byte, und einmal mit 4byte.
sporadisch kommt auch einmal alle 12byte nacheinander, dann wird meines Erachtens eine Aktualisierung der Variablen durchgeführt.
Hat schon jemand rausgefunden, woran die Trennung in 8 und 4 byte und wie man die 12byte-Folge richtig empfängt?
Wenn nicht, gibt es ausser der Level-Jet-Instanz seriell und der neuen Pro Jet Gateway-Instanz (die funktioniert garnicht bei mir) noch eine andere Lösung für einen php-Laien?

Viele Grüße
Thilo

Back @ Work, jeder Urlaub ist zu kurz… vieeeel zu kurz…

Wie versprochen hier mal meine Konfig

  1. Serial Port Erstellen: 19200,8,1,KEINE (I/O Instanz)

    im Debug des selbigen sollte sowas auftauchen: (2* 8Bit / 1* 4bit)

    4880 , 1
    006 , 67
    4

    oder als HEX eben

    34 38 38 30 20 2C 20 31
    30 30 36 20 2C 20 36 37
    34 20 0A 0D

  2. CUTTER Erstellen (Splitter Instanz)
    Kein Hacken bei „Benutze Zeichen für Schnitte“
    Haken setzen bei „Benutze feste Schnitte“
    Eingabelänge 20
    Sync Zeichen 0D HEX
    Timeout 0

    Übergeordnete Instanz ist der Serielle Port

    Debug des Cutters:

    SENDCHUNK 4880 , 1006 , 674

  3. Script und Zielvariablen erstellen

Das Script ist eigentlich recht Trivial:

<?


   $parts = explode(",", $IPS_VALUE);

	$level=intval($parts[0]);  //Füllstand
	$dist=intval($parts[1]);   //Distace
	$niveau=intval($parts[2]);  //Niveau

	
	SetValue(45106 /*[Geräte und Instanzen\Funktionen\RegenwasserZisterne\LevelJetSelfmade\Füllmenge]*/ ,$level);
	SetValue(17949 /*[Geräte und Instanzen\Funktionen\RegenwasserZisterne\LevelJetSelfmade\Distance]*/ ,$dist);
	SetValue(40740 /*[Geräte und Instanzen\Funktionen\RegenwasserZisterne\LevelJetSelfmade\Niveau]*/ ,$niveau);
	

?>

Das Script ist das von der Register Variable aufgerufene, die Variablen müsst ih noch anlegen und im Script die richtigen IDs eintragen.

  1. Register Variable anlegen mit Cutter als Übergeordnete Instanz und Script als Ziel

Fettisch nun sollten die Variablen Füllmenge, DIstance und Nevau in etwa im Sekundentakt neue Daten erhalten

Hoffe das hat geholfen.

Gruß Martin

Danke an @KrasserMann für dei Erläuterungen.

Bei mir sieht der serielle string ein bisschen anders aus, ich bekomme 8byte und 4byte von der Schnittstelle.
z.B. 00 10 B2 0B 00 00 00 00
00 00 25 CE

wobei die letzten beiden bytes laut Beschreibung von Leveljet die Checksumme darstellen.
Da sich diese ständig ändern habe ich als festen Bestandteil nur die 2 byte Kennung am Anfang des strings.

Ich werde mich in den nächsten tagen mal ransetzen und ein bisschen experimentieren, vielleicht bekomme ich ja ein zufriedenstellendes Ergebnis.
Wenn jemand schon eine Lösung hat, dann wäre ich für eine Veröffentlichung dankbar.

Viele hitzige Grüße
Thilo

Du kannst im Leveljet das Serielle Protokoll umschalten, dann bekommst du etwas weniger daten, ich weiss nicht was ich bei unserem eingestellt habe, aber schalt deinen doch einfach mal um.

Denke dann passt das

Hallo,
ich habe in der Anleitung keine Möglichkeit gefunden, irgendein serielles Protokoll zu verändern.
Diese Anleitung zum seriellen Protokoll liegt mir vor:

Beschreibung:
Schnittstellenparameter:
Datenformat:
Datenbyte Zuordnung
Die serielle Schnittstelle dient zum Datenaustausch zwischen Leveljet und verschiedener
Applikationen. Die Übertragung erfolgt dabei über TTL-Pegel 0-5V und kann somit direkt mit
anderen Microcontrollern verbunden werden. Zur Datenübertragung an einen PC muß ein
Pegelwandler eingesetzt werden.
Die Geschwindigkeit beträgt 19200 Baud, 8 Bit, None-Parity, 1 Stop-Bit (19200,8,N,1), die
Datenübertragung erfolgt im Sekundentakt.
Ein Datenblock umfasst 12 Bytes, davon 10 Datenbytes und zwei CRC-Bytes.
0 Gerätekennung Low-Byte $E8
1 Gerätekennung High-Byte $03
2 Distanz Low-Byte
3 Distanz High-Byte
4 Füllhöhe Low-Byte
5 Füllhöhe High-Byte
6 Liter Low-Byte
7 Liter High-Byte
8 Inhalt in Prozent
9 Zustand derAusgänge
10 Kontrollbyte Low-Byte
11 Kontrollbyte High-Byte

Ich habe mir jetzt noch einen TTL-USB Wandler bestellt, mal sehen ob dann auch noch 8 und 4 byte kommen, oder ob dann der komplette string von 12byte mit einmal ankommt (oder mit einem Mal erkannt wird).
Wenn das der Fall sein sollte, dann funktioniert ja die Implementation in IPS wieder einwandfrei.

Viele Grüße
Thilo

Mein LevelJet meldet auch „nur“ den 8- und 4-Byte Rhythmus („serial mode = Normal“). Funktioniert auch einwandfrei mit der IPS-Instanz unter „(Sonstige) -> LevelJet“. Diese liefert per Default als Variablen „amount“ und „distance“. Aber was will man mehr? :confused:

Bei Dir steht „Serial mode“ auf „verbose“, richtig? Aber wozu? Was bringen die zusätzlichen 8 Byte? Mal davon abgesehen, dass die LevelJet-Instanz dann ein Problem hat. Ist da noch die Wassertemperatur mit drin? Scherz … :smiley:

Cheers
/Jens

Hallo,

Bei Dir steht „Serial mode“ auf „verbose“, richtig?

Wo kann ich das ablesen oder einstellen?

Mir würde es reichen, wenn ich einfach nur den Füllstand in Liter oder meinetwegen auch die Prozentzahl bekomme, mehr will ich nicht.
Wenn ich die Leveljet jetzt als Instanz laufen lasse, kommt aller paar Stunden mal eine Aktualisierung.
Und da stimmt etwas nicht.

Grüße
Thilo

Ja ich habs auf Verbose gestellt. Aber auch in der eintellung Normal war bei mir nix mit der Leveljet Instanz ich hatte immer beschriebenes Phänomen mit der aktualisierungsrate die eher zufällig sehr sehr sporadisch war.

Mit meinem Script läufts für mich nun sekundengenau und das brauch ich halt für meine Tanks nachfüllen zu können.

Interessanterweise finde ich diese Einstellung auch nicht in der Anleitung, mein Gerät kann das aber, siehe Bilder

Gruß Martin

Foto 3.JPG

Schuldigung habs drehen vergessen :wink:

Gruß Martin