mcvnet
9. Januar 2021 um 01:04
1
Hallo zusammen,
Warum ist bei KNX Instanzen Lesen (Erlaubt der Instanz den aktuellen Wert vom Bus abzufragen) nicht Standard ?
Wie kann ich alle meine Instanzen dazu bekommen den Wert abzufragen ohne jede Instanz von Hand zu überarbeiten ?
Gruß Mv
Du schreibst ein Skript, in welchem Du alle Instanzen einliest und dann den entsprechenden Parameter für jede Instanz setzt bzw. änderst. Das Einlesen lässt sich wahrscheinlich in diesem Fall gut über die ModuleID lösen.
Um das noch etwas zu konkretisieren hier eine nützliche Methoden:
IPS_GetInstanceListByModuleID (zeige alle Instanzen vom Typ KNX DPTxy)
IPS_GetModuleList (finde überhaupt heraus, welche GUID die KNX Instanz DPTxy hat)
IPS_GetConfiguration (herausfinden wie der Konfigurationspunkt heißt)
IPS_SetProperty (Eigenschaft xy auf abc setzen)
IPS_ApplyChanges (Änderungen auch speichern)
Wenn du diese Befehle in die Suche oben rechts auf dieser Webseite eingibst, erhälst du zu allen eine genauere Beschreibung.
Anhaltspunkte:
print_r(IPS_GetModuleList());
print_r(IPS_GetConfiguration(beliebige, aber selbst im Objektbaum ausgesuchte Instanz ID von KNX DPTxy));
$instanzen = IPS_GetModuleList(GUID);
foreach($instanzen as $instanz){
- IPS_SetProperty ($instanz, "eigenschaft", "wert");
- IPS_ApplyChanges ($instanz)
}
mcvnet
9. Januar 2021 um 20:55
4
Super vielen Dank Jungs!
Warum die Option aber Standardmäßig
nicht angehackt sollte ja bestimmt auch einen Grund haben oder?
Gesendet von iPhone mit Tapatalk Pro
Ausser beim Start von IPS sehe ich keinen Grund, Werte vom Bus abzufragen. Und selbst da brauche ich nicht alles zu aktualisieren. Ich persönlich aktualisiere nur die Rollläden.
paresy
10. Januar 2021 um 20:57
6
Übrigens gibt es ein fertiges Skript dafür hier: EIB/KNX — IP-Symcon :: Automatisierungssoftware
paresy
Kann es sein, dass das Script ein paar { und } bei den GUIDs zu wenig hat?
paresy
10. Januar 2021 um 21:43
8
Nein. Da waren leider früher ein paar IP-Symcon Versionen fehlerhaft und haben die GUIDs nicht korrekt validiert und somit waren da falsche GUIDs drin. Dieses Skript ist deshalb etwas komisch aber dadurch für alle Versionen von IP-Symcon kompatibel
paresy
mcvnet
11. Januar 2021 um 10:51
9
Super Vielen Dank! Macht die Sache nun viel Einfacher
Gruß MV
mcvnet
11. Januar 2021 um 17:47
10
Ich habe nun dieses Script wie folgt verwendet bekomme aber trotzdem noch einen „Zeitüberschreitungsfehler.“
Wer kann helfen ?
Warning: Zeitüberschreitung beim Warten auf Antwort in /mnt/data/symcon/scripts/56880.ips.php on line 31
Line 31 ist: = KNX_RequestStatus($instanceID);
<?php
// set_time_limit (300); // maximale PHP-Ausführungszeit in Sekunden
set_time_limit(1200);
$gatewayIDs = IPS_GetInstanceListByModuleID("{1C902193-B044-43B8-9433-419F09C641B8}");
$instanceIDs = IPS_GetInstanceList();
foreach($gatewayIDs as $gatewayID) {
foreach($instanceIDs as $instanceID) {
$i = IPS_GetInstance($instanceID);
if($i['ConnectionID'] == $gatewayID) {
switch($i['ModuleInfo']['ModuleID']) {
case "{24A9D68D-7B98-4D74-9BAE-3645D435A9EF}": //Shutter
case "81F54858-72B1-4C2C-8CE3-7E00A3168378": //RGB (Legacy until IP-Symcon 5.0)
case "{81F54858-72B1-4C2C-8CE3-7E00A3168378}": //RGB (IP-Symcon 5.1+)
case "4D7F7548-0979-4ABD-9BB3-81F9477C0903": //RGBW (Legacy until IP-Symcon 5.0)
case "{4D7F7548-0979-4ABD-9BB3-81F9477C0903}": //RGBW (IP-Symcon 5.1+)
EIB_RequestStatus($instanceID);
break;
case "{D62B95D3-0C5E-406E-B1D9-8D102E50F64B}": //Group
if(IPS_GetProperty($instanceID, "GroupCapabilityRead")) {
EIB_RequestStatus($instanceID);
}
break;
default:
//DPTs
if(strpos($i['ModuleInfo']['ModuleName'], "DPT") !== false) {
if(IPS_GetProperty($instanceID, "CapabilityRead")) {
KNX_RequestStatus($instanceID);
}
}
break;
}
}
}
}
tobiasr
11. Januar 2021 um 18:03
11
Hat die entsprechende Gruppenadresse (ggf. mal immer eine Zeile vorher die Instanz ID ausgeben) denn genau ein Gerät, das die Leseanfrage beantwortet?
mcvnet
11. Januar 2021 um 18:05
12
nein leider nicht nur 10x Warning: Zeitüberschreitung beim Warten auf Antwort in /mnt/data/symcon/scripts/56880.ips.php on line 31
tobiasr
11. Januar 2021 um 18:15
13
Wenn es kein Gerät gibt, dass antwortet… Dann ist es doch klar, dass es eine Zeitüberschreitung gibt.
Bau doch mal eine Zeile weiter oben ein
print "
instanceID: ".$instanceID;
Dann kannst du wenigstens prüfen, ob das zusammenhängt.
paresy
12. Januar 2021 um 21:33
14
Das ist übrigens auch der Grund, warum Lesen nicht by Default aktiv ist. Im Export ist nicht bekannt, ob es exakt ein Gerät gibt, welches auf der GA überhaupt eine Antwort liefern kann.
paresy