Hallo zusammen,
vielleicht hab ichs in der Doku nur überlesen oder ich finde es einfach nicht.
Sachverhalt: Ich hab im Haus ca. 30 (Endausbau) 1-Wire Temperatursensoren in der Wand die die Temperatur dort messen sollen.
Nun möchte ich überall eine Abfrage machen, ob der Sensor noch läuft. Das habe ich bereits bei einem auch über ein kleines Script mittels Abfrage der Updatezeit gelöst. Das Problem ist, dass ich gerne Redundanz vermeiden würde, und nicht das Script 29 mal bei den anderen Sensoren kopieren möchte.
Wie baut man sich hier eine eigene Funktion der ich Variablen übergeben und Variablen zurückbekomme?
danke fürs erste Feedback. Ich bin aber noch so gut wie blutiger Anfänger.
Gibts irgendwo ein kleines Tutorial, wie ich ein normales Script in eine Funktion in Variablen umwandel. Ich hab früher mal ein Jahr Borland Pascal 7 programmiert. Da gabs so procedures auch. Die haben dann ne aufgabe erledigt und das ergebnis zurück gegeben.
ich vermute ja dass in dem array dann die übergebenen werte stehen sollen, und wie übergeb ich die dann von der hauptebene? Denke ziemlich doofe Fragen, aber hier bei PHP bin ich absoluter Newbie.
Function funktioniert wie in Pascal. Die Pascal-Procedure erhältst Du, wenn Du bei einer Function einfach kein return einbaust.
Ansonsten steht unter PHP: Sprachreferenz - Manual alles, was man wissen sollte. Klassen und Objekte, sowie dann auch Namespaces brauchst Du für den Anfang nicht. Im normalen IP-Symcon-Alltag würde mir jetzt eh nicht einfallen, wo sich deren Benutzung lohnen würde.
Was Du jetzt mit Hauptebene meinst musst Du nochmal genauer erklären.
Du kannst so viele Funktionen in deine Skripte schreiben, bis deine Festplatte überfüllt ist ;). Die Funktionen sind immer nur im jeweiligen Skript verfügbar. Willst Du die auslagern kannst Du in PHP require oder include verwenden.
Die Funktionssammlung.ips.php muss dann im IP-Symcon-Ordner im Unterverzeichnis /scripts erstellt werden. Das andere Skript wird, wenn in IPS direkt erstellt, da automatisch reingepackt.
Du speicherst alle deine Funktionen einfach in einer Textdatei ab. Diese nennst du dann wie du willst oder einfach „Funktionssammlung.ips.php“, wie Horst sie genannt hat. Meine hab ich zum Beispiel „functions.php“ getauft. Es macht sinn die Datei im Ordner „scripts“ abzulegen. Damit sparst du dir lange Pfaddefinitionen angeben zu müssen.
In jedem Script, in dem du diese Funktionen verwenden willst musst du sie einmal bekannt machen. Das machst du zum Beispiel mit dem Befehl „require“. Thats all.
Wozu willst Du überhaupt 30 Skripte erstellen? Du brauchst doch nur ein Skript, indem Du alle IDs in ein Array packst, das Du dann mit foreach durchläufst. Siehe mein erstes Beispiel. Wenn Du es noch einfacher haben willst lässt Du Dir die Liste mit IPS_GetInstancesByModuleID - IP-Symcon :: Automatisierungssoftware generieren. Die ModuleID für Deinen Sensorentyp kann ich Dir jetzt nicht verraten, da musst Du einfach mal mit IPS_GetInstance - IP-Symcon :: Automatisierungssoftware einen Sensor abfragen und Dir die ModuleID notieren. Wenn Du Dein Kontrollskript hier postest und die ModuleID könnte ich Dir das auch kombinieren. Ist ja auch evtl. was für die Sammlung.
Oh Michel hat noch eine super Idee mit den 85 Grad gehabt.
Wenn meine Wänder 85 Grad hätten, dann würde es wohl bissl problematisch mit meiner Raumtemperatur Das bau ich auch noch ein!
Im Prinzip sollte es so aussehen, dass jede minute ein script gestartet wird, indem nur die Werte wie TemperatursensorID, TemperaturID und die ID der Ausfallvariable(Bool) zu einer (in Pascal war es die Procedure) übergeben wird.
Die Temperaturvariable soll bei mir bei Ausfall allerdings nicht den Wert von dem defekten Sensor annehmen sondern ich möchte eine alternativ Temperatur angeben von einem anderen Heizkreis, das ist zwar dann nicht perfekt, aber es wird zumindest nicht Kalt im Haus
Hi Michel,
so grob hab ich das auch schon festgestellt, ich wusste aber bei 85 Grad nicht, was fehlt… Aber super, dann hab ich bei einer Fehlersuche einen Anhaltspunkt.
Könnte man ja vielleicht noch in ein Fehlerlog schreiben
Das andere probier ich gleich direkt mal.
temperaturFunktion(43772, 13984, 47053); => Das ist der aufruf aus nem anderen Script???
Also,
ich hab nun mein Script mal zur Funktion umgestrickt. Aber ich ralle noch nicht, wie ich sie von einem anderen Script aus aufrufen soll. Muss ich die dazu doch in eine Textdatei pappen, diese ins IPS Verzeichnis…???
Das sind die Anfängerfragen
Gruß
Kai