Funksteckdosen,... mit iOS & Android (Version 2)

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)

  • 33.600Watt? Das sind knapp 150A, lustig, daß die sowas an normalen Schuko-Steckdosen beteiben können. Und die Fernbedienung hat selbst 3600Watt?
    Manchmal frag ich mich, ob die Leute überhaut Lesen was sie im Internet schreiben.

    1000Watt sind nichtmal 5Ampere, die meisten Funksteckdosen sind bis 10A, also 2300Watt ausgelegt. Da solltest Du keine Probleme bekommen.

    Also ich sehe nirgend wo, dass es 33600Watt hat, so heißt nur die Steckdose: FSS-33600W!

    Habe an einer von denen ein Gerät mit 2500W (Klimaanlage) hängen.
    Funktioniert das ganze nun oder nicht? Würde es schon gerne nutzen..ist ja immerhin auch 433Mhz. Oder gibt es da noch mehr als nur die Frequenz zu beachten?

  • So!
    ich nutze dyndns.org für meine statische ip, habe im router auch den richtigen port (wie im script festgelegt)
    eingetragen. das bekomme ich schon hin, hab ja auch einen whs zuhause laufen... ;)
    muss ich den port für TCP oder für UDP freigeben? habe beides schon versucht, leider ohne erfolg....

    verbunden ist er wohl, da der screen aufm handy hell wird. ich kann auch die button drücken, nur dann bleiben sie gedrückt und es passiert nichts.....

    vidarx ja, die kannst du auch benutzen!

    gruß
    beast

    Einmal editiert, zuletzt von Black Beast (6. Mai 2013 um 17:16)

  • @ Black Beast..
    sry ich kann deinen Wissenstand nicht so gut abschätzen :p
    Als ich es durchgespielt habe, hatte ich TCP und UDP freigegeben.
    Bei mir hat es dann ohne Probleme funktioniert. Das Problem, dass Buttons einfach gedrückt bleiben, hatte ich noch nicht. Vielleicht schilderst du dein Problem ansonsten mal im Forum von NetIO.
    Wie hats mit der "Zeitschaltuhr" geklappt ? Hinbekommen ?

  • @bl4ck0ut
    hast recht.

    so, habe es nun hinbekommen mit dem mobilen internet!

    ABER!!!!
    habe gerade etwas festgestellt. ich kann de steckdosen nun übers mobile internet steuern, wenn ich aber nun ins wlan wechsle, meinen account dafür nehme und dann die steckdosen steuern möchte geht es nicht..... der button bleibt gedrückt.
    andersherum ist es genauso.... wlan funzt nach neustart, aber dann über mobiles internet funzt es nicht mehr... merkwürdig!!!1

    gruß
    Beast

    P.S. das mit der "zeitschaltuhr" hat leider noch nicht gelkappt. :(

    Einmal editiert, zuletzt von Black Beast (6. Mai 2013 um 18:21)

  • Hab es jetzt grade auch mal ausprobiert: Eine neue Connection erstellt für mein Dyndns, dann einen neue Page und darin die neue Connection angegeben und bei mir ist jetzt exakt der gleiche Fehler, wie bei dir Black ! Der Button bleibt einfach gedrückt... sehr kurios. Auch nach dem Wechsel vom mobilen Internet zum Wlan das gleiche Problem. Habe die App danach wieder zurückeditiert und trotzdem geht der Fehler jetzt nicht mehr weg. Sehr komisch. ^^ Nur ein Neustart des Servers hat bei mir wieder den Ursprungszustand der App wiederhergestellt. Müsste man auf jedenfall einen neuen Thread bei NetIO erstellen.

    Was hat bei der Zeitschaltuhr nicht geklappt bzw. wo hängst du ?

    *
    EDIT:
    Hab einen Thread erstellt:

    http://netio.davideickhoff.de/forum/topic/177/?page=1#post-626

    Einmal editiert, zuletzt von bl4ckOut (6. Mai 2013 um 20:54)

    • Offizieller Beitrag

    Also ich habe auch mal in dem NetIO Forum was gepostet. Kurz: Nutze nur eine Verbindung
    (DynDNS), nur eine Seite. Habe intern den Port 54321, extern nutze ich 52431. Die FritzBox
    leitet 52431 an 54321 mit der entsprechenden IP weiter. So gehts bei mir problemlos ;)
    _____________________________________________________________________________

    Lasst uns hier doch mal überlegen, was wir in der App noch erweitern können! Iden:

    • Statusabfrage

    Beim starten der App am gleichen oder einem anderen Gerät soll per GET-Methode
    der Status abgefragt werden, der in einer Variable gespeichert ist.

    • Sleeper

    Eine Möglichkeit via Slider anzugeben, wann das jeweilige Licht ausgehen soll.
    Perfekt für Leute, die nicht ohne Licht einschlafen können oder auch für Musik-
    anlagen, welche diese Funktion nicht unterstützen und/oder es so einfacher ist.

    • Zeitschaltung

    Per Google Kalender mit ITTT oder einem iCloud Kalender die Dosen per Zeit
    schalten.

    • Temperatur

    Einen Temperatursender (bevorzugt DS18B20) anschließen und in der App anzeigen
    lassen. Evtl. An Dosensteuerung anknüpfen für Leute mit Pflanzen, die darüber die
    Temperatur in einem Zimmer gleich halten wollen o.ä.

    • Garagentoröffner

    Habe ich bereits integriert. Wenn es jemand interessiert, der kann sich gerne hier
    im Forum melden. Kurz: Funksteckdose bei Knopfdruck für 1 Sekunde an, diese schaltet
    ein Ralay, an diesem hängt der Taster der bereits vorhandenen Fernbedienung.

    • WebCam-Server

    Eine extrapage mit einem Webcambild welches live gestramt wird. Evtl. Mit Bewegungs-
    erkennung und Push-Funktion zum iPhone, oder E-Mail Versand.

    • Alarmanlage

    Bei Bewegungserkennung durch Webcam oder Bewegungsmelder, wird Licht eingeschaltet,
    Email gesendet, Push-Benachrichtigung, Ton abspielen o.ä. Evtl. auch mit Magneten an
    Türen und Fenstern.

    • Weiter Ideen gerne Posten!...

    <woltlab-metacode data-name="align" data-attributes="WyJjZW50ZXIiXQ=="><p><span style="font-size: 10pt">Ein "Gefällt mir" oder die Bewertung im Profil ist eine nette Geste für die Hilfe die wir hoffentlich waren oder sind.</span></p></woltlab-metacode>

    Einmal editiert, zuletzt von mario (7. Mai 2013 um 14:17)

  • Hallo,
    danke für die Anleitung, funktioniert perfekt! :)

    Um das ganze aber perfekt zu machen, hätte ich gerne bei dem Python-Server Script eine Abfrage für eine 1Wire-Temperaturmessung eingebaut, wie geht das?

    Mein eigener Versuch funktioniert so leider nicht (durch mein mangelndes Wissen zur Erstellung einer "if else" Funktion),
    verzeiht mir, wenn dies zu stark Offtopic wird:


    Das Script sollte, wenn man von der NetIO App per Button druck das Wort "temperatur" sendet, den Befehl der bei temperatur definiert ist ausführen, wenn es nicht das Wort "temperatur" ist soll er den "send" Befehl ausführen!

    PS: Könnte man dieses Script evtl so erweitern, dass wenn ich nun z.B. andere Wörter als temperatur sende, andere Befehle gesendet werden können?
    Oder das man auf einen Button direkt einen Befehl binden kann und man diesen in das send Feld eintragen kann (z.B. um weitere Funktionen bzw. Werte auslesen zu können)?


    Hier der Ausschnitt mit meinem Versuch eine if else Funktion zu erstellen:

    Danke für die Hilfe :)

    Temperatur auslese Befehl:

    cat /sys/bus/w1/devices/28-0000040668a7/w1_slave|grep t=|awk -F't=' '{printf("%.1f\n", $2/1000)}'

    Das ganze gibt mir dann diesen Wert heraus:
    25.3

    Nun müsste man das ganze nur noch in der Server Python Datei verbauen, wovon ich leider 0 Ahnung habe :(

    Einmal editiert, zuletzt von vidarx (9. Mai 2013 um 21:46)

  • Erst einmal vielen Dank für das Tutorial.

    Die Möglichkeit ein Programm über dem iPad zu steuern sind genial. So etwas hatte ich gesucht.
    Auch die Steuerung der Steckdosen ohne Lötarbeiten am Handsender entsprechen meiner Vorstellung.


    Anbei ein Python-Programm, um die Steckdosen per wiring-pi anzusprechen.

    Seltsamerweise kann ich die Steckdosen nicht über send ansprechen:
    > sudo ./send 00101 5 1 -r 3

    Über dieses Programm geht es:
    > sudo python ./tx.py 5 1

    Bei mir gibt es auch folgendes Phänomen:
    Ich kann zweimal den On-Befehl schicken, und beim zweiten Mal schaltet sich die Steckkdose aus.
    Wenn hier jemand eine Anregung hat, bin ich sehr dankbar.

    Mit einer kleinen Schleife, kann man alle Steckdosen ansprechen.
    Vielleicht geht dann die Garage vom Nachbarn auf :cool:.

    while (!sleep()) {sheep++};

    • Offizieller Beitrag

    Ich glaube damit kommen wir alle nicht weiter.

    Ich denke wir müssen die PythonCodes komplett neu aufsetzen!

    Ich würde vorschlagen wir basteln alle zusammen daran, eine perfekt funktionierende Lösung für die von mir Vorgeschlagenen Erweiterungen, oder?

    Am leichtesten und besten zu kontrollieren und erweitern wäre für jede Funktion ein eigenes Skript:
    - NetIO Input und Output Skript (NetIO.py), welches nur entscheidet, was mit dem eingehenden
    Befehl passieren soll, bzw. welches Skript ausgeführt werden muss. Außerdem muss hier der Status
    gespeichert werden. Also Prüft dieses Skript nur ob es ein GET-_ ist, oder etwas anderes und wenn
    etwas anderes, dann anderes Skript ausführen.
    Zusätzlich könnte man überlegen, ob man hier noch die Temperaturanfrage macht, diese könnte
    man auch in die GET Abfrage packen. z.B. GET-A, GET-B,..., GET-Temp.
    - Für jede Steckdose ein eigenes kleines Skript (a_on.py, a_off.py, b_on.py, ...) welches nur
    die dosen anschaltet und ausschaltet mit den eingetragenen Sendecodes (11111..).
    - Sleeperfunktion benötigt jeweils ein eigenes Skript, da eine Schleife läuft, bis die zeit abgelaufen
    ist. z.B. a_sleep.py, b_sleep.py,...
    Jetzt muss man hier noch überlegen, ob es jeweils ein fester wert sein soll (z.B. 30 Minuten), oder
    ob man den Wert per App definieren kann. Dies würde jedoch einiges an Aufwand kosten, da die
    App nur Slider zum eingeben von Werten bietet. Wenn man den Slider von 0 auf 30 schieben würde,
    würde das Skript jeden einzelnen Wert übergeben bekommen also 0, 1, 2, 3, .. , 30. Also müsste
    das Skript NetIO.py gucken, wann der letzte Wert kommt und diesen dann an z.B. a_sleep.py
    übergeben. Also wäre ich dafür, dass man feste Werte einträgt. Man könnte ja zusätzlich mehrere
    Buttons einfügen wie "Bett 30 Min.", "Bett 45 Min", ...
    - Garangentoröffner, in meiner kleinen Beschreibung habe ich erwähnt, dass bei mir einfach nur ein
    Relay an einer Funkdose hängt. Also müsste bei z.B. Dose C diese nach ca. 1 Sekunde wieder
    ausgeschaltet werden. Also einfach ein weiteres Skript was das selbe macht wie die normalen
    Skripte der Schaltung der Steckdosen nur, das es kein extraskript wie a_on.py und a_off.py,
    sondern nur eins z.B. a.py oder treffender garage.py
    - WebCam-Server und Alarmanlage lasse ich erst einmal außen vor. Diese Funktion gehen schon
    recht weit. Wobei ich kurz sagen kann, das der WebCam-Server noch recht simpel ist, da man einen
    WebServer wie Apache benötigt, welches eine html Seite ins Netzwerk streamt, wo nur das Aktuelle
    Webcam Bild gezeigt wird in Größe z.B. 200x200 und Intervall von ca. 0.5 Sekunden. Diese Seite
    kann man dann in NetIO unter hinzufügen von WebView lösen.


    Was haltet ihr davon??
    Wenn jemand eines dieser Skripte schreiben kann und möchte, wäre ich ihm/ihr sehr verbunden, da mir die nötigen Kenntnisse der Sprache Python noch fehlen. Ich werde mich bald einlesen, doch dauert das noch lange.. Also wenn jemand was hat, einfach Posten.
    Wenn alle Vorschläge berücksichtigt wurden und alles reibungslos klappt, werde ich mein Tutorial aktualisieren und so für FERTIG erklären.
    Danke schon mal für die positive Rückmeldung ;)

    <woltlab-metacode data-name="align" data-attributes="WyJjZW50ZXIiXQ=="><p><span style="font-size: 10pt">Ein "Gefällt mir" oder die Bewertung im Profil ist eine nette Geste für die Hilfe die wir hoffentlich waren oder sind.</span></p></woltlab-metacode>

    • Offizieller Beitrag

    Hei Leute, habe hier was, komme aber überhaupt nicht weiter:

    Meine Frage ist, wie kann ich in SocketServer Daten zurück geben? Habe da ein # ...send(a) aber das geht natürlich nicht :/ Die Doku von SocketServer.py hilft mir auch nicht weiter..
    Wie kann ich das also so realisieren?
    Und wie muss die Datei a_on.py aussehen? Da muss doch nur "[font="Monaco"]os.popen('sudo /home/pi/raspberry-remote/./send %s' % self.data)"[/font] [font="Verdana"]rein, oder?[/font]

    <woltlab-metacode data-name="align" data-attributes="WyJjZW50ZXIiXQ=="><p><span style="font-size: 10pt">Ein "Gefällt mir" oder die Bewertung im Profil ist eine nette Geste für die Hilfe die wir hoffentlich waren oder sind.</span></p></woltlab-metacode>

  • Wenn ich mich nun richtig eingelesen habe, sollte der Server folgendes Grundgerüst haben:

    433_server.py


    Für den Test, verwende ich einen client auf den Raspberry:
    433_client.py


    Nun der Test (links ist die Ausgabe vom Server, rechts die des Clients):

    > chmod +x *.py # damit ich nicht immer "python" in der Kommandozeile eingeben muss
    > ./433_server.py # server starten
    server established on host localhost and port 54321

    > ./433_client.py Garage auf
    send data > Garage auf < to host localhost and port 54321
    Sent: Garage auf


    client > 127.0.0.1 < send > Garage auf <
    client command > Garage <
    client requested unknown command

    Received: my dear client, your command is unknown


    > ./433_client.py Lampe an

    send data > Lampe an < to host localhost and port 54321

    Sent: Lampe an

    client > 127.0.0.1 < send > Lampe an <
    client command > Lampe <
    client requested valid command Switch Light
    die lampe wird eingeschaltet

    Received: server will now process your command Switch Light


    > ./433_client.py Temperatur Balkon

    send data > Temperatur Balkon < to host localhost and port 54321

    Sent: Temperatur Balkon


    client > 127.0.0.1 < send > Temperatur Balkon <
    client command > Temperatur <
    client requested valid command 1-Wire
    die Temperatur wird vom 1-Wire Sensor oder aus der DB gelesen

    Received: server will now process your command 1-Wire

    while (!sleep()) {sheep++};

  • Das Server Script habe ich noch etwas erweitert

    while (!sleep()) {sheep++};

    • Offizieller Beitrag

    Das sieht doch schon mal echt klasse aus!
    Du hast eine Variable für den Hauscode (send_key). Ich habe inzwischen 12 Steckdosen damit verbunden, was bedeutet, das ich mehrere Hauscodes habe. z.B. 11110 und 11101 und 11011... Wie kann ich das dann nutzen?
    Kann ich meine Steckdosen alle über light_dict "registrieren"?
    Wie sieht die Konfiguration dann in NetIO aus? Also wie lauten die Sendebefehle für AN und AUS, wie realisiere ich ein Label mit GET Methode der Temperatur?

    Ich habe mehrere iPhones und iPads im Netzwerk, alle mit dieser App. Wenn ich an iPad eins eine Lampe anschalte, kann ich dann, wenn ich an iPad zwei die app starte den Status abrufen? Geht das? (Beim starten der App, sendet diese die reads Anweisung, wenn ein Intervall eingestellt ist z.B. 1000 dann jede Sekunde)

    Danke schon mal für deine Mitarbeit an diesem Projekt :) Ich würde mich freuen, wenn wir alle Wünsche, welche hier im Forum geäußert werden nachkommen können ;)

    <woltlab-metacode data-name="align" data-attributes="WyJjZW50ZXIiXQ=="><p><span style="font-size: 10pt">Ein "Gefällt mir" oder die Bewertung im Profil ist eine nette Geste für die Hilfe die wir hoffentlich waren oder sind.</span></p></woltlab-metacode>

  • Ein paar Änderungen im Code:

    1) Socket Re-Use
    Damit kann direkt nach dem Abbruch des Servers, dieser wieder neu gestartet werden.

    2) Dictionary

    # [group code] [device]
    light_dict = { "Wohnzimmer":"11111 5", "Garage":"1001 3" }

    Im NetIO steht für das Feld Attribut onSend "Lampe Wohnzimmer An"

    Die Temperaturanzeige werde ich noch ändern, so daß er sich den Wert auch aus der Datenbank holen kann.


    NetIO habe ich noch nicht ganz verstanden.

    Wo findet man die GET Methode ?

    Die read Anweisung habe ich gesehen- im Protokoll des Servers.
    Im NetIO gibt es bei mir ein Label mit dem Attribut "reads": "read command"
    dort steht der Wert, den ich über server_reply im read-Teil zurückgebe.

    Meines Erachtens müsste man im read-Teil den Status aller Lampen zurückschicken.
    Wie die Auswertung in NetIO aussehen müsste , ist mir aber - noch - schleierhaft.

    while (!sleep()) {sheep++};

    • Offizieller Beitrag

    Super sache!

    Ja NetIO ist erst einmal gewöhnungsbedürftig.. aber auch sehr nett zum konfigurieren, wenn man weis was man machen muss...

    Also ich habe mit deinem Skript versucht die Temperatur auszulesen. Hatte 1wire allerdings nicht installiert, da mein Kernel unter RaspBMC leider das wire Modul nicht unterstützt, daher werde ich alles neu auf Wheezy aufsetzen. Zum testen hatte ich einfach ein Label in NetIO, ohne Inhalt, komplett ohne Attribute, dann hatte ich unter "reads" Temperatur geschrieben und ein Intervall von 10000 angegeben für 10 Sekunden ;)

    Danke noch mal für deine Mithilfe!

    <woltlab-metacode data-name="align" data-attributes="WyJjZW50ZXIiXQ=="><p><span style="font-size: 10pt">Ein "Gefällt mir" oder die Bewertung im Profil ist eine nette Geste für die Hilfe die wir hoffentlich waren oder sind.</span></p></woltlab-metacode>

  • Neue Version .....

    ich habe mal Zufallsfunktionen eingebaut, um Antworten vom Server zu generieren.

    Frage: Soll der Server sich den Zustand merken oder soll der Raspberry dies mittels GPIO anfragen ?


    # NetIO - SetUp
    # Item Switch
    # onSend Lampe Wohnzimmer An
    # offSend Lampe Wohnzimmer Aus
    # reads Lampe Wohnzimmer Status

    # NetIO - SetUp
    # Item Label
    # reads Temperatur [Sensor Name]
    # interval 2000
    # parseResponse \d+
    # formatResponse {0},{1}°C


    while (!sleep()) {sheep++};

  • Noch ein paar Gedanken:


    Beispiel-Setup:

    Netio clients iPad, iPod, iPhone
    1-Wire Sensor Balkon,Heizung
    GPIO-Input Dachfentser-endschalter
    GPIO-Output Dachfenster-Motor
    433 Empfänger Lampe Wohnzimmer, Lampe Flur
    Garagentor, Rolladen


    Szenario1: Raspberry / NetIO Server - Stromausfall
    -> Problem: Status von Funk-Steckdosen kann nicht bestimmt werden
    -> Status im Variable oder in JSON-Datei hinterlegen ?
    -> Lösung: Während des Server -Starts erhalten alle (?) Funk-Geräte Aus-Befehl

    -> In der gezeigten Konfiguration ist das Gargentor / die Rolladen problematisch - darf die Start-Routine das Tor/ die Rolladen ansprechen ?


    Szenario2: Funkübertragung gestört
    -> Problem: Status von Funk-Steckdosen kann nicht bestimmt werden
    -> Lösung: keine
    -> 'kleine' Lösung: Der Server merkt sich den Status aufgrund des letzten Befehls
    Dies ist evtl. nicht korrekt -> Funkstörung
    -> Was passiert, wenn das Garagentor / die Rolladen mehrmals hintereinander den gleichen Befehl erhält

    while (!sleep()) {sheep++};

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!