NEWS
Blockly will keine Status werte in Wort
-
Hallo zusammen,
ich habe ein Blockly erstellt, aber das will nicht so wie ich will.
Ich bekomme einen Status über einen Mod-Bus von meiner Solaranlage.
Diese aber spuckt nur Zahlen aus, jedoch möchte ich gerne die Zahl übersetzt haben und in die Spalte "Funktion" eingesetzt haben.
Geht das überhaupt? Ist das sinnvoll? Oder mach man das anders? -
@acidsubway sagte:
in die Spalte "Funktion" eingesetzt haben
Was ist eine Spalte "Funktion" ?
@acidsubway sagte in Blockly will keine Status werte in Wort:
Oder mach man das anders?
Das ist eine typische Werteliste, bei der in der Eigenschaft common.states den Zahlenwerten Zustandstexte zugeordnet sind. Beispiel:
{ "from": "system.adapter.admin.0", "user": "system.user.admin", "ts": 1582661467074, "common": { "name": "Senderliste", "role": "", "type": "number", "desc": "Manuell erzeugt", "states": { "0": "Aus", "1": "Sender 1", "2": "Sender 2", "3": "Sender 3" }, "min": 0, "max": 3, "def": 0, "read": true, "write": true },
-
Hallo Paul,
schau mal oben im Bild das meine ich.
-
@acidsubway sagte:
oben im Bild
Funktion ist ein Aufzählungsobjekt (ursprünglich "Gewerk"), dem Objekte zugeordnet werden können. Dort lassen sich keine Zustände eines Datenpunktes unterbringen. Die Zustandstexte werden in der Spalte "Wert" angezeigt, wenn vorhanden.
In Klammern steht der eigentliche Zahlenwert.
-
ach super das geht auch, wie schaut das in blockly aus?
mit dem Programmieren habe ich es nicht so -
@acidsubway sagte in Blockly will keine Status werte in Wort:
wie schaut das in blockly aus?
Blockly hat da seine Grenzen. In Javascript kann man den Zustandstext leicht ermitteln.
on('javascript.1.test.Senderliste', function(dp) { log(dp.common.states[dp.state.val]); });
-
@acidsubway
Wo möchtest Du die Zustandstexte letztlich anzeigen ?
In Vis gibt es dafür die Widgets mit ValueList im Namen. Dort trägt man die Texte direkt ein. -
ok Paul danke, schau mal so schaut jetzt mein Script aus?
// Solar Status Scrip { "from": "system.adapter.modbis.1.holdingRegisters", "user": "system.user.admin", "ts": 1582661467074, // was muss hier rein? "common": { "name": "Regelstatus", "role": "", "type": "number", //welche Nummer muss hier rein? "desc": "Manuell erzeugt", "states": { "0": "Warte auf Sonne", "1": "Frostschutz", "2": "Anschieben", "3": "Einscchaltverzögerung" "4": "Einspeisen" "5": "Speicher voll" "6": "Kollektor überhitzt" "7": "Manuell" "8": "Messung" "9": "Störabschaltung" "10": "Speicher umladen" "11": "Heißstart" "12": "SPS übernimmt" }, "min": 0, "max": 12, "def": 0, "read": true, "write": true },
um die oben markierte Zeile geht es, ich hab das gefühl mir fehlt noch was in meinem Script?
mfg
-
oh ja der hat einen Fehler.
08:44:35.961 info javascript.0 (112) Stop script script.js.common.Solar_Status_umwandeln 08:44:35.961 info javascript.1 (5369) Stop script script.js.common.Solar_Status_umwandeln 08:44:36.085 info javascript.0 (112) Start javascript script.js.common.Solar_Status_umwandeln 08:44:36.086 error javascript.0 (112) script.js.common.Solar_Status_umwandeln compile failed: at script.js.common.Solar_Status_umwandeln:3
-
hab vorhin ein falsches Objekt gepostet, das ist der Solarregler
-
// Solar Status Scrip { "from": "system.adapter.modbus.0.holdingRegisters.4028", "user": "system.user.admin", "ts": 1582661467074, // was muss hier rein? "common": { "name": "Regelstatus", "role": "", "type": "number", //welche Nummer muss hier rein? "desc": "Manuell erzeugt", "states": { "0": "Warte auf Sonne", "1": "Frostschutz", "2": "Anschieben", "3": "Einscchaltverzögerung" "4": "Einspeisen" "5": "Speicher voll" "6": "Kollektor überhitzt" "7": "Manuell" "8": "Messung" "9": "Störabschaltung" "10": "Speicher umladen" "11": "Heißstart" "12": "SPS übernimmt" }, "min": 0, "max": 12, "def": 0, "read": true, "write": true },
ich sehe leider nicht woran es liegen könnte
-
@acidsubway
Das, was ich hier gezeigt habe, ist kein Script, sondern die RAW-Ansicht eines Datenpunktes mit einer Werteliste, und davon nur der Teil "common".Du brauchst kein Script, um die Zustandstexte in Vis anzuzeigen. Sie müssen im Widget eingegeben werden. Z.B. Widget "ValueList HTML":
Oder brauchst Du die Zustandstexte woanders ?
-
@acidsubway sagte in Blockly will keine Status werte in Wort:
das ist der Solarregler
Bitte verändere keine Original-Datenpunkte des Modbus-Adapters. Wenn Du einen Datenpunkt mit Zustandstexten benötigst, der ansonsten ein Abbild des "Status Solar" ist, dann erzeuge einen Alias. Das kannst Du mit diesem Script machen:
// Original-Datenpunkt const idOrigin = 'modbus.0.holdingRegisters.4028'; // Alias-Datenpunkt const idAlias = 'Solar.Status'; var typeAlias, read, write, nameAlias, role, desc, min, max, unit, states, custom, raum, gewerk; // Folgende kommentieren, wenn keine Änderung der Eigenschaft erforderlich // nameAlias = 'Batterie Deckenlicht'; desc = 'per Script erstellt'; // typeAlias = 'boolean'; // oder 'number' // read = "val < 20 ? true : false"; // Erkennung "Aus" --> false erfolgt automatisch // write = "val ? 'Ein' : 'Aus'"; // role = 'indicator'; // min = 0; // nur Zahlen // max = 100; // nur Zahlen // unit = '%'; // nur für Zahlen states = { 0: "Warte auf Sonne", 1: "Frostschutz", 2: "Anschieben", 3: "Einschaltverzögerung", 4: "Einspeisen", 5: "Speicher voll", 6: "Kollektor überhitzt", 7: "Manuell", 8: "Messung", 9: "Störabschaltung", 10: "Speicher umladen", 11: "Heißstart", 12: "SPS übernimmt" }; // custom = []; // verhindert doppelte Ausführung von history, ... // raum = 'EG_Flur'; // Groß-/Kleinschreibung in der ID beachten ! // gewerk = 'Licht'; // Groß-/Kleinschreibung in der ID beachten ! function createAlias(idSrc, idDst) { if(existsState(idDst)) log(idDst + ' schon vorhanden !', 'warn'); else { var obj = {}; obj.type = 'state'; obj.common = getObject(idSrc).common; obj.common.alias = {}; obj.common.alias.id = idSrc; if(typeAlias) obj.common.type = typeAlias; if(obj.common.read !== false && read) obj.common.alias.read = read; if(obj.common.write !== false && write) obj.common.alias.write = write; if(nameAlias) obj.common.name = nameAlias; if(role) obj.common.role = role; if(desc) obj.common.desc = desc; if(min !== undefined) obj.common.min = min; if(max !== undefined) obj.common.max = max; if(unit) obj.common.unit = unit; if(states) obj.common.states = states; if(custom && obj.common.custom) obj.common.custom = custom; obj.native = {}; setObject(idDst, obj); if(raum && getObject('enum.rooms.' + raum)) { let obj = getObject('enum.rooms.' + raum) obj.common.members.push(idDst); setObject('enum.rooms.' + raum, obj); } if(gewerk && getObject('enum.functions.' + gewerk)) { let obj = getObject('enum.functions.' + gewerk) obj.common.members.push(idDst); setObject('enum.functions.' + gewerk, obj); } } } createAlias(idOrigin, 'alias.0.' + idAlias);
-
PAUL, DANKE DIR!!!!!!!!!!!!!!!!!!!!!!!
Das geht super, kann das nun auch noch umschreiben für noch mehr statuse DANKE