Das Projekt realisiert die Fernabfrage der ELV Raumklimastation RS500 über SSH Der Code ist in C geschrieben. Die Klimastation RS500 ist über USB an einem Raspbery Pi angeschlossen. Die 8 Sensoren können über einen SSH Client (z.B. Putty, Bild1) abgefragt werden. Auch über das "APP Raspberry SSH" kann vom Smartphon aus die Klimastation abgefragt werden (siehe Bild 2). Für jeden der Sensoren kann eine individueller Text vergeben werden. Das Codebeispiel kann auf eigene Verantwortung genutzt, aber auch für eigene Projekte oder Erweiterungen verwendet werden. https://www.elv.de/elv-raumklimastation-rs500-inkl-5-sensoren-messwertespeicher-und-pc-auswertesoftware.html gutes Gelingen!
Das Bild https://www.mikrocontroller.net/attachment/416903/Raspberry_SSH.jpg stammt von der Pythonversion. Unter der C-Version erfolgt der Aufruf mit sudo ,/ rk ohne py.
Will ich wirklich wissen warum du rootrechte brauchst um mit einem usb Gerät zu reden? :-\
wtf?! schrieb: > Will ich wirklich wissen warum du rootrechte brauchst um mit einem > usb > Gerät zu reden? :-\ Weil die HID Library auf die Hardware zugreift. Versuche ein einem Programm auf eine IO-Pin zuzugreifen. Ohne Root Rechte wird es nicht gehen. Aber man kein eine eigenen User (z.B. rk) angelegen, der nur diese Programm ausführen darf und sonst gar nichts. In der Datei /etc/sudoers einfügen: # User privilege specification root ALL=(ALL:ALL) ALL rk ALL=(ALL) NOPASSWD: /home/rk/rk siehe auch: https://de.wikipedia.org/wiki/Sudo ACHTUNG : fehlerhafte Einträge könnten das System zerstören ! Besser ist es das Programm sudoedit zu benutzen. Dieses überprüft die Datei sudors auf Fehler, bevor sie gespeichert werden kann.
GEKU schrieb: > Aber man kein eine eigenen User (z.B. rk) angelegen, der nur diese > Programm ausführen darf und sonst gar nichts ERGÄNZUNG: In /home/rk nur die ausführende Datei rk kopieren. Es kann im APP Raspberry SSH nur mehr sudo ./rk aufgerufen werden.
GEKU schrieb: > wtf?! schrieb: >> Will ich wirklich wissen warum du rootrechte brauchst um mit einem >> usb >> Gerät zu reden? :-\ > > Weil die HID Library auf die Hardware zugreift. > > Versuche ein einem Programm auf eine IO-Pin zuzugreifen. Ohne Root > Rechte wird es nicht gehen. Das macht man über udev-Regeln. Im Prinzip so: Beitrag "Linux USB-Rechte verändern(USBProg)"
Mario M. schrieb: > Das macht man über udev-Regeln. Im Prinzip so: Beitrag "Linux USB-Rechte > verändern(USBProg)" Danke für den Tipp! Kann dann jedes Programm mit USB-Griff ohne SU Rechte aufgerufen werden?
user rk mit Homeverzeichnis anlegen Programm rk ins Homeverzeichnis kopieren "sudo visodu" aufrufen. Zeile "rk ALL=(ALL) NOPASSWD: /home/rk/rk" hinzufügen. Das Programm kann jetzt mit "sudo ./rk" ohne Eingabe eines Passwortes aufgerufen werden.
GEKU schrieb: > Kann dann jedes Programm mit USB-Griff ohne SU Rechte aufgerufen > werden? Ja. Der Benutzer, unter dem das Programm ausgeführt wird, muss in der entsprechenden Gruppe sein und die Gruppenrechte des USB-Geräts müssen lesen und schreiben zulassen.
Mario M. schrieb: > Der Benutzer, unter dem das Programm ausgeführt wird, muss in der > entsprechenden Gruppe sein und die Gruppenrechte des USB-Geräts müssen > lesen und schreiben zulassen Danke! Werde ich ausprobieren. Ich habe gesehen, dass die Vendor ID und die Produkt ID angegeben werden muss , also kann ich davon ausgehen, dass sich die Freischaltung nur auf die Klimazentrale bezieht. Danke, da habe ich wieder etwas dazu gelernt.
Nö, muss nicht. Aber warum mehr freigeben als nötig.
Mario M. schrieb: > Nö, muss nicht. Aber warum mehr freigeben als nötig. Will ich aus Gründen der Sicherheit nicht. Passt so.
1 | #include <stdio.h> |
2 | #include <wchar.h> |
3 | #include <string.h> |
4 | #include <stdlib.h> |
5 | #include "hidapi.h" |
6 | #include <unistd.h> |
7 | |
8 | int main(int argc, char* argv[]) |
9 | {
|
10 | int res; |
11 | unsigned char buf[256]; |
12 | hid_device *handle; |
13 | int i; |
14 | char *pMo[8]; |
15 | |
16 | pMo[0]=(char *)"Balkonzimmer:"; |
17 | pMo[1]=(char *)"Vordach:"; |
18 | pMo[2]=(char *)"Schlafzimmer:"; |
19 | pMo[3]=(char *)"Wohnzimmer:"; |
20 | pMo[4]=(char *)"Bad:\t"; |
21 | pMo[5]=(char *)"WC:\t"; |
22 | pMo[6]=(char *)"Schuppen:"; |
23 | pMo[7]=(char *)""; |
24 | |
25 | if (hid_init()) return -1; |
26 | |
27 | handle = hid_open(0x0483, 0x5750, NULL); |
28 | |
29 | if (!handle) { |
30 | printf("unable to open device\n"); |
31 | return 1; |
32 | }
|
33 | |
34 | hid_set_nonblocking(handle, 1); |
35 | |
36 | memset(buf,0,sizeof(buf)); |
37 | |
38 | buf[0] = 0x7b; |
39 | buf[1] = 0x03; |
40 | buf[2] = 0x40; |
41 | buf[3] = 0x7d; |
42 | |
43 | res = hid_write(handle, buf, 17); |
44 | |
45 | if (res < 0) { |
46 | printf("Unable to write()\n"); |
47 | printf("Error: %ls\n", hid_error(handle)); |
48 | }
|
49 | |
50 | res = 0; |
51 | |
52 | while (res == 0) { |
53 | res = hid_read(handle, buf, sizeof(buf)); |
54 | // if (res == 0)
|
55 | // printf("waiting...\n");
|
56 | if (res < 0) |
57 | printf("Unable to read()\n"); |
58 | usleep(1000*1000); |
59 | }
|
60 | |
61 | for (i=0;i<8;i++) |
62 | {
|
63 | if (strlen(pMo[i])) printf("\r\n%s\t\t\t%d.%d Grad C\t\t%d\%\r\n",pMo[i],(256*buf[1+3*i]+buf[2+3*i])/10,(256*buf[1+3*i]+buf[2+3*i])%10,buf[3+3*i]); |
64 | }
|
65 | |
66 | printf("\r\n"); |
67 | |
68 | hid_close(handle); |
69 | |
70 | /* Free static HIDAPI objects. */
|
71 | hid_exit(); |
72 | |
73 | return 0; |
74 | }
|
Zum Klima-Server kompatible Version. Beitrag "RPI sendet TELEGRAM Messages von RS500 an Smartphones"
Sollte der Fehler "error while loading shared libraries: libhidapi-libusb.so.0: cannot open shared object file: No such file or directory" auftreten, dann fehlt libhidapi-libusb0 sudo apt install libhidapi-libusb0
neue Funktionen in 2v0 : - steigende Temperaturen und/oder fallende Temperaturen können mit Shell-Scripts, sowie mit in C und/oder Python geschriebene Programme gekoppelt werden, um z.B. GPIO's des Raspberry PI zu setzten oder rückzusetzen (siehe Beispiel heizung.py) - steigende und fallende Temperaturen können simuliert werden, um die Steuerungen zu überprüfen (siehe klima-server.ini Section DEBUG) - Schlüssel für Temperaturen können nach tu bzw, td beliebig bezeichnet werden (z.B. tu01, tua, td1, td_a), sowie mit ';' (z.B. ;tu05) auskommentiert werden. Die Schlüssel sollten nach aufsteigenden Temperaturen sortiert werden. _Beispiel für aktivieren der Heizung wenn Temperatur auf 20 Grad Celsius gefallen ist_ : td22 = 20|heizung.py ein _Beispiel für deaktivieren der Heizung wenn Temperatur auf 25 Grad Celsius gestiegen ist_ : tu27 = 25|heizung.py aus Simulation : [DEBUG] sensor = 1 temp_min = 20 temp_max = 30 temp_diff = -0.3 ;(0.. schaltet Simulation aus, - simuliert fallende Temperaturen) Temperaturen können mit einer Kommastelle '.' definiert werden. (Beispiel tu5 = 21.5)
Leider hat sich ein Fehler eingeschlichen, daher 2v1. Bitte 2v0 nicht verwenden!
Hat jemand Erfahrung mit der dnt Funk-Raumklimastation RoomLogg PRO ? Ist diese kompatible zur RS500?
Gerald K. schrieb: > Ist diese kompatible zur RS500? ja Beitrag "Fernabfrage DNT Funk-Raumklimastation RoomLogg PRO"
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.