Nantoterminal

Hi Leute!

Ich versuche gerade mein 1-Wire System auf V2 umzustellen und auch die dazugehörigen Skripte die ich da am Laufen habe. Momentan bastel ich am LCD_Function Script, welches für euch wahrscheinlich keine Herausforderung darstellt, für mich aber schon.

Die Geschichte mit dem nicht mehr vorhanden „IPS_GetScriptFile“ hab ich mir schon erlesen und geändert. Ich hake momentan an $lcd->SendLCDInit. Diese Befehl bringt bei mir eine Fehlermeldung, gibts den so auch nicht mehr in V2??

Hallo hofimax,

wäre es möglich von Dir zu erfahren, welche Fehlermeldung Du bekommen hast?

Gruß
HJH

Natürlich, sorry, wie Kopflos von mir!

LCD_Functions.ips.php
Fatal error: Call to a member function SendLCDInit() on a non-object in [LCD Anzeige] on line 31

Oder heißt das das er diesen Befehl im „LCD_Functions“ Script nicht findet?! Steig bei der ganzen PHP-Sache ja noch nicht ganz durch :confused:

Hallo hofimax,

versuch mal die beiden Skripte im Anhang, bevor Du eigene Änderungen vornimmst.

Gruß
HJH

NanoTerminal.zip (4.97 KB)

Dank dir! Ich werde diese gleich mal testen. Hast du diese Scripte für V2 angepasst oder?

Wenn ich dieses Script „Temperatur_Anzeige.php“ für V2 auch noch haben könnte, wäre ich dir dankbar. Dort habe ich nämlich das eigentliche Problem! Ich denke ich habe mich im ersten Post vielleicht falsch ausgedrückt…

Mein Script schaut momentan so aus:

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : Temperatur_Anzeige.ips.php
Trigger  : 10
Interval : 
*/

$InstanceID = 40697 /*[DS2408]*/;
$ControllerType = "Standard";
$Zeilen = 2;
$Spalten = 16;

$id=IPS_GetScriptID ("LCD_Functions");
$script = IPS_GetScript($id);
echo $script['ScriptFile'];


$lcd->SendLCDInit();

// Ausgabe zum Display

   $aussen = GetValueFloat("Aussen");
   $aussen1 = sprintf("%2.0fC", $aussen);
   $aussen2 = "Aussentemp:  ".$aussen1;
   $lcd->SendLCDText(0, 0, $aussen2);
   $innen = GetValueFloat("Schlafzimmer");
   $innen1 = sprintf("%2.0fC", $innen);
   $innen2 = "Schlaftemp:  ".$innen1;
   $lcd->SendLCDText(1, 0, $innen2);

?>

Und ich erhalte folgende Fehlermeldung:

Warning:  Skript mit Namen "LCD_Functions" existiert nicht in C:\Programme\IP-SymconV2\scripts\LCD_Anzeige.ips.php on line 16

Warning:  Skript #0 exisitert nicht in C:\Programme\IP-SymconV2\scripts\LCD_Anzeige.ips.php on line 17

Fatal error:  Call to a member function SendLCDInit() on a non-object in C:\Programme\IP-SymconV2\scripts\LCD_Anzeige.ips.php on line 21

Das Script LCD_Functions existiert übrigens im angegebenen Pfad, aber warum erkennt es IPS nicht?!? :confused:

Hallo hofimax,

die Fehlermeldung stammt mit Sicherheit nicht von Deinem „Temperatur_Anzeige“ Skript. Ich kann dort nämlich keine include- oder require-Anweisung finden.

Die Fehlermeldung weist auf das Skript „LCD_Anzeige“ hin, nicht „Temperatur_Anzeige“.

Gruß
HJH

Was willst du mir damit sagen? Das ich das LCD_Functions Script nicht im richtigen Pfad habe oder das dort ein Fehler ist?!?!

Edit: Okay, erstes Problem gelöst! Ich muß ja den Script-Namen verwenden…eieieiei

Bleibt mir noch diese Fehlermeldung:

LCD_Functions.ips.php
Fatal error: Call to a member function SendLCDInit() on a non-object in [LCD Anzeige] on line 21

Eventuell musst Du den Scriptnamen an den Objektnamen mit der ID anpassen.

IN V2 gibt es keine Namen mehr.

Als Beispiel.

require "44124.ips.php";

Soll nur als Hinweiss dienen, da ich weder das eine noch das andere kenne :slight_smile:

Zumal, denke ich HJH weiss was er produziert. Nur mal die Anweisungen befolgen und dann Feedback geben.

Hi RWN!

Danke für deine Hilfe, aber dieses Problem denke ich schon gelöst zu haben indem ich den Objektnamen verwendet habe. Seitdem bekomme ich nur mehr die eine Fehlermeldung mit dem SendLCDInit, wobei ich hier eben nicht genau weiß an was es liegt…

Es war ja nur ein Hinweiss. Stimmt denn deine Script ID mit Scriptnamen überein.
Es gibt in der V2 keine Namen mehr !!!

dein Script LCD_Functions.ips.php heist in der V2 nicht mehr so. Sondern, siehe oben.

Hallo Rainer,

Du musst unterscheiden zwischen IPS und PHP. Die include-Anweisung (oder auch require) ist eine PHP-Anweisung, kein IPS-Befehl. Somit muss natürlich der Skriptname verwendet werden, nicht die ID. Selbstverständlich besitzt das Skript eine ID, diese spielt jedoch für PHP keine Rolle.

Hallo hofimax,

ich will damit sagen, dass ich in Deinem „Temperatur_Anzeige“-Skript weder eine include- noch eine require-Anweisung entdecken konnte. Folglich kann die von Dir genannte Fehlermeldung nicht von diesem Skript stammen. Das Skript kann so, wie Du es veröffentlicht hast, unmöglich laufen, da die Einbindung des Skripts „LCD_Functions“ zwingend erforderlich ist.

Gruß
HJH

Ist dies dann erst seit Version 2 so? Das Script hat ja in V1 auch funktioniert…

Hallo hofimax,

wenn Du das Nanoterminal betreiben willst, musst Du das Skript „LCD_Functions“ einbinden. Das war in der V1 schon so und ist auch in der V2 nicht anders. Es hat sich diesbezüglich nichts geändert.

Gruß
HJH

Ahhhja,danke.Ich muß diesen Punkt bei meinem Probieren wo verloren haben!! Ich habe das mal so versucht, tut aber nicht?! Ich kann diese Fehlermeldungen irgendwie noch überhaupt nicht zuordnen, leider.

$includeFile =  IPS_GetScriptID("LCD Funktionen");
require_once $includeFile;
$lcd = new OneWireLCD($InstanceID, $ControllerType, $Zeilen, $Spalten);

Fehler:

Warning:  require_once(13748) [function.require-once]: failed to open stream: No such file or directory in C:\Programme\IP-SymconV2\scripts\LCD_Anzeige.ips.php on line 17

Fatal error:  require_once() [function.require]: Failed opening required '13748' (include_path='.;C:\php5\pear') in C:\Programme\IP-SymconV2\scripts\LCD_Anzeige.ips.php on line 17

Hallo hofimax,

Du musst das halt richtig einbinden, so wie du das machst, kenne ich das auch nicht. Wenn schon, dann bitte als Funktion einbinden.

// $includeFile =  IPS_GetScriptID("LCD Funktionen");  FALSCH
$root = str_replace( '\\','/',IPS_GetKernelDir() );
include_once( $root . "scripts/LCD Funktionen.ips.php");
$lcd = new OneWireLCD($InstanceID, $ControllerType, $Zeilen, $Spalten);

Die Klammern sind da wichtig, das braucht eine Funktion halt.

Hallo Torro!

Die Klammern ändern leider auch nichts an meiner Fehlermeldung. Das Script das ich hierverwende habe ich jetzt nochmal 1:1 von V1 rüberkopiert. Dort hat es ja auch funtkioniert. Alles was ich jetz daran geändert habe ist die ID des DS2408 und ich habe den Befehl IPSGetScriptFile gegen IPSGetScriptID getauscht und den dazugehörigen Namen angepasst. So sieht das ganze Script jetzt aus:

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : LCD_Anzeige.ips.php
Trigger  : 10
Interval :
*/

$InstanceID = 40697 /*[DS2408]*/;
$ControllerType = "Standard";
$Zeilen = 2;
$Spalten = 16;

$includeFile =  IPS_GetScriptID("LCD Funktionen");
require_once ($includeFile);
$lcd = new OneWireLCD($InstanceID, $ControllerType, $Zeilen, $Spalten);

$lcd->SendLCDInit();

// Ausgabe zum Display

   $aussen = GetValueFloat("Aussen");
   $aussen1 = sprintf("%2.0fC", $aussen);
   $aussen2 = "Aussentemp:  ".$aussen1;
   $lcd->SendLCDText(0, 0, $aussen2);
   $innen = GetValueFloat("Schlafzimmer");
   $innen1 = sprintf("%2.0fC", $innen);
   $innen2 = "Schlaftemp:  ".$innen1;
   $lcd->SendLCDText(1, 0, $innen2);

?>

Hallo hofimax,

liest Du eigentlich meine Antworten? :confused:

Weiter oben habe ich doch ganz klar gesagt, dass include und require PHP-Anweisungen sind. Diese benötigen keine ID sondern eine Pfadangabe. PHP hat keine Ahnung von IP-Symcon IDs und wird auch niemals eine haben. Include ist eine Angelegenheit von PHP, nicht von IP-Symcon.

Leider hat Torro genau den selben Fehler gemacht. Der IPS-Befehl IPS_GetScriptID() hat hier nichts zu suchen, da die include-Anweisung mit einer ID nichts anfangen kann.

Hier noch einmal in aller Deutlichkeit:

include "C:\\IP-Symcon\\scripts\\LCD_Functions.ips.php";

oder

require "C:\\IP-Symcon\\scripts\\LCD_Functions.ips.php";

Gruß
HJH

Die von HJH verwendete Variante entspricht der Konvention und ist natürlich so in Ordnung. Ich verwende gerne folgende Anweisung:


include(IPS_GetKernelDir()."scripts\\LCD_Functions.ips.php");

Diese hat den Vorteil, dass beim Verändern des IPS Pfades keine Anpassungen notwendig sind.

Für mich war das Ganze jetzt nicht ganz so leicht verständlich wie für manch anderen, aber ich habs geschafft das Script wieder zum Laufen zu bringen. Der Unterschied zum alten Script bzw. zur Funktionsweise in V1 ist jetzt der, daß es wesentlich länger dauert bis der Text am Display dargestellt wird. Oder wo ein sleep Befehl dara schuld?!

Hier nochmal mein Script das jetzt funzt, vielleicht kanns ja ein anderer „PHP-Nockabazi“ auch brauchen :wink:

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : LCD_Anzeige.ips.php
Trigger  : 10
Interval :
*/

$InstanceID = 40697 /*[DS2408]*/;
$ControllerType = "Standard";
$Zeilen = 2;
$Spalten = 16;


$root = str_replace( '\\','/',IPS_GetKernelDir() );
include_once( $root . "scripts/LCD_Functions.ips.php");
$lcd = new OneWireLCD($InstanceID, $ControllerType, $Zeilen, $Spalten);



$lcd->SendLCDInit();

// Ausgabe zum Display

   $aussen = GetValueFloat("Aussen");
   $aussen1 = sprintf("%2.0fC", $aussen);
   $aussen2 = "Aussentemp: ".$aussen1;
   $lcd->SendLCDText(0, 0, $aussen2);
   $innen = GetValueFloat("Schlafzimmer");
   $innen1 = sprintf("%2.0fC", $innen);
   $innen2 = "Schlaftemp:  ".$innen1;
   $lcd->SendLCDText(1, 0, $innen2);

?>

Danke für eure Hilfe!