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

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

    Also die Steckdosen kann man ja zur Not immer noch per Handsender ansteuern, so ist es ja nicht, davon weis nur leider der Pi nichts!
    Man müsste also einen Empfänger an den Pi schließen, der das Signal der Handsender bekommt und auch so den Status speichert, den der Handsender verändert. Erst mal unwichtig, wie ich finde.

    Funkstörungen? Was stellst du dir genau vor? Ein Nachbar, der den selben Hauscode nutzt? Habe mir diesbezüglich auch schon Gedanken gemacht. Meine relativ simple Lösung: Zwei Steckdosen, welche hintereinander stecken!
    So:
    Strom -> Steckdose 10101 1 1 -> Steckdose 11001 1 1 -> Relai -> Garagentor
    Also das die App erst die erste anschaltet, dann die zweite mit jeweils unterschiedlichen Hauscodes, dann nach einer Sekunde die zweite wieder aus, dann nach noch einer Sekunde die erste wieder aus!
    So müsste jemand genau wissen, wie die Konfiguration aussieht, denn es multipliziert die Wahrscheinlichkeit mit sich selbst, was viel viel sicherer ist! Hätten wir z.B. nur 10 Möglichkeiten per DIP Schalter, hätten wir dann durch die zweite Steckdose 10 hoch 2 Möglichkeiten! Also 100!
    Da wir aber 5 DIP-Schalter haben, haben wir so schon 31 Möglichkeiten? Da 11111 als Binärecode in Dezimal 31 ergibt? Und so 31 hoch 2 961 Möglichkeiten wären?
    Ist auf jeden Fall einiges mehr!

    Zum Thema Stromausfall, PECH! Wenn du kein Strom hast, bringt dir das auch recht wenig STECKDOSEN an und aus zu schalten, oder Garagentore :D

    Nur die Sache mit Funkstörung das würde mich interessieren!

    @ shulle:
    Ich habe selber kein Andoid zuhause, müsste aber genau so sein wie beim iOS, da die App für beide Systeme angeboten wird und auch vom Entwickler gleiche Funktionen besitzt! lg.

    @ ThomasH:
    Ich versuche verzweifelt ein zweites kleines Skript, welches mir ermöglicht eine voreingestellt Dose z.B. "11111 2" nach 30 Minuten nach dem Drücken des Lampenbuttons in NetIO zu erstellen, doch ohne Erfolg :(
    Kannst du mir da helfen?
    Wichtig ist halt, das es auch wenn die App geschlossen wird weiter läuft und das wenn man den Befehl erneut aufruft, das Skript neu startet, also z.B. nach 20 Minuten willst du ab da erst wieder 30 Minuten, also drückt man den Button einfach noch mal.. Und am besten einen Button, der das zweite kleine Skript halt abbricht. Aber vorrangig, wäre es schon toll, wenn es überhaupt geht :D :D
    Du bist doch so fix im Programmieren :P

    Danke schon mal :)

    EDIT:
    Habe es direkt mal getestet, dein Skript, aber die Temperatur spinnt :D
    Also 1wire gibt das aus:

    Code
    pi@raspberrypi /sys/bus/w1/devices/28-0000030d050f $ cat w1_slave
    44 01 4b 46 7f ff 0c 10 a9 : crc=a9 YES
    44 01 4b 46 7f ff 0c 10 a9 t=20250


    Aber das Skript macht da irgendwas falsch :/

    Was macht den im Skript diese Zeile:
    temp = random.randrange(-10, 30, 2) + 0.3
    ???


    EDIT2:
    Okay, habe es jetzt :P
    habe diese Zeile wegkommentiert und folgende eingefügt:
    temp = read_sensor("28-0000030d050f")
    Wichtig bei einem Neustart ist, das man jedes mal die Module neu lädt: [font="Consolas"]sudo modprobe w1[/font][font="Consolas"]-[/font][font="Consolas"]gpio und [font="Consolas"]sudo modprobe w1[/font][font="Consolas"]-[/font][font="Consolas"]therm[/font][/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>

    Einmal editiert, zuletzt von mario (14. Mai 2013 um 22:26)

  • Wieder eine neue Version - den Code musste ich einfach aufräumen.

    Meine Herkunft aus dem E-Bereich ist geschuldet, dass ich Lampe nun in Licht umbenannt habe.

    Der Status wird jetzt gespeichert: In einem array und einer Datei (Stichwort Stromausfall).

    Bzgl. der Temperatur hatte ich ein Zufallsgenerator (random) drin, damit ich auf meinem Test-Raspberry ohne Sensoren Testdaten erhalte. Dafür gibt es jetzt einen debug-switch.

    Der Status wird zurückgegeben, nur weiß ich nicht, wie die Schiebschalter im NetIO das reflektieren können. Ich habe mir ein Label in Netio erstellt (reads:dict, interval:2000). Dort sehe ich, dass alles korrekt gemeldet wird, aber der Schiebschalter dies nicht mitbekommt.

    Bisher habe ich auf Systemebene nur crontab verwendet für Timer verwendet.
    Wer eine Idee hat, wie man asynchron einen Timer erstellt (Sub-Process ?), soll sich bitte melden.

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

    • Offizieller Beitrag

    Du bist wirklich eine Riesen Hilfe für dieses Tut!
    Aber bei dem letzten Skript gibt es bei mir folgende Fehlermeldung beim Ausführen:

    Ich muss mich noch mal entschuldigen, die Idee mit dem Speichern in einer Datei macht unter diesem Aspekt sinn, da ich getestet habe, ob die Steckdosen auch ihren Status speichern. Und wer hätte das gedacht, sie tuen es! Eine eingeschaltete Steckdose vom Strom getrennt, stellt sich erneut an, wenn sie wieder welchen bekommt! Super Sache!!

    Zu der Timer-Geschichte:
    Ich habe jetzt nicht so viel Ahnung von Python daher vergib mir, wenn ich total am Problem vorbei rede! Kann man nicht einfach bei senden von "Licht SLEEP" ein zweites Python Skript öffnen, z.B. sleep.py, worin nur die Zeit runterläuft und dann der Befehl "Licht XY aus" gesendet werden kann an die normale server_netio.py?
    Also das durch das senden über das eigentliche Skript so auch der Status abgefragt werden kann usw.
    Und so müsste es doch auch kein Problem sein, das wären das zweite Skript läuft das erste weiter laufen kann, oder? Es ist doch möglich zwei Skripte gleichzeitig laufen zu lassen, oder?


    Danke noch mal!

    <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

    Wie schon geschrieben, ist das Skript im Tutorial so wie es ist voll funktionsfähig und ohne Macken! Aber wir wollen noch weitere Funktionen integrieren wie die Sleeper/Timer Funktion, oder das speichern des Statutes, damit wenn du eine Lampe einschaltes später von dem gleichen oder anderen Gerät aus siehst, ob sie gerade an, oder aus ist...
    So was eben ;)

    Wenn alles fertig ist und auch diese Funktionen einwandfrei funktionieren, werde ich das Tutorial aktualisieren, damit auch ihr alle was davon habt.
    Dabei sollte man all denen danken, die hier bei mitwirken und versuchen zu helfen!

    Danke!

    <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>


  • Hi zusammen,

    inwieweit ist die Steuerung über Android möglich? Hat da jemand Erfahrungen mit gemacht?

    Gruß,

    schulle

    Hallo Zusammen,

    super Tutorial, funktioniert alles wie es soll.
    Zum Thema Android. Ich habe auf die Schnelle einen kleinen App-Prototypen geschrieben, welche die Verbindung zum Pi herstellt und die Steuerbefehle über SSH sendet. Mit der App ist es momentan möglich 4 Steckdosen zu steuern. AN/AUS und ALLE An und ALLE Aus.

    Habe im Moment noch fixe IP und Port als auch die Steckdosen fest adressiert. HausCode (11111)
    IP vom Pi ist: 192.168.178.38.
    Port: 56789

    Falls jmd. die App testen möchte. (Ist nicht Signiert!)

    Wenn ich am Wochenende Zeit habe werde ich dynamisch einbauen das zu ändern.

    PS:Schön ist die App nicht :)


    LG

  • Neue Version mit Timer

    NetIO: "timer [Name] [An/Aus] [Zeit]"
    "Timer Wohnz Aus 30"

    Es wird ein threaded timer gestartet, d.h. der Server wartet nicht.
    Nach Ablauf der Zeit, schaltet er auf den angegebenen Zustand.
    "Timer Wohnz Stop" funktioniert leider noch nciht. es gibt zwar den Aufruf t.cancel(), aber es passiert nichts.

    Was man machen könnte:
    Wenn der End-Zustand Aus sein soll, kann man vor dem Start des Timers erst einmal "An" schicken.

    Macht dies Sinn ?

    Mario,
    bzgl. des Problems mit dem Laden der Daten:
    Ich vermute, dass Du Einträge im dictionary hinzugefügt oder gelöschst hast, aber die pickle-Datei nicht neu geschrieben wurde.
    Bitte lösche die Sicherungsdatei (pickle_file = "433_status.p") von Hand.
    Tritt der Fehler dann immer noch auf ?

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

    Einmal editiert, zuletzt von ThomasH (16. Mai 2013 um 19:32)

    • Offizieller Beitrag

    Also im Debbugmodus klappt deine Temperaturanzeige gut! Im echten Modus allerdings nicht, wobei ich glaube irgendwas falsch gemacht zu haben, denn mit der Temperaturklasse hat es letztes mal noch geklappt.. Und jetzt nicht mehr.. Komisch. Folgende Fehlermeldung dazu:

    Die Reads Methode funktioniert auch irgendwie nicht :( Oder ich bin einfach zu doof dafür :D

    In NetIO habe ich zwei Buttons und ein Label.
    Button 1: send: Licht Bett an
    Button 2: send: Licht Bett aus
    Label: reads: Licht Bett status
    intervall:2000

    Beide Buttons funktionieren. Allerdings steht im Label immer "Bett An" :(
    Ich glaube irgendwas mit der pickel Datei stimmt immer noch nicht. Als wenn der nichts lesen könnte. Aber in Python steht kein Fehler, oder etwas anderes. Nur das:

    Wie man sieht setzt er auf an, auf aus, ließt aus den status, aber es passiert nichts :(

    EDIT:
    Ich realisiere den Timer so:
    Button:
    send: Licht Bett an
    send: Timer Bett aus 30

    So gehts doch auch, oder nicht?

    <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 (17. Mai 2013 um 18:54)

  • Neue Version....

    Der Fehler mit dem Status sollte behoben sein.
    Ich hatte nicht gemerkt, das in einer Varibale eine '0' gespeichert wurde und nicht eine 0.

    Die Kommandos konvertiere ich nun in Kleinschreibung.
    Bis jetzt war "an" nicht als "An interpretiert worden.
    Ein unbekannter Befehl wird nun auch angemeckert.

    Wenn das Programm sich seltsam verhält, setzt bitte die folgende Variable auf 3 oder 4
    verbose_level = 3
    Dann werden mehr Meldungen erzeugt, und ich kann den Fehler schneller finden.


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

    Einmal editiert, zuletzt von ThomasH (18. Mai 2013 um 08:04)

  • In dieser Version kann man wählen, wie der Timer sich verhält:

    # Mode 0: switch to [state] when timer elapsed
    # Mode 1: switch to [state] when timer starts and to ![state] when elapsed
    timer_mode = 1

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

    Einmal editiert, zuletzt von ThomasH (18. Mai 2013 um 08:04)

    • Offizieller Beitrag

    Sehr sehr sehr sehr gute Arbeit! :) Ich bin begeistert!
    Die Ausgaben des Skripts, immer zu wissen was es macht ist super!

    Wie kann ich bei einem Switch denn reads einstellen? Als Antwort auf "Licht Wohnz Status" bekommt er ja "Wohnz An / 1" oder halt aus.. wie kann der Switch in NetIO das interpretieren? Habe reads ausgefüllt und bei onValue "Wohnz An / 1" rein geschrieben, klappt aber leider nicht :(

    EDIT:
    Bei Temperatur im Modus 0, gibt er folgenden Fehler: TypeError: must be string or buffer, not float
    Im Modus 1 nicht. :/

    <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 (18. Mai 2013 um 15:44)

  • Falls jmd. die App testen möchte. (Ist nicht Signiert!)


    Ich würde sie gerne testen :) Habe versucht über Android die ein oder andere App zu finden um die steckdosen steuern zu können. hat jedoch bisher nicht geklappt.

    Würde mich über eine App freuen :)

  • Bei mir wird ein Switch nun korrekt umgeschaltet.

    Ich habe mehrere Buttons, die alle die gleiche Lampe schalten.
    Egal welchen ich verwende, der Switch wird automatisch aktualisiert.


    NetIO - SetUp
    # Item Switch
    # onValue 1
    # onText An
    # offText Aus
    # onSend Licht Wohnz An
    # offSend Licht Wohnz Aus
    # reads Licht Wohnz Status
    # parseResponse \d+
    # formatResponse {0}


    Der Temperatursensor sollte jetzt auch korrekt angezeigt werden.

    Weiterhin gibt es eine Variable time_multi, damit der Timer in Minuten angesprochen werden kann.
    time_multi = 1 # 1: value are seconds, 60: value should be minutes

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


  • Halte dich an die Anleitung aus dem ersten Post, dann klappt es mit Android.... Ich habe die paar Cent auch investiert ;)

    Habe ich getan. ich habe erstmal die net IO trial version installiert. damit funktioniert erstmal gar nix :D

    Muss ich etwa die vollversion kaufen, damit es überhaupt funktioniert?


    Bzw. welche App nimmt man denn für Android? wie ich das sehe, gibt es mehrere "Net IO"

    Einmal editiert, zuletzt von schulle (18. Mai 2013 um 21:07)

    • Offizieller Beitrag

    Alles super!

    Bisher hatte ich alles auf meine Pi1 laufen mit dem kleinen Skript aus dem Tutorial, da die Grundfunktion Immer laufen muss.
    Jetzt gefiel mit alle und es klappt alles bei meinem Pi2, da dachte ich, teste ich es mal mit Sender. Schließe den Sender an, führe das Skript aus, alles scheint zu klappen, doch schaltet die Dose nicht.

    Ich verstehe es nicht.

    Das Ausführen im Terminal mit "[font="Monaco"]sudo /home/pi/raspberry-remote/./send 11011 1 1"[/font][font="Verdana"] klappt problemlos. [/font]
    [font="Verdana"]Das Steuern mit der App und meinem Skript aus dem Tutorial klappt ebenfalls problemlos. [/font]

    [font="Verdana"]Woran kann das liegen? [/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>

    Einmal editiert, zuletzt von mario (18. Mai 2013 um 23:53)

Jetzt mitmachen!

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