Variable Schrittweise ändern

Hallo zusammen,

ich stehe noch ganz weit am Anfang meiner IPSymcon-Karriere.

Ich würde gerne zwei einfache + und - Schaltflächen im Webfront darstellen um ein Homematic Thermostat schrittweise zu erhöhen / zu verringern.

Wie gehe ich das am besten an. Wenn ich alles richtig verstanden habe, dann benötige ich mindestens eine eigene Variable (von welchem Typ auch immer) ein eigenes Profil, ein Skript und ein Ereignis.

Wie das alles aber zusammen spielt, ist mir heute noch ein Rätsel.

Würde mich über eine Rückmeldung freuen.

Grüße
Dominic

Auch wenn die Frage vielleicht dumm ist: die normale Variante, wie die Änderung der Temperatur ab Werk dargestellt wird, gefällt Dir nicht? Oder bist Du noch gar nicht so weit?

Hi,

die Frage ist ganz und gar nicht dumm…

Die Frage ist dabei, was Standard ist:

Wenn ich eine ganze Bildschirmbreite für meine WebFront Visu nutze, dann erhalte ich folgendes:

Das ist schonmal gut. Wenn ich jetzt aber ein SplitPane nutze sieht es so aus:
Bildschirmfoto 2017-12-15 um 22.35.15.png
Und das hilft mir dann nicht mehr viel. Das PopUp ist zwar nett, aber nicht das was ich mir für mal schnell um X-Grad erhöhen vorstelle.

Ich hoffe ich habe mich verständlich ausgedrückt :slight_smile:

Genau das ist Standard.

… dann hilft mir der Standard nicht weiter- hast du einen Ansatz für mich, wie ich hier für mich (individuell) weiter komme?

Jupp … hat n bißchen gedauert, den Thread zu finden:

Eieruhr im WebFront

Dort steht alles, was Du brauchst. Die Systemvariablen haben sich seit 2011 etwas geändert. Die aktuellen findest Du aber in der Doku.

Hallo,

ich habe mich jetzt ma etwas daran versucht und habe das script etwas angepasst:

 <?
################################################################################
# Scriptbezeichnung: System.Timer.ips.php
# Version:    1.0.20170902
# Author:    @Pitti (base on @paresy)
#
# Timmer ala Eieruhr
#
#
# Anleitung:
# - Zuerst Konfigurationswerte auf eigene Bedürfnisse anpassen (max, step usw.)
# - In Konsole einfach ausführen um alles korrekt zu installieren.
#
# ------------------------------ Konfiguration ---------------------------------
#
$min = 0;
$max = 30;
$step = 1; // kleine Schrittweite
$jump = 5; // große Schrittweite
$suffix = "min";
$Heiz_ID=36633 /*[Räume\Wohnzimmer\Heizung_Wohnzimmer:2\Solltemperatur]*/;
#
# ------------------------------ Funktionen ------------------------------------
#

#
################################################################################

// Name Variablenprofil
$vpn = "Timer.".$max.".".$jump;
echo GetValue($Heiz_ID);

if($_IPS['SENDER'] == "WebFront") {
    switch($_IPS['VALUE']) {
	
        case -1:
              $_IPS['VALUE'] = GetValue($Heiz_ID) - $step;
			  
              if($_IPS['VALUE'] <= 0) {
           
                doOff();
              }
              break;
           case 31:
              $_IPS['VALUE'] = GetValue($Heiz_ID) + $step;
             doOn();
             break;
        default:
            return;
    }
      SetValue($Heiz_ID, $_IPS['VALUE']);
}

function doOn()
{
    if(IPS_GetScriptTimer($_IPS['SELF']) == 0) {
        IPS_SetScriptTimer($_IPS['SELF'], 60);
        on();
    }
}

function doOff()
{
    IPS_SetScriptTimer($_IPS['SELF'], 0);
    off();
}



?> 

Allerdings erhalte ich immer die Fehlermeldung:

Variable 36633 is marked as read-only.

Wo kann ich denn das ändern, zumal das m.E. bei einer SetPoint Variablen ohnehin keinen Sinn macht.

Grüße
Dominic

Hi,

ich glaube du musst anstatt „SetValue“ „HM_WriteValueFloat(12345, „SET_TEMPERATURE“, 20);“ nehmen.
Natürlich etwas anpassen.
Habe mit HomeMatic erst jetzt angefangen und noch wenig erfahrung :slight_smile:

Gruß

Den Befehl auf die Instanz schicken. Nicht auf die Variable.

Hallo,

hmmm - irgendiwe bin ich zu doof.

Das skript sieht jetzt so aus:

 <?
################################################################################
# Scriptbezeichnung: System.Timer.ips.php
# Version:    1.0.20170902
# Author:    @Pitti (base on @paresy)
#
# Timmer ala Eieruhr
#
#
# Anleitung:
# - Zuerst Konfigurationswerte auf eigene Bedürfnisse anpassen (max, step usw.)
# - In Konsole einfach ausführen um alles korrekt zu installieren.
#
# ------------------------------ Konfiguration ---------------------------------
#
$min = 0;
$max = 30;
$step = 1; // kleine Schrittweite
$jump = 5; // große Schrittweite
$suffix = "min";
$Heiz_ID=35346 /*[Räume\Wohnzimmer\Heizung_Wohnzimmer:2\Solltemperatur]*/;
#
# ------------------------------ Funktionen ------------------------------------
#

#
################################################################################

// Name Variablenprofil
$vpn = "Timer.".$max.".".$jump;
echo GetValue($Heiz_ID);

if($_IPS['SENDER'] == "WebFront") {
    switch($_IPS['VALUE']) {
	
        case -1:
              $_IPS['VALUE'] = GetValue($Heiz_ID) - $step;
			  
              if($_IPS['VALUE'] <= 0) {
           
                doOff();
              }
              break;
           case 31:
              $_IPS['VALUE'] = GetValue($Heiz_ID) + $step;
             doOn();
             break;
        default:
            return;
    }
     SetValueFloat(35346, $_IPS['VALUE']);
	  HM_WriteValueFloat(35346, "SET_TEMPERATURE", 20);
}

function doOn()
{
    if(IPS_GetScriptTimer($_IPS['SELF']) == 0) {
        IPS_SetScriptTimer($_IPS['SELF'], 60);
        on();
    }
}

function doOff()
{
    IPS_SetScriptTimer($_IPS['SELF'], 0);
    off();
}



?> 

Aber beide Varianten schlagen mit der Meldung:

„'varaible #35346 does not exist“ fehl.

Meine Objekte sehen so aus:

Die SetValueFloat Anweisung muss noch gelöscht werden.
Der Wert wird ja über HM_WriteValueFloat gesetzt.

Gruß

Burkhard

Hallo,

ich komme der Sache näher - bald kenne ich alle Fehlermeldungen :slight_smile:

Die aktuelle Fehlermeldung lautet:

21.12.2017 20:31:02*| PHP*| Error: Warning: HomeMatic Error: Unknown parameter
Error in Script /var/lib/symcon/scripts/18890.ips.php on Line 52
134 in IPSLibrary/app/core/IPSLogger/IPSLogger.inc.php (call IPSLogger_Out)
37 in IPSLibrary/app/core/IPSLogger/IPSLogger_PhpErrorHandler.inc.php (call IPSLogger_Err)
in IPSLogger_PhpErrorHandler
52 in 18890.ips.php (call HM_WriteValueFloat)

Was läuft denn da noch falsch? Den Datenpunkt gibts doch gemäß Doku von eq3…

Die Datenpunkte sind Kanälen zugeordnet. Hast du da den richtigen erwischt?

wie bekomme ich das denn raus?

meine objekte sehen so aus:

Hi,

du willst die Solltemperatur nur erhöhen und verringern oder?

versuch mal hiermit: (Bin aber kein profi) :slight_smile:

<?

$min = 0;
$max = 30;
$step = 1; // kleine Schrittweite
$Heiz_ID=35346;//Instanz
$soll = GetValue(36633); //Variable


if($_IPS['SENDER'] == "WebFront") {
    switch($_IPS['VALUE']) {
    
        case 1:
              HM_WriteValueFloat($Heiz_ID,"SET_TEMPERATURE",$soll - $step);
              
        
              break;
           case 2:
              HM_WriteValueFloat($Heiz_ID,"SET_TEMPERATURE",$soll + $step); 
           
             break;

    }
}
?>

Gruß

Du findest es in der Homematic Dokumentation Datenpunkte. Welches Gerät hast du genau?
In der Dokumentation sind die Geräte mit ihren Kanälen und Datenpunkten aufgeführt.

Guten Morgen,

ja, genau ich möchte nur schrittweise erhöhen / verringern.

@sewo: Dein Code sieht deutlich schlanker aus - führt allerdings zum gleichen Fehler.

@bumaas: Ich habe hier ein HM-CC-TC (den alten Wandthermostaten).
Und genau das scheint des Rätselslösung zu sein - hier heisst der Kanal anders (SETPOINT).

Werde ich heute abend mal testen :slight_smile:

Du hast den Datenpunkt (Statusvariable) dummerweise im Objektbaum umbenannt (‚Solltemperatur‘). Sonst hätte man es gleich gesehen :smiley:

Die tatsächlichen Namen siehst du übrigens auch wenn du die Instanz bearbeitest unter dem Reiter ‚Statusvariablen‘.

Hallo,

+/- klappt jetzt prima. Nur leider ist die Anzeige (wieviel Grad als Soll eingestellt sind) jetzt nicht mehr da (wie bei der Eieruhr).

So sieht es jetzt aus:

Bildschirmfoto 2017-12-24 um 16.16.54.png

und so soll es aussehen (allerdings bekomme ich die SOlltemperaturanzeige nicht mit dem+/- verknüpft):

Bildschirmfoto 2017-12-24 um 16.17.29.png

Habt Ihr noch eine Idee für mich?

Hallo zusammen,

so langsam steige ich immer mehr hinter die IPS Geheimnisse :slight_smile:

Ich denke mein aktuelles Problem liegt gar nicht am Skript sondern an den Assoziationen die ich dem Variablenprofil zugewiesen habe.

Habt ihr einen Tip für mich, wie es richtig sein müsste? Mir fehlt quasi ein Ansatz, wie ich den aktuellen Wert einer Variablen als „Button“ im Webfront darstellen kann. +/- habe ich ja schon, jetzt fehlt eben noch die aktuelle Wertdarstellung.

So sieht mein Profil derzeit aus (und statt der 0 hätte ich gerne den aktuellen Wert angezeigt):

Könntet Ihr mir noch einmal helfen?

Viele Grüße und frohe Weihnachten :slight_smile:

Nic