Auteur Topic: nas synology taak om zonnepanelen opbrengst naar pvoutput te uploaden  (gelezen 46666 keer)

Offline Techman

Re: nas synology taak om zonnepanelen opbrengst naar pvoutput te uploaden
« Reactie #105 Gepost op: 06 april 2024, 18:20:38 »
Ik had op mijn Nas 2 taken draaien die de omnik ovormers uitleest en deze upload naar PV-output.
Nadat ik mijn DS218+ heb geupdate naar DSM 7.1 werken deze taken niet meer.

Is er iemand die dit werkend heeft op DSM 7.1?
  • Mijn Synology: DS218+
  • HDD's: 2xWD
  • Extra's: 10GB RAM

Offline Briolet

  • Global Moderator
  • MVP
  • *
  • Bedankjes
  • -Gegeven: 180
  • -Ontvangen: 2680
  • Berichten: 16.584
Re: nas synology taak om zonnepanelen opbrengst naar pvoutput te uploaden
« Reactie #106 Gepost op: 07 april 2024, 10:28:34 »
Dat is wel een heel cryptische vraag, waar geen antwoord op te geven is.

In principe moeten alle scripts die onder dsm5 of 6 werkten ook onder de nieuwste dsm werken want het zijn gewoon native linux commando's.  Zonder te weten welke incourante commando's in je script staan, is jouw vraag niet te beantwoorden. Begin eens met de errors weer te geven die het script geeft.
  • Mijn Synology: DS415+
  • HDD's: 3x 3TB in SHR
  • Extra's: DS212J, RT1900ac

Offline Babylonia

  • MVP
  • *
  • Bedankjes
  • -Gegeven: 916
  • -Ontvangen: 1491
  • Berichten: 7.990
Re: nas synology taak om zonnepanelen opbrengst naar pvoutput te uploaden
« Reactie #107 Gepost op: 07 april 2024, 13:53:31 »
Een kennis van me leest "heel zijn huis" uit met Zigbee sensoren wat dan verder via het pakket  "Home Assistant" wordt aangestuurd.
Inclusief uitlezing van zonnepanelen / slimme meter uitlezing (via speciaal stekkertje / kabeltje op de slimme meter).
Met de hele rattenplan van statistieken en uitlezing van vermogens "per uur" of net wat je wilt.
Allemaal te bereiken via app / apps op de telefoon.

Zover ik weet doet hij niks met scripts. Alles via de opties en menu instellingen van Home Assisant.

Echter nog wel met  DSM 6.2.4   omdat een heleboel externe pakketten niet draaien onder DSM 7.x
waaronder  "indertijd"  toen DSM 7.x zijn intrede deed,  ook dat Home Assistant.
Inmiddels zou dat allemaal wel weer zijn aangepast door de ontwikkelaars van Home Assistant?
Maar vooralsnog heeft hij niet de stap gezet naar DSM 7.x

Bij die kennis, de zonnepanelen uitlezing is nog maar het kleinste deel van zijn  IoT  aangestuurde zaken.
  • Elke verwarmingsradiator in huis is op afstand via app te regelen. (Naast de thermostaat functie zelf op radiateuren).
  • Lampen, gaan automatisch aan/uit waar men loopt.
    Of anders wel via app te regelen - idem helderheid van verlichting, en diverse lampen ook de kleur ervan.
  • Idem voor tuinverlichting - en verlichting in schuurtje.
  • Automatische beregening van beplanting in de tuin in grote "potten" met vochtigheidsmeting van de grond.
    Vanuit opvang regenwater.
    Dan wel keuze via aanvullend leidingwater, als in situaties van droogte er te weinig buffer is van opgevangen regenwater.
  • Is nu bezig met alarm functie voor garage wat verder weg van huis. Via mobiel internet met een TP-Link - LTE router.
DS213j   2x 6TB WD Ultrastar     -  DSM 6.2  -  glasvezel 1 Gbps  (Odido) ZyXEL EX5601 + RT1900ac (AP) + Apple Airport Express (bridge)
DS415+  4x 4TB HGST Deskstar  -  DSM 6.2  -  glasvezel 100/100  (KPN) + 2x "SupeWifi" + RT6600ax + RT2600ac + MR2200ac  -  NVDIA Shield TV Pro
DS920+  4x 4TB WD Red Plus     -  DSM 6.2         +         DS420j   4x 4TB WD Red Plus   -  DSM 7.2.2
             Ervaring met routers van  DrayTek, Fritzbox, TP-Link  -  switches Netgear, ZyXEL  -  Access Points TP-Link, Grandstream.....

Offline Techman

Re: nas synology taak om zonnepanelen opbrengst naar pvoutput te uploaden
« Reactie #108 Gepost op: 07 april 2024, 16:42:46 »
Dat is wel een heel cryptische vraag, waar geen antwoord op te geven is.

In principe moeten alle scripts die onder dsm5 of 6 werkten ook onder de nieuwste dsm werken want het zijn gewoon native linux commando's.  Zonder te weten welke incourante commando's in je script staan, is jouw vraag niet te beantwoorden. Begin eens met de errors weer te geven die het script geeft.

Excuus, ik ben inderdaad een beetje te summier geweest.
Via de taakplanner start ik ieder minuut het volgende script https://github.com/Woutrrr/Omnik-Data-Logger/

Na een update naar DSM 7.1 krijg ik de volgende foutmeldingen:

Taak: Omnik_export
Starttijd: Sun, 07 Apr 2024 16:39:23 GMT
Stoptijd: Sun, 07 Apr 2024 16:39:27 GMT
Huidige status: 1 (Onderbroken)
Standaard output/fout:
Traceback (most recent call last):
File "/usr/lib/python3.8/configparser.py", line 789, in get
value = d[option]
File "/usr/lib/python3.8/collections/__init__.py", line 898, in __getitem__
return self.__missing__(key) # support subclasses that define __missing__
File "/usr/lib/python3.8/collections/__init__.py", line 890, in __missing__
raise KeyError(key)
KeyError: 'filename'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/volume1/cron/Omnik-Data-Logger-master/OmnikExport.py", line 198, in
omnik_exporter.run()
File "/volume1/cron/Omnik-Data-Logger-master/OmnikExport.py", line 40, in run
self.build_logger(self.config)
File "/volume1/cron/Omnik-Data-Logger-master/OmnikExport.py", line 127, in build_logger
'filename': self.__expand_path(config.get('log',
File "/usr/lib/python3.8/configparser.py", line 792, in get
raise NoOptionError(option, section)
configparser.NoOptionError: No option 'filename' in section: 'log'

Ik hoop dat ik hiermee voldoende informatie heb gegeven m het probleem te kunnen verhelpen.

  • Mijn Synology: DS218+
  • HDD's: 2xWD
  • Extra's: 10GB RAM

Offline Birdy

  • Global Moderator
  • MVP
  • *
  • Bedankjes
  • -Gegeven: 1399
  • -Ontvangen: 8046
  • Berichten: 44.176
  • Fijne feestdagen.......
    • Truebase
Re: nas synology taak om zonnepanelen opbrengst naar pvoutput te uploaden
« Reactie #109 Gepost op: 07 april 2024, 16:57:42 »
Misschien is python3.8 niet meer van toepassing in DSM 7.1, dus misschien die upgraden ?
Of is misschien al upgraded maar je script niet ?


CS406      DSM 2.0-0731    DS508      DSM 4.0-2265      DS411+II  DSM 6.2.4-25556-8   DS115J    DSM 7.1.1-42962-5   DS918+    DSM 6.2.4-25556-8
DS107+     DSM 3.1-1639    DS411slim  DSM 6.2.4-25556   DS213J    DSM 6.2.4-25556-7   DS1515+   DSM 6.2.4-25556-8   DS220+    DSM 7.2.2-72806-2
DS107+     DSM 3.1-1639    DS111      DSM 5.2-5967-9    DS413J    DSM 6.2.3-25426-2   DS716+II  DSM 7.2.2-72806-2   RT2600ac  SRM 1.3.1-9346-12
BeeDrive   1TB             BeeServer  BSM 1.2-65567                                                                 MR2200ac  SRM 1.3.1-9346-12

Offline Briolet

  • Global Moderator
  • MVP
  • *
  • Bedankjes
  • -Gegeven: 180
  • -Ontvangen: 2680
  • Berichten: 16.584
Re: nas synology taak om zonnepanelen opbrengst naar pvoutput te uploaden
« Reactie #110 Gepost op: 07 april 2024, 22:40:58 »
Even voor het gemak het main script van github:

#!/usr/bin/python
"""OmnikExport program.

Get data from an omniksol inverter with 602xxxxx - 606xxxx ans save the data in
a database or push to pvoutput.org.
"""
import socket  # Needed for talking to inverter
import sys
import logging
import logging.config
import ConfigParser
import os
from PluginLoader import Plugin
import InverterMsg  # Import the Msg handler


class OmnikExport(object):
    """
    Get data from Omniksol inverter and store the data in a configured output
    format/location.

    """

    config = None
    logger = None

    def __init__(self, config_file):
        # Load the setting
        config_files = [self.__expand_path('config-default.cfg'),
                        self.__expand_path(config_file)]

        self.config = ConfigParser.RawConfigParser()
        self.config.read(config_files)

    def run(self):
        """Get information from inverter and store is configured outputs."""

        self.build_logger(self.config)

        # Load output plugins
        # Prepare path for plugin loading
        sys.path.append(self.__expand_path('outputs'))

        Plugin.config = self.config
        Plugin.logger = self.logger

        enabled_plugins = self.config.get('general', 'enabled_plugins')\
                                     .split(',')
        for plugin_name in enabled_plugins:
            plugin_name = plugin_name.strip()
            self.logger.debug('Importing output plugin ' + plugin_name)
            __import__(plugin_name)

        # Connect to inverter
        ip = self.config.get('inverter', 'ip')
        port = self.config.get('inverter', 'port')

        for res in socket.getaddrinfo(ip, port, socket.AF_INET,
                                      socket.SOCK_STREAM):
            family, socktype, proto, canonname, sockadress = res
            try:
                self.logger.info('connecting to {0} port {1}'.format(ip, port))
                inverter_socket = socket.socket(family, socktype, proto)
                inverter_socket.settimeout(10)
                inverter_socket.connect(sockadress)
            except socket.error as msg:
                self.logger.error('Could not open socket')
                self.logger.error(msg)
                sys.exit(1)

        wifi_serial = self.config.getint('inverter', 'wifi_sn')
        inverter_socket.sendall(OmnikExport.generate_string(wifi_serial))
        data = inverter_socket.recv(1024)
        inverter_socket.close()

        msg = InverterMsg.InverterMsg(data)

        self.logger.info("ID: {0}".format(msg.id))

        for plugin in Plugin.plugins:
            self.logger.debug('Run plugin' + plugin.__class__.__name__)
            plugin.process_message(msg)

    def build_logger(self, config):
        # Build logger
        """
        Build logger for this program


        Args:
            config: ConfigParser with settings from file
        """
        log_levels = dict(debug=10, info=20, warning=30, error=40, critical=50)
        log_dict = {
            'version': 1,
            'formatters': {
                'f': {'format': '%(asctime)s %(levelname)s %(message)s'}
            },
            'handlers': {
                'none': {'class': 'logging.NullHandler'},
                'console': {
                    'class': 'logging.StreamHandler',
                    'formatter': 'f'
                },
                'file': {
                    'class': 'logging.FileHandler',
                    'filename': self.__expand_path(config.get('log',
                                                              'filename')),
                    'formatter': 'f'},
            },
            'loggers': {
                'OmnikLogger': {
                    'handlers': config.get('log', 'type').split(','),
                    'level': log_levels[config.get('log', 'level')]
                }
            }
        }
        logging.config.dictConfig(log_dict)
        self.logger = logging.getLogger('OmnikLogger')

    def override_config(self, section, option, value):
        """Override config settings"""
        self.config.set(section, option, value)

    @staticmethod
    def __expand_path(path):
        """
        Expand relative path to absolute path.

        Args:
            path: file path

        Returns: absolute path to file

        """
        if os.path.isabs(path):
            return path
        else:
            return os.path.dirname(os.path.abspath(__file__)) + "/" + path

    @staticmethod
    def generate_string(serial_no):
        """Create request string for inverter.

        The request string is build from several parts. The first part is a
        fixed 4 char string; the second part is the reversed hex notation of
        the s/n twice; then again a fixed string of two chars; a checksum of
        the double s/n with an offset; and finally a fixed ending char.

        Args:
            serial_no (int): Serial number of the inverter

        Returns:
            str: Information request string for inverter
        """
        response = '\x68\x02\x40\x30'

        double_hex = hex(serial_no)[2:] * 2
        hex_list = [double_hex[i:i + 2].decode('hex') for i in
                    reversed(range(0, len(double_hex), 2))]

        cs_count = 115 + sum([ord(c) for c in hex_list])
        checksum = hex(cs_count)[-2:].decode('hex')
        response += ''.join(hex_list) + '\x01\x00' + checksum + '\x16'
        return response


if __name__ == "__main__":
    omnik_exporter = OmnikExport('config.cfg')
    omnik_exporter.run()

Ik gok dat het aan de gebruikte python versie ligt, zoals Birdy aangeeft. Maar ik ben verre van een expert in python. Ik wist niet een dat je daar object geörienteert mee kunt programmeren, zoals in dit script gebeurd.
  • Mijn Synology: DS415+
  • HDD's: 3x 3TB in SHR
  • Extra's: DS212J, RT1900ac


 

photoserver synology

Gestart door ErwinBoard Photo Station / Photos

Reacties: 2
Gelezen: 7437
Laatste bericht 20 juni 2006, 10:21:27
door Bob
Vragen over Synology DS-106e

Gestart door EastmasterBoard NAS hardware vragen

Reacties: 55
Gelezen: 40581
Laatste bericht 06 november 2006, 23:09:28
door Anonymous
Probleem met Synology DS-106e

Gestart door dutchmoleBoard NAS hardware vragen

Reacties: 8
Gelezen: 8717
Laatste bericht 03 september 2006, 22:37:32
door Anonymous
firmware update Synology DS-106e

Gestart door EastmasterBoard Web Station

Reacties: 10
Gelezen: 12144
Laatste bericht 06 september 2006, 12:31:33
door Anonymous
Synology DS-101j en HP PSC 1350

Gestart door AnonymousBoard Externe harddisks en Printers

Reacties: 3
Gelezen: 4938
Laatste bericht 04 augustus 2006, 00:26:05
door Anonymous