Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Skript Temperaturen basierend auf "Feuchtigkeitsscript" funktioniert nicht ganz

    NEWS

    • Neues Video "KI im Smart Home" - ioBroker plus n8n

    • Neues Video über Aliase, virtuelle Geräte und Kategorien

    • Wir empfehlen: Node.js 22.x

    Skript Temperaturen basierend auf "Feuchtigkeitsscript" funktioniert nicht ganz

    This topic has been deleted. Only users with topic management privileges can see it.
    • T
      tempestas last edited by

      Guten morgen zusammen,

      ich habe basierend auf diesem Skript http://forum.iobroker.net/viewtopic.php?f=21&t=2645 von Solear, Paul, eric und ruhr70 versucht, ein kleineres Skript für Temperaturen zusammen zu schustern.

      Insbesondere dabei hat mich das Thema der Raumprüfung bei Änderung eines Sensors angesprochen.

      Leider funktioniert mein Skript noch nicht ganz, offenbar habe ich das mit der Zustandsänderung eines Senors nicht verstanden. Der Rest funktioniert, DP werden angelegt, beim Start wird alles eingelesen. Soweit ok, aber eben leider noch nicht ganz.

      In dem Skript sind teilweise meine eigenen "für mich" Erklärungen, die ggf sogar falsch sind. Ich lerne noch.

      Ich denke, mein Fehler liegt im Bereich der Funktion "findRoom" (die ich auch ehrlich gesagt noch nicht 100% durchstiegen habe). Beim Rest bilde ich mir ein, es zumindest hinsichtlich der Wirkung verstanden zu haben. Bin für jeden Hinweis dankbar, was ich falsch mache.

      
      // **************************************************************************************************
      //  SKRIPT ZUM AUSWERTEN DER IST-TEMPERATUREN UND SOLL TEMPERATUREN
      //  SCHREIBT WERTE IN ERZEUGTE DATENPUNKTE; DIESE KÖNNEN DANN IN ANDEREN SKRIPTEN GENUTZT WERDEN
      // zusammengeschustert basierend auf dem Feuchtigkeitsskript von Solear, Paul53, ruhr70, eric2905
      // **************************************************************************************************
      
      // ***********************************************************************
      // Einstellungen
      // ***********************************************************************
      var debug = true; // Loggin mit true ein- bzw mit false ausschalten
      // ***********************************************************************
      // Parameter Variablen
      // ***********************************************************************
      var defaultMinTemp = 18.00; // Default TEMP_Minimum, wenn im Raum nicht angegeben (Auskühlschutz, tiefer soll eine Raumtemperatur durchs lüften nicht sinken)
      var pfad = "Raumklima.Temperatur.Raum.";
      var delayRooms = 500;  // Zeit in MS Verzögerung zwischen Berechnungen der Räume
      
      // ***********************************************************************
      // Räume anlegen (Räume werden in Array geschrieben und dann für createState genutzt)
      // ***********************************************************************
          var raeume = { // Keine Leerzeichen (Name wird als Datenpunktname verwendet!)
      
              // Erdgeschoss
      
              "FlurEG" : {
                  "Temp_Ist"              :   "hm-rpc.1.000E57098F208F.1.ACTUAL_TEMPERATURE"/*HmIP Temperatur und Feuchtigkeitsmesser Flur HWR:1.ACTUAL_TEMPERATURE*/,
                  "Temp_Soll"             :   "hm-rpc.1.000E57098F208F.1.SET_POINT_TEMPERATURE"/*HmIP Temperatur und Feuchtigkeitsmesser Flur HWR:1.SET_POINT_TEMPERATURE*/,
                  "TEMP_Minimum"          :   defaultMinTemp, // oder Zieltemperatur in Form von: 20.00 angeben
              },
              "Wohnzimmer" : {
                  "Temp_Ist"              :   "hm-rpc.1.000E57098F207E.1.ACTUAL_TEMPERATURE"/*HmIP Temperatur und Feuchtigkeitsmesser Wohn Ess:1.ACTUAL_TEMPERATURE*/,
                  "Temp_Soll"             :   "hm-rpc.1.000E57098F207E.1.SET_POINT_TEMPERATURE"/*HmIP Temperatur und Feuchtigkeitsmesser Wohn Ess:1.SET_POINT_TEMPERATURE*/,
                  "TEMP_Minimum"          :   defaultMinTemp, // oder Zieltemperatur in Form von: 20.00 angeben
              },   
              "Gaestebad" : {
                  "Temp_Ist"              :   "hm-rpc.0.NEQ1640752.4.ACTUAL_TEMPERATURE"/*Gaestebad Thermostat:4.ACTUAL_TEMPERATURE*/,
                  "Temp_Soll"             :   "hm-rpc.0.NEQ1640752.4.SET_TEMPERATURE"/*Gaestebad Thermostat:4.SET_TEMPERATURE*/,
                  "TEMP_Minimum"          :   defaultMinTemp, // oder Zieltemperatur in Form von: 20.00 angeben
              },   
      
              // Obergeschoss
      
              "Schlafzimmer" : {
                  "Temp_Ist"              :   "hm-rpc.1.000E57098F20A8.1.ACTUAL_TEMPERATURE",
                  "Temp_Soll"             :   "hm-rpc.1.000E57098F20A8.1.SET_POINT_TEMPERATURE"/*HmIP Temperatur und Feuchtigkeitsmesser Schlafzimmer:1.SET_POINT_TEMPERATURE*/,
                  "TEMP_Minimum"          :   defaultMinTemp, // oder Zieltemperatur in Form von: 20.00 angeben
              },
              "BadOG" : {
                  "Temp_Ist"              :   "hm-rpc.1.000393C99A1CDE.1.ACTUAL_TEMPERATURE"/*Badezimmer oben Thermostat Handtuchhalter:1.ACTUAL_TEMPERATURE*/,
                  "Temp_Soll"             :   "hm-rpc.1.000393C99A1CDE.1.SET_POINT_TEMPERATURE"/*Badezimmer oben Thermostat Handtuchhalter:1.SET_POINT_TEMPERATURE*/,
                  "TEMP_Minimum"          :   defaultMinTemp, // oder Zieltemperatur in Form von: 20.00 angeben
              },
          };
      
      // ***********************************************************************
      // Raumvariablen --> werden als Unterpunkte in die createState geschrieben
      // ***********************************************************************
      
       var raumDatenpunkte = {
              "tempSoll" : {
                  "DpName" : "Soll_Temperatur",
                  "init": 0,
                  "dp": {
                      "name": 'Soll Temperatur',
                      "desc": 'manuell eingestellt oder via HM',
                      "type": 'number',
                      "role": 'value',
                      "unit": '°C'
                  }
              },
      
              "tempIst" : {
                  "DpName" : "Ist_Temperatur",
                  "init": 0,
                  "dp": {
                      "name": 'Aktuelle Temperatur',
                      "desc": 'fakt',
                      "type": 'number',
                      "role": 'value',
                      "unit": '°C'
                  }
              }
      };
      // ***********************************************************************
      // Funktionen
      // ***********************************************************************
      
      // finde anhand der Sensor ID einen zugeordneten Raum                        <<<<<<<<<<<<<<<<<< HIER DENKE ICH LIEGT MEIN FEHLER!!
          function findRoom(sensor) {
              for (var raum in raeume) {
                  if (raeume[raum].Temp_Ist == sensor) return raum;
                  if (raeume[raum].Temp_Soll == sensor) return raum;
              }
              return null;
          }
      // Änderung eines Sensors (Temperatur ISt oder Soll)				<<<<<<<<<<<<<<<<< oder hier, aber diese benötigt ja die Function findRoom, d.h. wahrscheinlich dort mein Fehler
          function valChange(obj) {
              var raumname = findRoom(obj.id);
              if (raumname) {
              if(debug) log('**Änderung:' + raumname + ": " + obj.id + ": " + obj.state.val + '**');
                  calcDelayed(raumname, delayRooms);
              }
          }
      // Berechnung verzögern, damit die Räume nacheinander abgearbeitet werden
          function calcDelayed(raum, delay) {
              setTimeout(function () {
                  calc(raum);
              }, delay || 0);
          }
      
      // Berechnung    
          function calc(raum) {                                          
              var ist     = getState(raeume[raum].Temp_Ist).val;   // Temperatur IST auslesen
              var soll    = getState(raeume[raum].Temp_Soll).val;    // Temperatur SOLL auslesen
      
              if(debug) log("Temperatur IST in "+raum +" beträgt "+ist);
              if(debug) log("Temperatur Soll in "+raum +" beträgt "+soll);        
      
              var idSoll  = pfad + raum + "."+raumDatenpunkte['tempSoll'].DpName;   // Pfad für nachfolgendes setState zusammenbauen
              var idIst   = pfad + raum + "."+raumDatenpunkte['tempIst'].DpName;
      
              setState(idSoll, soll);
              setState(idIst, ist);
      }    
      
      // Berechnung    
          function calcAll() {
              for (var raum in raeume) {
                  calcDelayed(raum,delayRooms);       // Räume verzögert nacheinander abarbeiten
              }
          }    
      
      // Anlegen der Datenpunkte  --> legt Datenpunkte an mit Raum(name) und den Sub-Dps
          function createDp() {
              var name;
              var init;
              var forceCreation;
              var common;
              for (var raum in raeume) {
                  for (var datenpunktID in raumDatenpunkte) {
                      name = pfad + raum + "." + raumDatenpunkte[datenpunktID].DpName;
                      init = raumDatenpunkte[datenpunktID].init;
                      forceCreation = false; // Init der Datenpunkte wird nur beim ersten Star angelegt. Danach bleiben die Wert auch nach Skritpstart enthalten.
                      common = raumDatenpunkte[datenpunktID].dp;
                      createState(name, init , forceCreation, common);
                      if(debug) log("neuer Datenpunkt: " + name);
                  }
              }
          }
      
      // START
      createDp();                     // Datenpunkte anlegen
      setTimeout(calcAll,    3000);  // Zum Skriptstart ausführen
      
      
      1 Reply Last reply Reply Quote 0
      • First post
        Last post

      Support us

      ioBroker
      Community Adapters
      Donate

      454
      Online

      32.1k
      Users

      80.7k
      Topics

      1.3m
      Posts

      1
      1
      476
      Loading More Posts
      • Oldest to Newest
      • Newest to Oldest
      • Most Votes
      Reply
      • Reply as topic
      Log in to reply
      Community
      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
      The ioBroker Community 2014-2023
      logo