Wie Programmiere ich richtig in IPS?

Moin,

bisher habe ich nur die fertigen Sachen von IPS genutzt und möchte jetzt tiefer einsteigen.

Daher wollte ich mal fragen / eure Meinung einholen.
Da ich ja immer wiederkehrende Aktionen im IPS habe (z.B. Rollo hoch o. runter; Fenter gekippt / offen u.v.m.)
würde ich die Sachen in mehreren verschieden Funktionen packen. Diese Funktionen würde ich dann immer aufrufen und Parameter / Argumente übergeben.
Wäre das die richtige vorgehensweise oder macht ihr das anders ?

Gruß Sven

Das ist so allgemein nicht zu beantworten.
Du musst uns mitteilen welche Hardware du im Einsatz hast und was du spezifisch damit anfangen willst… vielleicht etwas mehr Informationen was du schon so verwendest und wie man da speziell eingreifen kann.

Unter „Fertige Sachen“ kann ich mir viel vorstellen;)

also einige Hardware Komponenten stehen ja bereits in der Signatur.

Was will ich erreichen ?

Rollos z.B. (HM-LC-BI1-FM)
würde ein Funktion erstellen die als Wert den die Rolloaktion mit bekommt sowie welche Rollos (bei verschattung Südseite)
ausgeführt wird. Das kann ich vielseitig nutzen. (Anwesenheitssimulation, Sonnenintensität…u.v.m.)

function rollo(100, Rollo1-ID, Rollo2-ID, Rollo3-ID) /* Rollos hoch /
function rollo(0, Rollo1-ID, Rollo2-ID) /
Rollos runter /
function rollo(80, Rollo1-ID, Rollo2-ID) /
Rollos verschatten 80% /
function rollo(60, Rollo1-ID) /
Rollos verschatten 60% */

das gleiche bei Heizungssteuerung, die Prüfung der Fenster ob sie angekippt / geöffnet sind.
Sonst produziere ich ja immer die selben Zeilen Code in jedem Script und eigendlich ändern sich ja nur Gerät / aktion.

Gruss Sven

Für Rollos nimmst Du am einfachsten Shutter Control
Shutter Control — IP-Symcon :: Automatisierungssoftware

Aber nicht für Homematic :confused:

Gruß
Bruno

Hi Sven,

sagen wir es mal so: Ich habe mehrfach versucht einen Austausch über vernünftige Programmier-Techniken anzuregen, aber meiner Meinung nach (sorry an die meisten) sind Programmier-Kentnisse hier eher selten vertreten, deswegen sind Programmier-Paradigmen wie Wiederverwendbarkeit, Pattern oder ähnliches selten vertreten. Hier können sicher einige gute Funktionen abliefern, aber sogar an der Art wie programmiert wird sieht man häufig wie „Hardware-Nah“ das Verständnis für die Logik ist. Gute Programmierregeln sind unabhängig von Hardware.

Aus deinen Ansätzen hätte ich vermutet du hast da etwas Vorerfahrung?

@Hagbard235

ja genau so ist es. zwar habe ich nur verschiedene Kurse bisher gemacht (Grundlagen /Fortgesch. Prog.; PHP; Java; PowerShell…u.s.w. kein Profi) nur weiß ich ja noch nicht was hier wirklich der beste Ansatz in IPS ist. Aus verschiedenen Themen gibt es zwar gute Scripte / Scriptansätze, aber ich will nämlich nicht so anfangen das bei einer großen umstellung wie IPS3–>4 Ich selbst bei meinen eigenen Scripten nicht mehr durchsehe. Wen man nämlich Fehlersuche machen muss ist das nicht gerade Zielführend. Auch möchte ich nicht das ein System unnötig belastet wird.

gefunden hatte ich das mal hier:

https://www.symcon.de/forum/threads/7450-Scripte-mit-Variable-oder-Funktion-einbinden#post61624

wäre das z.B. ein richtiger Einstieg oder sagt jemand / verfolgt einen anderen Ansatz für sich immer wieder benötigte Aktionen ?

Gruß Sven

Also ich habe alle Scripte die ihr (auch nur wahrscheinlich) mehr als 1x brauche in eine externe Scripte-Datei ausgelagert und binde diese ein und verwende im eigentlichen Script nur den Aufruf der Methode. Damit stelle ich zumindest sicher das ich z.b. bei 40 Lampen nicht 40x das Script ändern muss wenn mir eine Verbesserung einfällt. Das ist glaube ich schon mal das Minimum was man machen sollte. Auch wenn es erstmal nicht so wirkt als ob man an die Stellen später noch zig mal dran muss, da hab ich mich fast jedesmal getäuscht.

Mittlerweile bin ich sogar dazu übergegangen die Hardware zu Kapseln und mir logische Module aufzubauen die dann ausschließlich verwendet werden. Wie gesagt, die Anregung von Pattern hatte ich auch schon mal, das findest du hier:
Nützliche Programmierpattern, Strukturierungen etc.

Außerdem versuche ich Geräte und Aktionen nicht hart zu verdrahten sondern z.B. die Baumstruktur zu nutzen um mit z.B. Links festzulegen welche Geräte betroffen sind (Alle Lichter An -> Alle Lichter per Link in einen Ast vom Baum und ein Script das drüber läuft) Aktionen auf mehreren Modulen/Geräten bewirken das erleichtert mir die Pflege.

Das muss alles nicht ideal sein was ich da so mache, aber im Sinne von aufgeräumten Code, redundanz-freier Programmierung und Wiederverwendung, Kapselung und dynamischen Abläufen wiederspricht vieles was ich hier so ansonsten sehe meinem Programmierer-Verständnis.

Wieso nicht? Shutter Control geht doch auch mit Homematic, oder meintest Du etwas anders?

Nur das alle Funktionen des SC, HM schon ab Werk kann :slight_smile:
Michael

@Nall chan
genau so ist es HM bringt alles schon mit

@Fonzo
ich wollte ja nicht wissen wie man rollos ansteuert das funktioniert bei HM von Haus aus.
Ich kann ja jetzt schon jede Position anfahren.
Deshalb meint Powerfreddy auch das ich sowas für HM nicht brauche.
Des weiteren suche ich ja nicht nach Lösungen wie ich was erreiche das es funktioniert, sondern wie ich Programmiercode so gering wie möglich und effizent wie möglich in IPS realisiere, so das ich einfache Fehlersuche machen kann.

Derzeit würde ich wohl mit einer Funktionssammlung anfangen. So wie hier: https://www.symcon.de/forum/threads/7450-Scripte-mit-Variable-oder-Funktion-einbinden#post61624
Ich will halt nicht nur das etwas geht in IPS egal wie, sondern möchte gleich von Anfang an logisch rangehen, Ordnung halten und einen gewissen Stil verfolgen.

@Hagbard235

ich schaue mir mal deine Hinweise genauer an, ob das was in meine Richtung geht ist. Danke schon mal.

Gruß Sven

Nun wenn Du es von Anfang an richtig machen willst solltest Du objektorientiert programmieren. Mit den neuen PHP Modulen bist dazu gezwungen. Am besten Du baust Dir den Code den Du immer wieder brauchst in eine Klasse dann must Du später nur noch zentral die Klasse anpassen wenn Du etwas ändern willst.
Zur Fehlersuche solltest Du am besten try catch verwenden dann siehst Du am besten wo ein Fehler auftaucht
PHP: Ausnahmebehandlung (Exception-Handling) - Manual

Hallo,

ich bin auch auf der Suche nach einer „schönen Lösung“ und die einzige die es meines Wissens nach gibt is ein eigenes Modul zu erstellen in dem diese Funktionen Abgelegt sind denn ein einbinden eines Scriptes ist nicht wirklich schön…

Vielleicht hat jemand schon ein lokale Modul in verwendung und wäre so nett dies für die Interessierten zu Dokumentieren?

Vielen Dank!