Hauptmenü

Heatmap

Begonnen von Pythonf, 28 September 2017, 16:16:21

Vorheriges Thema - Nächstes Thema

Pythonf

Ich hab mittlerweile mehrer Temperatursensoren in der Wohnung, die meisten davon Multisensoren und Heizungen.
Jetzt würde mich interessieren ob es eine Möglichkeit gibt, daraus eine Heatmap für die Wohnung zu erstellen.
In einer einfachen Version könnte man alle Wände ignorieren und radial die Temperatur der einzelnen Sensoren zusammen rechnen. Mir fehlt aber leider jeder Ansatz, wie sich das in FHEM umsetzen liese.
Hat jemand eine Idee?

Beste Grüße
Fabian

ak323

,,Sensor Fusion" ... aktuelles Hypeword in der IoT und Automotive Industrie ...
https://de.m.wikipedia.org/wiki/Informationsfusion
RaspberryPi 2 im 19" Rack mit 16x2 i2c LCD, FHEM, diverse HomeMatic, 1-Wire (8x DS18B20, 3x DS2408, 2x DS2413, 5x DS2401, DS2423 ATTiny) über DS9490R#, Waterkotte Ai1QE (WWPR) Wärmepumpe über Modbus, WH1080 über Signalduino, 433MHz Funksteckdosen, WiFi RGBWW via Tasmota, ...

ChrisK

Da bisher keine Antworten in Richtung "wie sich das in FHEM umsetzen ließe" kam, mal eine allgemeine Idee, vielleicht baut einer was für FHEM draus.

Mit heatmap.js lassen sich per JavaScript Heatmaps erstellen.
Dabei kann man steuern auf welchen Koordinaten, welche Temperaturen zu finden sind.

Im angehängten Bild mal ein Beispiel.

Hier habe ich auf die Schnelle ungefähr an den Stellen, wo meine Thermostate stehen die "points" gesetzt und überall 23°C verwendet (nein, so warm ist es bei uns nicht ;)).
Der Code hierzu:

<script>
$(document).ready(function(){
  var config = {
    container: document.querySelector('#heatmap'),
    radius: 200,
    blur: 1,
    opacity: 0.4
  };
  // minimal heatmap instance configuration
  var heatmapInstance = h337.create(config);
  heatmapInstance.setDataMin(27);
  heatmapInstance.setDataMax(28);

  // now generate some random data
  var points = [];
  var points = [
      {
        name: "Temp1",
        x:200,
        y:100,
        value: 23,
        radius: 400
      },
      {
        name: "Temp2",
        x:360,
        y:40,
        value: 23,
        radius: 100
      },
      {
        name: "Temp3",
        x:360,
        y:10,
        value: 23,
        radius: 50
      },
      {
        name: "Temp4",
        x:550,
        y:100,
        value: 23,
        radius: 100
      },
      {
        name: "Temp5",
        x:550,
        y:80,
        value: 23,
        radius: 100
      },
      {
        name: "Temp6",
        x:650,
        y:120,
        value: 23,
        radius: 150
      },
      {
        name: "Temp7",
        x:650,
        y:80,
        value: 23,
        radius: 150
      },
      {
        name: "Temp8",
        x:680,
        y:100,
        value: 23,
        radius: 150
      },
     
  ];

  // heatmap data format
  var data = {
    min: 20,
    max: 24,
    data: points
  };
  // if you have a set of datapoints always use setData instead of addData
  // for data initialization
  heatmapInstance.setData(data);
});

Wie man sieht, kann man außer den Koordinaten und der Temperatur auch den Radius pro Punkt angeben.
Wahrscheinlich wäre es besser gewesen, die Punkte in die Mitte des jeweiligen Raumes zu setzen, aber damit kann man ja rumspielen.

Die Temperaturen dynamisch auszulesen und in der Heatmap zu platzieren ist wahrscheinlich das einfachste hierbei.
Man müsste erstmal für sich bewerten, ob solch eine Heatmap was bringt (also von wegen Wänder vernachlässigen usw.).