Beiträge von colaholiker

    Naja, der komplette Code... dann würde ich den wohl als Datei reinstellen (müssen).

    Aber ich habe ja die ganze Unterroutine "getTemperatures" gepostet. Für meine Frage zu IF halte ich das so für übersichtlicher.

    Mal sehen was ich mir als Nächstes vorknöpfe. Die geloggten Daten auf der SD-Karte möchte ich auslesen ohne die Speicherkarte zu entfernen. Ist ein Punkt.

    Hans

    Habe die Lösung gefunden:

    Code
    client.subscribe(Wc1Topic, [](const String& topic, const String& payload) {
        Serial.println(topic + ": " + payload);
        });

    Dabei ist "Wc1Topic" meine Variable mit der Wildcard1. Das "topic" ist dann das wonach ich gesucht hatte.

    Zum Test laufen bei mir 2 Wildcards auf diesem SD-Logger.

    Tja, man muß eben die Bibliotheksbeschreibung bis ganz zu Ende lesen...

    Hans

    Hi Leute,

    Ich lasse Topics empfangen (subscribe) und diese mit den zugehörigen Daten (payload) auf eine SD-Karte speichern.

    Das klappt prima.

    Aber weil es langsam immer mehr Sender (publish) gibt hab ich es mit Wildcards probiert, etwa so:

    client.subscribe("haus/etage1/+/sensor", payload);

    Durch das "+" bekomme ich alle Zimmer der 1.Etage.

    Auch das klappt.

    Aber! Wie kann ich jetzt z.B.: "haus/etage1/flur/sensor" oder "haus/etage1/küche/sensor" aus dem Topic bekommen? Ich kann ja nicht "haus/etage1/+/sensor" auf die SD-Karte speichern, das wäre ja sinnlos!

    Leider habe ich zu der Sache nirgends was gefunden, aber der Logik nach müßte ich doch das "echte" Topic bekommen können?

    TIA,

    Hans

    für ein Projekt habe ich mal mehrere Dutzend DS18B20 mit einem Blockkalibrator auf ihre Genauigkeit überprüft.

    Also Pärchen ausgesucht, so etwa. Na soviele hab ich nicht aber hab ja mit meinen Korrekturen doch etwas erreicht. So 0,3° (oder K) ist doch schon was. Ich möchte nur 3 Etagen in meinem Kühlschrank messen, das ist schon alles.

    Mir ist dies aufgefallen:

    Ehm...

    1) aha, 2) richtig.

    3) er läuft gerade. Such...

    Code
    String dataMessage;

    Das ist eine globale Variable die in die oben gepostete Routine kommt. Dann werden hier die Daten reingeladen und das Ganze wird ein MQTT-Payload.

    Ah, woanders steht dann das:

    Code
    dataMessage = String(dayStamp) + "," +
                  String(timeStamp) +
                  dataMessage + "\r\n";

    Wie es mit den einzelnen Datentypen funktioniert kann ich Dir nicht beantworten, nur daß es nach vielen Versuchen jetzt klappt. Die Daten landen beim Empfänger auf einer SD-Karte. Die dort abzugreifen ohne die Karte auszubauen ist ein Plan für später. Interessant finde ich auch daß der Code für eine fast beliebige Zahl Sensoren paßt. Ich glaube die Payload-Größe (128bytes?) ist die erste Grenze.

    4) Das mit der IF- Verschachtelung geht ja jetzt. Aber zu switch werde ich mal nachlesen, hab ja noch einiges vor.

    5,6) Du beziehst Dich auf den oberen Code, der aus Beispielen im Netz besteht. Wenn der original läuft baue ich ihn so zurecht wie ich ihn brauche mit der Try/Error Methode. Mir fehlt noch zuviel Wissen zu dem Thema sodaß ich selbst bei IF-Abfragen wo gegenlaufe.

    Aber das Thema ist spannend und ich lerne schon langsam dazu.

    Hans

    hyle:

    Klammer vergessen, ok. Hatte ich nur fix aus'm Kopf hingeschrieben.

    Sieht jetzt so aus:

    Code
    if (i == 1){
    //-- Wert per Hand
    tempC = (tempC + 0.81);
    }
    if (i == 2){
    //-- Wert per Hand
    tempC = (tempC + 0.62);
    }

    ...und läuft!!

    Das heißt, der weitere Code wird inzwischen ausgeführt, was meine eigentliche Frage beantwortet.

    Andreas:

    Meinst Du mit Sensor-ID die Device-Adresse?

    Du hast -dann- zwar recht mit der Sensor-ID, aber wenn ein Sensor ausfällt muß ich eh was unternehmen. Man kann durch Deinen Vorschlag bei Ausfall des Sensors 0 evtl. wieder auf Grundwerte umschalten.

    Aber: das bläst mir den Code zu sehr auf, und das bei Sensoren die eine Ungenauigkeit von immerhin +/-0,5°C haben. Das ist ein Grad!

    Jetzt wo das mit dem ausgleichen läuft habe ich sehen müssen, daß die 1° Abweichungen im laufenden Betrieb auftreten (also keine generelle Konstruktionsabweichung sind). Daher hilft mein Offset nicht komplett. Immerhin komme ich auf Unterschiede von ca. 0,3°C (Sensoren dicht zusammen auf'm Steckbrett).

    Zitat

    Du brauchst doch bloß für jede Sensor-ID einen Offset zu definieren und direkt bei der Messung addieren / subtrahieren. ==> Lässt sich recherchieren.


    float tempC = sensors.getTempC(tempDeviceAddress);

    ist doch die Messung??

    dann kommt ja schon das IF.

    Müßte nur nach Deinem Vorschlag

    IF (DeviceAddress = "28863975D0013CD8"...

    heißen.

    Naja. Freu. Es läuft. Mein anderes Problem, die 2 Stellen hinter dem Komma (23.47°C) wegbekommen, löse ich bei der Datenauswertung (Excel). Ha! Geben die Sensoren hundertstel Grad aus bei 1° Schwankung. Spielzeug!

    Ich mache mir jetzt mal Gedanken wie ein Sensorausfall bemerkt werden kann. Immerhim wollte ich die Sensorzahl variabel haben (beim Start).

    Danke Euch beiden:-)

    Hans

    Hi Leute,

    Ich, C++ ca.1%.

    In meinem Code werden die Werte von 3 Temperatursensoren DS18B20 abgefagt.

    Da die im selben Raum sind, möchte ich die Bauelemente- Differenzen ausgleichen.

    Sensor 0 soll der Richtwert sein.

    Erstmal der laufende Code (abgeleitet aus Beisp. im Netz):

    Zwischen float tempC... und dataMessage... (//xyz) möchte ich (für die Sensoren 1 und 2) IF- Anweisungen setzen, etwa so:

    Code
    if (i == 1){
        tempC = tempC -0.4)
        }
    if (i == 2){
        tempC = tempC -0.2)
    }

    So daß ich die Sensoren 1 und 2 an den Sensor 0 händisch anpassen kann. Nicht schick, aber so daß ich es kapiere.

    -ähem, "==" und "=" ist doch so ok?

    Mein Problem ist, daß der Code unter den IF- Anweisungen nicht mehr ausgeführt wird, ab "dataMessage =...".

    Muß ich alle unteren Anweisungen in jede IF- Abfrage extra setzen (bzw. eine Unterroutine daraus machen und jedesmal anspringen)?

    Dann müßte ich ja auch für Sensor 0 was tun, der ja sonst garnicht beachtet wird?

    Sorry für die Laienfrage. Zu IF erschlägt einen das Netz, aber verschachtelte Anweisungen... gibt es ja vielleicht nicht in C.

    -übrigens, mit IF...ELSE ist das genauso.

    Hans

    Ok, vielen Dank!

    Der Pi4 läuft jetzt mit 2,4GHz, und die MQTT-Übertragung ist bisher nicht abgebrochen.

    Ich mußte nicht mal was verstellen unter der LAN-Verbindung. Das war wohl nur wegen dem Abstöpseln der Spannung so. Warum vorher sudo reboot über ssh nicht genauso gewirkt hat...

    Jetzt kann ich mich weiter mit subscribe und publish beschäftigen:-)

    Hans

    Hi Leute,

    wie der Betreff sagt versuche ich einen Pi4 mit einem externen Wifi-Stick zu betreiben.

    [Betriebssystem ist wohl dieses Bullseye light)

    Ich habe im Netz das gefunden:

    sudo nano /boot/config.txt

    ay=pi3-disable-wifi

    das meint wohl einen Pi3? Aber mein Pi4 läuft nach Reboot weiter mit internem Wifi, auch wenn ich

    ay=pi4-disable-wifi

    eintrage.

    Hintergrund der ganzen Sache ist, daß der Pi4 auf 5GHz funkt, und als MQTT-Broker so wohl nicht mit den 2,4GHz Clients zusammen kommt.

    Das deswegen, weil auf meinem Windows-Rechner der MQTT-Explorer läuft, und der sich halt per 5GHz verbindet.

    Beim Test bekomme ich kurz eine MQTT- Verbindung, die gleich darauf zusammenbricht. Evtl. empfängt der Pi den Client erst auf 2,4GHz und wechselt dann auf die 5GHz, ist aber nur eine Vermutung. Mein Wissen wegen der 5GHz hab ich von der Fritzbox, die den (zu) kurzen 2,4GHz Betrieb nicht anzeigt.

    Ich habe nichts gefunden das am Pi4 nur die 5GHz einzeln abschaltet, daher das mit dem USB-Wifi.

    Wie kriege ich das hin daß der Pi4 den Wifi-Stick nimmt?

    Hans (Ahnung von Linux-Sachen 1v10)

    Hi Chris,

    bei der Suche zu meinem Problem hab ich Deinen Thread hier gefunden. Ich betreibe mein Octo-Pi seit ca. 3/4 Jahr und bekomme auch seit etlicher Zeit Meldungen wg Unterspannung. Zuletzt kam der Kamerastream nicht mehr zustande.

    Am Pi hatte ich dann schwankend 4,3...4,8V gemessen.

    Die Spannung geht von einem 5V-Netzteil zu einer USB-C Buchse am Gehäuse, per kurzem Draht mit so Breadboard-Steckern auf eine 5V-Verteiler-Schiene, weiter mit so'nen Steckern an einen USB-Stecker (Micro-USB??? für den Pi3) an eben diesen Pi3 (testweise auch Pi4 probiert).

    Ich habe die Spannungsverluste Stück für Stück an den Verbindungen gemessen. Am Netzteil-Ausgang (testweise das Original-Pi4-Netzteil) liegen immer 5,2V an. Aber schon vor (=auf) den ersten Breadboard- Steckern sind es 4,8V!

    Bei einer Last von rund 170mA durch den Pi [hey die in og. Beiträgen genannten 2,5A sind der maxStrom!].

    Das heißt, es gibt schon Verluste an der ersten USB-C Buchse nach dem Netzteil!

    Das sollte Dir evtl. Hinweise geben, Deine Schaltung entspr. durchzumessen. Mir bleibt wohl weiter nichts übrig, als das Netzteil oldschool direkt in den Pi zu stöpseln und die anderen 5V-Verbraucher statt vor dem Pi

    (auf der 5V-Schiene) an dessen GIPO-Leiste zu hängen. Damit sollte ich nur ca. 0,2V weniger auf dem Pi haben als das Netzteil liefert.

    Leider muß ich daher ein neues Gehäuse drucken:-(

    Hans

    VNC wird stimmen. Bei Win10 steht "Remotedesktopverbindung".

    Der Knackpunkt ist, daß ich ein Image mit Grundeinstellungen fertig da habe und nicht jedes Mal mit dem Neueinrichten anfange.

    Und Daten mit Copy/Paste verschieben liegt dem Windows- User halt im Blut. Auch wenn es noch Einfacheres geben "sollte" ;)

    Für 50 Meter ist die beste Wahl wirklich ein normaler Funksender/ Empfänger ohne Pi. Da gibt es genügend Sachen zu kaufen, wobei die Sender auch gleich passende Gehäuse haben.

    Ich empfehle Dir 868MHz-Geräte.

    Wenn der Empfänger ein Relais ansteuert (oder mehrere bei >1 Kanal) kannst Du mit dessen Kontakt jede andere Spannung weiterschalten.

    Sogar die GIPOs eines Raspberrys ansteuern, um hier mal zum Thema zu kommen. So würdest Du Deinen "Tor-öffnen-Befehl", oder einen Zweiten [Kanal] (Frau wecken?) z.B. ins WLAN bekommen zur Weiterverarbeitung.

    Die Stromversorgung des Empfängers läßt sich gut mit Step-Up- oder Step-Down- Modulen anpassen (Suchmaschine: "LM2596s dc-dc").

    Hans

    und noch nicht so mit der Materie Raspberry Pi vertraut

    Geht mir ebenso und ich arbeite auch von W10 aus. Eine mit einem Pi- Image versehene SD-Karte mache ich über die Datenträgerverwaltung wieder platt.

    Aber das ist ja nicht Dein Problem, sondern Daten auf die SD-Card zu bekommen.

    Ich gehe so vor:

    -Raspian Image auf die SD-Karte mit Etcher oder Disk-Image.

    -leere Datei "ssh" auf die SD-Karte bringen.

    -Karte in den Pi, LAN und Spannung dran

    -Im Router die IP des Pi erfahren und ggf. eine feste IP zuweisen

    -mit Putty den Pi aufrufen, konfigurieren und VPN einrichten

    (du mußt Win10 auch auf VPN einrichten --> Toturials)

    -Putty beenden und

    -mit VPN von Windows auf den Pi gelangen

    -WLAN einrichten.

    Dieses Image speichere ich wieder ab (Etcher kann das wohl nicht, deshalb Disk-Imager)

    Ergebnis: ich kann Dateien mit Copy (Win10) und Paste (Pi) übertragen.

    Das klingt erstmal umständlich, aber mit dem einmal abgespeicherten Image ist die Sache schnell am laufen.

    Ich möchte noch drauf hinweisen, in der Konfiguration (sudo config) den erweiterten Speicher zu aktivieren.

    HTH, Hans

    Hi Sascha,

    gib mal bei Conrad, Reichelt usw. "AQY" oder "AQW" ein. Das sind Halbleiter- Relais (von Panasonic) die als "Spule" eine Art LED drin haben. Die dürfte mit Vorwiderstand evtl. direkt am GIPO anschließbar sein. Strom und Vorwiderstand lassen sich mit Online-Rechnern ermitteln. Bitte erst ohne den Pi testen: den Widerstand so vergrößern, daß das Halbleiterrelais noch sicher anzieht.

    Der "Kontakt" ist optisch getrennt vom Pi und kann verschiedene, kleine Leistungen schalten (bei mir 60V 0,1A).

    Die Relais sind im DIL- Gehäuse mit 4 Pins (Einzelrelais) und passen bestimmt in ein Pi- Gehäuse.

    Auch umgekehrt, mit Kontakt hin auf die GIPO-Leiste, ist das wegen der Entkopplung eine interessante Sache.

    Ich hab erst letztens erfahren, daß es sogar Öffner von den Dingern gibt...

    Hans

    > Ich hatte extra eine Anleitung verlinkt wie man Code hier im Forum bitte postet

    Das lerne ich auch noch (da gings um PHP-Code, ist PHP = HTML?), und okee, werd meinen letzten Beitrag gleich editieren.

    > Such mal in deinem Code nach "refresh" und bemüh dann mal google

    Tatsache! Das wird wohl der störende Punkt sein! Das ist das erste was ich mit HTML (oder PHP?) gemacht habe. Dacht 'fängst erstmal ganz einfach an'.

    Na denn kann ich ja weitermachen :)

    Hans

    Hallo Community, und mein erster Beitrag hier...

    Als Anfänger mit dem Raspi, Linux, PHP und allem anderen wird das (logisch) ein Fragebeitrag.

    Ich hab's geschafft dem RPi eine statische IP zu geben und diese Funksteckdosen über eine 10-Zeilen- HTML- Seite im Firefox zu steuern.
    Eine angeschlossene PiCam macht auch Fotos, die ich leider noch nicht auf die Seite bekomme. Videofunktion klappt noch nicht.

    Soweit mein Stand bisher.

    Jetzt erstmal eine "kleine" Frage wegen der HTML-Seite:

    Die steht hier z.Zt. nebenan auf einem anderen TAB, und aktualisiert sich ständig so alle 3-5 sec. (verbindet sich neu).
    Warum das? Wie kann ich das abstellen?
    Ich glaube, die paar Zeilen Code waren HTML5...

    TIA,

    Hans