Aqara/Zigbee-Sensoren Linkquality in %

Hy zusammen :)

Ich habe einige Aqara-Sensoren laufen und bin ja ein Freund von %-Werten bei Verbindungsanzeigen....
Deswegen habe ich mir mal die Mühe gemacht, die 0-255 lqi Werte von Aqara in %-Werte umzuwandeln und dachte mir, vielleicht kanns ja jemand brauchen, ich lad es hier mal hoch :)

Kurz zum Aufbau:
Ich habe in meiner configuration.yaml so ziemlich alles ausgelagert, also auch die Template-Sensoren:
Code:
template: !include_dir_list templates/

In dem Verzeichnis /templates habe ich mir für jeden Aqara-Sensor eine eigene Datei angelegt, z.B. zigbee_tuersensor1.yaml

Der Inhalt dieser Datei ist folgender:
Code:
sensor:
  name: "Neuer_Name_für_den_Wert_in_Prozent"
  state_class: "measurement"
  unit_of_measurement: "%"
  icon: mdi:signal
  state: >
    {% set lqi = states('Original-Entität_des_Wertes_in_LQI') | float %}
      {% if   lqi == 0 %} 0
      {% elif lqi == 1 %} 0
      {% elif lqi == 2 %} 1
      {% elif lqi == 3 %} 1
      {% elif lqi == 4 %} 2
      {% elif lqi == 5 %} 2
      {% elif lqi == 6 %} 2
      {% elif lqi == 7 %} 3
      {% elif lqi == 8 %} 3
      {% elif lqi == 9 %} 4
      {% elif lqi == 10 %} 4
      {% elif lqi == 11 %} 4
      {% elif lqi == 12 %} 5
      {% elif lqi == 13 %} 5
      {% elif lqi == 14 %} 5
      {% elif lqi == 15 %} 6
      {% elif lqi == 16 %} 6
      {% elif lqi == 17 %} 7
      {% elif lqi == 18 %} 7
      {% elif lqi == 19 %} 7
      {% elif lqi == 20 %} 8
      {% elif lqi == 21 %} 8
      {% elif lqi == 22 %} 9
      {% elif lqi == 23 %} 9
      {% elif lqi == 24 %} 9
      {% elif lqi == 25 %} 10
      {% elif lqi == 26 %} 10
      {% elif lqi == 27 %} 11
      {% elif lqi == 28 %} 11
      {% elif lqi == 29 %} 11
      {% elif lqi == 30 %} 12
      {% elif lqi == 31 %} 12
      {% elif lqi == 32 %} 13
      {% elif lqi == 33 %} 13
      {% elif lqi == 34 %} 13
      {% elif lqi == 35 %} 14
      {% elif lqi == 36 %} 14
      {% elif lqi == 37 %} 15
      {% elif lqi == 38 %} 15
      {% elif lqi == 39 %} 15
      {% elif lqi == 40 %} 16
      {% elif lqi == 41 %} 16
      {% elif lqi == 42 %} 16
      {% elif lqi == 43 %} 17
      {% elif lqi == 44 %} 17
      {% elif lqi == 45 %} 18
      {% elif lqi == 46 %} 18
      {% elif lqi == 47 %} 18
      {% elif lqi == 48 %} 19
      {% elif lqi == 49 %} 19
      {% elif lqi == 50 %} 20
      {% elif lqi == 51 %} 20
      {% elif lqi == 52 %} 20
      {% elif lqi == 53 %} 21
      {% elif lqi == 54 %} 21
      {% elif lqi == 55 %} 22
      {% elif lqi == 56 %} 22
      {% elif lqi == 57 %} 22
      {% elif lqi == 58 %} 23
      {% elif lqi == 59 %} 23
      {% elif lqi == 60 %} 24
      {% elif lqi == 61 %} 24
      {% elif lqi == 62 %} 24
      {% elif lqi == 63 %} 25
      {% elif lqi == 64 %} 25
      {% elif lqi == 65 %} 25
      {% elif lqi == 66 %} 26
      {% elif lqi == 67 %} 26
      {% elif lqi == 68 %} 27
      {% elif lqi == 69 %} 27
      {% elif lqi == 70 %} 27
      {% elif lqi == 71 %} 28
      {% elif lqi == 72 %} 28
      {% elif lqi == 73 %} 29
      {% elif lqi == 74 %} 29
      {% elif lqi == 75 %} 29
      {% elif lqi == 76 %} 30
      {% elif lqi == 77 %} 30
      {% elif lqi == 78 %} 31
      {% elif lqi == 79 %} 31
      {% elif lqi == 80 %} 31
      {% elif lqi == 81 %} 32
      {% elif lqi == 82 %} 32
      {% elif lqi == 83 %} 33
      {% elif lqi == 84 %} 33
      {% elif lqi == 85 %} 33
      {% elif lqi == 86 %} 34
      {% elif lqi == 87 %} 34
      {% elif lqi == 88 %} 35
      {% elif lqi == 89 %} 35
      {% elif lqi == 90 %} 35
      {% elif lqi == 91 %} 36
      {% elif lqi == 92 %} 36
      {% elif lqi == 93 %} 36
      {% elif lqi == 94 %} 37
      {% elif lqi == 95 %} 37
      {% elif lqi == 96 %} 38
      {% elif lqi == 97 %} 38
      {% elif lqi == 98 %} 38
      {% elif lqi == 99 %} 39
      {% elif lqi == 100 %} 39
      {% elif lqi == 101 %} 40
      {% elif lqi == 102 %} 40
      {% elif lqi == 103 %} 40
      {% elif lqi == 104 %} 41
      {% elif lqi == 105 %} 41
      {% elif lqi == 106 %} 42
      {% elif lqi == 107 %} 42
      {% elif lqi == 108 %} 42
      {% elif lqi == 109 %} 43
      {% elif lqi == 110 %} 43
      {% elif lqi == 111 %} 44
      {% elif lqi == 112 %} 44
      {% elif lqi == 113 %} 44
      {% elif lqi == 114 %} 45
      {% elif lqi == 115 %} 45
      {% elif lqi == 116 %} 45
      {% elif lqi == 117 %} 46
      {% elif lqi == 118 %} 46
      {% elif lqi == 119 %} 47
      {% elif lqi == 120 %} 47
      {% elif lqi == 121 %} 47
      {% elif lqi == 122 %} 48
      {% elif lqi == 123 %} 48
      {% elif lqi == 124 %} 49
      {% elif lqi == 125 %} 49
      {% elif lqi == 126 %} 49
      {% elif lqi == 127 %} 50
      {% elif lqi == 128 %} 50
      {% elif lqi == 129 %} 51
      {% elif lqi == 130 %} 51
      {% elif lqi == 131 %} 51
      {% elif lqi == 132 %} 52
      {% elif lqi == 133 %} 52
      {% elif lqi == 134 %} 53
      {% elif lqi == 135 %} 53
      {% elif lqi == 136 %} 53
      {% elif lqi == 137 %} 54
      {% elif lqi == 138 %} 54
      {% elif lqi == 139 %} 55
      {% elif lqi == 140 %} 55
      {% elif lqi == 141 %} 55
      {% elif lqi == 142 %} 56
      {% elif lqi == 143 %} 56
      {% elif lqi == 144 %} 56
      {% elif lqi == 145 %} 57
      {% elif lqi == 146 %} 57
      {% elif lqi == 147 %} 58
      {% elif lqi == 148 %} 58
      {% elif lqi == 149 %} 58
      {% elif lqi == 150 %} 59
      {% elif lqi == 151 %} 59
      {% elif lqi == 152 %} 60
      {% elif lqi == 153 %} 60
      {% elif lqi == 154 %} 60
      {% elif lqi == 155 %} 61
      {% elif lqi == 156 %} 61
      {% elif lqi == 157 %} 62
      {% elif lqi == 158 %} 62
      {% elif lqi == 159 %} 62
      {% elif lqi == 160 %} 63
      {% elif lqi == 161 %} 63
      {% elif lqi == 162 %} 64
      {% elif lqi == 163 %} 64
      {% elif lqi == 164 %} 64
      {% elif lqi == 165 %} 65
      {% elif lqi == 166 %} 65
      {% elif lqi == 167 %} 65
      {% elif lqi == 168 %} 66
      {% elif lqi == 169 %} 66
      {% elif lqi == 170 %} 67
      {% elif lqi == 171 %} 67
      {% elif lqi == 172 %} 67
      {% elif lqi == 173 %} 68
      {% elif lqi == 174 %} 68
      {% elif lqi == 175 %} 69
      {% elif lqi == 176 %} 69
      {% elif lqi == 177 %} 69
      {% elif lqi == 178 %} 70
      {% elif lqi == 179 %} 70
      {% elif lqi == 180 %} 71
      {% elif lqi == 181 %} 71
      {% elif lqi == 182 %} 71
      {% elif lqi == 183 %} 72
      {% elif lqi == 184 %} 72
      {% elif lqi == 185 %} 73
      {% elif lqi == 186 %} 73
      {% elif lqi == 187 %} 73
      {% elif lqi == 188 %} 74
      {% elif lqi == 189 %} 74
      {% elif lqi == 190 %} 75
      {% elif lqi == 191 %} 75
      {% elif lqi == 192 %} 75
      {% elif lqi == 193 %} 76
      {% elif lqi == 194 %} 76
      {% elif lqi == 195 %} 76
      {% elif lqi == 196 %} 77
      {% elif lqi == 197 %} 77
      {% elif lqi == 198 %} 78
      {% elif lqi == 199 %} 78
      {% elif lqi == 200 %} 78
      {% elif lqi == 201 %} 79
      {% elif lqi == 202 %} 79
      {% elif lqi == 203 %} 80
      {% elif lqi == 204 %} 80
      {% elif lqi == 205 %} 80
      {% elif lqi == 206 %} 81
      {% elif lqi == 207 %} 81
      {% elif lqi == 208 %} 82
      {% elif lqi == 209 %} 82
      {% elif lqi == 210 %} 82
      {% elif lqi == 211 %} 83
      {% elif lqi == 212 %} 83
      {% elif lqi == 213 %} 84
      {% elif lqi == 214 %} 84
      {% elif lqi == 215 %} 84
      {% elif lqi == 216 %} 85
      {% elif lqi == 217 %} 85
      {% elif lqi == 218 %} 85
      {% elif lqi == 219 %} 86
      {% elif lqi == 220 %} 86
      {% elif lqi == 221 %} 87
      {% elif lqi == 222 %} 87
      {% elif lqi == 223 %} 87
      {% elif lqi == 224 %} 88
      {% elif lqi == 225 %} 88
      {% elif lqi == 226 %} 89
      {% elif lqi == 227 %} 89
      {% elif lqi == 228 %} 89
      {% elif lqi == 229 %} 90
      {% elif lqi == 230 %} 90
      {% elif lqi == 231 %} 91
      {% elif lqi == 232 %} 91
      {% elif lqi == 233 %} 91
      {% elif lqi == 234 %} 92
      {% elif lqi == 235 %} 92
      {% elif lqi == 236 %} 93
      {% elif lqi == 237 %} 93
      {% elif lqi == 238 %} 93
      {% elif lqi == 239 %} 94
      {% elif lqi == 240 %} 94
      {% elif lqi == 241 %} 95
      {% elif lqi == 242 %} 95
      {% elif lqi == 243 %} 95
      {% elif lqi == 244 %} 96
      {% elif lqi == 245 %} 96
      {% elif lqi == 246 %} 96
      {% elif lqi == 247 %} 97
      {% elif lqi == 248 %} 97
      {% elif lqi == 249 %} 98
      {% elif lqi == 250 %} 98
      {% elif lqi == 251 %} 98
      {% elif lqi == 252 %} 99
      {% elif lqi == 253 %} 99
      {% elif lqi == 254 %} 100
      {% elif lqi == 255 %} 100
      {% endif %}

Es müssen nur die beiden Werte angepasst werden, dann speichern, einmal über Entwicklerwerkzeuge -> Neuladen der YAML-Konfiguration -> Template-Entitäten neu einlesen/laden und schon sollte der Wert in % vorhanden sein :)

Greetz
Günni
 
Ziemlich Aufwendig. Warum berechnest Du die Werte nicht einfach ?
Prozent = Runden(100 / maxWert * Meßwert)
Beispiele:
11 Prozent = Runden(100 / 255 * 11) = 4
25 Prozent = Runden(100 / 255 * 25) = 10
26 Prozent = Runden(100 / 255 * 25) = 10
27 Prozent = Runden(100 / 255 * 25) = 11
Das Runden sorgt dafür, das alle Nachkommastellen aufgerundet werden.


Code:
sensor:
  name: "Neuer_Name_für_den_Wert_in_Prozent"
  state_class: "measurement"
  unit_of_measurement: "%"
  icon: mdi:signal
  state: >
    {{ 100 / 2000 * states('Original-Entität_des_Wertes_in_LQI') | float | round(-1) }}

Wenn ich mich jetzt nicht grundlegend vertan habe, sollte dieser Code das selbe ausspucken, wie dein Code.
 
Warum ichs nicht berechne? Weil ich da
a) nicht dran gedacht habe und
b) es wohl nicht hinbekommen hätte 😂

Ich habe deinen Code mal ausprobiert, es kommt gut in die Richtung, allerdings bekomme ich einen Wert mit vielen Nachkommastellen?
Oben mein Wert, unten dein Wert
IMG_6971.jpeg

Wie kann ich das jetzt noch so ändern, dass auf die nächstgrössere Zahl aufgerundet wird?

Greetz
Günni
 
Ja, da habe ich was falsch gemacht. Und nein u5zzug, ein einfaches round(0) hilft in diesem Beispiel nicht.
Das round bezog sich in meinem Beispiel Code nur auf den Wert des Sensor.
Code:
sensor:
  name: "Neuer_Name_für_den_Wert_in_Prozent"
  state_class: "measurement"
  unit_of_measurement: "%"
  icon: mdi:signal
  state: >
    {{ (100 / 2000 * states('Original-Entität_des_Wertes_in_LQI')) | float | round(0) }}
So sollte es dann aber klappen. Wir setzen die ganze Berechnung in Klammern, damit gilt das round dann für das Ergebnis der Berechnung.
 
Hmmmm

Also ich denke, du meinst am Anfang 100/255 (da die Aqara-Sensoren ja eine Range von 0-255 haben und nicht bis 2000) und ich bekomme ein "unavailable" als Rückgabe....
 
Ähm, ja klar. Sorry, ich hatte bei mir die 2000 genommen, weil ich zum testen nen anderen Sensor verwendet hatte.
 
aber es bleibt das „unavailable“….

Hab schon versucht, die Klammern anders zu setzen, aber ich find den Fehler nicht….
 
Puh, jetzt bringst Du mich ins Schwitzen. Aber ja, ich kann den Fehler reproduzieren.
Ich hatte die Formel oben mit festen Zahlen getestet und dann anstelle der letzten Zahl den Sensor eingesetzt. War aber falsch.
Code:
sensor:
  name: "Neuer_Name_für_den_Wert_in_Prozent"
  state_class: "measurement"
  unit_of_measurement: "%"
  icon: mdi:signal
  state: >
    {{ (100 / 255 * (states('Original-Entität_des_Wertes_in_LQI')) | float(0)) | round(0) }}
So, ich hoffe, jetzt passt es.
Zur Erklärung. Das float(0) bezog sich nur auf den Sensor, aber wohl nicht auf das ganze. Das habe ich jetzt durch die zusätzlichen Klammern hoffentlich hin bekommen.
Das ist auch für mich Neuland, also sorry, wenn ich es nicht auf Anhieb hinbekommen habe.
 
Jetzt passt es :) Super, vielen Dank :)

Vielleicht hilft es ja noch jemand anderem :)

Entschuldigen musst du dich für gar nichts, vielen Dank, dass du so geholfen hast :)

Greetz
Günni
 
Weißt was ? Hab ich gerne gemacht, weil ich dabei nämlich auch wieder ein wenig über HomeAssistant gelernt habe. ;)
 

Zurzeit aktive Besucher

Keine Mitglieder online.

Letzte Anleitungen

Statistik des Forums

Themen
4.632
Beiträge
47.405
Mitglieder
4.282
Neuestes Mitglied
MrNico_
Zurück
Oben