Portables Edip

Hi Werner,

das macht dein Script.

Wenn du z.B. mit W das Wohnzimmer aufrufst, sendest Du die entsprechenden Daten an das Dip.

Ich stell mal Code rein.

So mach ich es.

Es führen allerdings viele Wege nach Rom :slight_smile:

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : Daten_Edip.ips.php
Trigger  : 
Interval : 
*/


  //Buffer auslesen Xbee
  $daten = GetValueString("Dateneingang");
  $eingabe = substr($daten, -1);
  $s = "";
  for($i=0; $i<strlen($daten); $i++)
  {
  $s = $s.intval(ord(substr($daten,$i,1)))." ";
  }
  IPS_LogMessage("Edip:", $s);
  
  switch ($eingabe)
  {
  //Touchtaste-Hauptmenü startet Runscript
  case "M":
  IPS_RunScript("Edip_Hauptmenu");
  break;

  //Touchfeld startet Runscript
  case "7":
  //XBee_SendBuffer(49578, chr(27)."MT".chr(27));
  IPS_RunScript ("Edip_Hauptmenu");
  break;

  //Touchtaste Wetter startet TM-Wetter
  case "z":
  //XBee_SendBuffer(49578, chr(27)."MT".chr(27));
  IPS_RunScript("Edip_Wetter");
  break;

  //Touchtaste Regenvortag startet TM-Regenvortag
  case "V":
  XBee_SendBuffer(49578, chr(27)."MT".chr(31));
  IPS_RunScript("Edip_Regenvortag");
  break;

Aufruf Script mit Timer

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : Edip_Wetter.ips.php
Trigger  : 
Interval : 
*/


   if($IPS_SENDER == "TimerEvent")
   {
   IPS_SetScriptTimer("Edip_Wetter", 0);
   IPS_RunScript("Edip_Hauptmenu");
   return;
   }
   IPS_SetScriptTimer("Edip_Hauptmenu", 0);
   IPS_SetScriptTimer("Edip_Wetter", 3600);
   SetValueBoolean("Wetter", true);
   
   //Display einschalten und dimmen
   //XBee_SendBuffer(49578, chr(27)."DE");
   //XBee_SendBuffer(49578, chr(27)."YH".chr(25));



?>

Das Script zum Daten senden nach Edip

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : TM_Wetter.ips.php
Trigger  : 
Interval : 
*/


$Zustand = GetValueBoolean("Wetter");

if($IPS_SENDER == "TimerEvent")
 {
 IPS_SetScriptTimer("TM_Wetter", 0);
 IPS_RunScript("TM_Wetter");
 return;
 }

if ($Zustand == false)
return;

IPS_SetScriptTimer("TM_Wetter", 60);


   XBee_SendBuffer(49578, chr(27)."MT".chr(27));

   $Sensor1 = GetValueBoolean("ks300_regensensor");
   $Sensor2 = GetValueBoolean("Regensensor");
   if ($Sensor1 or $Sensor2 == true)
    {
    XBee_SendBuffer(49578, chr(27)."ZZ".chr(1).chr(1).chr(0));
    XBee_SendBuffer(49578, chr(27)."ZL".chr(100).chr(46)."@####@".chr(0));
    //XBee_SendBuffer(49578, chr(27)."UI".chr(100).chr(43).chr(14).chr(0));
    }
     else
     {
     XBee_SendBuffer(49578, chr(27)."ZZ".chr(1).chr(1).chr(0));
     XBee_SendBuffer(49578, chr(27)."ZL".chr(101).chr(46)."------".chr(0));
     //XBee_SendBuffer(49578, chr(27)."UI".chr(95).chr(45).chr(21).chr(0));
     }
   XBee_SendBuffer(49578, chr(27)."ZR".chr(118).chr(58)."N".chr(0));
   XBee_SendBuffer(49578, chr(27)."ZR".chr(131).chr(71)."O".chr(0));
   XBee_SendBuffer(49578, chr(27)."ZR".chr(118).chr(84)."S".chr(0));
   XBee_SendBuffer(49578, chr(27)."ZR".chr(106).chr(71)."W".chr(0));
   XBee_SendBuffer(49578, chr(27)."ZR".chr(121).chr(71)."==".chr(0));
   
   XBee_SendBuffer(49578, chr(27)."ZZ".chr(2).chr(2).chr(0));
   
   //Werte formatieren und ins Display schreiben
   $Luftdruck = GetValueFloat("Luftdruck");
   
   XBee_SendBuffer(49578, chr(27)."ZZ".chr(1).chr(1).chr(0));
   $Helligkeit = GetValueInteger("HS485_Luxsensor");
   XBee_SendBuffer(49578, chr(27)."ZZ".chr(2).chr(2).chr(0));
   XBee_SendBuffer(49578, chr(27)."ZR".chr(215).chr(45)."$Helligkeit".chr(0));
   XBee_SendBuffer(49578, chr(27)."ZZ".chr(1).chr(1).chr(0));
   XBee_SendBuffer(49578, chr(27)."ZR".chr(230).chr(53)."lux".chr(0));

   $Wug = GetValueFloat("Wolkenuntergrenze");
   XBee_SendBuffer(49578, chr(27)."ZR".chr(232).chr(66)."Kondensationsniveau".chr(0));
   //XBee_SendBuffer(49578, chr(27)."RI".chr(142).chr(66).chr(229).chr(75).chr(0));
   XBee_SendBuffer(49578, chr(27)."ZZ".chr(2).chr(2).chr(0));
   $Wug = number_format($Wug, 0, ".", "");
   XBee_SendBuffer(49578, chr(27)."ZR".chr(215).chr(76)."$Wug".chr(0));
   XBee_SendBuffer(49578, chr(27)."ZZ".chr(1).chr(1).chr(0));
   XBee_SendBuffer(49578, chr(27)."ZR".chr(225).chr(84)."m".chr(0));
   XBee_SendBuffer(49578, chr(27)."ZZ".chr(2).chr(2).chr(0));
   
   $Temp = GetValueFloat("ks300_temp_ist");
   $Temp = number_format($Temp, 1, ".", ".");
   if ($Temp <= 3)
   XBee_SendBuffer(49578, chr(27)."ZR".chr(55).chr(12)."@$Temp@".chr(0));
   else
   XBee_SendBuffer(49578, chr(27)."ZR".chr(55).chr(12)."$Temp".chr(0));

   $Feuchte = GetValueInteger("ks300_luftfeuchte");
   $Feuchte = number_format($Feuchte, 0, ".", ".");
   XBee_SendBuffer(49578, chr(27)."ZL".chr(90).chr(12)."$Feuchte".chr(0));
   //if ($Temp >= 5 and $Temp <=22 and $Feuchte >= 50 or $Luftdruck <= 1014)
   //{
   //XBee_SendBuffer(49578, chr(27)."UI".chr(135).chr(47).chr(20).chr(0));
   //}
   //if ($Temp >= 23 and $Feuchte <= 49 and $Luftdruck >=1015)
   //{
   //XBee_SendBuffer(49578, chr(27)."UI".chr(170).chr(47).chr(17).chr(0));
   //}

   $Wind = GetValueFloat("ks300_wind_ist");
   $Wind = number_format($Wind, 1, ".", ".");

   if ($Wind >= 0.8 and $Wind <= 19.9)
   {
   XBee_SendBuffer(49578, chr(27)."UI".chr(136).chr(1).chr(22).chr(0));
   }
   if ($Wind >= 20)
   {
   XBee_SendBuffer(49578, chr(27)."UI".chr(136).chr(1).chr(24).chr(0));
   }
   XBee_SendBuffer(49578, chr(27)."ZR".chr(207).chr(12)."$Wind".chr(0));

   $Regen = GetValueFloat("LiterTag");
   $Regen = number_format($Regen, 2, ".", ".");
   XBee_SendBuffer(49578, chr(27)."ZR".chr(65).chr(45)."$Regen".chr(0));

   $Regen1 = GetValueFloat("LiterStunde");
   $Regen1 = number_format($Regen1, 2, ".", ".");
   XBee_SendBuffer(49578, chr(27)."ZR".chr(65).chr(76)."$Regen1".chr(0));

   $SA = GetValueString("SUNRISE");
   XBee_SendBuffer(49578, chr(27)."ZZ".chr(1).chr(1).chr(0));
   XBee_SendBuffer(49578, chr(27)."ZR".chr(50).chr(100)."$SA".chr(0));

   $SU = GetValueString("SUNSET");
   XBee_SendBuffer(49578, chr(27)."ZR".chr(50).chr(115)."$SU".chr(0));

   $Zeit = GetValueString("CurrentTime");
   XBee_SendBuffer(49578, chr(27)."ZL".chr(65).chr(115)."$Zeit".chr(0));


   $Luftdruck = number_format($Luftdruck, 0, ".", "");
   XBee_SendBuffer(49578, chr(27)."ZZ".chr(2).chr(2).chr(0));
   XBee_SendBuffer(49578, chr(27)."ZR".chr(200).chr(109)."$Luftdruck".chr(0));
?>

das sind nur Beispiele, da hängen noch Variablen dahinter usw…

#SB „Schalter“ wird vom eDip-Untermenue ‚Schalter‘ gesendet
#SB „Garage“ wird vom eDip-Untermenue ‚Garage‘ gesendet

#AJ „15,20“,ButLampOn, 65,97 definiert eine Schalter-Tast mit einem Bild
97 = „a“ -> übers IPS-Script Schalter anschalten
65 = „A“ -> ausschalten

Die Auswertung der Variablen erfolgt im Script:

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : Edip_Menues.ips.php
Trigger  :
Interval :
*/
$id = GetValueInteger("xBee2_Instance") ;
$Schalter =  GetValueString("XBee2") ;
if (ord($Schalter[0]) == "27" )     // Für die Codes, die mit "ESC" -chr(27) anfangen
   {
      $Schalter =  chr(ord($Schalter[3])) ;
      //echo ($Schalter) ;
      SetValueString("XBee_Temp", $Schalter) ;
      Switch ($Schalter)
      {
      Case "a";
      FS20_SwitchMode(44978, True);
      Break;
      Case "A";
      FS20_SwitchMode(44978, False);
      Break;
... und
else
{
Switch ($Schalter)
   {
   Case "Haupt";
   IPS_RunScript("Edip_Hauptmenu");
   Break;
   Case "Wetter";
   IPS_RunScript("Edip_Wetter");
   Break;
...



Da hat sich ja einiges überschnitten.

Rainer(RWN) hat den Scriptablauf etwas anders als ich aufgebaut, obwohl ich die Scripts von ihm geklaut habe.
Mein eDip sendet ja, in welchem Untermenue es sich befindet. Also es ist im Wohnzimmer, dan schickt es „Wohnzimmer“ ans IPS.

Aber nicht verwechseln:
Es handelt sich nicht um die räumliche Position des Teils oder des Bedieners, sondern um die Folge der Auswahl des eDip-Untermenues.
Bin ich in diesem Untermenue im eDip, dann wird die Touchtasten, die ich in diesem Untermenue definiert habe(Befehl #AJ…).
Da stehen mir 255 Codes zur Verfügung. Ich habe also im Untermenue Wohnzimmer andere Tastencodes genutzt, als z.B. in der Garage.

Hallo Rainer (audi2010),

genau das meinte ich, die Räume auf dem eDip, nicht die Lage des eDips. Es ja auch ein wenig schwer zu verstehen wenn man nicht weiß was sein Gegenüber hat.

Den Weg den RWN einschlägt kann ich auch nachvollziehen ist mir aber ein wenig zu umständlich.

Das mit #SB ist mir verständlich, werde meine Makros damit im eDip steuern. Meine Tastencodes werden mit Sicherheit auch eindeutig sein da es sonst zu unkontrollierten Problemen in den Skripten führen kann. Mir ging es vornehmlich um die Bekanntmachung des Raumes an IPS damit ich immer die richtigen Werte (Temp, Schalterzustände) ans eDip senden kann.

Mein Dank wird Euch (audi2010, RWN) ewig verfolgen.

Hallo eDip-Geschädigte :rolleyes:,

leider läuft mein eDip immer noch in der Testumgebung da meine xBee´s noch nicht da sind aber Ideen habe ich schon einige.

Im reelen Betrieb möchte ich ja jeden Raum autark über die eDip´s steuern. Lampen oder sonstige Aktoren zu schalten ist ja kein Problem, was mich aber jetzt noch unwahrscheinlich reizen würde ist, die Temperaturänderung der FHT´s über die eDip´s anzusteuern.

Hat sich da schon jemand, ich spreche hier mal hauptsächlich unsere eDip-Profis RWN und audi2010 an, Gedanken gemacht den FHT´s Befehle zukommen zulassen.

Grundgedanke ist der mit 2 TouchButton UP/DOWN die gewünschte Temperatur einzustellen und wenn dies geschehen ist per OK-Button das ganze zu senden.

Oder, im Demo ist ja z.B. der Nummernblock von 0-9 drin. könnte man bestimmte im vorherein festgelegt Temperaturen anzeigen lassen und diese dann senden.

Vielleicht hat hier sonst noch jemand Lösungsansätze.

Hallo Werner,

am einfachsten ist es sicherlich, wenn Du feste Temperaturwerte sendest. Den Touchtasten eine Nummer zuweist und diese dann über IPS auswertest und FHT-Set-Temp machst.(Hab den Befehl grad nicht im Kopf, aber soähnlich).

Was sich aus Platzgründen anbieten würde, wäre eine Touchtaste mit Menüfunktion.

Hallo Rainer,

stimmt, das wäre die einfachste Möglichkeit, aber wer will es schon einfach. Ich denke aber mit der Voreinstellungen per UP/DOWN im eDip wird eh nicht gehen da das eDip ja sofort sendet wenn ich drücke bzw. loslasse.

Ich glaube paresy hat schon einmal dazu geschrieben das man die Sendungen in einem Skript abfangen könnte und dann per OK-TouchTaste abschicken.

Wäre vielleicht ein Ansatz.