Settings-Datei entlasten

Hallo,

mein gesamtes IPS Projekt ist langsam gereift und hat nun ein Punkt erreicht wo ich es laufen lassen kann, quasi bugfree ! Und genau das nervt mich. Ich möchte lieber wieder wurschtelen.

So, Torro ist mal wieder derjenige, der mir eine schlaflose Nacht gebracht hat. Er hat was erwähnt in einem anderen Thread, was mich wieder nachdenklich gemacht hat.
Als ich noch Programmierer war für S7-SPS, da hatte ich die Angewohnheit alle meine Daten, Bits, Bytes, etc in Datenblöcke zu speichern.
Das arbeiten mit Merkern war zu umständlich, machte die CPU langsamer und war eben auch begrenzt in der Adressierung.

So, diese Idee wollte ich von Anfang an auch in IPS realisieren, wusste aber nie genau wie, da ich PHP Anfänger war.
Meine Settingsdatei ist einfach zu gross, und es befinden sich einige sehr lange Strings drin.
Ich würde das ganze lieber in Arrays sehen, doch wie geht das, und wie frag ich das ab, und vor allem, wie krieg ich Daten in eine Datei ?
Kann mir da mal jemand auf die Sprünge helfen?

Banales Beispiel:

Ich habe einen Monat, für jeden Tag eine BOOL Variable, die mir sagt, ob im Hause gerade Ferien oder Arbeitstag Ambiente herrscht.
Momentan, mach ich das mit einer Schleife und frage hier eben die 31 Variablen ab, und fertig.
Doch eben da liegt das Problem: Das sind fast 30 Variablen, und das für 11 Räume, also x11 ! Dann wiederum x2 für Heizung und Rollos…etc etc… es wird immer länger und länger.
Wie kann man sowas in Arrays ablegen und dann in einer php Datei speichern, so wie z.B. Torro in seiner RRD Settings Datei.

(PS: Ja ja, Torro, ich weiss, du wirst sagen ‚Kuck doch wie ich es geacht habe im WIIPS‘, doch eben da liegt das Problem: Ich versteh nur Bahnhof)

Danke für irgendwelche Tipps.

mfG Franz

Hallo Franz,

nee, diesmal sage ich nicht, schaue ins WIIPS - weil ich da ja noch wesentlich mehr damit mache als nur speichern. Ich aendere auch die Daten zur Laufzeit, vor allem im calendar modul.

Ich schlage vor, wir versuchen einfach mal anhand eines Beispiels das ganze zu entwickeln. Damit das nicht auf der Grundlage von WIIPS gemacht wird und alle etwas davon haben, schlage ich einfach vor, dass wir ein erstes „Speicherproblem“ aus Deinem Fundus nehmen. Die oben beschriebene Sache mit der Vielzahl von Variablen wuerde ich aber zu einem spaeteren Zeitpunkt betrachten, da diese schon etwas aufwendiger ist - etwas einfacheres waere besser. Damit ist dann das System auch besser zu verstehen und zu handhaben.

Also, suche mal etwas raus, was weniger Variablen beinhaltet und beschreibe genau, wie diese aufgebaut sind.

Gruss Torro

Speichern eines Array’s:


<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : array_save.ips.php
Trigger  : 
Interval : 
*/
// Array mit Daten füllen
$my_array = array();
$my_array['test1'] = 'daten von test 1';
$my_array['test2'] = 'daten von test 2';
// Speichern des Array's in eine Datei
file_put_contents( "my_array_file.dat", '<?php $my_array = '.var_export( $my_array, true )." ?>" );
?>

Laden eines Array’s:


<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : array_read.ips.php
Trigger  : 
Interval : 
*/
require_once("my_array_file.dat");
print_r( $my_array);
?>

Die ganz Sache läuft ziemlich effizient. Es wird php-code erzeugt der vom require_once (oder include) geladen werden kann.

Gruss
Olli

Hallo Olli,

und wie würdest Du das machen das Franz 11 mal 30 mal x Bool Variablen nicht mehr braucht? Diese wird er ja, nehme ich mal an, vom Designer bekommen. Mit IPSYMID Übergabe?

Hallo Olli,

das ist ne ganz einfache Variante, die einige schwerwiegende Fallstricke beinhalten.

Wir wollen das ganze fuer Franz und andere schon etwas umfangreicher und sicher machen. Dein Beitrag ist gut gemeint, funktioniert bei vielen Dingen, aber eben nicht immer. Und wir brauchen eine allgemein funktionierende Loesung, die ich dem Franz und anderen Interessierten hier Schritt fuer Schritt vorstelle. Sie sollen das ganze dann auch verstehen.

Gruss Torro

Hallo,

warte doch bitte einfach mal ab. Franz seine Loesung nehmen wir noch auseinander. Immer Schritt fuer Schritt.

Gruss Torro

warte doch bitte einfach mal ab. Franz seine Loesung nehmen wir noch auseinander. Immer Schritt fuer Schritt.

Jawohl Eure Eminenz.:smiley: Wollte aber nicht mehr warten… gehe jetzt auch ins Bett morgen ist ja wieder Arbeiten. :frowning:

Hat folgende Nachteile:
-Designer kann es nicht mehr direkt anzeigen
-Du kannst nicht mehr auf jede Einzelvariable triggern

paresy

Hallo Franz,

das bedeutet, man kann also nur diejenigen Variablen „entsorgen“, die Du nicht fuer den Designer direkt brauchst. Ich glaube, gerade das ist ja bei Dir der Fall? Also ist ursaechlich auch der Designer fuer den Zuwachs der Settings.xml mit verantwortlich.

Gruss Torro

Danke für die Antworten,

also, das leuchtet mir ein, dass ich Variablen, die der Designer auch braucht zur Visualisierung, ich nicht so einfach in Arrays abschieben kann.

So gesehen bleiben dann aber nicht mehr viele Variablen übrig und somit würde das ganze keinen Sinn mehr machen.

Naja, war ein Versuch Wert.
Ich muss halt mit dieser grossen settings.xml-Datei leben müssen.

Aber dank auch an Olli, denn diese deiden Skripte haben mich im Verständnis von PHP einen Schritt weiter gebracht. Ich werde sicherlich diese Skripte nochmal brauchen

Franz

Hallo Franz,

ich habe die gleichen Überlegungen auch schon angestellt wie Du, weil ich auch einige Projekte im Designer umgesetzt habe die sehr Variablenlastig sind.
Bei einigen Projekten ist mir die Einsparung einer Menge von Variablen gelungen, das könnte bei Dir auch gehen.

Beispiel:
Beim Aufruf einer Seite(TAB) wird eine Mastervariable (Bool) gesetzt.
Diese entscheidet darüber in welches Array die Daten gelegt werden.
Die Veränderung eines Wertes mache ich dann im TAB immer über die gleichen IPSYMID Werte. D.h. Feld 1 = IPSYMID 1, Feld 2 = IPSYMID 2 usw.
So kannst Du mehrere TABS mit den den gleichen Feldern machen und diese nur über die Mastervariable unterscheiden, im Script natürlich.

Hallo Franz,

für die Steuerung meiner FHTs stand ich vor dem gleichen Problem. Meine Frau arbeitet Schicht und so gibt es diverse Wochenprofile (Früh, Spät, Normal, Urlaub, …). Eine der Stärken von PHP ist die Datenbank-Anbindung. Daher verwende ich dafür eine MySQL-Datenbank. Von IPS nutze ich dafür nur noch einen Timer der alle 5min das entsprechende Script aufruft und die FHT-Befehle ggf. sendet. An der Visualisierung / Bedienung arbeite ich noch. Sie wird komplett über HTML erfolgen. Da ich auch mit meinem FHT-Script alle Istwerte (Temperatur, Ventilpos. …) in die Datenbank schreibe, ist auch die Istwert-Anzeige kein Thema. Für PHP gibt es genügend Kurven / Diagramm-Bibliotheken im Netz.
Der Aufwand mit einer Datenbank ist zwar etwas größer als mit Arrays, aber für mich persönlich überwiegen die Vorteile.

Gruß
Dieter

Hallo Dieter,

aber WIIPS kennst Du schon? Die komplette Visualisierung ist da ja schon fertig drin, aber eben nicht nur fuer FHTs, sondern fuer jede vorhandene Variable. Und das Heizungsmodul ist vielleicht zum Usertreffen gemeinsam mit dem Kalendermodul auch testbereit.

Gruss Torro

Hallo Torro,

ich kenne WIIPS und habe es natürlich auch installiert :slight_smile:
Für das Testen meines FHT-Scripts waren / sind deine Graphen auch eine tolle Hilfe. Torro dafür hier mal ein dickes Dankeschön.

Wenn dein Heizungsmodul fertig ist, dann werde ich es mir natürlich anschauen. Aber ich habe eben jetzt was gebraucht. Und die Kombination von PHP und MySQL macht es eben sehr einfach. Die Dateneingabe in die Datenbank ist ebenfalls simpel. Es gibt dafür unzählige Tools von PHP-MyAdmin bis hin zu MS- oder Openoffice. Backup, Restore und Export sind bei so einfachen Tabellen ebenfalls kein Thema.

Schönen Sonntag

Gruß
Dieter