Ankündigung

Einklappen
Keine Ankündigung bisher.

Logic und Howto für 433Mhz Steckdosen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    #16
    Ich habe mittlerweile auf einen Cubietruck gewechselt und dort das ganze auch zum laufen gebracht. Allerdings nur, wenn der apache auch als root läuft. Sonst kann smarthome.py den Befehl nicht absenden. Bisher habe ich noch keine Lösung gefunden die nicht "gebastel" ist.

    Aber ich starte den Apache und ordne nachher den Benutzer www-data in der /etc/passwd der Gruppe "Root" zu.
    Code:
    www-data:x:0:0:www-data:/var/www:/bin/bash
    Apache selbst lässt sich nicht als Root starten, deswegen erst der Start und dann die Rechteänderung in der /etc/passwd.

    Wie gesagt, das ist gebastel und Apache sollte eigentlich niemals als Root gestartet werden. In meinem eigenen WLAN und IPTables im Raspi die nur Zugriff von festgelegten IP-Adressen erlauben mag das gehen, aber nie auf einem Produktivsystem beim Kunden o.ä.!

    Bei einem Reboot wird der Apache auch nicht starten, da ja vorher die Rechte wieder zurückgeändert werden müssen.
    Anders habe ich es derzeit noch nicht zum laufen gebracht.
    Zuletzt geändert von Netsrac80; 15.11.2015, 23:15.

    Kommentar


      #17
      Hallo (Netsrac80) Carsten,
      vielen Dank für die Anleitung!
      Bei mir war nach befolgen der Install-Anleitung die Datei "rcswitch.pi" im Verzeichnis "/home/admin/" gelandet. Nach manuellem Umkopieren in das Verzeichnis "/usr/smarthome/" funktionierte der Befehl "/usr/smarthome/rcswitch-pi/send 10000 1 1" ohne Probleme.
      Gruß
      Hans

      Kommentar


        #18
        Auf dem aktuellen Image von Smarthome.py + SmartVisu heißt der User doch "Admin" oder ?

        Bei mir läuft es leider auch nur unter root wie bei giase. Bekomm das auch mit den Rechten nicht so recht hin.

        Gruß Mathias
        Zuletzt geändert von usr; 04.12.2015, 22:21.

        Kommentar


          #19
          Hi Carsten,
          habe alles wie in Deinem Beispiel #1 eingerichtet. Leider funktioniert das Senden nicht richtig. Ich höre mit einem Funkkopfhörer die Telegramme beim Auslösen. Etwas im Telegramm muß falsch sein - die Steckdosen schalten nicht.
          Wenn ich mit putty z.B. den Befehl
          /usr/smarthome/rcswitch-pi/send 10000 1 1
          oder
          /usr/smarthome/rcswitch-pi/send 10000 1 0
          ausführe schalten die Steckdosen ohne Probleme.
          Was mache ich falsch?
          Gruß Hans

          Kommentar


            #20
            Leider funktionieren meine Funksteckdosen immer noch nicht. Es liegt vermutlich an der Datei /smarthome.pi/logics/steckdose.py.
            Alle anderen Dateien sind so wie im Beitrag #1 eingegeben.

            #!/usr/bin/env python
            logger.info("Steckdosenlogik gestartet")
            import os
            if trigger['value'] is not None:
            source_item = sh.return_item(trigger['source'])
            os.popen("/usr/smarthome/rcswitch-pi/send "+ source_item.conf['systemcode'] +" "+ source_item.conf['geraetecode'] +" "+ str(int(trigger['value'] == True )))
            os.popen("/usr/smarthome/rcswitch-pi/send "+ source_item.conf['systemcode'] +" "+ source_item.conf['geraetecode'] +" "+ str(int(trigger['value'] == True )))
            os.popen("/usr/smarthome/rcswitch-pi/send "+ source_item.conf['systemcode'] +" "+ source_item.conf['geraetecode'] +" "+ str(int(trigger['value'] == True )))
            output = os.popen("/usr/smarthome/rcswitch-pi/send "+ source_item.conf['systemcode'] +" "+ source_item.conf['geraetecode'] +" "+ str(int(trigger['value'] == True ))).readlines()
            logger.info("Output")


            Vermutlich werden die Werte für die im oberen Code verwendeten Variablen nicht richtig ermittelt oder es fehlt noch etwas in der Zusammenstellung des Telegramms. Ich kann in einem Funkkopfhörer auf der Frequenz beim Auslösen das Daten-Telegramm hören, die entsprechende Steckdose schaltet aber leider nicht.
            Ich habe die Datei /smarthome.pi/logics/steckdose.py mal so mit festen Werten verändert, dass ich jetzt eine Steckdose einschalten kann.

            #!/usr/bin/env python
            logger.info("Steckdosenlogik gestartet")
            import os
            if trigger['value'] is not None:
            os.popen("/usr/smarthome/rcswitch-pi/send 11111 1 1")
            logger.info("Output Ein")


            Vielleicht kann sich ja mal jemand den Code ansehen (kann leider kein Python) oder mir sagen, was ich falsch mache?
            Gruß Hans

            Kommentar


              #21
              Hi,

              baue doch mal loggen.info("/usr/smarthome/rcswitch-pi/send "+ source_item.conf['systemcode'] +" "+ source_item.conf['geraetecode'] +" "+ str(int(trigger['value'] == True ))) in die Logic. Was kommt den dabei raus?
              Bitte poste Code innerhalb der Code-Tags (findet sich in der erweiterten Einstellung hinter dem '#')
              Bis bald

              Marcus

              Kommentar


                #22
                Hi,
                ist die Syntax nicht "logger.info"? "loggen.inf" bringt Fehlermeldung.
                Wie und wo finde ich das Ergebnis von "logger.info"? (Ich muß noch einiges lernen!)
                Gruß
                Hans

                Kommentar


                  #23
                  Hallo,
                  dieser Beitrag ergänzt den Beitrag #1!
                  Ich habe meine Funksteckdosen ("arendo" (vermutlich baugleich mit Brennstuhl) aus der Bucht) zum Laufen gebracht.
                  Mir hat der Beitrag aus der Zeitschrift CT 2/2016 (Querfunker, S. 102) geholfen. Mit einem zweiten Pi habe ich mit einem 433Mhz-Empfänger (zusammen mit dem 433Mhz Sender gekauft) die Daten-Telegramme analysiert.
                  Als Beispiel hier meine Dateien
                  /items/fsteckdosen.conf
                  Code:
                  [Funksteckdosen]    
                      [[System1]]    
                           [[[TasteA]]]
                              type = bool
                              name = 1A
                              visu_acl = rw
                              knx_dpt = 1
                              sqlite = yes
                              sim = track
                              systemcode = 10000
                              geraetecode = 1
                              knx_send = 10/0/0
                              knx_cache = 10/0/0
                              [[[[uzsu]]]]
                                  type = dict
                                  uzsu_item = Funksteckdosen.System1.TasteA
                                  cache = True
                                  visu_acl = rw
                           [[[TasteB]]]
                              type = bool
                              name = 1B
                              visu_acl = rw
                              knx_dpt = 1
                              sqlite = yes
                              sim = track
                              systemcode = 10000
                              geraetecode = 2
                              knx_send = 10/0/1
                              knx_cache = 10/0/1
                              [[[[uzsu]]]]
                                  type = dict
                                  uzsu_item = Funksteckdosen.System1.TasteB
                                  cache = True
                                  visu_acl = rw
                           [[[TasteC]]]
                              name = 1C
                              type = bool
                              visu_acl = rw
                              knx_dpt = 1
                              sqlite = yes
                              sim = track
                              systemcode = 10000
                              geraetecode = 3
                              knx_send = 10/0/2
                              knx_cache = 10/0/2
                              [[[[uzsu]]]]
                                  type = dict
                                  uzsu_item = Funksteckdosen.System1.TasteC
                                  cache = True
                                  visu_acl = rw
                  Und hier die datei
                  /logics/steckdose.pi
                  Ich habe auf ein Mehrfach-Senden verzichte, da das schon der Befehl "send" in rcswitch-pi erledigt.
                  Code:
                  #!/usr/bin/env python
                  logger.info("Steckdosenlogik gestartet")
                  import os
                  if trigger['value'] is not None:
                      source_item = sh.return_item(trigger['source'])
                      output = os.popen("/usr/smarthome/rcswitch-pi/send "+ source_item.conf['systemcode'] +" "+ source_item.conf['geraetecode'] +" "+ str(int(trigger['value']== True ))).readlines()
                  logger.info(output)
                  Als nächstes die
                  /etc/logic.conf
                  Code:
                  [hello]
                      filename = hello.py
                      crontab = init
                  
                  [dummy]
                      filename = dummy_series.py
                      cycle = 300
                  
                  [steckdose]
                      filename = steckdose.py
                      watch_item = Funksteckdosen.System1.TasteA | Funksteckdosen.System1.TasteB | Funksteckdosen.System1.TasteC
                  Der HTML-Code als Beispiel mit eingebauter UZSU für alle Kanäle
                  Code:
                  /**
                  * -----------------------------------------------------------------------------
                  * @package     smartVISU
                  * @author      Martin Gleiß
                  * @copyright   2012
                  * @license     GPL [http://www.gnu.de]
                  * -----------------------------------------------------------------------------
                  */
                  
                  {% import "widget_uzsu.html" as uzsu %}
                  {% block content %}
                  
                      <div class="block">
                          <div class="set-1" data-role="collapsible-set" data-theme="c" data-content-theme="a" data-mini="true">
                  
                              <div data-role="collapsible" data-collapsed="false">
                                  <h3>Funksteckdosen</h3>
                                  Taste A{{ basic.switch ('Funk1A' ,  'Funksteckdosen.System1.TasteA' , icon1~'it_remote.png' , icon0~'it_remote.png' ) }}&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
                                            {{ uzsu.uzsu_icon ('Funk_1A' , 'Funksteckdosen.System1.TasteA.uzsu', 'Schaltuhr Funksteckdose 1A', '0', '', '', 'bool', ['ein', 'aus']) }}<BR>
                                  Taste B{{ basic.switch ('Funk1B' ,  'Funksteckdosen.System1.TasteB' , icon1~'it_remote.png' , icon0~'it_remote.png' ) }}&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
                                            {{ uzsu.uzsu_icon ('Funk_1B' , 'Funksteckdosen.System1.TasteB.uzsu', 'Schaltuhr Funksteckdose 1B', '0', '', '', 'bool', ['ein', 'aus']) }}<BR>
                                  Taste C{{ basic.switch ('Funk1C' ,  'Funksteckdosen.System1.TasteC' , icon1~'it_remote.png' , icon0~'it_remote.png' ) }}&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp
                                            {{ uzsu.uzsu_icon ('Funk_1C' , 'Funksteckdosen.System1.TasteC.uzsu', 'Schaltuhr Funksteckdose 1C', '0', '', '', 'bool', ['ein', 'aus']) }}<BR>
                              </div>
                          </div>
                      </div>
                  {% endblock %}
                  Ein Problem habe ich noch. Nach reboot muß ich den Befehl "gpio export 17 out" mit Putty eingeben um den Port zuzuordnen. Vielleicht kann mir dazu noch jemand einen Tipp geben, wie ich die Rechte richtig einstelle?
                  Gruß
                  Hans
                  Zuletzt geändert von Tontechniker; 29.03.2016, 10:01. Grund: Schreibfehler!

                  Kommentar


                    #24
                    Hallo Hans,

                    teste mal bitte folgendes:

                    Erstelle das Verzeichnis: "/usr/local/skripte".
                    Dort legst du das Skript: "gpio_export.sh" an.
                    In diese Datei fügst du folgendes ein:
                    Code:
                    #!/bin/sh  
                    echo "17" > /sys/class/gpio/export
                    echo "out" > /sys/class/gpio/gpio17/direction
                    chmod 666 /sys/class/gpio/gpio17/value
                    chmod 666 /sys/class/gpio/gpio17/direction
                    In der etc/rc.local schreibst du vor exit 0 : "/usr/local/skripte/gpio_export.sh&"

                    Dann mit putty "sudo chmod +x gpio_export.sh" die Rechte vergeben.

                    Dann ein Neustart. Gruß Manuel
                    Zuletzt geändert von manu241; 17.01.2016, 13:16.

                    Kommentar


                      #25
                      Hallo Manuel,
                      vielen Dank! Hab es eingebaut und es funktioniert.
                      Gruß
                      Hans

                      Kommentar


                        #26
                        Hallo,

                        bei mir lief es erst auch nicht. Habe eine Raspi B+. Habe es jetzt hinbekommen mit dem Code von Hans für die Steckdose.pi und logic.conf. Meine send.cpp sieht noch Original aus. Also so:

                        Code:
                        int main(int argc, char *argv[]) {
                        
                            /*
                             output PIN is hardcoded for testing purposes
                             see https://projects.drogon.net/raspberry-pi/wiringpi/pins/
                             for pin mapping of the raspberry pi GPIO connector
                             */
                            int PIN = 0;
                            char* systemCode = argv[1];
                            int unitCode = atoi(argv[2]);
                            int command  = atoi(argv[3]);
                        
                            if (wiringPiSetup () == -1) return 1;
                                printf("sending systemCode[%s] unitCode[%i] command[%i]\n", systemCode, unitCode, command);
                                RCSwitch mySwitch = RCSwitch();
                                mySwitch.enableTransmit(PIN);
                        Dann habe ich zunächst folgendes ausgeführt:

                        Code:
                        sudo chown root:root /usr/smarthome/rcswitch-pi/send
                        gefolgt von:

                        Code:
                        sudo chmod u+s /usr/smarthome/rcswitch-pi/send
                        Jetzt funktioniert bei mir alles. Auch nach einem Neustart.

                        Kommentar


                          #27
                          Bei mir läuft es auch auf einem PI 2 B.
                          Es ist komisch. Wenn ich in der Datei "/items/fsteckdosen.conf" den Zusatz "enforce_updates = yes" eingebe, funktioniert es nicht richtig.
                          Deshalb habe ich es im Moment weggelassen.
                          Kann mir das jemand erklären?
                          Gruß
                          Hans
                          Zuletzt geändert von Tontechniker; 17.01.2016, 19:09.

                          Kommentar


                            #28
                            Ich habe die "items/steckdosen.conf" auf ein Minimum reduziert. So läuft es bei mir.

                            Code:
                            [Funksteckdosen]    
                                [[System1]]  
                                    name = Funksteckdosen
                                     [[[TasteA]]]
                                        type = bool
                                        name = Steckdose1
                                        visu_acl = rw
                                        systemcode = 11111
                                        geraetecode = 1

                            Kommentar


                              #29
                              Hab das jetzt auch mal bei mir für einige Gartensteckdosen eingebaut und es hat super geklappt. Dank externer Antenne liegt der ganze Rasperry aufgeräumt im Serverschrank und die Antenne funkt draussen. Vielen Dank!
                              You do not have permission to view this gallery.
                              This gallery has 2 photos.
                              ++ Der ultimative ETS 6 Schnellkurs ++
                              KNX und die ETS vom Profi lernen
                              www.ets-schnellkurs.de

                              Kommentar


                                #30
                                Hmm... Hi zusammen!

                                Hab auch mal alles versucht. Via Konsole kann ich mit "send" wunderbar die Funksteckdosen an und aus schalten. Auch nach einem Neustart geht alles.
                                Einfach mit
                                Code:
                                 ./send 10101 1 1
                                und gut.

                                Für smarthome.py sind die Items und Logiken auch alle angelegt. Im Log kommt auch schön eine Reaktion, wenn ich einen Schalter betätige:
                                Code:
                                2016-03-04 14:38:59,372 INFO     steckdose    Funksteckdosenlogik gestartet -- funksteckdosen.py:<module>:2
                                2016-03-04 14:38:59,962 INFO     steckdose    ['sending systemCode[10101] unitCode[1] command[1]\n'] -- funksteckdosen.py:<module>:10
                                Aber es tut sich nichts an der Funksteckdose. Wo könnte hier denn noch der Wurm stecken?

                                Das Startskript für GPIO hab ich von Manuel oben dankend übernommen.

                                Danke und Grüße
                                Thorsten
                                Zuletzt geändert von RoyalTS; 04.03.2016, 14:47.

                                Kommentar

                                Lädt...
                                X