Velleman I/O steuern?

Hallo

Ich habe mir ein Velleman USB Board gekauft. Mit der Testsoftware läuft es fehlerfrei, nur in IPS bekomm ich es nicht zum laufen. Auch die vielen Beiträge im Forum haben mir nicht weiter geholfen. Da ich mich noch nicht gut mit PHP auskenne, kann mir vielleicht einer helfen.
Wie müßte das Skript aussehen, wenn ich mit dem Digitaleingang 1 den Digitalausgang 1 schalten möchte?
Die Scripte hier im Forum habe ich nicht zum laufen gebracht. Die K8055D.dll ist in IPS-Ordner und die Instanz-ID habe ich auch angepaßt, aber es läuft nicht.
Für Hilfe wäre ich dankbar.

Gruss
Computerpap

Hallo Computerpap,

ich habe folgendes Szenario. Wenn eine Katze auf das Klo geht spricht der Bewegungsmelder an oder ein Taster im Bad gedrückt wird, dann wird meine Kontrollierte Wohnraumlüftung über ein Velleman Board eingeschaltet. Hier mal die zwei Scripte dazu:

Script zum Einschalten:


<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : Freigabe_Lueftung.ips.php
Trigger  : 
Interval : 
*/
$status1 = GetValueBoolean("Bewegung_Katzenzimmer");
$status2 = GetValueBoolean("Anforderung_Lftg_Bad");
IF (($status1 == true) or ($status2 == true)){
VELLEUSB_WriteDigitalChannel(20168,1,True);
//echo "Anforderung Ein";
 }else {
VELLEUSB_WriteDigitalChannel(20168,1,False);
//echo "Anforderung Aus";
}
?>

Script für die Anforderung Lüftung wenn die Aussentemperatur kleiner als die Raumtemperatur ist und nur über Tag also zwischen 6:00 Uhr und 22:00 Uhr:


<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : Anforderung_Lueftung.ips.php
Trigger  : 
Interval : 
*/
$AT = GetValueFloat("Aussentemperatur");
$RT = GetValueFloat("Raumtemperatur_Katzenzimmer_DG");
$iLastUpdate = time() - IPS_GetUpdateTime("Status_Bewegungsmelder_Katzen_DG");
IF (($iLastUpdate < 900) and ($AT <= $RT) and (date("H")<= 22) and (date("H") >= 6)){
SetValueBoolean("Bewegung_Katzenzimmer",True);
 }else {
SetValueBoolean("Bewegung_Katzenzimmer",False);
}
?>

Ich hoffe es hilft dir :wink:

Gruß
Thomas

Hallo

Vielen Dank für die schnelle Antwort. Ich werde die Scripte mal ausprobieren. Die Scripte helfen mir sicher, mich in PHP weiter einzuarbeiten. Danke nochmals.

Gruss
computerpap

Hallo

Ich möchte, das der Ausgang 1 ein ist, wenn der Eingang 3 kurzzeitig ein ist und habe folgendes Script geschrieben:

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : Velleman_Digi.ips.php
Trigger  : Vell_Digi_In_1
Interval :
*/
$status = (VelleUSB_ReadDigitalChannel (27345, 3))*1;
If ($status == true)  {
VelleUSB_WriteDigitalChannel(27345, 1, true);
}else{
VelleUSB_WriteDigitalChannel(27345, 1, false);
}
?>

Es funzt auch soweit, aber der Digitalausgang 1 geht wieder aus.
Was muß man machen, dass der Ausgang ein bleibt, wenn der Eingang 3 kuzzeitig ein ist?

Gruss
computerpap

Hallo,

$status = (VelleUSB_ReadDigitalChannel (27345, 3))*1;
If ($status == true)
 {
VelleUSB_WriteDigitalChannel(27345, 1, true);
}
else
{
VelleUSB_WriteDigitalChannel(27345, 1, false);//hiermit setzt Du ihn selbst wieder zurück.
}

$status = (VelleUSB_ReadDigitalChannel (27345, 3))*1;
If ($status == true) 
{
VelleUSB_WriteDigitalChannel(27345, 1, true);
}

dann musst Du ihn irgendwie zurück setzen

Hallo

Stimmt da hast du recht, ich setze ihn zurück, aber der folgende Code bewirkt auch nicht, dass der Ausgang ein bleibt.

$status = (VelleUSB_ReadDigitalChannel (27345, 3))*1;
If ($status == true)
{
VelleUSB_WriteDigitalChannel(27345, 1, true);
}

Gruss
computerpap

Ich weiss ja nicht was Du vorhast, aber ich würde noch eine Variable Typ Boolean hinzunehem, welche vom Eingang 3 auf True oder false gesetzt wird und darüber meinen Status abfragen.

Eingang3 gibt einen Impuls Variable wird True, bei erneutem Impulse wird Variable false.

Somit bleibt dein Ausgang 1 solange anstehen bis Eingang3 die Varaible wieder auf false setzt.

Nur so ein Gedanke :slight_smile:

Hallo

Da ich mich mit php noch nicht weiter auskenne, weiß ich halt nicht, wie der Code dazu aussehen muß. Es soll praktisch der Ausgang 1 solange ein sein, solange auch der Eingang 3 ein ist.

Gruss
computerpap

liegt dein Problem evtl. am Einlesen der Eingänge?

Hier mal noch mein Script zum Einlesen der Eingänge vom Velleman-Board


<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : Velle_USB01_Daten_einlesen.ips.php
Trigger  : 
Interval : 
*/
$ID = 20168;
$data1=VELLEUSB_ReadDigitalChannel($ID, 1);
If ($data1 == true) { SetValueBoolean("BM_UP_Solar",true); }
If ($data1 == false) { SetValueBoolean("BM_UP_Solar",false); }
$data1=VELLEUSB_ReadDigitalChannel($ID, 2);
If ($data1 == true) { SetValueBoolean("BM_UP_stat_HK",true); }
If ($data1 == false) { SetValueBoolean("BM_UP_stat_HK",false); }
$data1=VELLEUSB_ReadDigitalChannel($ID, 3);
If ($data1 == true) { SetValueBoolean("BM_UP_WWB",true); }
If ($data1 == false) { SetValueBoolean("BM_UP_WWB",false); }
$data1=VELLEUSB_ReadDigitalChannel($ID, 4);
If ($data1 == true) { SetValueBoolean("BM_Lueftung",true); }
If ($data1 == false) { SetValueBoolean("BM_Lueftung",false); }
$data1=VELLEUSB_ReadDigitalChannel($ID, 5);
If ($data1 == true) { SetValueBoolean("BM_UP_Vorregelung",true); }
If ($data1 == false) { SetValueBoolean("BM_UP_Vorregelung",false); }

$data1 = VELLEUSB_ReadAnalogChannel($ID, 2);
If ($data1 >0){$wert= (((5/255)*$data1)/0.05);}else{$wert=0;}
echo $data1."
";
SetValueFloat("RM_HR_Lueftung",$wert);
$data1 = VELLEUSB_ReadAnalogChannel($ID, 1);
If ($data1 >0){$wert= (((5/255)*$data1)/0.05);}else{$wert=0;}
echo $wert."
";
Settype($wert,"String");
SetValueString("Puffertemp._unten",$wert);
?>

In der Instanz-Config des Velleman-Boards habe ich die Trigger auf auf Hihh eingestellt.

Gruß
Thomas

Hallo

Das Einlesen der Eingänge funzt, wenn ich die Variable „status1“ (ist dem Digitaleingang 1 in Instance Config zugeordnet) beobachte, bleibt diese solange auf true, solange ich den taste der an diesen Eingang angeschlossen ist, gedrückt halte. Der Eingang schaltet erst nach loslassen des Tatsers auf False.

Gruss
computerpap

Sorry Neeh Falsch…
Die digital eingänge können NUR auf aufgehende oder runtergehende flanken triggern… Das heisst das das script nur getriggert wird beim eindrucken oder loslassen des knopfes - nicht beides.
Also solte das script nach x-zeit uberprufen ob den eingang noch eingedruckt ist.
Habe zur zeit auch riese probleme die brenn-zeit meinem kessel mit zu bekommen. Beim einschalten wird die variable auf true gesetzt, das script wird getriggert und wirft pro minute eine 1 in die brennzahl-variable … aber jede minute muss uberpruft werden ob der brenner (ego digital eingang) noch brennt (noch eingeschaltet ist).

Wieso du 2x ds script zum triggeren bekommst ist mir ein rätsel … Ich wette mal das du im script die variable resettest und dadurch wird das script neu getriggert die das gegenuberstehende ausfuhrt.

stichwort : Set_Metaphore(blabla, timeout) (hilfe : wie wars wieder)
Diese funktion verbietet diesem script innerhalb von timeout neu zu triggeren. Das hiesse also das du ruhig die variable resetten kannst OHNE das das script neu angefeuert wird.

Nah ? Wie war das denn? Mein problem gewesen :cool:

Bei bedarf das script - nur etwas complexer wie oben - deshalb nur bei bedarf

Hallo GGGss

Was muß eigentlich unter Script Events (Triggered Variables) eingestellt werden?
Warum der Eingang immer ein und aus geht, liegt wahrscheinlich daran, weil ich den Timer Intervall auf einer Sekunde stehen hatte und somit das Script immer wieder gestartet wurde. Mit „Set Metaphore“ kann ich als PHP-Einsteiger leider nichts anfangen.

Gruss
computerpap

Mit „Set Metaphore“ kann ich als PHP-Einsteiger leider nichts anfangen

> http://www.ipsymcon.de/forum/showthread.php?p=26923#post26923

Hallo

Mit dem folgenden Script habe ich es geschafft was ich wollte, nämlich den Ausgang 1 auf true zu schalten, wenn der Eingang 1 true ist. Ich dachte ich hätte das schon mal so gehabt, aber da lief es nicht, aber egal jetzt funzt es.


<?
/*
File     : Velle_Read_Dig.ips.php
Trigger  :
Intervall: 1s
*/

$status = (VELLEUSB_ReadDigitalChannel(25302, 1));
if ($status == true)//Status Eingang 1 auf true abfragen
{
VELLEUSB_WriteDigitalChannel(25302, 1, true); //ist Eingang 1 true, dann schalte Ausgang 1 auf true
}
else //oder
{
VELLEUSB_WriteDigitalChannel(25302, 1, false);//ist Eingang 1 false, dann schalte Ausgang 1 auf false
}

?>

Ich habe nur noch ein kleines Problem, und zwar habe ich unter „Events“ den Timer Interval auf 1s eingestellt, damit ständig das Script läuft, wenn ich aber nur ganz kurz den Eingang bringe läuft das Script nicht an. Wie kann ich realisieren, das das Script so getriggert wird, damit es bei Änderung am Eingang 1 ausgeführt wird. Wenn ich die Variablen beobachte, die ich den Eingängen zugeordnet habe, so ändern diese nicht ihren Zustand von true nach false und umgekehrt, sondern sie werden nur zeitlich aktualisiert. Damit kann ich ja auch nicht diese Variablen in „OnChange“ Event einsetzen, oder geht das doch irgendwie?

MfG
computerpap

PcDaddy :wink:

Du wirdst wohl die ‚trigger‘ eigenschaften vom ersten eingang nutzen mussen um an zu schalten. Ich denke mal runter-gehende flanke (also ziehe 5V nach 0, oder: lege GND an input 1 um zu schalten).
Das ausschalten soll dan per abfragen vom eingang laufen wie dein script oben.

in kurze :
trigger variable anlegen und eintragen in die prop’s vom Velleman,
diese variable nutzen um dein script zu triggeren
das script so gestalten das wenn den ausgang geschaltet ist, ein scripttimer laufen lassen die pro x zeit den eingang scand und wenn false, ausgang ausschalten und scripttimer stoppen

Hallo GGGss

Ich habe in der Config von Velleman für jeden Eingang eine Variable angelegt. Diese ändert sich aber nicht bei drücken des Tasters am Eingang 1. Wenn ich die Variable beobachte, ändert sich nur die Zeit unter „Updates“. Wenn die Variable aber ihren Zustand von true nach false oder umgekehrt nicht ändert, wie soll ich diese dann zum triggern nutzen?

MfG
computerpap

hm …

kratz kratz : das hiesse das der velleman keine events mehr anerkannt…
ok : ich schlag ffolgendes vor : ich probiere zuhause und melde mich.

Bis später

Hallo GGGss

Das wäre prima wenn du das machen würdest.

Gruss
computerpap

Funzt einwandfrei…

variable anlegen und verknufen. Trigger high/low wählen:
high ist aufgehende flanke (einschalten)
low ist runtergehende … (bei ausschalten)

Zeitkritisch schalten :
2 eingänge hardwaremässig verbinden… 1e fur aufgehende, der andere beim ausschalten. Script durch beide events triggeren lassen.
Fertig.

Hallo GGGss

Danke für deine Hilfe. Ich nehme an, du meinst die Variablen in der Instanz-Config des Velleman-Boards. Die sind angelegt, und zwar als „channel1, channel2“ usw., aber womit muß ich die verknüpfen?

Gruss
computerpap