Hersteller Spezifische Gerätetypen ermitteln ..

Hallo zusammen,

wie kann ich in einem Scriptt mir zu einem bestimmten Hersteller anhand der GUID, die bekannt sind z.B. von Homematic,
mir die Geräte Typen auflisten lassen, z.B. SchutterContact etc …

Über welche Befehle komme ich in der Objektverwaltung an diese Info?

Gruß
MacToolz

Hängt sehr stark von der Hardware ab.
Bei Homematic gibt es diese Info gar nicht.
Michael

Hi,

ok. Wie und wo kann ich denn sehen welche Infos ich vom einem bestimmten Gerät bekomme?

Gruß

Auch gar nicht?
Zumindest bei den Homematic Instanzen.
Bei anderen mag es zumindest teilweise gehen; wenn es z.B. verschiedenen Module für Aktoren, Dimmer usw gibt.
Michael

Hi,

es geht darum. Ich möchte ein Geräte spezifisches Script schreiben.
Dafür lege ich ein Dummy Modul an. Darunter verlinke ich alle nötigen und richtige Gerätetypen.
Dann soll das Script sich alle darunter liegenede Kinder durcharbeiten bis ich das Eltern Instanz Objekt habe.

Dann das Instanz Objekt abprüfen ob es auch wirklich das richtige Objekt wäre, also z.B. ein Fensterkontakt.

Was hätte ich dann für eine andere Möglichkeit? Mit dem hinterlegten und zugewiesenem Profil arbeiten?

Gruß
MacToolz

Ja, zum Beispiel.
Aber auch hier muss der User vorher Hand angelegt haben.
Sonst funktioniert auch dies nicht.
Wieder als Beispiel Homematic:

Magnetkontakt:

  • Variablename am Werk ist STATE und Profil ist ~Switch

Rauchmelder:

  • Variablename am Werk ist STATE und Profil ist ~Switch

Aktor:

  • Variablename am Werk ist STATE und Profil ist ~Switch

Somit kommst du hier auch erstmal nicht ans Ziel, bis der User z.B. bei Rauchmelder auf ~Alert und beim Magnetkontakt auf ~Window (o.ä.) umgestellt hat.

Wozu überhaupt den ‚Gerätetyp‘ ermitteln, wenn du eh die Geräte/Variablen verlinkst ?
Kannst doch einfach die Links nach Typ z.B. in Kategorien einsortieren.

Automatisch wird es aber sehr schwer.
Also exklusiv bei Homamatic hätte ich wirklich eine funktionierende Lösung (findest du in meinem HM EasyInstall-Skript), aber nicht für die ganze andere von IPS unterstützte Hardware.

Michael

Hi,

mhhh … warum sind die denn immer alle als Profil Switch zugeordnet?.
Ok, ich könnte damit leben das man dann entsprechend die Geräte, von denen man detektieren möchte
entsprechend über das Profil dann zuordnet.

Warum den Gerätetyp bestimmen, naja ich versuche eigentlich meine Kategorie Struktur in meinen Geräten so zu belassen wie ich halt meine Geräte halt ablege und dann später eigentlich was alles Code sein soll oder Variabel an einer anderen Stelle im Symcon liegt.

Ich möchte halt Hardware von Software, also Scripte etc. zu trennen. Hardware Hardware sein lassen.
Dann alles so zu verlinken wie ich es brauche z.B. in dem Prinzip wie ich es beschrieben habe.

Meine Vorstellung wäre, Geräte anlernen, entsprechend in Kategorien abzulegen und dort bleiben diese auch liegen.
Nichts an Scripte oder weitere Variablen unterordnen etc.

Ich finde sonst verliert man sich sehr schnell im IPS und man findet nix mehr wieder.
Ich denke das es meiner Meinung nach für mich zumindest so gut Strukturiert ist.

Nur dazu muss ich ein paar dinge abklopfen und sehen ob das auf dauer für einen Großteil so lösen kann.

Ok …

wäre das denn eine Lösung das man solch einen Weg gehen könnte?

Gruß
MacToolz

Abend!

Ich habe bei mir in der IPS-Console auch die Aufteilung
> Hardware
> Module
> Scripte & Variablen
> Visualisierung

…und ich kann nicht so ganz nachvollziehen, welche Probleme du da hast!?

Wenn ich in Scripten auf Hardware zurückgreife, dann gibt man einfach die entsprechende(n) Modul-Instanz(en) an und fertig!?

Grüße,
Chris

Ich habe da noch eine Ebene Gewerke.
Dort wird dann mit Links einsortiert.
Meine Scripte suchen sich dann ihre Links, ermitteln das Ziel und schon ist die ID aus dem Bereich Hardware im Script bekannt :slight_smile:

Michael

Mit Links arbeiten ist auch keine schlechte Idee :cool:
Ab und an „suche“ ich auch automatisch in meiner Hardware-Struktur, aber im Normalfall trage ich einfach die entsprechenden Instanzen ein und gut is :slight_smile:

Grüße,
Chris

Hi,

schaut euch mal den Screenshot an. So habe ich vorerst meine Struktur aufgebaut.

Problem ist das nicht. Ich versuche mich ein wenig zu organisieren und versuche dinge wie Scripte Hardware und Systemvariabel nicht zu vermischen.

Gruß

Zitat vergessen …

na das entspricht doch eigentlich das was ich doch beschrieben habe … nur das dass moit den Geräte spezifische Hardware ermitteln nicht geht.

Aber prüfen bzw. automatisch auf den richtigen Gerätetyp prüfen geht halt nicht.
Die Links lege ich von Hand an, nachdem ich die Instanzen im Hardware Zweig platziert habe.
Michael

Moin!

Du kannst auch Variablenänderungen triggern und dann von der Variable den Parent holen, davon den Ident/Namen holen, schauen was drin steht, wieder den Parent holen, …
Meinst du vlt. das?

Grüße,
Chris

Morgen zusammen,

ok, ich denke dann mir gerade auch einen anderen Weg aus. Bzw. wie ich dann an meine Geräte komme.

Kann man sich denn durch den IPS Baum hangeln oder muss ich mir die Instanz suchen und dann den Pfad auslesen und dann selber durch parsen?

Meine andere Idee wäre. Wenn ich meine Hardware anlege, sortiere ich diese entsprechend den Räumen zu und darunter liegen dann weitere Kategorien für die Aktor oder Sensorart.

Schaut mal in den Anhang.

Da habe ich wenn ich mich in einem Raum befinde z.B. folgende Kategorien drin.

FKT = Fensterkontakt
STK = Steckdosen
usw …

Gruß
MacToolz

Hallo zusammen,

also ich bin von meiner letzten Idee wieder abgekommen. Ich werde jetzt eher mit der Modulliste arbeiten,
und anhand meiner Ordnerstruktur werden ich mir meine Geräte zurecht suchen.

Ich bin der Meinung das wenn ich die Hardware importiere, sortiere ich die nach Geschosse und Räume ein. Darunter liegen dann meine Bezeichnungen für die Aktoren/Sensoren wie FKT = Fensterkontakt etc …

Dann nehme ich die Location von dem Aktor und suche innerhalb der Location. Weiter prüfe ich dann
das Objekt noch an ein paar dinge ab wie, ist es eine Instanz bis hin zu meiner Variabel.

Weiter kann ich dann eigentlich alles machen was ich ja möchte. Links erstellen wohin ich möchte etc … Eregnissee für den Aktor erzeugen.

Ich denke das ich so am besten an meine Hersteller spezifischen Geräte komme und die dann so bearbeite wie ich das möchte.

Man muss sich natürlich an seine Ordnerstruktur halten, aber so ist es ja mit allen Konstellationen die man nutzt.

Was meint ihr dazu ?

Hallo zusammen,

ich würde gerne meine aktuelle Version vom einsammeln spezifischer Geräte zeigen und mich gerne mit euch darüber unterhalten und Anmerkungen sammeln.

Meine generelle Idee ist wie man mit Instanzen im IPS Baum strukturiert umgeht und oder auch sinnvoll anlegt um diese so schnell wie möglich wieder zu finden, im code zu ermitteln bzw. auch beim Arbeiten im IPS Baum.

Ich zeige mal hier mein Einstiegssscript … und dann können wir uns darüber unterhalten …

<?

include(IPS_GetScriptFile(19730 /*[Scripte\HET\Geräte spezifisch ermitteln\STK\STK State select State]*/));

$Homematic 		= "{EE4A81C6-5C90-4DB7-AD2F-F6BBD521412E}";
$ZWave 			= "{101352E1-88C7-4F16-998B-E20D50779AF6}";
$sGuidString[] 	= $Homematic;								 
$sGuidString[] 	= $ZWave;

// PrintLog Ausgabe
$xPrintLog = TRUE;

// Zustandsvariabel die abgerufen werden sollen ...
$arSelectVarState[] = "Status";
$arSelectVarState[] = "Zustand";

// Funktionsaufruf
$arVarList = FN_HM_GET_STK_STATE("\\EG WZ\\STK\\MUSIK\\", $arSelectVarState, $xPrintLog, TRUE, $sGuidString);

// PrintLog Ausgabe
if ($xPrintLog)
	print_r($arVarList);

?>

ein weiteres Script und es sind dann noch weitere inkludierte Scripts darin … aber das wäre mal so das erste Gerüst …

<?

/*
#	Beschreibung:
#	----------------------------------------------------------------------------
#	
#		
#	Datum : 																			Version :
#	----------------------------------------------------------------------------------------------
#	04.02.2018																			V.1.0.0
#		-	Ursprung erstellt
#
*/

// Funktions Script inkludieren (einbinden)
include(IPS_GetScriptFile(32354 /*[Scripte\HET\000_MyCodeArchive\FUNCTIONS\FN_CreateActionsScript]*/));
include(IPS_GetScriptFile(30235 /*[Scripte\HET\Geräte spezifisch ermitteln\FN_GetHmProductDevice_V100]*/));
include(IPS_GetScriptFile(55706 /*[Scripte\HET\000_MyCodeArchive\FUNCTIONS\FN_GetProfileName]*/));
include(IPS_GetScriptFile(49292 /*[Scripte\HET\000_MyCodeArchive\FUNCTIONS\FN_CreateVariableByIdent]*/));

function FN_HM_GET_STK_STATE($sSuchPath, $arSelectVarState, $xPrintLog, $xCreateVars, $arGuidString)
{
	// Schlagworte um entsprechend die Aktoren etc. zu finden
	$sSuchPath 				= $sSuchPath;	// Suchen im Location Path, darunter wrd die Zuordnung gesucht. Bei Pfadangaben müssen Sonderzeichen doppelt angegeben werden										 
	$xPrintLog				= $xPrintLog;
	
	// VARIABEL
	$iCntHW		= 0;
	$iCntEIN 	= 0;
	$iCntAus 	= 0;
	
	// Suchliste, manche gleichartige Geräte haben unterschiedliche Variabelnamen für die gleiche Aktion
	$arSuchObjectName = $arSelectVarState;
	
	$arSTKEin	= [];
	$arSTKAus	= [];

	// Funktionsaufruf
	$arHWList = FN_GetHmProductDevice($arGuidString, $sSuchPath, $arSuchObjectName, $xPrintLog);
	// Funktionsrückgabewert ausgeben
	if ($xPrintLog)
	{
		print_r("Hardwareliste : 
");
		print_r($arHWList);
		print_r("
");				
	}
																					
	// HARDWARE LISTE ABARBEITEN
	foreach ($arHWList as $InstanzID)
	{													
		$iCntHW = $iCntHW + 1;	// Anzahl HW inkrement	
		$InstObject = $InstanzID;	// Instant Objekt aus Array in lokale VAR Objektvariabel ablegen
				
		// PÜRFE OB DAS OBJECT CHILDS HAT
		if ($InstObject['HasChildren'] == 1)	
		{
			// CHILD ABRUFEN
			$arChildOfObject = IPS_GetChildrenIDs($InstObject['ObjectID']);
							
			// CHILDS DURCHLAUFEN
			foreach($arChildOfObject as $ChildObject)
			{
				// VARIABEL VOM CHILD OBJEKT ABRUFEN
				$variable = IPS_GetVariable($ChildObject);			
					
				// Variabel Profil abrufen
				switch(FN_GetProfileName($variable))
				{
					// VARIABEL PROFIL AUSWAHL
					case "~Switch":	// Variabel Profil
						if (GetValue($variable['VariableID']) == 1)
						{			
							$iCntEIN = $iCntEIN + 1;
							$arSTKEin [] = $InstanzID['ObjectName']; 
						}
						elseif (GetValue($variable['VariableID']) == 0)
						{
							$iCntAus = $iCntAus + 1;
							$arSTKAus [] = $InstanzID['ObjectName'];													
						}
					default:
						// nicht das passende Profil entdeckt ... 		
						//																																																																																																																																																																							
				}	// ENDSWITCH switch(FN_GetProfileName($variable))					
			}	// ENDFOR foreach($arChildOfObject as $ChildObject)
		}	// ENDIF ($InstObject['HasChildren'] == 1)					
	}	// ENDFOR ($arHWList as $InstanzID)			
	
	// Systemvariabel anlegen
	/*
		0	Legt eine Variable vom Typ Boolean an
		1	Legt eine Variable vom Typ Integer an
		2	Legt eine Variable vom Typ Float an
		3	Legt eine Variable vom Typ String an
	*/
	if ($xCreateVars)
	{
		SetValue(FN_CreateVariableByIdent($_IPS['SELF'], "ZAEHLER1", "Anzahl STK ein", "", 1), $iCntEIN);
		SetValue(FN_CreateVariableByIdent($_IPS['SELF'], "ZAEHLER2", "Anzahl STK aus", "", 1), $iCntAus);
	}
	
	// PRINT LOG		
	if ($xPrintLog)
	{	
		print_r("
");
		print_r("Anzahl Hardware STK : " . $iCntHW . " | Ein : " . $iCntEIN . " | Aus : " . $iCntAus);
		print_r("
");
					
		if ($iCntEIN > 0)
		{				
			print_r("STK Ein ArrayList : ");
			print_r($arSTKEin);
			print_r("
");
		}				
		
		if ($iCntAus > 0)
		{
			print_r("STK AUS ArrayList : ");
			print_r($arSTKAus);
			print_r("
");				
		}	
	}		
		
	// Rückgabewerte Index 1 = Hardwareliste, 2 = Status der Aktoren ...
	$arVarRet = array
	(
		'HW List' 	=> $arHWList,
		'STK EIN' 	=> $arSTKEin,	
		'STK AUS' 	=> $arSTKAus,
	);	
	
	//return $arVarList;
	return $arVarRet; 
}																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																		
?>

Gruß
MacToolz