Posts by Robby

    Hallo Tell,


    suche schon gestern, den ganzen Tag, hinter den Fehler her. An der Berechtigung habe ich überhaupt nicht dran gedacht. Da ich vor ein paar Wochen schon mal darüber gestolpert bin. Und die Apache2.service entsprechend geändert habe.

    Das durch das Update die Änderung zurück genommen wurde, daran habe ich überhaupt nicht mit gerechnet.

    Herzlichen Dank für deine schnelle Hilfe. Und ich hoffe das ich nicht ein 3. mal darüber stolpere.

    Wollte meine Sprinkleranlage etwas erweitern. Dazu habe ich vorher das System aktualisiert mit "Update". Der Raspberry hat ca. 1 Jahr Fehlerfrei gelaufen. In der Zeit hat er auch kein Update bekommen.

    Mir ist aufgefallen, dass das Update sehr umfangreich war. Aber nach dem Update läuft die Webseite nicht mehr.


    Bekomme die Fehlermeldung: "Uncaught (in promise) SyntaxError: JSON.parse: unexpected character at line 4 column 37 of the JSON data"


    Ich konnte den Fehler in einen Teil vom Javascript lokalisieren. Nur den Fehler direkt kann ich nicht finden. Denn im Skript hat sich nicht geändert.


    In diesen Skript wird der aktuelle Zustand abgefragt. Und aus dem /temp Verzeichnis wird die dauer der Beregnung ausgelesen und angezeigt. Der Wert ändert sich jede Minute, so das man im Button die aktuelle Beregnungszeit ablesen kann.

    Wenn ich diese Datei auf der Konsole direkt starte, werden hier dir aktuellen Daten korrekt angezeigt.


    Hier habe ich das Problem:

    Die Button werden so dargestellt als wenn die "CSS" nicht greift. Aber wenn ich die entsprechenden Button betätige, wird die Funktionen ausgeführt.

    Die Funktionen

    Code
    function updateElementAlleOhne( id, ohne )
    
    function updateElementAlleMit( id, mit )

    die gehen, dort wird auch der Button richtig dargestellt.


    Ich verstehe nicht warum es nach dem Update nicht mehr geht.

    Kann mir einer sagen, woran das liegen kann?

    hyle

    da hast du vollkommen Recht. Wie gesagt die Geschichte hat keine Verbindung nach draußen bleibt nur innerhalb des Hauses.

    Aber das ist bei mir zur gewohnheit geworden, denn ich habe noch etliche Sachen die ich steuere, wie Rasensprengung, Fischteich usw.

    Da habe ich einige Daten, die Temporär gespeichert werden müssen und sich laufend ändern. Deswegen das Verzeichnis /temp. Der Grund war um den Speicherchip zu schonen.

    Aber in diesen Fall, habt ihr Recht. Da es nur einmal am Tag geändert wird, kann es somit ruhig auf den Chip abgelegt werden.

    Werde es änden.

    llutz

    Danke für deine Hilfe und Geduld.

    Leider hatte ich nach deine Änderungen wieder das gleiche Problem wie am Anfang

    In der Konsole ging es und über Webbrowser nicht.

    Habe dann versucht im "Apache2.Service" den Wert von Yes auf no direkt geändert. Danach geht es jetzt.


    Trotzdem herzlichen Dank für deine Hilfe.

    Und mit der Sicherheit hast du Recht, aber ich habe von außen kein Zugriff auf mein Raspberry.

    Daher wie du schon sagst, in das Risiko verträglich.

    OK dann habe ich das falsch interpretiert.

    Nur weiß ich jetzt nicht wie ich das ändern muss. Denn so tief stecke ich in Linux nicht drin.

    Und ich möchte mir nicht unbedingt das System abschießen.

    Ich währe dir sehr Dankbar wenn du mir sagen könntest was ich wo genau ändern muss.

    Oder reicht das aus wenn ich das true no eintrage?

    Daran scheint es nicht zu liegen, die sieht bei mir so aus:


    [Service]

    Type=forking

    Environment=APACHE_STARTED_BY_SYSTEMD=true

    ExecStart=/usr/sbin/apachectl start

    ExecStop=/usr/sbin/apachectl stop

    ExecReload=/usr/sbin/apachectl graceful

    PrivateTmp=true

    Restart=on-abort

    Zu früh gefreut,


    ein Problem habe ich trotzdem noch. Und zwar werden die Daten in /tmp/Sonne.dat geschrieben, da die Abfrage über Phyton läuft.

    Nur komme ich über php nicht in das Verzeichnis /tmp.

    Habe das beim anderen Rasberry aber am laufen, hatte damals auch lange suchen müssen. Habe geglaubt mir das genau notiert zu haben aber leider habe ich das nicht. Habe mir nur unter visudo für www-data nopassword notiert. Aber da war noch etwas damit das geht.

    Könnt ihr mir danoch einmal helfen, wie ich von php auf das Verzeichnis /tmp zugreifen kann?

    @IIutz

    Ja die Berechtigungen passen, alle stehen auf www-data


    aber jetzt verstehe ich gar nichts mehr

    habe mal ein test gemacht in der Index.php

    PHP
            <div id="Footer_Sonne">
    <?php
    echo file_get_contents('Sonne.dat');
    ?>
            </div>

    Habe die include Zeile rausgenommen und dafür den Skript an der Stelle der include Zeile gesetzt. Jetzt wird mir die Uhrzeit auch angezeigt.

    Nur verstehe ich jetzt nicht warum wenn ich die in einer eigene Datei schreibe und die include das es dann nicht geht


    hyle

    um das alles auszuschließen habe ich die Sonne.dat im gleichen Verzeichnis gepackt.

    Im Verzeichns /footer und jetzt wo es direkt in der Index.php steht auch unter /html

    Für meine Haussteuerung habe ich einen Raspberry mit Monitor wo ich den aktuellen Zustand sehen kann. Über das Display kann ich auch drekt steuern.

    Das läuft auch alles sehr gut. Nun habe ich nur ein Problem. Wollte den Monitor um die Zeiten von Sonnenauf- und Untergang anzeigen lassen.

    Dazu hole ich die Daten vom Wetterdienst. Damit steuere ich auch zb. die Rollors.

    Die Daten befinden sich im gleichen Verzeichnis unter "Sonne.dat"


    Die Indexdatei des Monitor sieht so aus:

    Die Datei Footer_Sonne.php soll den Skript für die Anzeige enthalten.


    Sonne.dat:

    hier steht die Sonnenaufgangszeit, die jede Nacht aktualisiert wird.

    Code
    05:12 Uhr

    Footer_Sonne.php:

    hier soll das Skript für die Anzeige drin stehen

    Code
    $Anzeige = file_get_contents("Sonne.dat");
    echo $Anzeige;

    ich habe es mit fopen, file, file_get_contents, probiert, aber bekomme es nicht hin.

    Habe die Datei wie hier angegeben nur auf die eine Zeile vereinfacht.

    Rufe ich die Datei über der Konsole auf, bekomme ich die Uhrzeit angezeigt. Ist egal welche Funktion ich nehme.

    Aber über den Browser wenn ich die index.php aufrufe wird mir die Uhrzeit nicht angezeigt.

    Wenn ich die Variable $Anzeige direkt einen Wert zuweise, erscheint der Wert auch im Browser.


    Habe schon Google stundenlang durchwühlt alles ausprobiert, aber alles funktioniert nicht.

    Weiß von euch einer, wo der Fehler liegen könnte?


    Wenn ich die Datei "Footer_Sonne.php" über der Konsole angezeigt bekomme, dann bekomme ich die Uhrzeit angezeigt.

    Rasp-Berlin

    Danke für deine Infos, aber so kompliziert war der Fehler nicht. Wie ich vermutete lag es an den Aufruf des Script.

    hyle

    Danke für den Code, das war genau das ich brauchte. Jetzt läuft alles so wie ich es haben wollte.


    Ich weiß das ich es auch etwas anders hätte machen können, aber dazu hätte ich meine ganze Web Seite umändern müssen und das wollte ich vermeiden. Da die Steuerung über Web schon einige Zeit läuft und dies hier als Ergänzung vorgesehen war.

    Erst einmal Danke für eure schnelle Antwort.

    Das Gefühl hatte ich auch schon das es als komplettes File aufgerufen wird.


    so kann ich das Script aufrufen

    Code
    sudo php /var/www/html/rollor/Rollor.php

    aber so kommt auch auf der Konsole die Fehlermeldung

    Code
    sudo php /var/www/html/rollor/Rollor.php?alle=1

    Das Script "Sonne_Aufgang_Vergleich.sh" wird je minute über crontab aufgerufen

    In meiner Webseite habe ich eine PHP Datei die aufgerufen wird und über $GET eine Variable übertragen wird.

    Darin werden alle Rollor nacheinander hoch oder runter gefahren, je nachdem welchen Wert ich über $GET mitgebe.


    Jetzt möchte ich das erweiten, sodas sie bei Sonnenaufgang bez Sonnenuntergang entsprechend öffnen oder schließen.


    Mein Problem liegt jetzt in der Datei "Sonne_Aufgang_Vergleich.sh"

    wo ich die entsprechende Rollor.php Script aufrufe.


    Sonne_Aufgang_Vergleich.sh

    Nur so bekomme ich die Fehlermeldung:


    Could not open input file: /var/www/html/rollor/Rollor.php?alle=1

    Zur Info mit alle= 1 bez. 2 wird festgelegt ob die Rollor sich öffnen oder schließen.


    Kann mir einer helfen, wie ich die Zeile ändern muss? Habe schon stundenlang gesucht, aber keine Lösung finden können.

    Hallo Tell,


    habe es gemacht, aber da wurde kein Fehler angezeigt.

    Habe das Skript auch neu geschrieben es blieb das gleiche. Habe dann den Skript in das erste mit reingesetzt. So das ich nur ein Skript habe und da hat es funktioniert.

    Habe es so auch belassen.

    Habe daraufhin den rest fertig gemacht, die mir noch fehlten. Da trat das Problem nicht auf.

    Bin jetzt mit den Monitor fertig so das ich es im Betrieb nehmen kann.


    Noch mals herzlichen Dank für deine Unterstützung.

    Hallo Tell,

    habe noch ein kleines Problem, mit ein Skript. Und das kann ich mir nicht erklären.

    Eventuell fällt dir etwas auf, was ich falsch gemacht habe. Ich bin schon 2 Tage an suchen, finde aber den Fehler nicht.

    Habe im Raspberry (Keller) 3 Skripte an laufen, die auch funktionieren.

    1. Rollor.php

    2. Getstate.php

    3.GetstateAlle.php


    Das gleiche System läuft auch auf einen Raspberry (Garten) womit ich die Sprinkleranlage mit Steuere. Das geht sehr gut und vom Raspberry (Monitor) kann ich auch alles überwachen und steuern.


    Das gleiche habe ich auch für den Keller, nur entsprechend für die Rollorsteuerung geändert.

    Wenn ich auf die Webseite von Keller gehe, funktioniert alles sauber.


    Wenn ich jetzt aber vom Monitor die Rollor steuern möchte, kann ich nur die Rollor einzeln rauf und runter fahren.

    Die 2 Button für alle rauf bez runter gehen nicht.


    die Rollor.php

    Das Skript ist vom Keller und Monitor gleich, nur der link ist entsprechend angepaßt.

    Habe erst den Verdacht gehabt das es an GetstateAlle.php liegt, aber kann nicht sein. Habe mir eine neue Datei geschrieben womit ich nur den GPIO Port direkt anspreche. Sogar das geht nicht.


    Wenn ich aber die Zeile:

    Code
      <p><input type="button" value="alle öffnen"    onclick="alle(1)"  id="rollAlle01" class="buttonRollorAuf"></p>

    abändere und zwar so:

    Code
      <p><input type="button" value="alle öffnen"    onclick="rollor(90)"  id="rollAlle01" class="buttonRollorAuf"></p>

    Und die Rutine entsprechend in der Getstate.php einbinde, dann funktioniert es.

    Nur mit ein 2. Skript geht es nicht.

    Kann mir das nicht erklären, da ich das gleiche bei der Sprinkler Anlage auch anwende und dort gibt es keine Probleme.

    Hallo Tell,

    anlage läuft auch soweit, nur möchte ich gerne bei den Button die Beschriftung je nach Aktivität ändern.

    Auf der Web Seite des Raspy im Garten sieht es so aus, je nach was betätigt wurde.



    Die Funktionen und Farben das funktioniert schon. Ich habe nur Probleme mit der Beschriftung der Button.

    Wenn du mich dabei noch einmal unterstützen könntest ?

    In der Sprinkler_Timer.php sieht es so aus:

    Code
     echo "{ \"timer1\": $timer1, \"timer2\": $timer2, \"timer3\": $timer3, \"timer4\" : $timer, \"timer5\" : $timer5, \"info1\" : $info1, \"info2\": $info2, \"info3\": $info3, \"info4\": $info4, \"info5\": $info5 }" ;

    Wobei die timer die Zeit in Minuten enthält und info je nach dem "ein, aus, abbruch" annehmen kann. Wie auf die Fotos ersichtlich


    Meine Sprinkler.php sieht so aus:

    Unter "sprinkler_display/Sprinkler_timer.php" ist mir bei einer anderen Anwendung aufgefallen, das ich da nur Zahlen und keine Buchstaben übertragen konnte. Ist das Richtig? Oder mache ich da einen Denkfehler.


    Kannst du mir noch einmal helfen die ich unter "value" die Beschriftung ändern kann.

    Hey Tell,

    ich gebe ja mein bestes, nur habe ich bis jetzt noch nicht mit Java etc. gearbeitet. Dies ist das erste mal das ich damit konfrontiert werde.

    Bis jetzt konnte ich alles mit html und php lösen. Deswegen bin ich dir auch sehr Dankbar das du mir so unterstützt.

    Kannst du mir eine Literatur empfehlen (in Deutsch) mit der ich mich in Java etwas einlesen kann?


    Und würdest du dir mein Skript einmal ansehen, habe es versucht bei mir einzubinden, aber leider nicht mit Erfolg.

    Wäre nett wenn du mir dabei noch einmal unterstützt.


    Hallo Tell,


    habe es soweit in einer Funktion eingebunden. Nur in der Zeile mit "let element" da habe ich noch ein Problem wenn ich mehr als eine Variable einbinde.

    Könntest du mir sagen wie die Zeile lauten muss?

    Endschuldige Tell, habe in dem Monent nicht dran gedacht, das du nicht alle Zusammenhänge kennst.

    Auf der Webseite des Raspberry "Wohnung" sieht es so aus. Der Button wird rot und es kommt der Hinweis "ERROR". Damit weiss ich das die Schaltsteckdose nicht mehr in Betrieb ist oder bei Heizkörper Termostat zb. auch die Batterie leer ist usw.



    Bei dem Rasberry der als Monitor dienen soll sieht es bis jetzt dank deiner Hilfe so aus.



    Jetzt wäre es schön, wenn das am Monitor auch angezeigt wird.


    Im Rasberry der als Monitor funktioniert sieht es bei mir jetzt so aus. Darüber bekomme ich einmal die aktuelle Temperatur und auch die Leistung die gerade verbraucht angezeigt.


    Code
                 .then( json => {
                  document.querySelector("#ainTemp1").textContent = `${json.ainTemp1} °C ${json.ainPow1} W`;
                  document.querySelector("#ainTemp2").textContent = `${json.ainTemp2} °C ${json.ainPow2} W`;
                  document.querySelector("#ainTemp3").textContent = `${json.ainTemp3} °C ${json.ainPow3} W`;
                  document.querySelector("#ainTemp4").textContent = `${json.ainTemp4} °C ${json.ainPow4} W`;
              })         

    Fehler Meldungen übermittel ich so, das ich in der Variable $ainTemp1 eine Temperatur zwischen 90°C und 99°C angebe. Dadurch habe ich die Möglichkeit verschiedene Fehlermeldungen anzuzeigen.


    Im Raspberry "Wohnung" habe ich das so gelößt, abe ich das über eine IF Abfrage gelößt.


    Übertragen von Rasberry Wohnzimmer auf mein Monitor Projekt wäre das dann so:

    Code
      echo "  <a class='Ueberschrift_Temperatur'>Ventilator</a>";
      if ($ainTemp1 = "90") {
        echo "<a href='#' target='_parent'><button class='buttonTempFehler' id='ainTemp1'>ERROR</button></a>";
      } else {
        echo "<a href='#' target='_parent'><button class='buttonTemp' id='ainTemp1'>".$ainTemp1."".$ainPow1."</button></a>";
      }

    Nur weiß ich nicht wie die IF Anweisung lauten muss.

    Wenn du mir dabei noch einmal helfen könntest.