NEWS
Fragen / Antworten rund um die neue Alias Funktion
-
@uwerlp sagte in Fragen / Antworten rund um die neue Alias Funktion:
@mcbeath sagte in Fragen / Antworten rund um die neue Alias Funktion:
Konverter beim Lesen
"0_userdata.0.Datenpunkt.Laden" == "Laden PV" ? val : 0Aus 0_userdata.0.Datenpunkt.Laden einen Alias erstellen, dass sollte gehen.
Im Alias dann val == "Laden PV"Sorry ist so unvollständig
Alias Read-Function val == "Laden PV"
Gibt dann TRUE / WAHR zurückAlias Write-Function val == true ? "Laden PV" : "Nicht Laden"
Wird der Alias auf TRUE gesetzt wird USERDATA auf "Laden PV" gesetzt wenn Alias auf FALSE dann wird USERDATA auf "Nicht Laden" gesetzt.Ich hoffe so ist nun vollständig und verständlich
-
@uwerlp said in Fragen / Antworten rund um die neue Alias Funktion:
@uwerlp sagte in Fragen / Antworten rund um die neue Alias Funktion:
@mcbeath sagte in Fragen / Antworten rund um die neue Alias Funktion:
Konverter beim Lesen
"0_userdata.0.Datenpunkt.Laden" == "Laden PV" ? val : 0Aus 0_userdata.0.Datenpunkt.Laden einen Alias erstellen, dass sollte gehen.
Im Alias dann val == "Laden PV"Sorry ist so unvollständig
Alias Read-Function val == "Laden PV"
Gibt dann TRUE / WAHR zurückAlias Write-Function val == true ? "Laden PV" : "Nicht Laden"
Wird der Alias auf TRUE gesetzt wird USERDATA auf "Laden PV" gesetzt wenn Alias auf FALSE dann wird USERDATA auf "Nicht Laden" gesetzt.Ich hoffe so ist nun vollständig und verständlich
@UweRLP
Danke für deine Unterstützung, aber das war nicht ganz das, worum es ging.
Der Alias des DP "Ladeleistung" val z.b. 3000W sollte in Abhängigkeit von "0_userdata.0.Datenpunkt.Laden" ,welcher den Wert "Laden PV" oder "Entladen" enthält, den alias mal mit "val" oder mit "0" befüllen.
Das hätte dann aus 3000W - Laden PV auf 2 untersiedljche Alias- Laden = 3000W
- Entladen = 0W
Und aus 3000W - Entladen
- Laden = 0W
- Entladen = 3000W
Gezaubert.
Ich hoffe mein Vorhaben ist verständlich.
-
@McBeath
"Ist 0_userdata.0.Datenpunkt.Laden = Laden PV dann Ladeleistung = 3000W"
"Ist 0_userdata.0.Datenpunkt.Laden = Entladen dann Ladeleistung = 0W"So habe ich das jetzt verstanden, würde ich mit einem Blockly/Script lösen.
-
@uwerlp
Genau so habe ich es jetzt auch gelöst. -
Hallo, habe einen DP der true und false ausgibt. Kann ich durch anlegen eines alias erreichen das für true 1 und für false 0 im alias ausgegeben wird. Wenn ja, wie .. Danke
-
@fredje sagte: für true 1 und für false 0 im alias ausgegeben wird. Wenn ja, wie .. Danke
Beim Lesen?
val ? 1 : 0
-
@paul53 .. danke .. funktioniert
-
Ich hätte hier noch mal eine kurze Frage.
Habe einen Datenpunkt mit den Werten 0, 1, 2, 3.
Möchte aber nur jeweils 0 und 1 bzw 2 und 3 auswerten.
Habe auf diesen Datenpunkt mal zwei Alias angelegt
Und mit der konvertierfunktion folgendes eingetragenAlias1
Lesen val == 0 ? 1 : val == 1 ? 0 : val
Scheiben val == 1 ? 0 : val == 0 ? 1 : valAlias2
Lesen val == 3 ? 0 : val == 2 ? 1 : val
Schreiben val == 0 ? 3 : val == 1 ? 2 : valJetzt müsste ich nur noch wissen wie ich bei Alias1 die Werte 2 und 3
bzw. bei Alias2 die Werte 1 und 0 ignorieren kann?Der DP steuert einen Aktor 0 = Ch1 on, 1 = Ch1 off, 2 = Ch2 on, 3 = Ch2 off
Wäre toll wenn das möglich wäre
-
@mcbeath sagte: Werte 1 und 0 ignorieren kann?
Das ist nicht möglich. Dafür benötigt man ein Skript.
-
@mcbeath sagte in Fragen / Antworten rund um die neue Alias Funktion:
Ich hätte hier noch mal eine kurze Frage.
Habe einen Datenpunkt mit den Werten 0, 1, 2, 3.
Möchte aber nur jeweils 0 und 1 bzw 2 und 3 auswerten.
Habe auf diesen Datenpunkt mal zwei Alias angelegt
Und mit der konvertierfunktion folgendes eingetragenAlias1
Lesen val == 0 ? 1 : val == 1 ? 0 : val
Scheiben val == 1 ? 0 : val == 0 ? 1 : valAlias2
Lesen val == 3 ? 0 : val == 2 ? 1 : val
Schreiben val == 0 ? 3 : val == 1 ? 2 : valJetzt müsste ich nur noch wissen wie ich bei Alias1 die Werte 2 und 3
bzw. bei Alias2 die Werte 1 und 0 ignorieren kann?Der DP steuert einen Aktor 0 = Ch1 on, 1 = Ch1 off, 2 = Ch2 on, 3 = Ch2 off
Wäre toll wenn das möglich wäre
Und es funktioniert doch!
Alias1 lesen:
val == 0 ? 1 : val == 1 ? 0 : val = nothing
Alias1 scheiben:
val == 0 ? 1 : val == 1 ? 0 : val = nothingAlias2 lesen:
val == 2 ? 1 : val == 3 ? 0 : val = nothing
Alias2 schreiben:
val == 0 ? 3 : val == 1 ? 2 : val = nothingSo übergibt Alias 1 nur bei Eingabe von 0 oder 1 den Wert 1 bzw. 0.
Und der Alias 2 nur bei Eingabe von 0 oder 1 den Wert 3 bzw. 2.Man soll nicht zu früh aufgeben
-
@mcbeath
Allerdings erhält man dann Fehler in den logs ...
Funktioniert aber trotzdem -
@mcbeath
Naja, die Fehler im log sind, weil du einen Teil des Controllers mit deinem Code abschießt. Deshalb schreibt der da auch nix in den Datenpunkt... sei lieber mal froh, dass der js-controller mittlerweile so gut gebaut ist, dass er da nicht komplett abschmiert.Ich würde empfehlen, du überlegst dir schon einen Wert für "ignorieren", z.B.
null
.
Dann könntest du es so machen:
val === 0 ? 1 : val === 1 ? 0 : null
null ist in Javascript ein Platzhalter für "nix" und, soweit ich weiß, auch als state.val erlaubt (eigentlich wäre es sauberer den ganzen state auf null zu setzen, aber das geht, AFAIK, mit Alias-read Funktionen nicht). Du müsstest dann nur hoffen bzw. den Maintainer des Adapters / dein Skript anpassen, dass da null ignoriert wird.
Im Grunde ist das ja "nur" ein Problem bei der Anzeige / beim lesen. Beim Schreiben kannst du doch selber dafür sorgen, dass nur 0 / 1 bzw. 2 / 3 reingehen, indem du min/max setzt und selber nicht mit scripts oder so da Unsinn machen . -
@garfonso sagte: Wert für "ignorieren", z.B. null
Meckert der js-controller dann nicht den Typ an? Denn "typeof null" liefert "object".
-
ich bräuchte hier auch einmal deine Hilfe: Ich habe eine Rollladensteuerung die für open,close,stop genau einen DP hat.
0: open
1: close
2: stop
Ich Alias Manager muss ich diese separat definieren. Hast du eine Idee welche Funktion ich da enstprechend eintragen muss?
val == 2 ? true
Klappt bei stop leider nicht
-
@cdn sagte in Fragen / Antworten rund um die neue Alias Funktion:
val == 2 ? true
Wenn schon, dann musst Du das auch komplett formulieren.
val == 2 ? true : false
Das Ding heißt "ternärer Operator" und benötigt deshalb auch 3 Operanden.
Geht dann aber auch kürzer:
val == 2
Liefert
true
wenn inval
eine2
steht und in allen anderen Fällenfalse
. -
@codierknecht
Ach so nein ich steuer damit. Also möchte quasi die Aktion STOP, CLOSE, OPEN ausführen.Im DP steht
STOP (2)
ZZ (0)
FZ (1)Wobei ZZ auf und ZZ zu ist.
Wobei jetzt der DP auf true gesetzt wird. Was ja nicht funktioniert. -
@cdn
Das heißt, Du willst die 3 DP in einem einzigen zusammenführen?
Das geht nur per Script. -
Nein ich habe einen DP und der hat die 3 Zustände. Ich nutze aber lovelace im NSPanel um das Rollo zu steuern. Und da gibt es entsprechend 3 Buttons (auf, zu, stop). Diese will ich ansteuern, habe aber nur den einen DP
-
@cdn sagte in Fragen / Antworten rund um die neue Alias Funktion:
Und da gibt es entsprechend 3 Buttons
Und die brauchen dann 3 DP?
Ich kenne lovelace nicht.Diese will ich ansteuern, habe aber nur den einen DP
Das geht mit Alias nicht.
Ich würde das per Script machen.
Je nachdem welcher Button geklickt wird, wird der Ziel-DP auf 0, 1 oder 2 gesetzt.Wenn der Ziel-DP sich ändert (weil z.B. ein vorhandener "echter" Schalter bedient wird) werden die 3 DP für lovelace auf true/false gesetzt (sofern das überhaupt benötigt wird)
-
@codierknecht said in Fragen / Antworten rund um die neue Alias Funktion:
ckt wird, wird der Ziel-DP auf 0, 1 oder 2 gesetzt.
Wenn der Ziel-DP sich ändert (weil z.B. ein vorhandener "echter" Schalter bedient wird) werdNein die brauchen ein "Gerät".
In dem Gerät kann ich ja für verschiedene "Funktionen" wie bspw. STOP, OPEN, CLOSE einen jeweiligen DP angeben.Der Adapter liefert mir aber nur einen Datenpunkt. Diesen Datenpunkt muss ich dann statt wie sonst üblich mit true/false mit 1,2,3 steuern.
Hier ein Auszug aus dem DP:
{ "type": "state", "common": { "type": "number", "states": { "0": "ZZ", "1": "FZ", "2": "STOP" }, "read": true, "write": true, "name": "mach_operate", "role": "level"