Homematic IP Wettersensor - plus

Hallo zusammen,

kann mir jemand helfen wo ich die gelb markierten Werte finde und ins Symcon übertragen bekomme`?

Bekomme nur das hier ins Symcon:

Hallo,

da musst du in der CCU die unsichtbaren Systemvariablen mittels Script sichtbar machen und dem Gerät zuordnen.

Eleganter finde ich es über ein IPS Script.

Das Scrypt für die CCU

! Systemvariablen Wechslerscript internal 
! v0.1 (c) by Alchy 
object oSV= (dom.GetObject(ID_SYSTEM_VARIABLES)).Get("svHmIPRainCounterOldVal3_1815"); 
if(oSV) { 
if(oSV.Internal()){ WriteLine(oSV.Name() #" ist intern ");
oSV.Internal(false);
WriteLine(" nun nicht mehr ");
}else{ WriteLine(oSV.Name() #" ist NICHT intern ");
oSV.Internal(true);
WriteLine(" aber nun schon");
}dom.RTUpdate(0);}else{WriteLine(" Es gibt die Systemvariable nicht");}

und dieses Programm einmal starten

Habe die CCU nur als Verbindung der Geräte genutzt bis jetzt, hast Du mal ein Beispiel für so ein Skript?

Wenn Du es über ein IPS Script machst benötigst du die versteckten Variablen der CCU nicht.

Wenn Du das IPS Script willst stell ich es rein.

Installiere das HomematicExtended Modul und dann findest du es bei den Systemvariablen.
Kein Script auf CCU oder in IPS nötig.
Michael

Wenn die versteckten Systemvariablen nicht sichtbar gemacht werden, werden sie durch das Modul nicht angezeigt.

Gruß
Thomas

Doch, das ging auch schon vorher mit den ähnlichen Variablen der normalen Wetterstation.
Wenn es nicht funktioniert, ist das ein Bug.
Michael

Werden bei mir nicht sichtbar. Teste gleich mal das Skript

Hallo Stern,

könntest du bitte dein tolles Skript für die Auswertung in IPS mal reinstellen.:slight_smile:

Danke

Gruß Jürgen

Kein Erfolg zu vermelden mit dem Skript…

Bekomme die Werte nicht angezeigt…

@Nall-chan: Die Variable die einem Kanal zugeordnet ist liest das Modul nicht aus.

Du musst im CCU Script die 3. Zeile anpassen „Get(„svHmIPRainCounterOldVal3_1815“);“ hier musst Du deine Werte eintragen.

An diesen Wert kommst Du wenn Du die im Browser diese Seite aufruft „http://XXX.XXX.XXX/addons/xmlapi/statelist.cgi“ wo die XXX stehen musst du die IP deiner CCU eintragen.
Dann sollte so ein Fenster aufgehen

hier ganz runter scrolen da sollte die Wetterstation auftauchen hier die Nummer verwenden und ins Script eintragen.

@obi235

Das geniale Script ist eigendlich für den Stromverbrauch gedacht, es hat Pitti hier vom Forum geschrieben. Ich habe es nur umgestaltet für meinen Zweck.

Die PHP Profis werden die Hände über den Kopf zusammenschlagen aber was solls es funktioniert.

Dies ist das Script für den Regen

<? 
#include('globalfunction.ips.php');
#########################################################################################################################################################################
# Scriptbezeichnung: HM.Consumption.ips.php
# Version: 1.1
# Author: Heiko Wilknitz
# Anpassung by Drapple & zerfasm
#
# Auswertung und Hochrechnung des Stromverbrauches
#
# ----------------------------- KONFIGURATION ---------------------------------------------------------------------------------------------------------------------------
#
# Anzahl Nachkommastellen bei Ergebnissen
$roundTo2   = 2; //Anzahl Nachkommastellen bei Ergebnissen
$roundTo3   = 3; //Anzahl Nachkommastellen bei Ergebnissen

//$kosten        = GetValue(48811 /*[Stromzaehler\Preis pro KWh]*/); //Floatvariable mit dem Preis pro kWh        ANLEGEN
#
# ----------------------------------- ID´s ------------------------------------------------------------------------------------------------------------------------------
#
$parentID     = IPS_GetObject($_IPS['SELF']); 
$parentID     = $parentID['ParentID'];

# ID des ArchiveHandler ermitteln 
$instances     = IPS_GetInstanceListByModuleID('{43192F0B-135B-4CE7-A0A7-1475603F3060}'); 
$archiveID     = $instances[0]; 
#
#########################################################################################################################################################################

// Verbrauchszähler
#$valueID     = IPS_GetObjectIDByIdent("ENERGY_COUNTER_TOTAL", $parentID); //Wenn ObjektID verwendet werden soll
$valueID     = 45842 /*[Stromzaehler\modbus\Zaehlerstand\Zaehlerstand]*/; //Wenn VariablenID verwendet werden soll           EINTRAGEN


// -------------------------- VARIABLENPROFIL ERSTELLEN -----------------------------------------------------------------------------------------------------------------
// Profilname kWh    
$vpname="mm";
if (IPS_VariableProfileExists($vpname) ==false) //Wenn das Provil noch nicht Exestiert dann lege es an:
{
    IPS_CreateVariableProfile($vpname, 2); //Variabelprofil erstellen
    #IPS_SetVariableProfileIcon($vpname,"Lightning"); //Variabelprofil Icon zuweisen
    IPS_SetVariableProfileText($vpname,""," mm"); //Suffix setzen
    IPS_SetVariableProfileValues($vpname, 0, 0,0 ); //Der Befehl setzt den MinimalWert, MaximalWert und die Schrittweite eines Variablenprofils mit Namen ProfilName.
    IPS_SetVariableProfileDigits($vpname, $roundTo2); //Anzahl Nachkommastellen, in diesem Fall 2
}

// Profilname"Euro"
//$vpname2="Euro";
//if (!IPS_VariableProfileExists($vpname2)) //Wenn das Provil noch nicht Exestiert dann lege es an:
//{
 //   IPS_CreateVariableProfile($vpname2, 2); //Variabelprofil erstellen
    #IPS_SetVariableProfileIcon($vpname,"Euro"); //Variabelprofil Icon zuweisen
//    IPS_SetVariableProfileText($vpname2,""," €"); //Suffix setzen
//    IPS_SetVariableProfileValues($vpname2, 0, 0,0 ); //Der Befehl setzt den MinimalWert, MaximalWert und die Schrittweite eines Variablenprofils mit Namen ProfilName.
//    IPS_SetVariableProfileDigits($vpname2, $roundTo2); //Anzahl Nachkommastellen, in diesem Fall 2
//} 

// -------------------------- INSTANZEN ERSTELLEN -----------------------------------------------------------------------------------------------------------------------
// Verbrauchsinstanzen anlegen
$enerID = GetorCreatcategory("Regenberichte",$parentID); 
$lastID = GetOrCreateInstanz( "Regen Zuletzt","dummy",$enerID);
$currID = GetOrCreateInstanz( "Regen Aktuell","dummy",$enerID); 
//$consID = GetOrCreateInstanz( "Hochrechnung Verbrauch","dummy",$enerID); 

// Kosteninstanzen anlegen
//$enerCostID = GetorCreatcategory( "Energiekostenberichte",$parentID); 
//$lastCostID = GetOrCreateInstanz( "Kosten Zuletzt","dummy",$enerCostID);
//$currCostID = GetOrCreateInstanz( "Kosten Aktuell","dummy",$enerCostID); 
//$consCostID = GetOrCreateInstanz( "Hochrechnung Kosten","dummy",$enerCostID); 

// -------------------------- VARIABLEN ERSTELLEN -----------------------------------------------------------------------------------------------------------------------

// Verbrauchsvariablen anlegen bzw. auslesen
$lastDayID = GetOrCreateVariable('Letzter Tag', 2,"POWER_CONSUMPTION_LAST_DAY", $vpname, "", true, $lastID, "1"); 
$lastWeekID = GetOrCreateVariable('Letzte Woche', 2, "POWER_CONSUMPTION_LAST_WEEK", $vpname, "", true, $lastID, "2"); 
$lastMonthID = GetOrCreateVariable('Letzter Monat', 2, "POWER_CONSUMPTION_LAST_MONTH", $vpname, "",true, $lastID, "3"); 
$lastYearID = GetOrCreateVariable('Letztes Jahr', 2, "POWER_CONSUMPTION_LAST_YEAR", $vpname, "", true, $lastID, "4"); 

$currDayID = GetOrCreateVariable('Aktueller Tag', 2, "POWER_CONSUMPTION_ACTUAL_DAY", $vpname,"", true, $currID, "1");
$currWeekID = GetOrCreateVariable('Aktuelle Woche', 2, "POWER_CONSUMPTION_ACTUAL_WEEK", $vpname,"",true,$currID, "2");
$currMonthID = GetOrCreateVariable('Aktueller Monat', 2, "POWER_CONSUMPTION_ACTUAL_MONTH", $vpname, "",true, $currID, "3");
$currYearID = GetOrCreateVariable('Aktuelles Jahr', 2, "POWER_CONSUMPTION_ACTUAL_YEAR", $vpname, "",true, $currID, "4");

//$consDayID = GetOrCreateVariable('Tag', 2, "POWER_CONSUMPTION_EXTRAPOLATION_DAY", $vpname, "", true, $consID, "1");
//$consWeekID = GetOrCreateVariable('Woche', 2, "POWER_CONSUMPTION_EXTRAPOLATION_WEEK", $vpname, "", true, $consID, "2");
//$consMonthID = GetOrCreateVariable('Monat', 2, "POWER_CONSUMPTION_EXTRAPOLATION_MONTH", $vpname, "", true, $consID, "3");
//$consYearID = GetOrCreateVariable('Jahr', 2, "POWER_CONSUMPTION_EXTRAPOLATION_YEAR", $vpname, "", true, $consID, "4");

// Kostenvariablen anlegen bzw. auslesen
//$lastDayCostID = GetOrCreateVariable('Letzter Tag', 2, "POWER_COST_LAST_DAY", $vpname2, "", true, $lastCostID, "1");
//$lastWeekCostID = GetOrCreateVariable('Letzte Woche', 2, "POWER_COST_LAST_WEEK", $vpname2, "", true, $lastCostID, "2");
//$lastMonthCostID = GetOrCreateVariable('Letzter Monat', 2, "POWER_COST_LAST_MONTH", $vpname2, "", true, $lastCostID, "3");
//$lastYearCostID = GetOrCreateVariable('Letztes Jahr', 2, "POWER_COST_LAST_YEAR", $vpname2, "", true, $lastCostID, "4");

//$currDayCostID = GetOrCreateVariable('Aktueller Tag', 2, "POWER_COST_ACTUAL_DAY", $vpname2, "", true, $currCostID, "1");
//$currWeekCostID = GetOrCreateVariable('Aktuelle Woche', 2, "POWER_COST_ACTUAL_WEEK", $vpname2, "", true, $currCostID, "2");
//$currMonthCostID = GetOrCreateVariable('Aktueller Monat', 2, "POWER_COST_ACTUAL_MONTH", $vpname2, "", true, $currCostID, "3");
//$currYearCostID = GetOrCreateVariable('Aktuelles Jahr', 2, "POWER_COST_ACTUAL_YEAR", $vpname2, "", true, $currCostID, "4");

//$consDayCostID = GetOrCreateVariable('Tag', 2, "POWER_COST_EXTRAPOLATION_DAY", $vpname2,"", true, $consCostID, "1");
//$consWeekCostID = GetOrCreateVariable('Woche', 2, "POWER_COST_EXTRAPOLATION_WEEK", $vpname2, "",true, $consCostID, "2");
//$consMonthCostID = GetOrCreateVariable('Monat', 2, "POWER_COST_EXTRAPOLATION_MONTH", $vpname2, "",true, $consCostID, "3");
//$consYearCostID = GetOrCreateVariable('Jahr', 2, "POWER_COST_EXTRAPOLATION_YEAR", $vpname2, "",true, $consCostID, "4");


// -------------------------- LETZTE WERTE ------------------------------------------------------------------------------------------------------------------------------
// GESTERN
$data = AC_GetAggregatedValues($archiveID, $valueID, 1 /* Täglich */, strtotime("yesterday"), strtotime("today")-1, 0); 
SetValueFloat($lastDayID, CalcConsumption($data));
//SetValue($lastDayCostID,GetValue($lastDayID)*$kosten);

// LEZTE WOCHE
$data = AC_GetAggregatedValues($archiveID, $valueID, 2 /* Wöchentlich */, strtotime("monday last week"), strtotime("monday this week")-1, 0); 
SetValueFloat($lastWeekID, CalcConsumption($data));
//SetValue($lastWeekCostID,GetValue($lastWeekID)*$kosten);

// LETZTER MONAT
$data = AC_GetAggregatedValues($archiveID, $valueID, 3 /* Monatlich */, strtotime("first day of last month 00:00:00"), strtotime("last day of last month 23:59:59"), 0); 
SetValueFloat($lastMonthID, CalcConsumption($data));
//SetValue($lastMonthCostID,GetValue($lastMonthID)*$kosten);

// LETZTES JAHR
$ly = date('Y', strtotime('-1 year'));
$data = AC_GetAggregatedValues($archiveID, $valueID, 4 /* Jährlich */, mktime(0, 0, 0, 1, 1, $ly), mktime(23, 59, 59, 12, 31, $ly), 0); 
SetValueFloat($lastYearID, CalcConsumption($data));
//SetValue($lastYearCostID,GetValue($lastYearID)*$kosten);


// ------------------------- AKTUELLE WERTE -----------------------------------------------------------------------------------------------------------------------------
// HEUTE
$data = AC_GetAggregatedValues($archiveID, $valueID, 1 /* Stündlich */, strtotime("today"), strtotime("now"), 0);
$dataDay = CalcConsumption($data);
SetValueFloat($currDayID, $dataDay);
//SetValue($currDayCostID,GetValue($currDayID)*$kosten);

// WOCHE
$data = AC_GetAggregatedValues($archiveID, $valueID, 2 /* Wöchentlich */, strtotime('last monday', strtotime('tomorrow')), strtotime("now"), 0); 
$dataWeek = CalcConsumption($data);
SetValueFloat($currWeekID, $dataWeek);
//SetValue($currWeekCostID,GetValue($currWeekID)*$kosten);

// MONAT
$data = AC_GetAggregatedValues($archiveID, $valueID, 3 /* Monatlich */, strtotime("first day of this month 00:00"), strtotime("now"), 0);
$dataMonth = CalcConsumption($data);
SetValueFloat($currMonthID, $dataMonth);
//SetValue($currMonthCostID,GetValue($currMonthID)*$kosten);

// JAHR
$data = AC_GetAggregatedValues($archiveID, $valueID, 4 /* Jährlich */, strtotime("first day of January"), strtotime("now"), 0); 
$dataYear = CalcConsumption($data);
SetValueFloat($currYearID, $dataYear);
//SetValue($currYearCostID,GetValue($currYearID)*$kosten);


// ------------------------- HOCHRECHNUNG -------------------------------------------------------------------------------------------------------------------------------
// TAG
//$diff = strtotime('now') - strtotime('today');
//$full = 60*60*24; // 24h
//$data = round($dataDay*$full/$diff, 2);
//SetValueFloat($consDayID, $data);
//SetValue($consDayCostID,GetValue($consDayID)*$kosten);

// WOCHE
//$diff = strtotime('now') - strtotime('last monday', strtotime('tomorrow'));
//$full = 60*60*24*7; // 7 Tage
//$data = round($dataWeek*$full/$diff, 2);
//SetValueFloat($consWeekID, $data);
//SetValue($consWeekCostID,GetValue($consWeekID)*$kosten);

// MONAT
//$diff = strtotime('now') - strtotime('first day of this month 00:00');
//$full = 60*60*24*date('t'); // 1 Monat
//$data = round($dataMonth*$full/$diff, 2);
//SetValueFloat($consMonthID, $data);
//SetValue($consMonthCostID,GetValue($consMonthID)*$kosten);

// JAHR
//$diff = strtotime('now') - strtotime('first day of January');
//$full = 60*60*24*365; // 1 Jahr
//$data = round($dataYear*$full/$diff, 2);
//SetValueFloat($consYearID, $data);
//SetValue($consYearCostID,GetValue($consYearID)*$kosten);


// ------------------------- TIMER ERSTELLEN ----------------------------------------------------------------------------------------------------------------------------
SetTimerByName($_IPS['SELF'], "Täglich alle Stunde");


// ------------------------- FUNKTIONEN ---------------------------------------------------------------------------------------------------------------------------------
// Funktion zum addieren der Zählerwerte 
function CalcConsumption($values) 
{
    global $roundTo2;
    $consumption = 0;
    foreach($values as $value) 
    {
            $consumption += $value['Avg'];
    }
    return round($consumption, $roundTo2);
} 
    
    
// Funktion um einen Timer zu erzeugen
function SetTimerByName($parentID, $name) 
{
    Global ${$_IPS['SELF']};
    $eid = @IPS_GetEventIDByName($name, $parentID);
    if($eid === false) 
{
    $eid = IPS_CreateEvent(1);
    IPS_SetParent($eid, $parentID);
    IPS_SetName($eid, $name);
    
    IPS_SetEventCyclic($eid, 2 /* Täglich */, 1 /* Jeden Tag */, 0, 0, 3 /* Stündlich */, 1 /* Alle Stunden */);
    IPS_SetEventCyclicTimeFrom($eid, 0, 1, 0); //Ab 00:01 stündlich starten
    IPS_SetEventActive($eid, true);
}
    return $eid;
} 


// ------------------------- IPS GRUNFUNKTIONEN -------------------------------------------------------------------------------------------------------------------------

// Erstellt eine Variable, wenn diese noch nicht existiert
function GetOrCreateVariable($name , $vtyp, $ident, $profil, $ascript, $log ,$parent,$position ) // erstellt eine Variable, wenn es noch nicht exestiert
/* 
Wert 1 = Name
Wert 2 = Variablentyp
Wert 3 = Variablen-Ident 
Wert 4 = Variablenprofil 
Wert 5 = ScriptID 
Wert 6 = Logging der Daten (True/False)
Wert 7 = Übergeordnete Instanz, wo die Variable angelegt werden soll 
Wert 8 = Reihenfolge / Sortierung der Variablen
*/
{
    $ObjId = @IPS_GetObjectIDByName($name , $parent);
    if ($ObjId === false)
    {
        $ObjId = IPS_CreateVariable($vtyp);
        IPS_SetName($ObjId, $name); //Namen vergeben
        IPS_SetIdent($ObjId, $ident); //ObjectIdent vergeben
        IPS_SetParent($ObjId,$parent ); //Variable unter die Instantz verschieben
        @IPS_SetVariableCustomProfile($ObjId, $profil); //Variablen-Profil zuordnen
        @IPS_SetVariableCustomAction($ObjId, $ascript); //Verknüpft das Script mit der Variable als Actionscript

        // Archive Control ID herrausfinden
        foreach(IPS_GetInstanceList ( ) as $m_id) //Durchsucht alle Instanzen und gibt die InstanzID an $i_id weiter
        {
            $typ=IPS_GetInstance($m_id)['ModuleInfo']['ModuleName']; //Fragt die Instanzen nach den Modulnamen ab
            if ($typ=="Archive Control") $modul_id=$m_id; //Wenn die Instanz den Modulnamen "Archive Control" hat, dann schreibe die ID in $modul_id
        }
        $logging=AC_GetLoggingStatus($modul_id,$ObjId);
        
        if ($logging != 1)
        {
            AC_SetLoggingStatus($modul_id,$ObjId, $log);
            IPS_ApplyChanges($modul_id);
        }// Ende Logging
        
        IPS_SetPosition($ObjId,$position);
    }
    return $ObjId;
}


// Erstellt eine Instanz, wenn diese noch nicht existiert
function GetOrCreateInstanz($name , $ityp, $parent ) //erstellt eine Variable, wenn diese noch nicht exestiert
/*
Wert 1 = Name
Wert 2 = Instanztyp 
Wert 3 = Übergeordnete Instanz, wo die Instanz angelegt werden soll
*/
{
    $ObjId = @IPS_GetObjectIDByName($name , $parent);
    if ($ObjId === false)
    {
        if ($ityp=="dummy") $ityp='{485D0419-BE97-4548-AA9C-C083EB82E61E}';
        $ObjId = IPS_CreateInstance($ityp);
        IPS_SetName($ObjId, $name); // Namen vergeben
        IPS_SetParent($ObjId,$parent ); // Variable unter die Instantz verschieben
    }
    return $ObjId;
}


// Erstellt ein Script, wenn es noch nicht exestiert
function GetOrCreateScript($name , $parent, $data, $hidden ) 
/*
Wert 1 = Name
Wert 2 = Übergeordnete Instanz, wo das Script angelegt werden soll
Wert 3 = Ist das, was ins Script geschrieben wird
Wert 4 = Ob das Script sichtbar sein soll (true, false)
*/
{
    $ObjId = @IPS_GetObjectIDByName($name , $parent);
    if ($ObjId === false)
    {
         $ObjId = IPS_CreateScript(0);
        IPS_SetName($ObjId, $name);
        IPS_SetScriptContent($ObjId, "$data"); // Der Text was ins Script geschrieben wird
        IPS_SetHidden($ObjId, $hidden); // Setzt Script auf nicht sichtbar
        IPS_SetParent($ObjId,$parent ); //  Script unter das Parent verschieben
     }
    return $ObjId;
}


// Erstellt eine Kategorie, wenn diese noch nicht exestiert
function GetorCreatcategory($name,$parent)
#function GetorCreatcategory($name,$parent, $position, $hidden)
{
$LinkID = @IPS_GetObjectIDByName($name , $parent);
if ($LinkID === false)
{
    $LinkID = IPS_CreateCategory(); // Link anlegen
    IPS_SetName($LinkID, $name); // Link benennen
    IPS_SetParent($LinkID, $parent); // Link einsortieren unter dem Objekt mit der ID "12345"
    #if ($hidden ===true) IPS_SetHidden($LinkID,true);
    #IPS_SetPosition($LinkID,$position); //Position festlegen
}
    return $LinkID;
}

?>

Du musst nur bei Verbrauchszähler die ID deines Regenzählers eintragen und dann sollte es gehen.

Für die Temperatur habe ich ein anderes Script

Wie gesagt, die Systemvariablen welche den Kanal der klassischen HM Wetterstation zugeordnet sind funktionieren bei mir.
Die Systemvariablen alle Messaktoren allerdings nicht, deswegen habe ich dafür eigene Instanzen entworfen.
Wenn es also mit dem Modul nicht funktioniert, ist es definitiv ein Bug.

Das xmlapi Addon habe ich nie installiert, da es ohne Authentifizierung über den normalen WebServer Port der CCU läuft, ist es ein mögliches Sicherheitsrisiko.
Michael

Hallo Michael, ich benutze dein Modul und es ist echt klasse aber es liest bei mir nicht alle Variablen aus.

Hier ist mal der Link vom Homematic Forum wo Alchy es genau beschreibt.

https://homematic-forum.de/forum/viewtopic.php?f=31&t=30127

Da steht nicht mehr als mir schon bekannt war.
Ich sage ja ich habe doch noch einen, nein eher mehrere Bugs.
Je nach Typ der ReGaHSS gibt es Probleme mit den Modul.
Es würde ursprünglich für die entfernte Legacy-ReGaHss geschrieben.
Vielleicht finde ich aber endlich Mal Zeit das zu fixen :smiley:
Michael

Sorry, der Link war eigentlich für Nocturne gedacht.

Das ich Dir Michael als alten Profi so etwas nicht schicken muß ist doch klar.:wink:

Egal wie ich es anstelle, komme nicht an die Werte.

Mit Extend komm ich nciht wirklich klar muss ich sagen. Ist installiert, aber wüsste nicht wo ich das konfigurieren kann.