Eine Funktion "dynamisch" erstellen lassen, für Smart Home!?



  • Hallo,

    zunächst mal zum Hintergrund des ganzen. Ich habe vor einiger Zeit ein Smart Home System auf Basis eines Raspberry PI entwickelt. Mehr Infos ➡ (http://www.forum-raspberrypi.de/Thread-projekt-smarter-home-selbstentwicklung).
    Die Basis Software habe ich in C geschrieben.

    Soweit läuft es alles ... ich kann mir einen "Auslöser" und eine "Aktion" erstellen. bzw. eine Zeitsteuerung.
    Jede dieser Funktionen hat eine eigene Funktion im C-Code.
    Nun will ich jetzt aber eine Art UND / ODER Verknüpfungen erstellen.
    Dh. Ich wähle einen Auslöser1 aus und dazu UND Verknüpft einen weiteren Auslöser2 oder sogar mehrer Auslöser UND verknüpft. Das gleiche gilt auch für die Aktionen bzw. Zeitsteuerungen.
    Wie schreibe ich dann diese C-Funktion am besten?
    Hat das jemand schonmal gemacht?

    Meine Idee wäre jetzt:
    In der Datenbank habe ich eine Tabelle in der alle Auslöser aufgelistet sind. Wird eine UND / ODER Verknüpfung erstellt, so werden gleichzeitig auch 2 neue Spalten mit "Logische Verknüpfung" und dem neuem Auslöser erstellt.....
    In der Software wird dann die Tabelle ausgelesen und in einer Schleife (abhängig von der Anzahl der Auslöser) die Auslöser nach der Reihe miteinander UND/ODER verknüpft.
    if(Spalte x+1 != null)... dann if(spalte x && spalte x+1)...
    usw.

    Wenn ich mir das alles so umdenke könnte es sehr Fehlerbehaftet enden:)
    Deswegen die Frage... schon mal jemand sowas gemacht?

    Danke im Voraus.


  • Mod

    Ist es eine Option, das nicht in C zu machen? In anderen Sprachen wäre das ungleich einfacher...



  • ich hab jetzt glaub ich nicht ganz verstanden, was du da genau vorhast, aber grundsätzlich kannst du dynamisieren, indem du funktionszeiger und zustandsvariablen (arrays, listen, ...) an eine funktion zur auswertung übergibst.



  • wenn du maximale Flexibilität möchtest, könntest du auch eine Skriptsprache verwenden, welche dann deine C Funktionen aufruft.
    Gibt ja bereits genug fertige Lösungen, z.B. LUA.

    Dann kann der Benutzer schreiben(so in der Art...)

    if Ereignis1==True and Ereignis2==False then 
    begin
       Aktion1(); 
       Aktion2();
    end
    

    Du musst dann nur noch dafür sorgen, dass der Interpreter Zugriff hat auf deine Funktionen sowie auf deine Ereigniszustände.



  • mitch_m schrieb:

    Nun will ich jetzt aber eine Art UND / ODER Verknüpfungen erstellen.
    Dh. Ich wähle einen Auslöser1 aus und dazu UND Verknüpft einen weiteren Auslöser2 oder sogar mehrer Auslöser UND verknüpft. Das gleiche gilt auch für die Aktionen bzw. Zeitsteuerungen.
    Wie schreibe ich dann diese C-Funktion am besten?
    Hat das jemand schonmal gemacht?

    Ich hab es selbst noch nicht praktikabel angewendet, aber warum machst du das nicht wie "Flags" die "|" gepiped werden?

    Also:

    int Wert = FLAG_HEIZUNG | FLAG_TUEROEFFNER | FLAG_FRONTTUER

    Du könntest dir zum Beispiel SDL anschauen, das benutzt auch FLAG und "|" die zuammen, wie da der Wert am Ende aussieht und wie so etwas zu implementieren ist, SDL_Init(FLAGS) oder CreateWindow(parameters, FLAGS)...

    Aber vielleicht ist die Herangehensweise das als einzelne Komponenten in einem verarbeiten zu wollen zu optimistisch, und du gehst auf jeden Parameter der zu Verfügung steht einzeln an, das wäre vielleicht sogar besser.

    So wird jeder Parameter einzeln abgearbeitet und du mußt nicht auf jeder mögliche Variation einzeln eingehen, sondern du behandelst das was reinkommt.

    Für mehr bräuchte man mal einen besseren Überblick was du da genau wie verknüpfen willst und warum und wie das zusammenspielt. 🙂


Log in to reply