juergen.rocks

ELV Raumklimastation RS 500 mit Raspberry Pi unter Linux auslesen

Der Elektronikversender ELV bietet mit der Raumklimastation RS 500 ein Gerät mit Farbdisplay zur Überwachung von Temperatur und Luftfeuchte an, das gleich mit 5 Funksensoren. Die Station lässt sich mittels einer mitgelieferten PC-Software »EasyTemp« auslesen. Aber nur unter Windows. Wäre es nicht schön, die Daten auch unter Linux zu erhalten? Zum Beispiel mit einem Raspberry Pi?

Das Haus, in dem ich wohne, erstreckt sich über mehrere Stockwerke. Eine Überwachung von Temperatur und Luftfeuchte in verschiedenen Räumen hilft mir sicherzustellen, dass ausreichend gelüftet und so Schimmel vermieden wird. Bisher verwendete ich zu diesem Zweck 4 einzelne Geräte, an denen ich aber auch vorbeikommen musste, um festzustellen, dass bisher noch nicht ausreichend gelüftet wurde. Zeit, das zu ändern. Ein Elektronikversender bietet für kleines Geld eine Raumklimastation an:

  • Farbdisplay
  • 5 Funksensoren (auf 8 erweiterbar)
  • mit PC-Software auszulesen

Klingt erst einmal gut. Da ich meine bisherigen Einzelgerätschaften noch nicht am PC auslesen konnte, war mir zunächst auch egal, dass hier nur eine Windows-Software beilag. Und so habe ich das Teil bestellt und aufgestellt.

ELV Raumklimastation RS 500 mit Sensor

Geht da nicht vielleicht doch was mit Linux?

Kaum ist die Station aufgestellt und alle Sensoren verteilt und verbunden, stellt sich unweigerlich die Frage, ob man nicht doch irgendwie die Messwerte unter Linux gewinnen könnte. Wäre schon schick, könnte man sie auf dem Mobiltelefon oder Tablet anzeigen. Oder besser noch: Mit in die Überwachung durch Icinga 2 übernehmen.

Nun gut. Erst mal schauen, was wir hier vor uns haben. Also steckte ich einfach mal so das mitgelieferte USB-Kabel ein und harrte der Dinge, und tippte dmesg ein. Zunächst eine positive Überraschung:

usb 1-1.3: new full-speed USB device number 5 using dwc_otg
usb 1-1.3: New USB device found, idVendor=0483, idProduct=5750
usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 1-1.3: Product: By viewtool
usb 1-1.3: Manufacturer: MyUSB_HID
usb 1-1.3: SerialNumber: ************
hid-generic 0003:0483:5750.0005: hiddev0,hidraw0: USB HID v1.10 Device [MyUSB_HID By viewtool] on usb-20980000.usb-1.3/input0

So grundsätzlich kann mein Linux-System etwas mit dem Gerät anfangen. Es meldet sich als USB-HID (Human Interface Device) an. Somit könnte man potentiell schon kommunizieren. Der Beschreibung nach kann die mitgelieferte PC-Software »EasyTemp« neben vielen anderen Funktionen auch Live alle Messwerte darstellen. Das muss also hinzubekommen sein. Doch auf der Schnittstelle herrscht Schweigen im Walde.

Reverse Engineering

ACHTUNG! Das hier beschriebene Vorgehen kann das Gerät irreparabel schädigen! Hier werden Annahmen getroffen, die sich aufgrund fehlender Dokumentation nicht bestätigen ließen! Es wird keinerlei Support geleistet! Es wird keinerlei Garantie oder Gewährleistung für die korrekte Funktionsweise oder Ungefährlichkeit übernommen.

Natürlich war das Internet leer. Ich habe zwar noch mehrere, offensichtlich baugleiche, Raumklimastationen anderer Hersteller entdeckt, aber von wegen Linux-Support oder einer Protokollbeschreibung. Pustekuchen. Scheinbar hat sich bisher noch niemand die Mühe gemacht, sich mit diesem Gerät zu beschäftigen, oder es sehr gut für sich behalten. So komme ich erst einmal nicht weiter. Ich muss wissen, wie »EasyTemp« mit dem Gerät kommuniziert.

Glücklicherweise gibt es selbst bei mir zuhause noch einen Windows-Rechner, auf dem ich »EasyTemp« installieren konnte. Alleine das war schon ein Akt. Die Software gibt es nirgends zum Download, und die Windows-Büchse verfügt über kein CD-ROM-Laufwerk. Der alte USB-Brenner half. Ein Wunder, dass der nach Jahren im Regal noch so schnurrte. Doch nach der Installation funktionierte die Software direkt und bot mir eine Ansicht aller gerade gemessenen Werte an. Die Anzeige aktualisierte sich auch immer dann, wenn das Display andere Werte anzeigte. Es geht also irgendwie.

Mit einem USB Monitoring Tool zeichnete ich die USB-Kommunikation zwischen PC und Raumklimastation auf. Dabei kamen wider Erwarten eine ganze Menge an Daten zusammen. Identifizieren konnte ich jedoch, dass die PC-Software Anfragen schickt, die vom Gerät beantwortet werden. Eine 64 Bytes lange Anfrage erhält eine 64 Bytes lange Antwort. Also schaue ich mir zunächst die Anfragen an. Es stellt sich heraus, dass es nur sieben verschiedene Anfragen gibt, die sich ständig wiederholen, immer in der gleichen Reihenfolge. Zwar ist die gesamte Anfrage 64 Bytes lang, aber nur die ersten vier Bytes sind nicht 0x00. Dazu beginnt eine Anfrage immer mit 0x7B und endet mit 0x40 0x7D:

  1. 0x7B 0x04 0x40 0x7D (der Einfachheit halber im weiteren Verlauf als Anfrage 0x04 beschrieben)
  2. 0x7B 0x41 0x40 0x7D (der Einfachheit halber im weiteren Verlauf als Anfrage 0x41 beschrieben)
  3. 0x7B 0x06 0x40 0x7D (der Einfachheit halber im weiteren Verlauf als Anfrage 0x06 beschrieben)
  4. 0x7B 0x08 0x40 0x7D (der Einfachheit halber im weiteren Verlauf als Anfrage 0x08 beschrieben)
  5. 0x7B 0x09 0x40 0x7D (der Einfachheit halber im weiteren Verlauf als Anfrage 0x09 beschrieben)
  6. 0x7B 0x05 0x40 0x7D (der Einfachheit halber im weiteren Verlauf als Anfrage 0x05 beschrieben)
  7. 0x7B 0x03 0x40 0x7D (der Einfachheit halber im weiteren Verlauf als Anfrage 0x03 beschrieben)

Sieben Anfragen. Sieben mal 64 Bytes Antwort. Sieben deckt sich keinesfalls mit der Anzahl der möglichen (das wären 8) oder der verwendeten (das sind 5) Kanäle. Also ein direkter Rückschluss auf eine 1:1 Beziehung zwischen Anfrage und Kanal fällt raus.

Bei den Antworten sticht ins Auge, dass zumindest die letzten 32 Bytes über alle Anfragen hinweg immer identisch sind. Vielleicht werden also auch nur 32 Bytes pro Antwort für Nutzdaten verwendet.

Das ist im Trüben fischen. Das Problem muss verkleinert werden. Ich entnehme also aus allen Sensoren bis auf einen (Kanal 1) die Batterien und starte die Raumklimastation neu. Ich beginne einen neuen Mitschnitt der USB-Kommunikation. Jetzt sorge ich für eine Temperaturänderung. Der Vergleich der beiden Mitschnitte bringt dann endlich ein brauchbares Ergebnis.

Vergleich der Aufzeichnungen vor und nach der Temperaturänderung"

Ein Sensor, eine Temperaturänderung, nur ein Byte, ein einziges im gesamten Mitschnitt hat sich verändert. Es sprang von 0xCC auf 0xCB. Nichts liegt also näher, als sich die Integer-Werte mal anzusehen:

Byte Integer-Wert
0xCC 204
0xCB 203

Das entspricht exakt dem Zehnfachen der angezeigten Temperatur, nämlich 20,4 °C und 20,3 °C. Nächste Mutmaßung: Das folgende Byte könnte die relative Luftfeuchte sein:

Byte Integer-Wert
0x32 50

Auch das stimmt exakt mit der angezeigten Luftfeuchte von 50% überein.

Ansonsten gibt es nun eine ganze Menge weitere Bytes. Gehen wir nun davon aus, dass bei der Temperatur auch Werte über 25,5 °C (Integer 255, Hex 0xFF) angezeigt werden sollten, gehe ich davon aus, dass das Byte vor dem sich geänderten noch zur Temperatur gehört. Damit haben wir drei Bytes pro Kanal.

Um die Theorie zu bestätigen, schließe ich alle Sensoren wieder an und fertige einen neuen Mitschnitt. Und tatsächlich. In Dreiergruppen zerlegt erhalte ich in der Antwort der 0x03er-Anfrage alle Messwerte der Kanäle:

Kanal 2                       Kanal 4                       Kanal 6                       Kanal 8
                    +--------------+              +--------------+              +--------------+              +--------------+
                    |              |              |              |              |              |              |              |
  ??                |  Temp     RH |              |  Temp     RH |              |  Temp     RH |              |  Temp     RH |
+----+              +---------+----+              +---------+----+              +---------+----+              +---------+----+
|    |              |         |    |              |         |    |              |         |    |              |         |    |
 0x7b 0x00 0xcb 0x35 0x01 0x18 0x28 0x00 0xd6 0x34 0x00 0xff 0x2b 0x00 0xd0 0x35 0x7f 0xff 0xff 0x7f 0xff 0xff 0x7f 0xff 0xff [... mehr Bytes, mit denen ich (noch) nichts anfangen kann ...] 
     |         |    |              |         |    |              |         |    |              |         |    |
     +---------+----+              +---------+----+              +---------+----+              +---------+----+
     |  Temp     RH |              |  Temp     RH |              |  Temp     RH |              |  Temp     RH |
     |              |              |              |              |              |              |              |
     +--------------+              +--------------+              +--------------+              +--------------+
         Kanal 1                       Kanal 3                       Kanal 5                       Kanal 7

Nicht verwendete Kanäle haben also den Wert 0x7f 0xff 0xff. Das deckt sich auch mit den Erfahrungen aus den Mitschnitten mit nur einem Sensor. Wertet man das hier gezeigte Beispiel aus, so kommt man zu diesem Ergebnis:

Kanal Temperatur Luftfeuchte
1 20,3 °C 53 % rel.
2 28,0 °C 40 % rel.
3 21,4 °C 52 % rel.
4 25,5 °C 43 % rel.
5 20,8 °C 53 % rel.
6 --- ---
7 --- ---
8 --- ---

Bleibt noch die Frage, was mit negativen Temperaturwerten ist. Mit zwei Bytes lässt sich das zwar locker bewerkstelligen, aber ich will das lieber testen. Also wickele ich einen Sensor in einen Gefrierbeutel und ab damit in die Tiefkühltruhe. Zum Glück empfängt die Basisstation weiter das Signal, und so kann ich erneut zur Auswertung schreiten, als eine Temperatur kleiner als 0 °C angezeigt wird. Ich fertige zwei Mitschnitte von zwei unterschiedlich angezeigten Temperaturen und Luftfeuchten:

Antwort Erwartete Temperatur Erwartete Luftfeuchte
0xff 0xee 0x26 -1,8 °C 38 % rel.
0xff 0xe7 0x27 -2,5 °C 39 % rel.

Bei der Luftfeuchte ergibt sich kein Problem. Warum auch. Hier gibt es sowieso nur positive Werte. Die Temperaturen wären mit 0xff 0xee = 65518 = 6551,8 °C (nach bisheriger Annahme) wohl wesentlich zu hoch. Auf die richtige Temperatur käme man also mit 0xffee - 0xffff - 0x1 = -18 = -1,8 °C.

Zum Glück springt mir hier die Python-Standardbibliothek mit int.from_bytes zur Seite:

int.from_bytes([0xff, 0xee], byteorder='big', signed=True)
# Liefert -18 -> das ist das erwartete Ergebnis!

Das klappt auch mit den oben schon genannten positiven Werten:

int.from_bytes([0x01, 0x18], byteorder='big', signed=True)
# Liefert 280 -> das ist das erwartete Ergebnis!

Damit haben wir doch alles zusammen.

Ans Auslesen!

Raspberry Pi vorbereiten

Ich setze ein Raspberry Pi mit Raspbian Stretch Lite auf. Dazu verwende ich ein altes Raspberry Pi 2. Das lag hier noch rum. Neben der Standardinstallation kommen noch diese Pakete hinzu:

  • make
  • gcc
  • python3
  • python3-dev
  • python3-virtualenv
  • virtualenv
  • libusb-1.0-0-dev
  • libudev-dev
  • redis-server (Cache für die ausgelesenen Temperaturdaten)
  • redis-tools

Dazu kommen noch einige andere kleine Arbeiten, z. B. die Entsorgung des Standard-Users pi und noch ein paar andere Dinge, die aber nichts direkt mit der Verwendung der Raumklimastation zu tun haben und der Absicherung des Raspberries für den Betrieb im internen Netzwerk dienen.

Die Raumklimastation verbinde ich mit dem Raspberry Pi. dmesg bestätigt, dass das USB-HID-Gerät erkannt und bereit ist.

Jetzt haben wir etwas zum Ausprobieren.

Proof of Concept: Anfrage 0x03 mit Python auf dem Raspberry ausführen

Zum Glück gibt es hidapi. Hier kann man sehr einfach mit USB-HID-Geräten kommunizieren. Entsprechend richten wir uns auf dem Raspberry in unserem Arbeitsverzeichnis ein Python Virtual Environment ein, in dem wir hidapi installieren.

virtualenv -p /usr/bin/python3.5 venv
. ./venv/bin/activate
pip install hidapi

Jetzt ist Zeit für ein ausgedehntes Mittags- oder Abendessen. Die Installation der hidapi wird auf einem Raspberry Pi etwas in der Größenordnung von Stunden dauern. Aber es ist es wert. In der Zwischenzeit kann man einen Blick auf das Skript try.py aus dem oben verlinkten GitHub-Repo werfen. Mit kleinen Veränderungen taugt es auch für einen Test für das Auslesen der Raumklimastation.

# Original: https://github.com/trezor/cython-hidapi/blob/master/try.py

from __future__ import print_function

import hid
import time

# enumerate USB devices

for d in hid.enumerate():
    keys = list(d.keys())
    keys.sort()
    for key in keys:
        print("%s : %s" % (key, d[key]))
    print()

# try opening a device, then perform write and read

try:
    print("Opening the device")

    h = hid.device()
    h.open(0x0483, 0x5750)  # AENDERUNG: Vendor-ID und Product-ID aus der dmesg Meldung

    print("Manufacturer: %s" % h.get_manufacturer_string())
    print("Product: %s" % h.get_product_string())
    print("Serial No: %s" % h.get_serial_number_string())

    # enable non-blocking mode
    h.set_nonblocking(1)

    # write some data to the device
    print("Write the data")
    h.write([0x7b, 0x03, 0x40, 0x7d] + [0x00] * 60)  # AENDERUNG: Unsere Anfrage 0x03

    # wait
    time.sleep(0.75)  # AENDERUNG: Wir brauchen mehr Zeit

    # read back the answer
    print("Read the data")
    while True:
        d = h.read(64)
        if d:
            print(d)
        else:
            break

    print("Closing the device")
    h.close()

except IOError as ex:
    print(ex)
    print("You probably don't have the hard coded device. Update the hid.device line")
    print("in this script with one from the enumeration list output above and try again.")

print("Done")

Wenn hidapi fertig installiert ist, kann dieses Skript ausgeführt werden. Es sollte dann ein Ergebnis wie dieses hier liefern:

interface_number : 0
manufacturer_string : MyUSB_HID
path : 0001:0004:00
product_id : 22352
product_string : By viewtool
release_number : 512
serial_number : xxxxxxxxxxxx
usage : 0
usage_page : 0
vendor_id : 1155

Opening the device
Manufacturer: MyUSB_HID
Product: By viewtool
Serial No: xxxxxxxxxxxx
Write the data
Read the data
[123, 0, 204, 58, 0, 225, 52, 0, 214, 59, 1, 8, 44, 0, 209, 55, 127, 255, 255, 127, 255, 255, 127, 255, 255, ...noch mehr...]
Closing the device
Done

Damit ist bewiesen: Wir können die Raumklimastation auslesen.

Raspberry Pi als »Datenquelle« einrichten

Wir wollen die Daten für mehrere verschiedene Zwecke haben. Da bietet es sich an, dass ein einzelnes Programm alle 30 Sekunden die Daten ausliest und für alle anderen Anwendungen zur Verfügung stellt. Als »Zwischenspeicher« eignet sich perfekt Redis. Das ist eine schnelle und schlanke Key-Value-Datenbank. Doch bevor Redis verwendet werden kann, deaktivieren wir in der Konfiguration das Persistieren der Daten. Zum einen sind Momentaufnahmen von Temperatur- und Luftfeuchtewerten sowieso sehr kurzlebig, zum anderen schonen wir damit die SD-Karte des Raspberries.

In der /etc/redis.conf werden dazu alle Zeilen auskommentiert, die mit save beginnen:

[...]
#   Note: you can disable saving completely by commenting out all "save" lines.
#
#   It is also possible to remove all the previously configured save
#   points by adding a save directive with a single empty string argument
#   like in the following example:
#
#save ""

#save 900 1
#save 300 10
#save 60 10000
[...]

Da wir nur in unserem geschützten internen Netz arbeiten, bietet sich Redis auch als Schnittstelle für die Konsumenten der Daten an. Dazu muss aber Redis so konfiguriert werden, dass es auf die externe IP-Adresse (hier im Beispiel: 192.168.1.234) hört und den sicheren Modus deaktiviert. Entsprechend werden weitere Änderungen in der redis.conf vorgenommen:

bind 127.0.0.1 192.168.1.234
protected-mode no

Nun noch Redis neu starten:

systemctl restart redis

Wichtiger Hinweis: Im späteren Verlauf sollte die Verwendung des Redis-Ports mittels Shorewall oder einer anderen Firewall auf bestimmte Konsumenten eingeschränkt werden. Dieses absolute Minimum an Sicherheit sollte man schon einplanen. Aktuell kann jeder, der die IP-Adresse des Raspberries erreichen kann, auf die Redis-Datenbank lesend und schreibend zugreifen. Allerdings geht eine Konfigurationsanleitung für Shorewall eindeutig über den Fokus dieses Beitrags hinaus.

Redis befüttern

Man wählt sich sein Zielverzeichnis (hier im Beispiel: /opt/raumklima) und checkt dorthin das Github-Repository juergen-rocks/raumklima.git aus. Hier ist alles enthalten, was man benötigt. Damit alles funktioniert, erzeugt man für sein Zielverzeichnis ebenfalls ein Python Virtual Environment.

mkdir /opt/raumklima
cd /opt/raumklima
virtualenv -p /usr/bin/python3.5 venv
# Dauert ein wenig...
pip install -r src/requirements-rs5002redis.txt
# Das dauert extrem ewig - hier ist wieder hidapi mit im Spiel

Hat man das geschafft, konfiguriert man noch in der src/rs5002redis.ini den Zugang zu Redis. Allerdings sollten die Standardwerte dort soweit passen (lokales Redis, Datenbank Nummer 3). Es fehlt nun nur noch ein Cronjob, der alle 30 Sekunden das Auslesen startet. Damit das auch mit einem Python Virtual Environment funktionieren kann, gibt es das Skript src/start_save_rs500_to_redis.sh. Es muss, wie alle *.py-Dateien auch, ausführbar sein (zur Not mit chmod +x src/*.sh src/*.py nachhelfen). Mit crontab -e öffnet man den Editor für die Cronjob-Tabelle. Man fügt diese Zeile hinzu:

* *  *   *   *     /opt/raumklima/src/start_save_rs500_to_redis.sh; sleep 29; /opt/raumklima/src/start_save_rs500_to_redis.sh

Cron hat als kleinste Einheit eine Minute, deshalb muss man hier etwas tricksen. Nach spätestens einer Minute sollte Redis nun befüllt sein. Das kann man wie folgt nachprüfen:

redis-cli -n 3 get rs500_c1_temp

Das Ergebnis sollte die Temperatur auf Kanal 1 ausgeben:

"19.8"

Hinweis: Die Werte werden mit einer maximalen Lebensdauer von 45 Sekunden in Redis gespeichert, danach automatisch gelöscht, wenn sie nicht erneuert wurden. So ist sichergestellt, dass, wenn der Cronjob mal nicht funktioniert, keine alten Werte gelesen werden können.

Was haben wir bisher erreicht? Wie geht es weiter?

Wir haben die Raumklimastation RS 500 mit einem Raspberry Pi verbunden und lassen sie alle halbe Minute auslesen. Die Ergebnisse werden in einer Redis-Datenbank gespeichert und damit für andere Anwendungen zur Verfügung gestellt. In den folgenden Schritten wird nun noch ein Monitoring in Icinga 2 eingebunden. So lässt sich die Einhaltung von Grenzwerten für Temperaturen und Luftfeuchte überwachen und gegebenenfalls mit Alarm-Mails oder anderen Benachrichtigungen reagieren. Der folgende Blog-Post beschreibt das Vorgehen:

Außerdem kann man nun auf dem Raspberry Pi noch ein Web-Interface bereitstellen, welches das direkte Auslesen der Messewerte ermöglicht:

Autor:

Themen:

Veröffentlicht:
19.02.2018 10:43

Zuletzt aktualisiert:
13.03.2020 16:57



Kommentare

Antonis

14.06.2022 10:42


Hello!

Great work and thanks for taking the time to decode all the USB coms for the community. I'm using your code with great success (though a few adjustments to save to InfluxDB instead of Redis).

Just one question though, did you manage to decode the dew point values from the sensors? I would be interested in grabbing those too!

Simone

12.08.2022 21:32


I think the dew points are calculated in the software, since they cannot be measured so easily. otherwise they would be included in the messages transferring temperature and humidity

Timo

21.11.2021 08:36


Bei meiner weiteren Recherche habe ich gefunden, dass die Raumklimastation auch unter dem Namen HP3000 (Verkäufer: Ambient Weather, Hersteller: Fine Offset) vertrieben wird. Unter dem Namen findet man mehr Informationen, wenn jemand die Station z.B. in die Wetter-Software WeeWX einbinden möchte.

Im Kommentar findet man auch das Kommunikationsprotokoll (reverse-engineered, nicht von mir getestet):
https://github.com/matthewwall/weewx-hp3000/blob/master/bin/user/hp3000.py

Schöne Grüße

Timo

19.11.2021 21:33


Vielen Dank für Ihre Dokumentation. Nur aus diesem Grund habe ich mir die Raumklimastation gekauft. Es funktioniert einwandfrei. Meine Konfiguration:

Raspberry Pi Zero 2 W
dnt RoomLogg PRO mit 8 Sensoren, Firmware V1.3.0 vom 13.04.2021

Probleme hatte ich beim hid-modul, weil python eine Berechtigung gefehlt hat. Geholfen hat:
sudo nano /etc/udev/rules.d/91-hid.rules <--Nummer ist wichtig
Dateiinhalt:
SUBSYSTEM=="usb", ATTR{idVendor}=="0483", ATTR{idProduct}=="5750", MODE="0666"

Schöne Grüße

Olli

27.04.2020 00:39


Tolles Projekt, hab es nachgebaut und funktioniert einwandfrei. Danke!
Ich würde mich sehr über einen Tip freuen, wie man die Werte in eine MySQL-DB schreiben könnte. Ich würde sie gerne auf Dauer speichern und noch auf andere Weise weiterverarbeiten.

Jürgen Edelbluth Autor

27.04.2020 06:58


Prinzipiell spricht nichts dagegen, die Daten in MySQL/MariaDB oder sonst eine Datenbank zu übertragen. Das Skript save_rs500_to_redis.py1 macht genau das für die Redis-Datenbank, jedoch ohne zeitlichen Bezug (immer nur aktuelle Ist-Werte).

Für eine spätere Auswertung sollte man das eigentliche Speichern aber um den Zeitstempel des Abrufs erweitern und pro Abruf entsprechend einen Datensatz anlegen. Dann steht einer weiteren Auswertung nichts mehr im Wege.


  1. Skript zum Auslesen und Speichern der Messwerte in Redis: https://github.com/juergen-rocks/raumklima/blob/master/src/save_rs500_to_redis.py

Olli

27.04.2020 23:02


In der Theorie ist mir klar, was passieren müsste. Aber in der Praxis fehlen mir leider die Detail-Kenntnisse bei dem Thema.
Ich weiß nicht, was genau nun in der "save_rs500_to_redis.py" angepasst werden muss. Der Zeitstempel müsste auch in dieser Datei hinzugefügt werden, oder?
Und wahrscheinlichen müssen ja noch weitere Dinge gemacht werden. Zuerst müsste ja ein SQL-Client installiert und ein Profil parallel zur "rs5002redis.ini" angelegt werden. Werde die Tage aber mal versuchen, mich da durchzubeißen.

PXG8Y

16.07.2019 17:51


habe eine email geschrieben, hat alles geklappt?

Jürgen Edelbluth Autor

16.07.2019 17:51


?

PXG8Y

15.07.2019 11:27


das ist natürlich kein problem, wüde es aber vorerst nur in einem "geschlossenen" Rahmen besprechen. Senden sie mir doch bitte eine Email an ***@***.***

Jürgen Edelbluth Autor

15.07.2019 11:27


Ich freue mich sehr über eine Kontaktaufnahme!

Leider kann ich zur angegeben E-Mail-Adresse (sie wird bei der Freischaltung des Kommentars automatisch ausgeblendet) keinen GPG Public Key finden:

$ gpg2 --search-keys ***@***.***
gpg: error searching keyserver: No data
gpg: keyserver search failed: No data

Für einen geschlossenen Rahmen wäre das doch eine feine Sache, gerade bei diesem E-Mail-Provider. Meinen Public Key gibt es hier: https://keys.edelbluth.eu/juergen-rocks-22D2FA80.asc. Einfach anschreiben, E-Mail-Adresse ist im Key hinterlegt. Und nicht vergessen, den eigenen Public Key mitzuschicken :-)

PXG8Y

11.07.2019 21:20


Habe eine frage zur cc Lizenz, ich habe eine kleine Erweiterung für das Programm in Python geschrieben, darf ich die in einem Kommerziellen sinne verwenden?

Jürgen Edelbluth Autor

11.07.2019 21:20


Der Source Code selbst steht nicht unter der CC-BY-SA. Diese bezieht sich auf den Text des Blog-Posts.

Für den Code gilt die MIT-Lizenz (siehe auch https://github.com/juergen-rocks/raumklima/blob/master/LICENSE). Sie erlaubt auch eine kommerzielle Nutzung, so lange der Copyright- und Lizenz-Hinweis erhalten bleiben.

Im Sinne der offenen und freien Entwicklung würde ich jedoch begrüßen, wenn die Erweiterung ebenfalls ihren Weg in die Open Source Community findet, selbst, wenn sie kommerziell verwendet wird.

Und ganz unabhängig davon würde ich mich sehr darüber freuen, wenn ich mehr Details über ihr Projekt erfahre.

Daniel

17.02.2019 18:28


Hallo,
ich bin das Tutorial hier soweit Schritt für Schritt durchlaufen. Die try.py gibt auch entsprechende Werte aus. Allerdings hakt es im letzten Schritt.
opt/raumklima/src/start_save_rs500_to_redis.sh
gibt folgende Meldung aus
Traceback (most recent call last):
File "./save_rs500_to_redis.py", line 5, in <module>
from rs5002redis.saver import save_data_to_redis
File "/opt/raumklima/src/rs5002redis/saver.py", line 3, in <module>
from redis import StrictRedis, RedisError
ImportError: No module named 'redis'

redis-cli -n 3 get rs500_c1_temp gibt (nil) aus.

Wo könnte es hängen?

Jürgen Edelbluth Autor

17.02.2019 18:28


Das Skript start_save_rs500_to_redis.sh aktiviert ein Python Virtual Environment, und in diesem scheint das Modul "Redis" zu fehlen. Ich könnte mir also folgende Dinge vorstellen:

  1. Das Virtual Environment existiert nicht unter (vom Skript aus gesehen) ../venv, dann bitte nochmal den Schritt unter "Redis befüttern" durcharbeiten.
  2. Irgendwie hat es das Virtual Environment nicht geschafft, dass Redis-Modul zu installieren. Dann bitte das Virtual Environment zunächst aktivieren (. ../venv/bin/activate - dabei auf die Leerstelle nach dem ersten Punkt achten!) und Redis nachinstallieren: "pip install redis". Dabei auf Fehlermeldungen achten, vielleicht fehlt noch etwas anderes.

Ich hoffe, dass hilft schonmal weiter. Wenn nicht, bitte gerne einen Frage unter https://github.com/juergen-rocks/raumklima/issues anlegen.

MaVo

26.08.2018 14:53


Sehr gute Basis-Doku.
Habe aufgrund der Informationen eine GUI mit Speicherung von Temp und Feuchte in C++ schreiben können. Die geplante Erweiterung ist, dass das Programm sich per Sprache meldet, wenn bestimmte Events eintreten. Z.B. wann ein Fenster zu öffnen oder zu schließen ist um in der gegenwärtigen heißen Zeit die Haus-Innentemperaturen niedrig zu halten.
Ich hoffe auf weitere Protokollinformationen um ggfs. auch die intern gespeicherten csv-Dateien auslesen zu können. Dann kann ich mir das dauerhafte Loggen mit dem PC sparen.

GEKU

14.03.2018 09:47


Sehr gute Seite! Prima analysiert und aufbereitet.

0xff 0xee 0x26 ==> 0xffee ist vom Typ unsigned short

printf("%d", 0xffee); ==> 65518
printf("%d",(unsigned short)0xffee); ==> -18


Copyright © 2024, juergen.rocks.