Frage zu SFHTs

#Season            T T   H 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2 
#| day             1 2   O 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 
#|| sensor         x x   U 030303030303030303030303030303030303030303030303
#|| |              x x   R 000000000000000000000000000000000000000000000000
DS  default        x x     -------------------------------------+++++++----
DW  default        x x     -----------------------------------+++++++++----

Das ist ein Teil von der tempsetting, und mehr oder weniger eine Tabelle.
Woher weiß das Script/IPS nun wann es (z.B. 18:30) auf die entsprechende Temperatur umzustellen hat. Das würde ja bedueten das das Skript die Tabelle so auch verstehen muss und um 18:30 das erste + entdecken müsste. Und dann die Temperatur auch noch auf den Wert 20 Grad zu setzen.
Irgendwo hab ich gerade n Denkfehler.

Achja die Spalten T T da wo erst 1 2 später X X wofür sind die gedacht?

Grüße Meinhard

Hallo Matrose,

Du hast doch sicher hier geschaut?

Gruss Torro

genau von da hab ich es ja

Hallo,

ich versuche mal, es zu erklären:
Das Script liest nicht die Tabelle sondern die ini-Datei zeilenweise. Dabei orientiert es sich an dem Namen der Instanz.

IS9 vliv_temp      x x     ||||||||||||||||||||||||||||||||||||||XXXXXXX|||
IW2 vliv_temp      x x     ||||||||||||||||||||||||+++|||||||||++++XXXXXXX|
IW5 vliv_temp      x x     ||||||||||||||||||||||||+++|||||||||+XXXXXXXXXXX

hier z.B. „vliv_temp“
Jetzt muss man noch erkennen, dass jede Zeile exakt die gleiche Länge hat.
Die Zugehörigkeit zu Season, Tag oder Status wie z.B. home/away… steckt in den ersten Zeichen (IW2 oder IS9). Hiernach findet noch eine Priorisierung statt.
Die Temp steckt in den letzten 48 Zeichen.
Die Zeit wird (im debug als Position des Zeichens sichtbar) beim Aufruf als Zahl ermittelt.

Jetzt liest man eine Zeile ein und steuert die Position (mit Offset) an. Das Ergebnis (Zeichen) ist dann das Temperaturäquivalent.

Grüße
Fabian

Hallo,
Also steuertechnisch hab ich das inzwischen schon seit gestern Abend verändert. Weil die Logik ansich hab ich teilweise verstanden.

IW0 vliv_temp      x x     ||||||QQQQQQQQQQQQQXRXRXRXRXRXRXRRRRRXXRXXRXXXX|

aber um es nochmal meine letzten Unklarheiten zu beseitigen.

das I = ?
W = Winter (oder doch für away?)
0= Sonntag
vliv_temp = Wohnzimmer
dann kommt zweimal ein X für was steht das?
die restlichen Zeichen |, Q, X,R sind mir logisch hab sie auch testweise schonmal angepasst.

-Aber um das nochmal zu verstehen als Grundlage das script schaut sich die .ini Zeile für Zeile an und wertet dann dem enstprechend aus? Oder sehe ich das verkehrt?

Der entsprechende Temperaturbuchstabe wird also mit

substr($buffer,2,1

gelesen.
So nun versuch ich nochmal nachzuvollziehen wie er auf den richtigen zur richtigen Uhrzeit kommt.

         if ((substr($buffer,1,1) == "$season") and (substr($buffer,2,1) == "7") and (($now["wday"] == 0) or ($now["wday"] == 6))) $aktor[chop(substr($buffer,4,14))]["weekend"] = substr($buffer,27,48);

wenn der erste (wert)Buchstabe season entspricht UND der zweite wert eine 7 ist UND (($now = Sonntag) oder ($now=samstag))

-hier komme ich grad net weiter ich vermute mal das dies die then Teil der Formel ist:

$aktor[chop(substr($buffer,4,14))]["weekend"]

ich denke mal hier bekommt die Variabel $aktor die Werte die ab der spalte 47 stehen bis 48 (also die halbstündlichen buchstabenTemperaturen werden eingelesen) zeichen danach [chop nimmt sich hier den richtigen sensornamen. z.B.: vliv_temp) und dann „weekend“ ist wie „wday“ eine Zeitangabe.

ach menno ich raff den Teil net.<<<

So zur Auswertung:

if(array_key_exists("weekend",$value) && $debug)echo("  weekends        : ".$value["weekend"]."
");

Wenn ich mir dann die Auswertung anschaue mache ich mir später dazu gedanken.

Ich hoffe es antwortet noch jemand. Bei meinen vielen dummen Fragen.
Weil mit PHP hab ich mich noch nie beschäftigt. Aber ich will ja was raffen.

Demnächst kommt wohl dann ein Buch :slight_smile:

Ufff, doch ganz schön viele Fragen… :confused:

Bei so vielen Fragen fällt die Antwort leider etwas umfangreicher aus :wink:

Also nochmal langsam:
Erstmal unbedingt die sFHTs Seite im Wiki durchlesen! Fredje hat es meiner Meinung nach sehr gut erklärt.

Zu den einzelnen Sachen:

#Season            T T   H 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2 
#| day             1 2   O 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 
#|| sensor         x x   U 030303030303030303030303030303030303030303030303
#|| |              x x   R 000000000000000000000000000000000000000000000000
DS  default        x x     -------------------------------------+++++++----
DW  default        x x     -----------------------------------+++++++++----

  1. Erster Buchstabe steht für den Status:
    H - home oder holiday
    W - away
    D - default
    I - Tagwerte (in Verbindung mit Zahl)
    Auszug aus wiki

Programierung der Tage: 9 : jeden Tag, 0-6 fur so. bis sa., 7 für Wochenenden (sa. und so.)

  1. Zweiter Buchstabe ist Season (W-Winter, S-Sommer)
    Danach die Instanz oder „default“ für universal (wenn vorhandene Instanz in Tabelle nicht gefunden wird.)

  2. Das hier:

Der entsprechende Temperaturbuchstabe wird also mit

substr($buffer,2,1)

gelesen. 

kannst Du Dir mit 2. selbst beantworten:
Es wird das dritte Zeichen ausgewertet, also der Tag.

Das hier liest die Zuordnung Temperatur-Zeichen aus.

      if (substr($buffer,0,1) <> "#") {
         $temp[substr($buffer,0,1)] = substr($buffer,1,5);
      }

Hier findet das Aulesen der zur Zeit gehörenden temperatur statt:

  $aktor[$key]["soll"] = $temp[substr($value["result"],$pos,1)];

$pos entspricht der Position in der Zeile anhand der Zeit

Das stimmt so leider auch nicht ganz:

-hier komme ich grad net weiter ich vermute mal das dies die then Teil der Formel ist:

$aktor[chop(substr($buffer,4,14))]["weekend"] = substr($buffer,27,48)

ich denke mal hier bekommt die Variabel $aktor die Werte die ab der spalte 47 stehen bis 48 (also die halbstündlichen buchstabenTemperaturen werden eingelesen) zeichen danach [chop nimmt sich hier den richtigen sensornamen. z.B.: vliv_temp) und dann "weekend" ist wie "wday" eine Zeitangabe. 
>>>ach menno ich raff den Teil net.<<<

hier wird dem zweidimensionalen array $aktor mit den Keys

[chop(substr($buffer,4,14))]

(also dem Namen der Instanz) und

["weekend"]

also der Tag-Status „weekend“ die Templiste

substr($buffer,27,48)

für diesen Zustand zugewiesen

Na, noch Fragen oder sind jetzt alle Klarheiten beseitigt? :smiley:

Danke Fabian,

Du hasst mir die ganze schreiberei behoben.

und sorry fur die späte antwort : war fur 3 wochen verrreist in eine Gegend ohne Inet :o

@matrose: was der Fabian geschrieben hat stimmt 100%-ig. Bei bedurf einfach hier nochmals melden :slight_smile:

Grusse,