NEWS
ALIAS Variablen als globale Variablen nutzen + schalten?
-
@paul53 said in ALIAS Variablen als globale Variablen nutzen + schalten?:
@Pete0815 sagte in ALIAS Variablen als globale Variablen nutzen + schalten?:
Wichtig, ich muß den MQTT auf 0 oder 1 setzen, nicht true oder false.
Welchen Typ haben die MQTT-Datenpunkte ? Falls "number", dann wandele mit common.alias.read und common.alias.write .
"alias": { "id": "mqtt.0.HeizKeller.Switch_Output.State", "read": "!!val", "write": "val ? 1 : 0" }
Die MQTT sind vom typ string. Hieraus auch meine Intention ALIAS zu verwenden, damit ich direkt bolean werte habe für die skripte.
"common": { "name": "HeizKeller/Switch_Input/State", "write": true, "read": true, "role": "variable", "desc": "mqtt server variable", "type": "string" }, "native": { "topic": "HeizKeller/Switch_Input/State" }, "type": "state", "from": "system.adapter.mqtt.0", "user": "system.user.admin", "ts": 1599421923874, "_id": "mqtt.0.HeizKeller.Switch_Input.State", "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" } }
-
@Pete0815 sagte:
Die MQTT sind vom typ string.
Mit den Werten "0" und "1" ? Dann sollte die Read-Wandlung eigentlich automatisch erfolgen. Aber nicht write:
"alias": { "id": "mqtt.0.HeizKeller.Switch_Output.State", "write": "val ? String(1) : String(0)" }
-
@paul53 said in ALIAS Variablen als globale Variablen nutzen + schalten?:
@Pete0815 sagte:
Die MQTT sind vom typ string.
Mit den Werten "0" und "1" ? Dann sollte die Read-Wandlung eigentlich automatisch erfolgen. Aber nicht write:
"alias": { "id": "mqtt.0.HeizKeller.Switch_Output.State", "write": "val ? '1' : '0'" }
OK, verstehe. habe gerade einen Test gemacht.
Ausgangszustand: Alle ALIAS auf false und MQTT auf 0
Habe dann den Push Button Output gedrückt und da der Füllstand es derzeit nicht erlaubt, überschreibt ein Script dies wieder und triggert nochmal diesen Push Button über den ALIAS. Ergebnis, dass im MQTT DP jetzt ein false steht wo eine 0 stehen müßte. Also genau wie du sagst, die Schreibrichtung vom ALIAS auf den MQTT wandelt nicht.
Kopiere ich die Zeile 3 jetzt einfach bei mir im ALIAS dazu?
-
@Pete0815 sagte in ALIAS Variablen als globale Variablen nutzen + schalten?:
Kopiere ich die Zeile 3 jetzt einfach bei mir im ALIAS dazu?
Ja. Allerdings bin ich mir nicht ganz sicher, ob es so funktioniert. Falls nicht, dann evtl. so:
"write": "val ? String(1) : String(0)"
-
@paul53
Hab es gerade getestet: Die erste Version funktioniert nicht. Also:"write": "val ? String(1) : String(0)"
-
@paul53 said in ALIAS Variablen als globale Variablen nutzen + schalten?:
"val ? String(1) : String(0)"
Danke. Probiere gerade noch und sehe komische Effekte wie selbständiges setzen der ALIAS auf true und true/false taucht dann doch wieder im MQTT DP auf. Teste aber noch um mir sicher zu sein was genau passiert
-
Also ich glaube bei mir funktioniert, dass noch nicht.
Habe wieder den Testfall mit dem Switch_Output getestet. Habe manuell den Push Button gedrückt. Dies löst MQTT DP und dann den Alias aus. Dadurch beginnt das Motorventil am Ausgang zu drehen. Es findet eine zyklische Füllstandsmessung statt und die Logik "Überlaufschutz" löst ALIAS Switch_Output aus um den Vorgang wieder umzukehren/zu verhindern.Die Logik dazu sieht so aus:
Der ALIAS wie besprochen jetzt:
{ "from": "system.adapter.javascript.0", "user": "system.user.admin", "ts": 1599924788868, "common": { "name": "HeizKeller/Switch_Output/State", "write": "val ? String(1) : String(0)", "role": "switch", "desc": "mqtt server variable", "type": "boolean", "read": true, "alias": { "id": "mqtt.0.HeizKeller.Switch_Output.State" } }, "native": {}, "acl": { "object": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator", "state": 1636 }, "_id": "alias.0.HeizKeller.Pumpe.Switch_Output", "type": "state" }
Am Ende sieht der Zustand so aus:
Warum der ALIAS auf true und der MQTT DP auf false und nicht auf 0 ist so nicht gewollt.
-
@Pete0815 sagte:
Der ALIAS wie besprochen jetzt:
Es fehlt common.alias.write.
"alias": { "id": "mqtt.0.HeizKeller.Switch_Output.State", "write": "val ? String(1) : String(0)" }
Zeile 7 muss lauten:
"write": true,
Im Blockly schaltest Du den Alias-DP ?
-
@paul53 said in ALIAS Variablen als globale Variablen nutzen + schalten?:
@Pete0815 sagte:
Der ALIAS wie besprochen jetzt:
Es fehlt common.alias.write.
"alias": { "id": "mqtt.0.HeizKeller.Switch_Output.State", "write": "val ? String(1) : String(0)" }
Achso, falsch verstanden und das write in Zeile 7 modifiziert. den oben Block komplett einfügen.
Zeile 7 muss lauten:
"write": true,
Mache ich rückgängig.
Im Blockly schaltest Du den Alias-DP ?
Ja, alias.0.HeizKeller.Pumpe.Switch_Output
-
@paul53
jetzt schaut es gut aus! Erster Test war erfolgreich! Danke