Velleman-USB-Problem

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! :slight_smile:
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 :slight_smile:

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