Skript

ProjectgroupAutoAssignment

FrankS hat wieder mal ein super Script hier bereitgestellt. Vielen Dank!
Hier mal ein Auszug aus der Beschreibung:

Ich habe ein kleines Skript geschrieben um die Möglichkeiten der Projektgruppe in der Eplan Version 2.8 sinnvoll nutzen zu können.

Nach Laden des Skript werden bis zu 4 Projekte (+1 Makroprojekt) in verschiedenen Farben in den Navigatoren markiert.

Damit Ihr die Farben in den Navigatoren auch seht muss in den Einstellung unter ‘Benutzer>Darstellung>Projektgruppen (Definition)’ die ‘Farbe aktiviert’ bei allen 5 Gruppen eingeschaltet werden.

Funktion:
Beim öffnen eines Projektes wird dieses automatisch einer Projektgruppe zugeordnet. Dies geht mit bis zu 4 Projektgruppen, die 5. Projektgruppe ist für Makroprojekte vorgesehen und wird von dem Skript ausgelassen. Beim schliessen eines Projektes wird diese Zuordnung wieder entfernt.

Hier noch ein Link in die Online-Hilfe, für diejenigen die noch nicht wissen was Projektgruppen sind.

Download

Von |2019-07-19T08:54:10+02:002019-07-19|EPLAN, EPLAN-Scripts|

Doorbell – OpenSSL & PiCamera

Ich kümmere mich alle Zeit mal, dass alle Geräte im Haus die Updates bekommen.

Never change a running system

… halte ich für nicht die beste Wahl. Mir geht es bei den Updates in erster Linie um die Sicherheit™. Neue Funktionalitäten bringen die Updates selten, zumindest welche mich interessieren.

Nun gut… Somit schnell mal per SSH den Raspberry geupdatet… kurze Zeit drauf fällt mir auf dass der Push der Türklingel nicht mehr geht. Mal nachgeschaut, stimmt, der Log sagt dass alles gemacht wird: Gong, Bild abspeichern… aber beim Push ist nichts los… Warum dann keine Exception? Tja, da hat Jemand (ich) nicht aufgepasst und es fehlte der Log in die Logdatei:

except Exception, e:
    logger.info(e)
    traceback.print_exc()
    logging.exception("!!!")

Das schönste an der Geschichte: Wenn ich das Python Script als User pi oder auch als sudo starte geht der Push. Dann mal den Autostart angeschaut. Den hab ich dann mal schnell auf crontab umgestellt, weil mir das am liebsten ist:

crontab -e

Aber nix… dann schauen wir mal in den jetzt verfügbaren Log. Der Log sagt mir aber dann komische Sachen:

2019-07-13 16:42:11,225 INFO HTTPSConnectionPool(host='api.pushover.net', port=443): Max retries exceeded with url: /1/messages.json (Caused by SSLError(SSLError("bad handshake: Error([('', 'osrandom_rand_bytes', 'getrandom() initialization failed.')],)",),))

Mhhh, Google sagt da nicht viel… eigentlich dass das SSL Zertifikat von Pushover kaputt ist. Stimmt aber nicht. Und es geht ja nur nicht wenn es beim Boot gestartet ist.

Lange Rede kurze Lösung:
Ich hab mal OpenSSL vom Pi geupdatet, da ich diesen Issue gefunden habe.
Nutze requests, weil es so in der Pushover API Hilfe drin steht um Bilder hochzuladen.

So wie ich es verstehe wird das lokal geprüft ob die Zertifikate OK sind, wundert mich aber OK. Warum dass dann nur Probleme macht beim Boot, keine Ahnung. Aber es geht dann zumindest wieder. Kann sein dass ihr paar Pakete manuell installieren müsst damit OpenSSL über apt-get läuft.

 

Weil ich grad dabei war, hab ich auch den Code für das Erstellen des Fotos geändert von:

cmdCam='raspistill -q 10 -o ' + '/home/pi/Desktop/doorbell/web/photos/' +  filename
subprocess.call(cmdCam, shell=True)

auf:

camera = PiCamera()
[...]
camera.capture('/home/pi/Desktop/doorbell/web/photos/' +  filename)

Gibt es nun standardgemäß im Raspbian via from picamera import PiCamera.
Hab die Änderungen gleich ins Repo, hier ist der Commit.

Von |2019-07-18T16:15:10+02:002019-07-18|Doorbell, Projekte|

EPLAN Data Portal API

Update 2023-07-31

Neues Dataportal

Altes Dataportal:


Orginal Post 2019-06-12

Durch Zufall bin ich auf diese API Dokumentation für das Data Portal aufmerksam gemacht worden.
Meines Wissens ist diese Nirgendwo verlinkt, darum mach ich das hier.

Es handelt sich um eine schöne REST API mit netten Funktionen. Habe noch keinen Anwendungsfall dafür, aber immer schön wenn es sowas gibt!

Falls Jemand hier schon mal was programmiert hat, und es gerne bereitstellen möchte… gerne an mich schicken. Dann poste ich es hier :^)

Von |2023-07-31T09:28:12+02:002019-06-12|EPLAN|

Navigator aktualisieren

Um Navigatoren in EPLAN zu aktualisieren (wie F5 drücken), könnt ihr folgenden Action verwenden:

GfDlgMgrActionReload /DialogName:<Name des Dialogs>

Der Seitennavigator hat hier eine eigene Methode, da hier noch der Filter mit dran hängt:

EventParameterString eventParameterString = new EventParameterString(); 
eventParameterString.String = "RefreshPageFilter"; 
new EventManager().Send("RefreshPageFilter", eventParameterString);
Von |2019-04-10T13:12:11+02:002019-04-11|EPLAN, EPLAN-Scripts|

API-Addins & Scripte auslesen

Im CAD.de-Forum gab es die Frage wie man auslesen kann welche API-Addins und Scripte geladen sind. Ich habe das mal ausprogrammiert:

using System.Windows.Forms;
using Eplan.EplApi.Base;
using Eplan.EplApi.Scripting;
using System.Collections.Generic;
using System.Collections.Specialized;

public class ReadApiAddinsAndScripts
{
  [Start]
  public void Action()
  {
    // API addins
    List<string> apiAddins = GetApiAddins();
    string apiAddinsText = string.Join("\n", apiAddins);
    MessageBox.Show(apiAddinsText, "ApiAddins", MessageBoxButtons.OK, MessageBoxIcon.Information);

    // scripts
    List<string> scripts = GetScripts();
    string scriptsText = string.Join("\n", scripts);
    MessageBox.Show(scriptsText, "Scripts", MessageBoxButtons.OK, MessageBoxIcon.Information);
  }

  public List<string> GetApiAddins()
  {
    List<string> list = new List<string>();
    Settings settings = new Settings();
    SettingNode settingsNode = new SettingNode("STATION.EplanEplApiModule.Module");
    StringCollection nodes = new StringCollection();
    settingsNode.GetListOfNodes(ref nodes, false);
    foreach (string node in nodes)
    {
      SettingNode subNode = settingsNode.GetSubNode(node);
      string name = subNode.GetNodePath() + ".AssemblyName";
      var text = settings.GetStringSetting(name, 0);
      list.Add(text);
    }
    return list;
  }

  private List<string> GetScripts()
  {
    List<string> list = new List<string>();
    Settings settings = new Settings();
    string settingsPath = "STATION.EplanEplApiScriptGui.Scripts";
    var count = settings.GetCountOfValues(settingsPath);
    for (var index = 0; index < count; index++)
    {
      var text = settings.GetStringSetting(settingsPath, index);
      list.Add(text);
    }
    return list;
  }
}
Von |2019-04-01T11:15:12+02:002019-04-01|EPLAN, EPLAN-API, EPLAN-Scripts|
Nach oben