Zurück   IP-Symcon Community Forum > IP-Symcon 2.x > Scripte, PHP, SQL

Antwort
 
LinkBack Themen-Optionen Thema durchsuchen
  #1 (permalink)  
Alt 21.12.09, 17:23
Senior Member
 
Registriert seit: Apr 2007
Beiträge: 516
Standard Anfängerprobleme: Änderungsrate einer Temperatur berechnen

Hallo Leute,

mathematisch stellt es mich nicht so vor Probleme, aber als Anfänger vor die Frage der richtigen Umsetzung...
Also: Am Warmwasservorlauf (also Richtung Verbraucher) hängt ein 1-Wire Temperatursensor (der wird auch erkannt). Nun soll in Abhängigkeit von der Temperaturänderung über die Zeit die Zirkulationspumpe eingeschaltet werden, um den Warmwassertransport zu beschleunigen.
Dazu muss ich also jeweils die Temperatur bis zur nächsten Änderung in einer Variablen zwischenspeichern (also immer den letzter Wert vor dem neuen Einlesen), somit habe ich die zwei Werte für die Y-Achse, die beiden Uhrzeiten stellen die beiden X-Werte da. Aus den zwei X1/Y1 (vorherige Einlesung) und den X2/Y2 (aktuelle Einlesung) Pärchen kann ich dann die Steigung zwischen den beiden Punkten berechnen. Ist die Steigung über einem bestimmten Schwellwert, dann wird Warmwasser abgefordert, wenn also noch nicht in Betrieb, dann soll die Zirkulationspumpe anlaufen...

Mathematisch also nicht das Problem, aber die IPS-Umsetzung bereitet mir noch arge Probleme. Leider fand ich in der Online-Hilfe bis dato nicht so das Richtige... (derzeit weiß ich nicht, wie ich wo welche Objekte (Variablen Skripte) anlegen sollte).

Würde mich freuen, wenn mir jemand auf die Sprünge helfen würde...

Joachim
Mit Zitat antworten
  #2 (permalink)  
Alt 21.12.09, 19:08
Benutzerbild von Attain
Senior Member
 
Registriert seit: Feb 2008
Ort: 127.0.0.1
Beiträge: 374
Standard

Hallo Joachim,

Du erstellst ein Script und läßt es durch Änderung der Variablen triggern.
PHP-Code:
<?
IF ( $IPS_SENDER == "Variable"){
    
$Differenz $IPS_VALUE $IPS_OLDVALUE;
    
$Script IPS_GetScript($IPS_SELF);
    
$Zeit time() - $Script['LastExecute'];
    
IPS_LogMessage$Differenz $Zeit);

    
// weitere Berrechnungen.......
}
?>
Dann hast Du in $Zeit die Differenz in sekunden und die Werteänderung in $Differenz.

Gruß
Mit Zitat antworten
  #3 (permalink)  
Alt 21.12.09, 19:14
Benutzerbild von dreamy1
Senior Member
 
Registriert seit: Nov 2008
Ort: Heidelberg
Beiträge: 565
Standard

Ich mache im Prinzip das Gleiche für meine Wetterstation, hier für den Luftdruck:

- zwei Variablen anlegen
- Script wie unten
- Script zyklisch triggern (damit hast Du schon mal die Zeiteinheit bzw. kannst diese beliebig wählen)

Das Script schiebt dann in jedem Zeitintervall jeweils den aktuellen Luftdruck in Variable 1 und den letzten Wert in Variable 1 in die Variable 2. Mit der if-Anweisung kannst Du dann die Differenz auswerten.

PHP-Code:
...
$History02 GetValueInteger(10498 /*[Wetterstation\Luftdruck\History01]*/);
SetValueInteger(29548 /*[Wetterstation\Luftdruck\History02]*/$History02);
$History01 GetValueInteger(57297 /*[Wetterstation\Luftdruck\Luftdruck]*/);
SetValueInteger(10498 /*[Wetterstation\Luftdruck\History01]*/$History01);
if (
$History01 $History02 >= 2)
{}


... 
EDIT: Attain war schneller und dessen Lösung sieht auch um Welten professioneller aus :-)
(Meine funktioniert aber auch und die verstehe ich als PHP-Noob)
__________________
Gruß
dreamy1

Meine eigene Hardwareserie: *dreamy1bees*

Geändert von dreamy1 (21.12.09 um 19:16 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 21.12.09, 21:25
Senior Member
 
Registriert seit: Apr 2007
Beiträge: 516
Standard

Hallo dreamy1 und Attain,

vielen Dank erst einmal für Eure Antworten. Ich versuche dem zu folgen, habe aber als Neuanfänger so meine Problem.
Offensichtlich füge ich bei "Variable" den 1-Wire Sensor falsch ein. Kannst Du mir noch sagen wie das aussehen müsste?

Joachim
Mit Zitat antworten
  #5 (permalink)  
Alt 21.12.09, 22:33
Benutzerbild von Attain
Senior Member
 
Registriert seit: Feb 2008
Ort: 127.0.0.1
Beiträge: 374
Standard

Hallo Joachim,

Du legst das Script an. Fügst dem Script ein neues Ereignis hinzu. Als auslösende Variable wählst Du die 1-Wire Temperatur aus und bei der Änderung der Variablen wird das Script gestartet.
Das Script berrechnet die Differenz zwischen dem alten($IPS_OLDVALUE) und dem jetzt neuen($IPS_VALUE) Wert. Weiterhin wird die Zeit Berrechnet, die vergangen ist seit dem letzten('LastExecute') Ausführen und dem jetzigem (time()) Zeitpunkt.

Gruß
Miniaturansicht angehängter Grafiken
pic.png  
Mit Zitat antworten
  #6 (permalink)  
Alt 22.12.09, 08:04
Senior Member
 
Registriert seit: Apr 2007
Beiträge: 516
Standard

Hallo Attain,

ich konnte schon ein paar kleine Erfolge feiern - mir ist programmieren nicht fremd, aber mit dem Syntax von php - auch in Verbindung mit IPS - muss (und will) ich mich noch anfreunden.
Ich werde heute abend mal sehen, wie weit mich das bringt.
Vielen Dank für die Unterstützung!

Joachim
Mit Zitat antworten
  #7 (permalink)  
Alt 22.12.09, 16:03
Benutzerbild von Ralf L.
Senior Member
 
Registriert seit: Oct 2007
Beiträge: 134
Standard

Ok, als PHP-Dummie möchte ich mich da mal einklinken.
Ich brauche ein Script zur Verbrauchsberechnung (Liter/Stunde, kwh/Tag etc.)
Das Script von Attain scheint mir schon das Richtige zu sein - aber mit learning by doing (besser: rumprobiering and nixlearning) komme ich nicht weiter.

Angenomme ich habe folgende Situation:
Ich habe eine Variable "verbrauch", die mir den aufsummierten Verbrauch anzeigt. Weiterhin habe ich eine Variable "verbrauchstd" für den Verbrauch der letzten 24 Std und eine Variable "verbrauchmon" für die letzten 30 Tage.

Für ein aufgedröseltes Script, wo die einzelnen Befehle erklärt sind wäre ich echt dankbar. Die Systemvariablen habe ich zwar in der Doku gefunden aber ohne Beispiel kann ich damit leider nix anfangen
Vielen Dank schonmal.
Ralf

P.S. Eine Aufnahme in die Script Libary wäre super - wie z.B. Parsey's Variablenumrechnung
__________________
irgendwann klappts!
Mit Zitat antworten
  #8 (permalink)  
Alt 22.12.09, 20:49
Benutzerbild von Attain
Senior Member
 
Registriert seit: Feb 2008
Ort: 127.0.0.1
Beiträge: 374
Standard

Hallo Ralf,

ich mach mal ein paar Kommentare ins Script:

PHP-Code:
   <?
IF ( $IPS_SENDER == "Variable"){  
// nachfolgende Befehle ausführen wenn das Script durch eine Variable gestartet wurde

    
$Differenz $IPS_VALUE $IPS_OLDVALUE;  
// $IPS_Value == der aktuelle Wert der Variablen
// $IPS_OLDVALUE == der vorherige Wert der Variablen

    
$Script IPS_GetScript($IPS_SELF);       
// IPS_GetScript liefert in einem Array detailierte Infos über Scripte
// $IPS_SELF == ID-Nummer dieses Scriptes

    
$Zeit time() - $Script['LastExecute']; 
// time() == aktueller Zeitstempel
// $Script['LastExecute'] == Zeitstempel , wann wurde das Script zuletzt ausgeführt

    
IPS_LogMessage$Differenz $Zeit);
// schreibt die berrechenten Werte in  das Logfile, war nur für mich zum testen

    // weitere Berrechnungen.......
}
?>
Mit Zitat antworten
  #9 (permalink)  
Alt 23.12.09, 00:39
Benutzerbild von Ralf L.
Senior Member
 
Registriert seit: Oct 2007
Beiträge: 134
Standard

Hallo Attain,

so ähnlich dachte ich mir das schon - habe aber leider keine Werte rausbekommen. Ich muß also nochmal fragen:
PHP-Code:
IF ( $IPS_SENDER == "Variable"){  //nachfolgende Befehle ausführen wenn das Script durch eine Variable gestartet wurde 
Das heißt, meine Variable "verbrauch" ändert sich - script startet weil ich Ereignis: OnChange Variable verbrauch eingegeben habe. Wozu: nachfolgende Befehle ausführen wenn das script durch eine Variable gestartet wurde - wenn das schript doch schon läuft und die Befehle eh jetzt ausgeführt werden?? Und muß die Zeile bei mir heißen:$IPS_SENDER == "verbrauch"?

Was ist die: $Differenz = $IPS_VALUE - $IPS_OLDVALUE? Die Differenz zwischen zwei script-starts? Wenn mein Brenner läuft, ändert sich die Variable jede Sekunde. Was kommt dann dabei raus? Und wie konne ich da auf einen Wert pro Stunde?
PHP-Code:
    $Script IPS_GetScript($IPS_SELF);       
// IPS_GetScript liefert in einem Array detailierte Infos über Scripte 
Tut mir ja leid...aber welche Infos werden wohin geliefert und was fange ich damit an?

PHP-Code:
    $Zeit time() - $Script['LastExecute']; 
// time() == aktueller Zeitstempel
// $Script['LastExecute'] == Zeitstempel , wann wurde das Script zuletzt ausgeführt 
Ok, Zeitstempel sagt mir was. $Zeit ist die Zeit zwischen zwei Script-starts in Sekunden, oder?

PHP-Code:
IPS_LogMessage$Differenz $Zeit); 
Wo finde ich diese LogMessage? In einer Log-Datei? Ich habe zum Testen versucht, die $Differenz und $Zeit per SetValueFloat in eine Variable zu schreiben. War aber nix.

Tja, so siehts aus, wenn mann's nicht kann

Bekomme ich das hin?

Vielen Dank schonmal!
__________________
irgendwann klappts!
Mit Zitat antworten
  #10 (permalink)  
Alt 23.12.09, 04:36
Benutzerbild von Horst
WebFront Developer
 
Registriert seit: Aug 2008
Ort: Sereetz
Beiträge: 1,641
Standard

Für IPS-Funktionen empfiehlt sich immer wieder ein Blick in die Doku .

IPS_LogMessage - IP-Symcon :: Automatisierungssoftware wird in der Konsole unter Meldungen wiedergegeben und ist hinterher auch im Ordner /logs zu finden.

IPS_GetScript - IP-Symcon :: Automatisierungssoftware liefert, wie schon von Attain geschrieben, ein Array mit Informationen über ein Skript. Was ein Array ist steht unter PHP: Arrays - Manual, was ein Array enthält lässt sich mit print_r() herausfinden, siehe Beispiel in der Doku. Die Informationen werden hier in $Script gespeichert. Hinterher wird zur Berechnung der Zeitdifferenz $Script['LastExecute'] herangezogen.

Dann solltest Du Dir noch die meiner Meinung nach wichtigste Seite der Dokumentation ansehen: Systemvariablen - IP-Symcon :: Automatisierungssoftware.
Dort steht beschrieben, welche Variablen beim Skriptaufruf bereits existieren. Hier z.B.:
- $IPS_SELF: ID des ausgeführten Skripts
- $IPS_SENDER: wodurch das Skript aufgerufen worden ist ("Variable" = Ausführung durch Ereignis an einer Variable)
- $IPS_VALUE: existiert bedingt durch die Ausführung des Variablenereignisses und enthält den aktuellen Variablenwert zur Ausführung
Die Abfrage nach $IPS_SENDER macht man, damit man sicher gehen kann, dass nur bei der Ausführung durch den bestimmten Sender der Code ausgeführt wird und nur dann dadurch bedingt Variablen existieren, so existiert $IPS_VALUE nicht für $IPS_SENDER == "RunScript".
__________________
Horst

Geändert von Horst (23.12.09 um 04:38 Uhr)
Mit Zitat antworten
Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Temperatur Regelung mit Funk-Wandthermostat (hm-cc-tc) Mischka HomeMatic 7 07.10.10 08:21
LCN Temperatur auslesen atmel KNX/EIB, LCN 17 23.10.09 15:46
Heizkennlinie berechnen ckerndl Scripte, PHP, SQL 7 23.08.09 18:56
Wer hat an der Temperatur gedreht? jolentes Dashboard 5 19.05.06 17:38
Temperatur grafisch darstellen Jimmy Neutron Dashboard 14 26.01.06 21:46


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:04 Uhr.


Powered by vBulletin® Version 3.8.4 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.6.0