Problem: "Undefined Index: SELF" Version: ec68245

Fehler im Webfront
:

fehler.png

Jau,
hatte ich auch gerade beim Testen in der zWave Gateway Instanz bei „Informationen neu laden“:

2015-06-08 21_01_11-IP-Symcon Verwaltungskonsole.jpg

lueralba

Habe die Zeile mal rausgeworfen(mit //), da ich gerade am PHP für MPD-upnp sitze.
Will noch mein Modul zum laufen bekommen. (ist jetzt schon mehr drin, als ich erwartet hatte)

Danke. Fix dafür im nächsten Update!

paresy

Tatsächlich?

Untersuche IPS Version 4.00

1. Folgende mir wichtigen Funktionen fehlen:
IPS_GetScriptThreads
IPS_Execute
IPS_ExecuteEx
Sys_GetProcessInfo
Sys_GetMemoryInfo
Sys_GetCPUInfo
Sys_GetHardDiskInfo
Sys_GetNetworkInfo
Sys_GetSpooler
Sys_GetBattery
Sys_GetURLHeaders

2. Folgende mir wichtigen funktionen sind 'ohne wirkliche Funktion':
IPS_SemaphoreEnter
IPS_SemaphoreLeave
IPS_Sleep
Sys_Ping
Sys_GetURLContent
Sys_GetURLContentEx

Text generiert durch MeineMirWichtigenFunktionen

Viele Grüsse
Harald

Ja. Die ist drin, aber noch nicht in der IPS_GetFunctionList dabei.

Ebenso bei den hier: IPS_Sleep, Sys_Ping, Sys_GetURLContent, Sys_GetURLContentEx

paresy

Danke für die rasche Antwort!

Die Funktionen sind, wie mir die folgende Fehlermeldung zeigt, jetzt mit ausführbarem Code hinterlegt:

Parameter type of Name does not match in /usr/share/symcon/scripts/Bluetooth_Scanner.ips.php on line 2
Parameter type of Name does not match in /usr/share/symcon/scripts/Bluetooth_Scanner.ips.php on line 3

bei Ausführung dieses

<?php
IPS_SemaphoreEnter (36432 /* [Objekt #36432 existiert nicht] */, 0);
IPS_SemaphoreEnter ($_IPS['SELF'], 0);
IPS_SemaphoreEnter ('36432', 0);
IPS_SemaphoreEnter ('Belegt', 0);


Auch die beiden ersten Versionen werden in der Windows-Version von IPS klaglos ausgeführt.

Fehlermeldung ist zwar korrekt, weil

IPS_SemaphoreEnter
boolean IPS_SemaphoreEnter ( string $Name, integer $Wartezeit )

führt aber zu einer weiteren Inkompatibilität meiner bereits in der Windows-Version von IPS verwendeten Skripte, wenn man sich auf die kleine „Nachlässigkeit“ von IPS verlassen hat.

Viele Grüsse
Harald

Bin jetzt dabei, meine bisher in Windows problemlos laufenden Skripte in der Raspi-Version umzustellen.

Jetzt endet IPS häufig nach dieser Fehlermeldung:

20:00:11 | 00000 | WARNING | ScriptEngine         | Result für ScriptID #34349: Fatal error: Cannot find semaphore! in /usr/share/symcon/scripts/Termin-Monitor.ips.php on line 38

line 38 ist das erste ausführbare Statement in diesem PHP-Pgr:

//0---- Skript muß nicht unbedingt ausgeführt werden, evtl. bis zum nächsten Aufruf warten, aber nicht doppelte Ausgabe
if ( IPS_SemaphoreEnter( 'HTML_TerminListe', 1000) ) {

...

    IPS_SemaphoreLeave('HTML_TerminListe');       // und freigeben
} else {                                    // Semaphor  gesetzt: ist nicht so wichtig, beenden
    if ( $_IPS['SENDER'] == "Execute" ) {
        print("Semaphore HTML_TerminListe gesperrt");
    }
}  // Ende Semaphore-Kreis



Jetzt sitze ich verwunderte da und frage mich, wie der Befehl IPS_SemaphoreEnter die Meldung ‚Cannot find semaphore!‘ abgeben kann, wenn der doch nur ein Semaphore setzen soll !!!

Bug in Linux-IPS_SemaphoreEnter ?
Mach ich was falsch ?
Wieso kann ein PHP-Skript den ganzen Ablauf von IPS zum Stillstand bringen?

Viele Grüsse
Harald

Zum nächsten Update haben wir unter anderem die Semaphoren überarbeitet. Ich würd’ dich also bitten uns noch mal mit dem nächsten Update Feedback zu geben. Den ganzen Ablauf dürfte es aber nicht zum Stillstand bringen.

paresy

Ich bin dabei ein Skript zu entwickeln, das im Execute-Mode Objekte anlegt und konfiguriert, u.a. Idents verändert.

Habe es mal probeweise auf einem Raspi laufen lassen und bekomme im Gegensatz zur Windows-Version beim Ablauf Fehlermeldungen und Fehlfunktionen:

Unter Linux Trace- und Fehlermeldungen (Fehlermeldungen so markiert):

IPS51160 Anwesenheiten 'Anwesenheiten' als neue Category
**Parameter type of ScriptID does not match in /usr/share/symcon/scripts/PuI_Ereignis_IPSInstaller.inc.ips.php on line 155**
Created VariableId PuI.Dta=13968

Neuer Ident für Objekt 47260 (Skripte\Test-Scripts\PuI):Dta_13968
Created VariableId Vater=33694
Created VariableId Mutter=16920
Created VariableId Kind=17159
Created VariableId Hund=34110
Created VariableId Katze=52499
Created VariableId Alle=36379
Set ObjectPosition='6' for Object='Anwesenheiten\Alle' 

Neuer Ident für Objekt 47260 (Skripte\Test-Scripts\PuI.Anwesenheiten):Dta_13968__PuIgrp_51160__Home_18732
**Ident muss für jede Ebene eindeutig sein in /usr/share/symcon/scripts/47260.ips.php on line 339**
Neuer Ident für Objekt 51160 (Anwesenheiten):Anwesenheiten___PuI_47260
**Ident muss für jede Ebene eindeutig sein in /usr/share/symcon/scripts/47260.ips.php on line 339**
Ursprung  : 47260 /*Skripte\Test-Scripts\PuI.Anwesenheiten*/ 
Verschoben: 47260 /*Anwesenheiten\PuI.Anwesenheiten*/

Bei diese beiden Objekten gab es Fehlermeldungen bezüglich Ident und sie wurden falsch konfiguriert:

Object:   47260 Anwesenheiten\PuI.Anwesenheiten (ist Skript)
Parent:   51160 Anwesenheiten
Children: 
          13968 Anwesenheiten\PuI.Anwesenheiten\PuI.Dta
ObjectInfo:    
    [ParentID] => 51160
    [ObjectID] => 47260
    [ObjectType] => 3
    [ObjectIdent] => Dta_13968
    [ObjectName] => PuI.Anwesenheiten


Object:   51160 Anwesenheiten (ist Kategorie)
Parent:   0 RaspiA2
Children: 
          33694 Anwesenheiten\Vater
          16920 Anwesenheiten\Mutter
          17159 Anwesenheiten\Kind
          34110 Anwesenheiten\Hund
          52499 Anwesenheiten\Katze
          36379 Anwesenheiten\Alle
          47260 Anwesenheiten\PuI.Anwesenheiten
ObjectInfo:    
    [ParentID] => 0
    [ObjectID] => 51160
    [ObjectType] => 0
    [ObjectIdent] => Anwesenheiten
    [ObjectName] => Anwesenheiten

Zum Vergleich, auf der Windows-Version lief alles glatt:

IPS40593 Anwesenheiten 'Anwesenheiten' als neue Category
Created VariableId PuI.Dta=56840

Neuer Ident für Objekt 51442 (Skripte\PuI):Dta_56840
Created VariableId Vater=56317
Created VariableId Mutter=34204
Created VariableId Kind=35577
Created VariableId Hund=14332
Created VariableId Katze=38460
Created VariableId Alle=26066
Set ObjectPosition='6' for Object='Anwesenheiten\Alle' 

Neuer Ident für Objekt 51442 (Skripte\PuI.Anwesenheiten):Dta_56840__PuIgrp_40593__Home_32739

Neuer Ident für Objekt 40593 (Anwesenheiten):Anwesenheiten___PuI_51442
Ursprung  : 51442 /*Skripte\PuI.Anwesenheiten*/ 
Verschoben: 51442 /*Anwesenheiten\PuI.Anwesenheiten*/

Und auch die Idents wurden richtig angelegt:

Object:   51442 Anwesenheiten\PuI.Anwesenheiten (ist Skript)
Parent:   40593 Anwesenheiten
Children: 
          56840 Anwesenheiten\PuI.Anwesenheiten\PuI.Dta
ObjectInfo:    
    [ObjectID] => 51442
    [ObjectIdent] => Dta_56840__PuIgrp_40593__Home_32739



Object:   40593 Anwesenheiten (ist Kategorie)
Parent:   0 Kein(e)
Children: 
          14332 Anwesenheiten\Hund
          26066 Anwesenheiten\Alle
          34204 Anwesenheiten\Mutter
          35577 Anwesenheiten\Kind
          38460 Anwesenheiten\Katze
          51442 Anwesenheiten\PuI.Anwesenheiten
          56317 Anwesenheiten\Vater
ObjectInfo:    
    [ObjectID] => 40593
    [ObjectIdent] => Anwesenheiten___PuI_51442

Wie geht das jetzt weiter?
Die Linux-Version ist als vollwertiger Ersatz für die Windows-Version noch weit entfernt!!

In der letzten Zeit gab es zwar jede Menge Ergänzungen von Peripherie-Komponenten, aber an der grundsätzlichen Instabilität der Linux-Version hat sich nichts geändert. Bei meinen Raspis verendet IPS bereits nach mehreren Stunden aus nicht nachvollziehbaren Gründen.
Die neuesten Versionen von gestern und heute habe ich noch nicht installiert, werde ich gleich mal machen und glaube bis auf weiteres auf ein Wunder :slight_smile:

Viele Grüsse
Harald

Das ist immer noch der bekannte Fehler, dass du keine String als Integer nutzen darfst. Die anderen Fehler sind nur Folgefehler.

paresy

Ich habe mal probeweise bei der Zusammenstellung des Ident ein String-Casting eingeführt und fest definierte Strings in Hochkomma gesetzt:

// Erforderliche Infos stehen im Ident
// weil "Ident nur aus Buchstaben und Zahlen bestehen darf" machen wir diesen Zirkus:
function ArrayToIdent ($InfoArray) {
    $Ident = '';
    foreach ($InfoArray as $Key => $Value) {
        $Ident.= ((string)$Key) . "_" . ((string) $Value);
        $Ident.= "__";
    }
    return ((string) trim ($Ident, '__'));
}

Der Mißerfolg ist derselbe.

Schließlich wurde/wird ja immerhin einmal der Ident mit einem Integer akzeptiert:

Neuer Ident für Objekt 29979 (Skripte\Test-Scripts\PuI):Dta_24550

Die „Warning: Ident muss für jede Ebene eindeutig sein“ trifft ja auch nicht zu; die Objekte stehen in unterschiedlichen Ebenen und die vorgesehenen Idents sind unterschiedlich:


Neuer Ident für Objekt 29979 (Skripte\Test-Scripts\PuI):               Dta_24550
Neuer Ident für Objekt 29979 (Skripte\Test-Scripts\PuI.Anwesenheiten): Dta_24550__PuIgrp_23056__Home_18732
Neuer Ident für Objekt 23056 (Anwesenheiten):                          Anwesenheiten___PuI_29979

Verträgt die IPS-Routine in der Linux-Version evtl. keine doppelten Unterstreichungen oder keine längeren Idents?

Ist „der bekannte Fehler, dass du keine String als Integer nutzen darfst“ jetzt mein Fehler oder der von IPS und wir können darauf hoffen, daß die Linux-Version noch so ‚tolerant‘ wie der Windows-Version wird?

Viele Grüsse
Harald

Ja, die Linux Version wird mit den nächsten Updates toleranter werden. Wir wollen, dass diese fast vollständig kompatibel zur Windows Version ist [emoji1]

Dein Problem mit den Idents muss ich mir noch mal genauer ansehen.

paresy

Nochmalige Ident-Vergabe funktioniert auch in der neuesten Linux-Version nicht, unter Windows kein Problem:

<?
// Test_Ident

$VariableId = IPS_CreateVariable (3);
IPS_SetName ($VariableId, 'Test');
IPS_SetParent ($VariableId, $_IPS['SELF']);
IPS_SetIdent ($VariableId, 'Name1');
IPS_SetIdent ($VariableId, 'Name2');

?>


Warning:  Ident muss für jede Ebene eindeutig sein in /usr/share/symcon/scripts/12872.ips.php on line 8

Zusatzfrage: was muß ich tun, damit die Umlaute stimmen ?

Viele Grüße
Harald

Umlaute ist leider noch ein generelles Problem. Für den SetIdent Fehler gibt es einen Fix im nächsten Update! Danke für das tolle Beispiel!

paresy