NEWS
Grafana true/false anzeigen
-
Hallo,
ich stehe grad auf dem Schlauch.
Im Netz habe ich genau dieses Beispiel gefunden, was mir zeigt das es geht.Ich möchte einen Wert in Grafana anzeigen lassen, welches mir true / false liefert.
Benutzen tue ich das Widget in Grafana STAT.
Ebenso habe ich das value mapping gemacht aber ich bekomme ewig NO DATA.
Was mache ich falsch ?
 -
Hallo,
ich stehe grad auf dem Schlauch.
Im Netz habe ich genau dieses Beispiel gefunden, was mir zeigt das es geht.Ich möchte einen Wert in Grafana anzeigen lassen, welches mir true / false liefert.
Benutzen tue ich das Widget in Grafana STAT.
Ebenso habe ich das value mapping gemacht aber ich bekomme ewig NO DATA.
Was mache ich falsch ?
 -
Hallo,
ich stehe grad auf dem Schlauch.
Im Netz habe ich genau dieses Beispiel gefunden, was mir zeigt das es geht.Ich möchte einen Wert in Grafana anzeigen lassen, welches mir true / false liefert.
Benutzen tue ich das Widget in Grafana STAT.
Ebenso habe ich das value mapping gemacht aber ich bekomme ewig NO DATA.
Was mache ich falsch ?
@Segway sagte in Grafana true/false anzeigen:
Ebenso habe ich das value mapping gemacht
was gibt dein DP im Ursprung aus?
(true/false) geht nicht, musst den DP umwandeln in (1/0), dann in Influx speichern als "Number"
als Beispiel


-
@Segway sagte in Grafana true/false anzeigen:
Ebenso habe ich das value mapping gemacht
was gibt dein DP im Ursprung aus?
(true/false) geht nicht, musst den DP umwandeln in (1/0), dann in Influx speichern als "Number"
als Beispiel


-
@crunchip
Ne nicht wirklich jetzt oder ?
Hier der Wert

Muss ich jetzt zB über ein Blockly diese Werte in 0 und 1 umwandeln ? Oder geht das auch eleganter ?
@Segway du kannst nen 2ten DP anlegen(blockly) oder einfach nen alias anlegen
-
@crunchip sagte in Grafana true/false anzeigen:
@Segway du kannst nen 2ten DP anlegen(blockly) oder einfach nen alias anlegen
Jo Blockly kriege ich ja irgendwie hin.
Was meinst du mit ALIAS anlegen ? Habe ich noch nie gemacht - hört sich irgendwie einfacherer an als 1000 Blocklys zu machen :-) -
@crunchip sagte in Grafana true/false anzeigen:
@Segway du kannst nen 2ten DP anlegen(blockly) oder einfach nen alias anlegen
Jo Blockly kriege ich ja irgendwie hin.
Was meinst du mit ALIAS anlegen ? Habe ich noch nie gemacht - hört sich irgendwie einfacherer an als 1000 Blocklys zu machen :-) -
@crunchip sagte in Grafana true/false anzeigen:
@Segway du kannst nen 2ten DP anlegen(blockly) oder einfach nen alias anlegen
Jo Blockly kriege ich ja irgendwie hin.
Was meinst du mit ALIAS anlegen ? Habe ich noch nie gemacht - hört sich irgendwie einfacherer an als 1000 Blocklys zu machen :-)@Segway Verwende ich eigentlich auch nicht, hab mittels Adapter "Geräte" einen Alias angelegt, für meinen Wasserverbrauch, beötige ich um die Kosten für Abwasser zu berechnen.
Du kannst das aber auch manuell anlegen oder das Script verwenden, was hier im Forum zu finden ist, gibt mehrere Möglichkeiten
hier als script musst nur deinen Datenpunkte angeben// Original-Datenpunkt const idOrigin = 'mqtt.0.switch.status'; // Optional: Status-Datenpunkt, wenn Kommando und Status getrennt. // Bei Nicht-Verwendung Leerstring '' zuweisen const idRead = ''; // Alias-Datenpunkt const idAlias = 'Pool.Pumpe.Schalter'; var typeAlias, read, write, nameAlias, role, desc, min, max, unit, states, custom, raum, gewerk; // Folgende kommentieren, wenn keine Änderung der Eigenschaft erforderlich nameAlias = 'Poolpumpe Ein'; desc = 'per Script erstellt'; // typeAlias = 'boolean'; // oder 'number' // read = "val < 0 ? -val : 0"; // Erkennung "Aus" --> false erfolgt automatisch // write = "val ? String(1) : String(0)"; // role = 'value'; // min = 0; // nur Zahlen // max = 100; // nur Zahlen // unit = '%'; // nur für Zahlen // states = {0: 'Aus', 1: 'Auto', 2: 'Ein'}; // Zahlen (Multistate) oder Logikwert (z.B. Aus/Ein) // custom = []; // verhindert doppelte Ausführung von history, ... // raum = 'EG_Flur'; // Groß-/Kleinschreibung in der ID beachten ! // gewerk = 'Licht'; // Groß-/Kleinschreibung in der ID beachten ! // Ab hier nichts ändern !! function createAlias(idDst, idSrc, idRd) { if(existsState(idDst)) log(idDst + ' schon vorhanden !', 'warn'); else { var obj = {}; obj.type = 'state'; obj.common = getObject(idSrc).common; obj.common.alias = {}; if(idRd) { obj.common.alias.id = {}; obj.common.alias.id.read = idRd; obj.common.alias.id.write = idSrc; obj.common.read = true; } else 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(obj.common.type == 'number') { if(min !== undefined) obj.common.min = min; if(max !== undefined) obj.common.max = max; if(unit) obj.common.unit = unit; } else { if(obj.common.min !== undefined) delete obj.common.min; if(obj.common.max !== undefined) delete obj.common.max; if(obj.common.unit) delete obj.common.unit; } if(states) obj.common.states = states; if(custom && obj.common.custom) obj.common.custom = custom; obj.native = {}; setObject(idDst, obj, function() { if(idRd) setState(idRd, getState(idRd).val, true); else setState(idSrc, getState(idSrc).val, true); }); if(raum && existsObject('enum.rooms.' + raum)) { let obj = getObject('enum.rooms.' + raum) obj.common.members.push(idDst); setObject('enum.rooms.' + raum, obj); } if(gewerk && existsObject('enum.functions.' + gewerk)) { let obj = getObject('enum.functions.' + gewerk) obj.common.members.push(idDst); setObject('enum.functions.' + gewerk, obj); } } } createAlias('alias.0.' + idAlias, idOrigin, idRead); -
@Segway Verwende ich eigentlich auch nicht, hab mittels Adapter "Geräte" einen Alias angelegt, für meinen Wasserverbrauch, beötige ich um die Kosten für Abwasser zu berechnen.
Du kannst das aber auch manuell anlegen oder das Script verwenden, was hier im Forum zu finden ist, gibt mehrere Möglichkeiten
hier als script musst nur deinen Datenpunkte angeben// Original-Datenpunkt const idOrigin = 'mqtt.0.switch.status'; // Optional: Status-Datenpunkt, wenn Kommando und Status getrennt. // Bei Nicht-Verwendung Leerstring '' zuweisen const idRead = ''; // Alias-Datenpunkt const idAlias = 'Pool.Pumpe.Schalter'; var typeAlias, read, write, nameAlias, role, desc, min, max, unit, states, custom, raum, gewerk; // Folgende kommentieren, wenn keine Änderung der Eigenschaft erforderlich nameAlias = 'Poolpumpe Ein'; desc = 'per Script erstellt'; // typeAlias = 'boolean'; // oder 'number' // read = "val < 0 ? -val : 0"; // Erkennung "Aus" --> false erfolgt automatisch // write = "val ? String(1) : String(0)"; // role = 'value'; // min = 0; // nur Zahlen // max = 100; // nur Zahlen // unit = '%'; // nur für Zahlen // states = {0: 'Aus', 1: 'Auto', 2: 'Ein'}; // Zahlen (Multistate) oder Logikwert (z.B. Aus/Ein) // custom = []; // verhindert doppelte Ausführung von history, ... // raum = 'EG_Flur'; // Groß-/Kleinschreibung in der ID beachten ! // gewerk = 'Licht'; // Groß-/Kleinschreibung in der ID beachten ! // Ab hier nichts ändern !! function createAlias(idDst, idSrc, idRd) { if(existsState(idDst)) log(idDst + ' schon vorhanden !', 'warn'); else { var obj = {}; obj.type = 'state'; obj.common = getObject(idSrc).common; obj.common.alias = {}; if(idRd) { obj.common.alias.id = {}; obj.common.alias.id.read = idRd; obj.common.alias.id.write = idSrc; obj.common.read = true; } else 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(obj.common.type == 'number') { if(min !== undefined) obj.common.min = min; if(max !== undefined) obj.common.max = max; if(unit) obj.common.unit = unit; } else { if(obj.common.min !== undefined) delete obj.common.min; if(obj.common.max !== undefined) delete obj.common.max; if(obj.common.unit) delete obj.common.unit; } if(states) obj.common.states = states; if(custom && obj.common.custom) obj.common.custom = custom; obj.native = {}; setObject(idDst, obj, function() { if(idRd) setState(idRd, getState(idRd).val, true); else setState(idSrc, getState(idSrc).val, true); }); if(raum && existsObject('enum.rooms.' + raum)) { let obj = getObject('enum.rooms.' + raum) obj.common.members.push(idDst); setObject('enum.rooms.' + raum, obj); } if(gewerk && existsObject('enum.functions.' + gewerk)) { let obj = getObject('enum.functions.' + gewerk) obj.common.members.push(idDst); setObject('enum.functions.' + gewerk, obj); } } } createAlias('alias.0.' + idAlias, idOrigin, idRead);Ach so du meinst das alias.0 --> damit habe ich mich noch nicht beschäftigt. Kommt noch.
Dann ist es das Beste ich mach ein Blockly. Ich schau mal nach dem Skript hier im Forum - Danke schonmal !
Wusste echt nicht dass es NUR mit 0 und 1 klappt.
-
@Segway Verwende ich eigentlich auch nicht, hab mittels Adapter "Geräte" einen Alias angelegt, für meinen Wasserverbrauch, beötige ich um die Kosten für Abwasser zu berechnen.
Du kannst das aber auch manuell anlegen oder das Script verwenden, was hier im Forum zu finden ist, gibt mehrere Möglichkeiten
hier als script musst nur deinen Datenpunkte angeben// Original-Datenpunkt const idOrigin = 'mqtt.0.switch.status'; // Optional: Status-Datenpunkt, wenn Kommando und Status getrennt. // Bei Nicht-Verwendung Leerstring '' zuweisen const idRead = ''; // Alias-Datenpunkt const idAlias = 'Pool.Pumpe.Schalter'; var typeAlias, read, write, nameAlias, role, desc, min, max, unit, states, custom, raum, gewerk; // Folgende kommentieren, wenn keine Änderung der Eigenschaft erforderlich nameAlias = 'Poolpumpe Ein'; desc = 'per Script erstellt'; // typeAlias = 'boolean'; // oder 'number' // read = "val < 0 ? -val : 0"; // Erkennung "Aus" --> false erfolgt automatisch // write = "val ? String(1) : String(0)"; // role = 'value'; // min = 0; // nur Zahlen // max = 100; // nur Zahlen // unit = '%'; // nur für Zahlen // states = {0: 'Aus', 1: 'Auto', 2: 'Ein'}; // Zahlen (Multistate) oder Logikwert (z.B. Aus/Ein) // custom = []; // verhindert doppelte Ausführung von history, ... // raum = 'EG_Flur'; // Groß-/Kleinschreibung in der ID beachten ! // gewerk = 'Licht'; // Groß-/Kleinschreibung in der ID beachten ! // Ab hier nichts ändern !! function createAlias(idDst, idSrc, idRd) { if(existsState(idDst)) log(idDst + ' schon vorhanden !', 'warn'); else { var obj = {}; obj.type = 'state'; obj.common = getObject(idSrc).common; obj.common.alias = {}; if(idRd) { obj.common.alias.id = {}; obj.common.alias.id.read = idRd; obj.common.alias.id.write = idSrc; obj.common.read = true; } else 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(obj.common.type == 'number') { if(min !== undefined) obj.common.min = min; if(max !== undefined) obj.common.max = max; if(unit) obj.common.unit = unit; } else { if(obj.common.min !== undefined) delete obj.common.min; if(obj.common.max !== undefined) delete obj.common.max; if(obj.common.unit) delete obj.common.unit; } if(states) obj.common.states = states; if(custom && obj.common.custom) obj.common.custom = custom; obj.native = {}; setObject(idDst, obj, function() { if(idRd) setState(idRd, getState(idRd).val, true); else setState(idSrc, getState(idSrc).val, true); }); if(raum && existsObject('enum.rooms.' + raum)) { let obj = getObject('enum.rooms.' + raum) obj.common.members.push(idDst); setObject('enum.rooms.' + raum, obj); } if(gewerk && existsObject('enum.functions.' + gewerk)) { let obj = getObject('enum.functions.' + gewerk) obj.common.members.push(idDst); setObject('enum.functions.' + gewerk, obj); } } } createAlias('alias.0.' + idAlias, idOrigin, idRead); -
Ach so du meinst das alias.0 --> damit habe ich mich noch nicht beschäftigt. Kommt noch.
Dann ist es das Beste ich mach ein Blockly. Ich schau mal nach dem Skript hier im Forum - Danke schonmal !
Wusste echt nicht dass es NUR mit 0 und 1 klappt.
-
@crunchip
Verstehe ich es richtig ?
Man kann einen ganz normalen Schalter nicht aufzeigen ob an oder aus ? Bzw nur mit diesem Umweg den Schalter nicht auf True/false sondern 1/0 zu setzen ? Geht das nicht irgendwie in grafana ? -
@crunchip
Verstehe ich es richtig ?
Man kann einen ganz normalen Schalter nicht aufzeigen ob an oder aus ? Bzw nur mit diesem Umweg den Schalter nicht auf True/false sondern 1/0 zu setzen ? Geht das nicht irgendwie in grafana ?@Chrisidonner sichtbar machen in Grafana ist schon möglich, ein true/false kannst dir schon anzeigen lassen, jedoch bei der Farbe spätestens scheitert es, denn wie willst du Thresholds einstellen, da wird eine Zahl erwartet.