Windrichtung (als Text ausgeben)

Jetzt habe ich es auf %f umgestellt und leider das nächste Problem:

In der Konsole wird der Wert nun zwar angezeigt, jedoch mit zwei Nachkommastellen. Und im Webfront mit 6 Nachkommastellen :frowning:

Help :slight_smile:

Selbst rausgefunden: %.01f heißt das Zauberwort und schon gehts…

Hallo Gemeinde,

wer wie ich auch daran interessiert ist, welche absoluten Luftfeuchtewerte und Taupunkte etc. an seinen Messorten/-geräten gerade herrschen, kann das mit diesem Script tun. Einfach ein neues Script innerhalb seines Sensors angelegen, einfach hineinkopieren und dann einfach ausgeführen.
Das Script läuft ab IPS V2.5, da hier Idents benutzt werden. Zur Zeit werden nur HomeMatic und HMS-Geräte unterstützt. Kann aber leicht erweitert werden.

Ablauf ist folgender (bei Dummy-Instanz erstellen = false):
Es wird geprüft, ob Temperatur und rel. Luftfeuchte-Variablen existieren, wenn ja, dann werden ein Haufen neue Variablen angelegt, Script versteckt, Ereignisse bei Änderung der beiden Variablen angelegt. Ändert sich nun die Temp. oder die rel. Luftfeuchte, werden alle Variablen automatisch aktualisiert. Wer nicht alle will löscht diese Variablen einfach. Bei Dummy-Instanz erstellen wird alles wie im Script beschrieben ausgeführt.

<?php
/******************************************************************************
* Script-Name: Klimaberechnung neu.php                                        *
* Autor: McKevin                                                              *
* Version: 3.2                                                                *
* Erstellt am: 2011-03-22                                                     *
* Letzte Änderung am: 2012-10-12                                              *
* Beschreibung: Berechnet anhand der Temperatur- und Luftfeuchte eines Raumes *
*               die abs. Luftfeuchte und speichert diesen Wert in eine Var. ab*
* Changelog:   V1.0 (2011-03-22) Initial Release                              *
*              V1.1 (2011-10-05) Änderung der VariablenIDs                    *
*              V1.2 (2012-09-30) Diesen Header eingefügt. Includescript aus-  *
*                                gelagert (Einzeiler)                         *
*              V2.0 (2012-10-07) Umstellung auf Idents, kein Anpassungsaufwand*
*                                            und mit Installer für Neugeräte              *
*              V3.0 (2012-10-09) Umbau von nur HomeMatic auch auf HMS-Geräte  *
*                                            und später evtl. andere Hersteller                *
*              V3.1 (2012-10-11) Bugfix HMS-Geräte Werte aktualisieren nicht  *
*              V3.2 (2012-10-12) Code-Reduzierung bei ModulID-Bestimmung      *
******************************************************************************/
include_once "Klimaberechnung.inc.php";
/***** Informationsbereich ***************************************************/
// Installer - Einfach Scriptinhalt in ein neues Script kopieren, Script im
// HM-Klimagerät platzieren und ausführen. Es werden automatisch Variablen für
// absolute Luftfeuchte, Sättigungsdampfdruck, Taupunkt und Dampfdruck angelegt.
// Weiterhin kann ein Dummy-Modul "Raumklima" angelegt und mit den ganzen Vars
// als Links sortiert gefüttert werden. Anpassungen kann einfach durch Löschen/
// Auskommentieren von Variablen und Links durchgeführt werden. Auch werden
// Trigger angelegt. Script und Klimagerät wird versteckt nach Wunsch.
/***** Konfigurationsbereich *************************************************/
$create_dummy = true; // Soll ein Dummy-Modul "Raumklima" erstellt werden und HM-Device versteckt werden?
/***** Scriptbereich *********************************************************/
$deviceID = IPS_GetParent($_IPS['SELF']); // ObjektID der Klimasensors (HM-CC-TC, HM-WDS10-TH-O, HM-WDS100-C6-O) mit Temperatur und rel. Luftfeuchte
if ($deviceID > 0) // wenn Script nicht im Root abgelegt ist, dann
{
    if (IPS_InstanceExists($deviceID)) // wenn Parent-Objekt eine Instanz ist
    {
        $device = IPS_GetInstance($deviceID); // hole Modul-ID der Instanz
        switch ($device['ModuleInfo']['ModuleID'])
        {
           case "{2FD7576A-D2AD-47EE-9779-A502F23CABB3}": // HMS-Device
                $tempID = @IPS_GetObjectIDByIdent("Variable1", $deviceID); // hole ObjektID der Temperatur
                $humID = @IPS_GetObjectIDByIdent("Variable2", $deviceID); // hole ObjektID der rel. Luftfeuchte
               break;
           case "{EE4A81C6-5C90-4DB7-AD2F-F6BBD521412E}": // HomeMatic-Device
                $tempID = @IPS_GetObjectIDByIdent("TEMPERATURE", $deviceID); // hole ObjektID der Temperatur
                $humID = @IPS_GetObjectIDByIdent("HUMIDITY", $deviceID); // hole ObjektID der rel. Luftfeuchte
               break;
            // Hier neue Sensor-Geräte mittels case "ModulID": nachtragen und Kommentierung entfernen
//           case "{EE4A81C6-5C90-4DB7-AD2F-F6BBD521412E}": // HomeMatic-Device
//                $tempID = @IPS_GetObjectIDByIdent("TEMPERATURE", $deviceID); // hole ObjektID der Temperatur
//                $humID = @IPS_GetObjectIDByIdent("HUMIDITY", $deviceID); // hole ObjektID der rel. Luftfeuchte
//               break;
           default:
                IPS_LogMessage($_IPS['SELF'], "Script befindet sich nicht in einem Klimagerät. Installation abgebrochen!");
                break;
        };
    }; // end if (IPS_InstanceExists($deviceID))
}
else
{
    IPS_LogMessage($_IPS['SELF'], "Script befindet sich im Root-Verzeichnis und nicht in einem HM-Klimagerät. Installation abgebrochen!");
}; // end else if ($deviceID > 0)

// Installerabschnitt - nur bei Ausführung
if ($_IPS['SENDER'] == "Execute")
{
    if (!($tempID == false)) // wenn Temperatur-Variable existiert
    {
        if (!($humID == false)) // wenn rel-Luftfeuchte-Variable existiert
        {
           $abshumID = @IPS_GetObjectIDByIdent("ABS_HUMIDITY", $deviceID); // hole ObjektID der abs. Luftfeuchte
           if ($abshumID == false) // wenn abs. Luftfeuchte-Variable nicht existiert, dann
           {
              $abshumID = IPS_CreateVariable(2); // lege Float-Variable an
              IPS_SetParent($abshumID, $deviceID); // Verschiebe in Instanz
              IPS_SetIdent($abshumID, "ABS_HUMIDITY"); // gib ihr ein Ident
              IPS_SetName($abshumID, "abs. Luftfeuchte"); // benenne sie
            if (!IPS_VariableProfileExists("absHumidity")) // wenn Variablenprofil nicht existiert, dann
                {
                    IPS_CreateVariableProfile("absHumidity", 2); // erstelle Variablenprofil vom Typ Float
                    IPS_SetVariableProfileText("absHumidity", "", "g/cm³"); // weise dem Var-Profil ein Suffix zu
                    // weise dem Var-Profil ein Icon zu???
              };
              IPS_SetVariableCustomProfile($abshumID, "absHumidity");// weise Variablenprofil zu
              IPS_SetVariableCustomAction($abshumID, 1); // deaktiviere die Standard-Aktion, da nur anzeigende Funktion
           }; // end if ($abhumID == false)

           $dewpointID = @IPS_GetObjectIDByIdent("DEWPOINT", $deviceID); // hole ObjektID des Taupunkts
           if ($dewpointID == false) // wenn Taupunkt-Variable nicht existiert, dann
           {
              $dewpointID = IPS_CreateVariable(2); // lege Float-Variable an
              IPS_SetParent($dewpointID, $deviceID); // Verschiebe in Instanz
              IPS_SetIdent($dewpointID, "DEWPOINT"); // gib ihr ein Ident
              IPS_SetName($dewpointID, "Taupunkt"); // benenne sie
              IPS_SetVariableCustomProfile($dewpointID, "~Temperature");// weise Variablenprofil zu
              IPS_SetVariableCustomAction($dewpointID, 1); // deaktiviere die Standard-Aktion, da nur anzeigende Funktion
           }; // end if ($dewpointID == false)

           $vaporpressID = @IPS_GetObjectIDByIdent("VAPOR_PRESSURE", $deviceID); // hole ObjektID des Dampfdrucks
           if ($vaporpressID == false) // wenn Dampfdruck-Variable nicht existiert, dann
           {
              $vaporpressID = IPS_CreateVariable(2); // lege Float-Variable an
              IPS_SetParent($vaporpressID, $deviceID); // Verschiebe in Instanz
              IPS_SetIdent($vaporpressID, "VAPOR_PRESSURE"); // gib ihr ein Ident
              IPS_SetName($vaporpressID, "Dampfdruck"); // benenne sie

            if (!IPS_VariableProfileExists("AirPressure")) // wenn Variablenprofil nicht existiert, dann
                {
                    IPS_CreateVariableProfile("AirPressure", 2); // erstelle Variablenprofil vom Typ Float
                    IPS_SetVariableProfileText("AirPressure", "", "hPa"); // weise dem Var-Profil ein Suffix zu
                    // weise dem Var-Profil ein Icon zu???
              };
              IPS_SetVariableCustomProfile($vaporpressID, "AirPressure");// weise Variablenprofil zu
              IPS_SetVariableCustomAction($vaporpressID, 1); // deaktiviere die Standard-Aktion, da nur anzeigende Funktion
           }; // end if ($vaporpressID == false)

           $saturvaporID = @IPS_GetObjectIDByIdent("SATURATION_VAPOR_PRESSURE", $deviceID); // hole ObjektID des Sättigungsdampfdrucks
           if ($saturvaporID == false) // wenn Sättigungsdampfdruck-Variable nicht existiert, dann
           {
              $saturvaporID = IPS_CreateVariable(2); // lege Float-Variable an
              IPS_SetParent($saturvaporID, $deviceID); // Verschiebe in Instanz
              IPS_SetIdent($saturvaporID, "SATURATION_VAPOR_PRESSURE"); // gib ihr ein Ident
              IPS_SetName($saturvaporID, "Sättigungsdampfdruck"); // benenne sie
            if (!IPS_VariableProfileExists("AirPressure")) // wenn Variablenprofil nicht existiert, dann
                {
                    IPS_CreateVariableProfile("AirPressure", 2); // erstelle Variablenprofil vom Typ Float
                    IPS_SetVariableProfileText("AirPressure", "", "hPa"); // weise dem Var-Profil ein Suffix zu
                    // weise dem Var-Profil ein Icon zu???
              };
              IPS_SetVariableCustomProfile($saturvaporID, "AirPressure");// weise Variablenprofil zu
              IPS_SetVariableCustomAction($saturvaporID, 1); // deaktiviere die Standard-Aktion, da nur anzeigende Funktion
           }; // end if ($saturvaporID == false)

            if ($create_dummy)
            {
                $categoryID = IPS_GetParent($deviceID);      //hole ObjektID der Kategorie, in dem Klimagerät ist
                $dummyID = IPS_CreateInstance("{485D0419-BE97-4548-AA9C-C083EB82E61E}"); // erstelle Dummy-Module
              IPS_SetParent($dummyID, $categoryID);             //verschiebe in Kategorie des Raumes
              IPS_SetName($dummyID, "Raumklima");             //benenne Modul

                $LinkID = IPS_CreateLink();                     //Link anlegen
              IPS_SetParent($LinkID, $dummyID);                 //Verschiebe in Raumklima
                IPS_SetName($LinkID, "Temperatur");                //Link benennen
                IPS_SetLinkChildID($LinkID, $tempID);             //Link verknüpfen

                $LinkID = IPS_CreateLink();                     //Link anlegen
              IPS_SetParent($LinkID, $dummyID);                 //Verschiebe in Raumklima
                IPS_SetName($LinkID, "rel. Luftfeuchte");        //Link benennen
                IPS_SetLinkChildID($LinkID, $humID);             //Link verknüpfen

                $LinkID = IPS_CreateLink();                     //Link anlegen
              IPS_SetParent($LinkID, $dummyID);                 //Verschiebe in Raumklima
                IPS_SetName($LinkID, "abs. Luftfeuchte");        //Link benennen
                IPS_SetLinkChildID($LinkID, $abshumID);         //Link verknüpfen

                $LinkID = IPS_CreateLink();                     //Link anlegen
              IPS_SetParent($LinkID, $dummyID);                 //Verschiebe in Raumklima
                IPS_SetName($LinkID, "Taupunkt");                //Link benennen
                IPS_SetLinkChildID($LinkID, $dewpointID);     //Link verknüpfen

                $LinkID = IPS_CreateLink();                     //Link anlegen
              IPS_SetParent($LinkID, $dummyID);                 //Verschiebe in Raumklima
                IPS_SetName($LinkID, "Dampfdruck");                //Link benennen
                IPS_SetLinkChildID($LinkID, $vaporpressID);    //Link verknüpfen

                $LinkID = IPS_CreateLink();                     //Link anlegen
              IPS_SetParent($LinkID, $dummyID);                 //Verschiebe in Raumklima
                IPS_SetName($LinkID, "Sättigungsdampfdruck");//Link benennen
                IPS_SetLinkChildID($LinkID, $saturvaporID);     //Link verknüpfen

                IPS_SetHidden($deviceID, true);                    //verstecke HM-Sensorgerät
            };
            IPS_SetHidden($_IPS['SELF'], true);                //verstecke Script
            $eid = IPS_CreateEvent(0);                            //erstelle Trigger
            IPS_SetEventTrigger($eid, 1, $tempID);         //Bei Änderung von Temperatur-Variable
            IPS_SetParent($eid, $_IPS['SELF']);             //Ereignis zuordnen
            IPS_SetEventActive($eid, true);                    //Ereignis aktivieren
            //erstelle Trigger OnChange für rel. Luftfeuchte auf Script
            $eid = IPS_CreateEvent(0);                            //erstelle Trigger
            IPS_SetEventTrigger($eid, 1, $humID);             //Bei Änderung von rel.Hum-Variable
            IPS_SetParent($eid, $_IPS['SELF']);             //Ereignis zuordnen
            IPS_SetEventActive($eid, true);                    //Ereignis aktivieren
        }
        else
        {
            IPS_LogMessage($_IPS['SELF'], "Script befindet sich nicht in einem Klimagerät mit Luftfeuchte-Variablen. Installation abgebrochen!");
        }; // end else if (!($humID == false))
    }
    else
    {
        IPS_LogMessage($_IPS['SELF'], "Script befindet sich nicht in einem Klimagerät mit Temperatur-Variablen. Installation abgebrochen!");
    }; // end else if (!($tempID == false))
}; // end if ($_IPS['SENDER'] == "Execute")

// Variablenchangeabschnitt - wenn durch Variablenänderung getriggert
if ($_IPS['SENDER'] == "Variable")
{
    if (!($tempID === false)) // wenn Variable existiert
    {
        $temperatur = GetValue($tempID); // Hole Temperaturwert
        if (!($humID === false)) // wenn ObjektID geholt werden konnte
        {
            $relfeuchte = GetValue($humID); // hole relative Luftfeuchtewert
            $absfeuchte = AbsoluteFeuchte($temperatur, $relfeuchte); // berechne absolute Luftfeuchte
            $abshumID = @IPS_GetObjectIDByIdent("ABS_HUMIDITY", $deviceID); // hole ObjektID der abs. Luftfeuchte
            if (!($abshumID === false)) // wenn ObjektID geholt werden konnte
            {
                SetValueFloat($abshumID, $absfeuchte); // setze Absolute Luftfeuchte auf neuen Wert
                $dewpointID = @IPS_GetObjectIDByIdent("DEWPOINT", $deviceID); // hole ObjektID von Taupunkt
                if (!($dewpointID === false)) // wenn ObjektID geholt werden konnte
                {
                    $taupunkt = Taupunkt($temperatur, $relfeuchte); // berechne Taupunkt
                    SetValueFloat($dewpointID, $taupunkt); // setze Taupunkt auf neuen Wert
                };

                $vaporpressID = @IPS_GetObjectIDByIdent("VAPOR_PRESSURE", $deviceID); // hole ObjektID von Taupunkt
                if (!($vaporpressID === false)) // wenn ObjektID geholt werden konnte
                {
                    $dampfdruck = DampfDruck($temperatur, $relfeuchte); // berechne Dampfdruck
                    SetValueFloat($vaporpressID, $dampfdruck); // setze Dampfdruck auf neuen Wert
                };
            }; // if (!($abshumID === false))
        }; // if (!($humID === false))
        $saturvaporID = @IPS_GetObjectIDByIdent("SATURATION_VAPOR_PRESSURE", $deviceID); // hole ObjektID von Sättigungsdampfdruck
        if (!($saturvaporID === false)) // wenn ObjektID geholt werden konnte
        {
            $sattdampfdruck = SaettigungsDampfDruck($temperatur);
            SetValueFloat($saturvaporID, $sattdampfdruck); // setze Sättigungsdampfdruck auf neuen Wert
        };
    }; // if (!($tempID === false))
}; // if ($_IPS['SENDER'] == "Variable")
?>

Grüße Kevin