Wie Profil für mA erstellen?

Da ich schon so weit bin dass alles soweit funktioniert wie es sollte:

Wie bekomme ich den neuen Messwert wieder zurück auf den KNX Bus als Gleitkommawert in W (DPT 14.056)? Ich müsste ja eine neue Gruppenadresse anlegen mit der neuen Variable und eine Regel dass der Wert bei Änderung (z.B. 10%) gesendet wird. Habe zwar ein wenig probiert aber nichts gescheites auf die Reihe bekommen:(

Sollte man den Thread nicht besser in den KNX-Bereich verschieben?

DPT14 sind Float mit höherer Auflösung (4 byte). Alternativ könnte man auch DPT 9.024 nutzen, das ist ebenfalls die Leistung, im Format 2 byte Float. Je nach Zielgerät, das die Daten anzeigen soll, ist evlt. nur eines der Formate verfügbar.

Vermutlich ist dir das klar, aber nur um sicher zugehen: Auf dem KNX-Bus wird beides als Zahl ohne Einheit übertragen, also sehen dort alle DPT 14.xxx gleich aus. Das bedeutet, daß wir in IPS ein generisches DPT14 oder DPT9 senden, der Untertyp „Leistung in W“ wird nicht im KNX-Telegramm übertragen.

Richtig, die neue GA zum Senden der Leistung braucht ein neues „KNX Device“. Die Besonderheit/Merkwürdigkeit bei IPS ist, daß die zugehörige Variable zwar beim Empfang automatisch aktualisiert wird, aber zum Senden darf man nicht der Variablen einen Wert zuweisen, sondern muß eine KNX-spezifische Funktion des Gerätes aufrufen. Und diese unterscheidet sich dann je nach EIS/DPT. [li] :rolleyes:[/li]
Machen wir’s konkret:

DPT14 entspricht EIS9, also legen wir das so an.
Machen wir noch Häkchen, damit der Wert nicht nur von IPS aktiv gesendet werden kann, sondern IPS auch auf Leseanfrage vom Bus antwortet (entspricht L-Flag).

pwr6.PNG

Nun erzeugen wir wie zuvor ein neues Ereignis bei Wertänderung der Strom-Variablen…

… und anstatt einer Variablenzuweisung gibt’s nun den Aufruf einer Gerätefunktion, die spezifisch ist für KNX mit DPT14/EIS9:
EIB_FloatValue — IP-Symcon :: Automatisierungssoftware

VALUE ist wieder der Wert, den wir abgeprüft hatten, also der Strom in mA.

Wenn man DPT9/EIS5 verwendet hätte, so müsste die Funktion EIB_Value anstatt EIB_FloatValue verwendet werden.

Man könnte sich das irgendwie selbst programmieren, indem man den alten Wert in eine Variable wegspeichert, vergleicht usw. Aber bestimmt gibt’s in den Tiefen von IPS dafür schon hilfreichen Code, den ich nicht kenne. :smiley:

Viel Erfolg!
Volker


[*] Es mag bei anderen Gerätentypen Gründe geben, das so umständlich mit Gerätefunktionen zu lösen. Mit meinem eingeschränkten Blick auf KNX hätte ich es sinnvoller gefunden, wenn man einfach die Float-Variable beschreiben dürfte und der passende Funktionsaufruf würde über den gewählten Datentyp automatisch ermittelt und ausgeführt. Wäre interessant zu erfahren, warum es so ist wie es ist.

[/li]
Der logische Grund wird hier erklärt:
Variablen — IP-Symcon :: Automatisierungssoftware

Programmtechnisch ist er nötig.
Nur Instanzen haben in IPS eine Funktion. Stellen also Code dar, welcher irgendwas macht; in diesem Fall KNX-Telegramme baut und sendet.
Würde man also nur die Variable beschreiben, passiert nix, weil der Code in der Instanz nie ausgeführt wird.
Außerdem verhindert es Endlosschleifen.
Stell dir vor, diese Variableupdates würden doch (wie auch immer) Code ausführen.
Jetzt kommt die Rückmeldung von der Hardware und aktualisiert die Variable.
Diese Änderung führt wieder den Code aus usw… Perfekt um ein Programm zum Stillstand zu bringen :slight_smile:
Michael

Danke Michael, soweit verständlich. Also schreiben wir durch expliziten Aufruf einer Funktion. Trotzdem ist das in Bezug auf KNX unnötig umständlich gelöst, denn in jeder Instanz ist der Datentyp der KNX-GA bereits festgelegt. Jede GA hat genau einen Datentyp. Es würde also genügen, wenn es eine generische Schreibfunktion gäbe, die das intern auflöst und zum Datentyp passend auf diese GA schreibt.

Die IPS-Lösung, daß der Anwender vorab der GA/Instanz den Datentyp mitteilt und dann zum Schreiben nochmal die zum Datentyp passende Funktion raussuchen muß, ist mMn doppelt gemoppelt. Das könnte IPS mMn intern auflösen.

Hallo,

vielen Dank für die nächste Anleitung;)
Habe es eben umgesetzt und die Daten kommen korrekt auf den KNX Bus an:) Auf den KNX Bus ist es egal ob ich als Datentyp DPT14.* oder DPT9.* auswähle, es wird immer der gleiche Wert angezeigt.

Mit der 10% Schwelle hat es sich von alleine erledigt, die ist ja schon in den stromgebenden Aktor eingestellt. Somit passt alles!:slight_smile:

Einzig als EIB_Value (DPT9) kommt nichts auf den Bus an.

Blöd nur dass das was ich vor hatte ich nicht umsetzen kann. Ich wollte mir den Wert auf meinem MDT Glastaster anzeigen lassen. Das ist leider nicht möglich da der Datentyp nicht unterstützt wird:/ Schön wäre es wenn man sich den reinen 2-Byte Wert anzeigen lassen könnte.
Habe aber trotzdem wieder gut was dazu gelernt:)

Grüße

Das ist schon klar, dem Bus ist’s egal, und der Gruppenmonitor der ETS versteht natürlich beide Datentypen und zeigt sie richtig an.

Mit DPT14 kann man mehr Nachkommastellen-Genauigkeit erzielen, weil der Datentyp 4byte überträgt anstatt 2 byte. Das versteht aber nicht jedes Gerät … offensichtlich auch dein MDT Glastatser nicht. In dem Fall wählt man also den weit verbreiteten 2-byte-Float DPT9, wie er auch für Temperaturwerte verwendet wird.

Solche DPT9-Zahlen kann fast jedes Gerät darstellen, und wie gesagt: übertragen wird nur die Zahl, die angezeigte Einheit kannst du im Glastaster bei Bedarf auch manuell als Text definieren. Dazu hilft das KNXUF bestimmt weiter, wenn nötig.

Das sollte aber funktionieren, wenn du in IPS das „Gerät“ als EIS5 eingestellt hast und den Wert mit EIB_Value sendest. Ich nutze das genau so für diverse Daten, die von IPS an KNX weitergeleitet werden.

Wie gesagt, mit DPT9 sollte es klappen, das hatten wir mal im KNXUF. Denn die Untertypen/Einheiten/Beschriftungen, die der Glastaster nicht kennt, kann man irgendwo in der GT-Applikation als Textsuffix eintragen.

~~

Aber nochmal generell: Hattest du nicht oben geschrieben, daß der Aktor selbst auch Wirkleistungsmessung beherrscht? Das würde ich in jedem Fall der selbst berechneten Scheinleistung vorziehen. Wirkleistung ist die „echte“ gezählte Leistung ist, wie sie auch abgerechnet wird. Die Scheinleistung aus Strom x 230V ist je nach Verbraucher irreführend.

Hallo,

das Problem mit dem EIB_Value (DPT9) lag in der Instanz, habe vergessen diese auf EIS5 umzustellen. Werde meistens DPT9 verwenden da es häufiger genutzt wird und die Genauigkeit nicht so extrem wichtig ist.

Beim Glastaster habe ich für die Leistungsanzeige jetzt den Statuswert DPT9.001 mit W als Text für Einheit genommen. Jetzt funktioniert alles 100%ig :slight_smile:

Ich habe einen MDT Stromaktor aus der 02er Serie, dieser kann die Leistung in KW per DPT9.024 schicken. Eventuell nehme ich diesen DPT und lasse diesen per IPS in Watt umrechnen.

Vielen Dank für den super Support:)

Hallo,

kann mir jemand helfen ?
Ich bekomme vom MDT Aktor DPT9.021 also den Strom in mA geliefert und möchte diesen in Watt umrechnen.

Also habe ich eine Variable als Float angelegt und versuche diese mittels einer Aktion und

 SetValue($_IPS['TARGET'], $_IPS['VALUE']*230/1000) 

umzurechnen.

Allerdings erhalte ich immer die Fehlermeldung:

„Der Vergleichswert ist nicht Float“

Welchen Datentyp hat denn die Instanz für die Leistung?
Ich habe bei mir für die Umrechnung EIS5 genommen, damals gab es noch nicht die aktuellen KNX Typen.

Evtl. den Wert zuvor mit einer Hilfsvariablen berechnen und diese dann dem SetValue übergeben

Hallo,

ich hatte die Varabel unter der gleichen Instanz wie der Stromwert angelegt DPT9.xx.
Soll ja eigentlich eine reine Anzeige zur Verwendung in IPS werden insofern ist auf den Bus senden nicht geplant.

Habe jetzt eine eigene Dummy instanz dafür erstellt. Hat aber auch nicht funktioniert. Immernoch gleiche Fehlermeldung

Der Ablageort der Zielvariablen ist unerheblich.

Aber welchen Datentyp hat denn deine Zielvariable? Da du mit Nachkommastellen rechnest, sollte sie vom Typ Float sein.

Es ist mir ein Rätsel. Ich habe folgendes skript geschrieben


$Strom = GetValueFloat(20519);
$Leistung = $Strom*230/1000;
SetValueFloat(11697, $Leistung);

Wenn ich es manuell ausführe funktioniert es und die Variable wird berechnet.
Wenn ich das Skript Ereignisgesteuert bei Änderung der entsprechenden Variabel für die Stromstärke auslösen möchte kommt wieder die Fehlermeldung.
Die KNX Instanz unter der alles liegt ist die Stromstärke als DPT 9.021

Gruss

Versuche es mal mit:

$Strom = GetValueFloat(20519);
$Leistung = $Strom*230/1000;
EIB_Value(11697, $Leistung);

Das EIB_Value bezieht sich auf den KNX Datentyp EIS5, damit kann der KNX Bus bei mir zumindest was anfangen.
Ob deine Skript soweit richtig ist kann ich nicht sagen, habe von php noch kein Plan:/

Unabhängig vom Scriptproblem: Leistung aus dem Strom ausrechnen wird falsche Ergebnisse liefern, außer bei rein ohm’schen Verbrauchern wie Heizstrahler und klassicher Glühlampe.

Mit modernen Schaltnetzteilen wird das Ergebnis total daneben liegen, weil die so berechnete Scheinleistung nicht der vom Zähler erfassten und abgerechneten Wirkleistung entspricht

Wirkleistung ist Strom * Spannung * cos(Phasenwinkel)

Da hast Du recht, der MDT Aktor berechnet die Ausgabe auch genau so, wenn man Sie entsprechend einstellt bzw. parametriert. Allerdings ist die Ausgabe in kW und die ist mir zu grob und wollte diese nicht verwenden

Der Phasenwinkel ist 90°, oder ?

Sicher? Ich hätte gedacht, daß das mit den nutzbaren Nachkommastellen genau so brauchbar/unbrauchbar herauskommt wie die eigene Berechnung.

Phasenwinkel für ohm’sche Last ist 0°, also Faktor cos(phi)=1

Hatte ich anfänglich getestet und jetzt nochmal:
Wenn ich das Profil auf z.B 5 Nachkommastellen ändere wird z.B bisher 0,11 kw auf 0,11000 aufgefüllt,
habe auch eine Wertänderung abgewartet wie z.b 0,05000.
Heißt es kommen nur 2 Nachkommastellen an
Ausser ich kann das in IPS ausser im Profil an einer anderen Stelle ändern.

Phasenwinkel für ohm’sche Last ist 0°, also Faktor cos(phi)=1

Für ohmische Last war mir das klar, wenn ich z.B für Spülmaschiene, also wie von Dir geschrieben moderne Netzteile dies berechnen möchte, wie müsste es da aussehen ?

Gruss und Danke für die Hilfe. Ich kämpfe gerade an mehreren Baustellen und bräuchte Deine Hilfe auch an anderer Stelle (andere Threats) Deshalb schreibe ich öfters :slight_smile:

Das geht nicht (zuverlässig) rechnerisch, das kann man nur mit passender Hardware (Wirkleistungsmessung) korrekt messen. Je nach momentanem Zustand ist der Verbrauch der Spülmaschine eher ohm’sch (Heizung) oder auch nicht.

Da kann man ohne echte Wirkleistungsmessung durchaus um Faktor 50 daneben liegen, wenn eine Entstörglied einen (Blind)Strom verursacht, obwohl die Wirkleistung im Standby unter 1W liegt.

Bedeutet aber auch das die Umrechnung des MDT Aktors ebenfalls ungenau ist.
Wie gesagt in der Applikation steht Berechnung nach Faktor = Spannung x cos phi

Als (Hobby) Fotograf habe ich die Zahl phi mal im Zusammenhang mit dem „goldenen Schnitt“ gehört, das wäre dann (zumindest laut google 1,618033988… cos phi wäre demnach 0,9996012771 zugegeben nicht gerade ne riesige Abweichung :slight_smile: