Welcome, Guest
You have to register before you can post on our site.

Username
  

Password
  





Search Forums

(Advanced Search)

Forum Statistics
» Members: 378
» Latest member: Ferry.Icker
» Forum threads: 120
» Forum posts: 457

Full Statistics

Online Users
There are currently 17 online users.
» 0 Member(s) | 17 Guest(s)

Latest Threads
Prometheus export
Forum: SmartPi - English
Last Post: cjne
17.04.2019, 13:31
» Replies: 1
» Views: 365
Lebensdauer SD-Speicher /...
Forum: SmartPi - Deutsch
Last Post: jens
15.04.2019, 09:40
» Replies: 1
» Views: 233
Neue Version 0.9.1
Forum: SmartPi - Deutsch
Last Post: andreasploetz
13.04.2019, 08:04
» Replies: 9
» Views: 5.294
Verwendung von mqtt
Forum: SmartPi - Deutsch
Last Post: Swagner
29.03.2019, 14:54
» Replies: 25
» Views: 11.434
Make changes on SmartPi's...
Forum: SmartPi - English
Last Post: Mattanis
29.03.2019, 13:28
» Replies: 2
» Views: 668
Make changes on SmartPi's...
Forum: SmartPi - English
Last Post: Mattanis
29.03.2019, 11:29
» Replies: 2
» Views: 211
Enerserve smartpi 2.0 läu...
Forum: SmartPi - Deutsch
Last Post: jens
26.03.2019, 16:35
» Replies: 2
» Views: 204
Bekomme den SmartPi 2.0 n...
Forum: SmartPi - Deutsch
Last Post: jens
25.03.2019, 10:08
» Replies: 3
» Views: 207
Daten werden nicht mehr b...
Forum: SmartPi - Deutsch
Last Post: jens
22.03.2019, 13:36
» Replies: 1
» Views: 128
mein smartpi hängt sich a...
Forum: SmartPi - Deutsch
Last Post: jens
22.03.2019, 13:26
» Replies: 1
» Views: 120

 
  Access-Control-Allow-Origin
Posted by: wellend - 05.09.2018, 21:45 - Forum: SmartPi - Deutsch - Replies (3)

Guten Abend zusammen,

Ich würde gerne per HTTP GET Request die JSON Daten in einer Javascript Seite verarbeiten. An welcher Stelle kann die Einstellung für den Webserver gesetzt werden, dass im Header entsprechende Requests von extern erlaubt sind?

Vielen Dank vorab!
Gruß,
David

Print this item

  Node-RED
Posted by: bksolo - 04.09.2018, 15:54 - Forum: SmartPi - Deutsch - No Replies

Ich habe die ersten Schritte mit Node-RED erfolgreich hinter mir. Habe Node.js und windows-build-tools auf Windows 10 installiert.

Die Paletten habe ich mit sqlite und dashboard ergänzt.  Dann habe ich die sqlite db smartpi_logdata_201808.db vom Raspberry heruntergeladen.
Nun kann ich diese Daten über eine Flow mit SELECT strftime('%d.%m.%Y',date),sum(energy_pos_balanced) from smartpi_logdata_201809 GROUP BY strftime('%d-%m-%Y',date) aus der DB lesen.

Was ich mich nun frage ist, wie kann ich deine flows laden, die unter SmartPi-master\node stehen?

Besten Dank, Bruno

Print this item

  230VAC Energiemessung und Schaltung
Posted by: bksolo - 02.09.2018, 17:55 - Forum: Projekte - No Replies

Ich habe den SmartPi für einen Einsatz von nur einer Phase 230 VAC vorgesehen. Will im Winter die 230 VAC Leistungsaufnahme des Wohnmobils messen. Das WoMo steht zur Überwinterung an einem Ort, wo ich keinen direkten Internetzugang habe. Dazu wird über ein UMTS-Stick die Verbindung zum Raspberry Pi per SMS erstellt. Den aktuellen kumulierten Leistungswert will ich über SMS abrufen können, weiter will ich per SMS die 230 VAC Speisung zum Wohnmobil ein- und ausschalten. Weitere Funktionen werden sich noch ergeben.

Ich verwende auf meinen Raspberry Pi das wvdial über einen HUAWEI LTE Stick E3372h-607 und Swisscom SIM Prepaid. Über PuTTY und WinSCP und Yaler (Yaler is a relay infrastructure for secure access) kann ich erfolgreich darauf zugreifen. 
Zusätzlich habe ich mit SMSTools3 und Scripting eine Steuerung mit SMS erstellt. Den aktuellen Energiewert und Tageswert in kWh kann ich per SMS zu jeder Zeit abrufen.

Vielen Dank an Alle die im Internet Beiträge veröffentlichen - daraus ergeben sich immer wieder Ideen wie die Programmierung erfolgen kann.

Prinzipschaltbild:

   

Aufbaubild:                                                           SMS Leistungsabfrage pro Tag und Monat:

                        

Nachfolgend die wichtigsten Programmteile die ich dazu erstellt habe.

Automatischer Reboot des Raspberry Pi mit rc.local:

Code:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
 printf "My IP address is %s\n" "$_IP"
fi

echo "++++++++++++++ rc.local wird ausgeführt"  > /home/pi/boot.log
sleep 10
lsusb >> /home/pi/boot.log
echo "------------- rc.local usb_modeswitch"  >> /home/pi/boot.log
usb_modeswitch -v 12d1 -p 1f01 -M "55534243123456780000000000000011063000000100010000000000000000"
sleep 3
lsusb >> /home/pi/boot.log
sleep 3
echo "------------- rc.local sms3 restart"  >> /home/pi/boot.log
sudo /etc/init.d/sms3 restart >> /home/pi/boot.log
sleep 3
echo "------------- rc.local wvdial.conf copy"  >> /home/pi/boot.log
sudo cp /etc/wvdial.conf.org /etc/wvdial.conf
sleep 3
echo "------------- rc.local start wvdial"  >> /home/pi/boot.log
sudo wvdial swisscom >> /home/pi/boot.log &
sleep 20
/usr/local/bin/send_sms.sh 4179XXXXXXX "SMS Server wurde gestartet"
echo "------------- rc.local wird verlassen"  >> /home/pi/boot.log

exit 0

sms_handler.sh
Code:
#!/bin/bash

TOOLS_DIR=/usr/local/bin

# this file should contain variable $PHONE with your phone number
. ${TOOLS_DIR}/sms.conf

FWD_NUMBER=$PHONE
timestamp=`date "+%Y%m%d-%H%M%S"`
SMS_PROG=${TOOLS_DIR}/send_sms.sh

#run this script only when a message was received.
if [ "$1" != "RECEIVED" ]; then exit; fi;

#Extract data from the SMS file
SENDER=`formail -zx From: < $2`
TEXT=`formail -I "" <$2 | sed -e"1d"`
mon_tag=${TEXT:8:10}
TEXT=${TEXT:0:7}

TMPINFILE=/tmp/sms_in_${SENDER}_${timestamp}.txt
TMPOUTFILE=/tmp/sms_out_${SENDER}_${timestamp}.txt

CURRENT=$(date -u '+%F')
akttimestamp=`date "+%d.%m.%Y %H:%M:%S"`
echo  $akttimestamp > $TMPINFILE

if [ "$SENDER" = "$FWD_NUMBER" ] ; then
       case "$TEXT" in
       "cmd#011")
               if [ "$mon_tag" == "Er1" ] || [ "$mon_tag" == "Ar1" ]
               then
                 sudo /usr/local/bin/gpio_ausgang.py  ${mon_tag} >> $TMPINFILE 2>&1
               else
                 sudo /usr/local/bin/gpio_ausgang.py RelStatus >> $TMPINFILE 2>&1
               fi
               echo "Result: $?" >> $TMPINFILE
       ;;
       "cmd#021")
               if [ "$mon_tag" == "Er2" ] || [ "$mon_tag" == "Ar2" ]
               then
                 sudo /usr/local/bin/gpio_ausgang.py  ${mon_tag} >> $TMPINFILE 2>&1
               else
                 sudo /usr/local/bin/gpio_ausgang.py RelStatus >> $TMPINFILE 2>&1
               fi
               echo "Result: $?" >> $TMPINFILE
       ;;
       "cmd#031")
               if [ "$mon_tag" == "Ersm" ] || [ "$mon_tag" == "Arsm" ]
               then
                 sudo /usr/local/bin/gpio_ausgang.py  ${mon_tag} >> $TMPINFILE 2>&1
               else
                 sudo /usr/local/bin/gpio_ausgang.py RelStatus >> $TMPINFILE 2>&1
               fi
               sudo /usr/local/bin/gpio_ausgang.py EINRSPI >> $TMPINFILE 2>&1
               echo "Result: $?" >> $TMPINFILE
       ;;
       "cmd#050")
               sudo /usr/local/bin/gpio_ausgang.py RelStatus >> $TMPINFILE 2>&1
               echo "Result: $?" >> $TMPINFILE
       ;;
       "cmd#111")
               sudo /usr/local/bin/tag_monat_energie.py ${mon_tag} >> $TMPINFILE 2>&1
               echo "Result: $?" >> $TMPINFILE
       ;;
       "cmd#997")
               sudo /etc/init.d/sms3 restart >> $TMPINFILE 2>&1
               echo "Result: $?" >> $TMPINFILE
       ;;  
       "cmd#998")
               sudo reboot
       ;;
       "cmd#999")
               sudo shutdown -h now
       ;;
       *)
               echo "Available CMD list:" > $TMPINFILE
               echo "cmd#011 - Relais 1 Er1/Ar1 " >> $TMPINFILE
               echo "cmd#021 - Relais 2 Er2/Ar2 " >> $TMPINFILE
               echo "cmd#031 - Relais SMPi Ersm/Arsm " >> $TMPINFILE
               echo "cmd#050 - Relais Status " >> $TMPINFILE
               echo "cmd#111 - Leistung YYYYMM Tag/Mon " >> $TMPINFILE
               echo "cmd#997 - Restart SMS3 " >> $TMPINFILE
               echo "cmd#998 - Reboot RPi " >> $TMPINFILE
               echo "cmd#999 - Shutdown RPi " >> $TMPINFILE
       ;;
       esac
else
       echo "SMS from: $SENDER" > $TMPINFILE
       echo "Text: $TEXT" >> $TMPINFILE
fi

echo "To: $FWD_NUMBER" > $TMPOUTFILE
echo "" >> $TMPOUTFILE
cat $TMPINFILE >> $TMPOUTFILE
cp $TMPOUTFILE /var/spool/sms/outgoing/

gpio_ausgang.py
Code:
#!/usr/bin/env python
#coding: utf8
#
# Bruno Solothurnmann
# August 2018
#

import time
import RPi.GPIO as GPIO
import sys

def main():
   script = sys.argv[0]
   befehl = sys.argv[1]

   try:
       GPIO.setwarnings(False)
       # Zählweise der Pins festlegen
       GPIO.setmode(GPIO.BOARD)

       # Pin 31 (GPIO 06) als Ausgang festlegen - Ansteuerung LED SmartPI)
       GPIO.setup(31, GPIO.OUT)
       # Pin 32 (GPIO 12) als Ausgang festlegen - Ansteuerung Relais SmartPI)
       GPIO.setup(32, GPIO.OUT)
       # Pin 18 (GPIO 24) als Ausgang festlegen - Ansteuerung Relais 2 (externe Platine)
       GPIO.setup(18, GPIO.OUT)
       # Pin 22 (GPIO 25) als Ausgang festlegen - Ansteuerung Relais 1 (externe Platine)
       GPIO.setup(22, GPIO.OUT)

       if befehl  == "Er1":   #                 Relais 1 und LED SmartPi einschalten
           GPIO.output(22, GPIO.HIGH)
           GPIO.output(31, GPIO.HIGH)
           print "Relais 1 Ein"
       elif befehl == "Ar1":   #                 Relais 1 und LED SmartPi ausschalten
           GPIO.output(22, GPIO.LOW)
           GPIO.output(31, GPIO.LOW)
           print "Relais 1 Aus"
       elif befehl == "Er2":  #                 Relais 2 einschalten
           GPIO.output(18, GPIO.HIGH)
           print "Relais 2 Ein"
       elif befehl == "Ar2":  #                 Releais 2 ausschalten
           GPIO.output(18, GPIO.LOW)
           print "Relais 2 Aus"
       elif befehl == "Ersm":  #                 Relais SmartPi einschalten
           GPIO.output(32, GPIO.HIGH)
           print "Relais SmartPi Ein"
       elif befehl == "Arsm":  #                 Relais SmartPi ausschalten
           GPIO.output(32, GPIO.LOW)
           print "Relais SmartPi Aus"
       elif befehl == "RelStatus":  #             Relais Status
          if GPIO.input(22) == GPIO.HIGH:
            print "Relais 1 Ein"
          else:
            print "Relais 1 Aus"
          if GPIO.input(18) == GPIO.HIGH:
            print "Relais 2 Ein"
          else:
            print "Relais 2 Aus"
          if GPIO.input(32) == GPIO.HIGH:
            print "Relais SmartPi Ein"
          else:
            print "Relais SmartPi Aus"
       else:
           print "Befehl = " + befehl

   except:
           # this catches ALL other exceptions including errors.  
           # You won't get any error messages for debugging  
           # so only use it once your code is working  
           print "Other error or exception occurred!"  
           
if (__name__ == "__main__" ):
   main();

tag_monat_energie.py
Code:
#!/usr/bin/env python
#coding: utf8
#
# Bruno Solothurnmann
# August 2018
# Ausgabe der Tages- und Monatswerte in kWh von der SmartPi SQLite DB
#
# Aufruf: /usr/local/bin/tag_monat_energie.py (Bereich) (Tag_Monat)
# Bereich in YYYYMM  
# und Tag_Monat in Tag oder Monat
#

import time
import sys
import sqlite3

def main():
   script = sys.argv[0]
   bereich = sys.argv[1]
   tag_monat = sys.argv[2]

   try:
      sqlite_file = '/var/smartpi/db/smartpi_logdata_%s.db' % (bereich)
      conn = sqlite3.connect(sqlite_file)
      c = conn.cursor()
      if tag_monat  == "Tag":
        sql_text = "SELECT strftime('%d.%m.%Y',date),sum(energy_pos_balanced) FROM smartpi_logdata_{} WHERE date BETWEEN '2018-08-01 00:00:01' AND '2022-08-31 23:59:59' GROUP BY strftime('%d-%m-%Y',date)".format(bereich)
      elif tag_monat == "Mon":
        sql_text = "SELECT strftime('%m.%Y',date),sum(energy_pos_balanced) FROM smartpi_logdata_{} WHERE date BETWEEN '2018-08-01 00:00:01' AND '2022-08-31 23:59:59' GROUP BY strftime('%m-%Y',date)".format(bereich)
      else:
        print "Nur Tag oder Mon zugelassen"
        sys.exit()
      c.execute(sql_text)
      all_rows = c.fetchall()

      for member in all_rows:
         dat =  member[0]
         wert = float(member[1])/1000
         wert = "{:.3f}".format(wert)
         if tag_monat  == "Tag":
            print "Tag " + dat + " " + wert + " kWh"
         else:
            print "Monat " + dat + " " + wert + " kWh"

   except:
           print "Other error or exception occurred!"

   finally:
      conn.close()

if (__name__ == "__main__" ):
   main();
Über die SQL-Abfrage sind die kumulierten Daten aus der SQLite DB sehr rasch verfügbar. 
Eine Erweiterung habe ich noch vor, die erstellten Daten in eine weitere SQLite DB zu schreiben. Damit können dann auch entsprechende Graphen erstellt werden.

Ich bin kein Profi in der Programmierung - es funktioniert aber seit Tagen ohne Probleme.
Gerne stehe ich für Fragen und Erklärungen zur Verfügung.

Gruss, Bruno

Print this item

  SmartPi Daten
Posted by: bksolo - 29.08.2018, 14:16 - Forum: SmartPi - Deutsch - Replies (2)

Mit recht viel Aufwand konnte ich die entsprechenden Daten, die durch die Software vom SmartPi erstellt wird, finden. 
Die Dokumentation ist unvollständig, die Ablage der Daten an verschiedensten Orten. SQLite DB (pro Minute), Datei (pro 5 Sekunden), Webseite und REST-API. 
Wer nicht GO und alle dazu geladenen Programme und Libraries kennt, ist kaum in der Lage in vernünftiger Zeit etwas zu ergänzen. Nicht alle Daten sind einfach verfügbar bzw. zugreifbar.

Zusätzlich habe ich eine REST-API /api/dayvalues/1/energy_pos/from/2018-08-19T00:00:00+02:00/to/2018-08-26T21:49:14+02:00 gefunden, die ein Tageswert der verbrauchten Energie vom eingegebenen Datum in Watt zurück gibt.

Ich kann auf meinen Raspberry Pi mit wvdial über einen HUAWEI LTE Stick E3372h-607 und Swisscom SIM Prepaid über PuTTY und WinSCP und Yaler (Yaler is a relay infrastructure for secure access to embedded systems) erfolgreich darauf zugreifen. 
Zusätzlich habe ich mit SMSTools3 und Scripting eine Kommandsteuerung mit SMS erstellt. Den aktuellen Energiewert in Watt oder den Tageswert in Watt kann ich per SMS abrufen, über ein externes Relais den 230VAC Speisung ein- und ausschalten.  

Gerne hätte ich mehr kumulierte Daten wie Tagesverbrauch, Wochenverbrauch und Monatsverbrauch in der DB gespeichert. Ich bin an diesen gerade so stark interessiert wie die aktuellen Werte.

Gerne höre ich von euch was ihr damit gemacht habt, was eure Erfahrungen sind.
Gruss, Bruno

Print this item

  https
Posted by: quadro - 04.08.2018, 12:43 - Forum: SmartPi - English - Replies (2)

The smartpi server software creates a webserver with access on the default port 1080 (changeable).
Is it possible to access the smartpi using the https protocol in place of the default http?

Print this item

  Image too large
Posted by: quadro - 01.08.2018, 10:43 - Forum: SmartPi - English - Replies (2)

I downloaded the new image with version 0.9.1, but I cannot write it on a SD card.
I tried several SD cards of 16 Gbyte, but when I write the image on the SD card, it always said that I need more space.
I tried writing with Win32DiskImage and Etcher, they gave the same result.
It seems that most SD cards or not really 16 Gbyte, but only 15,5 Gbyte.
Is it possible to make the existing image smaller (for example 15 Gbyte) so it will fit any SD card of 16 Gb?

Print this item

Photo First project with Smartpi 1.0
Posted by: quadro - 01.08.2018, 10:29 - Forum: Projects - No Replies

I monitor my home installation with solar panels and an electric car connected to the grid.
   
   

In addition I save alle measurements in a web based platform for later analysis. Every month the 1 minute measurements in my database are recalculated to have measurements every 15 minutes.
Those 15 minute measurements are a standard in Belgium and use less space in the database, because I afterwards delete the 1 minute measurements.
   
   
   

Print this item

  SmartPi on 1-phase system
Posted by: Pierre - 08.05.2018, 15:27 - Forum: SmartPi - English - Replies (4)

Dear,

I the case of a 1-phase system with 3 or 4 current measurement, I know I have to power the SmartPi with N and L1 supplied, but how can I associate the I2-4 with the voltage of L1 ?

Can I connect L1 also on L2 and L3 on the SmartPi ?

Thank you,

Pierre

Print this item

  Software Installation Problems
Posted by: NoSpark - 07.05.2018, 00:20 - Forum: SmartPi - English - Replies (2)

Good day to the Forum!

My SmartPi has been down ever since the introduction of Node Red.
When I installed the update, several months ago, the install did not go well and my SmartPi has never recovered.

My SmartPi consists of:
Raspberry Pi 3 Model B
The original Kickstarter SmartPi board.

This past weekend I tried again to install the new software version and here is my experience.
I did a fresh install of Raspbian Stretch with Desktop from the Pi site.
I enabled SSH and VNC.
The install went well and worked as expected.

Then I followed the instructions at: 
SmartPi Installation
and installed the .deb archive for stretch.

Now the problems:
1 - When Installed the archive, it stopped loading saying that "npm" was not installed.
OK, so I went online and installed it.  That cleared that error on the next install attempt.
(that was a real experience)

2 - The install indicated that a directory was missing "init.d".
OK, I manually created that directory and the install completed.


I noted the following problems:
1 - SmartPi does not start at boot.  I have to start it manually using the instructions at SmartPi Installation.
2 - The server is not working correctly, it will only serve the page ONCE, then I have to reboot and restart manually.
The data it dis show looked fairly correct.

Clearly, I have not installed the new version correctly.
I am out of ideas, and my skill with the Pi is very limited and I need help.

I would appreciate a very clear and detailed instruction set to reinstall my SmartPi software correctly.

The new software looks very promising and I and anxious to get my SmartPi going again.

Cheers,
NoSpark

Print this item

  Auslesen der Daten mit Python
Posted by: hessam - 18.04.2018, 14:06 - Forum: SmartPi - Deutsch - Replies (1)

Code:
sleep(sleeptime)                            # warten
       #print ("warten 2: Schleife")
file = open('/var/tmp/smartpi/values')
messwerte = file.readlines()
file.close
print ("Messwerte: ", messwerte)
print (" ")

for line in messwerte:
   wertnr = 0
   wert   = line.split(";")[wertnr]  # Messwert extrahieren
   #wert[10] = ";"
   wert0  = wert.split(" ")[0]
   wert1  = wert.split(" ")[1]
   wert   = wert0 + "; " + wert1
   werttxt = "> Datum  : " + wert + "   Rohdaten"
   print ( werttxt )
   mess[wertnr] = " " + wert

for wertnr in range(1, 7):
   wert   = line.split(";")[wertnr]        # Messwert Strom
   wertf = float(wert)
   wertf = wertf / wertkorr[wertnr]
   werts = '%6.2f'%wertf
   mess[wertnr] = werts
   werttxt = "> Wert" + '%2.0f'%wertnr  + " :  " + werts + " A   Strom      "  + wert
   print ( werttxt )
Hallo,
ich versuche die Daten zum Beispeil Leistung mit Hilfe von Python auszulesen allerdings weiß ich nicht wo mein Fehler im Programm ist. Ich bin ei Anfänger mit dem Raspberry  und SmartPi. Ich wurde mich über eure Hilfe freuen. Zur Zeit versuche ich nur den Strom anzuzeigen allerdings klappt es nicht.  Ich hab mir das Programm im Forum als Hilfe genommen, da dort ebenfalls versucht wurde mittels Python auszulesen.
Bedanke mich im Voraus

Print this item