PHP- Code für Makro

Programmierung der FHZ-Zentralen mit contronics homeputer Standard / homeputer Studio & WEB-Server

Moderator: Co-Administratoren

Antworten
leknilk0815
Beiträge: 6693
Registriert: 19.03.2007, 08:21
Danksagung erhalten: 2 Mal

PHP- Code für Makro

Beitrag von leknilk0815 » 26.04.2009, 10:40

Servus,

leider bin ich in PHP immer noch blutiger Anfänger, deshalb bräuchte ich dringend Hilfe...

Ich habe eine Makro- Steuerung, welche aus einer CSV- Datei (WetterAktuell.csv) mittels PHP einen Temperaturwert aus der letzten Zeile (=letzter Eintrag) ausliest und dementsprechend reagiert. Funktioniert prima, allerdings wächst die Datei ständig (derzeit 4,5MB), was nun zu einer Zeitüberschreitung im Makro führt.
Es gäbe jedoch eine andere Datei (WetterAktuell.Dat), in der nur die jeweils aktuellen Werte abgelegt werden. Leider ist die Datei anders aufgebaut, daher bin ich nicht in der Lage, das PHP- Script entsprechend anzupassen.
Wäre Spitze, wenn mir da jemand helfen könnte!
Hier die Daten:
Format- Beispiel der momentan verwendeten CSV- Datei (benötigter Wert in rot):
,,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,137,38
26.04.2009,10:15,19.6,15.5,14.4,8.5,9.6,8.8,53.4,18.3,19.8,22.8,0,0,0,0,0,0,41,41,49,0,0,0,0,0,0,36,0,0,0,0,89.6,59855,932,0,6.3,135,0,59855

hier das funktionierende Script dazu:
-----------------------------------------------------------

Code: Alles auswählen

<?
$CSVDatei    = '\\\Wetterserver\c$\Programme\WS_Logger\Wswin\WetterAktuell.csv';
// $CSVDatei    = 'X:\Programme\WS_Logger\Wswin\WetterAktuell.csv';
$TempArray   = file($CSVDatei);
$LetzteZeile = array_pop($TempArray);
$WerteArray  = explode(',',$LetzteZeile);
$WertGesucht = $WerteArray[11];
$WertKomma   = str_replace('.' , ',' , $WertGesucht);
$TempGHaus   = $WertKomma;
?>
-----------------------------------------------------------
hier die DAT- Datei, benötigter Wert ebenfalls rot, auf die das geänderte PHP- Script zugreifen sollte:

"26.04.2009","10:20:04"
"AnzeigeIndex","001",14.6
"AnzeigeIndex","002",46
"AnzeigeIndex","003",8.5
"AnzeigeIndex","004",0
"AnzeigeIndex","005",9.6
"AnzeigeIndex","006",0
"AnzeigeIndex","007",8.8
"AnzeigeIndex","008",0
"AnzeigeIndex","009",39.7
"AnzeigeIndex","010",0
"AnzeigeIndex","011",57.4
"AnzeigeIndex","012",0
"AnzeigeIndex","013",17.9
"AnzeigeIndex","014",0
"AnzeigeIndex","015",23.8
"AnzeigeIndex","016",35
"AnzeigeIndex","017",19.7
"AnzeigeIndex","018",41
"AnzeigeIndex","019",932
"AnzeigeIndex","020",0
"AnzeigeIndex","021",51193
"AnzeigeIndex","022",3
"AnzeigeIndex","023",15.5
"AnzeigeIndex","024",41
"AnzeigeIndex","025",6.3
"AnzeigeIndex","026",270
"AnzeigeIndex","027",0
"AnzeigeIndex","028",1631
"AnzeigeIndex","029",0
"AnzeigeIndex","030",0
"AnzeigeIndex","031",0
"AnzeigeIndex","032",596
"AnzeigeIndex","033",.295
"AnzeigeIndex","034",5
"AnzeigeIndex","035",1.7
"AnzeigeIndex","036",0
"AnzeigeIndex","037",73.1
"AnzeigeIndex","038",0
"AnzeigeIndex","039",0
"AnzeigeIndex","040",0
"AnzeigeIndex","041",0
"AnzeigeIndex","042",0
"AnzeigeIndex","043",0
"AnzeigeIndex","044",0
Gruß - Toni

KS300 + Sonnendauer + Windrichtung, KS888, HM-CC-TC/HM-CC-VD, FHT80b, und etwas FS20-xx, Keymatic, EM1000, CCU2 und FHZ2000 sowie HP Studio, HPCL + Upgrade für FHZ

Benutzeravatar
Sanys
Beiträge: 270
Registriert: 31.01.2007, 12:29
Wohnort: Wetterau

Re: PHP- Code für Makro

Beitrag von Sanys » 26.04.2009, 11:57

Servus Toni,

da hast Du Glück, das ich mich die letzten beiden Tage mit regulären Ausrücken beschäftigt habe. Das ist das ideale Mittel, um mit wenig Aufwand nach x-beliebigen Dingen in Textdateien zu suchen.

Für Dein Beispiel sieht das so aus:

Code: Alles auswählen

<?
//Pfad zur Datei, die ausgelesen werden soll
$datei = "WetterAktuell.dat";

// Datei in Strin einlesen als Zeichenkette
$string = file_get_contents ( $datei);

// Suchmuster für regulären ausdruck
//In etwa so:  suche evtl ein Minuszeichen, dann 1-2 Zahlen, einen Punkt und noch eine Zahl, vor denen "015", steht
$pattern = "/(?<=\"015\",)([-]?[0-9]{1,2}\.\d)/";

// Ausführen der Suche, PosTreffer ist die Position des Treffers (hier uninteressant), $treffer ist ein array mit dem ersten Treffer an der ersten Stelle des Arrays
$PosTreffer = preg_match ($pattern, $string, $treffer );

// und hier die Umwandlung für Studio....
$WertKomma   = str_replace('.' , ',' , $treffer[1]);
$TempGHaus   = $WertKomma;

?>
Du mußt den Pfad zur Datei entsprechend anpassen. Falls es nicht geht dann bitte mal die Datei WetterAktuell.dat zippen und hier reinstellen.
Allerdings sollte es gehen, denn die Datei wird als String (Zeichenkette) eingelesen und die Suche schert sich nicht um Zeilenumbrüche...

Viel Erfolg!!


sanys


P.S. solltest Du Dich mit regulären Ausdrücken befassen wollen.... Du brauchst viel Zeit, ist aber "ein geiles Zeug" für Stringauswertungen, wenn es mal läuft!!

P.P.S. habe das Suchpattern noch erweitert, falls auch Minustemperaturen vorkommen (sollte im Gartenhäuschen hoffentlich nicht so oft vorkommen...
FHZ 1350PC Prof. mit HomeputerStudio 100224 + Direktsendebefehle à la tsa (v 8.0)
WIN XP Pro SP3 (neuester Stand) + buempi's Minibrowser + etliche fs20+HMS+FHT Komponenten + nie genug Zeit, das alles fertig zu bekommen ;-)

leknilk0815
Beiträge: 6693
Registriert: 19.03.2007, 08:21
Danksagung erhalten: 2 Mal

Re: PHP- Code für Makro

Beitrag von leknilk0815 » 26.04.2009, 14:22

Servus Sanys,

da bin ich mal wieder platt...
Reinkopiert, Pfad angepasst, passt...
Ich denke, daß man dieses "geile Zeug" an vielen Stellen verwenden kann.
Nun hört endlich diese leidige Datenschauflerei auf, die vermutlich für einige Fehler in meiner Steuerung
in letzter Zeit verantwortlich war (Sprachausgabe geht nur sporadisch, Befehle werden gelegentlich nicht ausgeführt...)
Ist auch nicht weiter verwunderlich, wenn jede Minute (Makrointervall) fast 5MB von einem anderen Rechner übers LAN rübergeschaufelt und per PHP ausgewertet werden.

Vielen Dank nochmal!
Gruß - Toni

KS300 + Sonnendauer + Windrichtung, KS888, HM-CC-TC/HM-CC-VD, FHT80b, und etwas FS20-xx, Keymatic, EM1000, CCU2 und FHZ2000 sowie HP Studio, HPCL + Upgrade für FHZ

leknilk0815
Beiträge: 6693
Registriert: 19.03.2007, 08:21
Danksagung erhalten: 2 Mal

Re: PHP- Code für Makro

Beitrag von leknilk0815 » 26.04.2009, 14:31

Sanys hat geschrieben: P.P.S. habe das Suchpattern noch erweitert, falls auch Minustemperaturen vorkommen (sollte im Gartenhäuschen hoffentlich nicht so oft vorkommen...
Hab ich eben noch eingebaut, scheint auch zu funktionieren.
Minusgrade kommen da schon vor, da es nur in der Wachstumszeit verwendet wird, im Moment ist es noch leer, der letzte Frost war vor zwei Tagen. Wäre nicht schön gewesen, wenn sich das Script dann aufhängt.
Danke, daß Du daran gedacht hast!
Gruß - Toni

KS300 + Sonnendauer + Windrichtung, KS888, HM-CC-TC/HM-CC-VD, FHT80b, und etwas FS20-xx, Keymatic, EM1000, CCU2 und FHZ2000 sowie HP Studio, HPCL + Upgrade für FHZ

Benutzeravatar
Sanys
Beiträge: 270
Registriert: 31.01.2007, 12:29
Wohnort: Wetterau

Re: PHP- Code für Makro

Beitrag von Sanys » 26.04.2009, 16:44

Hi Toni,

freut mich das es läuft.
Wäre nicht schön gewesen, wenn sich das Script dann aufhängt.
Nein, das Script hätte sich nicht aufgehängt, es hätte allerdings auch nichts ausgespuckt.

Du könntest aber noch die Variable PosTreffer auswerten: ist diese 1 so wurde etwas gefunden, ist diese 0 hat die Suche keinen Treffer ergeben. Das könntest Du in Studio verwenden, um Dich auf Probleme warnen zu lassen. Aber beachte: Eine 0 oder leere Variable an Studio übergeben ist problematisch. Besser z.B. so:
Im Studio-makro setzt Du Anfangs eine Variable(Typ Zeichen) auf z.B. "Abfrage läuft...". Dann kommt der php-Teil, an dessem Ende Du diese Variable auf "O.K." setzt, wenn $PosTreffer = 1 ist.

Code: Alles auswählen

**Objekt heisst Objekt, hier Variable Status, Typ Zeichen anlegen
Status := "Abfrage läuft..."

<?
//Pfad zur Datei, die ausgelesen werden soll
$datei = "WetterAktuell.dat";

// Datei in Strin einlesen als Zeichenkette
$string = file_get_contents ( $datei);

// Suchmuster für regulären ausdruck
//In etwa so:  suche evtl ein Minuszeichen, dann 1-2 Zahlen, einen Punkt und noch eine Zahl, vor denen "015", steht
$pattern = "/(?<=\"015\",)([-]?[0-9]{1,2}\.\d)/";

// Ausführen der Suche, PosTreffer ist die Position des Treffers (hier: 0 bei keinem Treffer, 1 bei Treffer), $treffer ist ein array mit den Treffern. $treffer[0] beinhaltet alle Treffer, $treffer[1] nur den ersten, der hier relevant ist.
$PosTreffer = preg_match ($pattern, $string, $treffer );

// und hier die Umwandlung für Studio....
$WertKomma   = str_replace('.' , ',' , $treffer[1]);
$TempGHaus   = $WertKomma;

if ($PosTreffer == 0)
     {
     $V_Objekt_Status = "Fehler bei Auswertung"; // RegEx-Abfrage ergab keinen Treffer, also falscher Wert oder Datei sieht nicht so aus, wie sie soll
     } else {
     $V_Objekt_Status = "O.K."; // Die Abfrage war erfolgreich
     }

?>
Den Status kannst Du Dir dann irgendwo anzeigen. Ähnlich könntest Du auch eine Überwachung aufbauen, ob die Abfrage der Datei geklappt hat. ..... etc etc......



Viel Erfolg!



sanys
FHZ 1350PC Prof. mit HomeputerStudio 100224 + Direktsendebefehle à la tsa (v 8.0)
WIN XP Pro SP3 (neuester Stand) + buempi's Minibrowser + etliche fs20+HMS+FHT Komponenten + nie genug Zeit, das alles fertig zu bekommen ;-)

leknilk0815
Beiträge: 6693
Registriert: 19.03.2007, 08:21
Danksagung erhalten: 2 Mal

Re: PHP- Code für Makro

Beitrag von leknilk0815 » 26.04.2009, 17:25

Danke,
im Moment fällt mir zwar noch nichts ein, wo ich das einbauen könnte, es hört sich aber so an, als wäre damit auch einiges anzufangen. Findet garantiert Verwendung!
Gruß - Toni

KS300 + Sonnendauer + Windrichtung, KS888, HM-CC-TC/HM-CC-VD, FHT80b, und etwas FS20-xx, Keymatic, EM1000, CCU2 und FHZ2000 sowie HP Studio, HPCL + Upgrade für FHZ

Antworten

Zurück zu „homeputer Studio / Standard: Programmierbeispiele“