SensorAndSwitch: Ideen Sammlung - Wunschliste

Gibts NOCH nicht. Schau ich mir an. ;)

Hab gerade ein LCD2004 20x4 I2C ans Laufen gebracht, indem ich ein C++ gechrieben habe, sodass dieses Realtime die Sensorwerte von den Sensoren anzeigt, die am "Sensor"-Pi hängen. I2C ist recht gut zu händeln. ;)

- - - Aktualisiert - - -

BME280: Ich habe eine C-Bibliothek dazu gefunden, die aber ziemlich kompliziert das alte Wire.h mit nutzt. Das muss ich erstmal auseinander dividieren, was davon mit wiringPi zu nutzen ist. Das dauert etwas...
 
ist ja kein Ding, hätte ich ja nicht kaufen müssen, aber sollte in dem von Dir bestelltem Set ja auch drin sein.
 
Bei dem Teil habe ich das Problem, dass ich mir die unbedingt nötigen I2C-Command- und -Data-Codes zusammen suchen muss. Das Ding lässt sich auch kalibrieren und da ist im Datasheet und der C-Bibliothek viel zu durchforsten, was zum Auslesen nur unbedingt nötig ist und was nicht.

- - - Aktualisiert - - -

Bin noch nicht dazu gekommen, da ich mich gerade mit der Thread-Programmierung in C++ befasse. Mein LCD2004-Display soll ja Uhrzeit mit Sekundenanzeige, aktuelle Realtimetemp und Lux anzeigen. Die Sensoren liefern aber in unterschiedlichen Intervallen. Beim Lichtsensor muss immer über eine Sekunde Pause zwischen den Abfragen sein. Daher werden alle Sensoren in eigenen Threads des C++-Programms abgefragt und im main() wird permanent angezeigt bzw. ans Display geschickt, so dass auf keinen Sensor gewartet werden muss. Funktioniert ausgezeichnet, sekundengenaue Uhrenanzeige und immer aktuellste Sensorwerte. Dies nur so mal zwischendurch. ;)
 
hmm, ein touch-Display habe ich auch noch ....
 
Das LCD2004 ist so etwas: https://www.amazon.de/gp/product/B007XRHBKA/ref=oh_aui_search_detailpage?ie=UTF8&psc=1

- - - Aktualisiert - - -

Ich hab mir noch sowas bestellt (OLED): https://www.amazon.de/gp/product/B00NHKM1C0/ref=oh_aui_search_detailpage?ie=UTF8&psc=1

- - - Aktualisiert - - -

Das lcd2004i2c-Programm auf dem LCD2004 20x4 I2C:
lcd2004i2c.jpg
Temperatur (grafisch oberer Balken)
Licht (grafisch unterer Balken)
Zeit mit Sekunden, Wochentag und Datum

Das Display kann keine Grafik darstellen sondern nur jeweils 20 5x8 Dot-Zeichen auf 4 Zeilen. Die Grafiksymbole und Pseudografik erzeugt man dennoch, indem man die ersten 8 Zeichen im Zeichensatz des Chip per I2C-Befehl neu erstellt.

- - - Aktualisiert - - -

PS: Das Display steckt auf einem Kartenhalter mit Klemmfunktion: https://www.amazon.de/gp/product/B0013CU6XK/ref=oh_aui_search_detailpage?ie=UTF8&psc=1
 
Du kennst die kleinen 2,4" Display, die sich mit lcd4linux ansprechen lassen, kommen häufig auch an SAT Receivern zum Einsatz. Die letzten habe ich in China für ~ 15€ bestellt.
IMG_0118.JPG
 
Die kenne ich nicht. Sehen aber nicht schlecht aus. Wie sind die angeschlossen? Per USB?

LCD4Linux kannte ich nicht. Hab das Anzeigeprogramm für mein LCD20x4 selbst über I2C mit C++ programmiert. Ist mir lieber, als vorgefertigte Software. Man lernt dann auch mehr über die Möglichkeiten, die man hat. ;)
 
ja werden per USB angeschlossen, gab es für Jahren mal bei peral für 2,90/6,90€ da hat die SAT community sich damit eingedeckt, bis alle aus Deutschland weg waren. Jetzt habe ich eins aus China nachgekauft. Die Firmware wird geändert ...
 
Das Ansprechen über USB ohne LCD4Linux dürfte wohl etwas schwierig sein, da es da wenig Dokumentation geben dürfte, die die Steuercodes über USB beschreibt. Mein Anspruch wäre es, das mit einem C++-Programm zu machen. Mir hat da aber schon mein DS18B20 über USB-Interface damals einige graue Haare beschieden. :mrgreen:

Am liebsten nehme ich zur Zeit für anspruchsvollere Anzeigen das 5" 800x480 TFT über HDMI mit Touch. Es reagiert als HDMI-Bildschirm superschnell und hat genug Anzeigefläche. Mein LCD2004 wollte ich nur nicht ungenutzt rumliegen lassen, daher suchte ich dafür einen Verwendungszweck. Außerdem blockiert es keine Pins (I2C Mehrfachnutzung).
 
noch eine Idee: SaS als reine Infoanzeige auf einem Webspace im Netz? Ginge das ohne root, auf einem reinem webserver?
 
SaS V6 Core auf einem reinen Webspace läuft nicht. Eine Display- bzw. Infoanzeige, die sich die Daten von SaS Core aus der Datenbank per curl (sashelper) lädt, das ginge. SaS ist inzwischen einfach zu komplex geworden. Zwar besteht SaS Core nach wie vor aus PHP-Scripten, aber die mir bekannten Webspaces haben viele PHP-Funktionen aus Sicherheitsgründen deaktiviert, die SaS z. Tl. benötigt. Daher sehe ich da besonders beim Sensorwerte Lesen schwarz. Wenn der Webserver im Heimnetz ist, ginge es evtl. noch, aber im Internet eher nicht. Müsste man je nach Webspace testen.
 
Kann PHP Screenshots seiner Ausgaben generieren?
...dann könnte ich mir folgendes vorstellen...
1. Ein PSG erstellt die Anzeige als Screenshot in einem Verzeichnis...
2. ...welches (als Virtualhost) fürs Internet freigegeben ist, welches...
3. ...vom Internetwebspace aufgerufen wird.
:rolleyes:
 
Soweit ich weiß, kann php zwar Bilddateien beliebig generieren, aber es gibt "einen mittleren Aufstand" mit den Schriftarten. PHP hat nur 5 eingebaut und wenn man ttf benutzen möchte wirds kompliziert.

Aber wenn vom Internetwebspace etwas aufgerufen werden kann, warum dann nicht gleich das PsG, denn es gibt ja nur css-formatiertes html zurück?

Naja, man müsste wohl erstmal klar definieren, was wo laufen soll und dann die Möglichkeiten des externen Webspace sich ansehen.
 
Bei dem Teil habe ich das Problem, dass ich mir die unbedingt nötigen I2C-Command- und -Data-Codes zusammen suchen muss. Das Ding lässt sich auch kalibrieren und da ist im Datasheet und der C-Bibliothek viel zu durchforsten, was zum Auslesen nur unbedingt nötig ist und was nicht.

Ich habe meinen BME280 jetzt lauffähig; mittels python script und mein erstes (fast) eigenes psg ...
Der Sensor hängt am eigenen pi der per wlan eingebunden und per ftp die Dateien dann zum sas schiebt. Somit ist der Sensor (fast) portabel und kann überall eingesetzt werden, vielleicht auch mal mit powerbank ein paar Tage draußen.

Unbenannt.PNG
 
Mit welchem Python-Script und ggf. welchen Bibliotheken hast du es hinbekommen? Ich suche noch immer nach den I2C-Code-Sequenzen für die Abfrage.

Ich würde gerne wie zu den anderen Sensoren ein C++-Programm schreiben, denn ich habe festgestellt, dass C++ bedeutend stabiler läuft, als ein Python-Script und schneller ist. Könntest du das ggf. mal posten, was du da benutzt hast?
 
Klar läuft das mit c++ besser und stabiler, aber ist für MICH keine Option.
Letztendlich sind es wieder die Adafruit Sachen. Ich habe mir das hingepuscht, weil so viele Anleitungen nicht mehr stimmten. Ich habe da bestimmt viel zu viel ausgescheckt und installiert

git clone https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code.git
git clone https://github.com/adafruit/Adafruit_Python_BME280
Das ist das Beispiel drin was ich jetzt auch benutze.

Ich habe vorher noch was installiert, bekomme ich auf die Schnelle aber nicht mehr zussammen, war eine ähnlicher sensor bmp085 ...

im Verzeichnis sind jetzt
Code:
Adafruit_BME280_Library-master    
Adafruit_Python_BME280            
Adafruit_Python_BMP               
Adafruit_Python_DHT               
Adafruit-Raspberry-Pi-Python-Code


Code:
pi@s6:~/Adafruit_Python_BME280# python Adafruit_BME280_Example.py
Timestamp = 95079.000
Temp      = 18.570 deg C
Pressure  = 979.62 hPa
Humidity  = 56.16 %
root@s6:~/Adafruit_Python_BME280#

Den Link hast Du? klick
 
Vielen Dank, schau ich mir morgen genauer an. :)
 
so ich mal wieder ;)

Mittlerweile liefern 6 Raspberry Daten für SaS ... Oft nutze zeros mit 3 x ds18b20 und einem dht22, die Daten werden dann per FTP an den zentralen SAS gesendet.

Jetzt zum meinem Problemchen: Ich versuche die Warmwasser-Temperatur meiner Wärmepunpe über den Tag hinweg aufzuzeichen. An den Speicher komme ich nicht direkt dran, darum kann ich die Temperatur nur am Rücklauf aufzeichnen. Allerdings kommt es anders als bei meinem anderen Aufzeichnung immer zu den Sprüngen in der Stunde. Ich weiß nicht ob das am Sensor liegt oder es wirklich dort so schwankt.

Mir würde das Maximum in der Stunde reichen, aber das bekomme ich nicht umgesetzt; Jemand eine Idee?


Code:
<?php


    /*
        +---+ +---+ +---+ +---------------------------------------------------+
        ¦     ¦   ¦ ¦     ¦  SensorAndSwitch (C)2014-16 Bluedragon            ¦
        +---+ ¦---¦ +---+ +---------------------------------------------------¦
            ¦ ¦   ¦     ¦ ¦  SAS-PsG (Info)  ¦  psginfoWasserTemp.php         ¦
        +---+ +   + +---+ +---------------------------------------------------¦
        +-----------------¦  Infografik Temp                                  ¦
        ¦  Info:          +---------------------------------------------------¦
        +---------------------------------------------------------------------¦
        ¦  Infoslot                                                           ¦
        +---------------------------------------------------------------------+
    */
 
    include_once __DIR__."/../include/psg.php";


    $ver="V#V 6.00#";
    $name="s4_ds18b20_ww";
    $gerarray=getGerInfo($name);
    $tempz=unserialize($gerarray["tempz"]);
    $info ="";
    


    # 10°C-Linien
    
    for ($g=1;$g<=8;$g++) {
        $l=$g*10+1;
        $info.='<div id="tab" style="position:absolute;border:1px;top:'.($l+20).'px;background-color:rgb(80,80,80);border-style:solid;border-color:black;left:30px;width:485px;height:1px"></div>';
        $info.='<div id="tab" style="position:absolute;border:1px;top:'.($l-4+20).'px;left:0px;font-size:10px;width:30px;text-align:right">'.(80-$g*10).'°C</div>';
    }
    
    # 5°C-Linien
    
   # for ($g=0;$g<=9;$g++) {
   #     $l=$g*10+6;
   #     $info.='<div id="tab" style="position:absolute;border:1px;top:'.$l.'px;background-color:rgb(60,60,60);border-style:solid;border-color:black;left:30px;width:485px;height:1px"></div>';
   # }
    
    # Markierung akt. Stunde
    
    for ($z=0;$z<=23;$z++) {
        $h=113;
        $t=1;
        $p=$z*20+5+30;
        if ($z==$gerarray["zeith"]) {
            $info.='<div id="tab" style="position:absolute;border:1px;top:'.$t.'px;left:'.($p-2).'px;background-color:rgb(80,80,80);border-style:solid;border-color:rgb(80,80,80);font-size:8px;width:19px;height:'.$h.'px"></div>';
        }
    }
    


    # Tempsäulen
    
    for ($z=0;$z<=23;$z++) {
        $h=$tempz[$z]["max"]-$tempz[$z]["min"];
        $h0=$tempz[$z]["max"];
        $t=100+1-$tempz[$z]["max"];
        $t0=$t;
        $p=$z*20+5+30;
        $f=120;if ($z<=$gerarray["zeith"]) {$f=200;}
        $f0=100;if ($z<=$gerarray["zeith"]) {$f0=140;}
        if ($h0<0) {$t=50+7; $h0=$h0*-1; $t0=50+7;}
        if (isset($tempz[$z]["max"])) {
            if ($tempz[$z]["max"]>=55) {
                $info.='<div id="tab" style="position:absolute;border:1px;top:'.$t.'px;left:'.$p.'px;background-color:rgb('.$f0.',0,0);border-style:solid;border-color:rgb('.$f0.',0,0);font-size:8px;width:15px;height:'.$h0.'px"></div>';
            }
            else {
                if (isset($tempz[$z]["max"])) {
                    if ($tempz[$z]["max"]>=50) {
                        $info.='<div id="tab" style="position:absolute;border:1px;top:'.$t.'px;left:'.$p.'px;background-color:rgb('.($f0/1).','.($f0/2).',0);border-style:solid;border-color:rgb('.($f0/1).','.($f0/2).',0);font-size:8px;width:15px;height:'.$h0.'px"></div>';
                    }
                    else {
                        if ($tempz[$z]["max"]>=43) {
                            $info.='<div id="tab" style="position:absolute;border:1px;top:'.$t.'px;left:'.$p.'px;background-color:rgb('.($f0/1).','.($f0/1).',0);border-style:solid;border-color:rgb('.($f0/1).','.($f0/1).',0);font-size:8px;width:15px;height:'.$h0.'px"></div>';
                        }
                        else {
                            if ($tempz[$z]["max"]>=39) {
                                $info.='<div id="tab" style="position:absolute;border:1px;top:'.$t.'px;left:'.$p.'px;background-color:rgb(0,'.$f0.',0);border-style:solid;border-color:rgb(0,'.$f0.',0);font-size:8px;width:15px;height:'.$h0.'px"></div>';
                            }
                            else {
                                if ($tempz[$z]["max"]>=36) {
                                    $info.='<div id="tab" style="position:absolute;border:1px;top:'.$t.'px;left:'.$p.'px;background-color:rgb(0,'.($f0/1).','.($f0/2).');border-style:solid;border-color:rgb(0,'.($f0/1).','.($f0/2).');font-size:8px;width:15px;height:'.$h0.'px"></div>';
                                }
                                else {
                                    if ($tempz[$z]["max"]>=33) {
                                        $info.='<div id="tab" style="position:absolute;border:1px;top:'.$t.'px;left:'.$p.'px;background-color:rgb(0,'.($f0/1).','.($f0/1).');border-style:solid;border-color:rgb(0,'.($f0/1).','.($f0/1).');font-size:8px;width:15px;height:'.$h0.'px"></div>';
                                    }
                                    else {
                                        if ($tempz[$z]["max"]>=30) {
                                            $info.='<div id="tab" style="position:absolute;border:1px;top:'.$t.'px;left:'.$p.'px;background-color:rgb(0,'.($f0/2).','.($f0/1).');border-style:solid;border-color:rgb(0,'.($f0/2).','.($f0/1).');font-size:8px;width:15px;height:'.$h0.'px"></div>';
                                        }
                                        else {
                                            $info.='<div id="tab" style="position:absolute;border:1px;top:'.$t.'px;left:'.$p.'px;background-color:rgb(0,0,'.($f0/1).');border-style:solid;border-color:rgb(0,0,'.($f0/1).');font-size:8px;width:15px;height:'.$h0.'px"></div>';                                            
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
        
    # Rest
    
    for ($z=0;$z<=23;$z++) {
        if ($z<=$gerarray["zeith"]) {
            if ($tempz[$z]["min"]<$tempz[24]["min"] or !isset($tempz[24]["min"])) {
                if (isset($tempz[$z]["min"])) {
                    $tempz[24]["min"]=$tempz[$z]["min"];
                    $tempz[24]["minh"]=$z;
                }
            }
            if ($tempz[$z]["max"]>$tempz[24]["max"] or !isset($tempz[24]["max"])) {
                if (isset($tempz[$z]["max"])) {
                    $tempz[24]["max"]=$tempz[$z]["max"];
                    $tempz[24]["maxh"]=$z;
                }
            }
        }
        $h=$tempz[$z]["max"]-$tempz[$z]["min"];
        $h0=$tempz[$z]["max"];
        $t=100+1-$tempz[$z]["max"];
        $t0=$t;
        $p=$z*20+5+30;
        $f=120;if ($z<=$gerarray["zeith"]) {$f=200;}
        $f0=100;if ($z<=$gerarray["zeith"]) {$f0=140;}
        if ($h0<0) {$t=50+7; $h0=$h0*-1; $t0=$tempz[$z]["max"]*-1+50+7;}
        
        # Zeitskala
        
        $info.='<div id="tab" style="position:absolute;border:1px;top:'.(103).'px;left:'.$p.'px;font-size:7px;width:15px;text-align:center">'.$z.'h</div>';
        
        # Werte
        
        if (isset($tempz[$z]["max"])) {
            $info.='<div id="tab" style="position:absolute;border:1px;top:'.$t0.'px;left:'.$p.'px;background-color:rgb(0,'.$f.','.$f.');border-style:solid;border-color:rgb(0,'.$f.','.$f.');font-size:8px;width:15px;height:'.$h.'px"></div>';
            if ($tempz[$z]["max"]>80) {
                $info.='<div id="tab" style="position:absolute;border:1px;top:'.(83).'px;left:'.$p.'px;width:15px;text-align:center;font-size:8px;text-shadow:0px 0px 1px black,0px 0px 1px black,0px 0px 1px black;">'.number_format(sprintf('%.1f',$tempz[$z]["max"]),1,",",".").'</div>';
                $info.='<div id="tab" style="position:absolute;border:1px;top:'.(92).'px;left:'.$p.'px;width:15px;text-align:center;font-size:8px;text-shadow:0px 0px 1px black,0px 0px 1px black,0px 0px 1px black;">'.number_format(sprintf('%.1f',$tempz[$z]["min"]),1,",",".").'</div>';
            }
            else {
                $info.='<div id="tab" style="position:absolute;border:1px;top:'.(3).'px;left:'.$p.'px;width:15px;text-align:center;font-size:8px;text-shadow:0px 0px 1px black,0px 0px 1px black,0px 0px 1px black;">'.number_format(sprintf('%.1f',$tempz[$z]["max"]),1,",",".").'</div>';
                $info.='<div id="tab" style="position:absolute;border:1px;top:'.(12).'px;left:'.$p.'px;width:15px;text-align:center;font-size:8px;text-shadow:0px 0px 1px black,0px 0px 1px black,0px 0px 1px black;">'.number_format(sprintf('%.1f',$tempz[$z]["min"]),1,",",".").'</div>';
            }
        }
    }


    $zh=$gerarray["zeith"];
    $zvh=$zh-1;
    if ($zvh<0) {$zvh=23;}
    $pfeil="&rArr;";
    $w=($tempz[$zh]["max"]+$tempz[$zh]["min"])/2;
    $wv=($tempz[$zvh]["max"]+$tempz[$zvh]["min"])/2;
    if ($wv>$w) {$pfeil='&dArr;';}
    if ($wv<$w) {$pfeil='&uArr;';}
    $info.='<div id="text" style="position:absolute;border:1px;top:0px;left:520px;text-align:left;width:90px;font-size:30px;">'.$pfeil.'</div>';
    $info.='<div id="text" style="position:absolute;border:1px;top:0px;left:520px;text-align:right;width:90px;font-size:12px;">Wasser-<br />Temp.</div>';
    $info.='<div id="text" style="position:absolute;border:1px;top:35px;left:520px;text-align:right;width:90px;font-size:20px;">'.number_format(sprintf('%.1f',$tempz[24]["max"]),1,",",".").'°C</div>';
    $info.='<div id="text" style="position:absolute;border:1px;top:55px;left:520px;text-align:right;width:90px;font-size:12px;">('.$tempz[24]["maxh"].'h) max.</div>';
    $info.='<div id="text" style="position:absolute;border:1px;top:70px;left:520px;text-align:right;width:90px;font-size:20px;">'.number_format(sprintf('%.1f',$tempz[24]["min"]),1,",",".").'°C</div>';
    $info.='<div id="text" style="position:absolute;border:1px;top:90px;left:520px;text-align:right;width:90px;font-size:12px;">('.$tempz[24]["minh"].'h) min.</div>';
    echo 'IB#<div style="position:absolute;left:85px;top:0px;">'.$info.'</div>#'.$ver;
    
?>
 
1) Kann man einen Schalter sperren so dass er im Web nicht von Hand geschaltet werden kann, wohl aber aus den Ketten heraus?
2) oder generell sperren?
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.