Hallo,
ich habe heute mein Velleman-USB-Board erstmals ausprobiert und schon das erste Problem. Ich habe die Instanz eingefügt, eine Variable für den ersten Eingang definiert und den Knopf gedrückt (Taste 1). Die Variable ändert sich allerdings nicht, d.h. ich bekomme bei jedem Knopfdruck einen neuen Eintrag true ins Fenster, aber wenn ich loslasse, kommt kein false. Ich brauche das ganze zur Überwachung eines Riegelkontaktes und eines Magnetschalters und da muss ich ja wissen, ob auf oder zu. Was mache ich falsch bzw. wo ist der Denkfehler, denn mit dem Demoprogramm klappt es einwandfrei.
Viele Grüsse
Jürgen
Hallo Jürgen,
es klappt auch mit IP-Symcon einwandfrei :rolleyes:
Dein „Denkfehler“: die den Eingängen zugeordneten Variablen werden je nach eingestelltem
Flankenwechsel getriggert und behalten den Zustand (wie ein Speicher)!
Dies ist so gewollt, um auch sehr kurze Impulse zu erfassen. Die betreffende Variable muß
dann per Skript zurückgesetzt werden.
Um den aktuellen Zustand abzufragen verwende bitte den Befehl:
VELLEUSB_ReadDigitalChannel(InstanceID: Integer; Channel[1...5]: Integer): Boolean
MST
Hallo Michael,
Das habe ich auch garnicht anders erwartet!
Das da ein Denkfehler drin war, hab ich mir fast gedacht. Vielen Dank für die schnelle Hilfe. Ich bin immer wieder erstaunt über das Tempo, mit dem hier die Antworten kommen. Super!
Vielen Dank
Jürgen
So,jetzt hats kurz mal ein bischen geklappt, aber so ganz das richtige wars noch nicht.
Genauer gesagt: Im Keller am Testrechner haben zumindest die Digi-Out-LED´s richtig geleuchtet (Ich habe das Script aus der Wiki genommen). Die Digi-Eingänge haben sich auch geändert, aber ein System konnte ich nicht erkennen.Jetzt sitze ich am Server mit dem normalen IP-Symcon und es geht garnichts. Mit dem mitgelieferten Demoprogramm kann ich das Board steuern, mit IPS geht scheinbar garnichts. Wie kann ich am schlauesten vorgehen ( bin PHP-Anfänger der schlimmsten Sorte!)
Vielen Dank für viele Tips
Gruß Jürgen
Hallo Jürgen,
hier mal meine Scripte zu den Velleman Boards. Die laufen bei mir einwandfrei.
Hier für digitale u. analoge Eingänge:
<?
/*
IP-SYMCON Event Scripting
File : Velle_USB01_Daten_einlesen.ips.php
Trigger :
Interval :
*/
$data1=VELLEUSB_ReadDigitalChannel(20168, 1);
If ($data1 == true) { SetValueBoolean(„BM_UP_Solar“,true); }
If ($data1 == false) { SetValueBoolean(„BM_UP_Solar“,false); }
$data1=VELLEUSB_ReadDigitalChannel(20168, 2);
If ($data1 == true) { SetValueBoolean(„BM_UP_stat_HK“,true); }
If ($data1 == false) { SetValueBoolean(„BM_UP_stat_HK“,false); }
$data1=VELLEUSB_ReadDigitalChannel(20168, 3);
If ($data1 == true) { SetValueBoolean(„BM_UP_WWB“,true); }
If ($data1 == false) { SetValueBoolean(„BM_UP_WWB“,false); }
$data1=VELLEUSB_ReadDigitalChannel(20168, 4);
If ($data1 == true) { SetValueBoolean(„BM_Lueftung“,true); }
If ($data1 == false) { SetValueBoolean(„BM_Lueftung“,false); }
$data1=VELLEUSB_ReadDigitalChannel(20168, 5);
If ($data1 == true) { SetValueBoolean(„BM_UP_Vorregelung“,true); }
If ($data1 == false) { SetValueBoolean(„BM_UP_Vorregelung“,false); }$data1 = VELLEUSB_ReadAnalogChannel(20168, 2);
If ($data1 >0){$wert= (((5/255)$data1)/0.05);}else{$wert=0;}
echo $data1."
";
SetValueFloat(„RM_HR_Lueftung“,$wert);
$data1 = VELLEUSB_ReadAnalogChannel(20168, 1);
If ($data1 >0){$wert= (((5/255)$data1)/0.05);}else{$wert=0;}
echo $wert."
";
SetValueFloat(„Puffertemperatur_unten“,$wert);?>
und hier zum Schalten:
<?
/*
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“;
}
?>
Ich hoffe es hilft dir
Gruß
Thomas
Da hat’s mir mal passiert das das test-programm die USB-port exclusive geoffnet hat und der rechner nur noch uber kalt-start die Velleman Karte erkannt hat.
my 2 cents,
Fredje
Wie GGGss schon sagte, kann natürlich nur 1 Programm gleichzeitig auf die Board zugreifen!
paresy
Hallo,
@MSR Junky: Vielen Dank für die Scripts. Das war genau das, was ich suchte. Vieleicht nur noch die Frage, wie Du das Script triggerst. Ich hab auf Timerintervall 1 sec. gestellt und es funktioniert mit Digi-Eingängen und -Ausgängen.
@GGGss und paresy: das war mir schon klar, das nur ein Programm zugreifen kann. Im Keller funktioniert auch alles, nur oben auf dem Server läuft es nicht. Aber egal, soll sowieso am Kellerrechner laufen, passt also erstmal.
Vielen Dank
Jürgen
Oder variablen an den Velleman instanz hangen (und dabei andere scripts triggeren können)
oder per timer event jede x secunden die ein- ausgänge uberprufen…
hängt ein bisschen davon ab was du möchtest …
Dies ist zb meine keller stuerung :
<?
/*
*******************************
IP-SYMCON Event Scripting
*******************************
*/
//File: kel_pompsturing.ips.php
include(IPS_GetScriptFile("GlobalDefines"));
//logfilepath
$logfilepath=__myhome."log/temp.txt";
// $logfilepath="C:/Program Files/IP-SYMCON/web/log/temp.txt";
// ********** END OF USER SETTINGS ************************************
//debug
//$IPS_VARIABLE = "vliv_temp_ist";
// MODIFIE BEYOND THESE LINE ON OWN RISK
// EXCEPT **DOTHESE**
//
$debug = GetValueBoolean("__debug");
if($IPS_SENDER <> "variable") $IPS_VARIABLE = " ";
$hartbeat = GetValueBoolean("vkel_hartbeat");
VELLEUSB_WriteDigitalChannel(mkel_vel,8,!$hartbeat);
SetValueBoolean("vkel_hartbeat",!$hartbeat);
$thistime = time();
if ($debug) $handle=fopen("$logfilepath", "a");
$livtempist=GetValueFloat("vliv_temp_ist");
$livtempisttime = $thistime - IPS_GetUpdateTime("vliv_temp_ist");
$livtempsoll = GetValueFloat("vliv_temp_soll");
$livtempsolltime = $thistime - IPS_GetUpdateTime("vliv_temp_soll");
$livtempperc=GetValueFloat("vliv_temp_perc");
$livtempperctime = $thistime - IPS_GetUpdateTime("vliv_temp_perc");
$keutempist=GetValueFloat("vkeu_temp_ist");
$keutempisttime = $thistime - IPS_GetUpdateTime("vkeu_temp_ist");
$keutempsoll = GetValueFloat("vkeu_temp_soll");
$keutempsolltime = $thistime - IPS_GetUpdateTime("vkeu_temp_soll");
$keutempperc = GetValueFloat("vkeu_temp_perc");
$keutempperctime = $thistime - IPS_GetUpdateTime("vkeu_temp_perc");
$sl1tempperc = GetValueFloat("vsl1_temp_perc");
$sl2tempperc = GetValueFloat("vsl2_temp_perc");
$di = VELLEUSB_ReadDigital(mkel_vel);
$di = sprintf("%08b",$di);
$action="";
//if ($IPS_VARIABLE == " "){
// every 5 minutes
// Read kelder values
$voorloop = VELLEUSB_ReadAnalogChannel(mkel_vel,1);
$terugloop = VELLEUSB_ReadAnalogChannel(mkel_vel,2);
$voorloop = $voorloop*ckel_aifaktor;
$terugloop = $terugloop*ckel_aifaktor;
SetValueFloat("vkel_ketel_tout", $voorloop);
SetValueFloat("vkel_ketel_tin", $terugloop);
$pomp1 = substr($di,5,1);
SetValueBoolean("vkel_pomp1", !$pomp1);
$pomp2 = substr($di,4,1);
SetValueBoolean("vkel_pomp2", !$pomp2);
$brander = substr($di,6,1);
SetValueBoolean("vkel_brander", !$brander);
$brandernet = substr($di,7,1);
SetValueBoolean("vkel_brandernet", !$brandernet);
//} else {
// triggered values
if ($livtempperc > 0 || $keutempperc > 0 || $sl1tempperc > 0 || $sl2tempperc > 0) {
//brander en pompen activeren
VELLEUSB_WriteDigitalChannel(mkel_vel,1,true);
SetValueBoolean("vkel_pomp1",true);
$action="pompen AAN";
} else {
VELLEUSB_WriteDigitalChannel(mkel_vel,1,false);
SetValueBoolean("vkel_pomp1",FALSE);
$action="pompen UIT";
}
//}
// indicatie van gemiddelde perc circuit 1
$percgem1 = intval(($livtempperc*255));
VELLEUSB_OutputAnalogChannel(mkel_vel,1,$percgem1);
$temppercint = intval($livtempperc*16);
//FS20_SetIntensity(oliv_bureel_lamp,$temppercint,-1);
// end indicatie
// Alarm function
// if ($livtempperctime > 1800 || $livtempisttime > 1800 || $keutempisttime > 1800 || $keutempperctime > 1800){
// shut down pumps
// if ($livtempperctime > 3600 || $livtempisttime > 3600 || $keutempisttime > 3600 || $keutempperctime > 3600) VELLEUSB_WriteDigitalChannel(mkel_vel,1,false);
if ($livtempperctime > 1800){
if ($debug) fwrite($handle, date("d.m.y")." ". date("H:i:s")." ALARM: 'Last Rx of livperc value too old'"."
");
}
if ($livtempisttime > 1800){
if ($debug) fwrite($handle, date("d.m.y")." ". date("H:i:s")." ALARM: 'Last Rx of livist value too old'"."
");
}
if ($keutempperctime > 1800){
if ($debug) fwrite($handle, date("d.m.y")." ". date("H:i:s")." ALARM: 'Last Rx of keuperc value too old'"."
");
}
if ($keutempisttime > 1800){
if ($debug) fwrite($handle, date("d.m.y")." ". date("H:i:s")." ALARM: 'Last Rx of keuist value too old'"."
");
}
// }
//LOGGING --> SEE RRDLOGGING
if ($debug) fwrite($handle, date("d.m.y")." ". date("H:i:s")." ".$IPS_VARIABLE." LIV ist: " . sprintf("%02.1f",$livtempist)."° "."soll: " . sprintf("%02.1f",$livtempsoll)."° perc: ". sprintf("%02.0f%%",$livtempperc)
." KEU ist: " . sprintf("%02.1f",$keutempist)."° "."soll: " . sprintf("%02.1f",$keutempsoll)."° perc: ". sprintf("%02.0f%%",$keutempperc)." action: $action
");
if ($debug) fclose($handle);
?>
Hoffe du liest .php ein wenig :o
Grusse,
Fredje