Wunsch-Logikbausteine

:smiley: Hallo IPS-Begeisterte!
Wir haben alle das gleiche „Problem“.:smiley:
Jeder entwickelt Scripte.
Z.B.:
Rolladensteuerungen, Regelungen, Min-Max. usw…
Könnte man nicht Module entwickeln, die einfach nur eingefügt werden?
Dann bräuchte man nur noch die Eingänge und Ausgänge mit den passenden Variablen zu verbinden.
Oder habe ich da einen Denkfehler.(Wie man solche Module entwickelt weiss ich nicht.:o
Habe mal im Inet geklaut (Daco…de) s. Anhänge.:o
Gruß
Egon

logic_energie.gif

logic_minmaxmittel.gif

19213_rtr.gif

mir gefällt die Idee

Du kennst den Makroeditor?

Es geht um eigene Logikmodule die ggf. in PHP erstellt werden können - da hilft der Makroeditor derzeit nichts

mir gefällt die Idee
:cool: :cool:
…und dazu noch ein paar Änderungen/Zusätze am Macroeditor:)

Naja gut, aber letztlich ist so ein Baustein, wie oben im Anhang, nur eine PHP-Funktion mit X Ein- und Y Ausgängen…

Oder hab ich immernoch nicht begriffen?:confused:

Toni

Vom Prinzip her kann man das so sagen. Um das ganze wirklich nutzbar zu machen (auch komfortabel) fehlt aber ein Framework.

  • Instanzen von Bausteinen müssen unterscheidbar sein ähnlich wie die Instanz-ID’s von IPS (so ein Baustein kann ja auch mehrfach verwendet werden)
  • über die ID’s könnten dann automatisch notwendige Variablen angelegt werden bzw. gelöscht werden
  • eine Schnittstelle muss vorhanden sein um die grafische Ausgabe der Ein- und Ausgänge zu realisieren
  • die Bausteine sollen in einer Sprache (PHP) erstellt werden die es jedem Benutzer ermöglicht eigene Bausteine zu entwickeln und zu veröffentlichen ohne
  • und noch ein paar Sachen wenn man darüber philosophiert…

Durch die EIB-Entwicklung bin ich auf dieses Thema aufmerksam geworden - ich glaube der Gira HS bietet auch so eine Möglichkeit.

Gruss,
Olli

Hallo Olli!
Richtig!:slight_smile:
Gira Homeserver. Von der Firma Dacom werden viele Logigbausteine(Module?) zur Verfügung gestellt. Sind zum grossen Teil von Privatleuten entwickelt worden.
Kann man auf der Page von Dacom runterladen incl. Code-der sagt mir aber nicht viel.
Was meint Paresy zu Logikbausteinen?
Schönen Gruß
Egon

ich komm ja aus der „Regelungstechnik“ Ecke … und dort macht das wirklich jeder SPS bzw. PLS Hersteller (SPS= Speicherprogrammierbare Steuerung, PLS= Prozessleitsystem) ob nun Siemens Simatic, Foxboro , E&H usw…

Für alle „Standardsituationen“ gibt es Bausteine mit definierten Ein- und Ausgängen … ob Timer-, Regler-, Alarm-, Min/Max-, Motor-Bausteine usw…

Man kann bei Bedarf (bei Siemens z.B.) eigene Bausteine schreiben (Eine Art Assembler Code) und den dann in der Bibiothek allen zur Verfügung stellt …

Ich denke an sowas dachte egonkernien dabei …

Ich denke das würde vielen den Einstieg erleichtern und sehr schnell zu brauchbaren Ergebnissen bei ersten Gehversuchen im ipsymcon führen …

Vorweg: Die Idee ist gut.

Mit nur X Variablen rein, X Variablen raus sollte das kein Problem sein.
Da wir alle aber mehr möchten (z.B. Timer…) wird das ganze nicht ganz so einfach. Ich warte einfach erstmal. Sammelt Ideen für Bausteine. Dann hat man einen Überblick, was so ein „Framework“ für Bausteine leisten und verwalten muss.

paresy

da der Timer natürlich ein eigener Baustein ist … und somit nur mit Ein- bzw. Ausgängen verknüpft würde … hat sich dein „Problem“ eigentlich erledigt …

Lass es uns angehen … :wink:

Skizzier mir mal den Timer Baustein :slight_smile:

paresy

Hm…

Also man könnte eine stinknormale PHP Funktion schreiben. Diese müsste dann über eine Art Auto-include in jedem Script verfügbar sein. Dadurch, dass PHP als Basis verwendet wird schlagen wir gleich drei Fliegen mit einer Klappe:

  1. Wir haben eine Basis, nämlich PHP selbst, die sehr mächtig ist und eh von vielen Usern beherrscht wird
  2. Wir haben automatisch Zurgiff auf alle IPS-Spezialfunktionen und IPS-Variablen
  3. User können Module selbst entwerfen und anderen Usern zur Verfügung stellen.

So könnte, um mal ein sehr simples Beispiel zu geben, ein 4 fach NAND ausschauen:


function NAND4($a, $b, $c, $d)
{  
  $res = (! $a) && (! $b) && (! $c) && (! $d)
  return $res;
} 

Einsatzgebiet für so einen Baustein wäre zum Beispiel, dass die Rolläden einer terassentüre nur geschlossen werden wenn alle Vier Kontakte, welcher Art auch Immer, geschlossen sind (In der Sicherheitstechnik verwendet man oft invertierte Kontakte um Sabotage erkennen zu können) um sich nicht selbst versehendlich auszusperren.

Das kann man natürlich mit Referenzen oder Arrays aufblasen bis zum bitteren Ende. Der viel diskutierte PID-Regler wäre sicher auf diese Weise zu realisieren genau wie eine Standartisierte Text-Ausgabe eines 1-Wire Displays. Wenn man dann noch eine grafische Oberfläche zaubert, so könnte man das wohl auch per drag and drop im Makroeditor verwenden.

Jedes Modul sollte vielleicht in einer separaten Datei liegen und einen definierten Einstiegspunkt haben, damit sie in IPS „registriert“ werden kann. Alle Module die in einen speziellen Verzeichnis liegen werden beim Start von IPS geladen und in jedes Script includet. Man sollte eine Andere Bezeichnung finden um nicht mit den IPS-Modulen in Verwechslungsgefahr zu gelangen. IPS-Bricks finde ich schön, werden so nicht die auch die Holz-Bauklötze für kinder genannt? :smiley:

Letztlich nicht viel anders wie die IPS-Module es jetzt auch schon machen, nur auf einem viel, viel kleineren Level. Ist nur ein erster Gedanke, der mir spontan kam. Ist sicherlich noch ausbaufähig…

Edit:

Um das mit dem Timer noch mal aufzugreifen… Wenn man das in PHP umsetzt, so könnte man Betriebssystemeigene Eigenschaften nutzen die man über ein Modul (in Delphi) zur verfügung stellt. Eine Callbackfunktion im inneren des IPS-Bricks könnte dann darauf reagieren. Davon würde der „dumme User“ nichts mitbekommen und dank TTimer würde auch das System geschont.

Toni

Also gesagt getan … hier mal eine Skizze eines Timers…

Kurz zur Funktion …

In = Wenn „In“ gleich „True“ dann Out nach Zeit VAR TIMER gleich „True“
Flanke= Trigger durch positive oder negative Flanke (von True nach False oder umgekehrt)

Reset = Timer „Out“ sofort auf False (Notaus z.B.)

Der Timer kann für Eingänge sowie für Ausgänge anderer Bausteine benutzt werden …

timer.png

Ich hatte solche „flipflopähnlichen“ Wünsche ja schonmal hier http://www.ipsymcon.de/forum/showthread.php?t=2539 geäußert.
Mehr Unterstützung!:smiley:
Ich würde mich riesig drüber freuen;)

Hallo, scheint ja für einige Leute interessant zu sein.:slight_smile:
Habe hier noch n paar Modulwünsche.
Gruß
Egon

logic_momentanverbrauch.gif

logic_laufschrift.gif

logic_rolladen.gif

logic_temptendenz.gif

logic_zeitdatumspeicher.gif

Ich hab da eine Idee… werkel

paresy

Sowas wie eine ‚Parametrierung‘ der Funktionsbausteine wäre noch nett. Ich glaube beim HS wird das ggf. über Eingänge geregelt (bin mir nicht sicher) - ich fände es aber netter mit einer Art ‚Parameterspalte‘ in der Mitte (von Egon’s Screenshots ausgehend).

Speicherung der Funktionsmodule: ich würde sie nicht im Verzeichnis ‚scripts‘ unterbringen sondern in einem eigenen Verzeichnis ggf. mit Unterverzeichnissen (wie eine ‚Bibliothek‘). Aus diesen Verzeichnissen könnte man dann auch eine Selektor-Treview erstellen - so in die Richtung mit der Komponentenauswahl von Delphi. Evtl. noch ICO-Dateien hinzufügen um diese im Selektor darzustellen…

Gruss,
Olli

Also in der Wago Software gibts sowas auch, das ist schon wesentlich praktischer als die ganze Scriptschreiberei. Dort gibt es soger spezialisierte Gebäudeautomationsfunktionsblöcke, sehr nett, wenn man die in IPS hätte (…träum). Das kommt sicher irgendwann mal in IPS, noch steckt ja alles in den Kinderschuhen :smiley:

So… nach ein paar Stunden arbeit, ist hier mein erster Vorschlag für die sogenannten „Bausteine“. engl: „Brick“

Installation:
-IPS Backupen
-Download: > verschoben (MST)
-Entpacken in IPS Ordner
-IPS starten

Benutzen:
-Neues Script erstellen
-„Brick“ auswählen (z.b. testbrick, timerbrick)
-Variablen angeben via Klick auf die leere Spalte

Was macht was?
testbrick:
Wenn Input A = False, dann ist Output D = „Keine Berechnung“
Wenn Input A = True, dann ist Output D= „Input B * Const C“

timerbrick:
Wenn ein TRUE Impuls am Trigger kommt, wird der Timer für Duration eingestellt und der Output auf TRUE gesetzt. Ein erneuter Impuls setzt den Timer wieder auf Duration.
Wenn der Timer abläuft, wird Output auf FALSE gesetzt.
Wenn Reset TRUE ist/wird, wird der Timer gestoppt und Output ist FALSE

Wer zaubert da?
Alles was dort zu sehen ist, besteht aus den Dateien die im „brick“ Ordner sind. Unterordner sind jeweils unter „New Script“ auswählbar. Die „config.xml“ gibt an welche Inputs, Consts, Outputs vorhanden sind. Das "
run.brx.php" Script beinhaltet den eigentlichen PHP Code.

Wie mache ich meinen eigenen Baustein?
Einfach die Beispiele angucken. Ansonsten -> Fragen

Da ist ja garnix Bunt! Wie langweilig!
Soll ja erstmal Funktional das erfüllen, was wir brauchen. Dann gucken wir, dass es bunter wird :slight_smile:

Viel Spaß damit! Feedback ist sehr erwünscht. Auch negatives, wenn es nicht das ist, was gewünscht war! :stuck_out_tongue:

Gute Nacht, paresy