Neue APP HttpGetter

Ich habe in letzter Zeit daran gearbeitet, eine eigene App zu programmieren. Die Hauptaufgabe der App ist es, als einfache Fernbedienung für die IP-Symcon (IPS) Steuerungen zu dienen.

Bisher habe ich diese Aufgabe aus meiner Sicht recht erfolgreich umgesetzt, obwohl sich die App noch in der Entwicklungsphase befindet.

Funktionsweise der App:
Die App sendet über einen HTTP-GET-Befehl Anweisungen an das Webhook von IP-Symcon. Diese Befehle werden von IP-Symcon verarbeitet und ermöglichen die Steuerung verschiedener Funktionen.

App-Struktur und Kosten:
Die Struktur der App ist bewusst einfach gehalten, um sie benutzerfreundlich zu machen. Es entstehen keine laufenden Kosten nach der initialen Einrichtung.

Fragen zur Weiterentwicklung und Veröffentlichung:
Nun stehe ich vor der Entscheidung, ob ich die App veröffentlichen soll, ob eine Erweiterung der Funktionalitäten sinnvoll wäre und ob es angebracht ist, für die App einen kleinen Betrag (zum Beispiel 1,99 €) zu verlangen.

Mich interessiert besonders, ob generell Interesse an einer solchen App besteht. Sie wurde mit Flutter entwickelt, sodass sie sowohl auf Android als auch auf iOS lauffähig ist. Da ich jedoch keinen Mac besitze, würde ich sie zunächst nur Android-Nutzern zur Verfügung stellen.

Ich freue mich auf eure Meinungen und Anregungen!

Stand 05.05.2024

Ich kämpfe derzeit mit der Erstellung eines Moduls. Da die Einrichtung in IPS recht einfach ist, stelle ich bis zur Fertigstellung des Moduls diese Anleitung zur Verfügung.

Erstelle ein PHP-Skript mit folgendem Inhalt:



<?php
if ($_IPS['SENDER'] == "WebHook") {
  // Parameter aus der URL abrufen und bereinigen
  $user = htmlspecialchars($_GET['user']);
  $password = htmlspecialchars($_GET['password']);
  $id = intval($_GET['id']); // Stelle sicher, dass $id eine Zahl ist
  $function = htmlspecialchars($_GET['function']);
  $state = htmlspecialchars($_GET['state']); // Stelle sicher, dass $state für die ZW_SwitchMode Funktion geeignet ist

echo "$id $function $state";

  switch ($function) {
    case "RequestAction_SWITCH":
        RequestAction($id, $state);
        echo "device with ID $id wurde auf $state geschaltet";
        break;
    case "RequestAction_DIMSET":
        RequestAction($id, intval($state));
        echo "device with ID $id wurde auf $state geschaltet";
        break;
    case "HM_WriteValueBoolean_STATE":
        HM_WriteValueBoolean($data['id'],"STATE", ($data['state']));
        echo "HM device with ID $id wurde auf $state geschaltet";
        break;
    case "HM_WriteValueBoolean_INHIBIT":
        HM_WriteValueBoolean($data['id'],"INHIBIT", ($data['state']));
        echo "HM device with ID $id wurde auf $state geschaltet";
        break;
    case "HM_WriteValueFloat_LEVEL":
        HM_WriteValueFloat($data['id'],"LEVEL", ($data['state']));
        echo "HM device with ID $id wurde auf $state geschaltet";
        break;
    case "ZW_SwitchMode":
        ZW_SwitchMode($id, $state); // Annahme: $state ist korrekt formatiert für diese Funktion
        echo "Z-wave gerät mit $id wurde auf $state geschaltet";
        break;
    case "ZW_DimSet":
        ZW_DimSet($id, intval($state)); // Annahme: $state ist korrekt formatiert für diese Funktion
        echo "Z-wave gerät mit $id wurde auf $state geschaltet";
        break;
    default:
        echo "diese Funktion -> $function <- ist nicht hinterlegt"; // Verwende $function anstelle von $stringValue
        break;
  }
}
?>

Unter „Kerninstanzen“ → „WebHook“ füge einen neuen WebHook mit beliebigem Namen hinzu.

Klicke auf das Zahnrad des WebHooks und verknüpfe es mit dem erstellten PHP-Skript.

Beende die Einrichtung in IPS.

In der App:

download unter diesem link:

  • Der Benutzername und das Passwort haben noch keine Funktion. (können leer bleiben)
  • Die IP-Adresse ist die des Servers.
  • Webhook: Der Name des WebHooks.
  • Button entsprechend deines Bedarf.

Stand 05.05.2024
Folgende Funktionen werden unterstützt:

ZW_SwitchMode
ZW_DimSet
IPS_RunScript
HM_WriteValueBoolean_STATE
HM_WriteValueBoolean_INHIBIT
HM_WriteValueFloat_LEVEL

Weitere Funktionen folgen wenn bedarf. Die Änderung ist mit einem zusätzlichem Case im PHP Skript so wie einem zusätzlichem eintrag im Array der APP erledigt.

Ich bitte um feedback wie die einrichtung geklappt hat.

2 „Gefällt mir“





Hier das Skript welches vom WebHook angestoßen wird. Es ist Theoderich um jede IPS-Funktion erweiterbar. Es muss nur in der App die Funktion in einem String gelistet sein.

if ($_IPS[‚SENDER‘] == „WebHook“) {
// Parameter aus der URL abrufen und bereinigen
$user = htmlspecialchars($_GET[‚user‘]);
$password = htmlspecialchars($_GET[‚password‘]);
$id = intval($_GET[‚id‘]); // Stelle sicher, dass $id eine Zahl ist
$function = htmlspecialchars($_GET[‚function‘]);
$state = htmlspecialchars($_GET[‚state‘]); // Stelle sicher, dass $state für die ZW_SwitchMode Funktion geeignet ist

echo „$id $function $state“;

switch ($function) {
case „ZW_SwitchMode“:
ZW_SwitchMode($id, $state); // Annahme: $state ist korrekt formatiert für diese Funktion
echo „Z-wave gerät mit $id wurde auf $state geschaltet“;
break;
case „ZW_DimSet“:
ZW_DimSet($id, intval($state)); // Annahme: $state ist korrekt formatiert für diese Funktion
echo „Z-wave gerät mit $id wurde auf $state geschaltet“;
break;
default:
echo „diese Funktion → $function ← ist nicht hinterlegt“; // Verwende $function anstelle von $stringValue
break;
}
}

1 „Gefällt mir“

Geld verdienen kann man mit 1,99€ bei potenziell ~50 Usern die dafür bezahlen würden sowieso nicht. Ich würde auf den Betrag verzichten.

Kostenlos gibt es vielleicht ~100 User.

Die Buttons können über den Webhook gespeichert werden? Kleines Array bzw. im 2. Schritt ein Modul, welches die Variablen verlinkt? Das ganze am Smartphone, ggf. direkt auf 2,3,4 einzustellen, möchte man sicherlich nicht.

Rückmeldung über den Variablenstatus gibt es keine?

Welchen Vorteil hat diese App (für dich) ggü einer Kategorie in der normalen Symcon App?

Ideal wäre wenn man eine App für Android Car hätte. Um z.B. die Garage zu öffnen etc.

Sehe ich das richtig, dass du die APP unverschlüsselt Passwörter mittels GET (auch noch in jedem Logfile z.B. von einem Proxy sichtbar) kommunizieren lassen möchtest?

Das habe ich mich auch gefragt !?

1 „Gefällt mir“

Dein Beitrag sieht schon recht gut aus, es gibt jedoch einige Punkte, die du verbessern könntest. Hier ein überarbeiteter Vorschlag:


Hallo Tobias,

erstmal danke für dein Feedback.

Blockzitat
Geld verdienen kann man mit 1,99€ bei potenziell ~50 Usern die dafür bezahlen würden sowieso nicht. Ich würde auf den Betrag verzichten.
Kostenlos gibt es vielleicht ~100 User.

es geht mir nicht ums Geldverdienen, sondern um eine persönliche Herausforderung. Die 1,99€ sind symbolisch, quasi der Wert eines Kaffees.
Optional würde ich mir davon vielleicht einen gebrauchten Mac mini holen um die App auch auf IPhone bereit zu stellen. Muss aber auch nicht sein bei kostenlos gäbe es warscheinlich keine Apple anbindung.

Blockzitat
Die Buttons können über den Webhook gespeichert werden? Kleines Array bzw. im 2. Schritt ein Modul, welches die Variablen verlinkt? Das ganze am Smartphone, ggf. direkt auf 2,3,4 einzustellen, möchte man sicherlich nicht.

In den Einstellungen kannst du den WebHook Speichen. Hinter den Button wird nur die Variable ID (aus IPS), die Funktion (z.b. zw_switchmode), und der schaltstatus gespeichert. Dies ist im fall zw_switchmode nur true und false. Im fall von zw_Dimset 10, 20 , … 100 und bei Ips_runskript halt nix.
Durch Dropdown Menü muss man eigentlich nur noch die zu schaltende ID hinter den Button eingeben. Die Funktion auswählen und den schalt Status wählen. Die beiden dinge dann per Dropdown. Das geht überraschend schnell. m.e. sogar schneller als in ips selbst ein php Befehl zu hinterlegen.
Den Hinweis aufs Modul verstehe ich als Anspruch ans Projekt, das es zur App auch ein Modul gibt.
Habe ich auf dem schirm wäre auch nicht mehr soviel Arbeit.

Blockzitat
Rückmeldung über den Variablenstatus gibt es keine?

derzeit gibt es nur eine Meldung ob die Meldung durchgegangen ist. Natürlich kann man da durch einen echo Befehl anstoßen der den aktuellen Status mitteilt.

Blockzitat
Welchen Vorteil hat diese App (für dich) ggü einer Kategorie in der normalen Symcon App?

Sie ist schmaler, direkter und meines erachten besser vom handy aus zu bedienen (größere Button). zudem sind wir ein 4 Personen Haushalt in dem meine Jungs demnächst ihre Aktoren im Zimmer selbst steuern wollen und sollen. Aber die sollen nicht alle in IPS rumfummeln.

@Kampfwurst

Blockzitat
Ideal wäre wenn man eine App für Android Car hätte. Um z.B. die Garage zu öffnen etc.

In diese richtung geht halt auch mein denken. Die App soll nur eine art Fernbedinung darstellen. Da brauch es auch keine visuelle Anzeige ob ips glaubt das das Licht an ist. Oder ob das Garagentor geschaltet ist. das sieht man meist ja selbst weil man davor steht!
Aber mal schauen wohin mich die Anforderungen noch treiben :wink:

@tobias

Blockzitat
Sehe ich das richtig, dass du die APP unverschlüsselt Passwörter mittels GET (auch noch in jedem Logfile z.B. von einem Proxy sichtbar) kommunizieren lassen möchtest?

das siehst du richtig, derzeit ist der Ansatz eher das lokale netz. Passwort und Nutzer können zweck Identifikation aber hergenommen werde.
Sofern ich das von unterwegs nutzen würde, würde ich es über ein VPN machen. Das hat aber verschiedene Gründe. einer davon ist halt das mein IPS sowieso nicht nach außen offen ist. Aber wie oben beschrieben ist der Einsatz dieser App der Ersatz einer Fernbedienung und nicht das überwachen des Hauses.

In mehr als 15 Jahren IPS habe ich noch nie von unterwegs effektiv was geschaltet, außer den Strom des 3D Druckers. hier musste ich aber sowiso auf eine Webcam zugreifen mit einfach ist da dann nix gewesen. Die Webcam lief auf App 1 Ips auf App2 Dann im Webfront durch x menues durch gehangelt bis ich am Schalter war. Ich habe soviele aktoren im system das bei vollzugriff, mehr als 50% des Bildschoims der App nur mit Kategorien voll ist. Das ist dann nicht mehr konfortabel. und regelmäßig schalten tue ich per app vieleicht noch 4-6 Aktoren.

Übrigens kannst du mit der App Theoderich beliebig viel button`s anlegen. Mein großer musste direkt mal 400 in den einstellungen anlegen. ich dachte das raucht sang und klanglos ab. aber war kein akt. Ist dann aber auch nicht mehr schön.

Der Webhook ist halt über ipmagic direkt im Internet. Ich würde die Symcon ID und damit quasi direkt die Befehle NICHT so simpel - auch wenn natürlich praktisch - in der App anlegen, sondern im Webhook eher sowas wie ‚führe Taste 1 aus‘ ablegen.

3,4 große Buttons für ein Android Auto o.ä. wäre sicherlich eine Anwendung.

Willst du die APP verbreiten, mache Sie kostenlos und (auch) ohne Playstore. Gerade 0815 Endgeräte (das 15. ausrangierte Handy als ‚Lichtschalter Ersatz‘ ) haben keinen Store-Zugang bzw. keine Zahlungsmodalitäten hinterlegt. Setze einen Paypal-Spenden Button auf die Downloadseite.

Bitte was für einen Quark hast du hier mit reinkopiert? Lässt man jetzt schon seine Forenbeiträge durch KI Unterstützung schreiben?

Dein Beitrag sieht schon recht gut aus, es gibt jedoch einige Punkte, die du verbessern könntest. Hier ein überarbeiteter Vorschlag

Ich persönlich würde die Konfiguration vollständig in ein json auslagern und das über den Webhook abrufen. Die IDs und damit Symcon Zugriff brauche ich ja sowieso. Daher bringt die Konfiguration auf dem Smartphone wenig Vorteile.

Nachtrag: Was kann die App dann noch besser als eine super abgespeckte HTML Seite, die man auch über die Hook-Funktion ausliefern könnte?

Vielen Dank für deine Überlegungen und Anregungen.

Dein Vorschlag, die Konfiguration vollständig in ein JSON auszulagern und über den Webhook abzurufen, klingt interessant. Jedoch möchte ich betonen, dass ich hier ein niederschwelliges Angebot anstrebe, bei dem Nutzer möglicherweise sogar selbst Änderungen vornehmen können. Ein Modul mit JSON-Anbindung würde wieder eine „geschlossene“ Entwicklung erfordern, was den niedrigschwelligen Zugang erschweren könnte. Zudem wäre Jason noch eine Sprache mehr. Ich habe jetzt Dart und PHP. die meisten Anpassungen sind derzeit in PHP nötig. In Dart beschränkt sich das ganze auf das füllen eines Array sowie ein neues Array zu jeder neu implementierten Funktion

Die Idee, die App auch ohne den Play Store anzubieten und einen PayPal-Spendenbutton auf der Downloadseite zu integrieren, finde ich ebenfalls interessant. Allerdings würde ich dann möglicherweise nicht wissen, wie viele Nutzer die App herunterladen. Zudem müsste ich sie dann zumindest auch über GitHub anbieten. Vielleicht werde ich beide Wege kombinieren.
Ich möchte nochmal betonen es ist nicht mein Ziel mit der App Geld zuverdienen!
Hier geht es um den Spaß seine Grenzen auszuloten. Und da ist auch das bereitstellen per playstore ein harken mehr auf meiner Löffelliste

In Bezug auf deine Frage nach den Vorteilen der App im Vergleich zu einer abgespeckten HTML-Seite über die Hook-Funktion sehe ich den Hauptvorteil vor allem in der Benutzerfreundlichkeit. Ich finde es praktisch, meine IDs auf dem Monitor zu sehen und sie dann einfach auf dem Handy einzugeben. Der Rest ist auf dem Handy auch nur ein einfaches Auswählen. Und wie bereits erwähnt, könnten auch die Kinder damit selbst Einstellungen vornehmen, ohne Zugriff auf die Haussteuerung zu haben.

Zum Thema Nutzung von KI: Du kennst mich mindestens 8-9 Jahre, oder? Du weißt doch, dass ich und die deutsche Sprache nicht die besten Freunde sind :wink: Deswegen nutze ich natürlich technische Möglichkeiten, um euch nicht an meinen Rechtschreibfehlern teilhaben zu lassen.

Danke nochmals für deine Gedanken dazu.

P.S. das mit IPmagig werde ich mir mal genauer ansehen. Hatte eben seit bestimmt 3 Jahren das erste mal wieder die IPS App geöffnet. Da hat sich ja einiges getan. Und dennoch ist mein system zu umfangreich um es effizient auf diese Art zu steuern.

Thema Modul vs. Script: Die gewünschten Variablen als Link unterhalb einer speziellen Kategorie (die gibt man im Webhook an) und fertig. Ebenso Benutzer+Passwort (bzw. würde ich es ggf. App-Token) nennen - kommt aber auf die verwendete Technologie im Hintergrund an.
Kann man alles in ein kleines Script packen. Wäre für den Anfang sicherlich besser/einfacher. Wenn auch nicht einfacher zu verteilen.

JSON abstrahiert dir PHP (Array2json mit json_encode) und sicherlich auch das APP-SDK. JSON | Flutter

Entweder du willst den freien Zugriff verhindern, dann musst du es vorher in Symcon definieren, oder du willst den freien Zugriff erlauben. Dann reicht aber fast ein generisches ReqeuestAction aus. Aktuell kann ich ja auch jedes x-beliebige ZWave Instanz geschaltet werden. Die ID muss ich nur erraten.

App-Verteilung: Lade die APK hier hoch. Keine PlayStore Komplikationen (dafür müssen ja durchaus auch bestimmte Regeln von dir erstmal eingehalten werden - hast du die gefühlt ~100 Seiten Playstore AGB schon gelesen?) Wenn du den Sourcecode teilen möchtest, wäre Github allerdings tatsächlich der bessere Ort.

Hallo Tobias,

iIch schätze deine Expertise und die Zeit, die du in deine Antwort investiert hast.

Ich möchte klarstellen, dass ich mich mit JSON noch nicht so erfahren bin und die aktuelle Implementierung meine derzeitigen Fähigkeiten widerspiegelt. Die Funktion der App ist gegeben, und das ist für mich in diesem Stadium das Wichtigste. Es geht mir vorrangig darum, eine funktionierende Lösung zu haben, die die Basisanforderungen erfüllt.

Bezüglich der Sicherheitsaspekte und weiteren technischen Verbesserungen: Ich bin offen für Entwicklungen in diese Richtung und schließe nicht aus, dass ich die App entsprechend weiterentwickeln werde. Allerdings muss ich das Schritt für Schritt angehen, basierend auf meiner verfügbaren Zeit und dem Erwerb neuer Kenntnisse.

Falls du Interesse hast, an einer alternativen Version zu arbeiten, die einige der von dir vorgeschlagenen fortschrittlichen Features integriert, ermutige ich dich dazu. kannst den code dann gerne offenlegen, davon kann ich nur lernen.

Nochmals danke für deine Unterstützung und dein Verständnis.

Ich lasse übrigens jetzt einen bekannten die Funktionalität testen mal sehen was der so meint.

Hast du mal die neue IPS Kachelvisu angeschaut?

Damit kann man genau solche einfache Mobilgeräte-Visus mit großen Buttons erzeugen mit minimalem Aufwand. Wenn man keine speziellen Layoutwünsche hat ist das quasi „out of the box“ fertig, einfach Links auf die Symcon-Variablen und Scripte in den Visu-Zweig werfen und fertig.

Kachelvisu_Objektbaum

Mit den Defaults sieht es auf dem Smartphone dann so aus:

oder mit 5 Sekunden Aufwand zur Umstellung auf noch größere Kacheln so:

Bei der Kachelvisu kann man unendlich viel Zeit hineinstecken für Gestaltung, aber das muss man nicht. Oben gezeigtes Minimal-Layout ist in wenigen Sekunden fertig.

Und der Vorteil wäre, dass man den Zugriff auf genau das beschränkt was in diesem Visu-Baum verlinkt ist. Kein Zugriff auf andere Objekte durch Absicht oder Tippfehler.

Man kann doch fix mit IPSStudio irgendwas passendes bauen, anstatt sich wochenlang mit Programmiertätigkeiten zu beschäftigen.

Tatsächlich habe ich mir die Entwicklungen der letzten Jahre im Bereich der Original IPS -App nicht mehr angesehen.
Das sind tolle Entwicklungen die die IPS App gemacht hat!

Ich werde mir das mal anschauen.

habe euch oben mal ein Video verlinkt.

P.S. für die Programmierung der App habe ich 3 Tage gebraucht. und ich denke ich brauche lange. ist eingentlich erst meine erste APP…

1 „Gefällt mir“

Ja, es gibt inzwischen neben dem klassischen Webfront die neue Visu mit „Kacheln“ und zugehöriger neuer App. Da kann man Wochen mit der Gestaltung rumwerkeln, wenn man spezielle Wünsche hat, aber für so einfache Buttons ist das wirklich schnell und effizient.

Trotzdem finde ich deinen Lösungsweg nicht verkehrt, das ist mal eine andere Idee der Steuerung. Und beim Programmieren lernt mal immer was dazu, alleine schon deshalb lohnt es sich.

Habe im 1. Beitrag Anpassungen zur Installation vorgenommen.

Bevor ich hier was ausprobieren würde: Der Funktionsname ist KEIN Freitext in der App? Also muss ich da wirklich eine von dir vorausgewählte Funktion verwenden?

Vielleicht verstehe ich ja irgendwas nicht… Aber warum eine webhook benutzen, wenn es die Json-RPC Schnittstelle in Symcon gibt.

Und warum Instanz-Funktionen zum steuern benutzen und nicht die generische RequestAction Methode?
Damit wären sowohl der Webhook als auch das Script oder geplante Modul obsolet.
Michael

Ich verstehe auch nicht so ganz, wieso es Felder Benutzer/passwort gibt, die aber nicht genutzt werden. Gleichzeitig aber ohne irgendeine Authentifizierung System-IDs zur weiteren Verarbeitung genutzt werden. Bitte dran denken, der Hook ist über IPMAGIC frei erreichbar.