Blog

Doorbell – Gong

Wir haben ja als Gong eine Funkbox eingesetzt welche über den AUX des Raspberries bespielt wird.
Leider bekommen wir Störgeräusche der Nachbarn rein, welche Funkkopfhörer benutzen. Diese funken wohl auf der gleichen Frequenz.

Nach Tests mit verschiedenen Kanälen (A & B) haben wir aber immer noch Hörspiele der Nachbarn gehört.

Generell war ich nie Fan von der Lösung da die Box und der Sender ständig am Strom hängen.
Ich hatte im Kopf schon die Lösung, aber mir fehlte die Zeit.

Da die Störungen aber immer mehr wurden hab ich mich mal hingesetzt und folgendes umgesetzt:

  • Box weg
  • Audio abspielen über Pi weg
  • Eine Funktürklingel gekauft
  • Den Sender an den Pi über Relais angebunden (12V)
  • Die Gong-Musik von den Kindern einstellen lassen

Technisch ist es nun meiner Meinung nach die bessere Lösung. Einziger Nachteil ist, dass ich die Gong-Musik nicht mehr selbst wählen kann. Somit musste meine geliebtes Super-Mario-Theme weichen.

Der Sender der Türklingel hatte einen SMD Taster den ich entlötet habe. Danach getestet ob es auch ein Schließer ist (ja).
Dort hab ich dann den Relaiskontakt integriert.

Die 12V Batterie vom Sender muss ich noch durch ein Netzteil tauschen wenn Sie oft leer ist.
Hier noch ein Bild der wilden Verdrahtung:

Als Ausgang hab ich die rote LED genommen. Diese ist während der Aufnahme des Fotos aktiv gewesen. Den Code musste ich dem entsprechend anpassen.

 

Von |2019-02-02T11:24:35+01:002019-02-02|Doorbell, Projekte|

Seitenfilter Filtereinstellungen per Script setzen

Nun habe ich schon gezeigt wie man ein Seitenfilter Schema aktiv schalten kann… Und hier seht ihr wie man einzelnen Filtereinstellungen hinzufügen kann.
In diesem Beispiel wird der Filter neu erstellt und eine Filtereinstellung hinzugefügt:

  • Kriterium: Seitenbeschreibung
  • Wert: Test
public class PageFilterExample
{
  private const string SCHEME_NAME = "MyFilter";
  private const string SETTINGS_PATH = "USER.PageBrowserGui.PageFilterScheme";

  [DeclareAction("PageFilterExample")]
  public void Action()
  {
    try
    {
      // Remove filter if exists
      SchemeSetting schemeSetting = new SchemeSetting();
      schemeSetting.Init(SETTINGS_PATH);
      if (schemeSetting.CheckIfSchemeExists(SCHEME_NAME))
      {
        schemeSetting.RemoveScheme(SCHEME_NAME);
      }

      // Create filter
      MultiLangString mlName = new MultiLangString();
      mlName.AddString(ISOCode.Language.L___, SCHEME_NAME);

      MultiLangString mlDescription = new MultiLangString();
      mlDescription.AddString(ISOCode.Language.L___, "My Description");
      schemeSetting.CreateScheme(SCHEME_NAME, mlName, mlDescription);

      SetSchemeSettings();

      // Update page filter
      schemeSetting.SetLastUsed(SCHEME_NAME);
      new Settings().SetBoolSetting("USER.PageBrowserGui.PageFilterScheme.ApplyCheckBox", true, 0);
      EventParameterString eventParameterString = new EventParameterString();
      eventParameterString.String = "RefreshPageFilter";
      new EventManager().Send("RefreshPageFilter", eventParameterString);
    }
    catch (Exception exception)
    {
      var baseException = new BaseException("PageFilterExample: " + exception, MessageLevel.Error);
      baseException.FixMessage();
      new Decider().Decide(EnumDecisionType.eOkDecision, exception.ToString(), "SetPageFilter",
        EnumDecisionReturn.eOK, EnumDecisionReturn.eOK, null, false, EnumDecisionIcon.eFATALERROR);
    }
  }

  private void SetSchemeSettings(int index = 0)
  {
    // Setup path: < is in the default schemes also, don't know why
    const string SETTINGS_PATH_SCHEME_SETTINGS = SETTINGS_PATH + "." + SCHEME_NAME + ".Data<.";

    // Set single (needed) settings
    SetSchemeSetting(SETTINGS_PATH_SCHEME_SETTINGS + "Value", "Test", index); // Search value
    SetSchemeSetting(SETTINGS_PATH_SCHEME_SETTINGS + "PropDescr", "11011;0", index); // page property id & index
    SetSchemeSetting(SETTINGS_PATH_SCHEME_SETTINGS + "Activ", true, index);
    SetSchemeSetting(SETTINGS_PATH_SCHEME_SETTINGS + "CriteriaType", 0, index);
    SetSchemeSetting(SETTINGS_PATH_SCHEME_SETTINGS + "IgnoreCase", false, index);
    SetSchemeSetting(SETTINGS_PATH_SCHEME_SETTINGS + "Negation", false, index);
    SetSchemeSetting(SETTINGS_PATH_SCHEME_SETTINGS + "Operator", 0, index);      
    SetSchemeSetting(SETTINGS_PATH_SCHEME_SETTINGS + "QuickFilter", false, index);
    SetSchemeSetting(SETTINGS_PATH_SCHEME_SETTINGS + "RelationDescr", "0;0", index);
    SetSchemeSetting(SETTINGS_PATH_SCHEME_SETTINGS + "SingleValue", false, index);
    SetSchemeSetting(SETTINGS_PATH_SCHEME_SETTINGS + "UseWildcards", true, index);      
    SetSchemeSetting(SETTINGS_PATH_SCHEME_SETTINGS + "WholeText", true, index);
  }

  public void SetSchemeSetting(string settingsPath, object value, int index = 0)
  {
    // Add settings nodes (needed because SchemeSetting.Set don't create Settings) & Set filter entries
    var settings = new Settings();
    if (value is bool)
    {
      settings.AddBoolSetting(settingsPath, new[] { (bool)value }, ISettings.CreationFlag.Insert);
      settings.SetBoolSetting(settingsPath, (bool)value, index);

    }
    else if (value is int)
    {
      var range = new[] { new Range { FromValue = 0, ToValue = 32768 } };
      settings.AddNumericSetting(settingsPath, new[] { (int)value }, range, ISettings.CreationFlag.Insert);
      settings.SetNumericSetting(settingsPath, (int)value, 0);

    }
    else if (value is string)
    {
      settings.AddStringSetting(settingsPath, new string[] { }, new string[] { }, ISettings.CreationFlag.Insert);
      settings.SetStringSetting(settingsPath, value.ToString(), 0);
    }
    else if (value is MultiLangString)
    {
      settings.AddMultiLangStringDefault(settingsPath, new MultiLangString[] { }, new MultiLangString[] { }, ISettings.CreationFlag.Insert);
      settings.SetMultiLangStringSetting(settingsPath, (MultiLangString) value, 0);
    }
    else
    {
      throw new NotImplementedException("SetSchemeSetting: Unknow type --> " + value.GetType());
    }
  }

}
Von |2018-11-30T16:16:09+01:002018-12-12|EPLAN, EPLAN-Scripts|

Seitenfilter per Script setzen

Ich hab, mit Hilfe des tollen API-Supports, es geschafft per Script den Seitenfilter zu setzen und diesen auch zu aktivieren.
In diesem Beispiel wird dann der Filter (sofern vorhanden) “MyFilter” im Seitennavigator gesetzt:

const string SCHEME_NAME = "MyFilter";
const string SETTINGS_PATH = "USER.PageBrowserGui.PageFilterScheme";

SchemeSetting schemeSetting = new SchemeSetting();
schemeSetting.Init(SETTINGS_PATH);

// Update page filter
schemeSetting.SetLastUsed(SCHEME_NAME);
new Settings().SetBoolSetting("USER.PageBrowserGui.PageFilterScheme.ApplyCheckBox", true, 0);
EventParameterString eventParameterString = new EventParameterString();
eventParameterString.String = "RefreshPageFilter";
new EventManager().Send("RefreshPageFilter", eventParameterString);
Von |2018-11-30T16:12:00+01:002018-12-11|EPLAN, EPLAN-Scripts|

Scripting C# Version

EPLAN verwendet aktuell (2.7) das .NET Framework 4.5.2
Somit würde uns mindestens C# Version 5 beim Programmieren zur Verfügung stehen (abhängig vom Client Rechner). In der EPLAN API geht das auch…

Leider verwendet EPLAN beim Laden von Scripten den CodeDomProvider  welcher nur C# Version 4 kann.
Somit könnte man im Visual Studio Projekt was programmieren, was keine Fehler verursacht, aber in EPLAN schon…

Stellt die Projekteinstellungen vom Visual Studio Projekt um: Projekt > Eigenschaften > Build > Erweitert… > Sprachversion > C# 4

Ich habe es dem Support gemeldet. Problem wurde erkannt, aber bis wann es umgesetzt wird, kann ich leider nicht sagen.

Von |2018-11-30T16:16:53+01:002018-12-10|EPLAN, EPLAN-Scripts|

XPrjActionProjectClose

Dies ist eine interne Action. Mit dieser Action könnt Ihr das aktuelle Projekt schließen. Zusätzlich besitzt es den Parameter /PROJECT  um gezielt ein bestimmtes Projekt zu schließen.

Von |2018-12-06T17:44:23+01:002018-12-06|EPLAN, EPLAN-Scripts|
Nach oben